diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 4bc3dc693..fa8dc86b4 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -61,14 +61,14 @@ f84ae17615c506bf98c575bb800d2cf3b793df4d # 2014-01-11 Updated license to version 2. d520addb9bfdf552881cb6871d70159a80e1ff6b -# 2013-10-03 9a347d5eb8ad095c5e739d959de485b6add7f0b3 -Updated license. +# 2013-10-03 Updated license. +9a347d5eb8ad095c5e739d959de485b6add7f0b3 # 2013-10-01 Minor update to the license to include education. 47ce2a40c18b8ea471e6004f7e2c6cbf5b36af76 -# 2013-09-20 e2fccf72d6541c598172a538d4d497e6d13340cc -License update. +# 2013-09-20 License update. +e2fccf72d6541c598172a538d4d497e6d13340cc # 2013 License headers. 4edc23ac2f1c00782b4f637fb2543d784bd8dda9 diff --git a/.github/actions/setup-godot-deps/action.yml b/.github/actions/setup-godot-deps/action.yml index ee33c1f38..8fd40040e 100644 --- a/.github/actions/setup-godot-deps/action.yml +++ b/.github/actions/setup-godot-deps/action.yml @@ -24,4 +24,9 @@ runs: run: | python -c "import sys; print(sys.version)" python -m pip install scons==4.4.0 - scons --version \ No newline at end of file + scons --version + + - name: Setup dotnet 6 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '6.0.x' \ No newline at end of file diff --git a/.github/workflows/spine-godot-v4-all.yml b/.github/workflows/spine-godot-v4-all.yml new file mode 100644 index 000000000..7920d48b2 --- /dev/null +++ b/.github/workflows/spine-godot-v4-all.yml @@ -0,0 +1,26 @@ +name: Build spine-godot (All Godot 4.x versions) + +on: + push: + paths: + - ".github/workflows/spine-godot.yml" + - 'spine-godot/**' + - 'spine-cpp/**' + workflow_dispatch: + +jobs: + build-versions: + strategy: + matrix: + version: + [ + {"tag": "4.0.4-stable", "version": "4.0.4.stable", "mono": false}, + {"tag": "4.1.1-stable", "version": "4.1.1.stable", "mono": false}, + {"tag": "4.1.1-stable", "version": "4.1.1.stable", "mono": true}, + ] + uses: ./.github/workflows/spine-godot-v4.yml + with: + godot_tag: ${{ matrix.version.tag }} + godot_version: ${{ matrix.version.version }} + godot_mono: ${{ matrix.version.mono }} + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/spine-godot-v4.yml b/.github/workflows/spine-godot-v4.yml index aaf4bc9b1..48813d85d 100644 --- a/.github/workflows/spine-godot-v4.yml +++ b/.github/workflows/spine-godot-v4.yml @@ -1,20 +1,44 @@ -name: Build and Publish Godot 4.0 editor and templates +name: Build spine-godot (Godot 4.x) on: - push: - paths: - - ".github/workflows/spine-godot.yml" - - 'spine-godot/**' - - 'spine-cpp/**' + workflow_call: + inputs: + godot_tag: + required: true + type: string + default: "Godot tag not specified!" + godot_version: + required: true + type: string + default: "Godot version not specified!" + godot_mono: + required: true + type: boolean + default: false workflow_dispatch: + inputs: + godot_tag: + required: true + type: string + default: "Godot tag not specified!" + godot_version: + required: true + type: string + default: "Godot version not specified!" + godot_mono: + required: true + type: boolean + default: false env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true EM_VERSION: 3.1.18 - GODOT_TAG: 4.0-stable - GODOT_VERSION: 4.0.stable + GODOT_TAG: ${{ inputs.godot_tag }} + GODOT_VERSION: ${{ inputs.godot_version }} + GODOT_MONO: ${{ inputs.godot_mono }} + GODOT_MONO_UPLOAD_SUFFIX: ${{ inputs.godot_mono == true && '-mono' || '' }} jobs: @@ -30,18 +54,18 @@ jobs: - name: Build Godot artifact shell: bash - run: | - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-v4.sh + run: | + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-v4.sh $GODOT_MONO - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: godot-editor-windows.zip - path: spine-godot/godot/bin/godot.windows.editor.x86_64.exe + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-windows', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + path: spine-godot/godot/bin/**/* godot-editor-linux: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 with: @@ -52,17 +76,17 @@ jobs: - name: Build Godot artifact shell: bash - run: | + run: | sudo apt-get update sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-v4.sh + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-v4.sh $GODOT_MONO - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: godot-editor-linux.zip - path: spine-godot/godot/bin/godot.linuxbsd.editor.x86_64 + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-linux', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + path: spine-godot/godot/bin/**/* godot-editor-macos: runs-on: macos-latest @@ -78,38 +102,40 @@ jobs: shell: bash run: | ./spine-godot/build/install-macos-vulkan-sdk.sh - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-v4.sh + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-v4.sh $GODOT_MONO pushd spine-godot/godot/bin zip -r godot-editor-macos.zip Godot.app - popd + popd - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: godot-editor-macos.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/godot-editor-macos.zip godot-template-ios: runs-on: macos-latest + if: ${{ inputs.godot_mono == false }} + steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | - ./spine-godot/build/install-macos-vulkan-sdk.sh + run: | + ./spine-godot/build/install-macos-vulkan-sdk.sh ./spine-godot/build/setup.sh $GODOT_TAG false ./spine-godot/build/build-templates-v4.sh ios - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: godot-template-ios.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-ios', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/ios.zip godot-template-macos: @@ -120,48 +146,48 @@ jobs: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | ./spine-godot/build/install-macos-vulkan-sdk.sh - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-templates-v4.sh macos + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-templates-v4.sh macos $GODOT_MONO - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: godot-template-macos.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/macos.zip godot-template-linux: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | sudo apt-get update sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-templates-v4.sh linux + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-templates-v4.sh linux $GODOT_MONO - name: Upload artifacts debug uses: actions/upload-artifact@v3 with: - name: godot-template-linux-debug.zip - path: spine-godot/godot/bin/linux_x11_64_debug + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + path: spine-godot/godot/bin/linux_debug.x86_64 - name: Upload artifacts release uses: actions/upload-artifact@v3 with: - name: godot-template-linux-release.zip - path: spine-godot/godot/bin/linux_x11_64_release + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + path: spine-godot/godot/bin/linux_release.x86_64 godot-template-windows: runs-on: windows-latest @@ -176,23 +202,24 @@ jobs: - name: Build Godot artifact shell: bash run: | - ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build-templates-v4.sh windows + ./spine-godot/build/setup.sh $GODOT_TAG false $GODOT_MONO + ./spine-godot/build/build-templates-v4.sh windows $GODOT_MONO - name: Upload artifacts debug uses: actions/upload-artifact@v3 with: - name: godot-template-windows-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/windows_debug_x86_64.exe - name: Upload artifacts release uses: actions/upload-artifact@v3 with: - name: godot-template-windows-release.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/windows_release_x86_64.exe godot-template-android: runs-on: ubuntu-20.04 + if: ${{ inputs.godot_mono == false }} steps: - uses: actions/checkout@v3 with: @@ -204,7 +231,7 @@ jobs: sudo rm -f /etc/apt/sources.list.d/* sudo cp -f spine-godot/build/sources.lst /etc/apt/sources.list sudo apt-get update - + - name: Set up Java 11 uses: actions/setup-java@v1 with: @@ -222,23 +249,25 @@ jobs: - name: Upload artifacts debug uses: actions/upload-artifact@v3 with: - name: godot-template-android-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/android_debug.apk - name: Upload artifacts release uses: actions/upload-artifact@v3 with: - name: godot-template-android-release.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/android_release.apk - name: Upload artifacts source uses: actions/upload-artifact@v3 with: - name: godot-template-android-source.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-source', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/android_source.zip godot-template-web: runs-on: ubuntu-20.04 + if: ${{ inputs.godot_mono == false }} + steps: - uses: actions/checkout@v3 with: @@ -247,105 +276,107 @@ jobs: - name: Set up Emscripten latest uses: mymindstorm/setup-emsdk@v11 with: - version: ${{env.EM_VERSION}} + version: ${{env.EM_VERSION}} - name: Verify Emscripten setup run: | emcc -v - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | ./spine-godot/build/setup.sh $GODOT_TAG false ./spine-godot/build/build-templates-v4.sh web - name: Upload artifacts debug uses: actions/upload-artifact@v3 with: - name: godot-template-web-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-web-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/web_debug.zip - name: Upload artifacts release uses: actions/upload-artifact@v3 with: - name: godot-template-web-release.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-web-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} path: spine-godot/godot/bin/web_release.zip upload-to-s3: needs: [godot-editor-windows, godot-editor-linux, godot-editor-macos, godot-template-ios, godot-template-macos, godot-template-windows, godot-template-linux, godot-template-android, godot-template-web] runs-on: ubuntu-latest + if: ${{ inputs.godot_mono == false }} + steps: - name: Download godot-editor-windows artifact uses: actions/download-artifact@v2 with: - name: godot-editor-windows.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-windows', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-editor-linux artifact uses: actions/download-artifact@v2 with: - name: godot-editor-linux.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-linux', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-editor-macos artifact uses: actions/download-artifact@v2 with: - name: godot-editor-macos.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-ios artifact uses: actions/download-artifact@v2 with: - name: godot-template-ios.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-ios', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-macos artifact uses: actions/download-artifact@v2 with: - name: godot-template-macos.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-windows-release artifact uses: actions/download-artifact@v2 with: - name: godot-template-windows-release.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-windows-debug artifact uses: actions/download-artifact@v2 with: - name: godot-template-windows-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-linux-release artifact uses: actions/download-artifact@v2 with: - name: godot-template-linux-release.zip - + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + - name: Download godot-template-linux-debug artifact uses: actions/download-artifact@v2 with: - name: godot-template-linux-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-android-release artifact uses: actions/download-artifact@v2 with: - name: godot-template-android-release.zip - + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + - name: Download godot-template-android-debug artifact uses: actions/download-artifact@v2 with: - name: godot-template-android-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-android-source artifact uses: actions/download-artifact@v2 with: - name: godot-template-android-source.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-android-source', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Download godot-template-web-release artifact uses: actions/download-artifact@v2 with: - name: godot-template-web-release.zip - + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-web-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + - name: Download godot-template-web-debug artifact uses: actions/download-artifact@v2 with: - name: godot-template-web-debug.zip + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-web-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} - name: Upload artifacts to S3 shell: bash @@ -362,7 +393,73 @@ jobs: aws s3 cp godot-editor-macos.zip s3://spine-godot/$BRANCH/$GODOT_TAG/ echo "$GODOT_VERSION" > version.txt ls -lah - zip spine-godot-templates-$BRANCH-$GODOT_TAG.zip ios.zip macos.zip windows_debug_x86_64.exe windows_release_x86_64.exe linux_x11_64_debug linux_x11_64_release web_debug.zip web_release.zip android_release.apk android_debug.apk android_source.zip version.txt + zip spine-godot-templates-$BRANCH-$GODOT_TAG.zip ios.zip macos.zip windows_debug_x86_64.exe windows_release_x86_64.exe linux_debug.x86_64 linux_release.x86_64 web_debug.zip web_release.zip android_release.apk android_debug.apk android_source.zip version.txt aws s3 cp spine-godot-templates-$BRANCH-$GODOT_TAG.zip s3://spine-godot/$BRANCH/$GODOT_TAG/spine-godot-templates-$BRANCH-$GODOT_TAG.tpz - + upload-to-s3-mono: + needs: [godot-editor-windows, godot-editor-linux, godot-editor-macos, godot-template-macos, godot-template-windows, godot-template-linux] + runs-on: ubuntu-latest + if: ${{ inputs.godot_mono == true }} + + steps: + - name: Download godot-editor-windows artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-windows', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-editor-linux artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-linux', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-editor-macos artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-editor-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-template-macos artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-macos', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-template-windows-release artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-template-windows-debug artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-windows-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-template-linux-release artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-release', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Download godot-template-linux-debug artifact + uses: actions/download-artifact@v2 + with: + name: ${{ format('{0}-{1}{2}.zip', 'godot-template-linux-debug', env.GODOT_TAG, env.GODOT_MONO_UPLOAD_SUFFIX) }} + + - name: Upload artifacts to S3 + shell: bash + if: env.AWS_ACCESS_KEY_ID != null + run: | + BRANCH=${GITHUB_REF#refs/heads/} + echo "branch: $BRANCH" + ls -lahR + mv godot.windows.editor.x86_64.mono.exe godot-$BRANCH-$GODOT_TAG-mono.exe + mv godot.linuxbsd.editor.x86_64.mono godot-$BRANCH-$GODOT_TAG-mono + zip -r godot-editor-windows-mono.zip godot-$BRANCH-$GODOT_TAG-mono.exe GodotSharp + zip -r godot-editor-linux-mono.zip godot-$BRANCH-$GODOT_TAG-mono GodotSharp + mv godot-editor-macos.zip godot-editor-macos-mono.zip + aws s3 cp godot-editor-windows-mono.zip s3://spine-godot/$BRANCH/$GODOT_TAG/ + aws s3 cp godot-editor-linux-mono.zip s3://spine-godot/$BRANCH/$GODOT_TAG/ + aws s3 cp godot-editor-macos-mono.zip s3://spine-godot/$BRANCH/$GODOT_TAG/ + echo "$GODOT_VERSION.mono" > version.txt + zip spine-godot-templates-$BRANCH-$GODOT_TAG-mono.zip macos.zip windows_debug_x86_64.exe windows_release_x86_64.exe linux_debug.x86_64 linux_release.x86_64 version.txt + aws s3 cp spine-godot-templates-$BRANCH-$GODOT_TAG-mono.zip s3://spine-godot/$BRANCH/$GODOT_TAG/spine-godot-templates-$BRANCH-$GODOT_TAG-mono.tpz + + + diff --git a/.github/workflows/spine-godot.yml b/.github/workflows/spine-godot.yml index fa07106ea..fa4cab519 100644 --- a/.github/workflows/spine-godot.yml +++ b/.github/workflows/spine-godot.yml @@ -1,5 +1,4 @@ -name: Build and Publish Godot editor and templates - +name: Build spine-godot (Godot 3.5) on: push: paths: @@ -13,11 +12,10 @@ env: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true EM_VERSION: 3.1.14 - GODOT_TAG: 3.5.1-stable - GODOT_VERSION: 3.5.1.stable + GODOT_TAG: 3.5.2-stable + GODOT_VERSION: 3.5.2.stable jobs: - godot-editor-windows: runs-on: windows-latest steps: @@ -30,9 +28,9 @@ jobs: - name: Build Godot artifact shell: bash - run: | + run: | ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build.sh release_debug + ./spine-godot/build/build.sh release_debug - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -52,11 +50,11 @@ jobs: - name: Build Godot artifact shell: bash - run: | + run: | sudo apt-get update sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev ./spine-godot/build/setup.sh $GODOT_TAG false - ./spine-godot/build/build.sh release_debug + ./spine-godot/build/build.sh release_debug - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -81,7 +79,7 @@ jobs: ./spine-godot/build/build.sh release_debug pushd spine-godot/godot/bin zip -r godot-editor-macos.zip Godot.app - popd + popd - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -97,10 +95,10 @@ jobs: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | ./spine-godot/build/setup.sh $GODOT_TAG false ./spine-godot/build/build-templates.sh ios @@ -118,10 +116,10 @@ jobs: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | ./spine-godot/build/setup.sh $GODOT_TAG false ./spine-godot/build/build-templates.sh macos @@ -132,17 +130,17 @@ jobs: path: spine-godot/godot/bin/osx.zip godot-template-linux: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | sudo apt-get update sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev ./spine-godot/build/setup.sh $GODOT_TAG false @@ -201,7 +199,7 @@ jobs: sudo rm -f /etc/apt/sources.list.d/* sudo cp -f spine-godot/build/sources.lst /etc/apt/sources.list sudo apt-get update - + - name: Set up Java 11 uses: actions/setup-java@v1 with: @@ -244,17 +242,17 @@ jobs: - name: Set up Emscripten latest uses: mymindstorm/setup-emsdk@v11 with: - version: ${{env.EM_VERSION}} + version: ${{env.EM_VERSION}} - name: Verify Emscripten setup run: | emcc -v - name: Setup python and scons - uses: ./.github/actions/setup-godot-deps + uses: ./.github/actions/setup-godot-deps - name: Build Godot artifact - run: | + run: | ./spine-godot/build/setup.sh $GODOT_TAG false ./spine-godot/build/build-templates.sh web @@ -313,7 +311,7 @@ jobs: uses: actions/download-artifact@v2 with: name: godot-template-linux-release.zip - + - name: Download godot-template-linux-debug artifact uses: actions/download-artifact@v2 with: @@ -323,7 +321,7 @@ jobs: uses: actions/download-artifact@v2 with: name: godot-template-android-release.zip - + - name: Download godot-template-android-debug artifact uses: actions/download-artifact@v2 with: @@ -338,7 +336,7 @@ jobs: uses: actions/download-artifact@v2 with: name: godot-template-web-release.zip - + - name: Download godot-template-web-debug artifact uses: actions/download-artifact@v2 with: @@ -362,4 +360,4 @@ jobs: zip spine-godot-templates-$BRANCH-$GODOT_TAG.zip iphone.zip osx.zip windows_64_debug.exe windows_64_release.exe linux_x11_64_debug linux_x11_64_release webassembly_debug.zip webassembly_release.zip android_release.apk android_debug.apk android_source.zip version.txt aws s3 cp spine-godot-templates-$BRANCH-$GODOT_TAG.zip s3://spine-godot/$BRANCH/$GODOT_TAG/spine-godot-templates-$BRANCH-$GODOT_TAG.tpz - + diff --git a/.gitignore b/.gitignore index da20c7e5c..7a8ecc679 100644 --- a/.gitignore +++ b/.gitignore @@ -145,6 +145,7 @@ spine-ts/spine-canvas/dist spine-ts/spine-webgl/dist spine-ts/spine-player/dist spine-ts/spine-threejs/dist +spine-ts/spine-pixi/dist spine-libgdx/gradle spine-libgdx/gradlew spine-libgdx/gradlew.bat @@ -170,7 +171,9 @@ spine-godot/spine_godot/spine-cpp spine-godot/spine_godot/__pycache__ spine-godot/example/.import spine-godot/spine_godot/*.obj +*.obj *.bc +*.o spine-godot/example/.godot spine-godot/example-v4/.godot spine-cocos2dx/example/build-macos @@ -186,4 +189,9 @@ spine-godot/build/compile_commands.json spine-flutter/ios/Classes/spine-cpp spine-flutter/macos/Classes/spine-cpp -spine-flutter/src/spine-cpp \ No newline at end of file +spine-flutter/src/spine-cpp +spine-godot/godot-nuget +spine-godot/godot-spine-csharp +spine-ue4/Plugins/Developer +spine-haxe/export +spine-godot/example-v4-csharp/.godot diff --git a/CHANGELOG.md b/CHANGELOG.md index 18da19f89..a316f9333 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,8 +38,8 @@ * `VertexAttachment::getDeformAttachment()` was renamed to `VertexAttachment::getTimelineAttachment()`. * `Skeleton::update()` has been removed. * `Skeleton::getTime()` has been removed. - * `VertexEffect` has been removed. - + * `VertexEffect` has been removed. + ### Cocos2d-x ### SFML @@ -70,7 +70,7 @@ ### Unity -* **Officially supported Unity versions are 2017.1-2022.1**. +* **Officially supported Unity versions are 2017.1-2023.1**. * **Additions** * `SpineAtlasAsset.CreateRuntimeInstance` methods now provide an optional `newCustomTextureLoader` parameter (defaults to `null`) which can be set to e.g. `(a) => new YourCustomTextureLoader(a)` to use your own `TextureLoader` subclass instead of `MaterialsTextureLoader`. @@ -91,13 +91,29 @@ * Added `SkeletonRootMotion` callback delegates `ProcessRootMotionOverride` and `PhysicsUpdateRootMotionOverride` to customize how root motion is applied. The new property `disableOnOverride` determines whether the callback will be issued in addition or instead of normally applying root motion. Added property `rootMotionScaleRotation` to allow scaling rotational root-motion to match e.g. a 90 degree rotation to a custom target angle. * Added outline shader parameter `Advanced - Opaque Alpha` which can be used to exclude problematic semi-transparent areas, which may receive an undesired large outline color overlay otherwise. * Added Spine Preferences setting `Prefabs` - `Optimize Preview Meshes`. When enabled, Spine prefab preview meshes will be removed in a pre-build step to reduce build size. This increases build time as all prefabs in the project will be processed. Defaults to false to not slow down builds substantially every time. - * Added Spine Preferences setting `Reload SkeletonData after Play`. When enabled, the shared `SkeletonData` of all skeletons in the active scene is reloaded (from the `.json` or `.skel.bytes` file) after exiting play-mode. You can disable this setting to avoid the reloading delay if you can ensure that there are no (accidental) modifications to the shared `SkeletonData` during play-mode (otherwise it would carry over its effect into subsequent plays). Defaults to `true` (the safe setting), which maintains existing behaviour. + * Added Spine Preferences setting `Reload SkeletonData after Play`. When enabled, the shared `SkeletonData` of all skeletons in the active scene is reloaded (from the `.json` or `.skel.bytes` file) after exiting play-mode. You can disable this setting to avoid the reloading delay if you can ensure that there are no (accidental) modifications to the shared `SkeletonData` during play-mode (otherwise it would carry over its effect into subsequent plays). Defaults to `true` (the safe setting), which maintains existing behaviour. * Added `SkeletonAnimationMulti` sample component methods `SetActiveSkeleton(int index)` and getter property `SkeletonAnimations` to more easily apply changes at all SkeletonAnimation instances instead of only the active one. * PMA textures now have `sRGB (Color Texture)` disabled by default, the preset template `PMATexturePreset.preset` has been adjusted accordingly. As PMA textures are only allowed with Gamma color space, `sRGB (Color Texture)` shall be disabled to prevent border artifacts when mipmaps are enabled. In Gamma color space having this setting disabled has no drawbacks, only benefits. * `SkeletonRenderTexture` and `SkeletonGraphicRenderTexture` components now support automatic down-scaling when required size on screen exceeds `Max Render Texture Size`. * Added `Spine/SkeletonGraphic Fill` shader to provide functionality of `Spine/Skeleton Fill` shader for `SkeletonGraphic`. * Lit Spine URP shaders (`Universal Render Pipeline/Spine/Sprite` and `Universal Render Pipeline/Spine/Skeleton Lit`) now support `Forward+` rendering path as introduced by Unity 2022.2 and URP version 14. - + * `SkeletonGraphic` now supports automatic scaling based on its `RectTransform` bounds. Automatic scaling can be enabled by setting the added `Layout Scale Mode` Inspector property to either `Width Controls Height`, `Height Controls Width`, `FitInParent` or `EnvelopeParent`. It is set to `None` by default to keep previous behaviour and avoid breaking existing projects. To modify the reference layout bounds, hit the additional `Edit Layout Bounds` toggle button to switch into edit mode, adjust the bounds or hit `Match RectTransform with Mesh`, and hit the button again when done adjusting. The skeleton will now be scaled accordingly to fit the reference layout bounds to the object's `RectTransform`. + * Added previously missing unlit URP 2D shader variant, available under `Universal Render Pipeline/2D/Spine/Skeleton`. + * Added support for light cookies at `Universal Render Pipeline/Spine/Sprite` shader. + * Timeline extension package: An additional Spine preferences parameter `Timeline` - `Default Mix Duration` has been added, setting newly added `SpineAnimationStateClip` clips accordingly, defaults to false. This Spine preferences parameter can be enabled to default to the previous behaviour before this update. + * Tint Black: Added support for [Tint Black](http://en.esotericsoftware.com/spine-slots#Tint-black) functionality at all Spine URP shaders (2D and 3D shaders) and at all standard pipeline `Spine/Sprite` shaders. This feature can be enabled via the `Tint Black` material parameter in the Inspector. Note: The URP Sprite shaders provided in the Spine URP Shaders extension UPM package require the latest version of the spine-unity runtime (package version 4.1.12, 2023-05-31 or newer) to display the added material parameters in the Inspector GUI. + * Added `SkeletonGraphic.MeshScale` property to allow access to calculated mesh scale. `MeshScale` is based on (1) Canvas pixels per unit, and (2) `RectTransform` bounds when using `Layout Scale Mode` other than `None` at `SkeletonGraphic` which scales the skeleton mesh to fit the parent `RectTransform` bounds accordingly. + * Added `updateSeparatorPartScale` property to `SkeletonGraphic` to let render separator parts follow the scale (lossy scale) of the `SkeletonGraphic` GameObject. Defaults to `false` to maintain existing behaviour. + * Added experimental `EditorSkeletonPlayer` component to allow Editor playback of the initial animation set at `SkeletonAnimation` or `SkeletonGraphic` components. Add this component to your skeleton GameObject to enable the in-editor animation preview. Allows configurations for continuous playback when selected, deselected, and alternative single-frame preview by setting `Fixed Track Time` to any value other than 0. Limitations: At skeletons with variable material count the Inspector preview may be too unresponsive. It is then recommended to disable the `EditorSkeletonPlayer` component (at the top of the Inspector) to make it responsive again, then you can disable `Play When Selected` and re-enable the component to preview playback only when deselected. + * Added example component `RenderCombinedMesh` to render a combined mesh of multiple meshes or submeshes. This is required by `OutlineOnly` shaders to render a combined outline when using `SkeletonRenderSeparator` or multiple atlas pages which would normally lead to outlines around individual parts. To add a combined outline to your SkeletenRenderer: + 1) Add a child GameObject and move it a bit back (e.g. position Z = 0.01). + 2) Add a `RenderCombinedMesh` component, provided in the `Spine Examples/Scripts/Sample Components` directory. + 3) Copy the original material, add *_Outline* to its name and set the shader to your outline-only shader like `Universal Render Pipeline/Spine/Outline/Skeleton-OutlineOnly` or `Spine/Outline/OutlineOnly-ZWrite`. + 4) Assign this *_Outline* material at the new child GameObject's `MeshRenderer` component. + If you are using `SkeletonRenderSeparator` and need to enable and disable the `SkeletonRenderSeparator` component at runtime, you can increase the `RenderCombinedMesh` `Reference Renderers` array by one and assign the `SkeletonRenderer` itself at the last entry after the parts renderers. Disabled `MeshRenderer` components will be skipped when combining the final mesh, so the combined mesh is automatically filled from the desired active renderers. + * Timeline extension package: Added static `EditorEvent` callback to allow editor scripts to react to animation events outside of play-mode. Register to the events via `Spine.Unity.Playables.SpineAnimationStateMixerBehaviour.EditorEvent += YourCallback;`. + * URP Shaders: Added `Depth Write` property to shaders `Universal Render Pipeline/Spine/Skeleton` and `Universal Render Pipeline/Spine/Skeleton Lit`. Defaults to false to maintain existing behaviour. + * **Breaking changes** * Made `SkeletonGraphic.unscaledTime` parameter protected, use the new property `UnscaledTime` instead. * `SkeletonGraphic` `OnRebuild` callback delegate is now issued after the skeleton has been initialized, before the `AnimationState` component is initialized. This makes behaviour consistent with `SkeletonAnimation` and `SkeletonMecanim` component behaviour. Use the new callback `OnAnimationRebuild` if you want to receive a callback after the `SkeletonGraphic` `AnimationState` has been initialized. @@ -105,8 +121,10 @@ * **Changes of default values** * **Deprecated** + * Shader macro `RETURN_UNLIT_IF_ADDITIVE_SLOT` in `spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc` has been deprecated and will be removed in spine-unity 4.2. Use RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT instead. * **Restructuring (Non-Breaking)** + * Moved Spine URP Shaders Examples directory from the main package directory to Samples which can be installed via the Unity Package Manager. To import, select the `Spine Universal RP Shaders` package in the Package Manager window, expand `Samples` at the bottom and hit `Import` next to `Examples`. This follows the standard [samples guideline](https://docs.unity3d.com/Manual/cus-samples.html) and prevents warning messages about unexpectedly altered immutable assets. ### XNA/MonoGame * **Breaking change**: Removed spine-xna in favor of spine-monogame. See https://github.com/EsotericSoftware/spine-runtimes/issues/1949 @@ -143,10 +161,14 @@ * `RegionAttachment#computeWorldVertices()` takes a `Slot` instead of a `Bone` as the first argument. * Removed `PlayerEditor`. * `VertexEffect` has been removed. + * Removed `RegionAttachment.rendererObject`. + * Renamed `TextureRegion.renderObject` to `TextureRegion.texture`. + ### WebGL backend * `PolygonBatcher` can now disable culling automatically if the static variable `PolygonBatcher.disableCulling` is set to true. * Added `SpineCanvas`, a simpler way to render a scene via spine-webgl. See `spine-ts/spine-webgl/examples/barebones.html` and `spine-ts/spine-webgl/examples/mix-and-match.html`. + * Added `SpineCanavs.dispose()` to halt the updating and rendering of the canvas. ### Canvas backend * Improved example. @@ -154,7 +176,7 @@ ### Three.js backend * Added orbital controls to THREJS example. * `SkeletonMesh` takes an optional `SkeletonMeshMaterialCustomizer`, allowing modification of materials used by `SkeletonMesh`. - * Added `SkeletonMeshMaterial.alphaTest`, when > 0, alpha testing will be performed and fragments will not be written to the depth buffer, if depth writes are enabled. + * Added `SkeletonMeshMaterial.alphaTest`, when > 0, alpha testing will be performed and fragments will not be written to the depth buffer, if depth writes are enabled. ### Player * Added `SpinePlayer.dispose()` to explicitely dispose of all resources the player holds on to. @@ -528,6 +550,8 @@ * Added mix-and-match example to demonstrate the new Skin API. * Materials on `SkeletonRendererComponent` are now blueprint read and writeable. This allows setting dynamic material instances at runtime. * Added `InitialSkin` property to `USpineWidget`. This allows previewing different skins in the UMG Designer. Initial skins can still be overridden via blueprint events such as `On Initialized`. +* `USpineWidget` will now report its own desired size based on the setup pose dimensions of the skeleton. This is used when selecting `Size to content` on a `USpineWidget` in the designer. +* Updated example project to UE 5.2. ## C# ## * **Breaking changes** diff --git a/CMakeLists.txt b/CMakeLists.txt index 67a8e860f..02009e22f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,13 @@ cmake_minimum_required(VERSION 3.17) project(spine) -set(CMAKE_INSTALL_PREFIX "./") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE PATH "Install location" FORCE) +endif() set(CMAKE_VERBOSE_MAKEFILE ON) -set(SPINE_SFML FALSE CACHE BOOL FALSE) -set(SPINE_SANITIZE FALSE CACHE BOOL FALSE) +option(SPINE_SFML "Build spine SFML API" OFF) +option(SPINE_SANITIZE "Build with sanitization" OFF) +option(BUILD_TESTING "Build with testing" ON) if(MSVC) message("MSCV detected") @@ -26,12 +29,10 @@ if((${SPINE_SFML}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sfml")) set(ONLY_ACTIVE_ARCH NO) endif() add_subdirectory(spine-c) - add_subdirectory(spine-sfml/c) add_subdirectory(spine-cpp) + add_subdirectory(spine-sfml/c) add_subdirectory(spine-sfml/cpp) -endif() - -if((${SPINE_SDL}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sdl")) +elseif((${SPINE_SDL}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sdl")) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_OSX_ARCHITECTURES x86_64;arm64) set(ONLY_ACTIVE_ARCH NO) @@ -39,7 +40,15 @@ if((${SPINE_SDL}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sdl")) add_subdirectory(spine-c) add_subdirectory(spine-cpp) add_subdirectory(spine-sdl) +else() + add_subdirectory(spine-c) + add_subdirectory(spine-cpp) + if (${BUILD_TESTING}) + add_subdirectory(spine-cpp/spine-cpp-unit-tests) + endif() endif() -# add_subdirectory(spine-c/spine-c-unit-tests) -add_subdirectory(spine-cpp/spine-cpp-unit-tests) +# Create config file that include the exported targets +configure_file(SpineConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/SpineConfig.cmake" + @ONLY) \ No newline at end of file diff --git a/LICENSE b/LICENSE index 4501a611f..1d809bd71 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,26 @@ Spine Runtimes License Agreement -Last updated May 1, 2019. Replaces all prior versions. +Last updated July 28, 2023. Replaces all prior versions. -Copyright (c) 2013-2019, Esoteric Software LLC +Copyright (c) 2013-2023, 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, +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 +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. \ No newline at end of file diff --git a/SpineConfig.cmake.in b/SpineConfig.cmake.in new file mode 100644 index 000000000..601b05bfe --- /dev/null +++ b/SpineConfig.cmake.in @@ -0,0 +1 @@ +include("@CMAKE_CURRENT_BINARY_DIR@/spine-cpp/spine-cppTargets.cmake") \ No newline at end of file diff --git a/examples/export/runtimes.sh b/examples/export/runtimes.sh index 9c99c9caa..fadf81c25 100755 --- a/examples/export/runtimes.sh +++ b/examples/export/runtimes.sh @@ -341,6 +341,11 @@ cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-player/example/ cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-player/example/assets/" cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-player/example/assets/" +cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-pixi/example/assets/" + rm "$ROOT/spine-ts/spine-phaser/example/assets/"* cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/spine-phaser/example/assets/" @@ -350,20 +355,43 @@ cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser/example/ cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser/example/assets/" +cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser/example/typescript/assets/" +cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser/example/typescript/assets/" +cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser/example/typescript/assets/" + cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-phaser/example/assets/" -cp -f ../stretchyman/export/stretchyman-pro.json "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-phaser/example/assets/" -cp -f ../mix-and-match/export/mix-and-match-pro.json "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-phaser/example/assets/" cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-phaser/example/assets/" +rm "$ROOT/spine-ts/spine-pixi/example/assets/"* +cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../raptor/export/raptor.png "$ROOT/spine-ts/spine-pixi/example/assets/" + +cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-pixi/example/assets/" + +cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-pixi/example/assets/" + +cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-pixi/example/assets/" + +cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-pixi/example/assets/" +cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-pixi/example/assets/" + echo "spine-monogame" rm "$ROOT/spine-monogame/spine-monogame-example/data/"* cp -f ../coin/export/coin-pro.json "$ROOT/spine-monogame/spine-monogame-example/data/" @@ -390,6 +418,59 @@ cp -f ../mix-and-match/export/mix-and-match-pro.json "$ROOT/spine-monogame/spine cp -f ../mix-and-match/export/mix-and-match.atlas "$ROOT/spine-monogame/spine-monogame-example/data/" cp -f ../mix-and-match/export/mix-and-match.png "$ROOT/spine-monogame/spine-monogame-example/data/" +echo "spine-haxe" +rm "$ROOT/spine-haxe/example/assets/"* +cp -f ../coin/export/coin-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../coin/export/coin-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../coin/export/coin.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../coin/export/coin.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../goblins/export/goblins-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../goblins/export/goblins-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../goblins/export/goblins.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../goblins/export/goblins.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../dragon/export/dragon-ess.json "$ROOT/spine-haxe/example/assets/" +cp -f ../dragon/export/dragon-ess.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../dragon/export/dragon.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../dragon/export/dragon*.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../raptor/export/raptor-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../raptor/export/raptor.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../raptor/export/raptor.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../spineboy/export/spineboy.png "$ROOT/spine-haxe/example/assets/" +cp -f ../spineboy/export/spineboy.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../tank/export/tank-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../tank/export/tank-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../tank/export/tank.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../tank/export/tank.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../vine/export/vine-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../vine/export/vine-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../vine/export/vine.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../vine/export/vine.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../owl/export/owl-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../owl/export/owl-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../owl/export/owl.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../owl/export/owl.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../stretchyman/export/stretchyman-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../stretchyman/export/stretchyman.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../stretchyman/export/stretchyman.png "$ROOT/spine-haxe/example/assets/" + +cp -f ../mix-and-match/export/mix-and-match-pro.json "$ROOT/spine-haxe/example/assets/" +cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-haxe/example/assets/" +cp -f ../mix-and-match/export/mix-and-match.atlas "$ROOT/spine-haxe/example/assets/" +cp -f ../mix-and-match/export/mix-and-match.png "$ROOT/spine-haxe/example/assets/" + echo "spine-ue4" rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json" rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.atlas" @@ -397,6 +478,9 @@ rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.png" rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json" rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.atlas" rm "$ROOT/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png" +rm -f "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.skel" +rm -f "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.atlas" +rm -f "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.png" cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json" cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ue4/Content/GettingStarted/Assets/Raptor/" @@ -406,6 +490,10 @@ cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ue4/Content/GettingStart cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ue4/Content/GettingStarted/Assets/Spineboy/" cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ue4/Content/GettingStarted/Assets/Spineboy/" +cp -f ../mix-and-match/export/mix-and-match.png "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.png" +cp -f ../mix-and-match/export/mix-and-match.atlas "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.atlas" +cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.skel" + echo "spine-unity" # Section of assets specific for the spine-unity runtime. diff --git a/examples/stretchyman/export/stretchyman-pma.atlas b/examples/stretchyman/export/stretchyman-pma.atlas index a14dabf35..d8b4a4077 100644 --- a/examples/stretchyman/export/stretchyman-pma.atlas +++ b/examples/stretchyman/export/stretchyman-pma.atlas @@ -3,14 +3,17 @@ stretchyman-pma.png filter: Linear, Linear pma: true back-arm - bounds: 149, 45, 72, 202 + bounds: 679, 173, 72, 202 + rotate: 90 back-leg - bounds: 312, 4, 100, 318 + bounds: 2, 2, 100, 318 rotate: 90 body - bounds: 223, 106, 141, 452 + bounds: 2, 104, 141, 452 rotate: 90 front-arm - bounds: 2, 26, 145, 221 + bounds: 456, 100, 145, 221 + rotate: 90 head - bounds: 223, 2, 87, 102 + bounds: 322, 15, 87, 102 + rotate: 90 diff --git a/examples/stretchyman/export/stretchyman-pma.png b/examples/stretchyman/export/stretchyman-pma.png index acd0a5ab5..78e8b4503 100644 Binary files a/examples/stretchyman/export/stretchyman-pma.png and b/examples/stretchyman/export/stretchyman-pma.png differ diff --git a/examples/stretchyman/export/stretchyman-pro.json b/examples/stretchyman/export/stretchyman-pro.json index c2eec0096..a7825e2dc 100644 --- a/examples/stretchyman/export/stretchyman-pro.json +++ b/examples/stretchyman/export/stretchyman-pro.json @@ -1,7 +1,7 @@ { "skeleton": { - "hash": "QqiPXGOfONE", - "spine": "4.1.17", + "hash": "8oGZUTwZfVI", + "spine": "4.1.20", "x": -100.47, "y": -9.21, "width": 260.65, @@ -489,7 +489,7 @@ "back-arm": { "type": "mesh", "uvs": [ 0.74522, 0.00989, 0.64111, 0.05762, 0.56303, 0.1559, 0.42509, 0.25886, 0.28974, 0.359, 0.22988, 0.49565, 0.21166, 0.60797, 0.21166, 0.69782, 0.16481, 0.78674, 0.14139, 0.84757, 0.02427, 0.88501, 0.0529, 0.91871, 0.37824, 0.98797, 0.60468, 0.98235, 0.6307, 0.9056, 0.73481, 0.87752, 0.63591, 0.81762, 0.55262, 0.74181, 0.38084, 0.69876, 0.37824, 0.60797, 0.39906, 0.50876, 0.51358, 0.38521, 0.66194, 0.28881, 0.85454, 0.18398, 0.97687, 0.07541, 0.9144, 0.00989 ], - "triangles": [ 11, 9, 12, 9, 8, 12, 12, 8, 18, 13, 12, 14, 12, 18, 17, 18, 8, 7, 14, 12, 17, 11, 10, 9, 14, 16, 15, 14, 17, 16, 7, 19, 18, 7, 6, 19, 6, 5, 19, 19, 5, 20, 5, 4, 20, 20, 4, 21, 4, 3, 21, 21, 3, 22, 3, 2, 22, 22, 2, 23, 2, 1, 23, 23, 1, 24, 1, 0, 24, 0, 25, 24 ], + "triangles": [ 14, 17, 16, 14, 16, 15, 11, 10, 9, 14, 12, 17, 18, 8, 7, 12, 18, 17, 13, 12, 14, 12, 8, 18, 9, 8, 12, 11, 9, 12, 6, 5, 19, 7, 6, 19, 7, 19, 18, 20, 4, 21, 5, 4, 20, 19, 5, 20, 3, 2, 22, 21, 3, 22, 4, 3, 21, 0, 25, 24, 1, 0, 24, 23, 1, 24, 2, 1, 23, 22, 2, 23 ], "vertices": [ 1, 9, -7.68, -11.48, 1, 1, 9, 4.09, -13.63, 1, 1, 9, 23.49, -9.36, 1, 1, 10, 13.44, -9.23, 1, 2, 10, 35.2, -9.62, 0.50649, 11, -0.58, -9.66, 0.49351, 1, 11, 26.04, -6.39, 1, 1, 12, 14.15, -6.11, 1, 2, 12, 31.54, -5.57, 0.66493, 13, -3.33, -5.03, 0.33507, 1, 13, 13.08, -11.25, 1, 1, 13, 24.41, -14.89, 1, 1, 13, 30.15, -24.52, 1, 1, 13, 36.93, -23.54, 1, 1, 13, 54.08, -2.33, 1, 1, 13, 55.73, 14.15, 1, 1, 13, 41.39, 18.48, 1, 1, 13, 37.29, 26.87, 1, 1, 13, 24.66, 21.67, 1, 1, 13, 9.18, 18.1, 1, 2, 12, 31.33, 6.78, 0.47881, 13, -1.11, 7.12, 0.52119, 1, 12, 13.77, 6.04, 1, 2, 11, 24.98, 6.17, 0.89218, 12, -5.48, 6.96, 0.10782, 2, 10, 32.6, 7.29, 0.59842, 11, -0.32, 7.45, 0.40158, 1, 10, 11.08, 8.85, 1, 1, 9, 17.89, 11.88, 1, 1, 9, -4.82, 9.46, 1, 1, 9, -13.69, -0.69, 1 ], "hull": 26, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 0, 50, 2, 48, 4, 46, 6, 44, 8, 42, 10, 40, 12, 38, 14, 36 ], @@ -509,7 +509,7 @@ "back-leg": { "type": "mesh", "uvs": [ 0.502, 0.01179, 0.36076, 0.06379, 0.4057, 0.15046, 0.44743, 0.23916, 0.47953, 0.32991, 0.51163, 0.42269, 0.52127, 0.50629, 0.48274, 0.58888, 0.41212, 0.66025, 0.3126, 0.74182, 0.2163, 0.81625, 0.1232, 0.89272, 0.00763, 0.97429, 0.29655, 0.98958, 0.47407, 0.99222, 0.64004, 0.99468, 0.80989, 0.9896, 0.91291, 0.98652, 1, 0.95797, 0.8333, 0.94681, 0.71067, 0.9386, 0.57123, 0.92031, 0.41533, 0.89986, 0.3447, 0.89272, 0.36885, 0.87178, 0.42817, 0.82033, 0.502, 0.74794, 0.58226, 0.66943, 0.6593, 0.59092, 0.72993, 0.50528, 0.76524, 0.42167, 0.78129, 0.32481, 0.78771, 0.23406, 0.78771, 0.13924, 0.72351, 0.03728, 0.60152, 0.00567, 0.82117, 0.96898, 0.67873, 0.96396, 0.52111, 0.9574, 0.35936, 0.94214, 0.19388, 0.92922, 0.25375, 0.88159, 0.32792, 0.8184 ], - "triangles": [ 17, 36, 19, 17, 16, 36, 16, 37, 36, 17, 19, 18, 36, 20, 19, 15, 37, 16, 14, 38, 15, 15, 38, 37, 37, 20, 36, 38, 21, 37, 37, 21, 20, 38, 22, 21, 13, 39, 14, 14, 39, 38, 12, 40, 13, 13, 40, 39, 39, 22, 38, 40, 23, 39, 39, 23, 22, 12, 11, 40, 40, 41, 23, 40, 11, 41, 23, 41, 24, 11, 10, 41, 41, 42, 24, 41, 10, 42, 24, 42, 25, 26, 25, 9, 10, 9, 42, 25, 42, 9, 9, 8, 26, 26, 8, 27, 8, 7, 27, 27, 7, 28, 7, 6, 28, 28, 6, 29, 6, 5, 29, 29, 5, 30, 30, 5, 31, 31, 5, 4, 31, 4, 32, 32, 4, 3, 32, 3, 33, 3, 2, 33, 2, 34, 33, 2, 1, 34, 34, 0, 35, 34, 1, 0 ], + "triangles": [ 36, 20, 19, 17, 19, 18, 16, 37, 36, 17, 16, 36, 17, 36, 19, 38, 22, 21, 37, 21, 20, 38, 21, 37, 37, 20, 36, 15, 38, 37, 14, 38, 15, 15, 37, 16, 39, 23, 22, 40, 23, 39, 39, 22, 38, 13, 40, 39, 12, 40, 13, 14, 39, 38, 13, 39, 14, 9, 8, 26, 25, 42, 9, 10, 9, 42, 26, 25, 9, 24, 42, 25, 41, 10, 42, 41, 42, 24, 11, 10, 41, 23, 41, 24, 40, 11, 41, 40, 41, 23, 12, 11, 40, 26, 8, 27, 6, 5, 29, 28, 6, 29, 7, 6, 28, 27, 7, 28, 8, 7, 27, 29, 5, 30, 31, 5, 4, 30, 5, 31, 32, 4, 3, 31, 4, 32, 34, 1, 0, 34, 0, 35, 2, 1, 34, 2, 34, 33, 3, 2, 33, 32, 3, 33 ], "vertices": [ 1, 20, -19.79, -5.67, 1, 2, 20, -5.62, -22.28, 0.83363, 21, -41.07, -23.3, 0.16637, 2, 20, 22.31, -21.98, 0.65187, 21, -13.17, -21.89, 0.34813, 3, 20, 50.83, -22.11, 0.3172, 21, 15.33, -20.87, 0.43086, 22, -19.67, -21.09, 0.25193, 4, 20, 79.85, -23.29, 0.10792, 21, 44.37, -20.89, 0.35417, 22, 9.3, -19.2, 0.3192, 23, -25.22, -20.06, 0.21872, 4, 21, 74.06, -20.98, 0.16486, 22, 38.93, -17.34, 0.32776, 23, 4.09, -15.38, 0.29831, 24, -30.1, -17.16, 0.20907, 3, 22, 65.54, -17.61, 0.17523, 23, 30.6, -13.11, 0.39173, 24, -4.12, -11.42, 0.43304, 3, 23, 57.03, -15.71, 0.19718, 24, 22.43, -10.53, 0.52971, 25, -12.97, -9.81, 0.27311, 3, 24, 46.05, -13.47, 0.40991, 25, 10.84, -10.17, 0.34747, 26, -24.93, -10.51, 0.24261, 3, 24, 73.39, -18.69, 0.19432, 25, 38.58, -12.41, 0.37177, 26, 2.9, -10.99, 0.43391, 3, 25, 64.06, -14.98, 0.16664, 26, 28.49, -11.94, 0.56756, 27, -7.53, -11.48, 0.2658, 3, 26, 54.58, -12.37, 0.52114, 27, 18.56, -10.93, 0.36168, 14, -3.08, 24.95, 0.11718, 4, 26, 82.97, -14.36, 0.35144, 27, 47.01, -11.86, 0.29521, 14, -13.07, -1.67, 0.25118, 15, -46.3, 1.83, 0.10216, 1, 14, 16.37, -4.67, 1, 2, 14, 34.32, -4.37, 0.53487, 15, 0.74, -4.44, 0.46513, 3, 14, 51.1, -4.08, 0.14611, 15, 17.5, -5.42, 0.54314, 16, -15.51, -2.75, 0.31075, 2, 15, 34.67, -4.01, 0.40714, 16, 1.65, -4.36, 0.59286, 2, 15, 45.09, -3.16, 0.25726, 16, 12.05, -5.34, 0.74274, 2, 15, 53.99, 5.81, 0.25311, 16, 22.38, 1.94, 0.74689, 2, 15, 37.19, 9.56, 0.4029, 16, 6.5, 8.57, 0.5971, 3, 14, 57.07, 14.17, 0.13352, 15, 24.84, 12.33, 0.54644, 16, -5.18, 13.44, 0.32004, 4, 26, 47.09, 33.11, 0.13131, 14, 42.64, 19.08, 0.26349, 15, 10.82, 18.31, 0.49746, 16, -17.94, 21.78, 0.10773, 4, 26, 46.46, 16.09, 0.21159, 27, 9.37, 17.21, 0.1068, 14, 26.51, 24.57, 0.44951, 15, -4.85, 25.01, 0.23211, 3, 26, 46.8, 8.62, 0.40111, 27, 10, 9.75, 0.24543, 14, 19.24, 26.38, 0.35346, 3, 26, 39.71, 8.61, 0.5825, 27, 2.91, 9.47, 0.30792, 14, 21.25, 33.18, 0.10958, 3, 25, 59.17, 5.89, 0.21955, 26, 22.27, 8.58, 0.57946, 27, -14.51, 8.8, 0.20099, 3, 24, 71.84, 0.47, 0.21583, 25, 34.96, 6.47, 0.32263, 26, -1.92, 7.63, 0.46154, 3, 24, 45.81, 3.96, 0.40554, 25, 8.71, 7.12, 0.38602, 26, -28.17, 6.61, 0.20845, 3, 23, 56.79, 2.13, 0.25409, 24, 19.83, 7.12, 0.53006, 25, -17.46, 7.46, 0.21585, 3, 22, 66.18, 3.45, 0.22414, 23, 29.23, 7.92, 0.34135, 24, -8.25, 9.24, 0.43451, 4, 21, 76.6, 4.51, 0.19364, 22, 39.78, 8.26, 0.28887, 23, 2.49, 10.19, 0.33579, 24, -35.06, 7.97, 0.1817, 4, 20, 82.88, 7.08, 0.11658, 21, 46.18, 9.58, 0.35727, 22, 9.09, 11.32, 0.35745, 23, -28.36, 10.3, 0.16869, 3, 20, 54.46, 12.11, 0.35357, 21, 17.57, 13.46, 0.44494, 22, -19.71, 13.32, 0.20149, 2, 20, 24.65, 16.69, 0.65438, 21, -12.4, 16.85, 0.34562, 2, 20, -8.38, 15.21, 0.85331, 21, -45.34, 14.05, 0.14669, 1, 20, -20.19, 4.56, 1, 2, 15, 35.89, 2.53, 0.4051, 16, 3.99, 1.87, 0.5949, 3, 14, 54.38, 5.92, 0.13921, 15, 21.52, 4.3, 0.54495, 16, -9.85, 6.12, 0.31584, 2, 14, 37.79, 7.63, 0.44939, 15, 5.1, 7.27, 0.55061, 3, 26, 65.39, 20.7, 0.11858, 14, 20.6, 11.35, 0.75134, 15, -11.76, 12.27, 0.13008, 3, 26, 65.41, 1.81, 0.3968, 27, 24.3, 0.23, 0.28258, 14, 2.07, 14.98, 0.32063, 3, 26, 48.01, 0.08, 0.55395, 27, 6.94, -0.33, 0.33293, 14, 3.38, 30.47, 0.11312, 3, 25, 65.95, -2.97, 0.19447, 26, 24.96, -1.58, 0.57382, 27, -15.99, -0.43, 0.23171 ], "hull": 36, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 34, 36, 44, 46, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 0, 70, 4, 66, 2, 68, 40, 42, 42, 44, 26, 28, 28, 30, 46, 48, 48, 50, 36, 38, 38, 40, 30, 32, 32, 34, 18, 52, 16, 54, 14, 56, 12, 58, 10, 60, 8, 62, 6, 64, 32, 72, 72, 38, 30, 74, 74, 40, 72, 74, 28, 76, 76, 42, 74, 76, 26, 78, 78, 44, 76, 78, 24, 80, 80, 46, 78, 80, 22, 82, 82, 48, 80, 82, 20, 84, 84, 50, 82, 84 ], @@ -529,7 +529,7 @@ "body": { "type": "mesh", "uvs": [ 0.35966, 0.01351, 0.26864, 0.04108, 0.26204, 0.0954, 0.34119, 0.14478, 0.39792, 0.19457, 0.40451, 0.24272, 0.38077, 0.27893, 0.3597, 0.3004, 0.34119, 0.31926, 0.34989, 0.34326, 0.35834, 0.36658, 0.36552, 0.40164, 0.37234, 0.43499, 0.38397, 0.4944, 0.3956, 0.55971, 0.39884, 0.59858, 0.40142, 0.62955, 0.40216, 0.65662, 0.3461, 0.71564, 0.27077, 0.78176, 0.2201, 0.82128, 0.17618, 0.85553, 0.13115, 0.88833, 0.08238, 0.92385, 0.00342, 0.9796, 0.18836, 0.99127, 0.32172, 0.99284, 0.46266, 0.99451, 0.61643, 0.98608, 0.71618, 0.97182, 0.61851, 0.95821, 0.48967, 0.95043, 0.39458, 0.94083, 0.27772, 0.92904, 0.23408, 0.9232, 0.26692, 0.89774, 0.30681, 0.86681, 0.34203, 0.83415, 0.38369, 0.7955, 0.45642, 0.72874, 0.52708, 0.66845, 0.56032, 0.63345, 0.57541, 0.60109, 0.59357, 0.56214, 0.61643, 0.49732, 0.63513, 0.43963, 0.64345, 0.40462, 0.77081, 0.39011, 0.84585, 0.37025, 0.90983, 0.35331, 0.9674, 0.31915, 0.97302, 0.28585, 0.96448, 0.23351, 0.8952, 0.1681, 0.79346, 0.12643, 0.75179, 0.10879, 0.71799, 0.09448, 0.66817, 0.07237, 0.61343, 0.04807, 0.47868, 0.01411, 0.49846, 0.38826, 0.66315, 0.34728, 0.67333, 0.30664, 0.8188, 0.29655, 0.80971, 0.24505, 0.72829, 0.17902, 0.68147, 0.13902, 0.59191, 0.09711, 0.3904, 0.09012, 0.53695, 0.14981, 0.57563, 0.19616, 0.64483, 0.25077, 0.79855, 0.33476, 0.61751, 0.97167, 0.4773, 0.97061, 0.23795, 0.95673, 0.15272, 0.92355, 0.14158, 0.94886, 0.23861, 0.86092, 0.51732, 0.30354, 0.50696, 0.34527, 0.50634, 0.43735, 0.50334, 0.4959, 0.51086, 0.32558, 0.50355, 0.41057, 0.19543, 0.89241, 0.36492, 0.9641 ], - "triangles": [ 1, 0, 59, 58, 1, 59, 68, 1, 58, 2, 1, 68, 67, 68, 58, 67, 58, 57, 67, 57, 56, 66, 67, 56, 66, 56, 55, 3, 2, 68, 69, 68, 67, 3, 68, 69, 69, 67, 66, 66, 55, 54, 65, 66, 54, 65, 54, 53, 4, 3, 69, 70, 69, 66, 4, 69, 70, 70, 66, 65, 5, 4, 70, 71, 70, 65, 5, 70, 71, 6, 71, 62, 79, 6, 62, 7, 6, 79, 71, 6, 5, 83, 7, 79, 8, 7, 83, 83, 79, 62, 9, 8, 83, 80, 9, 83, 61, 83, 62, 61, 62, 72, 80, 83, 61, 46, 80, 61, 46, 61, 47, 62, 71, 64, 64, 65, 53, 64, 53, 52, 71, 65, 64, 63, 64, 52, 63, 52, 51, 62, 64, 63, 50, 63, 51, 72, 62, 63, 72, 63, 50, 49, 72, 50, 48, 72, 49, 47, 61, 72, 47, 72, 48, 74, 32, 31, 86, 32, 74, 73, 31, 30, 74, 31, 73, 73, 30, 29, 28, 74, 73, 28, 73, 29, 27, 86, 74, 27, 74, 28, 26, 86, 27, 75, 33, 86, 24, 23, 77, 25, 77, 75, 24, 77, 25, 26, 75, 86, 25, 75, 26, 22, 21, 85, 85, 78, 35, 34, 85, 35, 76, 22, 85, 76, 85, 34, 23, 22, 76, 77, 23, 76, 77, 76, 34, 77, 34, 33, 75, 77, 33, 86, 33, 32, 36, 78, 20, 21, 20, 78, 37, 36, 20, 85, 21, 78, 35, 78, 36, 38, 18, 39, 19, 18, 38, 37, 19, 38, 20, 19, 37, 40, 17, 16, 41, 40, 16, 39, 17, 40, 18, 17, 39, 42, 15, 14, 43, 42, 14, 41, 16, 15, 42, 41, 15, 14, 13, 82, 43, 82, 44, 14, 82, 43, 12, 11, 84, 45, 81, 84, 12, 84, 81, 46, 45, 84, 13, 12, 81, 82, 13, 81, 44, 81, 45, 82, 81, 44, 10, 9, 80, 60, 10, 80, 11, 10, 60, 60, 80, 46, 84, 60, 46, 11, 60, 84 ], + "triangles": [ 2, 1, 68, 68, 1, 58, 58, 1, 59, 1, 0, 59, 69, 67, 66, 3, 68, 69, 69, 68, 67, 3, 2, 68, 66, 56, 55, 66, 67, 56, 67, 57, 56, 67, 58, 57, 67, 68, 58, 5, 70, 71, 71, 70, 65, 5, 4, 70, 70, 66, 65, 4, 69, 70, 70, 69, 66, 4, 3, 69, 65, 54, 53, 65, 66, 54, 66, 55, 54, 46, 61, 47, 46, 80, 61, 80, 83, 61, 61, 62, 72, 61, 83, 62, 80, 9, 83, 9, 8, 83, 83, 79, 62, 8, 7, 83, 83, 7, 79, 71, 6, 5, 7, 6, 79, 79, 6, 62, 6, 71, 62, 47, 72, 48, 47, 61, 72, 48, 72, 49, 49, 72, 50, 72, 63, 50, 72, 62, 63, 50, 63, 51, 62, 64, 63, 63, 52, 51, 63, 64, 52, 71, 65, 64, 64, 53, 52, 64, 65, 53, 62, 71, 64, 26, 86, 27, 27, 74, 28, 27, 86, 74, 28, 73, 29, 28, 74, 73, 73, 30, 29, 74, 31, 73, 73, 31, 30, 86, 32, 74, 74, 32, 31, 25, 75, 26, 26, 75, 86, 24, 77, 25, 25, 77, 75, 24, 23, 77, 75, 33, 86, 86, 33, 32, 75, 77, 33, 77, 34, 33, 77, 76, 34, 77, 23, 76, 23, 22, 76, 76, 85, 34, 76, 22, 85, 34, 85, 35, 85, 78, 35, 22, 21, 85, 35, 78, 36, 85, 21, 78, 37, 36, 20, 21, 20, 78, 36, 78, 20, 20, 19, 37, 37, 19, 38, 19, 18, 38, 38, 18, 39, 18, 17, 39, 39, 17, 40, 41, 40, 16, 40, 17, 16, 42, 41, 15, 41, 16, 15, 43, 42, 14, 42, 15, 14, 14, 82, 43, 43, 82, 44, 14, 13, 82, 82, 81, 44, 44, 81, 45, 82, 13, 81, 13, 12, 81, 46, 45, 84, 12, 84, 81, 45, 81, 84, 12, 11, 84, 11, 60, 84, 84, 60, 46, 60, 80, 46, 11, 10, 60, 60, 10, 80, 10, 9, 80 ], "vertices": [ 1, 6, 30.85, 2.45, 1, 2, 5, 60.42, 12.42, 0.24859, 6, 22.32, 18.18, 0.75141, 2, 5, 39.47, 25.25, 0.44332, 6, -1.06, 25.72, 0.55668, 3, 4, 48.03, 29.46, 0.37431, 5, 14.55, 26.45, 0.47619, 6, -25.57, 21.02, 0.1495, 3, 3, 50.36, 32.58, 0.11243, 4, 24.29, 26.8, 0.64611, 5, -8.99, 30.5, 0.24146, 3, 44, -45.22, -8.81, 0.10611, 3, 28.69, 30.4, 0.49533, 4, 2.89, 30.85, 0.39856, 3, 44, -28.91, -12.45, 0.25802, 3, 12.15, 32.8, 0.60894, 4, -12.29, 37.84, 0.13304, 3, 44, -18.5, -14.05, 0.28714, 3, 2.34, 35.98, 0.51935, 29, -7.6, 18.95, 0.19351, 4, 44, -10.79, -18.35, 0.28478, 28, -42.03, 75.56, 0.10295, 3, -6.36, 37.32, 0.37494, 29, -10.2, 10.26, 0.23733, 3, 44, 0.92, -16.96, 0.34087, 3, -17.28, 35.45, 0.32141, 29, -8.2, -0.67, 0.33772, 4, 44, 10.64, -16.32, 0.32691, 45, -24.05, -14.9, 0.16082, 3, -27.58, 33.67, 0.14432, 29, -6.37, -11.05, 0.36794, 4, 44, 28.5, -15.63, 0.24237, 45, -9.55, -15.11, 0.27028, 46, -45.51, -19.12, 0.12132, 29, -3.65, -27.88, 0.36603, 4, 44, 41.59, -14.89, 0.21761, 45, 6.93, -15.35, 0.33285, 46, -26.85, -17.49, 0.20377, 29, -1.3, -43.28, 0.24577, 3, 45, 33.83, -15.81, 0.47179, 46, 0, -15.85, 0.42627, 47, -31.79, -17.82, 0.10194, 3, 45, 63.39, -16.48, 0.2126, 46, 29.52, -14.22, 0.42737, 47, -2.43, -14.39, 0.36002, 3, 46, 49.79, -15.51, 0.30179, 47, 14.85, -13.08, 0.47127, 48, -21.15, -15.64, 0.22695, 3, 46, 61.1, -13.41, 0.15443, 47, 29.03, -11.65, 0.50848, 48, -3.27, -12.45, 0.33708, 2, 47, 41.24, -10.8, 0.28079, 48, 8.41, -8.79, 0.71921, 2, 48, 36.24, -8.59, 0.56513, 49, -3.02, -8.84, 0.43487, 3, 48, 67.93, -10.06, 0.16322, 49, 28.69, -7.82, 0.53712, 50, -8.12, -7.7, 0.29966, 3, 49, 47.76, -8.47, 0.40201, 50, 10.97, -7.9, 0.45131, 51, -26.34, -6.21, 0.14668, 3, 49, 64.62, -8.06, 0.25017, 50, 27.8, -8.4, 0.46039, 51, -12.77, -8.82, 0.28944, 4, 49, 79.13, -10.24, 0.11858, 50, 42.33, -8.03, 0.26981, 51, 4.53, -8.38, 0.48104, 38, -1.56, 35.6, 0.13057, 2, 51, 20.84, -9.2, 0.728, 38, -5.38, 19.56, 0.272, 1, 38, -11.5, -7.3, 1, 4, 51, 43.23, 16.27, 0.2746, 38, 15.1, -7.51, 0.48158, 39, -12.29, -5.54, 0.12942, 40, -41.77, 0.94, 0.11439, 4, 51, 37, 33.94, 0.18804, 38, 33.71, -4.58, 0.34252, 39, 6.54, -5.76, 0.18297, 40, -23.2, -2.19, 0.28647, 3, 38, 53.35, -1.59, 0.21646, 39, 26.41, -6.09, 0.26516, 40, -3.62, -5.59, 0.51838, 2, 39, 47.99, -1.76, 0.15753, 40, 18.37, -4.66, 0.84247, 1, 40, 33.16, -0.12, 1, 2, 39, 47.98, 10.84, 0.17387, 40, 20.32, 7.79, 0.82613, 4, 51, 9.83, 48.43, 0.17572, 38, 53.29, 18.7, 0.17038, 39, 29.73, 13.92, 0.136, 40, 2.77, 13.66, 0.5179, 4, 51, 11.45, 34.58, 0.26313, 38, 39.26, 20.56, 0.23037, 39, 16.21, 18.1, 0.15679, 40, -9.94, 19.88, 0.3497, 4, 51, 12.41, 17.13, 0.37057, 38, 22.11, 22.5, 0.30409, 39, -0.38, 22.88, 0.18235, 40, -25.59, 27.17, 0.14299, 3, 51, 12.34, 10.44, 0.4464, 38, 15.56, 23.92, 0.2976, 39, -6.59, 25.37, 0.256, 4, 50, 38.15, 11.09, 0.28506, 51, 1.65, 10.97, 0.37544, 38, 17.99, 34.75, 0.18251, 39, -2.39, 35.65, 0.15699, 3, 49, 62.62, 10.94, 0.26064, 50, 26.05, 10.62, 0.49792, 51, -15.15, 10.14, 0.24144, 3, 49, 47.27, 9.67, 0.40348, 50, 9.53, 10.2, 0.4787, 51, -26.59, 11.94, 0.11781, 3, 48, 69.23, 6.98, 0.16044, 49, 28.64, 9.27, 0.53936, 50, -7.95, 9.39, 0.3002, 2, 48, 37.36, 8.01, 0.57649, 49, -3.21, 7.8, 0.42351, 2, 47, 45.49, 7.11, 0.2935, 48, 8.38, 9.61, 0.7065, 3, 46, 62.85, 9, 0.15446, 47, 29.41, 10.82, 0.49324, 48, -8.13, 9.49, 0.3523, 3, 46, 52.15, 9.28, 0.30575, 47, 12.84, 11.74, 0.46742, 48, -26.12, 8.77, 0.22683, 3, 45, 66.66, 11.26, 0.21798, 46, 30.62, 13.69, 0.42844, 47, -3.05, 13.54, 0.35358, 3, 45, 37.7, 16.76, 0.48246, 46, 1.32, 16.92, 0.41752, 47, -32.5, 14.97, 0.10002, 4, 44, 44.35, 22.12, 0.2346, 45, 11.91, 21.43, 0.43853, 46, -24.76, 19.57, 0.2068, 3, -58.29, -7.2, 0.12007, 4, 44, 28.55, 23.57, 0.31081, 45, -3.77, 23.84, 0.19158, 28, -76.76, 29.23, 0.21531, 3, -42.43, -7.46, 0.28231, 3, 44, 22.31, 41.64, 0.18196, 28, -69.84, 12.47, 0.43955, 3, -34.84, -25, 0.37848, 3, 44, 19.78, 51.42, 0.1392, 28, -59.84, 2.53, 0.47896, 3, -23.9, -35.17, 0.38184, 3, 44, 6.03, 61.54, 0.10543, 28, -52.71, -5.88, 0.51007, 3, -17.11, -43.61, 0.38449, 2, 28, -37.16, -13.14, 0.67427, 3, -1.22, -50.83, 0.32573, 1, 28, -22.09, -13.06, 1, 2, 28, 1.45, -10.49, 0.89019, 3, 37.4, -48.18, 0.10981, 3, 28, 30.41, 0.97, 0.4302, 3, 66.35, -36.73, 0.16237, 4, 19.98, -44.2, 0.40743, 2, 4, 41.58, -34.52, 0.68165, 5, -9.45, -33.21, 0.31835, 2, 4, 50.69, -30.62, 0.51066, 5, 0.38, -31.99, 0.48934, 3, 4, 58.07, -27.45, 0.26484, 5, 8.35, -31.01, 0.61475, 6, -18.05, -36.28, 0.12041, 3, 4, 69.4, -22.88, 0.17396, 5, 20.51, -29.78, 0.5644, 6, -6.53, -32.23, 0.26164, 2, 5, 33.86, -28.42, 0.29085, 6, 6.13, -27.77, 0.70915, 2, 5, 56.55, -19.38, 0.17381, 6, 26.05, -13.63, 0.82619, 4, 44, 20.79, 3.26, 0.43236, 45, -12.74, 4.03, 0.19687, 3, -36.22, 13.38, 0.21782, 29, 13.98, -19.25, 0.15294, 4, 44, 2.69, 26.81, 0.26409, 28, -50.86, 29.21, 0.2337, 3, -16.39, -8.73, 0.34628, 29, 35.79, -0.49, 0.15592, 3, 44, -15.65, 28.57, 0.15678, 28, -33.54, 28.78, 0.2916, 3, 2.03, -9.11, 0.55162, 1, 28, -28.18, 8.37, 1, 1, 28, -5.01, 11, 1, 3, 28, 24.12, 24.18, 0.12052, 3, 60.07, -13.52, 0.21384, 4, 20.53, -20.16, 0.66564, 2, 4, 39.64, -17.85, 0.59513, 5, -6.68, -16.66, 0.40487, 3, 4, 60.96, -9.87, 0.26252, 5, 16.02, -14.92, 0.55541, 6, -14.39, -18.85, 0.18206, 2, 5, 32.69, 8.3, 0.58729, 6, -3.66, 7.65, 0.41271, 2, 4, 39.53, 3.1, 0.47136, 5, -0.95, 3.5, 0.52864, 1, 4, 17.89, 2.56, 1, 2, 3, 27.01, -3.64, 0.67245, 4, -8.37, -1.32, 0.32755, 3, 44, -2.63, 46, 0.10033, 28, -45.42, 10.27, 0.52612, 3, -9.64, -27.47, 0.37356, 2, 39, 47.98, 4.75, 0.16598, 40, 19.38, 1.78, 0.83402, 4, 51, 19.56, 50.48, 0.12624, 38, 53.31, 9.51, 0.16908, 39, 28.22, 4.86, 0.24846, 40, -0.13, 4.94, 0.45621, 4, 51, 26.31, 16.82, 0.32786, 38, 18.97, 9.25, 0.38308, 39, -5.69, 10.34, 0.1588, 40, -32.78, 15.61, 0.13026, 2, 51, 16.97, -0.03, 0.66865, 38, 4.23, 21.71, 0.33135, 3, 51, 28.1, 2.86, 0.4826, 38, 4.92, 10.15, 0.31302, 39, -19.39, 13.57, 0.20437, 3, 49, 63.22, -0.58, 0.21069, 50, 25.96, 0.79, 0.49387, 51, -11.02, 1.48, 0.29545, 3, 44, -14.84, 8.09, 0.24448, 28, -33.35, 51.23, 0.16325, 3, 2.6, 13.54, 0.59227, 4, 44, 3.38, 4.96, 0.28616, 28, -51.81, 51.13, 0.16477, 3, -15.87, 13.44, 0.31892, 29, 13.85, -0.53, 0.23015, 4, 44, 46.09, 3.59, 0.2409, 45, 9.06, 3.1, 0.41152, 46, -28.46, 0.64, 0.21862, 29, 17.5, -43.07, 0.12896, 3, 45, 37.23, 1.25, 0.47745, 46, -0.08, 1.26, 0.42163, 47, -36.26, -5.26, 0.10093, 4, 44, -5.23, 6.3, 0.25594, 28, -43.11, 51.32, 0.15579, 3, -7.17, 13.63, 0.42092, 29, 14.17, 8.17, 0.16735, 4, 44, 33.04, 3.37, 0.36685, 45, -3.97, 3.61, 0.31093, 3, -45.33, 9.83, 0.17307, 29, 15.76, -30.15, 0.14915, 4, 49, 77.51, -1.16, 0.11479, 50, 40.24, 0.95, 0.26889, 51, 3.05, 0.72, 0.44973, 38, 7.66, 35.33, 0.16659, 4, 51, 22.73, 34.68, 0.22091, 38, 37.18, 9.39, 0.26956, 39, 12.3, 7.43, 0.20636, 40, -15.46, 9.95, 0.30317 ], "hull": 60, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 24, 26, 26, 28, 32, 34, 34, 36, 36, 38, 46, 48, 48, 50, 54, 56, 56, 58, 58, 60, 60, 62, 66, 68, 76, 78, 78, 80, 80, 82, 86, 88, 88, 90, 90, 92, 92, 94, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 116, 118, 0, 118, 92, 120, 120, 20, 28, 86, 82, 32, 34, 80, 78, 36, 76, 38, 12, 124, 102, 126, 126, 124, 126, 128, 128, 130, 130, 132, 132, 134, 112, 134, 134, 136, 136, 4, 2, 116, 6, 138, 138, 132, 8, 140, 140, 130, 10, 142, 142, 128, 128, 104, 130, 106, 132, 108, 122, 92, 100, 144, 144, 122, 126, 144, 144, 94, 112, 114, 114, 116, 108, 110, 110, 112, 16, 18, 18, 20, 20, 22, 22, 24, 12, 14, 14, 16, 122, 124, 94, 96, 96, 98, 56, 146, 146, 60, 54, 148, 148, 62, 146, 148, 50, 150, 150, 66, 46, 152, 152, 68, 154, 152, 154, 48, 42, 156, 156, 72, 14, 158, 158, 124, 18, 160, 160, 122, 160, 120, 24, 162, 162, 90, 26, 164, 164, 88, 162, 164, 16, 166, 160, 166, 166, 158, 166, 124, 162, 168, 168, 120, 168, 22, 168, 92, 38, 40, 40, 42, 72, 74, 74, 76, 40, 74, 42, 44, 44, 46, 152, 170, 170, 156, 44, 170, 68, 70, 70, 72, 170, 70, 62, 64, 64, 66, 148, 172, 172, 150, 64, 172, 50, 52, 52, 54, 172, 52, 154, 66, 150, 154, 28, 30, 30, 32, 82, 84, 84, 86, 30, 84 ], @@ -541,7 +541,7 @@ "front-arm": { "type": "mesh", "uvs": [ 0.71401, 0.00566, 0.67108, 0.08129, 0.60222, 0.15434, 0.53633, 0.21683, 0.44558, 0.28705, 0.34898, 0.35134, 0.29097, 0.38941, 0.25238, 0.41472, 0.22423, 0.44271, 0.19483, 0.47193, 0.15998, 0.50658, 0.09138, 0.59568, 0.05498, 0.70866, 0.02988, 0.81366, 0.01049, 0.94262, 0.10495, 0.98985, 0.25391, 0.97421, 0.31482, 0.88907, 0.28834, 0.82869, 0.13607, 0.74572, 0.14335, 0.71488, 0.18317, 0.62253, 0.25217, 0.54221, 0.29538, 0.50981, 0.33787, 0.47795, 0.38452, 0.45013, 0.43581, 0.41953, 0.54711, 0.3655, 0.68845, 0.29832, 0.74855, 0.35527, 0.85874, 0.38229, 0.99674, 0.37645, 0.95354, 0.33244, 0.91356, 0.29172, 0.87464, 0.25208, 0.83759, 0.21434, 0.78083, 0.12598, 0.78194, 0.0683, 0.6322, 0.23719, 0.66925, 0.15784, 0.75533, 0.20967, 0.7161, 0.11137 ], - "triangles": [ 30, 32, 31, 30, 29, 33, 30, 33, 32, 29, 28, 33, 28, 34, 33, 34, 40, 35, 34, 28, 40, 28, 38, 40, 38, 39, 40, 40, 36, 35, 39, 41, 40, 40, 41, 36, 39, 1, 41, 36, 41, 37, 37, 41, 0, 41, 1, 0, 39, 2, 1, 15, 18, 16, 15, 14, 13, 15, 13, 19, 16, 18, 17, 18, 15, 19, 13, 12, 19, 19, 12, 20, 12, 11, 20, 20, 11, 21, 11, 10, 21, 21, 10, 22, 10, 9, 22, 22, 9, 23, 9, 8, 23, 8, 7, 23, 23, 7, 24, 7, 6, 24, 24, 6, 25, 6, 5, 25, 25, 5, 26, 26, 5, 4, 26, 4, 27, 4, 3, 27, 27, 38, 28, 27, 3, 38, 3, 2, 38, 38, 2, 39 ], + "triangles": [ 30, 29, 33, 30, 32, 31, 40, 41, 36, 39, 41, 40, 40, 36, 35, 38, 39, 40, 28, 38, 40, 34, 28, 40, 34, 40, 35, 28, 34, 33, 29, 28, 33, 30, 33, 32, 41, 1, 0, 37, 41, 0, 36, 41, 37, 39, 1, 41, 39, 2, 1, 19, 12, 20, 13, 12, 19, 18, 15, 19, 16, 18, 17, 15, 13, 19, 15, 14, 13, 15, 18, 16, 21, 10, 22, 11, 10, 21, 20, 11, 21, 12, 11, 20, 9, 8, 23, 22, 9, 23, 10, 9, 22, 26, 5, 4, 25, 5, 26, 6, 5, 25, 24, 6, 25, 7, 6, 24, 23, 7, 24, 8, 7, 23, 38, 2, 39, 3, 2, 38, 27, 3, 38, 27, 38, 28, 4, 3, 27, 26, 4, 27 ], "vertices": [ 1, 53, 21.67, 6.08, 1, 2, 52, 18.13, 3.37, 0.16553, 53, 3.92, 4.24, 0.83447, 3, 33, -6.12, -15.24, 0.20965, 52, -0.05, 8.86, 0.53629, 6, 43.44, 6.81, 0.25406, 1, 33, 10.36, -12.02, 1, 2, 33, 30.62, -10.09, 0.88822, 34, -7.63, -10.15, 0.11178, 2, 33, 50.57, -9.69, 0.30996, 34, 12.31, -9.61, 0.69004, 2, 34, 24.21, -9.37, 0.86563, 35, -13.43, -6.2, 0.13437, 2, 34, 32.12, -9.22, 0.73143, 35, -5.73, -8.02, 0.26857, 2, 34, 39.35, -7.59, 0.54007, 35, 1.68, -8.25, 0.45993, 2, 34, 46.9, -5.88, 0.29037, 35, 9.42, -8.48, 0.70963, 2, 35, 18.59, -8.76, 0.66539, 36, -15.76, -5.13, 0.33461, 1, 36, 6.03, -8.58, 1, 2, 36, 31.42, -5.98, 0.39257, 37, 0.49, -6.36, 0.60743, 1, 37, 23.8, -9.31, 1, 1, 37, 52.37, -11.28, 1, 1, 37, 62.39, 2.72, 1, 1, 37, 58.29, 24.21, 1, 1, 37, 39.22, 32.48, 1, 1, 37, 26, 28.25, 1, 1, 37, 8.33, 5.63, 1, 2, 36, 28.81, 6.64, 0.48313, 37, 1.49, 6.49, 0.51687, 1, 36, 7.61, 5.9, 1, 3, 34, 51.67, 11.07, 0.10767, 35, 18.26, 6.75, 0.559, 36, -12.35, 10.01, 0.33333, 2, 34, 42.19, 10.25, 0.31464, 35, 8.88, 8.32, 0.68536, 2, 34, 32.87, 9.45, 0.59184, 35, -0.35, 9.86, 0.40816, 2, 34, 23.73, 9.7, 0.83036, 35, -9.14, 12.39, 0.16964, 2, 33, 52.08, 9.88, 0.29921, 34, 13.68, 9.98, 0.70079, 2, 33, 32.19, 12.6, 0.84687, 34, -6.24, 12.55, 0.15313, 1, 6, 9.42, 3.39, 1, 2, 6, -5.05, -1.59, 0.472, 5, 29.16, -0.35, 0.528, 1, 5, 16.13, -11.36, 1, 1, 5, 7.46, -29.44, 1, 2, 6, -8.23, -31.57, 0.5193, 5, 19, -28.74, 0.4807, 1, 6, 2, -28.43, 1, 1, 6, 11.96, -25.37, 1, 1, 6, 21.44, -22.45, 1, 3, 52, 12.7, -14.55, 0.25482, 53, 2.14, -14.4, 0.32231, 6, 42.47, -19.82, 0.42287, 1, 53, 13.64, -8.89, 1, 1, 33, 3.55, 0.91, 1, 2, 52, 1.72, -0.73, 0.5001, 6, 40.07, -2.34, 0.4999, 1, 6, 25.66, -11.25, 1, 3, 52, 13.4, -4.65, 0.33234, 53, 0.86, -4.56, 0.48165, 6, 48.12, -11.66, 0.18601 ], "hull": 38, "edges": [ 0, 2, 8, 10, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 70, 72, 72, 74, 0, 74, 56, 76, 6, 8, 76, 6, 4, 6, 4, 78, 78, 80, 80, 70, 2, 82, 82, 72, 82, 78, 78, 76, 2, 4, 56, 80, 56, 66, 62, 64, 64, 66, 66, 68, 68, 70, 44, 46, 46, 48, 18, 20, 46, 18, 10, 12, 12, 14, 48, 50, 50, 52, 12, 50, 14, 16, 16, 18 ], @@ -572,6 +572,17 @@ } ], "animations": { + "idle": { + "bones": { + "hip": { + "translate": [ + {}, + { "time": 1, "y": -1.98 }, + { "time": 2 } + ] + } + } + }, "sneak": { "bones": { "hip": { diff --git a/examples/stretchyman/export/stretchyman-pro.skel b/examples/stretchyman/export/stretchyman-pro.skel index c839c37e9..815094d5e 100644 Binary files a/examples/stretchyman/export/stretchyman-pro.skel and b/examples/stretchyman/export/stretchyman-pro.skel differ diff --git a/examples/stretchyman/export/stretchyman.atlas b/examples/stretchyman/export/stretchyman.atlas index a4a165368..424bb868d 100644 --- a/examples/stretchyman/export/stretchyman.atlas +++ b/examples/stretchyman/export/stretchyman.atlas @@ -2,14 +2,17 @@ stretchyman.png size: 1024, 256 filter: Linear, Linear back-arm - bounds: 149, 45, 72, 202 + bounds: 679, 173, 72, 202 + rotate: 90 back-leg - bounds: 312, 4, 100, 318 + bounds: 2, 2, 100, 318 rotate: 90 body - bounds: 223, 106, 141, 452 + bounds: 2, 104, 141, 452 rotate: 90 front-arm - bounds: 2, 26, 145, 221 + bounds: 456, 100, 145, 221 + rotate: 90 head - bounds: 223, 2, 87, 102 + bounds: 322, 15, 87, 102 + rotate: 90 diff --git a/examples/stretchyman/export/stretchyman.png b/examples/stretchyman/export/stretchyman.png index d715e7b01..1b969bb8b 100644 Binary files a/examples/stretchyman/export/stretchyman.png and b/examples/stretchyman/export/stretchyman.png differ diff --git a/examples/stretchyman/stretchyman-pro.spine b/examples/stretchyman/stretchyman-pro.spine index 565ec13ce..2cceaa8ec 100644 Binary files a/examples/stretchyman/stretchyman-pro.spine and b/examples/stretchyman/stretchyman-pro.spine differ diff --git a/spine-c/spine-c/include/spine/Animation.h b/spine-c/spine-c/include/spine/Animation.h index 26aa66b8f..c00b98ede 100644 --- a/spine-c/spine-c/include/spine/Animation.h +++ b/spine-c/spine-c/include/spine/Animation.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ANIMATION_H_ diff --git a/spine-c/spine-c/include/spine/AnimationState.h b/spine-c/spine-c/include/spine/AnimationState.h index fbbed376d..e7f2f922a 100644 --- a/spine-c/spine-c/include/spine/AnimationState.h +++ b/spine-c/spine-c/include/spine/AnimationState.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ANIMATIONSTATE_H_ diff --git a/spine-c/spine-c/include/spine/AnimationStateData.h b/spine-c/spine-c/include/spine/AnimationStateData.h index 60c59a7ea..2a9eed76a 100644 --- a/spine-c/spine-c/include/spine/AnimationStateData.h +++ b/spine-c/spine-c/include/spine/AnimationStateData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ANIMATIONSTATEDATA_H_ diff --git a/spine-c/spine-c/include/spine/Array.h b/spine-c/spine-c/include/spine/Array.h index e4d98fd7a..99722d616 100644 --- a/spine-c/spine-c/include/spine/Array.h +++ b/spine-c/spine-c/include/spine/Array.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ARRAY_H diff --git a/spine-c/spine-c/include/spine/Atlas.h b/spine-c/spine-c/include/spine/Atlas.h index 0aef18dd6..e522c2767 100644 --- a/spine-c/spine-c/include/spine/Atlas.h +++ b/spine-c/spine-c/include/spine/Atlas.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ATLAS_H_ diff --git a/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h b/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h index ce2986c7f..a17177958 100644 --- a/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h +++ b/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ATLASATTACHMENTLOADER_H_ diff --git a/spine-c/spine-c/include/spine/Attachment.h b/spine-c/spine-c/include/spine/Attachment.h index e9a33b1b4..a071d0f03 100644 --- a/spine-c/spine-c/include/spine/Attachment.h +++ b/spine-c/spine-c/include/spine/Attachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/AttachmentLoader.h b/spine-c/spine-c/include/spine/AttachmentLoader.h index eea153fe1..7c4874f21 100644 --- a/spine-c/spine-c/include/spine/AttachmentLoader.h +++ b/spine-c/spine-c/include/spine/AttachmentLoader.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_ATTACHMENTLOADER_H_ diff --git a/spine-c/spine-c/include/spine/Bone.h b/spine-c/spine-c/include/spine/Bone.h index 243d76de3..5d42a652f 100644 --- a/spine-c/spine-c/include/spine/Bone.h +++ b/spine-c/spine-c/include/spine/Bone.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_BONE_H_ diff --git a/spine-c/spine-c/include/spine/BoneData.h b/spine-c/spine-c/include/spine/BoneData.h index f70a6b0dd..39152c29d 100644 --- a/spine-c/spine-c/include/spine/BoneData.h +++ b/spine-c/spine-c/include/spine/BoneData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_BONEDATA_H_ diff --git a/spine-c/spine-c/include/spine/BoundingBoxAttachment.h b/spine-c/spine-c/include/spine/BoundingBoxAttachment.h index 09284211a..21973e793 100644 --- a/spine-c/spine-c/include/spine/BoundingBoxAttachment.h +++ b/spine-c/spine-c/include/spine/BoundingBoxAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_BOUNDINGBOXATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/ClippingAttachment.h b/spine-c/spine-c/include/spine/ClippingAttachment.h index dc80bf950..63385edfc 100644 --- a/spine-c/spine-c/include/spine/ClippingAttachment.h +++ b/spine-c/spine-c/include/spine/ClippingAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_CLIPPINGATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/Color.h b/spine-c/spine-c/include/spine/Color.h index 395598d48..fa7c0ff62 100644 --- a/spine-c/spine-c/include/spine/Color.h +++ b/spine-c/spine-c/include/spine/Color.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_COLOR_H_ diff --git a/spine-c/spine-c/include/spine/Debug.h b/spine-c/spine-c/include/spine/Debug.h index f1b322782..d3f731d7f 100644 --- a/spine-c/spine-c/include/spine/Debug.h +++ b/spine-c/spine-c/include/spine/Debug.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_DEBUG_H_ diff --git a/spine-c/spine-c/include/spine/Event.h b/spine-c/spine-c/include/spine/Event.h index c8830e8cd..97456b7d4 100644 --- a/spine-c/spine-c/include/spine/Event.h +++ b/spine-c/spine-c/include/spine/Event.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_EVENT_H_ diff --git a/spine-c/spine-c/include/spine/EventData.h b/spine-c/spine-c/include/spine/EventData.h index a76462116..178a2abe1 100644 --- a/spine-c/spine-c/include/spine/EventData.h +++ b/spine-c/spine-c/include/spine/EventData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_EVENTDATA_H_ diff --git a/spine-c/spine-c/include/spine/IkConstraint.h b/spine-c/spine-c/include/spine/IkConstraint.h index c3276d1f9..78f3694dc 100644 --- a/spine-c/spine-c/include/spine/IkConstraint.h +++ b/spine-c/spine-c/include/spine/IkConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_IKCONSTRAINT_H_ diff --git a/spine-c/spine-c/include/spine/IkConstraintData.h b/spine-c/spine-c/include/spine/IkConstraintData.h index 61187d4b9..13f86bec1 100644 --- a/spine-c/spine-c/include/spine/IkConstraintData.h +++ b/spine-c/spine-c/include/spine/IkConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_IKCONSTRAINTDATA_H_ diff --git a/spine-c/spine-c/include/spine/MeshAttachment.h b/spine-c/spine-c/include/spine/MeshAttachment.h index df2bae846..21d8f25c8 100644 --- a/spine-c/spine-c/include/spine/MeshAttachment.h +++ b/spine-c/spine-c/include/spine/MeshAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_MESHATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/PathAttachment.h b/spine-c/spine-c/include/spine/PathAttachment.h index 69f3913cc..35e557cd8 100644 --- a/spine-c/spine-c/include/spine/PathAttachment.h +++ b/spine-c/spine-c/include/spine/PathAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_PATHATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/PathConstraint.h b/spine-c/spine-c/include/spine/PathConstraint.h index 8e17842ce..a5c9ba721 100644 --- a/spine-c/spine-c/include/spine/PathConstraint.h +++ b/spine-c/spine-c/include/spine/PathConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_PATHCONSTRAINT_H_ diff --git a/spine-c/spine-c/include/spine/PathConstraintData.h b/spine-c/spine-c/include/spine/PathConstraintData.h index bd146dade..5177b7a7e 100644 --- a/spine-c/spine-c/include/spine/PathConstraintData.h +++ b/spine-c/spine-c/include/spine/PathConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_PATHCONSTRAINTDATA_H_ diff --git a/spine-c/spine-c/include/spine/PointAttachment.h b/spine-c/spine-c/include/spine/PointAttachment.h index 842b703b5..85a997c46 100644 --- a/spine-c/spine-c/include/spine/PointAttachment.h +++ b/spine-c/spine-c/include/spine/PointAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_POINTATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/RegionAttachment.h b/spine-c/spine-c/include/spine/RegionAttachment.h index 4a526785f..103506c2f 100644 --- a/spine-c/spine-c/include/spine/RegionAttachment.h +++ b/spine-c/spine-c/include/spine/RegionAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_REGIONATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/Sequence.h b/spine-c/spine-c/include/spine/Sequence.h index 0104d6de9..eaffa928f 100644 --- a/spine-c/spine-c/include/spine/Sequence.h +++ b/spine-c/spine-c/include/spine/Sequence.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SEQUENCE_H diff --git a/spine-c/spine-c/include/spine/Skeleton.h b/spine-c/spine-c/include/spine/Skeleton.h index bb9d842ef..c20db56d7 100644 --- a/spine-c/spine-c/include/spine/Skeleton.h +++ b/spine-c/spine-c/include/spine/Skeleton.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETON_H_ diff --git a/spine-c/spine-c/include/spine/SkeletonBinary.h b/spine-c/spine-c/include/spine/SkeletonBinary.h index aa2e5b041..89669c212 100644 --- a/spine-c/spine-c/include/spine/SkeletonBinary.h +++ b/spine-c/spine-c/include/spine/SkeletonBinary.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONBINARY_H_ diff --git a/spine-c/spine-c/include/spine/SkeletonBounds.h b/spine-c/spine-c/include/spine/SkeletonBounds.h index 422e2dbd6..7251d93f9 100644 --- a/spine-c/spine-c/include/spine/SkeletonBounds.h +++ b/spine-c/spine-c/include/spine/SkeletonBounds.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONBOUNDS_H_ diff --git a/spine-c/spine-c/include/spine/SkeletonClipping.h b/spine-c/spine-c/include/spine/SkeletonClipping.h index bc6bfba46..82ec8db5c 100644 --- a/spine-c/spine-c/include/spine/SkeletonClipping.h +++ b/spine-c/spine-c/include/spine/SkeletonClipping.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONCLIPPING_H diff --git a/spine-c/spine-c/include/spine/SkeletonData.h b/spine-c/spine-c/include/spine/SkeletonData.h index f52913059..4be1bac1f 100644 --- a/spine-c/spine-c/include/spine/SkeletonData.h +++ b/spine-c/spine-c/include/spine/SkeletonData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONDATA_H_ diff --git a/spine-c/spine-c/include/spine/SkeletonJson.h b/spine-c/spine-c/include/spine/SkeletonJson.h index 6715755f1..ac2caf9ed 100644 --- a/spine-c/spine-c/include/spine/SkeletonJson.h +++ b/spine-c/spine-c/include/spine/SkeletonJson.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONJSON_H_ diff --git a/spine-c/spine-c/include/spine/Skin.h b/spine-c/spine-c/include/spine/Skin.h index 91cd4ebd7..d1dfe903e 100644 --- a/spine-c/spine-c/include/spine/Skin.h +++ b/spine-c/spine-c/include/spine/Skin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKIN_H_ diff --git a/spine-c/spine-c/include/spine/Slot.h b/spine-c/spine-c/include/spine/Slot.h index 40d52c98b..ce4161057 100644 --- a/spine-c/spine-c/include/spine/Slot.h +++ b/spine-c/spine-c/include/spine/Slot.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SLOT_H_ diff --git a/spine-c/spine-c/include/spine/SlotData.h b/spine-c/spine-c/include/spine/SlotData.h index 1a2a03fac..603097c1e 100644 --- a/spine-c/spine-c/include/spine/SlotData.h +++ b/spine-c/spine-c/include/spine/SlotData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SLOTDATA_H_ diff --git a/spine-c/spine-c/include/spine/TextureRegion.h b/spine-c/spine-c/include/spine/TextureRegion.h index f672297c3..a85d80b48 100644 --- a/spine-c/spine-c/include/spine/TextureRegion.h +++ b/spine-c/spine-c/include/spine/TextureRegion.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_TEXTURE_REGION_H diff --git a/spine-c/spine-c/include/spine/TransformConstraint.h b/spine-c/spine-c/include/spine/TransformConstraint.h index 95f28b9da..364ec86d9 100644 --- a/spine-c/spine-c/include/spine/TransformConstraint.h +++ b/spine-c/spine-c/include/spine/TransformConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_TRANSFORMCONSTRAINT_H_ diff --git a/spine-c/spine-c/include/spine/TransformConstraintData.h b/spine-c/spine-c/include/spine/TransformConstraintData.h index 86912a91e..65e6899d9 100644 --- a/spine-c/spine-c/include/spine/TransformConstraintData.h +++ b/spine-c/spine-c/include/spine/TransformConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_TRANSFORMCONSTRAINTDATA_H_ diff --git a/spine-c/spine-c/include/spine/Triangulator.h b/spine-c/spine-c/include/spine/Triangulator.h index ac47c20db..d24c2ad3e 100644 --- a/spine-c/spine-c/include/spine/Triangulator.h +++ b/spine-c/spine-c/include/spine/Triangulator.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_TRIANGULATOR_H diff --git a/spine-c/spine-c/include/spine/Version.h b/spine-c/spine-c/include/spine/Version.h index 1822b6240..0bd872951 100644 --- a/spine-c/spine-c/include/spine/Version.h +++ b/spine-c/spine-c/include/spine/Version.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_VERTEXEFFECT_H_ diff --git a/spine-c/spine-c/include/spine/VertexAttachment.h b/spine-c/spine-c/include/spine/VertexAttachment.h index 91d6b49b1..223351cf6 100644 --- a/spine-c/spine-c/include/spine/VertexAttachment.h +++ b/spine-c/spine-c/include/spine/VertexAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_VERTEXATTACHMENT_H_ diff --git a/spine-c/spine-c/include/spine/dll.h b/spine-c/spine-c/include/spine/dll.h index 70116a1f8..09dff9069 100644 --- a/spine-c/spine-c/include/spine/dll.h +++ b/spine-c/spine-c/include/spine/dll.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SHAREDLIB_H diff --git a/spine-c/spine-c/include/spine/extension.h b/spine-c/spine-c/include/spine/extension.h index ac5dd8971..3553b2c56 100644 --- a/spine-c/spine-c/include/spine/extension.h +++ b/spine-c/spine-c/include/spine/extension.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ /* diff --git a/spine-c/spine-c/include/spine/spine.h b/spine-c/spine-c/include/spine/spine.h index 458c21f12..9a17b95cd 100644 --- a/spine-c/spine-c/include/spine/spine.h +++ b/spine-c/spine-c/include/spine/spine.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SPINE_H_ diff --git a/spine-c/spine-c/src/spine/Animation.c b/spine-c/spine-c/src/spine/Animation.c index dfbf8de93..ea670cff5 100644 --- a/spine-c/spine-c/src/spine/Animation.c +++ b/spine-c/spine-c/src/spine/Animation.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -37,12 +37,16 @@ _SP_ARRAY_IMPLEMENT_TYPE(spPropertyIdArray, spPropertyId) _SP_ARRAY_IMPLEMENT_TYPE(spTimelineArray, spTimeline *) spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration) { - int i, n; + int i, n, totalCount = 0; spAnimation *self = NEW(spAnimation); MALLOC_STR(self->name, name); self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1); timelines = self->timelines; - self->timelineIds = spPropertyIdArray_create(16); + + for (i = 0, n = timelines->size; i < n; i++) + totalCount += timelines->items[i]->propertyIdsCount; + self->timelineIds = spPropertyIdArray_create(totalCount); + for (i = 0, n = timelines->size; i < n; i++) { spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0, timelines->items[i]->propertyIdsCount); diff --git a/spine-c/spine-c/src/spine/AnimationState.c b/spine-c/spine-c/src/spine/AnimationState.c index 23375ac96..601fd28f6 100644 --- a/spine-c/spine-c/src/spine/AnimationState.c +++ b/spine-c/spine-c/src/spine/AnimationState.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/AnimationStateData.c b/spine-c/spine-c/src/spine/AnimationStateData.c index 0e9ae196d..92ed455a2 100644 --- a/spine-c/spine-c/src/spine/AnimationStateData.c +++ b/spine-c/spine-c/src/spine/AnimationStateData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Array.c b/spine-c/spine-c/src/spine/Array.c index 9aa6d42a6..6de3d7204 100644 --- a/spine-c/spine-c/src/spine/Array.c +++ b/spine-c/spine-c/src/spine/Array.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Atlas.c b/spine-c/spine-c/src/spine/Atlas.c index 92efd9091..56bc629eb 100644 --- a/spine-c/spine-c/src/spine/Atlas.c +++ b/spine-c/spine-c/src/spine/Atlas.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -99,11 +99,11 @@ spAtlasPage *spAtlasPage_create(spAtlas *atlas, const char *name) { spAtlasPage *self = NEW(spAtlasPage); CONST_CAST(spAtlas *, self->atlas) = atlas; MALLOC_STR(self->name, name); - self->minFilter = SP_ATLAS_NEAREST; - self->magFilter = SP_ATLAS_NEAREST; - self->format = SP_ATLAS_RGBA8888; - self->uWrap = SP_ATLAS_CLAMPTOEDGE; - self->vWrap = SP_ATLAS_CLAMPTOEDGE; + self->minFilter = SP_ATLAS_NEAREST; + self->magFilter = SP_ATLAS_NEAREST; + self->format = SP_ATLAS_RGBA8888; + self->uWrap = SP_ATLAS_CLAMPTOEDGE; + self->vWrap = SP_ATLAS_CLAMPTOEDGE; return self; } diff --git a/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c b/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c index 30f32a19d..7a814b085 100644 --- a/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c +++ b/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Attachment.c b/spine-c/spine-c/src/spine/Attachment.c index 8d182051a..43a7806d3 100644 --- a/spine-c/spine-c/src/spine/Attachment.c +++ b/spine-c/spine-c/src/spine/Attachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/AttachmentLoader.c b/spine-c/spine-c/src/spine/AttachmentLoader.c index de23cb280..0e82bfec4 100644 --- a/spine-c/spine-c/src/spine/AttachmentLoader.c +++ b/spine-c/spine-c/src/spine/AttachmentLoader.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Bone.c b/spine-c/spine-c/src/spine/Bone.c index 14f82a1c9..b890ca6b4 100644 --- a/spine-c/spine-c/src/spine/Bone.c +++ b/spine-c/spine-c/src/spine/Bone.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/BoneData.c b/spine-c/spine-c/src/spine/BoneData.c index aa6fde495..c256d6f02 100644 --- a/spine-c/spine-c/src/spine/BoneData.c +++ b/spine-c/spine-c/src/spine/BoneData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/BoundingBoxAttachment.c b/spine-c/spine-c/src/spine/BoundingBoxAttachment.c index 6e1b83272..ab08d5acd 100644 --- a/spine-c/spine-c/src/spine/BoundingBoxAttachment.c +++ b/spine-c/spine-c/src/spine/BoundingBoxAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/ClippingAttachment.c b/spine-c/spine-c/src/spine/ClippingAttachment.c index c1d6b0d70..2187f4fa9 100644 --- a/spine-c/spine-c/src/spine/ClippingAttachment.c +++ b/spine-c/spine-c/src/spine/ClippingAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Color.c b/spine-c/spine-c/src/spine/Color.c index 9a9bbf94a..0000d66a8 100644 --- a/spine-c/spine-c/src/spine/Color.c +++ b/spine-c/spine-c/src/spine/Color.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Debug.c b/spine-c/spine-c/src/spine/Debug.c index 8a854a54d..8b8a31816 100644 --- a/spine-c/spine-c/src/spine/Debug.c +++ b/spine-c/spine-c/src/spine/Debug.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Event.c b/spine-c/spine-c/src/spine/Event.c index 92034d72d..f37cf5d7e 100644 --- a/spine-c/spine-c/src/spine/Event.c +++ b/spine-c/spine-c/src/spine/Event.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/EventData.c b/spine-c/spine-c/src/spine/EventData.c index 8233b4f74..cb65791f5 100644 --- a/spine-c/spine-c/src/spine/EventData.c +++ b/spine-c/spine-c/src/spine/EventData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/IkConstraint.c b/spine-c/spine-c/src/spine/IkConstraint.c index 5d572c457..7ce325d8c 100644 --- a/spine-c/spine-c/src/spine/IkConstraint.c +++ b/spine-c/spine-c/src/spine/IkConstraint.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -84,7 +84,7 @@ void spIkConstraint_apply1(spBone *bone, float targetX, float targetY, int /*boo ty = targetY - bone->worldY; break; case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: { - s = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc); + s = ABS(pa * pd - pb * pc) / MAX(0.0001f, pa * pa + pc * pc); sa = pa / bone->skeleton->scaleX; sc = pc / bone->skeleton->scaleY; pb = -sc * s * bone->skeleton->scaleX; @@ -94,8 +94,13 @@ void spIkConstraint_apply1(spBone *bone, float targetX, float targetY, int /*boo default: { float x = targetX - p->worldX, y = targetY - p->worldY; float d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone->ax; - ty = (y * pa - x * pc) / d - bone->ay; + if (ABS(d) <= 0.0001f) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone->ax; + ty = (y * pa - x * pc) / d - bone->ay; + } } } rotationIK += ATAN2(ty, tx) * RAD_DEG; @@ -177,7 +182,8 @@ void spIkConstraint_apply2(spBone *parent, spBone *child, float targetX, float t b = pp->b; c = pp->c; d = pp->d; - id = 1 / (a * d - b * c); + id = a * d - b * c; + id = ABS(id) <= 0.0001f ? 0 : 1 / id; x = cwx - pp->worldX; y = cwy - pp->worldY; dx = (x * d - y * b) * id - px; diff --git a/spine-c/spine-c/src/spine/IkConstraintData.c b/spine-c/spine-c/src/spine/IkConstraintData.c index 4977a5bcc..c2fe09e3b 100644 --- a/spine-c/spine-c/src/spine/IkConstraintData.c +++ b/spine-c/spine-c/src/spine/IkConstraintData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/MeshAttachment.c b/spine-c/spine-c/src/spine/MeshAttachment.c index ab5f448f5..3657900ad 100644 --- a/spine-c/spine-c/src/spine/MeshAttachment.c +++ b/spine-c/spine-c/src/spine/MeshAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/PathAttachment.c b/spine-c/spine-c/src/spine/PathAttachment.c index c5e1a0f17..853e2a4a5 100644 --- a/spine-c/spine-c/src/spine/PathAttachment.c +++ b/spine-c/spine-c/src/spine/PathAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/PathConstraint.c b/spine-c/spine-c/src/spine/PathConstraint.c index 849dd0260..a9514c5d4 100644 --- a/spine-c/spine-c/src/spine/PathConstraint.c +++ b/spine-c/spine-c/src/spine/PathConstraint.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/PathConstraintData.c b/spine-c/spine-c/src/spine/PathConstraintData.c index 3b2adcb72..b5c55d3c5 100644 --- a/spine-c/spine-c/src/spine/PathConstraintData.c +++ b/spine-c/spine-c/src/spine/PathConstraintData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/PointAttachment.c b/spine-c/spine-c/src/spine/PointAttachment.c index 4d3508f92..00c056074 100644 --- a/spine-c/spine-c/src/spine/PointAttachment.c +++ b/spine-c/spine-c/src/spine/PointAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/RegionAttachment.c b/spine-c/spine-c/src/spine/RegionAttachment.c index b91ce5bef..99a5a9a4c 100644 --- a/spine-c/spine-c/src/spine/RegionAttachment.c +++ b/spine-c/spine-c/src/spine/RegionAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Sequence.c b/spine-c/spine-c/src/spine/Sequence.c index caa256c72..9250a5f03 100644 --- a/spine-c/spine-c/src/spine/Sequence.c +++ b/spine-c/spine-c/src/spine/Sequence.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Skeleton.c b/spine-c/spine-c/src/spine/Skeleton.c index a637ba6f8..0aa2a8507 100644 --- a/spine-c/spine-c/src/spine/Skeleton.c +++ b/spine-c/spine-c/src/spine/Skeleton.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/SkeletonBinary.c b/spine-c/spine-c/src/spine/SkeletonBinary.c index 19fff284a..b15494aa8 100644 --- a/spine-c/spine-c/src/spine/SkeletonBinary.c +++ b/spine-c/spine-c/src/spine/SkeletonBinary.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -114,7 +114,7 @@ static int readInt(_dataInput *input) { static int readVarint(_dataInput *input, int /*bool*/ optimizePositive) { unsigned char b = readByte(input); - uint32_t value = b & 0x7F; + int32_t value = b & 0x7F; if (b & 0x80) { b = readByte(input); value |= (b & 0x7F) << 7; @@ -124,13 +124,12 @@ static int readVarint(_dataInput *input, int /*bool*/ optimizePositive) { if (b & 0x80) { b = readByte(input); value |= (b & 0x7F) << 21; - if (b & 0x80) value |= (uint32_t) (readByte(input) & 0x7F) << 28; + if (b & 0x80) value |= (readByte(input) & 0x7F) << 28; } } } - if (!optimizePositive) - value = ((unsigned int) value >> 1) ^ (~(value & 1)); - return (int) value; + if (!optimizePositive) value = (((unsigned int) value >> 1) ^ -(value & 1)); + return value; } float readFloat(_dataInput *input) { @@ -958,8 +957,8 @@ static void _readVertices(spSkeletonBinary *self, _dataInput *input, int *bonesC float **vertices, int *worldVerticesLength, int vertexCount) { int i, ii; int verticesLength = vertexCount << 1; - spFloatArray *weights = spFloatArray_create(8); - spIntArray *bones = spIntArray_create(8); + spFloatArray *weights = NULL; + spIntArray *bones = NULL; *worldVerticesLength = verticesLength; @@ -968,13 +967,11 @@ static void _readVertices(spSkeletonBinary *self, _dataInput *input, int *bonesC *vertices = _readFloatArray(input, verticesLength, self->scale); *bonesCount = 0; *bones2 = NULL; - spFloatArray_dispose(weights); - spIntArray_dispose(bones); return; } - spFloatArray_ensureCapacity(weights, verticesLength * 3 * 3); - spIntArray_ensureCapacity(bones, verticesLength * 3); + weights = spFloatArray_create(verticesLength * 3 * 3); + bones = spIntArray_create(verticesLength * 3); for (i = 0; i < vertexCount; ++i) { int boneCount = readVarint(input, 1); @@ -1031,7 +1028,10 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput { spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, path, sequence); - spRegionAttachment *region = SUB_CAST(spRegionAttachment, attachment); + spRegionAttachment *region = NULL; + if (!attachment) + return NULL; + region = SUB_CAST(spRegionAttachment, attachment); region->path = path; region->rotation = rotation; region->x = x; @@ -1051,7 +1051,10 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput int vertexCount = readVarint(input, 1); spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, NULL); - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, attachment); + spVertexAttachment *vertexAttachment = NULL; + if (!attachment) + return NULL; + vertexAttachment = SUB_CAST(spVertexAttachment, attachment); _readVertices(self, input, &vertexAttachment->bonesCount, &vertexAttachment->bones, &vertexAttachment->verticesCount, &vertexAttachment->vertices, &vertexAttachment->worldVerticesLength, vertexCount); @@ -1102,7 +1105,10 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput { spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, path, sequence); - spMeshAttachment *mesh = SUB_CAST(spMeshAttachment, attachment); + spMeshAttachment *mesh = NULL; + if (!attachment) + return NULL; + mesh = SUB_CAST(spMeshAttachment, attachment); mesh->path = path; spColor_setFromColor(&mesh->color, &color); mesh->regionUVs = regionUVs; @@ -1151,7 +1157,10 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput { spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, path, sequence); - spMeshAttachment *mesh = SUB_CAST(spMeshAttachment, attachment); + spMeshAttachment *mesh = NULL; + if (!attachment) + return NULL; + mesh = SUB_CAST(spMeshAttachment, attachment); mesh->path = path; spColor_setFromColor(&mesh->color, &color); mesh->sequence = sequence; @@ -1164,9 +1173,13 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput case SP_ATTACHMENT_PATH: { spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, NULL); - spPathAttachment *path = SUB_CAST(spPathAttachment, attachment); - spVertexAttachment *vertexAttachment = SUPER(path); + spPathAttachment *path = NULL; + spVertexAttachment *vertexAttachment = NULL; int vertexCount = 0; + if (!attachment) + return NULL; + path = SUB_CAST(spPathAttachment, attachment); + vertexAttachment = SUPER(path); path->closed = readBoolean(input); path->constantSpeed = readBoolean(input); vertexCount = readVarint(input, 1); @@ -1187,7 +1200,10 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput case SP_ATTACHMENT_POINT: { spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, NULL); - spPointAttachment *point = SUB_CAST(spPointAttachment, attachment); + spPointAttachment *point = NULL; + if (!attachment) + return NULL; + point = SUB_CAST(spPointAttachment, attachment); point->rotation = readFloat(input); point->x = readFloat(input) * self->scale; point->y = readFloat(input) * self->scale; @@ -1203,8 +1219,12 @@ spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput int vertexCount = readVarint(input, 1); spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, NULL); - spClippingAttachment *clip = SUB_CAST(spClippingAttachment, attachment); - spVertexAttachment *vertexAttachment = SUPER(clip); + spClippingAttachment *clip = NULL; + spVertexAttachment *vertexAttachment = NULL; + if (!attachment) + return NULL; + clip = SUB_CAST(spClippingAttachment, attachment); + vertexAttachment = SUPER(clip); _readVertices(self, input, &vertexAttachment->bonesCount, &vertexAttachment->bones, &vertexAttachment->verticesCount, &vertexAttachment->vertices, &vertexAttachment->worldVerticesLength, vertexCount); @@ -1253,7 +1273,9 @@ spSkin *spSkeletonBinary_readSkin(spSkeletonBinary *self, _dataInput *input, int const char *name = readStringRef(input, skeletonData); spAttachment *attachment = spSkeletonBinary_readAttachment(self, input, skin, slotIndex, name, skeletonData, nonessential); - if (attachment) spSkin_setAttachment(skin, slotIndex, name, attachment); + if (!attachment) + return NULL; + spSkin_setAttachment(skin, slotIndex, name, attachment); } } return skin; @@ -1508,6 +1530,11 @@ spSkeletonData *spSkeletonBinary_readSkeletonData(spSkeletonBinary *self, const /* Default skin. */ skeletonData->defaultSkin = spSkeletonBinary_readSkin(self, input, -1, skeletonData, nonessential); + if (self->attachmentLoader->error1) { + spSkeletonData_dispose(skeletonData); + _spSkeletonBinary_setError(self, self->attachmentLoader->error1, self->attachmentLoader->error2); + return NULL; + } skeletonData->skinsCount = readVarint(input, 1); if (skeletonData->defaultSkin) @@ -1520,7 +1547,13 @@ spSkeletonData *spSkeletonBinary_readSkeletonData(spSkeletonBinary *self, const /* Skins. */ for (i = skeletonData->defaultSkin ? 1 : 0; i < skeletonData->skinsCount; ++i) { - skeletonData->skins[i] = spSkeletonBinary_readSkin(self, input, 0, skeletonData, nonessential); + spSkin *skin = spSkeletonBinary_readSkin(self, input, 0, skeletonData, nonessential); + if (self->attachmentLoader->error1) { + spSkeletonData_dispose(skeletonData); + _spSkeletonBinary_setError(self, self->attachmentLoader->error1, self->attachmentLoader->error2); + return NULL; + } + skeletonData->skins[i] = skin; } /* Linked meshes. */ @@ -1575,6 +1608,7 @@ spSkeletonData *spSkeletonBinary_readSkeletonData(spSkeletonBinary *self, const if (!animation) { FREE(input); spSkeletonData_dispose(skeletonData); + _spSkeletonBinary_setError(self, "Animation corrupted: ", name); return NULL; } skeletonData->animations[i] = animation; diff --git a/spine-c/spine-c/src/spine/SkeletonBounds.c b/spine-c/spine-c/src/spine/SkeletonBounds.c index a873eb999..292b534dc 100644 --- a/spine-c/spine-c/src/spine/SkeletonBounds.c +++ b/spine-c/spine-c/src/spine/SkeletonBounds.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/SkeletonClipping.c b/spine-c/spine-c/src/spine/SkeletonClipping.c index c3718ff6a..6de8dffb6 100644 --- a/spine-c/spine-c/src/spine/SkeletonClipping.c +++ b/spine-c/spine-c/src/spine/SkeletonClipping.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/SkeletonData.c b/spine-c/spine-c/src/spine/SkeletonData.c index ffb1c6638..ac011ba3b 100644 --- a/spine-c/spine-c/src/spine/SkeletonData.c +++ b/spine-c/spine-c/src/spine/SkeletonData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/SkeletonJson.c b/spine-c/spine-c/src/spine/SkeletonJson.c index ad4e7794c..5343d151b 100644 --- a/spine-c/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/spine-c/src/spine/SkeletonJson.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "Json.h" @@ -984,8 +984,8 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char skeleton = Json_getItem(root, "skeleton"); if (skeleton) { - MALLOC_STR(skeletonData->hash, Json_getString(skeleton, "hash", 0)); - MALLOC_STR(skeletonData->version, Json_getString(skeleton, "spine", 0)); + MALLOC_STR(skeletonData->hash, Json_getString(skeleton, "hash", "0")); + MALLOC_STR(skeletonData->version, Json_getString(skeleton, "spine", "0")); if (!string_starts_with(skeletonData->version, SPINE_VERSION_STRING)) { char errorMsg[255]; sprintf(errorMsg, "Skeleton version %s does not match runtime version %s", skeletonData->version, SPINE_VERSION_STRING); diff --git a/spine-c/spine-c/src/spine/Skin.c b/spine-c/spine-c/src/spine/Skin.c index 517844b07..56288a289 100644 --- a/spine-c/spine-c/src/spine/Skin.c +++ b/spine-c/spine-c/src/spine/Skin.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Slot.c b/spine-c/spine-c/src/spine/Slot.c index 3973d775e..75ea24524 100644 --- a/spine-c/spine-c/src/spine/Slot.c +++ b/spine-c/spine-c/src/spine/Slot.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/SlotData.c b/spine-c/spine-c/src/spine/SlotData.c index 424ac73d6..84edd4397 100644 --- a/spine-c/spine-c/src/spine/SlotData.c +++ b/spine-c/spine-c/src/spine/SlotData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/TransformConstraint.c b/spine-c/spine-c/src/spine/TransformConstraint.c index ec67f289d..ff426c331 100644 --- a/spine-c/spine-c/src/spine/TransformConstraint.c +++ b/spine-c/spine-c/src/spine/TransformConstraint.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/TransformConstraintData.c b/spine-c/spine-c/src/spine/TransformConstraintData.c index 01284d8c3..3c62e89b1 100644 --- a/spine-c/spine-c/src/spine/TransformConstraintData.c +++ b/spine-c/spine-c/src/spine/TransformConstraintData.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/Triangulator.c b/spine-c/spine-c/src/spine/Triangulator.c index c3d6701f1..8d28f53bd 100644 --- a/spine-c/spine-c/src/spine/Triangulator.c +++ b/spine-c/spine-c/src/spine/Triangulator.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/VertexAttachment.c b/spine-c/spine-c/src/spine/VertexAttachment.c index 23ac0a4ad..224be0013 100644 --- a/spine-c/spine-c/src/spine/VertexAttachment.c +++ b/spine-c/spine-c/src/spine/VertexAttachment.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-c/spine-c/src/spine/extension.c b/spine-c/spine-c/src/spine/extension.c index 85b8d30e7..c83caafdf 100644 --- a/spine-c/spine-c/src/spine/extension.c +++ b/spine-c/spine-c/src/spine/extension.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2d-objc/example/CoinExample.h b/spine-cocos2d-objc/example/CoinExample.h index cc6c780d2..be34ee991 100644 --- a/spine-cocos2d-objc/example/CoinExample.h +++ b/spine-cocos2d-objc/example/CoinExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/CoinExample.m b/spine-cocos2d-objc/example/CoinExample.m index 8cb08cd39..9f41437d0 100644 --- a/spine-cocos2d-objc/example/CoinExample.m +++ b/spine-cocos2d-objc/example/CoinExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "CoinExample.h" diff --git a/spine-cocos2d-objc/example/GoblinsExample.h b/spine-cocos2d-objc/example/GoblinsExample.h index 79c3c3220..351ffc93d 100644 --- a/spine-cocos2d-objc/example/GoblinsExample.h +++ b/spine-cocos2d-objc/example/GoblinsExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/GoblinsExample.m b/spine-cocos2d-objc/example/GoblinsExample.m index effffcb41..7ecb655df 100644 --- a/spine-cocos2d-objc/example/GoblinsExample.m +++ b/spine-cocos2d-objc/example/GoblinsExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "GoblinsExample.h" diff --git a/spine-cocos2d-objc/example/IKExample.h b/spine-cocos2d-objc/example/IKExample.h index 6cf577272..7d065052e 100644 --- a/spine-cocos2d-objc/example/IKExample.h +++ b/spine-cocos2d-objc/example/IKExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/IKExample.m b/spine-cocos2d-objc/example/IKExample.m index 80d5a8a0b..04cea9cfb 100644 --- a/spine-cocos2d-objc/example/IKExample.m +++ b/spine-cocos2d-objc/example/IKExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "IKExample.h" diff --git a/spine-cocos2d-objc/example/RaptorExample.h b/spine-cocos2d-objc/example/RaptorExample.h index a8b110c5b..9be0f7206 100644 --- a/spine-cocos2d-objc/example/RaptorExample.h +++ b/spine-cocos2d-objc/example/RaptorExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/RaptorExample.m b/spine-cocos2d-objc/example/RaptorExample.m index 7527bfb04..1165515bd 100644 --- a/spine-cocos2d-objc/example/RaptorExample.m +++ b/spine-cocos2d-objc/example/RaptorExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "RaptorExample.h" diff --git a/spine-cocos2d-objc/example/SpineboyExample.h b/spine-cocos2d-objc/example/SpineboyExample.h index b88ce872d..50eede4a8 100644 --- a/spine-cocos2d-objc/example/SpineboyExample.h +++ b/spine-cocos2d-objc/example/SpineboyExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/SpineboyExample.m b/spine-cocos2d-objc/example/SpineboyExample.m index 848b2b128..d544b5fe1 100644 --- a/spine-cocos2d-objc/example/SpineboyExample.m +++ b/spine-cocos2d-objc/example/SpineboyExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "SpineboyExample.h" diff --git a/spine-cocos2d-objc/example/TankExample.h b/spine-cocos2d-objc/example/TankExample.h index 870357bfa..973cd55ca 100644 --- a/spine-cocos2d-objc/example/TankExample.h +++ b/spine-cocos2d-objc/example/TankExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "cocos2d.h" diff --git a/spine-cocos2d-objc/example/TankExample.m b/spine-cocos2d-objc/example/TankExample.m index ec77a7ac8..8cd617993 100644 --- a/spine-cocos2d-objc/example/TankExample.m +++ b/spine-cocos2d-objc/example/TankExample.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import "TankExample.h" diff --git a/spine-cocos2d-objc/src/spine/GLUtils.c b/spine-cocos2d-objc/src/spine/GLUtils.c index 187c5659c..c9dd7543b 100644 --- a/spine-cocos2d-objc/src/spine/GLUtils.c +++ b/spine-cocos2d-objc/src/spine/GLUtils.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "GLUtils.h" diff --git a/spine-cocos2d-objc/src/spine/GLUtils.h b/spine-cocos2d-objc/src/spine/GLUtils.h index a49b79f6b..9829bf98e 100644 --- a/spine-cocos2d-objc/src/spine/GLUtils.h +++ b/spine-cocos2d-objc/src/spine/GLUtils.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef GLUtils_h diff --git a/spine-cocos2d-objc/src/spine/SkeletonAnimation.h b/spine-cocos2d-objc/src/spine/SkeletonAnimation.h index c8328be1b..ec2e150cd 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonAnimation.h +++ b/spine-cocos2d-objc/src/spine/SkeletonAnimation.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2d-objc/src/spine/SkeletonAnimation.m b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m index 219c11b84..d44d5a1a8 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonAnimation.m +++ b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2d-objc/src/spine/SkeletonRenderer.h b/spine-cocos2d-objc/src/spine/SkeletonRenderer.h index d11a55d65..47a918b84 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonRenderer.h +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m index ee20afb49..d51e4bdd5 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h index 7da67d0d4..001663301 100644 --- a/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h +++ b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m index b302ce95b..83418fb48 100644 --- a/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m +++ b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #import diff --git a/spine-cocos2dx/example/Classes/AppDelegate.cpp b/spine-cocos2dx/example/Classes/AppDelegate.cpp index 7e3e95acc..5c3feabb4 100644 --- a/spine-cocos2dx/example/Classes/AppDelegate.cpp +++ b/spine-cocos2dx/example/Classes/AppDelegate.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "AppDelegate.h" diff --git a/spine-cocos2dx/example/Classes/AppDelegate.h b/spine-cocos2dx/example/Classes/AppDelegate.h index 2118dd44e..4484d6784 100644 --- a/spine-cocos2dx/example/Classes/AppDelegate.h +++ b/spine-cocos2dx/example/Classes/AppDelegate.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _APPDELEGATE_H_ diff --git a/spine-cocos2dx/example/Classes/AppMacros.h b/spine-cocos2dx/example/Classes/AppMacros.h index 2367118c8..24dcdca5f 100644 --- a/spine-cocos2dx/example/Classes/AppMacros.h +++ b/spine-cocos2dx/example/Classes/AppMacros.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _APPMACROS_H_ diff --git a/spine-cocos2dx/example/Classes/BatchingExample.cpp b/spine-cocos2dx/example/Classes/BatchingExample.cpp index 00b52b2c9..12779525f 100644 --- a/spine-cocos2dx/example/Classes/BatchingExample.cpp +++ b/spine-cocos2dx/example/Classes/BatchingExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "BatchingExample.h" diff --git a/spine-cocos2dx/example/Classes/BatchingExample.h b/spine-cocos2dx/example/Classes/BatchingExample.h index 425032ead..371086a16 100644 --- a/spine-cocos2dx/example/Classes/BatchingExample.h +++ b/spine-cocos2dx/example/Classes/BatchingExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _BATCHINGEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/CoinExample.cpp b/spine-cocos2dx/example/Classes/CoinExample.cpp index 3f257c5b9..0549adf6a 100644 --- a/spine-cocos2dx/example/Classes/CoinExample.cpp +++ b/spine-cocos2dx/example/Classes/CoinExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "CoinExample.h" diff --git a/spine-cocos2dx/example/Classes/CoinExample.h b/spine-cocos2dx/example/Classes/CoinExample.h index 2a48e5844..2e5a702df 100644 --- a/spine-cocos2dx/example/Classes/CoinExample.h +++ b/spine-cocos2dx/example/Classes/CoinExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _COINEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/GoblinsExample.cpp b/spine-cocos2dx/example/Classes/GoblinsExample.cpp index 08ad1bbbe..950721276 100644 --- a/spine-cocos2dx/example/Classes/GoblinsExample.cpp +++ b/spine-cocos2dx/example/Classes/GoblinsExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "GoblinsExample.h" diff --git a/spine-cocos2dx/example/Classes/GoblinsExample.h b/spine-cocos2dx/example/Classes/GoblinsExample.h index b66ce6490..cdd7eecfc 100644 --- a/spine-cocos2dx/example/Classes/GoblinsExample.h +++ b/spine-cocos2dx/example/Classes/GoblinsExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _GOBLINSEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/IKExample.cpp b/spine-cocos2dx/example/Classes/IKExample.cpp index b9e820c60..66d868472 100644 --- a/spine-cocos2dx/example/Classes/IKExample.cpp +++ b/spine-cocos2dx/example/Classes/IKExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "IKExample.h" diff --git a/spine-cocos2dx/example/Classes/IKExample.h b/spine-cocos2dx/example/Classes/IKExample.h index c373a685d..1fc70234e 100644 --- a/spine-cocos2dx/example/Classes/IKExample.h +++ b/spine-cocos2dx/example/Classes/IKExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _IKEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/MixAndMatchExample.cpp b/spine-cocos2dx/example/Classes/MixAndMatchExample.cpp index 9f99de8ad..3cd8b56a9 100644 --- a/spine-cocos2dx/example/Classes/MixAndMatchExample.cpp +++ b/spine-cocos2dx/example/Classes/MixAndMatchExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "MixAndMatchExample.h" diff --git a/spine-cocos2dx/example/Classes/MixAndMatchExample.h b/spine-cocos2dx/example/Classes/MixAndMatchExample.h index e032cd0fd..3fac27141 100644 --- a/spine-cocos2dx/example/Classes/MixAndMatchExample.h +++ b/spine-cocos2dx/example/Classes/MixAndMatchExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _MIXANDMATCHEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/RaptorExample.cpp b/spine-cocos2dx/example/Classes/RaptorExample.cpp index 3f66818d7..315a57911 100644 --- a/spine-cocos2dx/example/Classes/RaptorExample.cpp +++ b/spine-cocos2dx/example/Classes/RaptorExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "RaptorExample.h" diff --git a/spine-cocos2dx/example/Classes/RaptorExample.h b/spine-cocos2dx/example/Classes/RaptorExample.h index c8ca455d2..8349e62c9 100644 --- a/spine-cocos2dx/example/Classes/RaptorExample.h +++ b/spine-cocos2dx/example/Classes/RaptorExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _RAPTOREXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/SequenceExample.cpp b/spine-cocos2dx/example/Classes/SequenceExample.cpp index 9cab99218..d6acd0a45 100644 --- a/spine-cocos2dx/example/Classes/SequenceExample.cpp +++ b/spine-cocos2dx/example/Classes/SequenceExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SequenceExample.h" diff --git a/spine-cocos2dx/example/Classes/SequenceExample.h b/spine-cocos2dx/example/Classes/SequenceExample.h index f19baf424..aa440ac06 100644 --- a/spine-cocos2dx/example/Classes/SequenceExample.h +++ b/spine-cocos2dx/example/Classes/SequenceExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _SEQUENCEEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.cpp b/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.cpp index 8b3fe9cc5..e83d1ef44 100644 --- a/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.cpp +++ b/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SkeletonRendererSeparatorExample.h" diff --git a/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.h b/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.h index 8067e49d4..b73601fb5 100644 --- a/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.h +++ b/spine-cocos2dx/example/Classes/SkeletonRendererSeparatorExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _SKELETONRENDERERSEPARATOREXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/SpineboyExample.cpp b/spine-cocos2dx/example/Classes/SpineboyExample.cpp index 7aa1bff83..0d5b7344d 100644 --- a/spine-cocos2dx/example/Classes/SpineboyExample.cpp +++ b/spine-cocos2dx/example/Classes/SpineboyExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineboyExample.h" diff --git a/spine-cocos2dx/example/Classes/SpineboyExample.h b/spine-cocos2dx/example/Classes/SpineboyExample.h index 0212f0c1c..d96d0b9dc 100644 --- a/spine-cocos2dx/example/Classes/SpineboyExample.h +++ b/spine-cocos2dx/example/Classes/SpineboyExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _SPINEBOYEXAMPLE_H_ diff --git a/spine-cocos2dx/example/Classes/TankExample.cpp b/spine-cocos2dx/example/Classes/TankExample.cpp index 7a755d9c1..05b826085 100644 --- a/spine-cocos2dx/example/Classes/TankExample.cpp +++ b/spine-cocos2dx/example/Classes/TankExample.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "TankExample.h" diff --git a/spine-cocos2dx/example/Classes/TankExample.h b/spine-cocos2dx/example/Classes/TankExample.h index 473cfa871..7ede49a77 100644 --- a/spine-cocos2dx/example/Classes/TankExample.h +++ b/spine-cocos2dx/example/Classes/TankExample.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef _TANKEXAMPLE_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.cpp index c4e8b38cc..6da1bfb0e 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.h b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.h index 5169314dc..319352283 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonAnimation.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONANIMATION_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.cpp index b4336a41e..3547fd8ce 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.h b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.h index 969127220..94c06585c 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/SkeletonRenderer.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONRENDERER_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.cpp index 0a660f9ef..000f9d07f 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.h b/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.h index e23719357..d5729484c 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/spine-cocos2dx.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_COCOS2DX_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.cpp index 52fca5871..da2ecc74b 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.h b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.h index a7fc325f3..63f58a90c 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonBatch.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONBATCH_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.cpp index cb6942317..9629d0bb5 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.h b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.h index 9587632e6..03abe9019 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v3/SkeletonTwoColorBatch.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONTWOCOLORBATCH_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp index 094700a19..a64fcc864 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.h b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.h index 688209722..f2917b89c 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonBatch.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONBATCH_H_ diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.cpp b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.cpp index 5593bb63d..ffbb8d875 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.cpp +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.h b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.h index e3ad84a09..43efd8766 100644 --- a/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.h +++ b/spine-cocos2dx/spine-cocos2dx/src/spine/v4/SkeletonTwoColorBatch.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SKELETONTWOCOLORBATCH_H_ diff --git a/spine-cpp/CMakeLists.txt b/spine-cpp/CMakeLists.txt index e008c339e..96e5a7acb 100644 --- a/spine-cpp/CMakeLists.txt +++ b/spine-cpp/CMakeLists.txt @@ -13,5 +13,13 @@ file(GLOB SOURCES "spine-cpp/src/**/*.cpp") add_library(spine-cpp STATIC ${SOURCES} ${INCLUDES}) target_include_directories(spine-cpp PUBLIC spine-cpp/include) -install(TARGETS spine-cpp DESTINATION dist/lib) -install(FILES ${INCLUDES} DESTINATION dist/include) \ No newline at end of file + +# Install target +install(TARGETS spine-cpp EXPORT spine-cpp_TARGETS DESTINATION dist/lib) +install(FILES ${INCLUDES} DESTINATION dist/include) + +# Export target +export( + EXPORT spine-cpp_TARGETS + FILE ${CMAKE_CURRENT_BINARY_DIR}/spine-cppTargets.cmake + NAMESPACE "Spine::") \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt b/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt index e853f5692..e745514bf 100755 --- a/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt +++ b/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt @@ -1,18 +1,9 @@ project(spine_cpp_unit_test) -set(CMAKE_INSTALL_PREFIX "./") -set(CMAKE_VERBOSE_MAKEFILE ON) - -include_directories(../spine-cpp/include teamcity minicppunit tests memory) - -set(SRC - src/main.cpp - ) - +set(SRC src/main.cpp) add_executable(spine_cpp_unit_test ${SRC}) target_link_libraries(spine_cpp_unit_test spine-cpp) - ######################################################### # copy resources to build output directory ######################################################### diff --git a/spine-cpp/spine-cpp/include/spine/Animation.h b/spine-cpp/spine-cpp/include/spine/Animation.h index 311a02989..f21f88eac 100644 --- a/spine-cpp/spine-cpp/include/spine/Animation.h +++ b/spine-cpp/spine-cpp/include/spine/Animation.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Animation_h diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index d7acd6363..52cc69f6e 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AnimationState_h diff --git a/spine-cpp/spine-cpp/include/spine/AnimationStateData.h b/spine-cpp/spine-cpp/include/spine/AnimationStateData.h index 84db21f0b..bdde48e5f 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationStateData.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationStateData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AnimationStateData_h diff --git a/spine-cpp/spine-cpp/include/spine/Atlas.h b/spine-cpp/spine-cpp/include/spine/Atlas.h index c65688d6d..822467e24 100644 --- a/spine-cpp/spine-cpp/include/spine/Atlas.h +++ b/spine-cpp/spine-cpp/include/spine/Atlas.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Atlas_h diff --git a/spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h b/spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h index 4cd508a50..d45ebafc4 100644 --- a/spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h +++ b/spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AtlasAttachmentLoader_h diff --git a/spine-cpp/spine-cpp/include/spine/Attachment.h b/spine-cpp/spine-cpp/include/spine/Attachment.h index 7c178eb9e..418716773 100644 --- a/spine-cpp/spine-cpp/include/spine/Attachment.h +++ b/spine-cpp/spine-cpp/include/spine/Attachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Attachment_h diff --git a/spine-cpp/spine-cpp/include/spine/AttachmentLoader.h b/spine-cpp/spine-cpp/include/spine/AttachmentLoader.h index 2fa65db06..66c0e364d 100644 --- a/spine-cpp/spine-cpp/include/spine/AttachmentLoader.h +++ b/spine-cpp/spine-cpp/include/spine/AttachmentLoader.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AttachmentLoader_h diff --git a/spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h b/spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h index 4b475c380..6f3b98469 100644 --- a/spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AttachmentTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/AttachmentType.h b/spine-cpp/spine-cpp/include/spine/AttachmentType.h index 308524ecb..a92b60776 100644 --- a/spine-cpp/spine-cpp/include/spine/AttachmentType.h +++ b/spine-cpp/spine-cpp/include/spine/AttachmentType.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_AttachmentType_h diff --git a/spine-cpp/spine-cpp/include/spine/BlendMode.h b/spine-cpp/spine-cpp/include/spine/BlendMode.h index d24bfa45b..989a1be41 100644 --- a/spine-cpp/spine-cpp/include/spine/BlendMode.h +++ b/spine-cpp/spine-cpp/include/spine/BlendMode.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_BlendMode_h diff --git a/spine-cpp/spine-cpp/include/spine/Bone.h b/spine-cpp/spine-cpp/include/spine/Bone.h index 83bd7a391..e1384aa94 100644 --- a/spine-cpp/spine-cpp/include/spine/Bone.h +++ b/spine-cpp/spine-cpp/include/spine/Bone.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Bone_h diff --git a/spine-cpp/spine-cpp/include/spine/BoneData.h b/spine-cpp/spine-cpp/include/spine/BoneData.h index 7dd69e486..51c04a6d3 100644 --- a/spine-cpp/spine-cpp/include/spine/BoneData.h +++ b/spine-cpp/spine-cpp/include/spine/BoneData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_BoneData_h diff --git a/spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h b/spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h index 35ad2ee58..0ea3e2a71 100644 --- a/spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_BoundingBoxAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/ClippingAttachment.h b/spine-cpp/spine-cpp/include/spine/ClippingAttachment.h index 4fb976ad7..ce7675eb8 100644 --- a/spine-cpp/spine-cpp/include/spine/ClippingAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/ClippingAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_ClippingAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/Color.h b/spine-cpp/spine-cpp/include/spine/Color.h index 7b5de758c..676f2cd4d 100644 --- a/spine-cpp/spine-cpp/include/spine/Color.h +++ b/spine-cpp/spine-cpp/include/spine/Color.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_COLOR_H diff --git a/spine-cpp/spine-cpp/include/spine/ColorTimeline.h b/spine-cpp/spine-cpp/include/spine/ColorTimeline.h index 8ae32bcb7..e2528f106 100644 --- a/spine-cpp/spine-cpp/include/spine/ColorTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/ColorTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_ColorTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/ConstraintData.h b/spine-cpp/spine-cpp/include/spine/ConstraintData.h index dc540ed35..c35a7e672 100644 --- a/spine-cpp/spine-cpp/include/spine/ConstraintData.h +++ b/spine-cpp/spine-cpp/include/spine/ConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Constraint_h diff --git a/spine-cpp/spine-cpp/include/spine/ContainerUtil.h b/spine-cpp/spine-cpp/include/spine/ContainerUtil.h index 4e1192488..3e2212821 100644 --- a/spine-cpp/spine-cpp/include/spine/ContainerUtil.h +++ b/spine-cpp/spine-cpp/include/spine/ContainerUtil.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_ContainerUtil_h diff --git a/spine-cpp/spine-cpp/include/spine/CurveTimeline.h b/spine-cpp/spine-cpp/include/spine/CurveTimeline.h index ac81fd0df..43e741ba9 100644 --- a/spine-cpp/spine-cpp/include/spine/CurveTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/CurveTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_CurveTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Debug.h b/spine-cpp/spine-cpp/include/spine/Debug.h index 5b5b63660..9b8443dc3 100644 --- a/spine-cpp/spine-cpp/include/spine/Debug.h +++ b/spine-cpp/spine-cpp/include/spine/Debug.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_LOG_H diff --git a/spine-cpp/spine-cpp/include/spine/DeformTimeline.h b/spine-cpp/spine-cpp/include/spine/DeformTimeline.h index 6d8f1af65..6b8555d1d 100644 --- a/spine-cpp/spine-cpp/include/spine/DeformTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/DeformTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_DeformTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h b/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h index fc9359bbc..873fe7561 100644 --- a/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_DrawOrderTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Event.h b/spine-cpp/spine-cpp/include/spine/Event.h index 800bd93f2..ac0b12246 100644 --- a/spine-cpp/spine-cpp/include/spine/Event.h +++ b/spine-cpp/spine-cpp/include/spine/Event.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Event_h diff --git a/spine-cpp/spine-cpp/include/spine/EventData.h b/spine-cpp/spine-cpp/include/spine/EventData.h index 137a0f1b4..5099c565b 100644 --- a/spine-cpp/spine-cpp/include/spine/EventData.h +++ b/spine-cpp/spine-cpp/include/spine/EventData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_EventData_h diff --git a/spine-cpp/spine-cpp/include/spine/EventTimeline.h b/spine-cpp/spine-cpp/include/spine/EventTimeline.h index 732b78073..e9a89be62 100644 --- a/spine-cpp/spine-cpp/include/spine/EventTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/EventTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_EventTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Extension.h b/spine-cpp/spine-cpp/include/spine/Extension.h index 2275bff79..9757ea7a5 100644 --- a/spine-cpp/spine-cpp/include/spine/Extension.h +++ b/spine-cpp/spine-cpp/include/spine/Extension.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Extension_h diff --git a/spine-cpp/spine-cpp/include/spine/HasRendererObject.h b/spine-cpp/spine-cpp/include/spine/HasRendererObject.h index d4b93c043..579293928 100644 --- a/spine-cpp/spine-cpp/include/spine/HasRendererObject.h +++ b/spine-cpp/spine-cpp/include/spine/HasRendererObject.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_HasRendererObject_h diff --git a/spine-cpp/spine-cpp/include/spine/HashMap.h b/spine-cpp/spine-cpp/include/spine/HashMap.h index c97bcd956..741425cd7 100755 --- a/spine-cpp/spine-cpp/include/spine/HashMap.h +++ b/spine-cpp/spine-cpp/include/spine/HashMap.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_HashMap_h diff --git a/spine-cpp/spine-cpp/include/spine/IkConstraint.h b/spine-cpp/spine-cpp/include/spine/IkConstraint.h index c00193fca..02d7629bf 100644 --- a/spine-cpp/spine-cpp/include/spine/IkConstraint.h +++ b/spine-cpp/spine-cpp/include/spine/IkConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_IkConstraint_h diff --git a/spine-cpp/spine-cpp/include/spine/IkConstraintData.h b/spine-cpp/spine-cpp/include/spine/IkConstraintData.h index 664f7c084..96f59131b 100644 --- a/spine-cpp/spine-cpp/include/spine/IkConstraintData.h +++ b/spine-cpp/spine-cpp/include/spine/IkConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_IkConstraintData_h diff --git a/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h b/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h index efb7630b4..54c2d5acf 100644 --- a/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_IkConstraintTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Json.h b/spine-cpp/spine-cpp/include/spine/Json.h index cc5b82b94..8c275e46b 100644 --- a/spine-cpp/spine-cpp/include/spine/Json.h +++ b/spine-cpp/spine-cpp/include/spine/Json.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Json_h diff --git a/spine-cpp/spine-cpp/include/spine/LinkedMesh.h b/spine-cpp/spine-cpp/include/spine/LinkedMesh.h index 3af86be72..053aa90c1 100644 --- a/spine-cpp/spine-cpp/include/spine/LinkedMesh.h +++ b/spine-cpp/spine-cpp/include/spine/LinkedMesh.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_LinkedMesh_h diff --git a/spine-cpp/spine-cpp/include/spine/Log.h b/spine-cpp/spine-cpp/include/spine/Log.h index 269a7895e..3d4fc6549 100644 --- a/spine-cpp/spine-cpp/include/spine/Log.h +++ b/spine-cpp/spine-cpp/include/spine/Log.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_DEBUG_LOG_H diff --git a/spine-cpp/spine-cpp/include/spine/MathUtil.h b/spine-cpp/spine-cpp/include/spine/MathUtil.h index 19ebb515c..38691e737 100644 --- a/spine-cpp/spine-cpp/include/spine/MathUtil.h +++ b/spine-cpp/spine-cpp/include/spine/MathUtil.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_MathUtil_h diff --git a/spine-cpp/spine-cpp/include/spine/MeshAttachment.h b/spine-cpp/spine-cpp/include/spine/MeshAttachment.h index 757a85385..df8ed3a3e 100644 --- a/spine-cpp/spine-cpp/include/spine/MeshAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/MeshAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_MeshAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/MixBlend.h b/spine-cpp/spine-cpp/include/spine/MixBlend.h index 10adf60e7..4d0bd52a7 100644 --- a/spine-cpp/spine-cpp/include/spine/MixBlend.h +++ b/spine-cpp/spine-cpp/include/spine/MixBlend.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_MixPose_h diff --git a/spine-cpp/spine-cpp/include/spine/MixDirection.h b/spine-cpp/spine-cpp/include/spine/MixDirection.h index f74a276e1..80b3e9999 100644 --- a/spine-cpp/spine-cpp/include/spine/MixDirection.h +++ b/spine-cpp/spine-cpp/include/spine/MixDirection.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_MixDirection_h diff --git a/spine-cpp/spine-cpp/include/spine/PathAttachment.h b/spine-cpp/spine-cpp/include/spine/PathAttachment.h index 2492f5a19..9e92624ed 100644 --- a/spine-cpp/spine-cpp/include/spine/PathAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/PathAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraint.h b/spine-cpp/spine-cpp/include/spine/PathConstraint.h index c9795598a..870c1ef94 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraint.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathConstraint_h diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraintData.h b/spine-cpp/spine-cpp/include/spine/PathConstraintData.h index 120c4ab91..0354470bb 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraintData.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathConstraintData_h diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraintMixTimeline.h b/spine-cpp/spine-cpp/include/spine/PathConstraintMixTimeline.h index 035ab6d94..5c245b277 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraintMixTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraintMixTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathConstraintMixTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraintPositionTimeline.h b/spine-cpp/spine-cpp/include/spine/PathConstraintPositionTimeline.h index e130402db..38dcffbbb 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraintPositionTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraintPositionTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathConstraintPositionTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraintSpacingTimeline.h b/spine-cpp/spine-cpp/include/spine/PathConstraintSpacingTimeline.h index cd17e35a3..506f0eb3d 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraintSpacingTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraintSpacingTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PathConstraintSpacingTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/PointAttachment.h b/spine-cpp/spine-cpp/include/spine/PointAttachment.h index 42990bf9b..672f34242 100644 --- a/spine-cpp/spine-cpp/include/spine/PointAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/PointAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PointAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/Pool.h b/spine-cpp/spine-cpp/include/spine/Pool.h index 05dad2eae..ed8e6110b 100644 --- a/spine-cpp/spine-cpp/include/spine/Pool.h +++ b/spine-cpp/spine-cpp/include/spine/Pool.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Pool_h diff --git a/spine-cpp/spine-cpp/include/spine/PositionMode.h b/spine-cpp/spine-cpp/include/spine/PositionMode.h index 2da1ec11b..3aea759e4 100644 --- a/spine-cpp/spine-cpp/include/spine/PositionMode.h +++ b/spine-cpp/spine-cpp/include/spine/PositionMode.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_PositionMode_h diff --git a/spine-cpp/spine-cpp/include/spine/Property.h b/spine-cpp/spine-cpp/include/spine/Property.h index 1d5a1e419..d19a87607 100644 --- a/spine-cpp/spine-cpp/include/spine/Property.h +++ b/spine-cpp/spine-cpp/include/spine/Property.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Property_h diff --git a/spine-cpp/spine-cpp/include/spine/RTTI.h b/spine-cpp/spine-cpp/include/spine/RTTI.h index 2d0d6ec24..6b0027b6c 100644 --- a/spine-cpp/spine-cpp/include/spine/RTTI.h +++ b/spine-cpp/spine-cpp/include/spine/RTTI.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_RTTI_h diff --git a/spine-cpp/spine-cpp/include/spine/RegionAttachment.h b/spine-cpp/spine-cpp/include/spine/RegionAttachment.h index 1003034cc..376ba817c 100644 --- a/spine-cpp/spine-cpp/include/spine/RegionAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/RegionAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_RegionAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/RotateMode.h b/spine-cpp/spine-cpp/include/spine/RotateMode.h index ee73d1d06..f34ce789f 100644 --- a/spine-cpp/spine-cpp/include/spine/RotateMode.h +++ b/spine-cpp/spine-cpp/include/spine/RotateMode.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_RotateMode_h diff --git a/spine-cpp/spine-cpp/include/spine/RotateTimeline.h b/spine-cpp/spine-cpp/include/spine/RotateTimeline.h index 071e46bfa..29ace74fe 100644 --- a/spine-cpp/spine-cpp/include/spine/RotateTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/RotateTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_RotateTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/ScaleTimeline.h b/spine-cpp/spine-cpp/include/spine/ScaleTimeline.h index 9488ce137..447824d2a 100644 --- a/spine-cpp/spine-cpp/include/spine/ScaleTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/ScaleTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_ScaleTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Sequence.h b/spine-cpp/spine-cpp/include/spine/Sequence.h index 41f53ecbc..bbf631a59 100644 --- a/spine-cpp/spine-cpp/include/spine/Sequence.h +++ b/spine-cpp/spine-cpp/include/spine/Sequence.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Sequence_h @@ -95,4 +95,4 @@ namespace spine { }; } -#endif \ No newline at end of file +#endif diff --git a/spine-cpp/spine-cpp/include/spine/SequenceTimeline.h b/spine-cpp/spine-cpp/include/spine/SequenceTimeline.h index 7154eedde..2f1ab20f7 100644 --- a/spine-cpp/spine-cpp/include/spine/SequenceTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/SequenceTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SequenceTimeline_h @@ -70,4 +70,4 @@ namespace spine { }; } -#endif /* Spine_SequenceTimeline_h */ \ No newline at end of file +#endif /* Spine_SequenceTimeline_h */ diff --git a/spine-cpp/spine-cpp/include/spine/ShearTimeline.h b/spine-cpp/spine-cpp/include/spine/ShearTimeline.h index 80147bb5d..8a72133fb 100644 --- a/spine-cpp/spine-cpp/include/spine/ShearTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/ShearTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_ShearTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Skeleton.h b/spine-cpp/spine-cpp/include/spine/Skeleton.h index c4b4d8af0..5dc0c27d9 100644 --- a/spine-cpp/spine-cpp/include/spine/Skeleton.h +++ b/spine-cpp/spine-cpp/include/spine/Skeleton.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Skeleton_h diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h b/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h index abdc05f97..a1ade7d34 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SkeletonBinary_h diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonBounds.h b/spine-cpp/spine-cpp/include/spine/SkeletonBounds.h index 6599439f2..8dc4cab51 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonBounds.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonBounds.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SkeletonBounds_h diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonClipping.h b/spine-cpp/spine-cpp/include/spine/SkeletonClipping.h index bf80152a8..a5fbdc7ef 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonClipping.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonClipping.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SkeletonClipping_h diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonData.h b/spine-cpp/spine-cpp/include/spine/SkeletonData.h index ce959acf1..14a7c665a 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonData.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SkeletonData_h diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonJson.h b/spine-cpp/spine-cpp/include/spine/SkeletonJson.h index 9af35439e..754d7de81 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonJson.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonJson.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SkeletonJson_h diff --git a/spine-cpp/spine-cpp/include/spine/Skin.h b/spine-cpp/spine-cpp/include/spine/Skin.h index 855a932c1..ea6542e45 100644 --- a/spine-cpp/spine-cpp/include/spine/Skin.h +++ b/spine-cpp/spine-cpp/include/spine/Skin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Skin_h diff --git a/spine-cpp/spine-cpp/include/spine/Slot.h b/spine-cpp/spine-cpp/include/spine/Slot.h index 9548466af..d9a073a7b 100644 --- a/spine-cpp/spine-cpp/include/spine/Slot.h +++ b/spine-cpp/spine-cpp/include/spine/Slot.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Slot_h diff --git a/spine-cpp/spine-cpp/include/spine/SlotData.h b/spine-cpp/spine-cpp/include/spine/SlotData.h index 71db9970d..3733aea29 100644 --- a/spine-cpp/spine-cpp/include/spine/SlotData.h +++ b/spine-cpp/spine-cpp/include/spine/SlotData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SlotData_h diff --git a/spine-cpp/spine-cpp/include/spine/SpacingMode.h b/spine-cpp/spine-cpp/include/spine/SpacingMode.h index 10be20de1..2e7bdb6de 100644 --- a/spine-cpp/spine-cpp/include/spine/SpacingMode.h +++ b/spine-cpp/spine-cpp/include/spine/SpacingMode.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_SpacingMode_h diff --git a/spine-cpp/spine-cpp/include/spine/SpineObject.h b/spine-cpp/spine-cpp/include/spine/SpineObject.h index 19b89abb6..c79cf3bf1 100644 --- a/spine-cpp/spine-cpp/include/spine/SpineObject.h +++ b/spine-cpp/spine-cpp/include/spine/SpineObject.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Object_h diff --git a/spine-cpp/spine-cpp/include/spine/SpineString.h b/spine-cpp/spine-cpp/include/spine/SpineString.h index 8e709c03e..7bba40dad 100644 --- a/spine-cpp/spine-cpp/include/spine/SpineString.h +++ b/spine-cpp/spine-cpp/include/spine/SpineString.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_STRING_H @@ -39,10 +39,11 @@ namespace spine { class SP_API String : public SpineObject { public: - String() : _length(0), _buffer(NULL) { + String() : _length(0), _buffer(NULL), _tempowner(true) { } - String(const char *chars, bool own = false) { + String(const char *chars, bool own = false, bool tofree = true) { + _tempowner = tofree; if (!chars) { _length = 0; _buffer = NULL; @@ -58,6 +59,7 @@ namespace spine { } String(const String &other) { + _tempowner = true; if (!other._buffer) { _length = 0; _buffer = NULL; @@ -82,7 +84,7 @@ namespace spine { void own(const String &other) { if (this == &other) return; - if (_buffer) { + if (_buffer && _tempowner) { SpineExtension::free(_buffer, __FILE__, __LINE__); } _length = other._length; @@ -93,7 +95,7 @@ namespace spine { void own(const char *chars) { if (_buffer == chars) return; - if (_buffer) { + if (_buffer && _tempowner) { SpineExtension::free(_buffer, __FILE__, __LINE__); } @@ -113,7 +115,7 @@ namespace spine { String &operator=(const String &other) { if (this == &other) return *this; - if (_buffer) { + if (_buffer && _tempowner) { SpineExtension::free(_buffer, __FILE__, __LINE__); } if (!other._buffer) { @@ -129,7 +131,7 @@ namespace spine { String &operator=(const char *chars) { if (_buffer == chars) return *this; - if (_buffer) { + if (_buffer && _tempowner) { SpineExtension::free(_buffer, __FILE__, __LINE__); } if (!chars) { @@ -200,7 +202,7 @@ namespace spine { } ~String() { - if (_buffer) { + if (_buffer && _tempowner) { SpineExtension::free(_buffer, __FILE__, __LINE__); } } @@ -208,6 +210,7 @@ namespace spine { private: mutable size_t _length; mutable char *_buffer; + mutable bool _tempowner; }; } diff --git a/spine-cpp/spine-cpp/include/spine/TextureLoader.h b/spine-cpp/spine-cpp/include/spine/TextureLoader.h index d794bdb34..fc61541a8 100644 --- a/spine-cpp/spine-cpp/include/spine/TextureLoader.h +++ b/spine-cpp/spine-cpp/include/spine/TextureLoader.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TextureLoader_h diff --git a/spine-cpp/spine-cpp/include/spine/TextureRegion.h b/spine-cpp/spine-cpp/include/spine/TextureRegion.h index d5f480b3c..876619738 100644 --- a/spine-cpp/spine-cpp/include/spine/TextureRegion.h +++ b/spine-cpp/spine-cpp/include/spine/TextureRegion.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TextureRegion_h @@ -47,4 +47,4 @@ namespace spine { }; } -#endif \ No newline at end of file +#endif diff --git a/spine-cpp/spine-cpp/include/spine/Timeline.h b/spine-cpp/spine-cpp/include/spine/Timeline.h index 6b96003ff..f097f9a4d 100644 --- a/spine-cpp/spine-cpp/include/spine/Timeline.h +++ b/spine-cpp/spine-cpp/include/spine/Timeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Timeline_h diff --git a/spine-cpp/spine-cpp/include/spine/TransformConstraint.h b/spine-cpp/spine-cpp/include/spine/TransformConstraint.h index 8e25f2c4d..93dc472e9 100644 --- a/spine-cpp/spine-cpp/include/spine/TransformConstraint.h +++ b/spine-cpp/spine-cpp/include/spine/TransformConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TransformConstraint_h diff --git a/spine-cpp/spine-cpp/include/spine/TransformConstraintData.h b/spine-cpp/spine-cpp/include/spine/TransformConstraintData.h index f8fcecfef..ad7ce640e 100644 --- a/spine-cpp/spine-cpp/include/spine/TransformConstraintData.h +++ b/spine-cpp/spine-cpp/include/spine/TransformConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TransformConstraintData_h diff --git a/spine-cpp/spine-cpp/include/spine/TransformConstraintTimeline.h b/spine-cpp/spine-cpp/include/spine/TransformConstraintTimeline.h index 857f73020..18cf9c27b 100644 --- a/spine-cpp/spine-cpp/include/spine/TransformConstraintTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/TransformConstraintTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TransformConstraintTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/TransformMode.h b/spine-cpp/spine-cpp/include/spine/TransformMode.h index 17fe28fa3..9b75ccf73 100644 --- a/spine-cpp/spine-cpp/include/spine/TransformMode.h +++ b/spine-cpp/spine-cpp/include/spine/TransformMode.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TransformMode_h diff --git a/spine-cpp/spine-cpp/include/spine/TranslateTimeline.h b/spine-cpp/spine-cpp/include/spine/TranslateTimeline.h index e8d12e90f..efa9cdec2 100644 --- a/spine-cpp/spine-cpp/include/spine/TranslateTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/TranslateTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_TranslateTimeline_h diff --git a/spine-cpp/spine-cpp/include/spine/Triangulator.h b/spine-cpp/spine-cpp/include/spine/Triangulator.h index 0059393bb..d10efd06e 100644 --- a/spine-cpp/spine-cpp/include/spine/Triangulator.h +++ b/spine-cpp/spine-cpp/include/spine/Triangulator.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Triangulator_h diff --git a/spine-cpp/spine-cpp/include/spine/Updatable.h b/spine-cpp/spine-cpp/include/spine/Updatable.h index 452b5b076..481cac5df 100644 --- a/spine-cpp/spine-cpp/include/spine/Updatable.h +++ b/spine-cpp/spine-cpp/include/spine/Updatable.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Updatable_h diff --git a/spine-cpp/spine-cpp/include/spine/Vector.h b/spine-cpp/spine-cpp/include/spine/Vector.h index 2f2950292..771b59791 100644 --- a/spine-cpp/spine-cpp/include/spine/Vector.h +++ b/spine-cpp/spine-cpp/include/spine/Vector.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Vector_h diff --git a/spine-cpp/spine-cpp/include/spine/Version.h b/spine-cpp/spine-cpp/include/spine/Version.h index 1822b6240..0bd872951 100644 --- a/spine-cpp/spine-cpp/include/spine/Version.h +++ b/spine-cpp/spine-cpp/include/spine/Version.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_VERTEXEFFECT_H_ diff --git a/spine-cpp/spine-cpp/include/spine/VertexAttachment.h b/spine-cpp/spine-cpp/include/spine/VertexAttachment.h index 5a9ddd932..23853cd02 100644 --- a/spine-cpp/spine-cpp/include/spine/VertexAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/VertexAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_VertexAttachment_h diff --git a/spine-cpp/spine-cpp/include/spine/Vertices.h b/spine-cpp/spine-cpp/include/spine/Vertices.h index 00a9d09c3..f18201111 100644 --- a/spine-cpp/spine-cpp/include/spine/Vertices.h +++ b/spine-cpp/spine-cpp/include/spine/Vertices.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef Spine_Vertices_h diff --git a/spine-cpp/spine-cpp/include/spine/dll.h b/spine-cpp/spine-cpp/include/spine/dll.h index 70116a1f8..09dff9069 100644 --- a/spine-cpp/spine-cpp/include/spine/dll.h +++ b/spine-cpp/spine-cpp/include/spine/dll.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SHAREDLIB_H diff --git a/spine-cpp/spine-cpp/include/spine/spine.h b/spine-cpp/spine-cpp/include/spine/spine.h index 958114034..cc48e5b34 100644 --- a/spine-cpp/spine-cpp/include/spine/spine.h +++ b/spine-cpp/spine-cpp/include/spine/spine.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SPINE_H_ diff --git a/spine-cpp/spine-cpp/src/spine/Animation.cpp b/spine-cpp/spine-cpp/src/spine/Animation.cpp index f5ab306ad..ba2c70436 100644 --- a/spine-cpp/spine-cpp/src/spine/Animation.cpp +++ b/spine-cpp/spine-cpp/src/spine/Animation.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index 1182d375e..e04afa8a3 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/AnimationStateData.cpp b/spine-cpp/spine-cpp/src/spine/AnimationStateData.cpp index a68e62cd1..65719a3b3 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationStateData.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationStateData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Atlas.cpp b/spine-cpp/spine-cpp/src/spine/Atlas.cpp index 7b2a03d94..e1714e2cb 100644 --- a/spine-cpp/spine-cpp/src/spine/Atlas.cpp +++ b/spine-cpp/spine-cpp/src/spine/Atlas.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp b/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp index fbd22e9ea..16cde6918 100644 --- a/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp +++ b/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Attachment.cpp b/spine-cpp/spine-cpp/src/spine/Attachment.cpp index b8d42142e..9c2fe3e5f 100644 --- a/spine-cpp/spine-cpp/src/spine/Attachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/Attachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/AttachmentLoader.cpp b/spine-cpp/spine-cpp/src/spine/AttachmentLoader.cpp index 729a40fee..2dc2a093e 100644 --- a/spine-cpp/spine-cpp/src/spine/AttachmentLoader.cpp +++ b/spine-cpp/spine-cpp/src/spine/AttachmentLoader.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/AttachmentTimeline.cpp b/spine-cpp/spine-cpp/src/spine/AttachmentTimeline.cpp index 9bc8db17c..604b74d12 100644 --- a/spine-cpp/spine-cpp/src/spine/AttachmentTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/AttachmentTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Bone.cpp b/spine-cpp/spine-cpp/src/spine/Bone.cpp index be28bd790..cfbe466b8 100644 --- a/spine-cpp/spine-cpp/src/spine/Bone.cpp +++ b/spine-cpp/spine-cpp/src/spine/Bone.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/BoneData.cpp b/spine-cpp/spine-cpp/src/spine/BoneData.cpp index 43662f373..87aca70cc 100644 --- a/spine-cpp/spine-cpp/src/spine/BoneData.cpp +++ b/spine-cpp/spine-cpp/src/spine/BoneData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/BoundingBoxAttachment.cpp b/spine-cpp/spine-cpp/src/spine/BoundingBoxAttachment.cpp index 4eba30afe..758113cc5 100644 --- a/spine-cpp/spine-cpp/src/spine/BoundingBoxAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/BoundingBoxAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/ClippingAttachment.cpp b/spine-cpp/spine-cpp/src/spine/ClippingAttachment.cpp index 429a77471..fa9e65cd0 100644 --- a/spine-cpp/spine-cpp/src/spine/ClippingAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/ClippingAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/ColorTimeline.cpp b/spine-cpp/spine-cpp/src/spine/ColorTimeline.cpp index 92ea269c0..f804c562d 100644 --- a/spine-cpp/spine-cpp/src/spine/ColorTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/ColorTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/ConstraintData.cpp b/spine-cpp/spine-cpp/src/spine/ConstraintData.cpp index 3f3894dba..e60872eca 100644 --- a/spine-cpp/spine-cpp/src/spine/ConstraintData.cpp +++ b/spine-cpp/spine-cpp/src/spine/ConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp b/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp index 5e33db487..c0f17b784 100644 --- a/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/DeformTimeline.cpp b/spine-cpp/spine-cpp/src/spine/DeformTimeline.cpp index c4600a2de..9f0cc4d07 100644 --- a/spine-cpp/spine-cpp/src/spine/DeformTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/DeformTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/DrawOrderTimeline.cpp b/spine-cpp/spine-cpp/src/spine/DrawOrderTimeline.cpp index a0e1998cf..26b9dbf90 100644 --- a/spine-cpp/spine-cpp/src/spine/DrawOrderTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/DrawOrderTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Event.cpp b/spine-cpp/spine-cpp/src/spine/Event.cpp index 9c8b24eeb..ffe1809ba 100644 --- a/spine-cpp/spine-cpp/src/spine/Event.cpp +++ b/spine-cpp/spine-cpp/src/spine/Event.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/EventData.cpp b/spine-cpp/spine-cpp/src/spine/EventData.cpp index 9d1bd3621..a6af9dde3 100644 --- a/spine-cpp/spine-cpp/src/spine/EventData.cpp +++ b/spine-cpp/spine-cpp/src/spine/EventData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/EventTimeline.cpp b/spine-cpp/spine-cpp/src/spine/EventTimeline.cpp index 59374e80a..857b69cbf 100644 --- a/spine-cpp/spine-cpp/src/spine/EventTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/EventTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Extension.cpp b/spine-cpp/spine-cpp/src/spine/Extension.cpp index 17a2539c9..43939bafd 100644 --- a/spine-cpp/spine-cpp/src/spine/Extension.cpp +++ b/spine-cpp/spine-cpp/src/spine/Extension.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp b/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp index 8a9af567c..ac865f111 100644 --- a/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp +++ b/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -51,7 +51,7 @@ void IkConstraint::apply(Bone &bone, float targetX, float targetY, bool compress ty = targetY - bone._worldY; break; case TransformMode_NoRotationOrReflection: { - float s = MathUtil::abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + float s = MathUtil::abs(pa * pd - pb * pc) / MathUtil::max(0.0001f, pa * pa + pc * pc); float sa = pa / bone._skeleton.getScaleX(); float sc = pc / bone._skeleton.getScaleY(); pb = -sc * s * bone._skeleton.getScaleX(); @@ -61,8 +61,13 @@ void IkConstraint::apply(Bone &bone, float targetX, float targetY, bool compress default: float x = targetX - p->_worldX, y = targetY - p->_worldY; float d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone._ax; - ty = (y * pa - x * pc) / d - bone._ay; + if (MathUtil::abs(d) <= 0.0001f) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone._ax; + ty = (y * pa - x * pc) / d - bone._ay; + } } rotationIK += MathUtil::atan2(ty, tx) * MathUtil::Rad_Deg; if (bone._ascaleX < 0) rotationIK += 180; @@ -140,7 +145,8 @@ void IkConstraint::apply(Bone &parent, Bone &child, float targetX, float targetY b = pp->_b; c = pp->_c; d = pp->_d; - id = 1 / (a * d - b * c); + id = a * d - b * c; + id = MathUtil::abs(id) <= 0.0001f ? 0 : 1 / id; x = cwx - pp->_worldX; y = cwy - pp->_worldY; dx = (x * d - y * b) * id - px; diff --git a/spine-cpp/spine-cpp/src/spine/IkConstraintData.cpp b/spine-cpp/spine-cpp/src/spine/IkConstraintData.cpp index 52f6779a8..090e098a2 100644 --- a/spine-cpp/spine-cpp/src/spine/IkConstraintData.cpp +++ b/spine-cpp/spine-cpp/src/spine/IkConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp b/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp index e54f9d5ef..f07ac1f4d 100644 --- a/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/LinkedMesh.cpp b/spine-cpp/spine-cpp/src/spine/LinkedMesh.cpp index f6be1e19b..a67e9173d 100644 --- a/spine-cpp/spine-cpp/src/spine/LinkedMesh.cpp +++ b/spine-cpp/spine-cpp/src/spine/LinkedMesh.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Log.cpp b/spine-cpp/spine-cpp/src/spine/Log.cpp index 3f22a6d81..70ac7441f 100644 --- a/spine-cpp/spine-cpp/src/spine/Log.cpp +++ b/spine-cpp/spine-cpp/src/spine/Log.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/MathUtil.cpp b/spine-cpp/spine-cpp/src/spine/MathUtil.cpp index 43705bcc0..d3df88a14 100644 --- a/spine-cpp/spine-cpp/src/spine/MathUtil.cpp +++ b/spine-cpp/spine-cpp/src/spine/MathUtil.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp b/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp index 922130dba..da8cdd28d 100644 --- a/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathAttachment.cpp b/spine-cpp/spine-cpp/src/spine/PathAttachment.cpp index ab84b2c86..35c01779e 100644 --- a/spine-cpp/spine-cpp/src/spine/PathAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp index dbce4e077..df399fd05 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraintData.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraintData.cpp index a102ee51d..d8bd175ee 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraintData.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp index 6c62f19be..8702d8819 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraintPositionTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraintPositionTimeline.cpp index a5a8d9b59..49b79a506 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraintPositionTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraintPositionTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraintSpacingTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraintSpacingTimeline.cpp index bee4d86a1..7494e1494 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraintSpacingTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraintSpacingTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/PointAttachment.cpp b/spine-cpp/spine-cpp/src/spine/PointAttachment.cpp index 2999f5d05..64ea89b3a 100644 --- a/spine-cpp/spine-cpp/src/spine/PointAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/PointAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/RTTI.cpp b/spine-cpp/spine-cpp/src/spine/RTTI.cpp index 1c5bcc98d..e8dbb9495 100644 --- a/spine-cpp/spine-cpp/src/spine/RTTI.cpp +++ b/spine-cpp/spine-cpp/src/spine/RTTI.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/RegionAttachment.cpp b/spine-cpp/spine-cpp/src/spine/RegionAttachment.cpp index 09bc78265..f669b656f 100644 --- a/spine-cpp/spine-cpp/src/spine/RegionAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/RegionAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/RotateTimeline.cpp b/spine-cpp/spine-cpp/src/spine/RotateTimeline.cpp index 27fde3cd3..230a27689 100644 --- a/spine-cpp/spine-cpp/src/spine/RotateTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/RotateTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/ScaleTimeline.cpp b/spine-cpp/spine-cpp/src/spine/ScaleTimeline.cpp index 1f05d4dd7..88d66bc87 100644 --- a/spine-cpp/spine-cpp/src/spine/ScaleTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/ScaleTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Sequence.cpp b/spine-cpp/spine-cpp/src/spine/Sequence.cpp index 3b4bcf5d1..e1844b3cc 100644 --- a/spine-cpp/spine-cpp/src/spine/Sequence.cpp +++ b/spine-cpp/spine-cpp/src/spine/Sequence.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SequenceTimeline.cpp b/spine-cpp/spine-cpp/src/spine/SequenceTimeline.cpp index c96305db3..c13acfe7f 100644 --- a/spine-cpp/spine-cpp/src/spine/SequenceTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/SequenceTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/ShearTimeline.cpp b/spine-cpp/spine-cpp/src/spine/ShearTimeline.cpp index 0258c2f87..c1d097bfe 100644 --- a/spine-cpp/spine-cpp/src/spine/ShearTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/ShearTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp index f927e37b0..6b05f9efb 100644 --- a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp +++ b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp index fd906bce9..a19463515 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp index 50c922b82..9f1e00cd8 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -190,7 +190,7 @@ BoundingBoxAttachment *SkeletonBounds::getBoundingBox(Polygon *polygon) { return index == -1 ? NULL : _boundingBoxes[index]; } -Vector &SkeletonBounds::getPolygons() { +Vector &SkeletonBounds::getPolygons() { return _polygons; } diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonClipping.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonClipping.cpp index d5f0d7659..b095547fd 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonClipping.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonClipping.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonData.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonData.cpp index 1e3483811..6e38bc1bb 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonData.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp index 2c9228db1..cb41df4c0 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Skin.cpp b/spine-cpp/spine-cpp/src/spine/Skin.cpp index 01dcbb2d9..57ec0e19a 100644 --- a/spine-cpp/spine-cpp/src/spine/Skin.cpp +++ b/spine-cpp/spine-cpp/src/spine/Skin.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -164,7 +164,6 @@ void Skin::addSkin(Skin *other) { AttachmentMap::Entries entries = other->getAttachments(); while (entries.hasNext()) { AttachmentMap::Entry &entry = entries.next(); - entry._attachment->reference(); setAttachment(entry._slotIndex, entry._name, entry._attachment); } } diff --git a/spine-cpp/spine-cpp/src/spine/Slot.cpp b/spine-cpp/spine-cpp/src/spine/Slot.cpp index 05f29d736..8501392c2 100644 --- a/spine-cpp/spine-cpp/src/spine/Slot.cpp +++ b/spine-cpp/spine-cpp/src/spine/Slot.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SlotData.cpp b/spine-cpp/spine-cpp/src/spine/SlotData.cpp index 45b1b93a5..5def32512 100644 --- a/spine-cpp/spine-cpp/src/spine/SlotData.cpp +++ b/spine-cpp/spine-cpp/src/spine/SlotData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/SpineObject.cpp b/spine-cpp/spine-cpp/src/spine/SpineObject.cpp index 0ce71b751..1f0bb61a2 100644 --- a/spine-cpp/spine-cpp/src/spine/SpineObject.cpp +++ b/spine-cpp/spine-cpp/src/spine/SpineObject.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/TextureLoader.cpp b/spine-cpp/spine-cpp/src/spine/TextureLoader.cpp index 655794e1c..8275b2d2b 100644 --- a/spine-cpp/spine-cpp/src/spine/TextureLoader.cpp +++ b/spine-cpp/spine-cpp/src/spine/TextureLoader.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Timeline.cpp b/spine-cpp/spine-cpp/src/spine/Timeline.cpp index 39c4dbdcc..90a317e41 100644 --- a/spine-cpp/spine-cpp/src/spine/Timeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/Timeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/TransformConstraint.cpp b/spine-cpp/spine-cpp/src/spine/TransformConstraint.cpp index 94e114dc0..3d3ffc304 100644 --- a/spine-cpp/spine-cpp/src/spine/TransformConstraint.cpp +++ b/spine-cpp/spine-cpp/src/spine/TransformConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/TransformConstraintData.cpp b/spine-cpp/spine-cpp/src/spine/TransformConstraintData.cpp index eaa484401..5c026096f 100644 --- a/spine-cpp/spine-cpp/src/spine/TransformConstraintData.cpp +++ b/spine-cpp/spine-cpp/src/spine/TransformConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/TransformConstraintTimeline.cpp b/spine-cpp/spine-cpp/src/spine/TransformConstraintTimeline.cpp index 1c8c91be4..69c41d917 100644 --- a/spine-cpp/spine-cpp/src/spine/TransformConstraintTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/TransformConstraintTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/TranslateTimeline.cpp b/spine-cpp/spine-cpp/src/spine/TranslateTimeline.cpp index 911fd5b41..66df9d707 100644 --- a/spine-cpp/spine-cpp/src/spine/TranslateTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/TranslateTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Triangulator.cpp b/spine-cpp/spine-cpp/src/spine/Triangulator.cpp index 80833499e..fdbdb04cd 100644 --- a/spine-cpp/spine-cpp/src/spine/Triangulator.cpp +++ b/spine-cpp/spine-cpp/src/spine/Triangulator.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/Updatable.cpp b/spine-cpp/spine-cpp/src/spine/Updatable.cpp index 9889bbd1f..9339118e2 100644 --- a/spine-cpp/spine-cpp/src/spine/Updatable.cpp +++ b/spine-cpp/spine-cpp/src/spine/Updatable.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp b/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp index 1f8208057..c888608c8 100644 --- a/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 8d1c3bd57..24bc1ad82 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index d11b9051a..910f7f80f 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/AnimationStateData.cs b/spine-csharp/src/AnimationStateData.cs index df10fe2ac..7f8f7c477 100644 --- a/spine-csharp/src/AnimationStateData.cs +++ b/spine-csharp/src/AnimationStateData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Atlas.cs b/spine-csharp/src/Atlas.cs index 6e9c23cc6..8cccd4250 100644 --- a/spine-csharp/src/Atlas.cs +++ b/spine-csharp/src/Atlas.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if (UNITY_5 || UNITY_5_3_OR_NEWER || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) diff --git a/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs b/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs index 09662b0cf..99df00c5c 100644 --- a/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs +++ b/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/Attachment.cs b/spine-csharp/src/Attachments/Attachment.cs index c8b8f8830..af87ce5fe 100644 --- a/spine-csharp/src/Attachments/Attachment.cs +++ b/spine-csharp/src/Attachments/Attachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/AttachmentLoader.cs b/spine-csharp/src/Attachments/AttachmentLoader.cs index 87ced4a6c..06653a530 100644 --- a/spine-csharp/src/Attachments/AttachmentLoader.cs +++ b/spine-csharp/src/Attachments/AttachmentLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine { diff --git a/spine-csharp/src/Attachments/AttachmentType.cs b/spine-csharp/src/Attachments/AttachmentType.cs index 81d90cfaa..d8dfd53fb 100644 --- a/spine-csharp/src/Attachments/AttachmentType.cs +++ b/spine-csharp/src/Attachments/AttachmentType.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine { diff --git a/spine-csharp/src/Attachments/BoundingBoxAttachment.cs b/spine-csharp/src/Attachments/BoundingBoxAttachment.cs index 47f9d8b05..ea3ca3203 100644 --- a/spine-csharp/src/Attachments/BoundingBoxAttachment.cs +++ b/spine-csharp/src/Attachments/BoundingBoxAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/ClippingAttachment.cs b/spine-csharp/src/Attachments/ClippingAttachment.cs index fec2925e1..992aabe97 100644 --- a/spine-csharp/src/Attachments/ClippingAttachment.cs +++ b/spine-csharp/src/Attachments/ClippingAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/IHasTextureRegion.cs b/spine-csharp/src/Attachments/IHasTextureRegion.cs index a8092d63a..f3bc56ffa 100644 --- a/spine-csharp/src/Attachments/IHasTextureRegion.cs +++ b/spine-csharp/src/Attachments/IHasTextureRegion.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/MeshAttachment.cs b/spine-csharp/src/Attachments/MeshAttachment.cs index 833e83aec..9558010be 100644 --- a/spine-csharp/src/Attachments/MeshAttachment.cs +++ b/spine-csharp/src/Attachments/MeshAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/PathAttachment.cs b/spine-csharp/src/Attachments/PathAttachment.cs index fb944b922..974e99e75 100644 --- a/spine-csharp/src/Attachments/PathAttachment.cs +++ b/spine-csharp/src/Attachments/PathAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/PointAttachment.cs b/spine-csharp/src/Attachments/PointAttachment.cs index 10cd99c47..f2db05778 100644 --- a/spine-csharp/src/Attachments/PointAttachment.cs +++ b/spine-csharp/src/Attachments/PointAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine { diff --git a/spine-csharp/src/Attachments/RegionAttachment.cs b/spine-csharp/src/Attachments/RegionAttachment.cs index 1e1ec929e..e8e899933 100644 --- a/spine-csharp/src/Attachments/RegionAttachment.cs +++ b/spine-csharp/src/Attachments/RegionAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/Sequence.cs b/spine-csharp/src/Attachments/Sequence.cs index 47a459c6f..561bcf107 100644 --- a/spine-csharp/src/Attachments/Sequence.cs +++ b/spine-csharp/src/Attachments/Sequence.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Attachments/VertexAttachment.cs b/spine-csharp/src/Attachments/VertexAttachment.cs index 4e66c160a..3b294bb16 100644 --- a/spine-csharp/src/Attachments/VertexAttachment.cs +++ b/spine-csharp/src/Attachments/VertexAttachment.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/BlendMode.cs b/spine-csharp/src/BlendMode.cs index 95a754f26..ca6843421 100644 --- a/spine-csharp/src/BlendMode.cs +++ b/spine-csharp/src/BlendMode.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine { diff --git a/spine-csharp/src/Bone.cs b/spine-csharp/src/Bone.cs index dec5c2133..326436395 100644 --- a/spine-csharp/src/Bone.cs +++ b/spine-csharp/src/Bone.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/BoneData.cs b/spine-csharp/src/BoneData.cs index 13c70187b..594f27163 100644 --- a/spine-csharp/src/BoneData.cs +++ b/spine-csharp/src/BoneData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/ConstraintData.cs b/spine-csharp/src/ConstraintData.cs index ca3400c97..374ba6730 100644 --- a/spine-csharp/src/ConstraintData.cs +++ b/spine-csharp/src/ConstraintData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Event.cs b/spine-csharp/src/Event.cs index e9925fc41..1fc4ee96d 100644 --- a/spine-csharp/src/Event.cs +++ b/spine-csharp/src/Event.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/EventData.cs b/spine-csharp/src/EventData.cs index c3a2ba6c3..81e63876e 100644 --- a/spine-csharp/src/EventData.cs +++ b/spine-csharp/src/EventData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/IUpdatable.cs b/spine-csharp/src/IUpdatable.cs index 757918cef..4242fb4fa 100644 --- a/spine-csharp/src/IUpdatable.cs +++ b/spine-csharp/src/IUpdatable.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine { diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index b54773ecd..197a975d5 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; @@ -172,7 +172,7 @@ namespace Spine { ty = targetY - bone.worldY; break; case TransformMode.NoRotationOrReflection: { - float s = Math.Abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + float s = Math.Abs(pa * pd - pb * pc) / Math.Max(0.0001f, pa * pa + pc * pc); float sa = pa / bone.skeleton.ScaleX; float sc = pc / bone.skeleton.ScaleY; pb = -sc * s * bone.skeleton.ScaleX; @@ -183,8 +183,13 @@ namespace Spine { default: { float x = targetX - p.worldX, y = targetY - p.worldY; float d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone.ax; - ty = (y * pa - x * pc) / d - bone.ay; + if (Math.Abs(d) <= 0.0001f) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } break; } } @@ -256,7 +261,8 @@ namespace Spine { b = pp.b; c = pp.c; d = pp.d; - float id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + float id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.Abs(id) <= 0.0001f ? 0 : 1 / id; float dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; float l1 = (float)Math.Sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (l1 < 0.0001f) { diff --git a/spine-csharp/src/IkConstraintData.cs b/spine-csharp/src/IkConstraintData.cs index f605214d0..28d0cd3b0 100644 --- a/spine-csharp/src/IkConstraintData.cs +++ b/spine-csharp/src/IkConstraintData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Json.cs b/spine-csharp/src/Json.cs index 7765b03da..639883b53 100644 --- a/spine-csharp/src/Json.cs +++ b/spine-csharp/src/Json.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/MathUtils.cs b/spine-csharp/src/MathUtils.cs index 1297d4b1f..016045ede 100644 --- a/spine-csharp/src/MathUtils.cs +++ b/spine-csharp/src/MathUtils.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ //#define USE_FAST_SIN_COS_ATAN2_APPROXIMATIONS diff --git a/spine-csharp/src/PathConstraint.cs b/spine-csharp/src/PathConstraint.cs index ce0617122..e126676ef 100644 --- a/spine-csharp/src/PathConstraint.cs +++ b/spine-csharp/src/PathConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/PathConstraintData.cs b/spine-csharp/src/PathConstraintData.cs index 5d1cc9f2a..6e46d65a5 100644 --- a/spine-csharp/src/PathConstraintData.cs +++ b/spine-csharp/src/PathConstraintData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index 1ebd36bfd..8d19b1dff 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index d55239cbb..9ccdb84f0 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if (UNITY_5 || UNITY_5_3_OR_NEWER || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) diff --git a/spine-csharp/src/SkeletonBounds.cs b/spine-csharp/src/SkeletonBounds.cs index e62455803..f4e605740 100644 --- a/spine-csharp/src/SkeletonBounds.cs +++ b/spine-csharp/src/SkeletonBounds.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/SkeletonClipping.cs b/spine-csharp/src/SkeletonClipping.cs index ca7431a69..281a9f1a7 100644 --- a/spine-csharp/src/SkeletonClipping.cs +++ b/spine-csharp/src/SkeletonClipping.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/SkeletonData.cs b/spine-csharp/src/SkeletonData.cs index 630519108..6272b43c5 100644 --- a/spine-csharp/src/SkeletonData.cs +++ b/spine-csharp/src/SkeletonData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 4b6fefc55..c69726c3d 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if (UNITY_5 || UNITY_5_3_OR_NEWER || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) diff --git a/spine-csharp/src/SkeletonLoader.cs b/spine-csharp/src/SkeletonLoader.cs index bbd0ae9cd..5a96a03ad 100644 --- a/spine-csharp/src/SkeletonLoader.cs +++ b/spine-csharp/src/SkeletonLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Skin.cs b/spine-csharp/src/Skin.cs index 884ed2829..250a93be3 100644 --- a/spine-csharp/src/Skin.cs +++ b/spine-csharp/src/Skin.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Slot.cs b/spine-csharp/src/Slot.cs index 3ac1650d6..ea24940ca 100644 --- a/spine-csharp/src/Slot.cs +++ b/spine-csharp/src/Slot.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/SlotData.cs b/spine-csharp/src/SlotData.cs index 7a73cd8b0..3cb56c507 100644 --- a/spine-csharp/src/SlotData.cs +++ b/spine-csharp/src/SlotData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/TextureRegion.cs b/spine-csharp/src/TextureRegion.cs index 9f056c8c8..076e2857f 100644 --- a/spine-csharp/src/TextureRegion.cs +++ b/spine-csharp/src/TextureRegion.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if (UNITY_5 || UNITY_5_3_OR_NEWER || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) diff --git a/spine-csharp/src/TransformConstraint.cs b/spine-csharp/src/TransformConstraint.cs index 83cf25098..9e4fa2556 100644 --- a/spine-csharp/src/TransformConstraint.cs +++ b/spine-csharp/src/TransformConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/TransformConstraintData.cs b/spine-csharp/src/TransformConstraintData.cs index 475f681ea..d2ec24d11 100644 --- a/spine-csharp/src/TransformConstraintData.cs +++ b/spine-csharp/src/TransformConstraintData.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/src/Triangulator.cs b/spine-csharp/src/Triangulator.cs index 6b3bf158c..566762d36 100644 --- a/spine-csharp/src/Triangulator.cs +++ b/spine-csharp/src/Triangulator.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-csharp/tests/src/AnimationStateTests.cs b/spine-csharp/tests/src/AnimationStateTests.cs index 0bb06e631..acba39ba8 100644 --- a/spine-csharp/tests/src/AnimationStateTests.cs +++ b/spine-csharp/tests/src/AnimationStateTests.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ //#define RUN_ADDITIONAL_FORUM_RELATED_TEST diff --git a/spine-flutter/CHANGELOG.md b/spine-flutter/CHANGELOG.md index 13d41cc75..3ead16391 100644 --- a/spine-flutter/CHANGELOG.md +++ b/spine-flutter/CHANGELOG.md @@ -1,3 +1,15 @@ +# 4.1.5 +* Updated http dependency to 1.1.0 + +# 4.1.4 +* Fixes for WASM/web builds. + +# 4.1.3 +* Fixes for Impeller. + +# 4.1.2 +* API documentation and minor cosmetics. + # 4.1.1 * Backport to 4.1 spine-runtimes branch. * Blend mode support. diff --git a/spine-flutter/compile-wasm.sh b/spine-flutter/compile-wasm.sh index b009bd4b3..9114ca6df 100755 --- a/spine-flutter/compile-wasm.sh +++ b/spine-flutter/compile-wasm.sh @@ -6,9 +6,10 @@ mkdir -p lib/assets/ # The entries for exported functions in Module.asm will be scrambled so # EmscriptenModule._fromJs() is unable to parse them and link them with original # names set on the module, e.g. Module._spine_get_major_version. -emcc \ +echo "const module = {};" > pre.js +em++ \ -Isrc/spine-cpp/include \ - -O2 --closure 1 -fno-rtti -fno-exceptions -lc++abi -lc++ \ + -O2 --closure 1 -fno-rtti -fno-exceptions \ -s STRICT=1 \ -s LLD_REPORT_UNDEFINED \ -s MODULARIZE=1 \ @@ -18,8 +19,10 @@ emcc \ -s EXPORT_ALL=1 \ -s EXPORTED_FUNCTIONS='["_malloc", "_free"]' \ --no-entry \ + --extern-pre-js pre.js \ -s EXPORT_NAME=libspine_flutter \ src/spine_flutter.cpp `find src/spine-cpp/src -type f` \ -o lib/assets/libspine_flutter.js ls -lah lib/assets +rm pre.js popd \ No newline at end of file diff --git a/spine-flutter/example/ios/Runner.xcodeproj/project.pbxproj b/spine-flutter/example/ios/Runner.xcodeproj/project.pbxproj index 034aaeae5..e5637925c 100644 --- a/spine-flutter/example/ios/Runner.xcodeproj/project.pbxproj +++ b/spine-flutter/example/ios/Runner.xcodeproj/project.pbxproj @@ -205,6 +205,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/spine-flutter/example/lib/animated_login.dart b/spine-flutter/example/lib/animated_login.dart index 373e3ea9d..eea08f27a 100644 --- a/spine-flutter/example/lib/animated_login.dart +++ b/spine-flutter/example/lib/animated_login.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; diff --git a/spine-flutter/example/lib/debug_rendering.dart b/spine-flutter/example/lib/debug_rendering.dart index 3216140d1..bc1bd9337 100644 --- a/spine-flutter/example/lib/debug_rendering.dart +++ b/spine-flutter/example/lib/debug_rendering.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; diff --git a/spine-flutter/example/lib/dress_up.dart b/spine-flutter/example/lib/dress_up.dart index 9ac9d5ed0..9271b5713 100644 --- a/spine-flutter/example/lib/dress_up.dart +++ b/spine-flutter/example/lib/dress_up.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter/painting.dart' as painting; diff --git a/spine-flutter/example/lib/flame_example.dart b/spine-flutter/example/lib/flame_example.dart index e1b668ce8..fef9edc0d 100644 --- a/spine-flutter/example/lib/flame_example.dart +++ b/spine-flutter/example/lib/flame_example.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'dart:math'; import 'package:spine_flutter/spine_flutter.dart'; diff --git a/spine-flutter/example/lib/ik_following.dart b/spine-flutter/example/lib/ik_following.dart index 40277e8bd..243950265 100644 --- a/spine-flutter/example/lib/ik_following.dart +++ b/spine-flutter/example/lib/ik_following.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; @@ -21,13 +50,11 @@ class IkFollowingState extends State { controller.animationState.setAnimationByName(0, "walk", true); controller.animationState.setAnimationByName(1, "aim", true); }, onAfterUpdateWorldTransforms: (controller) { - var worldPosition = crossHairPosition; + final worldPosition = crossHairPosition; if (worldPosition == null) return; - var bone = controller.skeleton.findBone("crosshair"); - if (bone == null) return; - var parent = bone.getParent(); - if (parent == null) return; - var position = parent.worldToLocal(worldPosition.dx, worldPosition.dy); + final bone = controller.skeleton.findBone("crosshair")!; + final parent = bone.getParent()!; + final position = parent.worldToLocal(worldPosition.dx, worldPosition.dy); bone.setX(position.x); bone.setY(position.y); }); @@ -46,7 +73,7 @@ class IkFollowingState extends State { body: GestureDetector( onPanDown: (drag) => _updateBonePosition(drag.localPosition), onPanUpdate: (drag) => _updateBonePosition(drag.localPosition), - child: SpineWidget.fromAsset("assets/spineboy.atlas", "assets/spineboy-pro.skel", controller), + child: SpineWidget.fromAsset("assets/spineboy.atlas", "assets/spineboy-pro.skel", controller, alignment: Alignment.centerLeft,), )); } } diff --git a/spine-flutter/example/lib/main.dart b/spine-flutter/example/lib/main.dart index f0f65bcf1..e0ec04ee0 100644 --- a/spine-flutter/example/lib/main.dart +++ b/spine-flutter/example/lib/main.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; import 'package:spine_flutter_example/debug_rendering.dart'; diff --git a/spine-flutter/example/lib/pause_play_animation.dart b/spine-flutter/example/lib/pause_play_animation.dart index 02ccf01ca..96b55375f 100644 --- a/spine-flutter/example/lib/pause_play_animation.dart +++ b/spine-flutter/example/lib/pause_play_animation.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; diff --git a/spine-flutter/example/lib/simple_animation.dart b/spine-flutter/example/lib/simple_animation.dart index 07c9cdb6f..f9a96ecdf 100644 --- a/spine-flutter/example/lib/simple_animation.dart +++ b/spine-flutter/example/lib/simple_animation.dart @@ -1,3 +1,32 @@ +/// +/// Spine Runtimes License Agreement +/// Last updated July 28, 2023. Replaces all prior versions. +/// +/// Copyright (c) 2013-2023, 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. +/// + import 'package:spine_flutter/spine_flutter.dart'; import 'package:flutter/material.dart'; diff --git a/spine-flutter/example/pubspec.lock b/spine-flutter/example/pubspec.lock index 2f37f813f..458916f82 100644 --- a/spine-flutter/example/pubspec.lock +++ b/spine-flutter/example/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" characters: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" collection: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -45,18 +45,18 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" flame: dependency: "direct main" description: name: flame - sha256: "0c55f8d704f09536125c811a19d9aab7407dce245b2bfb507e84296c1c996202" + sha256: "12db9de3cd31b86465b0c1ea173020fb71b15df424ca01b665fa5300b24864c8" url: "https://pub.dev" source: hosted - version: "1.6.0" + version: "1.8.1" flutter: dependency: "direct main" description: flutter @@ -66,18 +66,18 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" http: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "1.1.0" http_parser: dependency: transitive description: @@ -106,10 +106,10 @@ packages: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" material_color_utilities: dependency: transitive description: @@ -122,18 +122,18 @@ packages: dependency: transitive description: name: meta - sha256: "12307e7f0605ce3da64cf0db90e5fcab0869f3ca03f76be6bb2991ce0a55e82b" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" ordered_set: dependency: transitive description: name: ordered_set - sha256: "74b0454418f58c34c8e527d91fb1ef571297dbcd5d3b4e5f983dc884e39cdf85" + sha256: "3fedcc9121b3ba24c0a84f32da2989c42e36c159b73feadbc2f402dc55966b81" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" path: dependency: transitive description: @@ -159,17 +159,17 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" spine_flutter: dependency: "direct main" description: path: ".." relative: true source: path - version: "4.1.1" + version: "4.1.4" string_scanner: dependency: transitive description: @@ -190,10 +190,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" vector_math: dependency: transitive description: @@ -211,5 +211,5 @@ packages: source: hosted version: "0.7.4" sdks: - dart: ">=2.19.0 <4.0.0" - flutter: ">=3.7.6" + dart: ">=3.0.0 <4.0.0" + flutter: ">=3.10.5" diff --git a/spine-flutter/example/pubspec.yaml b/spine-flutter/example/pubspec.yaml index 64ddec812..a6911a4a0 100644 --- a/spine-flutter/example/pubspec.yaml +++ b/spine-flutter/example/pubspec.yaml @@ -5,7 +5,7 @@ version: 1.0.0+1 environment: sdk: '>=2.17.6 <4.0.0' - flutter: ">=3.7.3" + flutter: ">=3.10.5" dependencies: flutter: diff --git a/spine-flutter/lib/assets/libspine_flutter.js b/spine-flutter/lib/assets/libspine_flutter.js index 88b40ab1e..a8eefa3ce 100644 --- a/spine-flutter/lib/assets/libspine_flutter.js +++ b/spine-flutter/lib/assets/libspine_flutter.js @@ -1,3 +1,4 @@ +const module = {}; var libspine_flutter = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; @@ -23,12 +24,12 @@ function pa(b){var c=H.length;b>>>=0;if(2147483648=d;d var Y={g:void 0,get:function(){Y.g+=4;return J[Y.g-4>>2]},h:function(b){return b?E(H,b):""}};a.SYSCALLS=Y;function qa(b,c,d,e){for(var f=0,g=0;g>2],na=K[c+4>>2];c+=8;for(var Q=0;Q>2]=f;return 0}a._fd_write=qa;var ra={__assert_fail:ka,abort:la,emscripten_memcpy_big:ma,emscripten_resize_heap:pa,fd_write:qa}; (function(){function b(f){a.asm=f.exports;A=a.asm.memory;N();ca.unshift(a.asm.__wasm_call_ctors);O--;a.monitorRunDependencies&&a.monitorRunDependencies(O);0==O&&(null!==P&&(clearInterval(P),P=null),R&&(f=R,R=null,f()))}function c(f){b(f.instance)}function d(f){return ja().then(function(g){return WebAssembly.instantiate(g,e)}).then(function(g){return g}).then(f,function(g){x("failed to asynchronously prepare wasm: "+g);z(g)})}var e={env:ra,wasi_snapshot_preview1:ra};O++;a.monitorRunDependencies&&a.monitorRunDependencies(O); if(a.instantiateWasm)try{return a.instantiateWasm(e,b)}catch(f){x("Module.instantiateWasm callback failed with error: "+f),k(f)}(function(){return y||"function"!=typeof WebAssembly.instantiateStreaming||fa()||S.startsWith("file://")||p||"function"!=typeof fetch?d(c):fetch(S,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(g){x("wasm streaming compile failed: "+g);x("falling back to ArrayBuffer instantiation");return d(c)})})})().catch(k);return{}})(); -a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.malloc).apply(null,arguments)};a._free=function(){return(a._free=a.asm.free).apply(null,arguments)};a._spine_enable_debug_extension=function(){return(a._spine_enable_debug_extension=a.asm.spine_enable_debug_extension).apply(null,arguments)};a._spine_major_version=function(){return(a._spine_major_version=a.asm.spine_major_version).apply(null,arguments)}; -a._spine_minor_version=function(){return(a._spine_minor_version=a.asm.spine_minor_version).apply(null,arguments)};a._spine_report_leaks=function(){return(a._spine_report_leaks=a.asm.spine_report_leaks).apply(null,arguments)};a._spine_color_get_r=function(){return(a._spine_color_get_r=a.asm.spine_color_get_r).apply(null,arguments)};a._spine_color_get_g=function(){return(a._spine_color_get_g=a.asm.spine_color_get_g).apply(null,arguments)}; -a._spine_color_get_b=function(){return(a._spine_color_get_b=a.asm.spine_color_get_b).apply(null,arguments)};a._spine_color_get_a=function(){return(a._spine_color_get_a=a.asm.spine_color_get_a).apply(null,arguments)};a._spine_bounds_get_x=function(){return(a._spine_bounds_get_x=a.asm.spine_bounds_get_x).apply(null,arguments)};a._spine_bounds_get_y=function(){return(a._spine_bounds_get_y=a.asm.spine_bounds_get_y).apply(null,arguments)}; -a._spine_bounds_get_width=function(){return(a._spine_bounds_get_width=a.asm.spine_bounds_get_width).apply(null,arguments)};a._spine_bounds_get_height=function(){return(a._spine_bounds_get_height=a.asm.spine_bounds_get_height).apply(null,arguments)};a._spine_vector_get_x=function(){return(a._spine_vector_get_x=a.asm.spine_vector_get_x).apply(null,arguments)};a._spine_vector_get_y=function(){return(a._spine_vector_get_y=a.asm.spine_vector_get_y).apply(null,arguments)}; -a._spine_atlas_load=function(){return(a._spine_atlas_load=a.asm.spine_atlas_load).apply(null,arguments)};a._spine_atlas_get_num_image_paths=function(){return(a._spine_atlas_get_num_image_paths=a.asm.spine_atlas_get_num_image_paths).apply(null,arguments)};a._spine_atlas_get_image_path=function(){return(a._spine_atlas_get_image_path=a.asm.spine_atlas_get_image_path).apply(null,arguments)};a._spine_atlas_get_error=function(){return(a._spine_atlas_get_error=a.asm.spine_atlas_get_error).apply(null,arguments)}; -a._spine_atlas_dispose=function(){return(a._spine_atlas_dispose=a.asm.spine_atlas_dispose).apply(null,arguments)};a._spine_skeleton_data_load_json=function(){return(a._spine_skeleton_data_load_json=a.asm.spine_skeleton_data_load_json).apply(null,arguments)};a._spine_skeleton_data_load_binary=function(){return(a._spine_skeleton_data_load_binary=a.asm.spine_skeleton_data_load_binary).apply(null,arguments)}; +a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)};a._spine_enable_debug_extension=function(){return(a._spine_enable_debug_extension=a.asm.spine_enable_debug_extension).apply(null,arguments)};a._spine_major_version=function(){return(a._spine_major_version=a.asm.spine_major_version).apply(null,arguments)};a._spine_minor_version=function(){return(a._spine_minor_version=a.asm.spine_minor_version).apply(null,arguments)}; +a._spine_report_leaks=function(){return(a._spine_report_leaks=a.asm.spine_report_leaks).apply(null,arguments)};a._spine_color_get_r=function(){return(a._spine_color_get_r=a.asm.spine_color_get_r).apply(null,arguments)};a._spine_color_get_g=function(){return(a._spine_color_get_g=a.asm.spine_color_get_g).apply(null,arguments)};a._spine_color_get_b=function(){return(a._spine_color_get_b=a.asm.spine_color_get_b).apply(null,arguments)}; +a._spine_color_get_a=function(){return(a._spine_color_get_a=a.asm.spine_color_get_a).apply(null,arguments)};a._spine_bounds_get_x=function(){return(a._spine_bounds_get_x=a.asm.spine_bounds_get_x).apply(null,arguments)};a._spine_bounds_get_y=function(){return(a._spine_bounds_get_y=a.asm.spine_bounds_get_y).apply(null,arguments)};a._spine_bounds_get_width=function(){return(a._spine_bounds_get_width=a.asm.spine_bounds_get_width).apply(null,arguments)}; +a._spine_bounds_get_height=function(){return(a._spine_bounds_get_height=a.asm.spine_bounds_get_height).apply(null,arguments)};a._spine_vector_get_x=function(){return(a._spine_vector_get_x=a.asm.spine_vector_get_x).apply(null,arguments)};a._spine_vector_get_y=function(){return(a._spine_vector_get_y=a.asm.spine_vector_get_y).apply(null,arguments)};a._spine_atlas_load=function(){return(a._spine_atlas_load=a.asm.spine_atlas_load).apply(null,arguments)}; +a._spine_atlas_get_num_image_paths=function(){return(a._spine_atlas_get_num_image_paths=a.asm.spine_atlas_get_num_image_paths).apply(null,arguments)};a._spine_atlas_get_image_path=function(){return(a._spine_atlas_get_image_path=a.asm.spine_atlas_get_image_path).apply(null,arguments)};a._spine_atlas_get_error=function(){return(a._spine_atlas_get_error=a.asm.spine_atlas_get_error).apply(null,arguments)}; +a._spine_atlas_dispose=function(){return(a._spine_atlas_dispose=a.asm.spine_atlas_dispose).apply(null,arguments)};a._free=function(){return(a._free=a.asm.free).apply(null,arguments)};a._spine_skeleton_data_load_json=function(){return(a._spine_skeleton_data_load_json=a.asm.spine_skeleton_data_load_json).apply(null,arguments)};a._spine_skeleton_data_load_binary=function(){return(a._spine_skeleton_data_load_binary=a.asm.spine_skeleton_data_load_binary).apply(null,arguments)}; a._spine_skeleton_data_result_get_error=function(){return(a._spine_skeleton_data_result_get_error=a.asm.spine_skeleton_data_result_get_error).apply(null,arguments)};a._spine_skeleton_data_result_get_data=function(){return(a._spine_skeleton_data_result_get_data=a.asm.spine_skeleton_data_result_get_data).apply(null,arguments)};a._spine_skeleton_data_result_dispose=function(){return(a._spine_skeleton_data_result_dispose=a.asm.spine_skeleton_data_result_dispose).apply(null,arguments)}; a._spine_skeleton_data_find_bone=function(){return(a._spine_skeleton_data_find_bone=a.asm.spine_skeleton_data_find_bone).apply(null,arguments)};a._spine_skeleton_data_find_slot=function(){return(a._spine_skeleton_data_find_slot=a.asm.spine_skeleton_data_find_slot).apply(null,arguments)};a._spine_skeleton_data_find_skin=function(){return(a._spine_skeleton_data_find_skin=a.asm.spine_skeleton_data_find_skin).apply(null,arguments)}; a._spine_skeleton_data_find_event=function(){return(a._spine_skeleton_data_find_event=a.asm.spine_skeleton_data_find_event).apply(null,arguments)};a._spine_skeleton_data_find_animation=function(){return(a._spine_skeleton_data_find_animation=a.asm.spine_skeleton_data_find_animation).apply(null,arguments)};a._spine_skeleton_data_find_ik_constraint=function(){return(a._spine_skeleton_data_find_ik_constraint=a.asm.spine_skeleton_data_find_ik_constraint).apply(null,arguments)}; @@ -84,7 +85,7 @@ a._spine_skeleton_set_slots_to_setup_pose=function(){return(a._spine_skeleton_se a._spine_skeleton_set_skin_by_name=function(){return(a._spine_skeleton_set_skin_by_name=a.asm.spine_skeleton_set_skin_by_name).apply(null,arguments)};a._spine_skeleton_set_skin=function(){return(a._spine_skeleton_set_skin=a.asm.spine_skeleton_set_skin).apply(null,arguments)};a._spine_skeleton_get_attachment_by_name=function(){return(a._spine_skeleton_get_attachment_by_name=a.asm.spine_skeleton_get_attachment_by_name).apply(null,arguments)}; a._spine_skeleton_get_attachment=function(){return(a._spine_skeleton_get_attachment=a.asm.spine_skeleton_get_attachment).apply(null,arguments)};a._spine_skeleton_set_attachment=function(){return(a._spine_skeleton_set_attachment=a.asm.spine_skeleton_set_attachment).apply(null,arguments)};a._spine_skeleton_find_ik_constraint=function(){return(a._spine_skeleton_find_ik_constraint=a.asm.spine_skeleton_find_ik_constraint).apply(null,arguments)}; a._spine_skeleton_find_transform_constraint=function(){return(a._spine_skeleton_find_transform_constraint=a.asm.spine_skeleton_find_transform_constraint).apply(null,arguments)};a._spine_skeleton_find_path_constraint=function(){return(a._spine_skeleton_find_path_constraint=a.asm.spine_skeleton_find_path_constraint).apply(null,arguments)};a._spine_skeleton_get_bounds=function(){return(a._spine_skeleton_get_bounds=a.asm.spine_skeleton_get_bounds).apply(null,arguments)}; -a._spine_skeleton_get_root_bone=function(){return(a._spine_skeleton_get_root_bone=a.asm.spine_skeleton_get_root_bone).apply(null,arguments)};a._spine_skeleton_get_data=function(){return(a._spine_skeleton_get_data=a.asm.spine_skeleton_get_data).apply(null,arguments)};a._spine_skeleton_get_num_bones=function(){return(a._spine_skeleton_get_num_bones=a.asm.spine_skeleton_get_num_bones).apply(null,arguments)}; +a._malloc=function(){return(a._malloc=a.asm.malloc).apply(null,arguments)};a._spine_skeleton_get_root_bone=function(){return(a._spine_skeleton_get_root_bone=a.asm.spine_skeleton_get_root_bone).apply(null,arguments)};a._spine_skeleton_get_data=function(){return(a._spine_skeleton_get_data=a.asm.spine_skeleton_get_data).apply(null,arguments)};a._spine_skeleton_get_num_bones=function(){return(a._spine_skeleton_get_num_bones=a.asm.spine_skeleton_get_num_bones).apply(null,arguments)}; a._spine_skeleton_get_bones=function(){return(a._spine_skeleton_get_bones=a.asm.spine_skeleton_get_bones).apply(null,arguments)};a._spine_skeleton_get_num_slots=function(){return(a._spine_skeleton_get_num_slots=a.asm.spine_skeleton_get_num_slots).apply(null,arguments)};a._spine_skeleton_get_slots=function(){return(a._spine_skeleton_get_slots=a.asm.spine_skeleton_get_slots).apply(null,arguments)}; a._spine_skeleton_get_num_draw_order=function(){return(a._spine_skeleton_get_num_draw_order=a.asm.spine_skeleton_get_num_draw_order).apply(null,arguments)};a._spine_skeleton_get_draw_order=function(){return(a._spine_skeleton_get_draw_order=a.asm.spine_skeleton_get_draw_order).apply(null,arguments)};a._spine_skeleton_get_num_ik_constraints=function(){return(a._spine_skeleton_get_num_ik_constraints=a.asm.spine_skeleton_get_num_ik_constraints).apply(null,arguments)}; a._spine_skeleton_get_ik_constraints=function(){return(a._spine_skeleton_get_ik_constraints=a.asm.spine_skeleton_get_ik_constraints).apply(null,arguments)};a._spine_skeleton_get_num_transform_constraints=function(){return(a._spine_skeleton_get_num_transform_constraints=a.asm.spine_skeleton_get_num_transform_constraints).apply(null,arguments)}; diff --git a/spine-flutter/lib/assets/libspine_flutter.wasm b/spine-flutter/lib/assets/libspine_flutter.wasm index 9e9e63169..ccef18809 100755 Binary files a/spine-flutter/lib/assets/libspine_flutter.wasm and b/spine-flutter/lib/assets/libspine_flutter.wasm differ diff --git a/spine-flutter/lib/ffi_proxy.dart b/spine-flutter/lib/ffi_proxy.dart index 664f74b34..2b5737038 100644 --- a/spine-flutter/lib/ffi_proxy.dart +++ b/spine-flutter/lib/ffi_proxy.dart @@ -1,16 +1,16 @@ /// /// Spine Runtimes License Agreement -/// Last updated September 24, 2021. Replaces all prior versions. +/// Last updated July 28, 2023. Replaces all prior versions. /// -/// Copyright (c) 2013-2021, Esoteric Software LLC +/// Copyright (c) 2013-2023, 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, +/// 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. @@ -23,8 +23,8 @@ /// (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. +/// (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. /// export 'dart:ffi' if (dart.library.html) 'package:web_ffi_fork/web_ffi.dart'; diff --git a/spine-flutter/lib/init.dart b/spine-flutter/lib/init.dart index 4a2854300..7fce1b55f 100644 --- a/spine-flutter/lib/init.dart +++ b/spine-flutter/lib/init.dart @@ -1,16 +1,16 @@ /// /// Spine Runtimes License Agreement -/// Last updated September 24, 2021. Replaces all prior versions. +/// Last updated July 28, 2023. Replaces all prior versions. /// -/// Copyright (c) 2013-2021, Esoteric Software LLC +/// Copyright (c) 2013-2023, 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, +/// 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. @@ -23,8 +23,8 @@ /// (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. +/// (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. /// import 'dart:ffi'; diff --git a/spine-flutter/lib/init_web.dart b/spine-flutter/lib/init_web.dart index 1b1c1d118..f494f7cea 100644 --- a/spine-flutter/lib/init_web.dart +++ b/spine-flutter/lib/init_web.dart @@ -1,16 +1,16 @@ /// /// Spine Runtimes License Agreement -/// Last updated September 24, 2021. Replaces all prior versions. +/// Last updated July 28, 2023. Replaces all prior versions. /// -/// Copyright (c) 2013-2021, Esoteric Software LLC +/// Copyright (c) 2013-2023, 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, +/// 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. @@ -23,8 +23,8 @@ /// (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. +/// (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. /// // ignore_for_file: type_argument_not_matching_bounds diff --git a/spine-flutter/lib/spine_flutter.dart b/spine-flutter/lib/spine_flutter.dart index 14e829462..0da5432d2 100644 --- a/spine-flutter/lib/spine_flutter.dart +++ b/spine-flutter/lib/spine_flutter.dart @@ -1,16 +1,16 @@ /// /// Spine Runtimes License Agreement -/// Last updated September 24, 2021. Replaces all prior versions. +/// Last updated July 28, 2023. Replaces all prior versions. /// -/// Copyright (c) 2013-2021, Esoteric Software LLC +/// Copyright (c) 2013-2023, 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, +/// 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. @@ -23,8 +23,8 @@ /// (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. +/// (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. /// import 'dart:convert' as convert; @@ -1597,8 +1597,8 @@ class RegionAttachment extends Attachment { Float32List getUVs() { final num = _bindings.spine_region_attachment_get_num_uvs(_attachment); - final offset = _bindings.spine_region_attachment_get_uvs(_attachment); - return offset.asTypedList(num); + final uvs = _bindings.spine_region_attachment_get_uvs(_attachment); + return uvs.asTypedList(num); } } @@ -4071,7 +4071,21 @@ class RenderCommand { // is copied, so it doesn't matter that we free up the underlying memory on the next // render call. See the implementation of Vertices.raw() here: // https://github.com/flutter/engine/blob/5c60785b802ad2c8b8899608d949342d5c624952/lib/ui/painting/vertices.cc#L21 - vertices = Vertices.raw(VertexMode.triangles, positions, textureCoordinates: uvs, colors: colors, indices: indices); + // + // Impeller is currently using a slow path when using vertex colors. + // See https://github.com/flutter/flutter/issues/127486 + // + // We thus batch all meshes not only by atlas page and blend mode, but also vertex color. + // See spine_flutter.cpp, batch_commands(). + // + // If the vertex color equals (1, 1, 1, 1), we do not store + // colors, which will trigger the fast path in Impeller. Otherwise we have to go the slow path, which + // has to render to an offscreen surface. + if (colors.isNotEmpty && colors[0] == -1) { + vertices = Vertices.raw(VertexMode.triangles, positions, textureCoordinates: uvs, indices: indices); + } else { + vertices = Vertices.raw(VertexMode.triangles, positions, textureCoordinates: uvs, colors: colors, indices: indices); + } } else { // On the web, rendering is done through CanvasKit, which requires copies of the native data. final positionsCopy = Float32List.fromList(positions); diff --git a/spine-flutter/lib/spine_widget.dart b/spine-flutter/lib/spine_widget.dart index 3517103ff..113e80593 100644 --- a/spine-flutter/lib/spine_widget.dart +++ b/spine-flutter/lib/spine_widget.dart @@ -1,16 +1,16 @@ /// /// Spine Runtimes License Agreement -/// Last updated September 24, 2021. Replaces all prior versions. +/// Last updated July 28, 2023. Replaces all prior versions. /// -/// Copyright (c) 2013-2021, Esoteric Software LLC +/// Copyright (c) 2013-2023, 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, +/// 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. @@ -23,8 +23,8 @@ /// (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. +/// (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. /// import 'dart:math'; diff --git a/spine-flutter/pubspec.yaml b/spine-flutter/pubspec.yaml index a2e50cd2a..c83a75d50 100644 --- a/spine-flutter/pubspec.yaml +++ b/spine-flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: spine_flutter description: The official Spine Flutter Runtime to load, display and interact with Spine animations. -version: 4.1.1 +version: 4.1.5 homepage: https://esotericsoftware.com repository: https://github.com/esotericsoftware/spine-runtimes issue_tracker: https://github.com/esotericsoftware/spine-runtimes/issues @@ -8,7 +8,7 @@ documentation: https://esotericsoftware.com/spine-flutter environment: sdk: '>=2.17.6 <4.0.0' - flutter: ">=3.7.6" + flutter: ">=3.10.5" dependencies: flutter: @@ -18,12 +18,12 @@ dependencies: inject_js: ^2.0.0 js: ^0.6.5 meta: ^1.8.0 - http: ^0.13.5 + http: ^1.1.0 path: ^1.8.2 raw_image_provider: ^0.2.0 dev_dependencies: - ffigen: ^7.2.6 + ffigen: ^9.0.1 flutter_lints: ^2.0.0 flutter: diff --git a/spine-flutter/src/spine_flutter.cpp b/spine-flutter/src/spine_flutter.cpp index a970f6437..5265f503f 100644 --- a/spine-flutter/src/spine_flutter.cpp +++ b/spine-flutter/src/spine_flutter.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "spine_flutter.h" @@ -695,6 +695,7 @@ static _spine_render_command *batch_commands(BlockAllocator &allocator, Vector<_ _spine_render_command *cmd = i < commands.size() ? commands[i] : nullptr; if (cmd != nullptr && cmd->atlasPage == first->atlasPage && cmd->blendMode == first->blendMode && + cmd->colors[0] == first->colors[0] && numIndices + cmd->numIndices < 0xffff) { numVertices += cmd->numVertices; numIndices += cmd->numIndices; diff --git a/spine-flutter/src/spine_flutter.h b/spine-flutter/src/spine_flutter.h index 720fd2acb..d90cba64a 100644 --- a/spine-flutter/src/spine_flutter.h +++ b/spine-flutter/src/spine_flutter.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_FLUTTER @@ -853,4 +853,4 @@ SPINE_FLUTTER_EXPORT void spine_texture_region_set_original_width(spine_texture_ SPINE_FLUTTER_EXPORT int32_t spine_texture_region_get_original_height(spine_texture_region textureRegion); SPINE_FLUTTER_EXPORT void spine_texture_region_set_original_height(spine_texture_region textureRegion, int32_t originalHeight); -#endif \ No newline at end of file +#endif diff --git a/spine-godot/.vscode/launch.json b/spine-godot/.vscode/launch.json index 20f2e0b0d..03850e6d3 100644 --- a/spine-godot/.vscode/launch.json +++ b/spine-godot/.vscode/launch.json @@ -1,108 +1,113 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "cppvsdbg", - "request": "launch", - "name": "debug scene v4", - "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", - "args": [ - "--path", - "example-v4", - "examples/01-helloworld/helloworld.tscn" - ], - "cwd": "${workspaceFolder}", - "preLaunchTask": "build-v4", - "linux": { - "type": "lldb", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64", - }, - "osx": { - "type": "lldb", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64", - }, - }, - { - "type": "cppvsdbg", - "request": "launch", - "name": "debug editor v4", - "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", - "args": [ - "-e", - "--path", - "example-v4", - ], - "cwd": "${workspaceFolder}", - "preLaunchTask": "build-v4", - "linux": { - "type": "lldb", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64", - }, - "osx": { - "type": "lldb", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64", - }, - }, - { - "type": "cppvsdbg", - "request": "launch", - "name": "debug scene v3", - "cwd": "${workspaceFolder}", - "program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe", - "args": [ - "--path", - "example", - "examples/01-helloworld/helloworld.tscn" - ], - "preLaunchTask": "build-v3", - "linux": { - "type": "cppdbg", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.linux.tools.64", - }, - "osx": { - "type": "lldb", - "request": "launch", - "name": "debug scene v3", - "program": "${workspaceFolder}/godot/bin/godot.osx.tools.64", - }, - }, - { - "type": "cppvsdbg", - "request": "launch", - "name": "debug editor v3", - "program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe", - "args": [ - "-e", - "--path", - "example", - ], - "cwd": "${workspaceFolder}", - "preLaunchTask": "build-v3", - "linux": { - "type": "cppdbg", - "request": "launch", - "name": "debug editor v3", - "program": "${workspaceFolder}/godot/bin/godot.linux.tools.64", - }, - "osx": { - "type": "lldb", - "request": "launch", - "name": "debug editor v3", - "program": "${workspaceFolder}/godot/bin/godot.osx.tools.64", - }, - }, - ] -} \ No newline at end of file + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug scene v4", + "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "args": ["--path", "example-v4", "examples/07-slot-node/slot-node.tscn"], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v4", + "linux": { + "type": "lldb", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64" + }, + "osx": { + "type": "lldb", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64" + } + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug editor v4", + "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "args": ["-e", "--path", "example-v4"], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v4", + "linux": { + "type": "lldb", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64" + }, + "osx": { + "type": "lldb", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64" + } + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug editor v4 c#", + "program": "godot/bin/godot.windows.editor.dev.x86_64.mono.exe", + "args": ["-e", "--path", "example-v4"], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v4", + "linux": { + "type": "lldb", + "request": "launch", + "name": "debug editor v4", + "program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64" + }, + "osx": { + "type": "lldb", + "request": "launch", + "name": "debug editor v4", + "program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64.mono" + } + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug scene v3", + "cwd": "${workspaceFolder}", + "program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe", + "args": ["--path", "example", "examples/01-helloworld/helloworld.tscn"], + "preLaunchTask": "build-v3", + "linux": { + "type": "cppdbg", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.linux.tools.64" + }, + "osx": { + "type": "lldb", + "request": "launch", + "name": "debug scene v3", + "program": "${workspaceFolder}/godot/bin/godot.osx.tools.64" + } + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug editor v3", + "program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe", + "args": ["-e", "--path", "example"], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v3", + "linux": { + "type": "cppdbg", + "request": "launch", + "name": "debug editor v3", + "program": "${workspaceFolder}/godot/bin/godot.linux.tools.64" + }, + "osx": { + "type": "lldb", + "request": "launch", + "name": "debug editor v3", + "program": "${workspaceFolder}/godot/bin/godot.osx.tools.64" + } + } + ] +} diff --git a/spine-godot/.vscode/settings.json b/spine-godot/.vscode/settings.json index 621800919..75a3d9303 100644 --- a/spine-godot/.vscode/settings.json +++ b/spine-godot/.vscode/settings.json @@ -1,4 +1,5 @@ { - "cmake.configureOnOpen": false, - "C_Cpp.intelliSenseEngine": "disabled", -} \ No newline at end of file + "cmake.configureOnOpen": false, + "C_Cpp.intelliSenseEngine": "disabled", + "dotnet.defaultSolution": "disable" +} diff --git a/spine-godot/build/build-templates-v4.sh b/spine-godot/build/build-templates-v4.sh index bb71f3c7c..1695d0972 100755 --- a/spine-godot/build/build-templates-v4.sh +++ b/spine-godot/build/build-templates-v4.sh @@ -2,10 +2,10 @@ set -e dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" -pushd $dir > /dev/null +pushd "$dir" > /dev/null -if [ ! "$#" -eq 1 ]; then - echo "Usage: ./build-templates.sh " +if [ "$#" -lt 1 ]; then + echo "Usage: ./build-templates.sh ?" echo echo "e.g.:" echo " ./build-templates.sh windows" @@ -14,7 +14,7 @@ if [ ! "$#" -eq 1 ]; then echo " ./build-templates.sh ios" echo " ./build-templates.sh android" echo " ./build-templates.sh web" - echo + echo exit 1 fi @@ -24,6 +24,28 @@ if [ ! -d ../godot ]; then fi platform=${1%/} +mono=false + +if [[ $# -eq 2 ]]; then + mono=${2%/} + if [ "$platform" != "windows" ] && [ "$platform" != "linux" ] && [ "$platform" != "macos" ]; then + echo "C# is only supported for Windows, Linux, and macOS" + exit 1 + fi + echo "Building Godot template with C# support" +else + echo "Building Godot template without C# support" +fi + +mono_module="" +mono_extension="" +if [ $mono == "true" ]; then + mono_module="module_mono_enabled=yes" + mono_extension=".mono" + echo "Building Godot with C# support" +else + echo "Building Godot without C# support" +fi cpus=2 if [ "$OSTYPE" = "msys" ]; then @@ -38,21 +60,21 @@ pushd ../godot if [ "$platform" = "windows" ]; then # --- Windows --- #generates windows_64_debug.exe and windows_64_release.exe - scons platform=windows tools=no target=template_release custom_modules="../spine_godot" --jobs=$cpus - scons platform=windows tools=no target=template_debug custom_modules="../spine_godot" --jobs=$cpus - cp bin/godot.windows.template_release.x86_64.exe bin/windows_release_x86_64.exe - cp bin/godot.windows.template_debug.x86_64.exe bin/windows_debug_x86_64.exe + scons platform=windows tools=no target=template_release custom_modules="../spine_godot" $mono_module --jobs=$cpus + scons platform=windows tools=no target=template_debug custom_modules="../spine_godot" $mono_module --jobs=$cpus + cp bin/godot.windows.template_release.x86_64$mono_extension.exe bin/windows_release_x86_64.exe + cp bin/godot.windows.template_debug.x86_64$mono_extension.exe bin/windows_debug_x86_64.exe elif [ "$platform" = "macos" ]; then # --- macOS --- # generates macos.zip - scons platform=macos tools=no target=template_release arch=x86_64 custom_modules="../spine_godot" --jobs=$cpus - scons platform=macos tools=no target=template_debug arch=x86_64 custom_modules="../spine_godot" --jobs=$cpus - scons platform=macos tools=no target=template_release arch=arm64 custom_modules="../spine_godot" --jobs=$cpus - scons platform=macos tools=no target=template_debug arch=arm64 custom_modules="../spine_godot" --jobs=$cpus - lipo -create bin/godot.macos.template_release.x86_64 bin/godot.macos.template_release.arm64 -output bin/godot.macos.universal - lipo -create bin/godot.macos.template_debug.x86_64 bin/godot.macos.template_debug.arm64 -output bin/godot.macos.debug.universal + scons platform=macos tools=no target=template_release arch=x86_64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + scons platform=macos tools=no target=template_debug arch=x86_64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + scons platform=macos tools=no target=template_release arch=arm64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + scons platform=macos tools=no target=template_debug arch=arm64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + lipo -create "bin/godot.macos.template_release.x86_64$mono_extension" "bin/godot.macos.template_release.arm64$mono_extension" -output bin/godot.macos.universal + lipo -create "bin/godot.macos.template_debug.x86_64$mono_extension" "bin/godot.macos.template_debug.arm64$mono_extension" -output bin/godot.macos.debug.universal strip -S -x bin/godot.macos.universal pushd bin @@ -60,10 +82,21 @@ elif [ "$platform" = "macos" ]; then mkdir -p macos_template.app/Contents/MacOS cp godot.macos.universal macos_template.app/Contents/MacOS/godot_macos_release.universal cp godot.macos.debug.universal macos_template.app/Contents/MacOS/godot_macos_debug.universal - chmod +x macos_template.app/Contents/MacOS/godot_macos* + chmod +x macos_template.app/Contents/MacOS/godot_macos* rm -rf macos.zip zip -q -9 -r macos.zip macos_template.app popd +elif [ "$platform" = "linux" ]; then + # --- Linux --- + # generates linux_x11_64_release, linux_x11_64_debug + scons platform=linuxbsd tools=no target=template_release bits=64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + scons platform=linuxbsd tools=no target=template_debug bits=64 custom_modules="../spine_godot" $mono_module --jobs=$cpus + strip bin/godot.linuxbsd.template_release.x86_64$mono_extension + strip bin/godot.linuxbsd.template_debug.x86_64$mono_extension + chmod a+x bin/godot.linuxbsd.template_release.x86_64$mono_extension + chmod a+x bin/godot.linuxbsd.template_debug.x86_64$mono_extension + cp bin/godot.linuxbsd.template_release.x86_64$mono_extension bin/linux_release.x86_64 + cp bin/godot.linuxbsd.template_debug.x86_64$mono_extension bin/linux_debug.x86_64 elif [ "$platform" = "ios" ]; then # --- iOS -- # generates ios.zip @@ -77,19 +110,19 @@ elif [ "$platform" = "ios" ]; then lipo -create bin/libgodot.ios.template_release.arm64.simulator.a bin/libgodot.ios.template_release.x86_64.simulator.a -output bin/libgodot.ios.template_release.simulator.a lipo -create bin/libgodot.ios.template_debug.arm64.simulator.a bin/libgodot.ios.template_debug.x86_64.simulator.a -output bin/libgodot.ios.template_debug.simulator.a strip -S -x bin/libgodot.ios.template_release.arm64.a - strip -S -x bin/libgodot.ios.template_release.simulator.a + strip -S -x bin/libgodot.ios.template_release.simulator.a pushd bin - cp -r ../misc/dist/ios_xcode . + cp -r ../misc/dist/ios_xcode . cp libgodot.ios.template_release.arm64.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64/libgodot.a - cp libgodot.ios.template_release.simulator.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a + cp libgodot.ios.template_release.simulator.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a cp libgodot.ios.template_debug.arm64.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64/libgodot.a - cp libgodot.ios.template_debug.simulator.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a + cp libgodot.ios.template_debug.simulator.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a rm -rf ios.zip pushd ios_xcode zip -q -9 -r ../ios.zip * popd - popd + popd elif [ "$platform" = "web" ]; then # --- WEB --- # generates webassembly_debug.zip, webassembly_release.zip @@ -109,17 +142,6 @@ elif [ "$platform" = "android" ]; then chmod a+x gradlew ./gradlew generateGodotTemplates popd -elif [ "$platform" = "linux" ]; then - # --- Linux --- - # generates linux_x11_64_release, linux_x11_64_debug - scons platform=linuxbsd tools=no target=template_release bits=64 custom_modules="../spine_godot" --jobs=$cpus - scons platform=linuxbsd tools=no target=template_debug bits=64 custom_modules="../spine_godot" --jobs=$cpus - strip bin/godot.linuxbsd.template_release.x86_64 - strip bin/godot.linuxbsd.template_debug.x86_64 - chmod a+x bin/godot.linuxbsd.template_release.x86_64 - chmod a+x bin/godot.linuxbsd.template_debug.x86_64 - cp bin/godot.linuxbsd.template_release.x86_64 bin/linux_x11_64_release - cp bin/godot.linuxbsd.template_debug.x86_64 bin/linux_x11_64_debug else echo "Unknown platform: $platform" exit 1 diff --git a/spine-godot/build/build-templates.sh b/spine-godot/build/build-templates.sh index 57bc7cfac..c21add0ae 100755 --- a/spine-godot/build/build-templates.sh +++ b/spine-godot/build/build-templates.sh @@ -2,7 +2,7 @@ set -e dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" -pushd $dir > /dev/null +pushd "$dir" > /dev/null if [ ! "$#" -eq 1 ]; then echo "Usage: ./build-templates.sh " diff --git a/spine-godot/build/build-v4.sh b/spine-godot/build/build-v4.sh index 6ea29a454..e8677f345 100755 --- a/spine-godot/build/build-v4.sh +++ b/spine-godot/build/build-v4.sh @@ -2,7 +2,7 @@ set -e dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" -pushd $dir > /dev/null +pushd "$dir" > /dev/null if [ ! -d ../godot ]; then echo "No Godot clone found. Run ./setup.sh first." @@ -11,47 +11,100 @@ fi target="" dev="false" +mono="false" + +if [ $# -gt 0 ]; then + if [ $# -gt 1 ]; then + echo "Usage: $0 " + exit 1 + else + if [ "$1" == "true" ] || [ "$1" == "false" ]; then + mono="$1" + else + echo "Invalid value for the 'mono' argument. It should be either 'true' or 'false'." + exit 1 + fi + fi +fi + if [ -f "../godot/custom.py" ]; then dev="true" + echo "DEV build" +fi + +mono_module="" +mono_extension="" +if [ $mono == "true" ]; then + mono_module="module_mono_enabled=yes" + mono_extension=".mono" + echo "Building Godot with C# support" +else + echo "Building Godot without C# support" +fi + +dev_extension="" +if [ $dev == "true" ]; then + dev_extension=".dev" + target="$target dev_build=true" fi cpus=2 -if [ "$OSTYPE" = "msys" ]; then +if [ "$OSTYPE" == "msys" ]; then + os="windows" cpus=$NUMBER_OF_PROCESSORS -elif [[ "$OSTYPE" = "darwin"* ]]; then + target="$target vsproj=yes livepp=$LIVEPP" + godot_exe="godot.windows.editor$dev_extension.x86_64$mono_extension.exe" + godot_exe_host=$godot_exe +elif [[ "$OSTYPE" == "darwin"* ]]; then + os="macos" cpus=$(sysctl -n hw.logicalcpu) + godot_exe="godot.macos.editor$dev_extension.x86_64$mono_extension" + godot_exe_arm="godot.macos.editor$dev_extension.arm64$mono_extension" + godot_exe_host=$godot_exe + if [ `uname -m` == "arm64" ]; then + godot_exe_host=$godot_exe_arm + fi else + os="linux" cpus=$(grep -c ^processor /proc/cpuinfo) + godot_exe="godot.linuxbsd.editor$dev_extension.x86_64$mono_extension" + godot_exe_host=$godot_exe fi echo "CPUS: $cpus" pushd ../godot -if [ `uname` == 'Darwin' ] && [ $dev = "false" ]; then - scons $target arch=x86_64 compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus - scons $target arch=arm64 compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus - +if [ "$os" == "macos" ] && [ $dev == "false" ]; then + scons $target $mono_module arch=x86_64 compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus + scons $target $mono_module arch=arm64 compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus + if [ $mono == "true" ]; then + echo "Building C# glue and assemblies." + "./bin/$godot_exe_host" --generate-mono-glue modules/mono/glue + python3 ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local ../godot-spine-csharp + fi pushd bin cp -r ../misc/dist/macos_tools.app . mv macos_tools.app Godot.app mkdir -p Godot.app/Contents/MacOS - lipo -create godot.macos.editor.arm64 godot.macos.editor.x86_64 -output Godot + lipo -create $godot_exe_arm $godot_exe -output Godot strip -S -x Godot cp Godot Godot.app/Contents/MacOS/Godot chmod +x Godot.app/Contents/MacOS/Godot + if [ $mono == "true" ]; then + cp -r GodotSharp Godot.app/Contents/Resources + fi popd else - if [ "$OSTYPE" = "msys" ]; then - target="vsproj=yes livepp=$LIVEPP" + scons $target $mono_module compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus + if [ $mono == "true" ]; then + echo "Building C# glue and assemblies." + "./bin/$godot_exe_host" --headless --generate-mono-glue modules/mono/glue + python3 ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local ../godot-nuget fi - if [ "$dev" = "true" ]; then - target="$target dev_build=true" - fi - scons $target compiledb=yes custom_modules="../spine_godot" opengl3=yes --jobs=$cpus cp compile_commands.json ../build - if [ -f "bin/godot.linuxbsd.editor.x86_64" ]; then - strip bin/godot.linuxbsd.editor.x86_64 - chmod a+x bin/godot.linuxbsd.editor.x86_64 + if [ -f "bin/godot.linuxbsd.editor.x86_64$mono_extension" ]; then + strip bin/godot.linuxbsd.editor.x86_64$mono_extension + chmod a+x bin/godot.linuxbsd.editor.x86_64$mono_extension fi fi popd diff --git a/spine-godot/build/build.sh b/spine-godot/build/build.sh index 2abaed21a..2550bc6ca 100755 --- a/spine-godot/build/build.sh +++ b/spine-godot/build/build.sh @@ -2,7 +2,7 @@ set -e dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" -pushd $dir > /dev/null +pushd "$dir" > /dev/null if [ ! "$#" -eq 1 ]; then echo "Usage: ./build.sh " diff --git a/spine-godot/build/install-macos-vulkan-sdk.sh b/spine-godot/build/install-macos-vulkan-sdk.sh index 756d38535..8d1bfdd04 100755 --- a/spine-godot/build/install-macos-vulkan-sdk.sh +++ b/spine-godot/build/install-macos-vulkan-sdk.sh @@ -2,7 +2,7 @@ set -euo pipefail IFS=$'\n\t' # Download and install the Vulkan SDK. -curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/vulkan-sdk.dmg" -o /tmp/vulkan-sdk.dmg +curl -L "https://sdk.lunarg.com/sdk/download/1.3.250.1/mac/vulkansdk-macos-1.3.250.1.dmg" -o /tmp/vulkan-sdk.dmg hdiutil attach /tmp/vulkan-sdk.dmg -mountpoint /Volumes/vulkan-sdk /Volumes/vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan \ --accept-licenses --default-answer --confirm-command install diff --git a/spine-godot/build/pack-template.sh b/spine-godot/build/pack-template.sh new file mode 100755 index 000000000..0df7ccfdf --- /dev/null +++ b/spine-godot/build/pack-template.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +pushd "$dir/../godot/bin" > /dev/null + +echo "$1" > version.txt +zip spine-godot-templates.zip ios.zip macos.zip windows_debug_x86_64.exe windows_release_x86_64.exe linux_x11_64_debug linux_x11_64_release web_debug.zip web_release.zip android_release.apk android_debug.apk android_source.zip version.txt + +popd \ No newline at end of file diff --git a/spine-godot/build/setup.sh b/spine-godot/build/setup.sh index 6085f78c8..d18b07dc3 100755 --- a/spine-godot/build/setup.sh +++ b/spine-godot/build/setup.sh @@ -2,20 +2,38 @@ set -e dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" -pushd $dir > /dev/null +pushd "$dir" > /dev/null -if [ ! "$#" -eq 2 ]; then - echo "Usage: ./setup.sh " +if [ $# -lt 2 ] || [ $# -gt 3 ]; then + echo "Usage: ./setup.sh ?" echo echo "e.g.:" - echo " ./setup.sh 3.4.4-stable true" - echo " ./setup.sh master false" - echo + echo " ./setup.sh 3.5.2-stable true" + echo " ./setup.sh master false true" + echo + echo "Note: the 'mono' parameter only works for Godot 4.x+!" + exit 1 fi branch=${1%/} dev=${2%/} +mono=false + +if [[ $# -eq 3 && "$branch" != 3* ]]; then + mono=${3%/} +fi + +if [ "$dev" != "true" ] && [ "$dev" != "false" ]; then + echo "Invalid value for the 'dev' argument. It should be either 'true' or 'false'." + exit 1 +fi + +if [ "$mono" != "true" ] && [ "$mono" != "false" ]; then + echo "Invalid value for the 'mono' argument. It should be either 'true' or 'false'." + exit 1 +fi + pushd .. rm -rf godot @@ -23,21 +41,25 @@ git clone --depth 1 https://github.com/godotengine/godot.git -b $branch if [ $dev = "true" ]; then cp -r .idea godot cp build/custom.py godot + if [ "$mono" = "true" ]; then + echo "" >> godot/custom.py + echo "module_mono_enabled=\"yes\"" >> godot/custom.py + fi cp ../formatters/.clang-format . rm -rf example/.import rm -rf example/.godot - if [ "$OSTYPE" = "msys" ]; then - pushd godot - if [[ $branch == 3* ]]; then - echo "Applying V3 Live++ patch" - git apply ../build/livepp.patch - else - echo "Applying V4 Live++ patch" - git apply ../build/livepp-v4.patch - fi - popd - fi + #if [ "$OSTYPE" = "msys" ]; then + # pushd godot + # if [[ $branch == 3* ]]; then + # echo "Applying V3 Live++ patch" + # git apply ../build/livepp.patch + # else + # echo "Applying V4 Live++ patch" + # git apply ../build/livepp-v4.patch + # fi + # popd + #fi if [ `uname` == 'Darwin' ] && [ ! -d "$HOME/VulkanSDK" ]; then ./build/install-macos-vulkan-sdk.sh diff --git a/spine-godot/example-v4-csharp/assets/footstep.ogg b/spine-godot/example-v4-csharp/assets/footstep.ogg new file mode 100644 index 000000000..0e1468d8c Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/footstep.ogg differ diff --git a/spine-godot/example-v4-csharp/assets/footstep.ogg.import b/spine-godot/example-v4-csharp/assets/footstep.ogg.import new file mode 100644 index 000000000..314d07a74 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/footstep.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://can7k84o8svum" +path="res://.godot/imported/footstep.ogg-789c3f1e3c4e0ca3bebcb13f1160f623.oggvorbisstr" + +[deps] + +source_file="res://assets/footstep.ogg" +dest_files=["res://.godot/imported/footstep.ogg-789c3f1e3c4e0ca3bebcb13f1160f623.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-data.tres b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-data.tres new file mode 100644 index 000000000..4ccfa653d --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-data.tres @@ -0,0 +1,10 @@ +[gd_resource type="SpineSkeletonDataResource" load_steps=3 format=2] + +[ext_resource path="res://assets/mix-and-match/mix-and-match.atlas" type="SpineAtlasResource" id=1] +[ext_resource path="res://assets/mix-and-match/mix-and-match-pro.spine-json" type="SpineSkeletonFileResource" id=2] + +[resource] +atlas_res = ExtResource( 1 ) +skeleton_file_res = ExtResource( 2 ) +animations = null +skins = null diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json new file mode 100644 index 000000000..9f27b879a --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json @@ -0,0 +1,8001 @@ +{ +"skeleton": { + "hash": "5bSWDwjOkqw", + "spine": "4.1.23-beta", + "x": -240.58, + "y": -3.38, + "width": 410.36, + "height": 806.78, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "skeleton-control", "parent": "root", "x": -0.43, "y": 257.36, "color": "ff1111ff" }, + { "name": "hips", "parent": "skeleton-control", "x": 3.06, "y": 29.29, "color": "ffce12ff" }, + { + "name": "body-down", + "parent": "hips", + "length": 68.46, + "rotation": 92.39, + "x": -3.13, + "y": -1.59, + "color": "ffce12ff" + }, + { + "name": "body-up", + "parent": "body-down", + "length": 113.37, + "rotation": 1.94, + "x": 66.64, + "y": 1.98, + "color": "ffce12ff" + }, + { + "name": "neck", + "parent": "body-up", + "length": 43.86, + "rotation": -2.99, + "x": 98.36, + "y": 3.04, + "color": "ffce12ff" + }, + { + "name": "head", + "parent": "neck", + "length": 156.89, + "rotation": -3.77, + "x": 31.54, + "y": 7.82, + "color": "ffce12ff" + }, + { "name": "arm-front-control", "parent": "body-up", "rotation": -94.33, "x": 82.42, "y": 46.82, "color": "ff3636ff" }, + { + "name": "arm-front-up", + "parent": "arm-front-control", + "length": 102.6, + "rotation": -90, + "x": 0.28, + "y": -0.01, + "color": "ff3636ff" + }, + { "name": "arm-front-down", "parent": "arm-front-up", "length": 102.6, "x": 102.6, "color": "ff3636ff" }, + { "name": "hand-front", "parent": "arm-front-down", "length": 30.54, "x": 97.35, "y": -2, "color": "ff1c1cff" }, + { + "name": "arm-front-up-2", + "parent": "arm-front-control", + "length": 33.49, + "rotation": -90, + "x": 0.28, + "y": -0.01, + "color": "9a1c1cff" + }, + { + "name": "arm-front-up-3", + "parent": "arm-front-up-2", + "length": 33.49, + "rotation": -0.88, + "x": 132.36, + "y": -0.3, + "color": "9a1c1cff" + }, + { "name": "arm-front-up-4", "parent": "arm-front-up-3", "length": 33.49, "x": 33.49, "color": "9a1c1cff" }, + { "name": "arm-front-up-5", "parent": "arm-front-up-4", "length": 33.49, "x": 33.49, "color": "9a1c1cff" }, + { "name": "arm-front-up-6", "parent": "arm-front-up-5", "length": 33.49, "x": 33.49, "color": "9a1c1cff" }, + { + "name": "arm-front-up-7", + "parent": "arm-front-up-6", + "length": 33.49, + "rotation": -0.01, + "x": 133.92, + "y": -0.76, + "color": "9a1c1cff" + }, + { "name": "leg-control-front", "parent": "hips", "x": -29.98, "y": -1.61, "color": "d130ffff" }, + { + "name": "foot-front-IK", + "parent": "skeleton-control", + "rotation": -90.56, + "x": -51.95, + "y": -259.13, + "transform": "noRotationOrReflection", + "color": "d130ffff" + }, + { "name": "leg-up", "parent": "leg-control-front", "length": 144.38, "rotation": -99.42, "y": 0.45, "color": "d130ffff" }, + { "name": "leg-down", "parent": "leg-up", "length": 144.38, "rotation": 8.86, "x": 144.38, "color": "d130ffff" }, + { "name": "leg-front-1", "parent": "leg-control-front", "length": 35.95, "rotation": -90, "y": 0.45, "color": "65127cff" }, + { "name": "leg-front-2", "parent": "leg-front-1", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-3", "parent": "leg-front-2", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-4", "parent": "leg-front-3", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-5", "parent": "leg-front-4", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-6", "parent": "leg-front-5", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-7", "parent": "leg-front-6", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "leg-front-8", "parent": "leg-front-7", "length": 35.95, "x": 35.95, "color": "65127cff" }, + { "name": "head-control", "parent": "head", "rotation": -87.57, "x": 71.99, "y": -39.68, "color": "ffce12ff" }, + { "name": "head-back-control", "parent": "head", "rotation": -87.57, "x": 68.52, "y": 49.17, "color": "ffce12ff" }, + { "name": "features-control", "parent": "head", "rotation": -87.57, "x": 88.9, "y": -37.83, "color": "ff5826ff" }, + { "name": "eye-front", "parent": "features-control", "x": -52.2, "y": -35.32, "color": "ff2e2eff" }, + { "name": "eye-front-iris", "parent": "eye-front", "x": -2.45, "y": 18.5, "color": "ff2e2eff" }, + { "name": "eye-front-up-eyelid-holder", "parent": "eye-front", "x": -23.12, "y": 25.84, "color": "ff2e2eff" }, + { "name": "eye-front-up-eyelid", "parent": "eye-front-up-eyelid-holder", "length": 24.39, "rotation": 12.94, "color": "ff2e2eff" }, + { "name": "eye-front-low-eyelid-holder", "parent": "eye-front", "x": -14.14, "y": 5.98, "color": "ff2e2eff" }, + { "name": "eye-front-low-eyelid", "parent": "eye-front-low-eyelid-holder", "length": 17.4, "rotation": -9.9, "color": "ff2e2eff" }, + { + "name": "eye-front-eyebrow", + "parent": "eye-front", + "length": 29.37, + "rotation": 3.58, + "x": -14.96, + "y": 46.78, + "color": "ff2e2eff" + }, + { "name": "eye-back", "parent": "features-control", "x": 35.89, "y": -33.38, "color": "f64379ff" }, + { "name": "eye-back-up-eyelid-holder", "parent": "eye-back", "x": 13.06, "y": 27.2, "color": "f64379ff" }, + { "name": "eye-back-up-eyelid", "parent": "eye-back-up-eyelid-holder", "length": 20.8, "rotation": 168.69, "color": "f64379ff" }, + { "name": "eye-back-low-eyelid-holder", "parent": "eye-back", "x": 12.51, "y": 5.71, "color": "f64379ff" }, + { "name": "eye-back-low-eyelid", "parent": "eye-back-low-eyelid-holder", "length": 16.37, "rotation": -164.58, "color": "f64379ff" }, + { "name": "eye-back-iris", "parent": "eye-back", "x": -4.9, "y": 17.41, "color": "f64379ff" }, + { + "name": "eye-back-eyebrow", + "parent": "eye-back", + "length": 22.32, + "rotation": 177.9, + "x": 6.26, + "y": 45.7, + "color": "f64379ff" + }, + { + "name": "hair-side-front", + "parent": "head", + "length": 117.55, + "rotation": -168.46, + "x": 97.12, + "y": 56.27, + "color": "ffce12ff" + }, + { + "name": "hair-side-back", + "parent": "head", + "length": 130.16, + "rotation": -145.86, + "x": 118.76, + "y": -73.3, + "color": "ffce12ff" + }, + { + "name": "hair-bangs-front", + "parent": "head", + "length": 77.62, + "rotation": 147.72, + "x": 141.51, + "y": 5.35, + "color": "ffce12ff" + }, + { + "name": "hair-bangs-back", + "parent": "head", + "length": 113.25, + "rotation": -108.68, + "x": 144.28, + "y": -7.09, + "color": "ffce12ff" + }, + { "name": "hat-base", "parent": "head", "x": 136.74, "y": 38.65, "skin": true, "color": "b131ffff" }, + { + "name": "hat", + "parent": "hat-base", + "length": 150.37, + "rotation": 8.06, + "x": -8.47, + "y": -4.44, + "skin": true, + "color": "b131ffff" + }, + { "name": "hat-control", "parent": "hat", "x": 65.29, "y": -6.95, "skin": true, "color": "b131ffff" }, + { "name": "pompom-control", "parent": "hat", "x": 150.97, "y": 0.35, "skin": true, "color": "b131ffff" }, + { "name": "end-arm-control", "parent": "arm-front-down", "length": 26.6, "x": 74.55, "y": 0.24, "color": "ff3636ff" }, + { + "name": "backpack", + "parent": "body-up", + "length": 120.69, + "rotation": -178.76, + "x": 114.16, + "y": 90.94, + "skin": true, + "color": "b57dd9ff" + }, + { "name": "backpack-control", "parent": "backpack", "x": 53.83, "y": -119.3, "skin": true, "color": "b57dd9ff" }, + { + "name": "bag", + "parent": "body-up", + "length": 68.52, + "rotation": 79.16, + "x": -62.49, + "y": 69.37, + "skin": true, + "color": "e8afe7ff" + }, + { "name": "bag-control", "parent": "bag", "x": 84.37, "y": 53.1, "skin": true, "color": "e8afe7ff" }, + { + "name": "bag-flap", + "parent": "bag", + "length": 64.04, + "rotation": -1.51, + "x": 23, + "y": 89.94, + "skin": true, + "color": "e8afe7ff" + }, + { + "name": "scarf-back", + "parent": "neck", + "length": 115.61, + "rotation": 90.68, + "x": 28.76, + "y": 92.8, + "skin": true, + "color": "69ff53ff" + }, + { "name": "bag-strap-back", "parent": "arm-front-control", "x": -0.31, "y": 10.97, "skin": true, "color": "e8afe7ff" }, + { + "name": "bag-back-down", + "parent": "bag-control", + "rotation": -173.48, + "x": -31.08, + "y": -10.86, + "skin": true, + "color": "e8afe7ff" + }, + { "name": "bag-strap-front", "parent": "arm-front-control", "x": 2.82, "y": -11.88, "skin": true, "color": "e8afe7ff" }, + { + "name": "bag-back-front", + "parent": "bag", + "rotation": -173.48, + "x": -18.37, + "y": 34.05, + "skin": true, + "color": "e8afe7ff" + }, + { + "name": "zip-girl", + "parent": "body-up", + "length": 40.75, + "rotation": -174.98, + "x": 79.28, + "y": -23.28, + "skin": true, + "color": "75f057ff" + }, + { + "name": "zip-boy", + "parent": "neck", + "length": 33.9, + "rotation": -173.57, + "x": 31.78, + "y": -23.85, + "skin": true, + "color": "ff4cf5ff" + }, + { "name": "hair-holder-front", "parent": "body-up", "x": 100.57, "y": 80.62, "skin": true, "color": "06b8d8ff" }, + { + "name": "hair-strand-front-1", + "parent": "hair-holder-front", + "length": 155.7, + "rotation": 174.65, + "x": -6.72, + "y": -5.97, + "skin": true, + "color": "06b7d875" + }, + { + "name": "hair-strand-front-3", + "parent": "hair-holder-front", + "length": 142.3, + "rotation": 136.62, + "x": 6.14, + "y": 25.81, + "skin": true, + "color": "06b7d875" + }, + { "name": "hair-holder-back", "parent": "body-up", "x": 105.21, "y": -48.86, "skin": true, "color": "2a96c6ff" }, + { + "name": "hair-strand-back-1", + "parent": "hair-holder-back", + "length": 136.84, + "rotation": -155.81, + "x": -1.27, + "y": -10.38, + "skin": true, + "color": "06b7d875" + }, + { + "name": "hair-strand-back-2", + "parent": "hair-holder-back", + "length": 125.26, + "rotation": -121.03, + "x": -10.45, + "y": -2.72, + "skin": true, + "color": "06b7d875" + }, + { + "name": "hair-strand-back-3", + "parent": "hair-holder-back", + "length": 162.33, + "rotation": -149.61, + "x": -5.97, + "y": -7.94, + "skin": true, + "color": "06b7d875" + }, + { + "name": "hair-strand-front-2", + "parent": "hair-holder-front", + "length": 133.58, + "rotation": 163.66, + "x": -0.73, + "y": 17.97, + "skin": true, + "color": "06b7d875" + }, + { + "name": "hair-strand-front-4", + "parent": "hair-holder-front", + "length": 110.33, + "rotation": 103.65, + "x": -2.97, + "y": 25.11, + "skin": true, + "color": "06b7d875" + }, + { "name": "eye-front-pupil", "parent": "eye-front", "x": -3.44, "y": 17.51, "color": "ff2e2eff" }, + { "name": "eye-back-pupil", "parent": "eye-back", "x": -5.89, "y": 16.42, "color": "f64379ff" }, + { "name": "eyelid-skin", "parent": "eye-front", "x": 1.06, "y": 41.21, "color": "ff2e2eff" }, + { "name": "arm-back-control", "parent": "body-up", "rotation": -94.33, "x": 73.75, "y": -67.88, "color": "321c9aff" }, + { + "name": "arm-back-up", + "parent": "arm-back-control", + "length": 102.6, + "rotation": -90, + "x": 0.28, + "y": -0.01, + "color": "321c9aff" + }, + { "name": "arm-back-down", "parent": "arm-back-up", "length": 102.6, "x": 102.6, "color": "321c9aff" }, + { "name": "hand-back", "parent": "arm-back-down", "length": 30.54, "x": 97.35, "y": -2, "color": "321c9aff" }, + { "name": "end-arm-control-back", "parent": "arm-back-down", "length": 26.6, "x": 74.55, "y": 0.24, "color": "321c9aff" }, + { "name": "arm-back-up-2", "parent": "arm-back-control", "length": 33.49, "rotation": -90, "x": 0.33, "color": "321c9aff" }, + { + "name": "arm-back-up-3", + "parent": "arm-back-up-2", + "length": 33.49, + "rotation": 0.17, + "x": 166.24, + "y": -0.24, + "color": "321c9aff" + }, + { + "name": "arm-back-up-4", + "parent": "arm-back-up-3", + "length": 33.49, + "rotation": -0.88, + "x": -32.9, + "y": 0.42, + "color": "321c9aff" + }, + { + "name": "arm-back-up-5", + "parent": "arm-back-up-4", + "length": 33.49, + "rotation": 0.14, + "x": -33.3, + "y": -0.25, + "color": "321c9aff" + }, + { + "name": "arm-back-up-6", + "parent": "arm-back-up-5", + "length": 33.49, + "rotation": 0.3, + "x": -33.16, + "y": -0.37, + "color": "321c9aff" + }, + { + "name": "arm-back-up-7", + "parent": "arm-back-up-6", + "length": 33.49, + "rotation": 0.34, + "x": -33.13, + "y": -0.26, + "color": "321c9aff" + }, + { "name": "leg-control-back", "parent": "hips", "x": 41.56, "y": -0.92, "color": "8f0c5bff" }, + { + "name": "foot-back-IK", + "parent": "skeleton-control", + "rotation": -90.56, + "x": 38.54, + "y": -259.75, + "transform": "noRotationOrReflection", + "color": "d130ffff" + }, + { "name": "leg-up-back", "parent": "leg-control-back", "length": 144.38, "rotation": -92.95, "y": 0.45, "color": "8f0c5bff" }, + { "name": "leg-down-back", "parent": "leg-up-back", "length": 144.38, "rotation": 3.48, "x": 144.38, "color": "8f0c5bff" }, + { + "name": "leg-back-1", + "parent": "leg-control-back", + "length": 35.95, + "rotation": -90, + "x": 0.56, + "y": -0.12, + "color": "8f0c5bff" + }, + { + "name": "leg-back-2", + "parent": "leg-back-1", + "length": 35.95, + "rotation": -0.31, + "x": 36.23, + "y": -0.19, + "color": "8f0c5bff" + }, + { + "name": "leg-back-3", + "parent": "leg-back-2", + "length": 35.95, + "rotation": -0.01, + "x": 35.71, + "y": -0.01, + "color": "8f0c5bff" + }, + { + "name": "leg-back-4", + "parent": "leg-back-3", + "length": 35.95, + "rotation": 0.03, + "x": 36.23, + "y": 0.02, + "color": "8f0c5bff" + }, + { + "name": "leg-back-5", + "parent": "leg-back-4", + "length": 35.95, + "rotation": 0.12, + "x": 35.63, + "y": 0.08, + "color": "8f0c5bff" + }, + { + "name": "leg-back-6", + "parent": "leg-back-5", + "length": 35.95, + "rotation": 0.22, + "x": 35.64, + "y": 0.14, + "color": "8f0c5bff" + }, + { + "name": "leg-back-7", + "parent": "leg-back-6", + "length": 35.95, + "rotation": 0.2, + "x": 36.22, + "y": 0.13, + "color": "65127cff" + }, + { + "name": "leg-back-8", + "parent": "leg-back-7", + "length": 35.95, + "rotation": 0.11, + "x": 35.68, + "y": 0.07, + "color": "65127cff" + }, + { + "name": "foot-front", + "parent": "foot-front-IK", + "length": 34.32, + "rotation": 90.56, + "x": -1.86, + "y": -0.32, + "color": "d130ffff" + }, + { + "name": "foot-back", + "parent": "foot-back-IK", + "length": 34.32, + "rotation": 90.56, + "x": -2.9, + "y": -1.91, + "color": "d130ffff" + }, + { + "name": "skirt-control", + "parent": "skeleton-control", + "rotation": 90, + "x": 4.35, + "y": -26.24, + "skin": true, + "color": "8dff00ff" + }, + { "name": "skirt-control-up", "parent": "skirt-control", "x": -15.87, "y": -0.12, "skin": true, "color": "09d627ff" }, + { + "name": "skirt-rotation-back", + "parent": "body-up", + "length": 150.48, + "rotation": -119.15, + "x": 3.77, + "y": -67.52, + "skin": true, + "color": "09d627ff" + }, + { + "name": "skirt-rotation-front", + "parent": "body-up", + "length": 140.39, + "rotation": 113.07, + "x": 8.14, + "y": 30.47, + "skin": true, + "color": "09d627ff" + }, + { "name": "skirt-control-middle", "parent": "skirt-control-up", "x": -19.76, "skin": true, "color": "09d627ff" }, + { + "name": "skirt-control-back", + "parent": "skirt-rotation-back", + "rotation": 114.82, + "x": 148.43, + "y": -0.72, + "skin": true, + "color": "09d627ff" + }, + { + "name": "skirt-control-front", + "parent": "skirt-rotation-front", + "rotation": -117.4, + "x": 141.99, + "y": 2.23, + "skin": true, + "color": "09d627ff" + }, + { "name": "skirt-control-front-down", "parent": "skirt-control-front", "x": -45.51, "y": -13.62, "skin": true, "color": "09d627ff" }, + { "name": "skirt-control-back-down", "parent": "skirt-control-back", "x": -47.46, "y": 29.56, "skin": true, "color": "09d627ff" }, + { "name": "cape-red-front-inside", "parent": "body-up", "x": 32.8, "y": -12.11, "skin": true, "color": "ff539eff" }, + { + "name": "cape-front-rotator", + "parent": "arm-front-up", + "length": 47.18, + "rotation": -20.19, + "x": 4.09, + "y": -7.54, + "skin": true, + "color": "ff3eafff" + }, + { + "name": "cape-red-front-outside", + "parent": "cape-front-rotator", + "rotation": 20.19, + "x": 47.43, + "y": -0.24, + "skin": true, + "color": "ff539eff" + }, + { "name": "shouder-front-transform", "parent": "body-up", "rotation": -94.33, "x": 93.23, "y": 0.49, "color": "ffce12ff" }, + { "name": "shoulder-front", "parent": "shouder-front-transform", "x": -43.57, "y": -0.76, "color": "ffce12ff" }, + { + "name": "cape-back-rotator", + "parent": "arm-back-up", + "length": 47.3, + "rotation": 33.51, + "x": 1.09, + "y": 4.74, + "skin": true, + "color": "93006dff" + }, + { + "name": "cape-red-back-outside", + "parent": "cape-back-rotator", + "rotation": 56.49, + "x": 45.94, + "y": 0.9, + "skin": true, + "color": "93006dff" + }, + { "name": "cape-red-back-inside", "parent": "body-up", "x": 37.71, "y": -42.92, "skin": true, "color": "93006dff" }, + { "name": "shoulder-back-transform", "parent": "body-up", "rotation": -4.33, "x": 84.44, "y": -34.31, "color": "ffce12ff" }, + { "name": "shoulder-back", "parent": "shoulder-back-transform", "x": 1.09, "y": -39.44, "color": "ffce12ff" }, + { + "name": "dress-control-leg-up-back", + "parent": "skeleton-control", + "rotation": -89.47, + "x": 86.24, + "y": -100.16, + "skin": true, + "color": "ff7a45ff" + }, + { + "name": "dress-control-leg-down-back", + "parent": "skeleton-control", + "rotation": -92.95, + "x": 86.81, + "y": -134.93, + "skin": true, + "color": "ff7a45ff" + }, + { + "name": "dress-control-leg-up-front", + "parent": "skeleton-control", + "rotation": -91.9, + "x": -81.34, + "y": -100.16, + "skin": true, + "color": "ff7a45ff" + }, + { + "name": "dress-control-leg-down-front", + "parent": "skeleton-control", + "rotation": -98.06, + "x": -83.05, + "y": -132.65, + "skin": true, + "color": "ff7a45ff" + }, + { + "name": "dress-control-foot-front", + "parent": "skeleton-control", + "rotation": -98.06, + "x": -112.69, + "y": -254.06, + "skin": true, + "color": "ff7a45ff" + }, + { + "name": "dress-control-foot-back", + "parent": "skeleton-control", + "rotation": -92.95, + "x": 97.07, + "y": -251.21, + "skin": true, + "color": "ff7a45ff" + }, + { "name": "dress-control-middle", "parent": "skeleton-control", "x": -5.53, "y": -254.06, "skin": true, "color": "ff7a45ff" }, + { + "name": "sleeve-control-front", + "parent": "arm-front-up-7", + "length": 97.31, + "rotation": 90.71, + "x": 37.64, + "y": -41.32, + "skin": true, + "color": "5e0202ff" + }, + { + "name": "sleeve-control-back", + "parent": "end-arm-control-back", + "length": 97.31, + "rotation": -90, + "x": 25.63, + "y": 55.1, + "skin": true, + "color": "02045eff" + }, + { + "name": "cape-blue-up", + "parent": "body-up", + "length": 175.73, + "rotation": 177.83, + "x": 92.56, + "y": 4.87, + "skin": true, + "color": "1130ff78" + }, + { + "name": "cape-blue-down", + "parent": "cape-blue-up", + "length": 116.65, + "rotation": 0.09, + "x": 175.73, + "skin": true, + "color": "1130ff78" + }, + { "name": "cape-blue-down-middle", "parent": "cape-blue-down", "x": 168.33, "y": -1.52, "skin": true, "color": "1130ff78" }, + { "name": "cape-blue-down-front", "parent": "cape-blue-down-middle", "x": -19.01, "y": -133.73, "skin": true, "color": "1130ff78" }, + { "name": "cape-blue-down-back", "parent": "cape-blue-down-middle", "x": -10.01, "y": 121.12, "skin": true, "color": "1130ff78" }, + { "name": "cape-blue-middle-front", "parent": "cape-blue-down", "x": 41.13, "y": -101.46, "skin": true, "color": "1130ff78" }, + { "name": "cape-blue-middle-back", "parent": "cape-blue-down", "x": 33.12, "y": 96.5, "skin": true, "color": "1130ff78" }, + { + "name": "cape-blue-up-front", + "parent": "cape-front-rotator", + "rotation": 22.44, + "x": 98.31, + "y": 4.67, + "skin": true, + "color": "1130ff78" + }, + { + "name": "cape-blue-up-back", + "parent": "cape-back-rotator", + "rotation": -31.35, + "x": 69.6, + "y": -16.89, + "skin": true, + "color": "1130ff78" + }, + { + "name": "cape-blue-control", + "parent": "head", + "rotation": 2.43, + "x": 179.82, + "y": -1.71, + "skin": true, + "color": "ff11b6ff" + }, + { "name": "mouth", "parent": "features-control", "x": -0.72, "y": -41.96, "color": "258effff" } +], +"slots": [ + { "name": "sleeve-inner-back", "bone": "arm-back-down", "attachment": "sleeve-inner-back" }, + { "name": "cape-back", "bone": "body-up", "attachment": "cape-back" }, + { "name": "hand-back", "bone": "hand-back", "color": "e8d5ebff", "attachment": "hand-back-fingers" }, + { "name": "arm-back", "bone": "arm-back-up", "color": "e8d5ebff", "attachment": "arm-back" }, + { "name": "cape-up-back", "bone": "head", "attachment": "cape-up-back" }, + { "name": "leg-back", "bone": "leg-control-back", "attachment": "leg-back" }, + { "name": "backpack-up", "bone": "backpack", "attachment": "backpack-up" }, + { "name": "backpack", "bone": "backpack", "attachment": "backpack" }, + { "name": "boot-ribbon-back", "bone": "leg-back-5", "attachment": "boot-ribbon-back" }, + { "name": "leg-back-path", "bone": "leg-control-back", "attachment": "leg-back-path" }, + { "name": "hair-back", "bone": "head", "attachment": "hair-back" }, + { "name": "arm-back-path", "bone": "arm-back-control", "attachment": "arm-back-path" }, + { "name": "scarf-back", "bone": "scarf-back", "attachment": "scarf-back" }, + { "name": "backpack-pocket", "bone": "backpack", "attachment": "backpack-pocket" }, + { "name": "hair-strand-back-3", "bone": "hair-strand-back-3", "attachment": "hair-strand-back-3" }, + { "name": "hair-strand-back-2", "bone": "hair-strand-back-2", "attachment": "hair-strand-back-2" }, + { "name": "hair-strand-front-2", "bone": "hair-strand-front-2", "attachment": "hair-strand-front-2" }, + { "name": "hair-strand-front-4", "bone": "hair-strand-front-4", "attachment": "hair-strand-front-4" }, + { "name": "backpack-strap-back", "bone": "backpack", "attachment": "backpack-strap-back" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "leg-front", "bone": "leg-control-front", "attachment": "leg-front" }, + { "name": "boot-ribbon-front", "bone": "leg-front-5", "attachment": "boot-ribbon-front" }, + { "name": "hair-strand-front-3", "bone": "hair-strand-front-3", "attachment": "hair-strand-front-3" }, + { "name": "bag-strap-back", "bone": "bag", "attachment": "bag-strap-back" }, + { "name": "body", "bone": "body-down", "attachment": "body" }, + { "name": "hair-side-back", "bone": "hair-side-back", "attachment": "hair-side-back" }, + { "name": "base-head", "bone": "head", "attachment": "base-head" }, + { "name": "hair-patch", "bone": "head", "attachment": "hair-patch" }, + { "name": "body-dress", "bone": "hips", "attachment": "body-dress" }, + { "name": "collar", "bone": "body-up", "attachment": "collar" }, + { "name": "mouth", "bone": "mouth", "attachment": "mouth-smile" }, + { "name": "ear", "bone": "head", "attachment": "ear" }, + { "name": "eye-back-white", "bone": "eye-back", "attachment": "eye-back-white" }, + { "name": "eye-back-iris", "bone": "eye-back-iris", "attachment": "eye-back-iris" }, + { "name": "eye-back-up-eyelid-back", "bone": "eye-back-up-eyelid", "attachment": "eye-back-up-eyelid-back" }, + { "name": "underskirt", "bone": "body-up", "attachment": "underskirt" }, + { "name": "skirt", "bone": "body-up", "attachment": "skirt" }, + { "name": "bag-base", "bone": "bag", "attachment": "bag-base" }, + { "name": "eye-back-pupil", "bone": "eye-back-pupil", "attachment": "eye-back-pupil" }, + { "name": "bag-top", "bone": "bag", "attachment": "bag-top" }, + { "name": "eye-front-white", "bone": "eye-front", "attachment": "eye-front-white" }, + { "name": "eye-front-iris", "bone": "eye-front-iris", "attachment": "eye-front-iris" }, + { "name": "eye-front-pupil", "bone": "eye-front-pupil", "attachment": "eye-front-pupil" }, + { "name": "backpack-strap-front", "bone": "backpack", "attachment": "backpack-strap-front" }, + { "name": "bag-strap-front", "bone": "bag", "attachment": "bag-strap-front" }, + { "name": "body-up", "bone": "body-up", "attachment": "body-up" }, + { "name": "hand-front", "bone": "hand-front", "attachment": "hand-front-fingers" }, + { "name": "ribbon-body", "bone": "body-up", "attachment": "ribbon-body" }, + { "name": "arm-front", "bone": "arm-front-control", "attachment": "arm-front" }, + { "name": "sleeve-inner-front", "bone": "arm-front-control", "attachment": "sleeve-inner-front" }, + { "name": "sleeve-front", "bone": "arm-front-up", "attachment": "sleeve-front" }, + { "name": "cape-red-down", "bone": "body-up", "attachment": "cape-red-down" }, + { "name": "cape-red-up", "bone": "body-up", "attachment": "cape-red-up" }, + { "name": "hair-strand-back-1", "bone": "hair-strand-back-1", "attachment": "hair-strand-back-1" }, + { "name": "zip-girl", "bone": "zip-girl", "attachment": "zip-girl" }, + { "name": "hair-strand-front-1", "bone": "hair-strand-front-1", "attachment": "hair-strand-front-1" }, + { "name": "ribbon-shoulder", "bone": "body-up", "attachment": "ribbon-shoulder" }, + { "name": "zip-boy", "bone": "zip-boy", "attachment": "zip-boy" }, + { "name": "scarf", "bone": "neck", "attachment": "scarf" }, + { "name": "eye-front-up-eyelid-back", "bone": "eye-front-up-eyelid", "attachment": "eye-front-up-eyelid-back" }, + { "name": "hair-side-front", "bone": "head", "attachment": "hair-side-front" }, + { "name": "hair-side-transparent", "bone": "hair-side-front", "color": "ffffff81", "attachment": "hair-side" }, + { "name": "hair-side", "bone": "hair-side-front", "attachment": "hair-side" }, + { "name": "hair-bangs", "bone": "hair-bangs-front", "attachment": "hair-bangs" }, + { "name": "eye-back-eyebrow", "bone": "eye-back-eyebrow", "attachment": "eye-back-eyebrow" }, + { "name": "eye-front-eyebrow", "bone": "eye-front-eyebrow", "attachment": "eye-front-eyebrow" }, + { "name": "eye-back-low-eyelid", "bone": "eye-back-low-eyelid", "attachment": "eye-back-low-eyelid" }, + { "name": "nose", "bone": "head-control", "attachment": "nose" }, + { "name": "eye-back-up-eyelid", "bone": "eye-back-up-eyelid", "attachment": "eye-back-up-eyelid" }, + { "name": "eye-front-low-eyelid", "bone": "eye-front-low-eyelid", "attachment": "eye-front-low-eyelid" }, + { "name": "eye-front-up-eyelid", "bone": "eye-front-up-eyelid", "attachment": "eye-front-up-eyelid" }, + { "name": "hair-bangs-transparent", "bone": "hair-bangs-front", "color": "ffffff81", "attachment": "hair-bangs-transparent" }, + { "name": "hat", "bone": "hat-base", "attachment": "hat" }, + { "name": "pompom", "bone": "pompom-control", "attachment": "pompom" }, + { "name": "arm-front-path", "bone": "arm-front-control", "attachment": "arm-front-path" }, + { "name": "leg-front-path", "bone": "leg-control-front", "attachment": "leg-front-path" }, + { "name": "cape-blue-shoulder-back", "bone": "body-up", "attachment": "cape-blue-shoulder-back" }, + { "name": "cape-blue-shoulder-front", "bone": "body-up", "attachment": "cape-blue-shoulder-front" }, + { "name": "cape-blue-up-front", "bone": "head", "attachment": "cape-blue-up-front" }, + { "name": "cape-ribbon", "bone": "body-up", "attachment": "cape-ribbon" } +], +"ik": [ + { + "name": "foot-back", + "order": 1, + "bones": [ "leg-up-back", "leg-down-back" ], + "target": "foot-back-IK", + "bendPositive": false + }, + { + "name": "foot-front", + "bones": [ "leg-up", "leg-down" ], + "target": "foot-front-IK", + "bendPositive": false + } +], +"transform": [ + { + "name": "eye-back-pupil", + "order": 12, + "bones": [ "eye-back-iris" ], + "target": "eye-back-pupil", + "mixRotate": 0, + "mixX": 0.4, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "eye-front-pupil", + "order": 11, + "bones": [ "eye-front-iris" ], + "target": "eye-front-pupil", + "mixRotate": 0, + "mixX": 0.4, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "eye-transform", + "order": 7, + "bones": [ "features-control" ], + "target": "head-control", + "mixRotate": 0, + "mixX": 0.2, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "hair-side-back", + "order": 9, + "bones": [ "hair-side-back" ], + "target": "head-back-control", + "rotation": -62.21, + "x": 132.47, + "y": 46.72, + "mixRotate": 0, + "mixX": 0.05, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "hair-side-front-control", + "order": 8, + "bones": [ "hair-side-front" ], + "target": "head-control", + "rotation": -80.89, + "x": -102.78, + "y": 27.17, + "mixRotate": 0, + "mixX": 0.15, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "hat-control", + "order": 10, + "skin": true, + "bones": [ "hat-control" ], + "target": "head-control", + "rotation": 95.63, + "x": -78.91, + "y": 123.01, + "shearY": -36, + "mixRotate": 0, + "mixX": 0.6, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "head-control", + "order": 6, + "bones": [ "head-back-control" ], + "target": "head-control", + "x": -88.92, + "mixRotate": 0, + "mixX": -1, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-down-back", + "order": 18, + "skin": true, + "bones": [ "dress-control-foot-back" ], + "target": "leg-down-back", + "x": 132.85, + "y": 58.02, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-down-back-up", + "order": 19, + "skin": true, + "bones": [ "dress-control-leg-down-back" ], + "target": "leg-down-back", + "x": 17.25, + "y": 41.79, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-down-down", + "order": 17, + "skin": true, + "bones": [ "dress-control-foot-front" ], + "target": "leg-down", + "x": 147.87, + "y": -60.85, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-down-front", + "order": 16, + "skin": true, + "bones": [ "dress-control-leg-down-front" ], + "target": "leg-down", + "x": 23.51, + "y": -48.52, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-up", + "order": 15, + "skin": true, + "bones": [ "dress-control-leg-up-front" ], + "target": "leg-up", + "x": 130.03, + "y": -50.13, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "leg-up-back", + "order": 14, + "skin": true, + "bones": [ "dress-control-leg-up-back" ], + "target": "leg-up-back", + "x": 129.36, + "y": 40.42, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "shoulder-back", + "order": 22, + "bones": [ "shoulder-back-transform" ], + "target": "arm-back-up", + "rotation": 180, + "x": -14.41, + "y": -46.12, + "mixRotate": 0.18, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "shoulder-front", + "order": 21, + "bones": [ "shouder-front-transform" ], + "target": "arm-front-up", + "rotation": 90, + "x": -24.78, + "y": 29.54, + "mixRotate": 0.186, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "skirt-rotation-back", + "order": 20, + "skin": true, + "bones": [ "skirt-control-back" ], + "target": "skirt-rotation-back", + "rotation": 114.82, + "x": 148.43, + "y": -0.72, + "shearY": -36, + "mixX": 0.7, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "skirt-rotation-front", + "order": 13, + "skin": true, + "bones": [ "skirt-control-front" ], + "target": "skirt-rotation-front", + "rotation": 242.6, + "x": 141.99, + "y": 2.23, + "shearY": -36, + "mixX": 0.7, + "mixScaleX": 0, + "mixShearY": 0 + } +], +"path": [ + { + "name": "arm-back", + "order": 4, + "bones": [ "arm-back-up-2", "arm-back-up-3", "arm-back-up-4", "arm-back-up-5", "arm-back-up-6", "arm-back-up-7" ], + "target": "arm-back-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.1667 + }, + { + "name": "arm-front", + "order": 2, + "bones": [ "arm-front-up-2", "arm-front-up-6", "arm-front-up-5", "arm-front-up-4", "arm-front-up-3", "arm-front-up-7" ], + "target": "arm-front-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.1667 + }, + { + "name": "leg-back", + "order": 5, + "bones": [ "leg-back-8", "leg-back-7", "leg-back-6", "leg-back-5", "leg-back-4", "leg-back-3", "leg-back-2", "leg-back-1" ], + "target": "leg-back-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + }, + { + "name": "leg-front", + "order": 3, + "bones": [ "leg-front-1", "leg-front-2", "leg-front-3", "leg-front-4", "leg-front-5", "leg-front-6", "leg-front-7", "leg-front-8" ], + "target": "leg-front-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + } +], +"skins": [ + { + "name": "default", + "attachments": { + "arm-back-path": { + "arm-back-path": { + "type": "path", + "lengths": [ 199.98, 399.97 ], + "vertexCount": 6, + "vertices": [ 1, 80, -60.01, -0.11, 1, 1, 80, -0.01, 0.05, 1, 1, 80, 101.83, 0.31, 1, 1, 80, 103.15, 0.64, 1, 1, 81, 97.37, -0.61, 1, 1, 80, 259.96, -1.39, 1 ] + } + }, + "arm-front-path": { + "arm-front-path": { + "type": "path", + "lengths": [ 199.98, 399.97 ], + "vertexCount": 6, + "vertices": [ 1, 8, -60.01, -0.11, 1, 1, 8, -0.01, 0.05, 1, 1, 8, 101.83, 0.31, 1, 1, 8, 103.15, 0.64, 1, 1, 9, 97.37, -0.61, 1, 1, 8, 259.96, -1.39, 1 ] + } + }, + "leg-back-path": { + "leg-back-path": { + "type": "path", + "lengths": [ 286.77, 574.08 ], + "vertexCount": 6, + "vertices": [ 1, 92, -85.48, 1, 1, 1, 92, 0.57, 0.56, 1, 1, 92, 144.45, -0.19, 1, 1, 92, 145.16, -0.52, 1, 1, 93, 143, 0.56, 1, 1, 92, 373.43, 1.21, 1 ] + } + }, + "leg-front-path": { + "leg-front-path": { + "type": "path", + "lengths": [ 286.67, 574.82 ], + "vertexCount": 6, + "vertices": [ 1, 19, -85.48, 1, 1, 1, 19, 0.57, 0.56, 1, 1, 19, 144.45, -0.19, 1, 1, 19, 145.16, -0.52, 1, 1, 20, 143, 0.56, 1, 1, 19, 373.43, 1.21, 1 ] + } + } + } + }, + { + "name": "skin-base", + "attachments": { + "arm-back": { + "arm-back": { + "name": "girl-spring-dress/arm-front", + "type": "mesh", + "uvs": [ 1, 1, 0.51047, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 0.53, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909, 0.52825, 0.08961, 0.52645, 0.18177, 0.52476, 0.26801, 0.52291, 0.36314, 0.52111, 0.45529, 0.51928, 0.54893, 0.51759, 0.63514, 0.51585, 0.72434, 0.5139, 0.82396, 0.51219, 0.91165 ], + "triangles": [ 10, 11, 28, 28, 27, 18, 29, 10, 28, 9, 10, 29, 28, 18, 19, 29, 28, 19, 29, 19, 20, 29, 30, 9, 30, 8, 9, 30, 29, 20, 30, 20, 21, 30, 31, 8, 32, 22, 23, 6, 7, 32, 32, 31, 22, 32, 7, 31, 31, 21, 22, 31, 7, 8, 33, 6, 32, 31, 30, 21, 5, 6, 33, 34, 4, 5, 33, 23, 24, 33, 34, 5, 34, 33, 24, 33, 32, 23, 34, 24, 25, 34, 35, 4, 35, 3, 4, 35, 34, 25, 1, 2, 3, 35, 1, 3, 35, 25, 0, 1, 35, 0, 26, 13, 14, 12, 13, 26, 14, 15, 16, 26, 14, 16, 27, 12, 26, 11, 12, 27, 26, 16, 17, 27, 26, 17, 28, 11, 27, 27, 17, 18 ], + "vertices": [ 1, 89, 35.41, 16.56, 1, 1, 89, 35.61, -0.08, 1, 1, 89, 35.83, -17.44, 1, 2, 89, 15.82, -17.69, 0.97415, 88, 49.68, -17.72, 0.02585, 2, 89, -4.19, -17.94, 0.30335, 88, 29.15, -17.93, 0.69665, 3, 89, -24.19, -18.19, 3.5E-4, 88, 8.61, -18.13, 0.83036, 87, 41.9, -18.17, 0.16929, 2, 88, -11.93, -18.33, 0.24, 87, 21.61, -18.27, 0.76, 2, 87, 1.31, -18.36, 0.8, 86, 34.7, -18.37, 0.2, 3, 87, -18.99, -18.46, 0.01161, 86, 14.31, -18.35, 0.93999, 85, 47.78, -18.38, 0.0484, 2, 86, -6.06, -18.32, 0.22079, 85, 27.38, -18.31, 0.77921, 2, 84, 40.35, -18.25, 0.20487, 85, 6.98, -18.25, 0.79513, 2, 84, 20.32, -18.19, 0.9496, 85, -13.42, -18.19, 0.0504, 1, 84, 0.28, -18.13, 1, 1, 84, -19.75, -18.07, 1, 1, 84, -19.7, -0.05, 1, 1, 84, -19.65, 15.93, 1, 1, 84, 0.38, 15.87, 1, 2, 84, 20.42, 15.81, 0.9733, 85, -13.31, 15.81, 0.0267, 2, 84, 40.45, 15.75, 0.16827, 85, 7.09, 15.75, 0.83173, 2, 86, -6.02, 15.68, 0.16665, 85, 27.49, 15.69, 0.83335, 3, 87, -19.15, 15.54, 0.00166, 86, 14.35, 15.65, 0.96514, 85, 47.89, 15.62, 0.0332, 2, 87, 1.15, 15.63, 0.5617, 86, 34.74, 15.63, 0.4383, 2, 88, -12.27, 15.67, 0.04304, 87, 21.45, 15.73, 0.95696, 2, 88, 8.27, 15.87, 0.86585, 87, 41.74, 15.83, 0.13415, 2, 89, -4.6, 16.06, 0.21057, 88, 28.8, 16.07, 0.78943, 2, 89, 15.4, 16.31, 0.97298, 88, 49.34, 16.27, 0.02702, 1, 84, 0.05, -0.17, 1, 1, 84, 20.36, -0.29, 1, 2, 84, 39.37, -0.4, 0.00128, 85, 5.99, -0.4, 0.99872, 1, 85, 27.33, -0.53, 1, 1, 86, 14.5, -0.63, 1, 2, 87, 2, -0.71, 0.95682, 86, 35.5, -0.72, 0.04318, 2, 88, -12.38, -0.74, 3.4E-4, 87, 21.25, -0.67, 0.99966, 2, 88, 7.77, -0.6, 0.99759, 87, 41.17, -0.64, 0.00241, 1, 88, 30.28, -0.44, 1, 1, 89, 16.17, -0.27, 1 ], + "hull": 26, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 0, 26, 28, 28, 30, 0, 2, 2, 4, 52, 28, 24, 52, 54, 52, 22, 54, 56, 54, 20, 56, 58, 56, 18, 58, 60, 58, 16, 60, 62, 60, 14, 62, 64, 62, 12, 64, 66, 64, 10, 66, 68, 66, 8, 68, 2, 70, 70, 68, 6, 70 ], + "width": 34, + "height": 222 + } + }, + "arm-front": { + "arm-front": { + "name": "girl-spring-dress/arm-front", + "type": "mesh", + "uvs": [ 1, 1, 0.51047, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 0.53, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909, 0.52825, 0.08961, 0.52645, 0.18177, 0.52476, 0.26801, 0.52291, 0.36314, 0.52111, 0.45529, 0.51928, 0.54893, 0.51759, 0.63514, 0.51585, 0.72434, 0.5139, 0.82396, 0.51219, 0.91165 ], + "triangles": [ 35, 3, 4, 34, 24, 25, 34, 35, 4, 35, 34, 25, 1, 2, 3, 35, 1, 3, 35, 25, 0, 1, 35, 0, 5, 6, 33, 34, 4, 5, 33, 23, 24, 33, 34, 5, 34, 33, 24, 33, 32, 23, 32, 22, 23, 6, 7, 32, 32, 31, 22, 32, 7, 31, 31, 21, 22, 31, 30, 21, 31, 7, 8, 33, 6, 32, 29, 19, 20, 29, 30, 9, 30, 8, 9, 30, 29, 20, 30, 20, 21, 30, 31, 8, 29, 10, 28, 9, 10, 29, 28, 18, 19, 29, 28, 19, 10, 11, 28, 26, 13, 14, 12, 13, 26, 14, 15, 16, 26, 14, 16, 27, 12, 26, 11, 12, 27, 26, 16, 17, 27, 26, 17, 28, 11, 27, 27, 17, 18, 28, 27, 18 ], + "vertices": [ 1, 16, 38.32, 16.3, 1, 1, 16, 38.52, -0.34, 1, 1, 16, 38.73, -17.69, 1, 2, 12, 52.67, -17.99, 0.00808, 16, 18.72, -17.94, 0.99192, 2, 12, 32.13, -18.19, 0.55013, 16, -1.29, -18.19, 0.44987, 3, 13, 44.84, -18.45, 0.17, 12, 11.58, -18.39, 0.82609, 16, -21.3, -18.44, 0.00391, 3, 14, 58.02, -18.69, 0.00461, 13, 24.54, -18.55, 0.51, 12, -8.96, -18.59, 0.48539, 2, 14, 37.65, -18.67, 0.24, 13, 4.25, -18.64, 0.76, 3, 15, 50.74, -18.68, 0.01218, 14, 17.27, -18.64, 0.69782, 13, -16.04, -18.74, 0.29, 2, 15, 30.34, -18.61, 0.58, 14, -3.11, -18.62, 0.42, 3, 11, 43.26, -18.55, 0.66266, 15, 9.94, -18.55, 0.32, 14, -23.49, -18.6, 0.01734, 2, 11, 23.22, -18.49, 0.87756, 15, -10.46, -18.49, 0.12244, 1, 11, 3.19, -18.43, 1, 1, 11, -16.84, -18.37, 1, 1, 11, -16.79, -0.35, 1, 1, 11, -16.74, 15.63, 1, 1, 11, 3.29, 15.57, 1, 2, 11, 23.32, 15.51, 0.91061, 15, -10.35, 15.51, 0.08939, 2, 11, 43.36, 15.45, 0.68, 15, 10.05, 15.45, 0.32, 2, 15, 30.45, 15.39, 0.58, 14, -3.07, 15.38, 0.42, 3, 15, 50.84, 15.32, 0.00487, 14, 17.31, 15.36, 0.70513, 13, -16.21, 15.26, 0.29, 2, 14, 37.69, 15.33, 0.24, 13, 4.09, 15.36, 0.76, 2, 13, 24.38, 15.45, 0.51, 12, -9.3, 15.4, 0.49, 2, 13, 44.67, 15.55, 0.17, 12, 11.24, 15.61, 0.83, 2, 12, 31.78, 15.81, 0.59679, 16, -1.7, 15.8, 0.40321, 2, 12, 52.32, 16.01, 0.00481, 16, 18.31, 16.05, 0.99519, 1, 11, 2.96, -0.47, 1, 1, 11, 23.27, -0.59, 1, 1, 15, 8.94, -0.71, 1, 2, 15, 30.28, -0.83, 0.58, 14, -3.2, -0.84, 0.42, 2, 14, 17.46, -0.93, 0.71, 13, -15.96, -1.02, 0.29, 2, 14, 38.45, -1.01, 0.24, 13, 4.94, -0.98, 0.76, 1, 13, 24.19, -0.95, 1, 2, 13, 44.1, -0.92, 0.17, 12, 10.74, -0.86, 0.83, 2, 12, 33.25, -0.7, 0.55299, 16, -0.23, -0.71, 0.44701, 1, 16, 19.07, -0.52, 1 ], + "hull": 26, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 0, 26, 28, 28, 30, 0, 2, 2, 4, 52, 28, 24, 52, 54, 52, 22, 54, 56, 54, 20, 56, 58, 56, 18, 58, 60, 58, 16, 60, 62, 60, 14, 62, 64, 62, 12, 64, 66, 64, 10, 66, 68, 66, 8, 68, 2, 70, 70, 68, 6, 70 ], + "width": 34, + "height": 222 + } + }, + "base-head": { + "base-head": { "x": 74.74, "y": -10.09, "rotation": -87.57, "width": 189, "height": 145 } + }, + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-spring-dress/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "hand-back": { + "hand-back-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-spring-dress/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "hand-front": { + "hand-front-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-spring-dress/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 }, + "mouth-smile": { "name": "girl/mouth-smile", "path": "girl-spring-dress/mouth-smile", "x": -4.12, "y": 2.56, "width": 57, "height": 13 } + }, + "neck": { + "neck": { "name": "girl-spring-dress/neck", "x": 27.19, "y": -3.15, "rotation": -91.34, "width": 39, "height": 63 } + } + } + }, + { + "name": "accessories/backpack", + "bones": [ "backpack-control", "backpack" ], + "attachments": { + "backpack": { + "backpack": { + "name": "boy/backpack", + "type": "mesh", + "uvs": [ 0.56777, 0.99667, 1, 0.92022, 0.98943, 0.32667, 0.91222, 0.0979, 0.87918, 0, 0.78253, 0, 0.24991, 0.03363, 0.11246, 0.09517, 0.03085, 0.20163, 0.02226, 0.32638, 0.04803, 0.66073, 0, 0.74057, 0, 0.8803, 0.09742, 0.96347, 0.18118, 0.96513, 0.33582, 1, 0.54199, 0.39791, 0.50334, 0.16504, 0.57206, 0.93685, 0.13608, 0.44449, 0.52372, 0.28781, 0.0781, 0.37629, 0.11031, 0.6391, 0.39913, 0.04858, 0.7798, 0.01708 ], + "triangles": [ 24, 23, 5, 5, 23, 6, 17, 23, 24, 17, 24, 3, 17, 8, 7, 6, 17, 7, 17, 6, 23, 20, 17, 3, 20, 9, 8, 20, 8, 17, 21, 9, 20, 16, 20, 2, 19, 21, 20, 16, 19, 20, 18, 16, 1, 22, 19, 16, 18, 22, 16, 18, 14, 22, 18, 15, 14, 0, 18, 1, 0, 15, 18, 24, 5, 4, 24, 4, 3, 20, 3, 2, 22, 21, 19, 10, 9, 21, 10, 21, 22, 22, 12, 11, 16, 2, 1, 10, 22, 11, 22, 14, 12, 14, 13, 12 ], + "vertices": [ 2, 56, 176.31, 109.14, 0.42, 55, 230.15, -10.16, 0.58, 1, 56, 161.95, 213.46, 1, 2, 56, -19.06, 228.58, 0.82644, 55, 34.78, 109.29, 0.17356, 2, 56, -90.51, 217.16, 0.76, 55, -36.67, 97.87, 0.24, 2, 56, -121.08, 212.27, 0.80924, 55, -67.25, 92.98, 0.19076, 2, 56, -123.31, 189.48, 0.76, 55, -69.47, 70.19, 0.24, 2, 56, -125.31, 62.84, 0.27, 55, -71.47, -56.45, 0.73, 2, 56, -109.72, 28.59, 0.6115, 55, -55.89, -90.7, 0.3885, 2, 56, -79.18, 6.18, 0.7, 55, -25.34, -113.11, 0.3, 2, 56, -41.38, 0.45, 0.69983, 55, 12.45, -118.84, 0.30017, 2, 56, 61.04, -3.39, 0.7, 55, 114.87, -122.68, 0.3, 2, 56, 84.25, -17.09, 0.7, 55, 138.09, -136.38, 0.3, 2, 56, 126.81, -21.24, 0.7, 55, 180.64, -140.53, 0.3, 2, 56, 154.38, -0.73, 0.7, 55, 208.21, -120.02, 0.3, 2, 56, 156.81, 18.98, 0.7, 55, 210.64, -100.31, 0.3, 2, 56, 170.98, 54.42, 0.63, 55, 224.82, -64.87, 0.37, 1, 55, 46.19, 1.64, 1, 1, 55, -25.63, -0.57, 1, 1, 55, 211.91, -7.36, 1, 2, 56, -2.79, 23.8, 0.64851, 55, 51.04, -95.49, 0.35149, 1, 55, 12.23, 0.59, 1, 2, 56, -24.9, 12.14, 0.7, 55, 28.94, -107.15, 0.3, 2, 56, 55.9, 11.94, 0.7, 55, 109.74, -107.35, 0.3, 1, 55, -63.49, -21.7, 1, 2, 56, -118.16, 188.33, 0.7, 55, -64.33, 69.03, 0.3 ], + "hull": 16, + "edges": [ 0, 2, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 34, 6, 4, 6, 32, 4, 2, 4, 36, 28, 36, 2, 38, 32, 16, 34, 32, 40, 40, 34, 18, 40, 42, 44, 46, 48, 6, 8 ], + "width": 237, + "height": 306 + } + }, + "backpack-pocket": { + "backpack-pocket": { + "name": "boy/backpack-pocket", + "type": "mesh", + "uvs": [ 0.86114, 0.35068, 1, 0.88458, 0.68875, 1, 0.18636, 1, 0, 0.70482, 0.0163, 0.4457, 0.09191, 0.41902, 0, 0.17629, 0.14203, 0, 0.57054, 0, 0.74293, 0.14141, 0.55084, 0.66994, 0.52128, 0.39897, 0.41292, 0.24068, 0.4549, 0.43438 ], + "triangles": [ 3, 11, 2, 2, 11, 1, 3, 4, 11, 14, 4, 5, 4, 14, 11, 11, 0, 1, 11, 14, 0, 5, 6, 14, 14, 12, 0, 14, 6, 12, 6, 13, 12, 6, 7, 13, 12, 10, 0, 12, 13, 10, 7, 8, 13, 13, 9, 10, 13, 8, 9 ], + "vertices": [ 2, 55, 125.55, -28.25, 0.86973, 56, 71.72, 91.05, 0.13027, 2, 55, 191.82, -25.36, 0.79774, 56, 137.99, 93.94, 0.20226, 2, 55, 203.92, -47.5, 0.88, 56, 150.09, 71.8, 0.12, 2, 55, 200.66, -81, 0.65, 56, 146.83, 38.3, 0.35, 2, 55, 163.31, -89.9, 0.65, 56, 109.48, 29.4, 0.35, 2, 55, 131.7, -85.72, 0.65, 56, 77.87, 33.58, 0.35, 2, 55, 128.92, -80.36, 0.65, 56, 75.09, 38.94, 0.35, 2, 55, 98.61, -83.6, 0.69, 56, 44.78, 35.7, 0.31, 2, 55, 77.95, -72.02, 0.65, 56, 24.12, 47.28, 0.35, 2, 55, 80.74, -43.45, 0.81, 56, 26.91, 75.85, 0.19, 2, 55, 99.17, -33.64, 0.83791, 56, 45.34, 85.66, 0.16209, 2, 55, 162.62, -52.75, 0.88, 56, 108.79, 66.55, 0.12, 2, 55, 129.26, -51.49, 0.83, 56, 75.43, 67.81, 0.17, 2, 55, 109.18, -56.83, 0.83, 56, 55.35, 62.47, 0.17, 2, 55, 133.16, -56.34, 0.88, 56, 79.33, 62.96, 0.12 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 24, 12, 28, 10, 28, 0 ], + "width": 67, + "height": 123 + } + }, + "backpack-strap-back": { + "backpack-strap-back": { + "name": "boy/backpack-strap-front", + "type": "mesh", + "uvs": [ 0.15746, 0.22195, 0.30944, 0.21252, 0.41799, 0.2408, 0.49615, 0.30303, 0.52654, 0.38223, 0.47878, 0.49349, 0.31812, 0.63303, 0, 0.81218, 0, 1, 0.16615, 1, 0.74365, 0.70846, 0.91733, 0.54818, 1, 0.40675, 1, 0.25401, 0.86523, 0.12201, 0.61338, 0.02395, 0.32246, 0, 0.05759, 0.02018, 0.04457, 0.17292 ], + "triangles": [ 2, 1, 16, 10, 9, 6, 6, 9, 7, 15, 2, 16, 16, 0, 17, 0, 18, 17, 16, 1, 0, 9, 8, 7, 3, 2, 15, 4, 13, 12, 3, 14, 13, 3, 15, 14, 4, 3, 13, 5, 4, 11, 11, 4, 12, 10, 5, 11, 10, 6, 5 ], + "vertices": [ 2, 55, 44.79, 75.8, 0.174, 56, -9.04, 195.1, 0.826, 2, 55, 49.06, 136.63, 0.56071, 56, -4.77, 255.93, 0.43929, 2, 55, 57.59, 153.08, 0.37, 79, -3.48, -14.15, 0.63, 1, 79, 4.79, -23.1, 1, 1, 79, 7.1, -36.96, 1, 2, 55, 100.34, 155.9, 0.19, 79, 3.47, -56.43, 0.81, 3, 55, 128.1, 112.78, 0.27, 79, -36.75, -88.24, 0.46366, 56, 74.27, 232.08, 0.26634, 2, 55, 144.33, 78.25, 0.1, 56, 90.51, 197.55, 0.9, 2, 55, 177.04, 75.06, 0.1, 56, 123.22, 194.36, 0.9, 2, 55, 178.27, 87.63, 0.1, 56, 124.44, 206.93, 0.9, 3, 55, 151.86, 136.31, 0.27, 79, -11.02, -109.61, 0.48185, 56, 98.04, 255.61, 0.24815, 2, 55, 113.1, 188.14, 0.15, 79, 36.8, -66, 0.85, 2, 55, 89.07, 196.79, 0.04, 79, 43.08, -41.25, 0.96, 1, 79, 43.08, -14.52, 1, 1, 79, 32.84, 8.58, 1, 3, 55, 18.46, 162.82, 0.5, 79, 2.42, 25.74, 0.00271, 56, -35.37, 282.12, 0.49729, 2, 55, 7.35, 92.05, 0.174, 56, -46.48, 211.35, 0.826, 2, 55, 8.91, 71.67, 0.174, 56, -44.92, 190.97, 0.826, 2, 55, 35.42, 68.1, 0.174, 56, -18.41, 187.39, 0.826 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 0, 36, 6, 26, 10, 22 ], + "width": 76, + "height": 175 + } + }, + "backpack-strap-front": { + "backpack-strap-front": { + "name": "boy/backpack-strap-front", + "type": "mesh", + "uvs": [ 0.15746, 0.22195, 0.30944, 0.21252, 0.41799, 0.2408, 0.49615, 0.30303, 0.52654, 0.38223, 0.47878, 0.49349, 0.31812, 0.63303, 0, 0.81218, 0, 1, 0.16615, 1, 0.74365, 0.70846, 0.91733, 0.54818, 1, 0.40675, 1, 0.25401, 0.86523, 0.12201, 0.61338, 0.02395, 0.32246, 0, 0.05759, 0.02018, 0.04457, 0.17292 ], + "triangles": [ 10, 6, 5, 10, 5, 11, 5, 4, 11, 11, 4, 12, 4, 13, 12, 4, 3, 13, 3, 14, 13, 3, 15, 14, 3, 2, 15, 15, 2, 16, 10, 9, 6, 9, 8, 7, 16, 1, 0, 0, 18, 17, 16, 0, 17, 6, 9, 7, 2, 1, 16 ], + "vertices": [ 1, 55, 36.1, 23.68, 1, 2, 55, 35.58, 35.33, 0.91, 7, -7.77, -3.67, 0.09, 2, 55, 41.31, 43.06, 0.37, 7, 0.48, -8.62, 0.63, 1, 7, 6.42, -19.51, 1, 2, 55, 66.74, 48.87, 0.04, 7, 8.73, -33.37, 0.96, 2, 55, 85.77, 43.37, 0.19, 7, 5.1, -52.84, 0.81, 2, 55, 108.89, 28.85, 0.48, 7, -7.11, -77.26, 0.52, 1, 55, 137.75, 1.75, 1, 1, 55, 170.46, -1.44, 1, 1, 55, 171.69, 11.13, 1, 2, 55, 125.16, 59.76, 0.42, 7, 25.23, -90.46, 0.58, 2, 55, 98.53, 75.62, 0.15, 7, 38.43, -62.41, 0.85, 2, 55, 74.5, 84.27, 0.04, 7, 44.71, -37.66, 0.96, 1, 7, 44.71, -10.93, 1, 1, 7, 34.47, 12.17, 1, 2, 55, 4.98, 61.52, 0.09, 7, 15.33, 29.33, 0.91, 2, 55, -1.34, 39.92, 0.96, 7, -6.78, 33.52, 0.04, 1, 55, 0.22, 19.55, 1, 1, 55, 26.73, 15.97, 1 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 0, 36, 6, 26, 10, 22 ], + "width": 76, + "height": 175 + } + }, + "backpack-up": { + "backpack-up": { + "name": "boy/backpack-up", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 56, -112.01, 144.15, 0.96, 55, -137.28, 27.99, 0.04, 2, 56, -103.52, 189.83, 0.81, 55, -128.79, 73.67, 0.19, 2, 56, -49.76, 82.9, 0.17, 55, -75.03, -33.27, 0.83, 2, 56, -74.02, 32.48, 0.58, 55, -99.3, -83.68, 0.42 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 42, + "height": 139 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "accessories/bag", + "bones": [ "bag-back-front", "bag-flap", "bag-strap-front", "bag-back-down", "bag-strap-back", "bag", "bag-control" ], + "attachments": { + "bag-base": { + "bag-base": { + "name": "girl/bag-base", + "type": "mesh", + "uvs": [ 0.83893, 0.8993, 0.6302, 1, 0.16529, 0.94665, 0.01981, 0.72002, 0, 0.45956, 0.05144, 0.21601, 0.15581, 0, 0.8073, 0.02997, 0.95278, 0.23969, 1, 0.45956, 1, 0.68619, 0.61122, 0.80458, 0.56694, 0.49338, 0.67131, 0.22616 ], + "triangles": [ 13, 5, 6, 13, 6, 7, 2, 11, 1, 8, 9, 13, 10, 11, 9, 12, 5, 13, 12, 9, 11, 3, 12, 11, 13, 9, 12, 0, 11, 10, 1, 11, 0, 13, 7, 8, 4, 5, 12, 3, 4, 12, 2, 3, 11 ], + "vertices": [ 2, 57, -24.02, 97.1, 0.4359, 58, -108.39, 43.99, 0.5641, 2, 57, 0.18, 111.52, 0.48095, 58, -84.2, 58.41, 0.51905, 2, 57, 57.69, 111.91, 0.16986, 58, -26.69, 58.81, 0.83014, 2, 57, 78.42, 88.05, 0.54, 58, -5.95, 34.95, 0.46, 2, 57, 84.25, 58.57, 0.53182, 58, -0.13, 5.47, 0.46818, 2, 57, 81.14, 30.02, 0.39, 58, -3.24, -23.08, 0.61, 1, 58, -13.17, -49.22, 1, 2, 57, -8.8, -1.79, 0.37, 58, -93.18, -54.89, 0.63, 2, 57, -29.32, 20.14, 0.51747, 58, -113.69, -32.96, 0.48253, 2, 57, -37.96, 44.6, 0.46, 58, -122.33, -8.5, 0.54, 2, 57, -40.92, 70.5, 0.46, 58, -125.29, 17.39, 0.54, 2, 57, 5.05, 89.45, 0.96, 58, -79.33, 36.35, 0.04, 1, 57, 14.52, 54.52, 1, 2, 57, 5.26, 22.53, 0.92, 58, -79.12, -30.58, 0.08 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 24, 26, 22, 6 ], + "width": 123, + "height": 115 + } + }, + "bag-strap-back": { + "bag-strap-back": { + "name": "girl/bag-strap-front", + "type": "mesh", + "uvs": [ 0.10329, 0.09701, 0.09625, 0.16933, 0.0882, 0.24002, 0.07824, 0.30385, 0.06981, 0.37343, 0.06125, 0.44416, 0.05318, 0.51073, 0.04445, 0.58281, 0.03622, 0.65075, 0.02694, 0.72743, 0.01818, 0.7997, 0.00877, 0.87745, 0, 0.94985, 0.49463, 0.9881, 1, 0.94985, 0.9924, 0.87902, 0.98374, 0.79824, 0.97585, 0.72459, 0.96826, 0.65383, 0.96097, 0.58591, 0.95321, 0.51354, 0.94607, 0.44688, 0.93834, 0.37479, 0.93057, 0.30235, 0.92162, 0.23729, 0.91478, 0.1693, 0.90826, 0.09429, 0.90262, 0.04177, 0.68729, 0.00493, 0.50446, 0.00754, 0.29063, 0.0106, 0.10929, 0.04743, 0.49571, 0.88043, 0.49652, 0.79968, 0.49725, 0.72601, 0.49799, 0.65234, 0.49866, 0.58577, 0.49938, 0.51352, 0.50005, 0.44693, 0.50078, 0.3747, 0.50147, 0.30525, 0.50233, 0.23869, 0.50296, 0.17069, 0.50358, 0.09559 ], + "triangles": [ 36, 6, 37, 7, 6, 36, 36, 37, 20, 19, 36, 20, 35, 7, 36, 8, 7, 35, 35, 36, 19, 18, 35, 19, 34, 8, 35, 34, 35, 18, 34, 18, 17, 9, 8, 34, 33, 9, 34, 33, 34, 17, 33, 17, 16, 10, 9, 33, 32, 10, 33, 11, 10, 32, 32, 33, 16, 32, 16, 15, 13, 11, 32, 12, 11, 13, 13, 32, 15, 13, 15, 14, 43, 30, 29, 43, 29, 28, 26, 43, 28, 26, 28, 27, 0, 31, 30, 0, 30, 43, 42, 0, 43, 1, 0, 42, 42, 43, 26, 42, 26, 25, 41, 1, 42, 41, 42, 25, 41, 25, 24, 2, 1, 41, 40, 2, 41, 3, 2, 40, 40, 41, 24, 40, 24, 23, 39, 3, 40, 4, 3, 39, 39, 40, 23, 22, 39, 23, 38, 4, 39, 5, 4, 38, 38, 39, 22, 38, 22, 21, 37, 5, 38, 6, 5, 37, 37, 38, 21, 20, 37, 21 ], + "vertices": [ 2, 61, -9.66, -6.38, 0.99238, 62, -9.66, 163.86, 0.00762, 2, 61, -9.83, -20.27, 0.95187, 62, -9.83, 149.97, 0.04813, 2, 61, -10.03, -33.84, 0.88337, 62, -10.03, 136.4, 0.11663, 2, 61, -10.27, -46.1, 0.80311, 62, -10.27, 124.14, 0.19689, 2, 61, -10.47, -59.46, 0.70151, 62, -10.47, 110.78, 0.29849, 2, 61, -10.67, -73.04, 0.58865, 62, -10.67, 97.2, 0.41135, 2, 61, -10.87, -85.82, 0.47894, 62, -10.87, 84.42, 0.52106, 2, 61, -11.08, -99.66, 0.36197, 62, -11.08, 70.58, 0.63803, 2, 61, -11.27, -112.7, 0.25859, 62, -11.27, 57.54, 0.74141, 2, 61, -11.5, -127.42, 0.15597, 62, -11.5, 42.82, 0.84403, 2, 61, -11.71, -141.3, 0.07856, 62, -11.71, 28.94, 0.92144, 2, 61, -11.93, -156.23, 0.02246, 62, -11.93, 14.01, 0.97754, 2, 61, -12.14, -170.13, 0.00178, 62, -12.14, 0.11, 0.99822, 1, 62, -0.27, -7.23, 1, 2, 61, 11.86, -170.13, 0.00175, 62, 11.86, 0.11, 0.99825, 2, 61, 11.67, -156.53, 0.0217, 62, 11.67, 13.71, 0.9783, 2, 61, 11.47, -141.02, 0.07999, 62, 11.47, 29.22, 0.92001, 2, 61, 11.28, -126.88, 0.15955, 62, 11.28, 43.36, 0.84045, 2, 61, 11.1, -113.29, 0.25429, 62, 11.1, 56.95, 0.74571, 2, 61, 10.92, -100.25, 0.35721, 62, 10.92, 69.99, 0.64279, 2, 61, 10.73, -86.36, 0.47445, 62, 10.73, 83.88, 0.52555, 2, 61, 10.56, -73.56, 0.58435, 62, 10.56, 96.68, 0.41565, 2, 61, 10.38, -59.72, 0.69956, 62, 10.38, 110.52, 0.30044, 2, 61, 10.19, -45.81, 0.80529, 62, 10.19, 124.43, 0.19471, 2, 61, 9.98, -33.32, 0.88656, 62, 9.98, 136.92, 0.11344, 2, 61, 9.81, -20.26, 0.95193, 62, 9.81, 149.98, 0.04807, 2, 61, 9.66, -5.86, 0.99321, 62, 9.66, 164.38, 0.00679, 2, 61, 9.52, 4.22, 0.99996, 62, 9.52, 174.46, 4.0E-5, 1, 61, 4.35, 11.3, 1, 1, 61, -0.04, 10.79, 1, 1, 61, -5.17, 10.21, 1, 2, 61, -9.52, 3.14, 0.99986, 62, -9.52, 173.38, 1.4E-4, 2, 61, -0.25, -156.8, 0.02105, 62, -0.25, 13.44, 0.97895, 2, 61, -0.23, -141.3, 0.07899, 62, -0.23, 28.94, 0.92101, 2, 61, -0.21, -127.15, 0.15826, 62, -0.21, 43.09, 0.84174, 2, 61, -0.19, -113.01, 0.25696, 62, -0.19, 57.23, 0.74304, 2, 61, -0.18, -100.22, 0.35801, 62, -0.18, 70.02, 0.64199, 2, 61, -0.16, -86.35, 0.47508, 62, -0.16, 83.89, 0.52492, 2, 61, -0.14, -73.57, 0.58483, 62, -0.14, 96.67, 0.41517, 2, 61, -0.12, -59.7, 0.70022, 62, -0.12, 110.54, 0.29978, 2, 61, -0.11, -46.37, 0.80185, 62, -0.11, 123.87, 0.19815, 2, 61, -0.09, -33.59, 0.88541, 62, -0.09, 136.65, 0.11459, 2, 61, -0.07, -20.53, 0.95108, 62, -0.07, 149.71, 0.04892, 2, 61, -0.06, -6.11, 0.9934, 62, -0.06, 164.13, 0.0066 ], + "hull": 32, + "edges": [ 24, 26, 26, 28, 54, 56, 60, 62, 56, 58, 58, 60, 24, 22, 26, 64, 22, 64, 28, 30, 64, 30, 22, 20, 66, 64, 20, 66, 30, 32, 66, 32, 20, 18, 68, 66, 18, 68, 32, 34, 68, 34, 18, 16, 70, 68, 16, 70, 34, 36, 70, 36, 16, 14, 72, 70, 14, 72, 36, 38, 72, 38, 38, 40, 74, 72, 40, 74, 14, 12, 74, 12, 12, 10, 76, 74, 10, 76, 40, 42, 76, 42, 10, 8, 78, 76, 8, 78, 42, 44, 78, 44, 8, 6, 80, 78, 6, 80, 44, 46, 80, 46, 6, 4, 82, 80, 4, 82, 46, 48, 82, 48, 4, 2, 84, 82, 2, 84, 48, 50, 84, 50, 2, 0, 0, 62, 58, 86, 86, 84, 0, 86, 50, 52, 52, 54, 86, 52 ], + "width": 24, + "height": 192 + } + }, + "bag-strap-front": { + "bag-strap-front": { + "name": "girl/bag-strap-front", + "type": "mesh", + "uvs": [ 0.10329, 0.09701, 0.09625, 0.16933, 0.0882, 0.24002, 0.07824, 0.30385, 0.06981, 0.37343, 0.06125, 0.44416, 0.05318, 0.51073, 0.04445, 0.58281, 0.03622, 0.65075, 0.02694, 0.72743, 0.01818, 0.7997, 0.00877, 0.87745, 0, 0.94985, 0.49463, 0.9881, 1, 0.94985, 0.9924, 0.87902, 0.98374, 0.79824, 0.97585, 0.72459, 0.96826, 0.65383, 0.96097, 0.58591, 0.95321, 0.51354, 0.94607, 0.44688, 0.93834, 0.37479, 0.93057, 0.30235, 0.92162, 0.23729, 0.91478, 0.1693, 0.90826, 0.09429, 0.90262, 0.04177, 0.68729, 0.00493, 0.50446, 0.00754, 0.29063, 0.0106, 0.10929, 0.04743, 0.49571, 0.88043, 0.49652, 0.79968, 0.49725, 0.72601, 0.49799, 0.65234, 0.49866, 0.58577, 0.49938, 0.51352, 0.50005, 0.44693, 0.50078, 0.3747, 0.50147, 0.30525, 0.50233, 0.23869, 0.50296, 0.17069, 0.50358, 0.09559 ], + "triangles": [ 36, 6, 37, 7, 6, 36, 36, 37, 20, 19, 36, 20, 35, 7, 36, 8, 7, 35, 35, 36, 19, 18, 35, 19, 34, 8, 35, 34, 35, 18, 34, 18, 17, 9, 8, 34, 33, 9, 34, 33, 34, 17, 33, 17, 16, 10, 9, 33, 32, 10, 33, 11, 10, 32, 32, 33, 16, 32, 16, 15, 13, 11, 32, 12, 11, 13, 13, 32, 15, 13, 15, 14, 43, 30, 29, 43, 29, 28, 26, 43, 28, 26, 28, 27, 0, 31, 30, 0, 30, 43, 42, 0, 43, 1, 0, 42, 42, 43, 26, 42, 26, 25, 41, 1, 42, 41, 42, 25, 41, 25, 24, 2, 1, 41, 40, 2, 41, 3, 2, 40, 40, 41, 24, 40, 24, 23, 39, 3, 40, 4, 3, 39, 39, 40, 23, 22, 39, 23, 38, 4, 39, 5, 4, 38, 38, 39, 22, 38, 22, 21, 37, 5, 38, 6, 5, 37, 37, 38, 21, 20, 37, 21 ], + "vertices": [ 2, 63, -8.77, -6.38, 0.99173, 64, -8.77, 163.86, 0.00827, 2, 63, -8.94, -20.27, 0.94988, 64, -8.94, 149.97, 0.05012, 2, 63, -9.13, -33.84, 0.8807, 64, -9.13, 136.4, 0.1193, 2, 63, -9.37, -46.1, 0.8002, 64, -9.37, 124.14, 0.1998, 2, 63, -9.57, -59.46, 0.69863, 64, -9.57, 110.78, 0.30137, 2, 63, -9.78, -73.04, 0.58605, 64, -9.78, 97.2, 0.41395, 2, 63, -9.97, -85.82, 0.47675, 64, -9.97, 84.42, 0.52325, 2, 63, -10.18, -99.66, 0.36031, 64, -10.18, 70.58, 0.63969, 2, 63, -10.38, -112.7, 0.25746, 64, -10.38, 57.54, 0.74254, 2, 63, -10.6, -127.42, 0.1554, 64, -10.6, 42.82, 0.8446, 2, 63, -10.81, -141.3, 0.07837, 64, -10.81, 28.94, 0.92163, 2, 63, -11.04, -156.23, 0.02242, 64, -11.04, 14.01, 0.97758, 2, 63, -11.25, -170.13, 0.00161, 64, -11.25, 0.11, 0.99839, 1, 64, 0.62, -7.23, 1, 2, 63, 12.75, -170.13, 0.00201, 64, 12.75, 0.11, 0.99799, 2, 63, 12.57, -156.53, 0.02191, 64, 12.57, 13.71, 0.97809, 2, 63, 12.36, -141.02, 0.07986, 64, 12.36, 29.22, 0.92014, 2, 63, 12.17, -126.88, 0.15897, 64, 12.17, 43.36, 0.84103, 2, 63, 11.99, -113.29, 0.25319, 64, 11.99, 56.95, 0.74681, 2, 63, 11.82, -100.25, 0.35558, 64, 11.82, 69.99, 0.64442, 2, 63, 11.63, -86.36, 0.47228, 64, 11.63, 83.88, 0.52772, 2, 63, 11.46, -73.56, 0.58177, 64, 11.46, 96.68, 0.41823, 2, 63, 11.27, -59.72, 0.69669, 64, 11.27, 110.52, 0.30331, 2, 63, 11.09, -45.81, 0.80238, 64, 11.09, 124.43, 0.19762, 2, 63, 10.87, -33.32, 0.88388, 64, 10.87, 136.92, 0.11612, 2, 63, 10.71, -20.26, 0.94981, 64, 10.71, 149.98, 0.05019, 2, 63, 10.55, -5.86, 0.9921, 64, 10.55, 164.38, 0.0079, 2, 63, 10.42, 4.22, 0.99987, 64, 10.42, 174.46, 1.3E-4, 1, 63, 5.25, 11.3, 1, 1, 63, 0.86, 10.79, 1, 1, 63, -4.27, 10.21, 1, 2, 63, -8.62, 3.14, 0.99986, 64, -8.62, 173.38, 1.4E-4, 2, 63, 0.65, -156.8, 0.02114, 64, 0.65, 13.44, 0.97886, 2, 63, 0.67, -141.3, 0.07883, 64, 0.67, 28.94, 0.92117, 2, 63, 0.69, -127.15, 0.15769, 64, 0.69, 43.09, 0.84231, 2, 63, 0.71, -113.01, 0.25584, 64, 0.71, 57.23, 0.74416, 2, 63, 0.72, -100.22, 0.35637, 64, 0.72, 70.02, 0.64363, 2, 63, 0.74, -86.35, 0.4729, 64, 0.74, 83.89, 0.5271, 2, 63, 0.75, -73.57, 0.58224, 64, 0.75, 96.67, 0.41776, 2, 63, 0.77, -59.7, 0.69735, 64, 0.77, 110.54, 0.30265, 2, 63, 0.79, -46.37, 0.79894, 64, 0.79, 123.87, 0.20106, 2, 63, 0.81, -33.59, 0.88274, 64, 0.81, 136.65, 0.11726, 2, 63, 0.82, -20.53, 0.94901, 64, 0.82, 149.71, 0.05099, 2, 63, 0.84, -6.11, 0.99248, 64, 0.84, 164.13, 0.00752 ], + "hull": 32, + "edges": [ 24, 26, 26, 28, 54, 56, 60, 62, 56, 58, 58, 60, 24, 22, 26, 64, 22, 64, 28, 30, 64, 30, 22, 20, 66, 64, 20, 66, 30, 32, 66, 32, 20, 18, 68, 66, 18, 68, 32, 34, 68, 34, 18, 16, 70, 68, 16, 70, 34, 36, 70, 36, 16, 14, 72, 70, 14, 72, 36, 38, 72, 38, 38, 40, 74, 72, 40, 74, 14, 12, 74, 12, 12, 10, 76, 74, 10, 76, 40, 42, 76, 42, 10, 8, 78, 76, 8, 78, 42, 44, 78, 44, 8, 6, 80, 78, 6, 80, 44, 46, 80, 46, 6, 4, 82, 80, 4, 82, 46, 48, 82, 48, 4, 2, 84, 82, 2, 84, 48, 50, 84, 50, 2, 0, 0, 62, 58, 86, 86, 84, 0, 86, 50, 52, 52, 54, 86, 52 ], + "width": 24, + "height": 192 + } + }, + "bag-top": { + "bag-top": { + "name": "girl/bag-top", + "type": "mesh", + "uvs": [ 1, 0.14894, 0.84966, 0.28898, 0.7266, 0.46792, 0.65912, 0.72077, 0.65516, 0.89193, 0.50829, 1, 0.17883, 0.94639, 0.03593, 0.81802, 0.01211, 0.59629, 0, 0.33955, 0.11532, 0.13338, 0.28203, 0, 1, 0.07114 ], + "triangles": [ 10, 11, 1, 1, 11, 12, 3, 8, 2, 2, 9, 10, 2, 8, 9, 2, 10, 1, 0, 1, 12, 5, 6, 4, 6, 7, 4, 4, 7, 3, 7, 8, 3 ], + "vertices": [ 2, 57, -5.42, 3.3, 0.41, 58, -89.79, -49.81, 0.59, 3, 59, -13.49, -71.44, 0.03398, 57, 7.63, 18.88, 0.85009, 58, -76.74, -34.22, 0.11592, 3, 59, -4.05, -52.04, 0.16652, 57, 17.58, 38.03, 0.80014, 58, -66.8, -15.07, 0.03334, 3, 59, -1.04, -26.07, 0.43064, 57, 21.28, 63.9, 0.54658, 58, -63.1, 10.8, 0.02277, 3, 59, -3.04, -9.07, 0.70704, 57, 19.72, 80.95, 0.28124, 58, -64.65, 27.85, 0.01172, 1, 59, 9.7, 3.64, 1, 3, 59, 42.42, 2.84, 0.93871, 57, 65.48, 91.66, 0.04781, 58, -18.89, 38.56, 0.01348, 3, 59, 58.08, -7.91, 0.78056, 57, 80.85, 80.5, 0.08, 58, -3.52, 27.4, 0.13944, 3, 59, 63.49, -29.54, 0.29048, 57, 85.69, 58.73, 0.39733, 58, 1.31, 5.63, 0.31219, 3, 59, 68.25, -54.8, 0.05104, 57, 89.78, 33.36, 0.53142, 58, 5.41, -19.74, 0.41754, 2, 57, 80.9, 11.59, 0.38, 58, -3.48, -41.51, 0.62, 1, 58, -18.2, -56.62, 1, 2, 57, -4.53, -4.43, 0.41, 58, -88.91, -57.54, 0.59 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 2, 20, 8, 14 ], + "width": 98, + "height": 100 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "accessories/cape-blue", + "bones": [ "cape-blue-up", "cape-front-rotator", "cape-blue-control", "cape-blue-down-middle", "cape-blue-middle-back", "cape-blue-middle-front", "cape-blue-up-front", "cape-back-rotator", "cape-blue-down-back", "cape-blue-down-front", "cape-blue-down", "cape-blue-up-back" ], + "attachments": { + "cape-back": { + "cape-back": { + "name": "girl-blue-cape/cape-back", + "type": "mesh", + "uvs": [ 0.16774, 0.18106, 0.16774, 0.29678, 0.15536, 0.37836, 0.1492, 0.41892, 0.13066, 0.53249, 0.10285, 0.63749, 0.06886, 0.74892, 0.03178, 0.84106, 0, 0.91392, 0, 0.96321, 0.12139, 0.97606, 0.26661, 0.98035, 0.36858, 0.99535, 0.49836, 1, 0.64667, 0.99106, 0.77645, 0.96535, 0.9124, 0.96535, 1, 0.94392, 1, 0.83678, 0.94639, 0.75535, 0.90313, 0.64606, 0.8815, 0.52821, 0.88459, 0.40392, 0.89409, 0.29849, 0.8803, 0.21766, 0.87223, 0.17035, 0.74864, 0, 0.23572, 0, 0.49006, 0.88368, 0.38711, 0.87971, 0.2632, 0.86913, 0.13357, 0.8612, 0.64257, 0.87178, 0.78173, 0.85062, 0.89421, 0.84798, 0.11069, 0.76072, 0.14882, 0.6457, 0.17551, 0.53994, 0.19457, 0.42227, 0.22507, 0.30196, 0.22507, 0.18165, 0.81605, 0.1724, 0.8332, 0.3998, 0.82939, 0.53465, 0.85227, 0.65628, 0.89611, 0.76998, 0.49768, 0.53861, 0.51865, 0.28874, 0.5034, 0.07324, 0.84979, 0.31308, 0.81597, 0.2321, 0.19995, 0.37876 ], + "triangles": [ 40, 27, 48, 46, 28, 29, 32, 28, 46, 11, 30, 29, 14, 32, 15, 28, 32, 14, 12, 11, 29, 13, 28, 14, 29, 28, 13, 12, 29, 13, 34, 33, 45, 34, 45, 19, 19, 18, 34, 17, 34, 18, 15, 32, 33, 16, 34, 17, 15, 33, 34, 16, 15, 34, 30, 31, 35, 7, 35, 31, 10, 9, 8, 31, 8, 7, 31, 10, 8, 10, 31, 30, 11, 10, 30, 21, 42, 22, 43, 42, 21, 43, 46, 42, 44, 43, 21, 44, 21, 20, 45, 44, 20, 45, 20, 19, 45, 33, 44, 46, 44, 32, 44, 46, 43, 44, 33, 32, 37, 4, 3, 36, 5, 4, 37, 36, 4, 35, 6, 5, 36, 35, 5, 7, 6, 35, 46, 36, 37, 36, 46, 29, 29, 30, 36, 30, 35, 36, 37, 38, 46, 48, 27, 26, 41, 48, 26, 41, 47, 48, 40, 48, 47, 49, 24, 23, 42, 50, 49, 47, 50, 42, 22, 49, 23, 42, 49, 22, 42, 46, 47, 41, 26, 25, 50, 47, 41, 49, 50, 24, 41, 24, 50, 24, 41, 25, 51, 2, 1, 38, 2, 51, 38, 51, 46, 40, 0, 27, 1, 0, 40, 39, 40, 47, 1, 40, 39, 39, 51, 1, 3, 2, 38, 47, 51, 39, 38, 37, 3, 46, 51, 47 ], + "vertices": [ 2, 139, -67.32, -1.83, 0.83, 4, 54.84, 90.31, 0.17, 2, 139, -22.81, -3.58, 0.9, 4, 10.42, 93.67, 0.1, 1, 139, 8.45, -8.12, 1, 2, 139, 23.99, -10.37, 0.84479, 137, -84.76, 9.18, 0.15521, 2, 139, 67.49, -17.04, 0.23, 137, -41.26, 2.52, 0.77, 3, 139, 107.59, -26.04, 0.00129, 137, -1.16, -6.49, 0.9964, 135, -109.35, 27.31, 0.00231, 3, 137, 41.35, -17.24, 0.64884, 135, -66.84, 16.56, 0.34223, 134, -85.85, -117.18, 0.00892, 4, 139, 185.16, -48.08, 0.02, 137, 76.41, -28.53, 0.21385, 135, -31.78, 5.27, 0.75071, 134, -50.79, -128.46, 0.01544, 2, 137, 104.1, -38.11, 0.00727, 135, -4.09, -4.31, 0.99273, 2, 135, 14.87, -5.06, 0.99722, 134, -4.14, -138.79, 0.00278, 3, 137, 129.28, -6.66, 0.02507, 135, 21.09, 27.14, 0.86628, 134, 2.08, -106.6, 0.10865, 3, 137, 132.45, 32.02, 0.04886, 135, 24.26, 65.82, 0.49631, 134, 5.25, -67.92, 0.45484, 3, 137, 139.29, 59, 0.0214, 135, 31.1, 92.79, 0.21036, 134, 12.09, -40.94, 0.76824, 4, 137, 142.44, 93.55, 6.5E-4, 135, 34.25, 127.35, 0.01537, 136, 25.25, -127.51, 3.3E-4, 134, 15.24, -6.39, 0.98365, 3, 138, 148.57, -64.7, 0.00449, 136, 23.37, -87.8, 0.17701, 134, 13.36, 33.32, 0.81851, 3, 138, 140.04, -29.69, 0.02334, 136, 14.84, -52.79, 0.60404, 134, 4.83, 68.33, 0.37262, 3, 138, 141.46, 6.58, 0.00358, 136, 16.27, -16.52, 0.93615, 134, 6.25, 104.6, 0.06026, 1, 136, 8.94, 7.18, 1, 3, 138, 92.92, 31.89, 0.14408, 136, -32.28, 8.8, 0.85584, 134, -42.29, 129.92, 8.0E-5, 3, 138, 61.03, 18.82, 0.46239, 136, -64.17, -4.27, 0.53552, 134, -74.18, 116.85, 0.00209, 2, 138, 18.54, 8.93, 0.91574, 136, -106.66, -14.16, 0.08426, 2, 140, 96.09, 1.28, 0.09, 138, -27.03, 4.94, 0.91, 2, 140, 48.31, 3.91, 0.53, 138, -74.81, 7.65, 0.47, 1, 140, 7.84, 7.97, 1, 2, 140, -23.4, 5.46, 0.81, 4, 26.44, -98.34, 0.19, 2, 140, -41.68, 3.99, 0.7, 4, 44.77, -97.57, 0.3, 2, 140, -108.46, -26.51, 0.93, 4, 112.65, -69.61, 0.07, 1, 4, 122.98, 66.95, 1, 4, 137, 97.61, 93.09, 0.01667, 135, -10.59, 126.89, 0.05862, 136, -19.58, -127.96, 0.00801, 134, -29.6, -6.84, 0.91669, 3, 137, 95, 65.69, 0.102, 135, -13.19, 99.49, 0.26627, 134, -32.2, -34.25, 0.63173, 3, 137, 89.63, 32.79, 0.20581, 135, -18.56, 66.59, 0.51806, 134, -37.57, -67.15, 0.27614, 3, 137, 85.22, -1.68, 0.21275, 135, -22.97, 32.12, 0.71605, 134, -41.98, -101.61, 0.0712, 3, 138, 102.64, -64, 0.07818, 136, -22.56, -87.09, 0.32621, 134, -32.57, 34.03, 0.59561, 3, 138, 95.96, -26.55, 0.18346, 136, -29.24, -49.64, 0.6387, 134, -39.25, 71.48, 0.17784, 3, 138, 96.12, 3.5, 0.16303, 136, -29.08, -19.6, 0.79715, 134, -39.09, 101.52, 0.03982, 3, 137, 46.33, -6.26, 0.62329, 135, -61.86, 27.54, 0.36315, 134, -80.87, -106.2, 0.01356, 4, 139, 111.23, -13.9, 6.6E-4, 137, 2.48, 5.65, 0.99342, 135, -105.71, 39.45, 0.0059, 134, -124.72, -94.28, 3.0E-5, 2, 139, 70.82, -5.18, 0.23, 137, -37.93, 14.37, 0.77, 2, 139, 25.75, 1.68, 0.84188, 137, -83, 21.24, 0.15812, 2, 139, -20.21, 11.64, 0.9, 4, 7.27, 78.55, 0.1, 2, 139, -66.49, 13.46, 0.83, 4, 53.46, 75.06, 0.17, 2, 140, -41.46, -11.03, 0.7, 4, 45.11, -82.55, 0.3, 2, 140, 46.2, -9.75, 0.53, 138, -76.94, -6, 0.47, 2, 140, 98.05, -12.72, 0.09, 138, -25.1, -9.06, 0.91, 2, 138, 21.93, -4.79, 0.90321, 136, -103.27, -27.89, 0.09679, 3, 138, 66.13, 5.19, 0.44464, 136, -59.07, -17.91, 0.54629, 134, -69.08, 103.21, 0.00907, 2, 139, 73.69, 80.79, 0.36969, 137, -35.06, 100.35, 0.63031, 2, 140, 0.31, -92.06, 0.96279, 138, -122.96, -88.24, 0.03721, 1, 140, -82.75, -93.01, 1, 1, 140, 13.01, -4.06, 1, 2, 140, -18.49, -11.91, 0.81, 4, 22.19, -80.8, 0.19, 1, 139, 9.07, 3.77, 1 ], + "hull": 28, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 50, 52, 52, 54, 0, 54, 44, 46, 46, 48, 48, 50, 2, 4, 4, 6 ], + "width": 267, + "height": 385 + } + }, + "cape-blue-shoulder-back": { + "cape-blue-shoulder-back": { + "name": "girl-blue-cape/cape-shoulder-back", + "type": "mesh", + "uvs": [ 0, 0.07849, 0.35461, 0.35256, 0.61389, 0.5707, 0.8193, 0.78883, 0.95063, 1, 1, 1, 1, 0.74409, 0.93379, 0.484, 0.79236, 0.20994, 0.59032, 0.01977, 0, 0 ], + "triangles": [ 6, 3, 7, 4, 3, 6, 4, 6, 5, 3, 2, 7, 2, 8, 7, 2, 1, 8, 0, 10, 9, 1, 0, 9, 1, 9, 8 ], + "vertices": [ 1, 4, 112.34, -7.46, 1, 2, 4, 77.47, -39.67, 0.89, 140, -72.17, -55.09, 0.11, 2, 4, 49.88, -63.07, 0.47, 140, -45.49, -30.67, 0.53, 2, 4, 22.7, -81.2, 0.2, 140, -19.01, -11.52, 0.8, 1, 140, 6.38, 0.4, 1, 1, 140, 6.56, 5.23, 1, 2, 4, 26.63, -99.26, 0.03, 140, -23.62, 6.37, 0.97, 2, 4, 57.72, -95.1, 0.19, 140, -54.53, 1.04, 0.81, 2, 4, 91.01, -83.72, 0.5, 140, -87.37, -11.59, 0.5, 2, 4, 114.88, -65.67, 0.71, 140, -110.54, -30.53, 0.29, 1, 4, 121.57, -8.16, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 98, + "height": 118 + } + }, + "cape-blue-shoulder-front": { + "cape-blue-shoulder-front": { + "name": "girl-blue-cape/cape-shoulder-front", + "type": "mesh", + "uvs": [ 1, 0.26291, 0.82448, 0.42574, 0.58034, 0.61028, 0.30936, 0.80567, 0.09204, 1, 0.03839, 1, 0, 0.62982, 0, 0.31936, 0.21009, 0.09357, 0.51595, 0, 0.98546, 0.00238, 0.35765, 0.36929, 0.59912, 0.21298, 0.16717, 0.51258 ], + "triangles": [ 2, 11, 12, 2, 12, 1, 7, 8, 11, 1, 12, 0, 12, 10, 0, 12, 11, 8, 12, 8, 9, 12, 9, 10, 2, 13, 11, 13, 7, 11, 3, 4, 6, 4, 5, 6, 6, 13, 3, 2, 3, 13, 6, 7, 13 ], + "vertices": [ 1, 4, 82.18, -29.91, 1, 1, 4, 58.8, -6.49, 1, 2, 139, -47.93, 63.65, 0.33, 4, 33.09, 25.57, 0.67, 2, 139, -19.56, 29.18, 0.88, 4, 5.99, 61.04, 0.12, 1, 139, 8.9, 1.31, 1, 1, 139, 8.64, -5.28, 1, 2, 139, -47.77, -7.79, 0.73, 4, 35.51, 96.97, 0.27, 2, 139, -94.92, -5.94, 0.44, 4, 82.57, 93.41, 0.56, 2, 139, -128.2, 21.23, 0.21, 4, 114.84, 65.06, 0.79, 1, 4, 126.19, 26.47, 1, 1, 4, 121.47, -31.09, 1, 2, 139, -85.61, 37.72, 0.5, 4, 71.68, 50.12, 0.5, 1, 4, 93.14, 18.71, 1, 2, 139, -64.77, 13.46, 0.65, 4, 51.73, 75.12, 0.35 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 123, + "height": 152 + } + }, + "cape-blue-up-front": { + "cape-blue-up-front": { + "name": "girl-blue-cape/cape-up-front", + "type": "mesh", + "uvs": [ 1, 1, 0.7644, 1, 0.60402, 0.93701, 0.40799, 0.93403, 0.20484, 0.87139, 0.04445, 0.75804, 0, 0.57908, 0.00168, 0.39712, 0.16563, 0.2271, 0.39373, 0.07199, 0.60402, 0, 0.83568, 0, 1, 0.04515, 0.9034, 0.10182, 0.75727, 0.14955, 0.66461, 0.25991, 0.5862, 0.40905, 0.56481, 0.57013, 0.60045, 0.72225, 0.75371, 0.79682, 0.92835, 0.82665, 1, 0.90122, 0.32245, 0.38817, 0.29038, 0.58802, 0.40443, 0.76401, 0.43294, 0.16744, 0.13543, 0.58128, 0.19958, 0.34266, 0.23879, 0.78113, 0.4098, 0.13281, 0.61528, 0.04432 ], + "triangles": [ 2, 3, 24, 4, 28, 3, 2, 18, 19, 2, 24, 18, 1, 19, 20, 1, 20, 21, 2, 19, 1, 1, 21, 0, 28, 24, 3, 4, 5, 28, 5, 26, 28, 28, 26, 23, 28, 23, 24, 24, 23, 17, 24, 17, 18, 5, 6, 26, 8, 9, 29, 7, 8, 27, 6, 7, 26, 9, 10, 30, 30, 10, 11, 13, 11, 12, 14, 30, 11, 14, 11, 13, 25, 29, 30, 15, 30, 14, 25, 30, 15, 22, 27, 25, 16, 25, 15, 22, 25, 16, 23, 22, 17, 17, 22, 16, 29, 9, 30, 22, 23, 27, 29, 25, 27, 23, 26, 27, 26, 7, 27, 29, 27, 8 ], + "vertices": [ 1, 4, 85.07, -28.86, 1, 1, 4, 88.53, 16.95, 1, 2, 29, -78.55, -97.76, 0.12904, 4, 105.52, 47.03, 0.87096, 2, 29, -116.77, -97.07, 0.22, 4, 109.1, 85.09, 0.78, 4, 141, -191.82, 123.01, 0.23269, 29, -156.39, -82.47, 0.22918, 30, -67.47, -83.07, 0.13813, 4, 126.64, 123.49, 0.4, 4, 141, -165.41, 154.29, 0.28, 29, -187.66, -56.06, 0.40019, 30, -98.75, -56.66, 0.16114, 4, 155.33, 152.68, 0.15867, 4, 141, -123.71, 162.96, 0.17927, 6, 49.32, 155.86, 0.59755, 29, -196.33, -14.36, 0.06318, 30, -107.42, -14.96, 0.16, 3, 141, -81.31, 162.63, 0.07633, 6, 91.69, 157.33, 0.72367, 30, -107.09, 27.43, 0.2, 3, 141, -41.7, 130.66, 0.06, 6, 132.62, 127.07, 0.7, 30, -75.12, 67.05, 0.24, 4, 141, -5.56, 86.18, 0.08877, 6, 170.61, 84.16, 0.71399, 29, -119.55, 103.79, 0.01724, 30, -30.64, 103.19, 0.18, 4, 141, 11.21, 45.17, 0.51, 6, 189.11, 43.9, 0.19156, 29, -78.55, 120.56, 0.15, 30, 10.37, 119.96, 0.14844, 2, 141, 11.21, 0, 0.72, 29, -33.37, 120.56, 0.28, 2, 141, 0.7, -32.04, 0.72, 29, -1.33, 110.04, 0.28, 2, 141, -12.51, -13.21, 0.79, 29, -20.17, 96.84, 0.21, 2, 141, -23.63, 15.29, 0.71, 29, -48.66, 85.72, 0.29, 2, 141, -49.34, 33.36, 0.54, 29, -66.73, 60, 0.46, 2, 141, -84.09, 48.65, 0.45, 29, -82.02, 25.25, 0.55, 3, 141, -121.62, 52.82, 0.37571, 29, -86.19, -12.28, 0.55, 4, 191.34, 48.2, 0.07429, 3, 141, -157.07, 45.87, 0.27096, 29, -79.24, -47.72, 0.5, 4, 155.47, 43.94, 0.22904, 2, 29, -49.36, -65.1, 0.27899, 4, 135.89, 15.45, 0.72101, 2, 29, -15.3, -72.05, 0.11247, 4, 126.4, -17.98, 0.88753, 1, 4, 108.02, -30.6, 1, 2, 141, -79.23, 100.08, 0.64, 29, -133.45, 30.12, 0.36, 3, 141, -125.79, 106.33, 0.48, 29, -139.71, -16.45, 0.37805, 4, 191.22, 101.88, 0.14195, 3, 141, -166.8, 84.09, 0.27, 29, -117.47, -57.45, 0.423, 4, 148.65, 82.79, 0.307, 3, 141, -27.8, 78.53, 0.69314, 29, -111.91, 81.55, 0.28, 30, -22.99, 80.95, 0.02686, 4, 141, -124.22, 136.55, 0.35527, 29, -169.92, -14.88, 0.41, 30, -81.01, -15.48, 0.15867, 4, 195.06, 131.89, 0.07605, 3, 141, -68.62, 124.04, 0.86, 29, -157.41, 40.72, 0.10943, 30, -68.5, 40.12, 0.03057, 4, 141, -170.79, 116.39, 0.27213, 29, -149.77, -61.44, 0.35294, 30, -60.85, -62.04, 0.03493, 4, 147.11, 115.3, 0.34, 3, 141, -19.73, 83.05, 0.24, 29, -116.42, 89.62, 0.39163, 30, -27.5, 89.02, 0.36837, 3, 141, 0.89, 42.98, 0.64, 29, -76.35, 110.23, 0.27769, 30, 12.56, 109.64, 0.08231 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42, 54, 50, 52, 56, 58, 54, 58, 60 ], + "width": 195, + "height": 233 + } + }, + "cape-ribbon": { + "cape-ribbon": { "name": "girl-blue-cape/cape-ribbon", "x": 105.78, "y": -28.65, "rotation": -94.33, "width": 100, "height": 36 } + }, + "cape-up-back": { + "cape-up-back": { + "name": "girl-blue-cape/cape-back-up", + "type": "mesh", + "uvs": [ 0.52406, 0.00329, 0.62554, 0.04269, 0.7529, 0.09213, 0.90546, 0.25682, 1, 0.47751, 1, 0.7509, 0.89981, 0.91888, 0.75572, 1, 0.39127, 1, 0, 0.79372, 0, 0.22718, 0.29804, 0, 0.79245, 0.82336, 0.85743, 0.53021, 0.79245, 0.3227, 0.66532, 0.19753, 0.42518, 0.10531, 0.37997, 0.56974, 0.55552, 0.10358 ], + "triangles": [ 12, 13, 5, 7, 12, 6, 7, 8, 12, 13, 4, 5, 12, 17, 13, 13, 14, 4, 6, 12, 5, 16, 10, 11, 8, 17, 12, 17, 10, 16, 9, 17, 8, 9, 10, 17, 3, 14, 2, 14, 15, 2, 17, 16, 15, 16, 18, 15, 18, 1, 15, 16, 0, 18, 16, 11, 0, 18, 0, 1, 15, 1, 2, 14, 17, 15, 14, 3, 4, 17, 14, 13 ], + "vertices": [ 2, 141, 8.32, -5.56, 0.76, 29, -27.81, 117.67, 0.24, 2, 141, -0.3, -30.52, 0.76, 29, -2.85, 109.04, 0.24, 2, 141, -11.12, -61.85, 0.81, 29, 28.48, 98.23, 0.19, 3, 141, -45.87, -99.38, 0.51456, 29, 66.01, 63.48, 0.21, 4, 255.4, -109.28, 0.27544, 3, 141, -92.43, -122.64, 0.26657, 29, 89.27, 16.91, 0.13343, 4, 207.22, -128.96, 0.6, 3, 141, -150.12, -122.64, 0.00304, 29, 89.27, -40.77, 0.16, 4, 149.7, -124.61, 0.83696, 3, 29, 64.62, -76.22, 0.12, 30, 153.54, -76.82, 5.0E-4, 4, 116.21, -97.36, 0.8795, 1, 4, 101.82, -60.73, 1, 2, 29, -60.48, -93.33, 0.44568, 30, 28.44, -93.93, 0.55432, 3, 141, -159.15, 123.36, 0.72, 29, -156.73, -49.81, 0.00104, 30, -67.82, -50.41, 0.27896, 2, 30, -67.82, 69.13, 0.31, 6, 135.01, 119.86, 0.69, 4, 141, 8.32, 50.04, 0.28019, 29, -83.41, 117.67, 0.24, 30, 5.5, 117.07, 0.0456, 6, 186.01, 48.64, 0.43421, 2, 29, 38.21, -56.06, 0.16, 4, 138.3, -72.55, 0.84, 3, 141, -103.55, -87.57, 0.29987, 29, 54.2, 5.79, 0.15013, 4, 198.77, -93.15, 0.55, 3, 141, -59.72, -71.58, 0.5125, 29, 38.21, 49.63, 0.21, 4, 243.69, -80.52, 0.2775, 2, 141, -33.12, -40.31, 0.81, 29, 6.94, 76.22, 0.19, 2, 141, -13.8, 18.77, 0.76, 29, -52.14, 95.55, 0.24, 3, 141, -111.85, 29.89, 0.02898, 29, -63.26, -2.5, 0.24273, 30, 25.66, -3.1, 0.72829, 2, 141, -13.3, -13.3, 0.76, 29, -20.07, 96.05, 0.24 ], + "hull": 12, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 0, 2, 2, 4 ], + "width": 246, + "height": 211 + } + }, + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-blue-cape/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "accessories/cape-red", + "bones": [ "cape-red-front-inside", "cape-red-front-outside", "cape-front-rotator", "cape-red-back-outside", "cape-back-rotator", "cape-red-back-inside" ], + "attachments": { + "cape-red-down": { + "cape-red-down": { + "name": "girl-spring-dress/cloak-down", + "type": "mesh", + "uvs": [ 0.14417, 0, 0.36304, 0.02025, 0.57682, 0.0966, 0.7397, 0.23912, 0.85168, 0.4529, 0.92294, 0.66668, 1, 0.82447, 1, 1, 0.70916, 1, 0.44448, 0.98735, 0.28669, 0.83974, 0.06273, 0.5038, 0, 0.26966, 0, 0.07624, 0.67674, 0.71028, 0.43738, 0.58788, 0.3008, 0.31931, 0.57552, 0.43898 ], + "triangles": [ 17, 2, 3, 17, 3, 4, 11, 16, 15, 11, 12, 16, 2, 17, 1, 17, 16, 1, 12, 13, 0, 16, 0, 1, 12, 0, 16, 15, 16, 17, 9, 14, 8, 14, 4, 5, 6, 8, 14, 6, 14, 5, 8, 6, 7, 14, 17, 4, 10, 11, 15, 10, 15, 9, 9, 15, 14, 15, 17, 14 ], + "vertices": [ 1, 4, 125.16, -19.58, 1, 1, 4, 121.49, -41.25, 1, 3, 120, 74.56, -19.08, 0.15867, 4, 112.27, -61.99, 0.14879, 122, 28.75, 13.93, 0.69254, 1, 122, 14.5, -2.36, 1, 2, 119, -12.43, 41.24, 0.46, 122, -6.88, -13.55, 0.54, 2, 119, -5.3, 19.86, 0.76, 122, -28.26, -20.68, 0.24, 2, 119, 2.41, 4.09, 0.86, 122, -44.04, -28.39, 0.14, 2, 120, -18.72, -54.46, 0.19, 119, 2.41, -13.47, 0.81, 2, 120, -16.52, -25.46, 0.36, 119, -26.68, -13.47, 0.64, 2, 120, -13.27, 0.84, 0.55, 119, -53.15, -12.2, 0.45, 2, 120, 2.64, 15.46, 0.83, 119, -68.93, 2.56, 0.17, 2, 120, 37.83, 35.26, 0.22, 4, 75.54, -7.66, 0.78, 1, 4, 99.36, -3.17, 1, 1, 4, 118.65, -4.63, 1, 3, 120, 12.61, -24.41, 0.36, 119, -29.92, 15.5, 0.59041, 122, -32.62, 3.94, 0.04959, 3, 120, 26.62, -1.47, 0.83, 119, -53.86, 27.74, 0.15527, 4, 64.33, -44.38, 0.01473, 1, 4, 92.14, -32.79, 1, 1, 4, 78.13, -59.28, 1 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 22, 24, 24, 26, 0, 26, 34, 2, 20, 22 ], + "width": 100, + "height": 100 + } + }, + "cape-red-up": { + "cape-red-up": { + "name": "girl-spring-dress/cloak-up", + "type": "mesh", + "uvs": [ 0.37962, 0, 0.24791, 0.0725, 0.15296, 0.15299, 0.06413, 0.27371, 0.01206, 0.6057, 0, 0.7499, 0, 0.9008, 0.07332, 1, 0.25097, 1, 0.43475, 1, 0.53889, 0.93434, 0.70123, 0.88404, 0.82988, 0.75325, 0.9187, 0.55875, 0.94933, 0.42461, 0.93402, 0.15969, 0.66448, 0, 0.26629, 0.82703, 0.48376, 0.7499, 0.64916, 0.6057, 0.72267, 0.38102, 0.63078, 0.14963, 0.3643, 0.34078, 0.29998, 0.60905 ], + "triangles": [ 3, 2, 22, 22, 23, 3, 18, 19, 11, 11, 19, 12, 12, 19, 13, 18, 23, 19, 17, 23, 18, 18, 10, 9, 9, 8, 17, 8, 7, 17, 7, 6, 17, 9, 17, 18, 10, 18, 11, 6, 5, 17, 17, 5, 23, 23, 5, 4, 23, 4, 3, 23, 22, 19, 19, 20, 13, 19, 22, 20, 13, 20, 14, 20, 15, 14, 22, 21, 20, 20, 21, 15, 2, 1, 22, 22, 0, 21, 22, 1, 0, 21, 16, 15, 21, 0, 16 ], + "vertices": [ 1, 4, 128.5, 22.39, 1, 1, 4, 121.37, 39.71, 1, 2, 4, 112.97, 52.44, 0.27, 117, -9.72, 16.53, 0.73, 1, 117, -21, 2.53, 1, 2, 115, -26.06, -1.94, 0.83, 117, -27.61, -35.98, 0.17, 1, 115, -9.34, -3.48, 1, 2, 115, 8.17, -3.48, 0.99, 117, -29.14, -70.21, 0.01, 2, 4, 15.76, 69.93, 0.07049, 115, 19.68, 5.84, 0.92951, 2, 115, 19.68, 28.4, 0.88, 113, -18.74, 59.54, 0.12, 2, 115, 19.68, 51.74, 0.73, 113, -20.5, 36.27, 0.27, 2, 115, 12.06, 64.96, 0.6, 113, -13.9, 22.51, 0.4, 2, 115, 6.22, 85.58, 0.4, 113, -9.64, 1.51, 0.6, 3, 4, 37.05, -28.04, 0.05405, 115, -8.95, 101.92, 0.27, 113, 4.26, -15.93, 0.67595, 3, 4, 58.7, -40.99, 0.42765, 115, -31.51, 113.2, 0.22, 113, 25.9, -28.88, 0.35235, 3, 4, 73.92, -46.04, 0.6319, 115, -47.07, 117.09, 0.11, 113, 41.13, -33.93, 0.2581, 2, 4, 104.71, -46.42, 0.91761, 113, 71.92, -34.31, 0.08239, 1, 4, 125.77, -13.68, 1, 2, 115, -0.39, 30.34, 0.88, 113, 1.12, 56.09, 0.12, 2, 115, -9.34, 57.96, 0.6, 113, 7.96, 27.88, 0.4, 3, 4, 55.85, -6.44, 0.3066, 115, -26.06, 78.97, 0.27, 113, 23.06, 5.67, 0.4234, 3, 4, 81.14, -17.72, 0.6764, 115, -52.13, 88.3, 0.11, 113, 48.34, -5.61, 0.2136, 1, 4, 108.78, -8.1, 1, 2, 4, 89.23, 27.31, 0.9433, 115, -56.79, 42.79, 0.0567, 2, 115, -25.67, 34.62, 0.91, 113, 26.01, 49.92, 0.09 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32, 8, 46, 6, 8 ], + "width": 127, + "height": 116 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "ribbon-shoulder": { + "ribbon-shoulder": { "name": "girl-spring-dress/shoulder-ribbon", "x": 100.69, "y": -35.56, "rotation": -94.33, "width": 71, "height": 48 } + } + } + }, + { + "name": "accessories/hat-pointy-blue-yellow", + "bones": [ "pompom-control", "hat", "hat-control", "hat-base" ], + "transform": [ "hat-control" ], + "attachments": { + "hat": { + "hat": { + "name": "girl/hat", + "type": "mesh", + "uvs": [ 0.0927, 1, 0.3018, 1, 0.54117, 0.96286, 0.79429, 0.88837, 1, 0.78284, 1, 0.66491, 0.89885, 0.53766, 0.8163, 0.53766, 0.73848, 0.40186, 0.65555, 0.25718, 0.57433, 0.11546, 0.50815, 0, 0.34032, 7.2E-4, 0.28185, 0.15871, 0.21639, 0.33559, 0.15752, 0.49466, 0.1037, 0.64008, 0.01016, 0.65249, 0, 0.94734, 0.30731, 0.64939, 0.62096, 0.58421, 0.46964, 0.62146, 0.43112, 0.10625, 0.57911, 0.43657, 0.45775, 0.46247, 0.32733, 0.47774, 0.53642, 0.28599, 0.44504, 0.29245, 0.34714, 0.30794, 0.49454, 0.13823, 0.36433, 0.16053 ], + "triangles": [ 22, 27, 30, 29, 27, 22, 30, 13, 12, 10, 29, 11, 22, 12, 11, 29, 22, 11, 22, 30, 12, 28, 13, 30, 26, 10, 9, 23, 26, 9, 23, 9, 8, 24, 27, 26, 24, 26, 23, 28, 27, 24, 25, 14, 28, 25, 28, 24, 15, 14, 25, 20, 23, 8, 20, 8, 7, 20, 21, 24, 20, 24, 23, 25, 24, 21, 19, 15, 25, 19, 25, 21, 16, 15, 19, 7, 6, 5, 3, 20, 7, 5, 3, 7, 4, 3, 5, 2, 21, 20, 2, 20, 3, 16, 18, 17, 1, 0, 16, 0, 18, 16, 19, 1, 16, 19, 21, 2, 1, 19, 2, 14, 13, 28, 28, 30, 27, 26, 29, 10, 27, 29, 26 ], + "vertices": [ 2, 50, -28.98, 69.5, 0.88, 52, -75.23, 83.03, 0.12, 2, 50, -27.34, 30.85, 0.76, 52, -79.03, 44.54, 0.24, 3, 50, -19.38, -13.13, 0.7291, 51, -12.02, -7.08, 9.0E-4, 52, -77.31, -0.13, 0.27, 2, 50, -5.19, -59.4, 0.8, 52, -69.75, -47.93, 0.2, 2, 50, 13.71, -96.69, 0.99957, 51, 9.03, -94.45, 4.3E-4, 2, 50, 33.04, -95.87, 0.95114, 51, 28.28, -96.35, 0.04886, 2, 50, 53.1, -76.29, 0.88191, 51, 50.88, -79.78, 0.11809, 3, 50, 52.45, -61.03, 0.879, 51, 52.38, -64.58, 0.11986, 52, -12.91, -57.63, 0.00114, 2, 50, 74.09, -45.7, 0.87726, 51, 75.96, -52.44, 0.12274, 3, 50, 97.14, -29.37, 0.73206, 51, 101.08, -39.5, 0.26419, 52, 35.78, -32.55, 0.00375, 3, 50, 119.73, -13.37, 0.42555, 51, 125.68, -26.83, 0.5184, 52, 60.39, -19.88, 0.05605, 3, 50, 138.13, -0.34, 0.29174, 51, 145.73, -16.5, 0.61231, 52, 80.43, -9.55, 0.09595, 3, 50, 136.69, 30.68, 0.22303, 51, 148.66, 14.41, 0.65697, 52, 83.36, 21.36, 0.12, 3, 50, 110.35, 40.39, 0.31671, 51, 123.93, 27.72, 0.59996, 52, 58.64, 34.67, 0.08333, 3, 50, 80.85, 51.26, 0.62374, 51, 96.25, 42.61, 0.36063, 52, 30.96, 49.57, 0.01563, 2, 50, 54.33, 61.03, 0.82549, 51, 71.36, 56.01, 0.17451, 2, 50, 30.08, 69.97, 0.88, 51, 48.61, 68.26, 0.12, 2, 50, 27.31, 87.17, 0.88702, 51, 48.28, 85.68, 0.11298, 1, 50, -21.08, 87, 1, 3, 50, 30.15, 32.27, 0.59407, 51, 43.39, 30.93, 0.18593, 52, -21.91, 37.88, 0.22, 3, 50, 43.29, -25.25, 0.66536, 51, 48.33, -27.87, 0.09464, 52, -16.96, -20.91, 0.24, 3, 50, 36, 2.46, 0.5548, 51, 45, 0.59, 0.1752, 52, -20.29, 7.54, 0.27, 3, 50, 120.12, 13.16, 0.30606, 51, 129.79, -0.61, 0.55394, 52, 64.49, 6.34, 0.14, 3, 50, 67.15, -16.49, 0.68076, 51, 73.19, -22.54, 0.12924, 52, 7.89, -15.59, 0.19, 3, 50, 61.96, 5.77, 0.57797, 51, 71.16, 0.22, 0.21203, 52, 5.87, 7.17, 0.21, 3, 50, 58.43, 29.77, 0.62009, 51, 71.04, 24.48, 0.22991, 52, 5.75, 31.43, 0.15, 3, 50, 91.49, -7.55, 0.59613, 51, 98.54, -17.1, 0.26387, 52, 33.24, -10.15, 0.14, 3, 50, 89.71, 9.3, 0.49151, 51, 99.14, -0.18, 0.31849, 52, 33.85, 6.78, 0.19, 3, 50, 86.41, 27.28, 0.48715, 51, 98.39, 18.1, 0.34285, 52, 33.1, 25.05, 0.17, 3, 50, 115.37, 1.22, 0.38285, 51, 123.41, -11.77, 0.45715, 52, 58.12, -4.82, 0.16, 3, 50, 110.7, 25.13, 0.30156, 51, 122.14, 12.56, 0.52844, 52, 56.84, 19.51, 0.17 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 32, 34, 34, 36, 0, 36, 30, 32, 28, 30, 14, 16, 16, 18, 40, 46, 16, 46, 42, 48, 46, 48, 38, 50, 48, 50, 52, 46, 18, 52, 44, 54, 54, 48, 52, 54, 56, 50, 54, 56, 56, 28, 18, 20, 20, 22, 58, 52, 20, 58, 60, 56, 24, 26, 26, 28, 60, 26 ], + "width": 185, + "height": 164 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "pompom": { + "pompom": { "name": "girl/pompom", "x": 0.31, "y": -0.35, "rotation": -95.63, "width": 96, "height": 85 } + } + } + }, + { + "name": "accessories/hat-red-yellow", + "bones": [ "pompom-control", "hat", "hat-control", "hat-base" ], + "transform": [ "hat-control" ], + "attachments": { + "hat": { + "hat": { + "name": "boy/hat", + "type": "mesh", + "uvs": [ 1, 0.67762, 0.84575, 0.80843, 0.65489, 0.90654, 0.43192, 0.966, 0.225, 0.99573, 0.03592, 0.98978, 0, 0.85303, 0.027, 0.47546, 0.07694, 0.46357, 0.10013, 0.306, 0.18575, 0.11573, 0.31954, 0.01465, 0.49257, 0, 0.64775, 0.03249, 0.7637, 0.14546, 0.83327, 0.31492, 0.9064, 0.32384, 1, 0.53789, 0.22857, 0.48438, 0.39089, 0.45168, 0.59424, 0.40708, 0.74765, 0.3506, 0.24819, 0.2733, 0.38197, 0.25843, 0.57997, 0.21384 ], + "triangles": [ 20, 24, 21, 23, 24, 20, 19, 23, 20, 22, 10, 11, 22, 23, 19, 23, 22, 11, 23, 11, 12, 23, 12, 24, 24, 12, 13, 24, 13, 14, 21, 24, 14, 19, 20, 2, 8, 9, 18, 18, 19, 3, 15, 17, 21, 17, 15, 16, 0, 1, 17, 1, 21, 17, 6, 7, 8, 18, 6, 8, 2, 20, 1, 3, 19, 2, 4, 6, 18, 4, 5, 6, 18, 3, 4, 20, 21, 1, 18, 9, 22, 9, 10, 22, 18, 22, 19, 21, 14, 15 ], + "vertices": [ 1, 50, 13.89, -96.68, 1, 2, 50, -1.83, -68.79, 0.82, 52, -67.01, -62.58, 0.18, 2, 50, -14.21, -33.97, 0.72, 52, -74.39, -26.37, 0.28, 2, 50, -22.55, 6.96, 0.72, 52, -76.91, 15.33, 0.28, 2, 50, -27.47, 45.07, 0.82, 52, -76.43, 53.75, 0.18, 1, 50, -28.29, 80.05, 1, 1, 50, -13.41, 87.33, 1, 2, 50, 28.67, 84.11, 0.94502, 51, 49.2, 82.46, 0.05498, 3, 50, 30.39, 74.94, 0.90664, 51, 49.61, 73.14, 0.07509, 52, -14.96, 75.21, 0.01827, 2, 50, 48.04, 71.39, 0.83494, 51, 66.59, 67.15, 0.16506, 2, 50, 69.81, 56.46, 0.75704, 51, 86.05, 49.32, 0.24296, 2, 50, 82.07, 32.21, 0.73015, 51, 94.79, 23.58, 0.26985, 3, 50, 85.05, 0.3, 0.71911, 51, 93.27, -8.43, 0.27957, 52, 28.7, -6.36, 0.00132, 2, 50, 82.67, -28.54, 0.71902, 51, 86.86, -36.65, 0.28098, 2, 50, 71.05, -50.5, 0.7727, 51, 72.27, -56.76, 0.2273, 2, 50, 52.8, -64.16, 0.9302, 51, 52.29, -67.73, 0.0698, 2, 50, 52.39, -77.72, 0.97146, 51, 49.98, -81.09, 0.02854, 1, 50, 29.38, -96.02, 1, 3, 50, 29.27, 46.82, 0.76552, 51, 44.55, 45.45, 0.08448, 52, -20.01, 47.52, 0.15, 3, 50, 34.17, 16.97, 0.75083, 51, 45.22, 15.21, 0.07917, 52, -19.35, 17.28, 0.17, 3, 50, 40.71, -20.41, 0.75063, 51, 46.45, -22.71, 0.07937, 52, -18.11, -20.65, 0.17, 3, 50, 48.17, -48.5, 0.83648, 51, 49.91, -51.57, 0.09352, 52, -14.66, -49.51, 0.07, 3, 50, 52.83, 44.18, 0.71547, 51, 67.51, 39.54, 0.16811, 52, 2.95, 41.61, 0.11643, 3, 50, 55.53, 19.52, 0.68597, 51, 66.73, 14.75, 0.16403, 52, 2.16, 16.81, 0.15, 3, 50, 62.02, -16.86, 0.70061, 51, 68.06, -22.19, 0.18939, 52, 3.49, -20.13, 0.11 ], + "hull": 18, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 0, 34, 44, 22 ], + "width": 185, + "height": 111 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "pompom": { + "pompom": { "name": "boy/pompom", "x": -48.24, "y": 11.74, "rotation": -95.63, "width": 96, "height": 85 } + } + } + }, + { + "name": "accessories/scarf", + "bones": [ "scarf-back" ], + "attachments": { + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "scarf": { + "scarf": { + "name": "girl/scarf", + "type": "mesh", + "uvs": [ 0, 0.69166, 0.08052, 0.80607, 0.18349, 0.90523, 0.29463, 0.96243, 0.44173, 1, 0.5921, 0.99676, 0.69655, 0.96098, 0.81649, 0.89046, 0.92984, 0.74335, 0.98437, 0.67259, 1, 0.62301, 1, 0.43614, 0.987, 0.34894, 0.95168, 0.11197, 0.8389, 0.11579, 0.75309, 0.14439, 0.66045, 0.15555, 0.57902, 0.16537, 0.46625, 0.11579, 0.37308, 0.07002, 0.28482, 0.02426, 0.20473, 0, 0.09849, 0.02044, 0.056, 0.3408, 0, 0.51623, 0.2505, 0.51241, 0.45971, 0.56199, 0.6444, 0.52385, 0.85198, 0.46283, 0.15733, 0.43995, 0.3453, 0.53148, 0.54797, 0.54292, 0.74737, 0.5086, 0.26684, 0.42851, 0.3506, 0.44336, 0.46122, 0.45875, 0.16878, 0.36367, 0.94187, 0.40181 ], + "triangles": [ 32, 15, 28, 28, 15, 37, 27, 31, 17, 31, 35, 17, 27, 16, 32, 32, 16, 15, 37, 15, 14, 18, 35, 34, 34, 33, 19, 12, 14, 13, 12, 37, 14, 23, 22, 36, 33, 36, 20, 27, 17, 16, 17, 35, 18, 18, 34, 19, 19, 33, 20, 36, 21, 20, 36, 22, 21, 28, 37, 11, 30, 25, 34, 30, 34, 35, 34, 25, 33, 24, 23, 29, 25, 29, 33, 29, 36, 33, 29, 23, 36, 37, 12, 11, 5, 4, 26, 4, 3, 26, 6, 5, 31, 5, 26, 31, 26, 3, 30, 31, 27, 6, 7, 27, 32, 7, 6, 27, 3, 2, 30, 30, 1, 25, 30, 2, 1, 7, 32, 8, 29, 25, 1, 9, 8, 28, 28, 8, 32, 24, 29, 0, 0, 29, 1, 9, 28, 10, 10, 28, 11, 26, 35, 31, 26, 30, 35 ], + "vertices": [ 1, 4, 101.59, 148.9, 1, 1, 4, 88.51, 130.67, 1, 1, 4, 76.57, 106.99, 1, 1, 4, 68.76, 81.06, 1, 1, 4, 62.3, 46.43, 1, 1, 4, 59.93, 10.72, 1, 1, 4, 61.69, -14.34, 1, 1, 4, 66.71, -43.35, 1, 1, 4, 79.64, -71.38, 1, 1, 4, 85.86, -84.86, 1, 1, 4, 90.62, -88.96, 1, 2, 4, 111.53, -90.22, 0.68, 5, 12.11, -93.3, 0.32, 2, 4, 120.59, -87.62, 0.68, 5, 21.19, -90.81, 0.32, 1, 5, 49.45, -81.99, 1, 1, 5, 49.69, -55.15, 1, 1, 5, 47.25, -34.67, 1, 1, 5, 46.62, -12.6, 1, 1, 5, 46.07, 6.8, 1, 1, 5, 51.76, 33.52, 1, 1, 5, 56.94, 55.57, 1, 1, 5, 62.1, 76.47, 1, 1, 5, 65.02, 95.46, 1, 1, 5, 63.52, 120.79, 1, 2, 4, 133.66, 133.75, 0.68, 5, 36.73, 130.17, 0.32, 2, 4, 118.16, 147.77, 0.86, 5, 21.41, 144.43, 0.14, 2, 4, 113.61, 88.46, 0.68, 5, 16.19, 85.15, 0.32, 2, 4, 105.87, 38.97, 0.71, 5, 7.91, 35.81, 0.29, 2, 4, 107.27, -5.15, 0.68, 5, 8.8, -8.29, 0.32, 2, 4, 110.76, -54.86, 0.68, 5, 11.73, -57.98, 0.32, 2, 4, 122.22, 110.21, 0.68, 5, 25.04, 106.78, 0.32, 2, 4, 110.42, 66.02, 0.68, 5, 12.75, 62.78, 0.32, 2, 4, 106.59, 17.89, 0.68, 5, 8.39, 14.74, 0.32, 2, 4, 107.47, -29.73, 0.68, 5, 8.73, -32.84, 0.32, 2, 4, 121.95, 84.1, 0.68, 5, 24.47, 80.7, 0.32, 2, 4, 119.33, 64.26, 0.68, 5, 21.64, 60.92, 0.32, 2, 4, 116.31, 38.04, 0.68, 5, 18.32, 34.76, 0.32, 2, 4, 129.85, 107.06, 0.68, 5, 32.62, 103.55, 0.32, 2, 4, 115.79, -76.59, 0.68, 5, 16.52, -79.73, 0.32 ], + "hull": 25, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 18, 20, 20, 22, 26, 28, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 2, 58, 6, 60, 14, 64, 10, 12, 12, 14, 14, 16, 16, 18, 16, 56, 28, 30, 64, 30, 30, 32, 32, 34, 54, 32, 50, 66, 38, 68, 68, 60, 36, 70, 70, 52, 66, 40, 22, 24, 24, 26, 74, 24, 62, 34 ], + "width": 238, + "height": 102 + } + }, + "scarf-back": { + "scarf-back": { "name": "girl/scarf-back", "x": 46.88, "y": 3.26, "rotation": 177.98, "width": 143, "height": 102 } + } + } + }, + { + "name": "clothes/dress-blue", + "bones": [ "dress-control-leg-down-back", "dress-control-leg-up-back", "sleeve-control-front", "dress-control-leg-down-front", "sleeve-control-back", "dress-control-middle", "dress-control-foot-back", "dress-control-foot-front", "dress-control-leg-up-front" ], + "transform": [ "leg-down-front", "leg-up", "leg-down-back", "leg-down-back-up", "leg-down-down", "leg-up-back" ], + "attachments": { + "arm-back": { + "arm-back": { + "name": "girl-blue-cape/sleeve-front", + "type": "mesh", + "uvs": [ 0.39189, 0, 0.14439, 0.01666, 0.15901, 0.10249, 0.17598, 0.19757, 0.191, 0.28175, 0.205, 0.3602, 0.22028, 0.44586, 0.23432, 0.52454, 0.2491, 0.60734, 0.22371, 0.71965, 0.1539, 0.82364, 0, 0.92776, 0, 0.99154, 0.23074, 0.95687, 0.37352, 1, 0.45602, 1, 0.6591, 0.94994, 1, 0.96658, 1, 0.91944, 0.88122, 0.81129, 0.81141, 0.71284, 0.76064, 0.59498, 0.73905, 0.50606, 0.71901, 0.4235, 0.7003, 0.34643, 0.68005, 0.26299, 0.65973, 0.17927, 0.63519, 0.07818, 0.61151, 0, 0.43698, 0.82821, 0.25612, 0.89754, 0.6242, 0.89754, 0.43118, 0.08805, 0.44237, 0.51902, 0.4401, 0.43175, 0.43805, 0.35262, 0.436, 0.27359, 0.43377, 0.18768, 0.44092, 0.60224, 0.43884, 0.72139 ], + "triangles": [ 4, 3, 37, 36, 37, 26, 37, 3, 32, 3, 2, 32, 37, 32, 26, 32, 27, 26, 2, 0, 32, 2, 1, 0, 32, 0, 27, 0, 28, 27, 6, 5, 35, 34, 35, 24, 35, 5, 36, 5, 4, 36, 35, 25, 24, 35, 36, 25, 36, 4, 37, 36, 26, 25, 7, 6, 34, 33, 34, 23, 34, 6, 35, 34, 24, 23, 39, 38, 21, 39, 8, 38, 38, 8, 33, 38, 22, 21, 38, 33, 22, 33, 8, 7, 33, 7, 34, 33, 23, 22, 29, 39, 20, 29, 9, 39, 39, 21, 20, 9, 8, 39, 30, 10, 29, 10, 9, 29, 15, 31, 16, 31, 15, 29, 13, 30, 14, 15, 14, 29, 14, 30, 29, 12, 11, 13, 16, 18, 17, 13, 11, 30, 16, 31, 18, 11, 10, 30, 31, 19, 18, 31, 29, 19, 29, 20, 19 ], + "vertices": [ 1, 84, -16.93, -3.67, 1, 1, 84, -16.62, -29.86, 1, 2, 85, -30.38, -28.39, 0.00675, 84, 3.66, -28.4, 0.99325, 2, 85, -7.5, -26.7, 0.28271, 84, 26.13, -26.7, 0.71729, 3, 86, -20.67, -25.24, 0.0369, 85, 12.75, -25.2, 0.82623, 84, 46.02, -25.2, 0.13687, 3, 86, -1.82, -23.81, 0.46001, 85, 31.62, -23.8, 0.53932, 84, 64.55, -23.8, 6.7E-4, 3, 87, -14.53, -22.33, 0.07429, 86, 18.77, -22.24, 0.89721, 85, 52.23, -22.28, 0.0285, 2, 87, 4.3, -20.78, 0.66292, 86, 37.68, -20.8, 0.33708, 3, 88, -9.4, -19.2, 0.39191, 87, 24.1, -19.15, 0.48809, 86, 57.58, -19.29, 0.12, 3, 131, 76.95, -52.14, 0.2, 88, 17.84, -21.57, 0.472, 87, 50.99, -21.67, 0.328, 3, 131, 84.21, -27.39, 0.33, 89, 9.43, -28.56, 0.5213, 88, 43.1, -28.59, 0.1487, 2, 131, 100.22, -2.61, 0.99748, 89, 34.19, -44.26, 0.00252, 1, 131, 100.22, 12.57, 1, 1, 131, 76.22, 4.32, 1, 1, 131, 61.37, 14.58, 1, 1, 131, 52.79, 14.58, 1, 1, 131, 31.67, 2.67, 1, 1, 131, -3.78, 6.63, 1, 3, 131, -3.78, -4.59, 0.99378, 89, 30.96, 59.71, 0.00244, 88, 65.41, 59.63, 0.00378, 4, 131, 8.57, -30.33, 0.60383, 89, 5.59, 47.04, 0.13666, 88, 39.34, 47.02, 0.2413, 87, 72.6, 46.82, 0.01821, 3, 131, 15.83, -53.76, 0.2, 88, 15.57, 39.53, 0.472, 87, 49.08, 39.45, 0.328, 5, 131, 21.11, -81.81, 0.0171, 89, -45.3, 33.86, 2.3E-4, 88, -12.93, 33.97, 0.32025, 87, 20.9, 34.04, 0.54241, 86, 54.67, 33.91, 0.12, 5, 131, 23.36, -102.97, 3.0E-5, 88, -34.45, 31.51, 0.01472, 87, -0.37, 31.69, 0.51834, 86, 33.3, 31.69, 0.46518, 85, 66.89, 31.63, 0.00174, 3, 87, -20.12, 29.51, 0.10716, 86, 13.46, 29.63, 0.77625, 85, 47.02, 29.61, 0.11659, 4, 87, -38.56, 27.48, 0.0033, 86, -5.07, 27.71, 0.43059, 85, 28.47, 27.72, 0.56203, 84, 61.45, 27.72, 0.00408, 3, 86, -25.12, 25.62, 0.05143, 85, 8.4, 25.67, 0.74366, 84, 41.73, 25.68, 0.20491, 2, 85, -11.75, 23.62, 0.18749, 84, 21.95, 23.62, 0.81251, 1, 84, 1.16, 17.55, 1, 1, 84, -11.55, 9.3, 1, 2, 131, 54.77, -26.3, 0.43, 89, 10.15, 0.89, 0.57, 3, 131, 73.58, -9.8, 0.43, 89, 26.74, -17.72, 0.56433, 88, 60.89, -17.78, 0.00567, 3, 131, 35.3, -9.8, 0.59, 89, 26.27, 20.56, 0.38171, 88, 60.51, 20.5, 0.02829, 1, 84, 0.33, -0.08, 1, 2, 87, 2.87, 0.85, 0.98548, 86, 36.38, 0.83, 0.01452, 2, 87, -18.01, 0.52, 2.8E-4, 86, 15.41, 0.62, 0.99972, 1, 85, 29.88, 0.44, 1, 2, 86, -22.6, 0.24, 1.2E-4, 85, 10.87, 0.28, 0.99988, 1, 84, 23.87, 0.12, 1, 4, 131, 54.37, -80.08, 0.04086, 88, -10.84, 0.74, 0.35514, 87, 22.79, 0.79, 0.484, 86, 56.38, 0.66, 0.12, 3, 131, 54.58, -51.73, 0.2, 88, 18.03, 0.8, 0.472, 87, 51.31, 0.71, 0.328 ], + "hull": 29, + "edges": [ 0, 2, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 56, 36, 62, 60, 22, 0, 64, 2, 4, 64, 4, 54, 56, 64, 54, 14, 16, 14, 66, 42, 44, 66, 44, 12, 14, 68, 66, 12, 68, 44, 46, 68, 46, 46, 48, 70, 68, 48, 70, 10, 12, 70, 10, 8, 10, 72, 70, 8, 72, 48, 50, 72, 50, 50, 52, 52, 54, 64, 74, 74, 72, 52, 74, 4, 6, 6, 8, 74, 6, 76, 66, 76, 42, 76, 16, 58, 78, 78, 76, 40, 78, 38, 58, 58, 20, 0, 54, 64, 52 ], + "width": 104, + "height": 238 + } + }, + "body-dress": { + "body-dress": { + "name": "girl-blue-cape/body-dress", + "type": "mesh", + "uvs": [ 0.37147, 0.03655, 0.19753, 0.06738, 0.15404, 0.12133, 0.32219, 0.19841, 0.33378, 0.22538, 0.2874, 0.28704, 0.23812, 0.34613, 0.20623, 0.41935, 0.18013, 0.49642, 0.14534, 0.60818, 0.11925, 0.7148, 0.09896, 0.82527, 0.08156, 0.87665, 0.02358, 0.92546, 0, 0.9614, 0, 0.98709, 0.11635, 0.9948, 0.2874, 1, 0.51933, 1, 0.72516, 0.99865, 0.97448, 0.99351, 1, 0.96782, 0.97738, 0.92286, 0.95999, 0.86891, 0.96578, 0.80597, 0.97738, 0.71091, 0.98028, 0.60301, 0.96578, 0.49382, 0.93679, 0.40776, 0.9049, 0.33325, 0.85852, 0.26517, 0.80344, 0.21251, 0.80634, 0.15984, 0.78024, 0.05858, 0.6121, 0.02646, 0.68457, 0.23071, 0.49613, 0.23199, 0.62261, 0.17757, 0.46316, 0.1917, 0.6719, 0.33814, 0.78206, 0.33428, 0.62551, 0.41393, 0.84584, 0.41136, 0.58202, 0.33557, 0.52404, 0.4165, 0.52114, 0.33557, 0.37619, 0.41264, 0.46026, 0.49228, 0.56463, 0.49614, 0.73857, 0.28162, 0.68059, 0.28419, 0.59652, 0.2829, 0.48635, 0.28676, 0.3443, 0.60918, 0.46026, 0.60661, 0.88643, 0.491, 0.32111, 0.7235, 0.19935, 0.71965, 0.52114, 0.72993, 0.80525, 0.72479, 0.55303, 0.60661, 0.79946, 0.60789, 0.51535, 0.88536, 0.83424, 0.88022, 0.30081, 0.88664, 0.30371, 0.81984, 0.52114, 0.81856, 0.81975, 0.81214, 0.82472, 0.94059, 0.61889, 0.94316, 0.39856, 0.94702, 0.23041, 0.95087, 0.09126, 0.94059, 0.35471, 0.49384, 0.13171, 0.87893, 0.15316, 0.82452, 0.93153, 0.92896, 0.91674, 0.87433, 0.92068, 0.80791, 0.05964, 0.93806 ], + "triangles": [ 49, 31, 30, 50, 51, 35, 50, 35, 49, 52, 36, 51, 5, 4, 52, 40, 49, 30, 40, 30, 29, 45, 52, 51, 43, 45, 51, 39, 51, 50, 43, 51, 39, 42, 40, 29, 46, 5, 52, 46, 52, 45, 41, 43, 39, 44, 45, 43, 39, 50, 49, 39, 49, 40, 41, 39, 40, 42, 41, 40, 37, 34, 33, 37, 33, 32, 38, 0, 34, 38, 34, 37, 3, 1, 0, 3, 0, 38, 2, 1, 3, 32, 35, 37, 4, 3, 38, 31, 35, 32, 36, 38, 37, 4, 38, 36, 36, 37, 35, 49, 35, 31, 51, 36, 35, 52, 4, 36, 6, 5, 46, 44, 43, 41, 46, 45, 44, 7, 6, 46, 76, 23, 22, 20, 76, 22, 20, 22, 21, 76, 68, 63, 76, 63, 77, 68, 76, 20, 19, 68, 20, 68, 19, 63, 79, 15, 14, 79, 14, 13, 15, 79, 72, 16, 72, 71, 15, 72, 16, 16, 71, 17, 63, 19, 69, 70, 64, 62, 17, 71, 64, 17, 64, 70, 18, 62, 69, 70, 62, 18, 17, 70, 18, 18, 69, 19, 63, 69, 62, 64, 65, 62, 25, 78, 59, 24, 78, 25, 67, 59, 78, 66, 59, 67, 23, 78, 24, 78, 63, 67, 77, 78, 23, 77, 63, 78, 62, 67, 63, 76, 77, 23, 62, 66, 67, 42, 29, 28, 55, 42, 28, 55, 28, 27, 55, 41, 42, 61, 48, 55, 55, 27, 26, 61, 26, 59, 55, 26, 61, 25, 59, 26, 59, 60, 61, 56, 58, 66, 62, 65, 66, 10, 9, 57, 56, 11, 57, 65, 56, 66, 57, 11, 10, 11, 56, 75, 56, 65, 75, 74, 11, 75, 12, 11, 74, 64, 75, 65, 74, 75, 64, 79, 13, 12, 72, 12, 74, 79, 12, 72, 71, 74, 64, 72, 74, 71, 66, 58, 59, 58, 56, 54, 59, 58, 60, 48, 44, 41, 47, 46, 44, 73, 46, 47, 47, 44, 48, 8, 7, 73, 60, 54, 47, 73, 47, 54, 48, 60, 47, 53, 8, 73, 53, 73, 54, 9, 8, 53, 57, 9, 53, 56, 53, 54, 48, 41, 55, 60, 48, 61, 56, 57, 53, 58, 54, 60, 73, 7, 46 ], + "vertices": [ 1, 4, 115.55, 22.28, 1, 1, 4, 103.28, 61.24, 1, 1, 4, 77.53, 72.69, 1, 1, 4, 36.95, 39, 1, 2, 4, 23.53, 37.48, 0.57, 3, 88.89, 40.23, 0.43, 2, 4, -5.96, 49.85, 0.4, 3, 59, 51.6, 0.6, 1, 2, -67.89, 26.14, 1, 2, 125, -119.82, 5.59, 0.41, 2, -74.84, -9.88, 0.59, 2, 125, -81.73, 1.16, 0.88, 126, -113.79, -10.46, 0.12, 2, 125, -26.52, -4.59, 0.75, 126, -58.29, -10.27, 0.25, 2, 125, 26.09, -8.53, 0.15, 126, -5.55, -8.55, 0.85, 2, 125, 80.56, -11.15, 0.12, 126, 48.88, -5.31, 0.88, 2, 125, 105.95, -14.1, 0.05, 126, 74.44, -5.52, 0.95, 2, 126, 100, -14.67, 0.49, 127, -24.37, -2.34, 0.51, 1, 127, -6.14, -4.95, 1, 1, 127, 6.37, -3.18, 1, 2, 129, -85.84, -9.66, 0.31, 127, 6.57, 22.47, 0.69, 2, 129, -48.55, -12.21, 0.52, 127, 3.88, 59.74, 0.48, 1, 129, 2.01, -12.21, 1, 2, 129, 46.88, -11.55, 0.53, 128, 17.25, -54.9, 0.47, 1, 128, 11.93, -0.75, 1, 1, 128, -0.98, 4.15, 1, 2, 124, 92.78, 14.32, 0.47, 128, -22.82, -1.91, 0.53, 3, 123, 101.67, 5.36, 0.29, 124, 66.47, 9.17, 0.4686, 128, -49.13, -7.06, 0.2414, 2, 123, 70.72, 6.91, 0.41, 124, 35.47, 8.84, 0.59, 2, 123, 23.98, 9.88, 0.76, 124, -11.36, 8.95, 0.24, 1, 123, -29.1, 11, 1, 2, 123, -82.85, 8.34, 0.89, 2, 90.75, -46.53, 0.11, 2, 123, -125.25, 2.41, 0.69, 2, 84.43, -4.18, 0.31, 1, 3, 30.67, -81.95, 1, 2, 4, -4.62, -75.11, 0.4, 3, 64.56, -73.25, 0.6, 2, 4, 22.12, -65.09, 0.57, 3, 90.95, -62.33, 0.43, 1, 4, 47.91, -67.67, 1, 1, 4, 98.02, -65.76, 1, 1, 4, 116.54, -30.4, 1, 2, 4, 15.15, -38.58, 0.57, 3, 83.08, -36.06, 0.43, 2, 4, 17.61, 2.43, 0.57, 3, 84.16, 5.01, 0.43, 1, 4, 42.24, -27.08, 1, 1, 4, 37.92, 8.11, 1, 1, 3, 30.39, -31.1, 1, 1, 3, 31.28, -55.18, 1, 2, 125, -125.52, 96.85, 0.32, 2, 16.57, -7.22, 0.68, 2, 123, -123.66, -17.43, 0.69, 2, 64.6, -5.95, 0.31, 1, 3, 32.47, -11.58, 1, 2, 125, -123.52, 74.78, 0.32, 2, -5.55, -8.48, 0.68, 1, 3, 33.02, 1.68, 1, 2, 125, -124.35, 42.51, 0.32, 2, -37.79, -6.58, 0.68, 2, 125, -85.79, 62.13, 0.97, 126, -124.37, 49.71, 0.03, 2, 125, -84.66, 84.93, 0.92, 2, 3.29, -47.66, 0.08, 2, 4, -10.72, -48.43, 0.4, 3, 57.57, -46.78, 0.6, 2, 4, -11.02, -35.73, 0.4, 3, 56.83, -34.1, 0.6, 2, 4, -9.01, -17.5, 0.4, 3, 58.23, -15.82, 0.6, 2, 4, -9.09, 6.59, 0.4, 3, 57.33, 8.26, 0.6, 2, 125, -27.47, 38.77, 0.92, 126, -63.88, 32.75, 0.08, 3, 125, -29.58, 64, 0.6336, 126, -68.67, 57.6, 0.3264, 124, -56.81, -106.27, 0.04, 2, 123, -84.4, -8.95, 0.89, 2, 73.45, -45.14, 0.11, 2, 125, 28.91, 35.59, 0.37, 126, -7.48, 35.62, 0.63, 2, 125, 27.9, 9, 0.22, 126, -5.64, 9.08, 0.78, 3, 125, 30.62, 79.28, 0.43771, 126, -10.46, 79.24, 0.53, 129, 2.41, 120.66, 0.03229, 2, 123, 30.45, -27.71, 0.32, 124, -2.61, -28.17, 0.68, 3, 125, -30.25, 84.21, 0.5664, 126, -71.51, 77.62, 0.3936, 124, -57.85, -86.07, 0.04, 1, 123, -27.07, -28.44, 1, 4, 125, 107.09, 80.56, 0.108, 126, 65.43, 88.71, 0.25092, 129, 1.14, 44.19, 0.4, 128, -36.06, -103.45, 0.24108, 3, 124, 73.43, -17.92, 0.3431, 129, 70.66, 46.72, 0.27, 128, -42.17, -34.15, 0.3869, 2, 126, 72.61, 42.49, 0.39, 129, -45.62, 43.56, 0.61, 2, 126, 39.98, 38.51, 0.68, 129, -44.99, 76.42, 0.32, 4, 125, 74.2, 80.73, 0.13965, 126, 32.72, 85.36, 0.46, 129, 2.41, 77.05, 0.17126, 128, -68.95, -103.88, 0.22909, 1, 124, 40.14, -22.8, 1, 2, 129, 68.59, 17.01, 0.32, 128, -12.4, -34.7, 0.68, 2, 129, 23.72, 15.75, 0.74, 128, -8.82, -79.44, 0.26, 1, 129, -24.32, 13.85, 1, 3, 126, 106.05, 31.73, 0.2256, 129, -60.97, 11.96, 0.52, 127, -18.31, 44.06, 0.2544, 3, 126, 105.3, 0.98, 0.2268, 129, -91.31, 17.01, 0.16, 127, -19.07, 13.31, 0.6132, 2, 125, -84.26, 39.16, 0.92, 126, -120.38, 27.04, 0.08, 3, 125, 106.71, -3.13, 0.03989, 126, 74.03, 5.46, 0.85011, 129, -82.49, 47.35, 0.11, 3, 125, 79.8, 0.65, 0.08746, 126, 46.86, 6.34, 0.82673, 129, -77.81, 74.12, 0.08581, 3, 124, 96.29, 4.49, 0.34371, 129, 91.87, 22.74, 0.05, 128, -19.31, -11.74, 0.60629, 4, 123, 104.25, -4.09, 0.1912, 124, 69.61, -0.11, 0.4382, 129, 88.65, 49.61, 0.06, 128, -45.98, -16.34, 0.31061, 4, 123, 71.58, -2.93, 0.28332, 124, 36.93, -0.93, 0.71646, 129, 89.51, 82.29, 5.0E-5, 128, -78.66, -17.16, 1.7E-4, 3, 126, 105.03, -6.02, 0.29357, 129, -98.2, 18.26, 0.08, 127, -19.34, 6.31, 0.62643 ], + "hull": 35, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 0, 68, 104, 10, 72, 8, 72, 70, 110, 96, 124, 128, 22, 112, 124, 126, 112, 116, 116, 118, 16, 146, 146, 94, 106, 146, 24, 148, 148, 128, 144, 142, 148, 150, 144, 30 ], + "width": 218, + "height": 492 + } + }, + "hand-back": { + "hand-back-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-blue-cape/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "ribbon-body": { + "ribbon-body": { "name": "girl-blue-cape/body-ribbon", "x": 18.42, "y": -33.29, "rotation": -94.33, "width": 100, "height": 75 } + }, + "sleeve-front": { + "sleeve-front": { + "name": "girl-blue-cape/sleeve-front", + "type": "mesh", + "uvs": [ 0.39189, 0, 0.14439, 0.01666, 0.15901, 0.10249, 0.17598, 0.19757, 0.191, 0.28175, 0.205, 0.3602, 0.22028, 0.44586, 0.23432, 0.52454, 0.2491, 0.60734, 0.22371, 0.71965, 0.1539, 0.82364, 0, 0.92776, 0, 0.99154, 0.23074, 0.95687, 0.37352, 1, 0.45602, 1, 0.6591, 0.94994, 1, 0.96658, 1, 0.91944, 0.88122, 0.81129, 0.81141, 0.71284, 0.76064, 0.59498, 0.73905, 0.50606, 0.71901, 0.4235, 0.7003, 0.34643, 0.68005, 0.26299, 0.65973, 0.17927, 0.63519, 0.07818, 0.61151, 0, 0.43698, 0.82821, 0.25612, 0.89754, 0.6242, 0.89754, 0.43118, 0.08805, 0.44237, 0.51902, 0.4401, 0.43175, 0.43805, 0.35262, 0.436, 0.27359, 0.43377, 0.18768, 0.44092, 0.60224, 0.43884, 0.72139 ], + "triangles": [ 31, 29, 19, 30, 10, 29, 31, 19, 18, 11, 10, 30, 16, 31, 18, 13, 11, 30, 16, 18, 17, 14, 30, 29, 31, 15, 29, 15, 31, 16, 12, 11, 13, 15, 14, 29, 13, 30, 14, 36, 26, 25, 36, 4, 37, 35, 36, 25, 35, 25, 24, 5, 4, 36, 35, 5, 36, 34, 35, 24, 6, 5, 35, 34, 24, 23, 34, 6, 35, 33, 34, 23, 7, 6, 34, 33, 23, 22, 33, 7, 34, 33, 8, 7, 38, 33, 22, 38, 22, 21, 38, 8, 33, 39, 8, 38, 39, 38, 21, 9, 8, 39, 39, 21, 20, 29, 9, 39, 29, 39, 20, 29, 20, 19, 10, 9, 29, 32, 0, 28, 32, 28, 27, 2, 1, 0, 2, 0, 32, 37, 32, 27, 37, 27, 26, 3, 2, 32, 37, 3, 32, 36, 37, 26, 4, 3, 37 ], + "vertices": [ 1, 11, -20.49, -4.66, 1, 1, 11, -16.63, -30.41, 1, 2, 11, 3.65, -28.95, 0.98956, 15, -30.38, -28.94, 0.01044, 2, 11, 26.12, -27.25, 0.69654, 15, -7.51, -27.25, 0.30346, 3, 11, 46.01, -25.75, 0.12833, 14, -20.67, -25.79, 0.04417, 15, 12.75, -25.75, 0.8275, 3, 11, 64.55, -24.35, 5.4E-4, 14, -1.82, -24.36, 0.45092, 15, 31.62, -24.35, 0.54855, 3, 13, -14.52, -22.88, 0.09244, 14, 18.77, -22.79, 0.86912, 15, 52.23, -22.83, 0.03844, 2, 13, 4.3, -21.33, 0.67682, 14, 37.68, -21.35, 0.32318, 3, 12, -9.39, -19.75, 0.17407, 13, 24.11, -19.7, 0.82329, 14, 57.58, -19.84, 0.00265, 3, 12, 17.84, -22.12, 0.96018, 13, 51, -22.22, 0.02472, 130, 19.81, 52.59, 0.0151, 2, 12, 43.11, -29.14, 0.51751, 130, 12.55, 28.05, 0.48249, 2, 12, 68.49, -44.89, 0.00319, 130, -3.45, 3.48, 0.99681, 1, 130, -3.45, -11.57, 1, 1, 130, 20.54, -3.4, 1, 1, 130, 35.39, -13.58, 1, 1, 130, 43.97, -13.58, 1, 1, 130, 65.09, -1.77, 1, 1, 130, 100.55, -5.7, 1, 2, 12, 65.42, 59.08, 0.01006, 130, 100.55, 5.43, 0.98994, 3, 12, 39.35, 46.47, 0.40219, 13, 72.61, 46.27, 0.00826, 130, 88.19, 30.95, 0.58955, 3, 12, 15.57, 38.98, 0.70901, 13, 49.08, 38.9, 0.15192, 130, 80.93, 54.19, 0.13907, 4, 12, -12.93, 33.42, 0.25073, 13, 20.9, 33.49, 0.66465, 14, 54.67, 33.36, 0.08185, 130, 75.65, 82, 0.00277, 4, 12, -34.44, 30.96, 0.01846, 13, -0.37, 31.14, 0.48291, 14, 33.3, 31.14, 0.4903, 15, 66.88, 31.08, 0.00833, 3, 13, -20.12, 28.96, 0.08139, 14, 13.46, 29.08, 0.74583, 15, 47.02, 29.06, 0.17278, 4, 11, 61.45, 27.17, 0.00108, 13, -38.56, 26.93, 7.5E-4, 14, -5.07, 27.16, 0.33502, 15, 28.47, 27.17, 0.66314, 3, 11, 41.73, 25.13, 0.17136, 14, -25.12, 25.07, 0.01658, 15, 8.4, 25.12, 0.81206, 2, 11, 21.95, 23.07, 0.80027, 15, -11.75, 23.07, 0.19973, 1, 11, -1.94, 20.59, 1, 1, 11, -20.42, 18.18, 1, 2, 12, 43.91, 0.31, 0.7298, 130, 41.99, 26.96, 0.2702, 2, 12, 60.9, -18.33, 0.15731, 130, 23.18, 10.61, 0.84269, 2, 12, 60.51, 19.95, 0.14683, 130, 61.46, 10.6, 0.85317, 1, 11, 0.33, -0.63, 1, 1, 13, 2.87, 0.3, 1, 1, 14, 15.41, 0.07, 1, 1, 15, 29.88, -0.11, 1, 2, 14, -22.6, -0.31, 0, 15, 10.87, -0.27, 1, 1, 11, 23.87, -0.43, 1, 3, 12, -10.83, 0.19, 2.3E-4, 13, 22.79, 0.24, 0.99974, 14, 56.38, 0.11, 3.0E-5, 3, 12, 18.04, 0.25, 0.9998, 13, 51.31, 0.16, 5.0E-5, 130, 42.18, 52.17, 1.5E-4 ], + "hull": 29, + "edges": [ 0, 2, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 56, 36, 62, 60, 22, 0, 64, 2, 4, 64, 4, 54, 56, 64, 54, 14, 16, 14, 66, 42, 44, 66, 44, 12, 14, 68, 66, 12, 68, 44, 46, 68, 46, 46, 48, 70, 68, 48, 70, 10, 12, 70, 10, 8, 10, 72, 70, 8, 72, 48, 50, 72, 50, 50, 52, 52, 54, 64, 74, 74, 72, 52, 74, 4, 6, 6, 8, 74, 6, 76, 66, 76, 42, 76, 16, 58, 78, 78, 76, 40, 78, 38, 58, 58, 20 ], + "width": 104, + "height": 238 + } + }, + "sleeve-inner-back": { + "sleeve-inner-back": { + "name": "girl-blue-cape/sleeve-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 1, 131, 5.56, 15.9, 1, 2, 131, 88.56, 15.9, 0.93003, 83, 41.53, -33.45, 0.06997, 2, 131, 88.56, -41.1, 0.44316, 83, -15.47, -33.45, 0.55684, 2, 131, 5.56, -41.1, 0.60086, 83, -15.47, 49.55, 0.39914 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 83, + "height": 57 + } + }, + "sleeve-inner-front": { + "sleeve-inner-front": { + "name": "girl-blue-cape/sleeve-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 130, 91.43, -14.89, 1, 2, 130, 8.43, -14.88, 1, 12, 87.21, -32.83, 0, 2, 130, 8.42, 41.64, 0.34345, 12, 29.2, -33.4, 0.65655, 2, 130, 91.42, 41.63, 0.5791, 12, 28.35, 49.6, 0.4209 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 83, + "height": 57 + } + } + } + }, + { + "name": "clothes/dress-green", + "bones": [ "skirt-control-front-down", "skirt-control-up", "skirt-control-back-down", "skirt-control", "skirt-control-front", "skirt-control-back", "skirt-control-middle" ], + "attachments": { + "body-up": { + "body-up": { "name": "girl-spring-dress/body-up", "x": 59.16, "y": -14.67, "rotation": -94.33, "width": 128, "height": 131 } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "skirt": { + "skirt": { + "name": "girl-spring-dress/skirt", + "type": "mesh", + "uvs": [ 0.532, 0, 0.4709, 0, 0.41171, 0, 0.25323, 0.09671, 0.14058, 0.22113, 0.0623, 0.34554, 0, 0.45708, 6.0E-5, 0.78742, 0.1654, 0.88181, 0.31815, 1, 0.50526, 1, 0.68856, 1, 0.83749, 0.87752, 0.99236, 0.73165, 1, 0.41418, 0.9215, 0.29835, 0.84131, 0.18252, 0.72866, 0.06668, 0.6141, 0, 0.13103, 0.46995, 0.23796, 0.60724, 0.35252, 0.69733, 0.50336, 0.74023, 0.6561, 0.69733, 0.76875, 0.60724, 0.86613, 0.46137, 0.78212, 0.3198, 0.71338, 0.41418, 0.62555, 0.47424, 0.51672, 0.4914, 0.38498, 0.48711, 0.29906, 0.39702, 0.21695, 0.30264, 0.35443, 0.23399, 0.29524, 0.1868, 0.42507, 0.25973, 0.52818, 0.26832, 0.59309, 0.24257, 0.64083, 0.19967, 0.69429, 0.14819 ], + "triangles": [ 20, 31, 30, 30, 35, 29, 29, 36, 28, 29, 35, 36, 30, 31, 35, 36, 37, 28, 28, 37, 27, 38, 27, 37, 31, 33, 35, 31, 32, 33, 38, 39, 26, 32, 34, 33, 32, 4, 34, 0, 37, 36, 36, 35, 1, 36, 1, 0, 33, 2, 35, 35, 2, 1, 38, 0, 18, 38, 37, 0, 33, 34, 2, 4, 3, 34, 38, 18, 39, 34, 3, 2, 39, 18, 17, 12, 11, 23, 23, 24, 12, 12, 24, 13, 24, 25, 13, 13, 25, 14, 28, 27, 24, 24, 27, 25, 27, 26, 25, 25, 15, 14, 25, 26, 15, 26, 27, 38, 26, 16, 15, 26, 39, 16, 39, 17, 16, 23, 28, 24, 9, 22, 10, 23, 11, 22, 11, 10, 22, 9, 21, 22, 9, 8, 21, 23, 22, 29, 22, 21, 29, 29, 28, 23, 21, 30, 29, 21, 20, 30, 8, 20, 21, 8, 7, 20, 7, 19, 20, 7, 6, 19, 20, 19, 31, 6, 5, 19, 19, 32, 31, 19, 5, 32, 5, 4, 32 ], + "vertices": [ 1, 4, 17.29, -36.28, 1, 1, 4, 18.97, -14.1, 1, 1, 4, 20.6, 7.38, 1, 2, 110, 65.82, -89.43, 0.30593, 4, 9.32, 66.08, 0.69407, 2, 110, 45.66, -48.43, 0.65597, 4, -7.68, 108.49, 0.34403, 2, 110, 25.51, -19.93, 0.88973, 4, -25.63, 138.42, 0.11027, 1, 110, 7.44, 2.74, 1, 1, 110, -46.08, 2.72, 1, 3, 110, -61.37, -57.46, 0.25894, 105, 13.43, 107.85, 0.71, 4, -115.09, 107.55, 0.03106, 3, 110, -80.52, -113.06, 0.21204, 105, -5.71, 52.25, 0.72535, 4, -138.37, 53.55, 0.06261, 1, 105, -5.71, -15.86, 1, 3, 105, -5.71, -82.58, 0.58138, 109, -87.91, 109.6, 0.34368, 4, -148.54, -80.89, 0.07494, 3, 105, 14.13, -136.79, 0.26163, 109, -68.06, 55.39, 0.68053, 4, -132.84, -136.44, 0.05783, 2, 105, 37.76, -193.16, 0.24, 109, -44.43, -0.99, 0.76, 1, 109, 7, -3.77, 1, 2, 109, 25.76, 24.81, 0.90843, 4, -41.59, -174.01, 0.09157, 2, 109, 44.53, 54, 0.73242, 4, -20.68, -146.32, 0.26758, 2, 109, 63.29, 95, 0.45401, 4, 1.12, -106.85, 0.54599, 1, 4, 15.04, -66.08, 1, 3, 110, 5.35, -44.95, 0.6612, 105, 80.15, 120.36, 0.2, 4, -47.61, 114.99, 0.1388, 3, 110, -16.89, -83.87, 0.37019, 105, 57.91, 81.44, 0.45, 4, -72.73, 77.86, 0.17981, 3, 110, -31.48, -125.57, 0.18786, 105, 43.32, 39.74, 0.5858, 4, -90.42, 37.38, 0.22634, 3, 105, 36.37, -15.16, 0.75525, 109, -45.82, 177.01, 0.06474, 4, -101.5, -16.84, 0.18, 3, 105, 43.32, -70.76, 0.49637, 109, -38.87, 121.41, 0.31941, 4, -98.76, -72.81, 0.18423, 3, 105, 57.91, -111.77, 0.4, 109, -24.28, 80.41, 0.47496, 4, -87.3, -114.8, 0.12504, 3, 105, 81.54, -147.21, 0.16, 109, -0.65, 44.96, 0.74601, 4, -66.41, -151.92, 0.09399, 3, 105, 104.48, -116.63, 0.17, 109, 22.29, 75.54, 0.56301, 4, -41.23, -123.16, 0.26699, 3, 105, 89.19, -91.61, 0.24, 109, 7, 100.56, 0.43686, 4, -54.59, -97.06, 0.32314, 3, 105, 79.46, -59.64, 0.33142, 109, -2.73, 132.53, 0.26648, 4, -61.88, -64.45, 0.40211, 3, 105, 76.68, -20.03, 0.40588, 109, -5.51, 172.15, 0.09581, 4, -61.67, -24.73, 0.49831, 3, 110, 2.57, -137.39, 0.12845, 105, 77.37, 27.93, 0.35758, 4, -57.36, 23.03, 0.51397, 3, 110, 17.17, -106.11, 0.2437, 105, 91.97, 59.2, 0.31, 4, -40.45, 53.12, 0.4463, 3, 110, 32.46, -76.23, 0.46618, 105, 107.26, 89.09, 0.09047, 4, -22.95, 81.76, 0.44335, 3, 110, 43.58, -126.27, 0.11844, 105, 118.38, 39.05, 0.11, 4, -15.63, 31.03, 0.77156, 3, 110, 51.22, -104.72, 0.22926, 105, 126.02, 60.59, 0.0575, 4, -6.38, 51.94, 0.71324, 2, 105, 114.21, 13.33, 0.17, 4, -21.73, 5.7, 0.83, 3, 105, 112.82, -24.2, 0.14524, 109, 30.63, 167.98, 0.09502, 4, -25.94, -31.62, 0.75974, 3, 105, 116.99, -47.83, 0.14384, 109, 34.8, 144.35, 0.18939, 4, -23.57, -55.49, 0.66677, 3, 105, 123.94, -65.2, 0.09, 109, 41.75, 126.97, 0.28023, 4, -17.95, -73.34, 0.62977, 3, 105, 132.28, -84.66, 0.03, 109, 50.09, 107.51, 0.39568, 4, -11.1, -93.38, 0.57432 ], + "hull": 19, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 4, 2, 70, 2, 2, 0, 0, 36, 72, 0, 18, 20, 20, 22, 44, 20, 54, 76 ], + "width": 364, + "height": 162 + } + }, + "underskirt": { + "underskirt": { + "name": "girl-spring-dress/underskirt", + "type": "mesh", + "uvs": [ 0.13668, 0, 0, 0.11048, 0, 0.35349, 0, 0.5756, 0.07116, 0.76423, 0.25979, 0.94448, 0.46464, 1, 0.68672, 0.97656, 0.87735, 0.83221, 1, 0.55421, 1, 0.38798, 1, 0, 0.79052, 0.28923, 0.64716, 0.42987, 0.49934, 0.45979, 0.35819, 0.40892, 0.23815, 0.30419, 0.12923, 0.13064, 0.52712, 0.17253 ], + "triangles": [ 13, 14, 18, 15, 16, 18, 18, 0, 11, 17, 0, 18, 13, 18, 12, 14, 15, 18, 12, 18, 11, 9, 8, 12, 8, 13, 12, 12, 10, 9, 12, 11, 10, 7, 13, 8, 7, 6, 14, 6, 5, 14, 14, 13, 7, 5, 15, 14, 5, 4, 15, 16, 4, 3, 16, 15, 4, 3, 2, 16, 2, 17, 16, 2, 1, 17, 17, 1, 0, 16, 17, 18 ], + "vertices": [ 4, 111, 66.62, -34.12, 0.33917, 108, 115.67, 117.58, 0.06079, 112, 61.17, 280.19, 4.0E-5, 4, -32.12, 111.03, 0.6, 2, 111, 52.25, 13.72, 0.98771, 108, 101.3, 165.42, 0.01229, 2, 111, 20.66, 13.72, 0.99893, 108, 69.71, 165.42, 0.00107, 2, 111, -8.21, 13.72, 0.78, 108, 40.84, 165.42, 0.22, 2, 111, -37.4, -20.91, 0.53, 108, 11.65, 130.79, 0.47, 2, 111, -56.17, -77.21, 0.435, 108, -7.12, 74.49, 0.565, 3, 111, -63.38, -154.35, 0.00296, 108, -14.33, -2.65, 0.98871, 112, -68.83, 159.96, 0.00833, 2, 108, -11.29, -74.93, 0.61621, 112, -65.78, 87.68, 0.38379, 2, 108, 7.48, -141.65, 0.5, 112, -47.02, 20.96, 0.5, 2, 108, 43.62, -184.58, 0.24, 112, -10.88, -21.97, 0.76, 1, 112, 10.73, -21.97, 1, 3, 108, 115.67, -184.58, 7.6E-4, 112, 61.17, -21.97, 0.88924, 4, -54.9, -190.27, 0.11, 4, 111, 29.02, -262.96, 2.5E-4, 108, 78.07, -111.26, 0.4, 112, 23.57, 51.35, 0.49361, 4, -86.87, -114.32, 0.10614, 4, 111, 13.85, -221.73, 0.00648, 108, 62.89, -70.03, 0.45247, 112, 8.4, 92.58, 0.40105, 4, -98.89, -72.07, 0.14, 4, 111, 6.84, -166.5, 0.0591, 108, 55.89, -14.79, 0.67677, 112, 1.4, 147.82, 0.12413, 4, -101.7, -16.46, 0.14, 4, 111, 13.46, -111.65, 0.28006, 108, 62.51, 40.06, 0.56032, 112, 8.01, 202.67, 0.01962, 4, -90.97, 37.74, 0.14, 4, 111, 27.07, -69.63, 0.54438, 108, 76.12, 82.07, 0.31301, 112, 21.63, 244.68, 0.00262, 4, -74.23, 78.6, 0.14, 4, 111, 49.63, -31.51, 0.74734, 108, 98.68, 120.19, 0.11265, 112, 44.19, 282.8, 1.0E-5, 4, -48.86, 114.91, 0.14, 1, 4, -64.79, -23.54, 1 ], + "hull": 12, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 22, 16, 24, 18, 20, 20, 22, 12, 28, 10, 30, 8, 32, 14, 26, 2, 4, 4, 6, 32, 4 ], + "width": 350, + "height": 130 + } + } + } + }, + { + "name": "clothes/hoodie-blue-and-scarf", + "bones": [ "zip-girl", "scarf-back" ], + "attachments": { + "arm-back": { + "arm-back": { "name": "girl/arm-front", "type": "linkedmesh", "skin": "full-skins/boy", "parent": "arm-back", "width": 71, "height": 229 } + }, + "body": { + "body": { + "name": "girl/body", + "type": "mesh", + "uvs": [ 0.59765, 0.99752, 0.42922, 1, 0.24876, 0.98569, 0.06428, 0.94872, 0.0322, 0.85553, 0.00613, 0.83483, 1.2E-4, 0.73129, 1.2E-4, 0.59965, 0.01215, 0.45174, 0.02217, 0.28165, 0.04624, 0.09676, 0.26881, 0, 0.59565, 0, 0.78012, 0.03908, 0.86835, 0.20473, 0.94053, 0.37187, 0.99066, 0.5257, 1, 0.64846, 1, 0.74608, 0.97663, 0.85405, 0.94455, 0.93392, 0.8102, 0.97682, 0.66583, 0.999, 0.27282, 0.87328, 0.44526, 0.88807, 0.58362, 0.88659, 0.66984, 0.88364, 0.81221, 0.8718, 0.94053, 0.8363, 0.61771, 0.76383, 0.71395, 0.75939, 0.26079, 0.7446, 0.95457, 0.70023, 0.96259, 0.76235, 0.61169, 0.64107, 0.58963, 0.51386, 0.54953, 0.37039, 0.64979, 0.35412, 0.6939, 0.50203, 0.71796, 0.63367, 0.26079, 0.53605, 0.2668, 0.3911, 0.85431, 0.31714, 0.93051, 0.4902, 0.42722, 0.12634, 0.54351, 0.11303, 0.49539, 0.24171, 0.59966, 0.221, 0.74202, 0.09676, 0.80218, 0.20473, 0.23071, 0.15001, 0.08634, 0.16924, 0.08233, 0.27721, 0.06428, 0.45174, 0.05225, 0.60409, 0.0703, 0.73425, 0.48183, 0.51247, 0.79828, 0.48323, 0.745, 0.43772 ], + "triangles": [ 17, 32, 43, 17, 43, 16, 32, 17, 18, 30, 34, 39, 33, 32, 18, 29, 34, 30, 32, 39, 57, 29, 31, 34, 5, 6, 55, 30, 32, 33, 32, 30, 39, 33, 27, 30, 19, 33, 18, 28, 33, 19, 4, 5, 55, 28, 27, 33, 31, 24, 23, 26, 29, 30, 26, 30, 27, 31, 29, 24, 25, 29, 26, 29, 25, 24, 20, 28, 19, 27, 28, 20, 4, 23, 3, 55, 23, 4, 31, 23, 55, 21, 26, 27, 21, 27, 20, 2, 3, 23, 0, 25, 26, 22, 0, 26, 21, 22, 26, 1, 23, 24, 2, 23, 1, 0, 1, 24, 0, 24, 25, 32, 57, 43, 42, 14, 15, 57, 42, 15, 31, 54, 40, 58, 37, 42, 57, 58, 42, 38, 37, 58, 38, 58, 57, 35, 36, 37, 35, 37, 38, 56, 36, 35, 43, 15, 16, 7, 8, 54, 39, 38, 57, 34, 35, 38, 34, 38, 39, 6, 7, 54, 31, 55, 54, 6, 54, 55, 56, 35, 34, 34, 31, 56, 43, 57, 15, 37, 49, 42, 48, 12, 13, 12, 44, 11, 45, 12, 48, 45, 44, 12, 50, 10, 11, 50, 11, 44, 51, 10, 50, 14, 49, 13, 48, 13, 49, 47, 45, 48, 47, 48, 49, 46, 44, 45, 46, 45, 47, 51, 9, 10, 52, 9, 51, 42, 49, 14, 37, 47, 49, 36, 46, 47, 36, 47, 37, 46, 41, 50, 46, 50, 44, 41, 46, 36, 52, 51, 50, 41, 52, 50, 53, 9, 52, 53, 52, 41, 8, 9, 53, 56, 41, 36, 40, 53, 41, 40, 41, 56, 54, 53, 40, 31, 40, 56, 54, 8, 53 ], + "vertices": [ 1, 2, 28.17, -64.12, 1, 1, 2, -4.5, -64.91, 1, 1, 2, -39.53, -61.29, 1, 1, 2, -75.35, -51.72, 1, 2, 3, -22.36, 79.55, 0.14323, 2, -81.68, -27.24, 0.85677, 2, 3, -16.73, 84.4, 0.19154, 2, -86.76, -21.81, 0.80846, 2, 3, 10.53, 84.54, 0.53301, 2, -88.04, 5.41, 0.46699, 2, 4, -18.75, 81.95, 0.21, 3, 45.12, 83.25, 0.79, 2, 4, 19.88, 76.85, 0.63, 3, 83.91, 79.46, 0.37, 1, 4, 64.36, 71.73, 1, 1, 4, 112.53, 63.61, 1, 1, 4, 134.84, 18.72, 1, 1, 4, 130.32, -44.52, 1, 2, 4, 117.52, -79.49, 0.86136, 3, 186.78, -73.49, 0.13864, 2, 4, 72.85, -93.46, 0.64743, 3, 142.61, -88.96, 0.35257, 3, 4, 28, -104.29, 0.26062, 3, 98.16, -101.31, 0.60938, 2, 94, 100.7, 0.13, 3, 4, -13.04, -111.11, 0.15, 3, 57.36, -109.51, 0.44607, 2, 103.9, 60.29, 0.40393, 3, 4, -45.38, -110.62, 0.11, 3, 25.03, -110.11, 0.28777, 2, 105.84, 28.01, 0.60223, 3, 4, -70.99, -108.79, 0.04, 3, -0.62, -109.15, 0.15795, 2, 105.95, 2.33, 0.80205, 1, 2, 101.54, -26.08, 1, 1, 2, 95.4, -47.11, 1, 1, 2, 69.38, -58.5, 1, 1, 2, 41.4, -64.45, 1, 1, 2, -34.98, -31.71, 1, 1, 2, -1.51, -35.46, 1, 1, 2, 25.33, -34.96, 1, 1, 2, 42.05, -34.11, 1, 1, 2, 69.66, -30.88, 1, 1, 2, 94.51, -21.44, 1, 1, 2, 31.81, -2.64, 1, 1, 2, 50.47, -1.4, 1, 2, 3, 5.13, 34.14, 0.47225, 2, -37.46, 2.12, 0.52775, 3, 4, -58.33, -100.86, 0.09, 3, 11.76, -100.8, 0.21274, 2, 97.09, 14.36, 0.69726, 3, 4, -74.74, -101.25, 0.05, 3, -4.63, -101.74, 0.13139, 2, 98.71, -1.97, 0.81861, 3, 4, -38.07, -35.62, 0.12, 3, 29.8, -34.91, 0.46014, 2, 30.5, 29.64, 0.41986, 3, 4, -4.4, -33.73, 0.32, 3, 63.39, -31.88, 0.5848, 2, 26.08, 63.07, 0.0952, 2, 4, 33.79, -28.66, 0.53, 3, 101.38, -25.52, 0.47, 2, 4, 36.68, -48.36, 0.50575, 3, 104.93, -45.12, 0.49425, 3, 4, -2.73, -54.13, 0.32, 3, 65.74, -52.21, 0.578, 2, 46.3, 66.27, 0.102, 3, 4, -37.6, -56.32, 0.12, 3, 30.97, -55.58, 0.4488, 2, 51.11, 31.67, 0.4312, 1, 4, -5.67, 30.32, 1, 1, 4, 32.27, 26.44, 1, 3, 4, 43.55, -88.63, 0.42337, 3, 113.17, -85.13, 0.53663, 2, 77.21, 115.03, 0.04, 3, 4, -2.9, -100.14, 0.24, 3, 67.13, -98.2, 0.4463, 2, 92.19, 69.57, 0.3137, 1, 4, 99.51, -9.56, 1, 1, 4, 101.39, -32.32, 1, 2, 4, 68.3, -20.59, 0.85, 3, 135.6, -16.29, 0.15, 2, 4, 72.29, -41.16, 0.83269, 3, 140.28, -36.71, 0.16731, 2, 4, 102.92, -71.03, 0.84329, 3, 171.9, -65.53, 0.15671, 2, 4, 73.76, -80.65, 0.68178, 3, 143.09, -76.13, 0.31822, 1, 4, 96.01, 28.91, 1, 1, 4, 92.97, 57.2, 1, 1, 4, 64.7, 60, 1, 2, 4, 19.16, 66.76, 0.69519, 3, 83.53, 69.35, 0.30481, 2, 4, -20.64, 71.95, 0.21, 3, 43.58, 73.18, 0.79, 2, 3, 9.24, 70.97, 0.46736, 2, -74.42, 4.69, 0.53264, 2, 4, -2.54, -12.9, 0.39471, 3, 64.54, -11, 0.60529, 3, 4, 0.76, -74.68, 0.37, 3, 69.92, -72.63, 0.47153, 2, 66.53, 71.3, 0.15847, 3, 4, 13.43, -65.22, 0.37172, 3, 82.27, -62.75, 0.51471, 2, 56.14, 83.22, 0.11357 ], + "hull": 23, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 0, 44, 58, 62 ], + "width": 194, + "height": 263 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "scarf": { + "scarf": { + "name": "girl/scarf", + "type": "mesh", + "uvs": [ 0, 0.69166, 0.08052, 0.80607, 0.18349, 0.90523, 0.29463, 0.96243, 0.44173, 1, 0.5921, 0.99676, 0.69655, 0.96098, 0.81649, 0.89046, 0.92984, 0.74335, 0.98437, 0.67259, 1, 0.62301, 1, 0.43614, 0.987, 0.34894, 0.95168, 0.11197, 0.8389, 0.11579, 0.75309, 0.14439, 0.66045, 0.15555, 0.57902, 0.16537, 0.46625, 0.11579, 0.37308, 0.07002, 0.28482, 0.02426, 0.20473, 0, 0.09849, 0.02044, 0.056, 0.3408, 0, 0.51623, 0.2505, 0.51241, 0.45971, 0.56199, 0.6444, 0.52385, 0.85198, 0.46283, 0.15733, 0.43995, 0.3453, 0.53148, 0.54797, 0.54292, 0.74737, 0.5086, 0.26684, 0.42851, 0.3506, 0.44336, 0.46122, 0.45875, 0.16878, 0.36367, 0.94187, 0.40181 ], + "triangles": [ 32, 15, 28, 28, 15, 37, 27, 31, 17, 31, 35, 17, 27, 16, 32, 32, 16, 15, 37, 15, 14, 18, 35, 34, 34, 33, 19, 12, 14, 13, 12, 37, 14, 23, 22, 36, 33, 36, 20, 27, 17, 16, 17, 35, 18, 18, 34, 19, 19, 33, 20, 36, 21, 20, 36, 22, 21, 28, 37, 11, 30, 25, 34, 30, 34, 35, 34, 25, 33, 24, 23, 29, 25, 29, 33, 29, 36, 33, 29, 23, 36, 37, 12, 11, 5, 4, 26, 4, 3, 26, 6, 5, 31, 5, 26, 31, 26, 3, 30, 31, 27, 6, 7, 27, 32, 7, 6, 27, 3, 2, 30, 30, 1, 25, 30, 2, 1, 7, 32, 8, 29, 25, 1, 9, 8, 28, 28, 8, 32, 24, 29, 0, 0, 29, 1, 9, 28, 10, 10, 28, 11, 26, 35, 31, 26, 30, 35 ], + "vertices": [ 1, 4, 101.59, 148.9, 1, 1, 4, 88.51, 130.67, 1, 1, 4, 76.57, 106.99, 1, 1, 4, 68.76, 81.06, 1, 1, 4, 62.3, 46.43, 1, 1, 4, 59.93, 10.72, 1, 1, 4, 61.69, -14.34, 1, 1, 4, 66.71, -43.35, 1, 1, 4, 79.64, -71.38, 1, 1, 4, 85.86, -84.86, 1, 1, 4, 90.62, -88.96, 1, 2, 4, 111.53, -90.22, 0.68, 5, 12.11, -93.3, 0.32, 2, 4, 120.59, -87.62, 0.68, 5, 21.19, -90.81, 0.32, 1, 5, 49.45, -81.99, 1, 1, 5, 49.69, -55.15, 1, 1, 5, 47.25, -34.67, 1, 1, 5, 46.62, -12.6, 1, 1, 5, 46.07, 6.8, 1, 1, 5, 51.76, 33.52, 1, 1, 5, 56.94, 55.57, 1, 1, 5, 62.1, 76.47, 1, 1, 5, 65.02, 95.46, 1, 1, 5, 63.52, 120.79, 1, 2, 4, 133.66, 133.75, 0.68, 5, 36.73, 130.17, 0.32, 2, 4, 118.16, 147.77, 0.86, 5, 21.41, 144.43, 0.14, 2, 4, 113.61, 88.46, 0.68, 5, 16.19, 85.15, 0.32, 2, 4, 105.87, 38.97, 0.71, 5, 7.91, 35.81, 0.29, 2, 4, 107.27, -5.15, 0.68, 5, 8.8, -8.29, 0.32, 2, 4, 110.76, -54.86, 0.68, 5, 11.73, -57.98, 0.32, 2, 4, 122.22, 110.21, 0.68, 5, 25.04, 106.78, 0.32, 2, 4, 110.42, 66.02, 0.68, 5, 12.75, 62.78, 0.32, 2, 4, 106.59, 17.89, 0.68, 5, 8.39, 14.74, 0.32, 2, 4, 107.47, -29.73, 0.68, 5, 8.73, -32.84, 0.32, 2, 4, 121.95, 84.1, 0.68, 5, 24.47, 80.7, 0.32, 2, 4, 119.33, 64.26, 0.68, 5, 21.64, 60.92, 0.32, 2, 4, 116.31, 38.04, 0.68, 5, 18.32, 34.76, 0.32, 2, 4, 129.85, 107.06, 0.68, 5, 32.62, 103.55, 0.32, 2, 4, 115.79, -76.59, 0.68, 5, 16.52, -79.73, 0.32 ], + "hull": 25, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 18, 20, 20, 22, 26, 28, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 2, 58, 6, 60, 14, 64, 10, 12, 12, 14, 14, 16, 16, 18, 16, 56, 28, 30, 64, 30, 30, 32, 32, 34, 54, 32, 50, 66, 38, 68, 68, 60, 36, 70, 70, 52, 66, 40, 22, 24, 24, 26, 74, 24, 62, 34 ], + "width": 238, + "height": 102 + } + }, + "scarf-back": { + "scarf-back": { "name": "girl/scarf-back", "x": 46.88, "y": 3.26, "rotation": 177.98, "width": 143, "height": 102 } + }, + "sleeve-front": { + "sleeve-front": { "name": "girl/arm-front", "type": "linkedmesh", "skin": "full-skins/boy", "parent": "sleeve-front", "width": 71, "height": 229 } + }, + "zip-girl": { + "zip-girl": { "name": "girl/zip", "x": 19.66, "y": 3.69, "rotation": 80.66, "width": 37, "height": 49 } + } + } + }, + { + "name": "clothes/hoodie-orange", + "bones": [ "zip-boy" ], + "attachments": { + "arm-back": { + "arm-back": { + "name": "boy/arm-front", + "type": "mesh", + "uvs": [ 0, 0.9983, 1, 1, 1, 0.86682, 0.93575, 0.85962, 0.92543, 0.81301, 0.91517, 0.75475, 0.90967, 0.69766, 0.90374, 0.64195, 0.89852, 0.59071, 0.89321, 0.53993, 0.88593, 0.48173, 0.87995, 0.43392, 0.87387, 0.38539, 0.86778, 0.33662, 0.86019, 0.276, 0.85262, 0.21542, 0.84443, 0.15001, 0.83706, 0.09104, 0.82567, 0, 0.20656, 4.9E-4, 0.19476, 0.09288, 0.18669, 0.15618, 0.17892, 0.21703, 0.17122, 0.27738, 0.16365, 0.33672, 0.15684, 0.39004, 0.15032, 0.44113, 0.14396, 0.49098, 0.13775, 0.53965, 0.13226, 0.59099, 0.12603, 0.6493, 0.11997, 0.7051, 0.11515, 0.75592, 0.10543, 0.80835, 0.09698, 0.85907, 0.00989, 0.86774, 0.51288, 0.08992, 0.5068, 0.53843, 0.50952, 0.33772, 0.50435, 0.75817, 0.50554, 0.64894, 0.50328, 0.81283, 0.50817, 0.43751, 0.51115, 0.2178, 0.51199, 0.156, 0.51033, 0.27832, 0.50881, 0.38996, 0.50751, 0.48617, 0.50614, 0.59548, 0.5049, 0.70471, 0.50929, 0.85256 ], + "triangles": [ 3, 2, 1, 50, 3, 1, 0, 35, 34, 50, 0, 34, 0, 50, 1, 50, 4, 3, 34, 33, 50, 23, 22, 45, 45, 15, 14, 38, 23, 45, 24, 23, 38, 38, 45, 14, 38, 14, 13, 46, 24, 38, 46, 38, 13, 46, 13, 12, 25, 24, 46, 42, 25, 46, 42, 46, 12, 42, 12, 11, 26, 25, 42, 47, 26, 42, 47, 42, 11, 47, 11, 10, 27, 26, 47, 37, 27, 47, 37, 47, 10, 28, 27, 37, 9, 37, 10, 48, 28, 37, 29, 28, 48, 48, 37, 9, 48, 9, 8, 40, 29, 48, 40, 48, 8, 40, 8, 7, 30, 29, 40, 49, 30, 40, 49, 40, 7, 49, 7, 6, 31, 30, 49, 39, 31, 49, 32, 31, 39, 39, 49, 6, 39, 6, 5, 41, 32, 39, 33, 32, 41, 41, 39, 5, 4, 41, 5, 50, 41, 4, 33, 41, 50, 44, 17, 16, 21, 20, 44, 43, 21, 44, 22, 21, 43, 43, 44, 16, 43, 16, 15, 45, 22, 43, 45, 43, 15, 44, 36, 17, 44, 20, 36, 36, 19, 18, 36, 18, 17, 20, 19, 36 ], + "vertices": [ 1, 83, 30.3, -36.41, 1, 1, 83, 30.3, 34.59, 1, 1, 83, -0.09, 34.58, 1, 1, 83, -1.73, 30.02, 1, 3, 89, -1.79, 29.7, 0.51485, 88, 31.72, 29.7, 0.47152, 87, 64.98, 29.54, 0.01363, 3, 89, -14.92, 28.81, 0.16761, 88, 18.24, 28.84, 0.7202, 87, 51.66, 28.75, 0.11219, 3, 89, -27.79, 28.25, 0.02494, 88, 5.03, 28.32, 0.58139, 87, 38.61, 28.29, 0.39367, 4, 89, -40.37, 27.67, 3.1E-4, 88, -7.89, 27.77, 0.24325, 87, 25.85, 27.81, 0.73664, 86, 59.61, 27.66, 0.0198, 3, 88, -19.79, 27.28, 0.05132, 87, 14.09, 27.38, 0.81519, 86, 47.8, 27.3, 0.1335, 4, 88, -31.58, 26.79, 0.00265, 87, 2.43, 26.95, 0.57933, 86, 36.09, 26.94, 0.41791, 85, 69.67, 26.87, 1.1E-4, 3, 87, -10.9, 26.37, 0.1986, 86, 22.7, 26.43, 0.77283, 85, 56.26, 26.39, 0.02857, 3, 87, -21.85, 25.89, 0.03954, 86, 11.7, 26.02, 0.79423, 85, 45.25, 26, 0.16624, 4, 84, 66.95, 25.61, 2.5E-4, 87, -32.97, 25.41, 0.0015, 86, 0.53, 25.6, 0.51564, 85, 34.07, 25.6, 0.48261, 3, 84, 55.91, 25.21, 0.02493, 86, -10.7, 25.18, 0.18302, 85, 22.83, 25.2, 0.79205, 3, 84, 42.17, 24.71, 0.22892, 86, -24.67, 24.66, 0.01383, 85, 8.85, 24.71, 0.75725, 2, 84, 28.46, 24.21, 0.68211, 85, -5.12, 24.22, 0.31789, 2, 84, 13.66, 23.68, 0.96794, 85, -20.18, 23.68, 0.03206, 1, 84, 0.32, 23.19, 1, 1, 84, -20.28, 22.44, 1, 1, 84, -20.3, -21.51, 1, 1, 84, 0.6, -22.41, 1, 2, 84, 14.92, -23.03, 0.96207, 85, -18.91, -23.02, 0.03793, 2, 84, 28.69, -23.62, 0.67642, 85, -4.9, -23.62, 0.32358, 3, 84, 42.34, -24.21, 0.2106, 86, -24.41, -24.26, 0.01717, 85, 9.01, -24.21, 0.77223, 3, 84, 55.78, -24.78, 0.0197, 86, -10.74, -24.81, 0.18482, 85, 22.69, -24.79, 0.79548, 3, 87, -31.67, -25.49, 0.00253, 86, 1.54, -25.31, 0.54183, 85, 34.98, -25.31, 0.45564, 3, 87, -19.96, -25.9, 0.05261, 86, 13.3, -25.78, 0.80433, 85, 46.75, -25.81, 0.14306, 3, 87, -8.53, -26.3, 0.24883, 86, 24.77, -26.25, 0.73011, 85, 58.23, -26.3, 0.02106, 4, 88, -31.1, -26.85, 0.00529, 87, 2.63, -26.69, 0.57957, 86, 35.97, -26.7, 0.41477, 85, 69.44, -26.77, 3.7E-4, 3, 88, -19.17, -27.12, 0.06823, 87, 14.41, -27.02, 0.80427, 86, 47.8, -27.1, 0.1275, 4, 89, -38.03, -27.52, 0, 88, -5.62, -27.43, 0.32888, 87, 27.8, -27.4, 0.65921, 86, 61.24, -27.56, 0.01191, 3, 89, -25.42, -27.79, 0.02186, 88, 7.33, -27.73, 0.68409, 87, 40.58, -27.77, 0.29405, 3, 89, -13.96, -27.99, 0.14597, 88, 19.09, -27.95, 0.77839, 87, 52.2, -28.05, 0.07563, 3, 89, -2.13, -28.53, 0.457, 88, 31.23, -28.52, 0.53645, 87, 64.19, -28.69, 0.00655, 1, 83, -1.86, -29.53, 1, 1, 83, 0.13, -35.71, 1, 1, 84, 0, 0.18, 1, 2, 87, 2.22, -0.49, 0.93037, 86, 35.72, -0.5, 0.06963, 2, 86, -10.48, -0.25, 2.1E-4, 85, 23, -0.23, 0.99979, 1, 88, 19.33, -0.32, 1, 1, 87, 27.58, -0.45, 1, 2, 89, -1.47, -0.27, 0.18486, 88, 31.98, -0.27, 0.81514, 2, 86, 12.49, -0.38, 0.99961, 85, 45.99, -0.4, 3.9E-4, 2, 84, 28.93, -0.03, 0.99759, 85, -4.64, -0.03, 0.00241, 1, 84, 14.95, 0.07, 1, 2, 84, 42.63, -0.13, 2.9E-4, 85, 9.31, -0.13, 0.99971, 2, 86, 1.55, -0.32, 0.82986, 85, 35.04, -0.32, 0.17014, 1, 86, 23.69, -0.43, 1, 1, 87, 15.31, -0.47, 1, 1, 88, 6.95, -0.4, 1, 1, 83, -3.3, -0.26, 1 ], + "hull": 36, + "edges": [ 0, 2, 2, 4, 36, 38, 0, 70, 68, 70, 4, 6, 34, 36, 72, 34, 38, 40, 72, 40, 74, 56, 74, 18, 76, 48, 76, 26, 78, 64, 78, 10, 80, 60, 80, 14, 82, 78, 64, 66, 82, 66, 8, 10, 82, 8, 84, 52, 84, 22, 86, 44, 86, 30, 72, 88, 88, 86, 40, 42, 42, 44, 88, 42, 30, 32, 32, 34, 88, 32, 76, 90, 90, 86, 44, 46, 46, 48, 90, 46, 26, 28, 28, 30, 90, 28, 76, 92, 92, 84, 48, 50, 50, 52, 92, 50, 22, 24, 24, 26, 92, 24, 74, 94, 94, 84, 52, 54, 54, 56, 94, 54, 18, 20, 20, 22, 94, 20, 74, 96, 96, 80, 56, 58, 58, 60, 96, 58, 14, 16, 16, 18, 96, 16, 78, 98, 98, 80, 60, 62, 62, 64, 98, 62, 10, 12, 12, 14, 98, 12, 66, 68, 6, 8 ], + "width": 71, + "height": 229 + } + }, + "body": { + "body": { "name": "boy/body", "type": "linkedmesh", "skin": "full-skins/girl", "parent": "body", "width": 194, "height": 263 } + }, + "collar": { + "collar": { + "name": "boy/collar", + "type": "mesh", + "uvs": [ 0.01507, 0.35374, 0.04243, 0.85436, 0.34348, 0.9329, 0.60063, 1, 0.7225, 0.99194, 0.8843, 0.75701, 1, 0.58901, 0.9885, 0.2137, 0.98194, 0, 0.82711, 0.02581, 0.63208, 0.05832, 0.54167, 0.04849, 0.29801, 0.06176, 0, 0.07798, 0.31391, 0.36632, 0.55976, 0.34041, 0.66022, 0.3489, 0.84942, 0.31117 ], + "triangles": [ 0, 12, 14, 15, 12, 11, 15, 14, 12, 0, 13, 12, 17, 16, 10, 16, 15, 10, 15, 11, 10, 10, 9, 17, 17, 9, 7, 9, 8, 7, 16, 4, 3, 16, 5, 4, 15, 16, 3, 2, 15, 3, 1, 14, 2, 2, 14, 15, 1, 0, 14, 6, 5, 17, 17, 5, 16, 17, 7, 6 ], + "vertices": [ 2, 4, 130.93, 66.36, 0.35519, 5, 33.21, 62.82, 0.64481, 1, 4, 103.81, 63.13, 1, 1, 4, 96.28, 19.92, 1, 1, 4, 89.85, -16.98, 1, 1, 4, 88.98, -34.64, 1, 1, 4, 100.8, -59.06, 1, 1, 4, 109.25, -76.52, 1, 2, 4, 134.32, -75.26, 0.36282, 5, 35.01, -78.53, 0.63718, 1, 5, 49.23, -77.07, 1, 1, 5, 48.26, -54.59, 1, 1, 5, 47.04, -26.28, 1, 1, 5, 47.91, -13.18, 1, 1, 5, 47.97, 22.16, 1, 1, 5, 48.04, 65.38, 1, 2, 4, 128.8, 23.01, 0.34961, 5, 30.6, 19.59, 0.65039, 2, 4, 129.22, -12.66, 0.3068, 5, 30.61, -16, 0.6932, 2, 4, 128.25, -27.24, 0.31124, 5, 29.49, -30.54, 0.68876, 2, 4, 129.27, -54.92, 0.39025, 5, 30.2, -58.19, 0.60975 ], + "hull": 14, + "edges": [ 6, 8, 20, 22, 2, 4, 4, 6, 22, 24, 24, 26, 8, 10, 10, 12, 16, 18, 18, 20, 4, 28, 28, 24, 6, 30, 30, 22, 8, 32, 32, 20, 10, 34, 34, 18, 2, 0, 0, 26, 28, 0, 12, 14, 14, 16, 34, 14 ], + "width": 145, + "height": 58 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "sleeve-front": { + "sleeve-front": { + "name": "boy/arm-front", + "type": "mesh", + "uvs": [ 0, 0.9983, 1, 1, 1, 0.86682, 0.93575, 0.85962, 0.92543, 0.81301, 0.91517, 0.75475, 0.90967, 0.69766, 0.90374, 0.64195, 0.89852, 0.59071, 0.89321, 0.53993, 0.88593, 0.48173, 0.87995, 0.43392, 0.87387, 0.38539, 0.86778, 0.33662, 0.86019, 0.276, 0.85262, 0.21542, 0.84443, 0.15001, 0.83706, 0.09104, 0.82567, 0, 0.20656, 4.9E-4, 0.19476, 0.09288, 0.18669, 0.15618, 0.17892, 0.21703, 0.17122, 0.27738, 0.16365, 0.33672, 0.15684, 0.39004, 0.15032, 0.44113, 0.14396, 0.49098, 0.13775, 0.53965, 0.13226, 0.59099, 0.12603, 0.6493, 0.11997, 0.7051, 0.11515, 0.75592, 0.10543, 0.80835, 0.09698, 0.85907, 0.00989, 0.86774, 0.51288, 0.08992, 0.5068, 0.53843, 0.50952, 0.33772, 0.50435, 0.75817, 0.50554, 0.64894, 0.50328, 0.81283, 0.50817, 0.43751, 0.51115, 0.2178, 0.51199, 0.156, 0.51033, 0.27832, 0.50881, 0.38996, 0.50751, 0.48617, 0.50614, 0.59548, 0.5049, 0.70471, 0.50929, 0.85256 ], + "triangles": [ 0, 50, 1, 50, 0, 34, 0, 35, 34, 34, 33, 50, 50, 3, 1, 50, 4, 3, 3, 2, 1, 44, 36, 17, 44, 20, 36, 20, 19, 36, 36, 18, 17, 36, 19, 18, 33, 41, 50, 50, 41, 4, 4, 41, 5, 41, 39, 5, 33, 32, 41, 41, 32, 39, 39, 6, 5, 39, 49, 6, 32, 31, 39, 39, 31, 49, 31, 30, 49, 49, 7, 6, 49, 40, 7, 49, 30, 40, 30, 29, 40, 40, 8, 7, 40, 48, 8, 40, 29, 48, 48, 9, 8, 48, 37, 9, 29, 28, 48, 48, 28, 37, 9, 37, 10, 28, 27, 37, 37, 47, 10, 37, 27, 47, 27, 26, 47, 47, 11, 10, 47, 42, 11, 47, 26, 42, 26, 25, 42, 42, 12, 11, 42, 46, 12, 42, 25, 46, 25, 24, 46, 46, 13, 12, 46, 38, 13, 46, 24, 38, 38, 14, 13, 38, 45, 14, 24, 23, 38, 38, 23, 45, 45, 15, 14, 23, 22, 45, 45, 43, 15, 45, 22, 43, 43, 16, 15, 43, 44, 16, 22, 21, 43, 43, 21, 44, 21, 20, 44, 44, 17, 16 ], + "vertices": [ 1, 54, 30.3, -36.41, 1, 1, 54, 30.3, 34.59, 1, 1, 54, -0.09, 34.58, 1, 1, 54, -1.73, 30.02, 1, 3, 13, 65.08, 29.54, 0.00868, 12, 31.72, 29.7, 0.54327, 16, -1.8, 29.7, 0.44805, 3, 13, 51.72, 28.75, 0.09476, 12, 18.24, 28.84, 0.78295, 16, -14.97, 28.81, 0.12229, 4, 14, 72.39, 28.06, 1.0E-5, 13, 38.62, 28.29, 0.36416, 12, 5.03, 28.32, 0.62452, 16, -27.87, 28.25, 0.01131, 3, 14, 59.57, 27.66, 0.01697, 13, 25.84, 27.81, 0.71378, 12, -7.87, 27.77, 0.26925, 3, 14, 47.78, 27.3, 0.12736, 13, 14.09, 27.38, 0.81039, 12, -19.73, 27.28, 0.06225, 4, 15, 69.71, 26.86, 1.9E-4, 14, 36.09, 26.94, 0.41186, 13, 2.44, 26.95, 0.58392, 12, -31.48, 26.79, 0.00403, 3, 15, 56.29, 26.39, 0.03436, 14, 22.7, 26.43, 0.7688, 13, -10.92, 26.37, 0.19684, 3, 15, 45.26, 26, 0.17991, 14, 11.7, 26.02, 0.78189, 13, -21.89, 25.89, 0.03821, 4, 11, 66.92, 25.61, 4.0E-5, 15, 34.07, 25.6, 0.49682, 14, 0.53, 25.6, 0.5018, 13, -33.02, 25.41, 0.00134, 3, 11, 55.89, 25.21, 0.02124, 15, 22.83, 25.2, 0.80075, 14, -10.69, 25.18, 0.17801, 3, 11, 42.17, 24.71, 0.21905, 15, 8.85, 24.71, 0.76696, 14, -24.64, 24.66, 0.01399, 2, 11, 28.46, 24.21, 0.67585, 15, -5.12, 24.22, 0.32415, 2, 11, 13.66, 23.68, 0.96846, 15, -20.2, 23.68, 0.03154, 1, 8, 0.24, 23.24, 1, 1, 8, -20.51, 22.43, 1, 1, 8, -20.4, -21.52, 1, 1, 8, 0.66, -22.36, 1, 2, 11, 14.92, -23.03, 0.9591, 15, -18.93, -23.02, 0.0409, 2, 11, 28.69, -23.62, 0.67055, 15, -4.9, -23.62, 0.32945, 3, 11, 42.34, -24.21, 0.20785, 15, 9.01, -24.21, 0.77749, 14, -24.38, -24.26, 0.01467, 3, 11, 55.76, -24.78, 0.01896, 15, 22.69, -24.79, 0.80223, 14, -10.73, -24.81, 0.17882, 3, 15, 34.98, -25.31, 0.45683, 14, 1.54, -25.31, 0.5408, 13, -31.71, -25.5, 0.00238, 3, 15, 46.76, -25.81, 0.14032, 14, 13.3, -25.78, 0.80693, 13, -19.98, -25.9, 0.05275, 3, 15, 58.25, -26.3, 0.01945, 14, 24.77, -26.25, 0.7308, 13, -8.54, -26.3, 0.24975, 4, 15, 69.47, -26.77, 2.7E-4, 14, 35.97, -26.7, 0.41316, 13, 2.63, -26.69, 0.58179, 12, -31, -26.85, 0.00478, 3, 14, 47.78, -27.1, 0.12648, 13, 14.41, -27.02, 0.80795, 12, -19.11, -27.12, 0.06558, 3, 14, 61.2, -27.56, 0.01164, 13, 27.79, -27.4, 0.6672, 12, -5.6, -27.43, 0.32116, 3, 13, 40.6, -27.77, 0.30828, 12, 7.32, -27.73, 0.67545, 16, -25.51, -27.79, 0.01627, 3, 13, 52.26, -28.05, 0.08696, 12, 19.09, -27.95, 0.78468, 16, -14, -27.99, 0.12837, 3, 13, 64.29, -28.69, 0.00978, 12, 31.24, -28.52, 0.56264, 16, -2.14, -28.53, 0.42759, 1, 54, -1.86, -29.53, 1, 1, 54, 0.13, -35.71, 1, 1, 8, -0.01, 0.23, 1, 2, 14, 35.72, -0.5, 0.06656, 13, 2.22, -0.49, 0.93344, 1, 15, 23, -0.23, 1, 2, 13, 52.64, -0.42, 0, 12, 19.33, -0.32, 1, 1, 13, 27.58, -0.45, 1, 2, 12, 31.99, -0.27, 0.81958, 16, -1.47, -0.27, 0.18042, 2, 14, 12.49, -0.38, 1, 13, -20.94, -0.5, 0, 1, 11, 28.93, -0.03, 1, 1, 11, 14.95, 0.07, 1, 1, 15, 9.31, -0.13, 1, 2, 15, 35.04, -0.32, 0.18244, 14, 1.55, -0.32, 0.81756, 1, 14, 23.69, -0.44, 1, 1, 13, 15.31, -0.47, 1, 2, 13, 40.38, -0.44, 7.7E-4, 12, 6.95, -0.4, 0.99923, 1, 54, -3.3, -0.26, 1 ], + "hull": 36, + "edges": [ 0, 2, 2, 4, 36, 38, 0, 70, 68, 70, 4, 6, 34, 36, 72, 34, 38, 40, 72, 40, 74, 56, 74, 18, 76, 48, 76, 26, 78, 64, 78, 10, 80, 60, 80, 14, 82, 78, 64, 66, 82, 66, 8, 10, 82, 8, 84, 52, 84, 22, 86, 44, 86, 30, 72, 88, 88, 86, 40, 42, 42, 44, 88, 42, 30, 32, 32, 34, 88, 32, 76, 90, 90, 86, 44, 46, 46, 48, 90, 46, 26, 28, 28, 30, 90, 28, 76, 92, 92, 84, 48, 50, 50, 52, 92, 50, 22, 24, 24, 26, 92, 24, 74, 94, 94, 84, 52, 54, 54, 56, 94, 54, 18, 20, 20, 22, 94, 20, 74, 96, 96, 80, 56, 58, 58, 60, 96, 58, 14, 16, 16, 18, 96, 16, 78, 98, 98, 80, 60, 62, 62, 64, 98, 62, 10, 12, 12, 14, 98, 12, 66, 68, 6, 8 ], + "width": 71, + "height": 229 + } + }, + "zip-boy": { + "zip-boy": { "name": "boy/zip", "x": 14.35, "y": -0.15, "rotation": 82.23, "width": 27, "height": 46 } + } + } + }, + { + "name": "eyelids/girly", + "attachments": { + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "girl/eye-back-low-eyelid", + "type": "mesh", + "uvs": [ 0, 0.26476, 0.20331, 0.79621, 0.50495, 0.95421, 0.8401, 0.89676, 1, 0.33658, 0.88319, 0.07803, 0.75871, 0.25039, 0.5241, 0.35094, 0.31343, 0.19294, 0.09798, 0 ], + "triangles": [ 3, 2, 7, 2, 1, 7, 7, 6, 3, 3, 6, 4, 1, 8, 7, 1, 0, 8, 6, 5, 4, 0, 9, 8 ], + "vertices": [ 1, 42, -29.75, 1.38, 1, 2, 42, -23.04, -4.47, 0.63, 43, 23.4, -1.82, 0.37, 2, 42, -13.09, -6.21, 0.62, 43, 14.27, 2.5, 0.38, 2, 42, -2.03, -5.57, 0.76, 43, 3.44, 4.83, 0.24, 1, 42, 3.25, 0.59, 1, 1, 42, -0.61, 3.43, 1, 2, 42, -4.72, 1.54, 0.76, 43, 4.14, -2.74, 0.24, 2, 42, -12.46, 0.43, 0.62, 43, 11.9, -3.73, 0.38, 2, 42, -19.41, 2.17, 0.63, 43, 18.14, -7.25, 0.37, 1, 42, -26.52, 4.29, 1 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 33, + "height": 11 + } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "girl/eye-back-up-eyelid", + "type": "mesh", + "uvs": [ 0.07861, 0.9592, 0.24977, 0.54703, 0.44727, 0.42338, 0.58882, 0.40964, 0.77315, 0.59512, 1, 0.16921, 1, 0, 0.76657, 0.13486, 0.61844, 0, 0.40119, 0.01807, 0.18065, 0.25164, 0, 0.73938, 0, 0.95234 ], + "triangles": [ 1, 10, 2, 3, 2, 9, 2, 10, 9, 3, 9, 8, 3, 8, 7, 1, 0, 11, 0, 12, 11, 11, 10, 1, 3, 7, 4, 4, 7, 5, 7, 6, 5 ], + "vertices": [ 1, 40, -31.8, -11.42, 1, 2, 40, -23.59, -1.94, 0.51, 41, 22.75, 6.53, 0.49, 2, 40, -14.11, 0.91, 0.15, 41, 14.01, 1.88, 0.85, 1, 41, 7.41, 0.24, 1, 1, 40, 1.53, -3.04, 1, 1, 40, 12.42, 6.75, 1, 1, 40, 12.42, 10.64, 1, 1, 40, 1.22, 7.54, 1, 1, 41, 7.87, -9.28, 1, 2, 40, -16.32, 10.23, 0.15, 41, 18.01, -6.83, 0.85, 2, 40, -26.91, 4.86, 0.52, 41, 27.34, 0.52, 0.48, 1, 40, -35.58, -6.36, 1, 1, 40, -35.58, -11.26, 1 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 48, + "height": 23 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "girl/eye-back-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.12627, 1, 0, 0.99472, 0, 0.60349, 0.16345, 0.30253, 0.44692, 0.06177, 0.74898, 0.00911, 1, 0.1972, 1, 0.52073, 0.72574, 0.37025, 0.49339, 0.42292, 0.25639, 0.68625 ], + "triangles": [ 0, 1, 2, 10, 0, 2, 10, 3, 9, 9, 4, 8, 8, 6, 7, 2, 3, 10, 3, 4, 9, 8, 5, 6, 8, 4, 5 ], + "vertices": [ 1, 40, -28.64, -7.74, 1, 1, 40, -32.94, -7.63, 1, 1, 39, -19.88, 27.79, 1, 1, 39, -14.32, 34.11, 1, 1, 39, -4.69, 39.17, 1, 1, 39, 5.58, 40.27, 1, 1, 39, 14.12, 36.32, 1, 1, 40, 1.06, 2.33, 1, 1, 41, 9.18, -3.76, 1, 2, 41, 16.71, -1.13, 0.92, 40, -16.16, 4.38, 0.08, 2, 41, 23.53, 5.88, 0.33, 40, -24.22, -1.15, 0.67 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 34, + "height": 21 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "girl/eye-white-back", + "type": "mesh", + "uvs": [ 0, 0.39191, 0.07911, 0.7283, 0.26952, 0.95255, 0.56931, 0.98823, 0.90962, 0.92197, 1, 0.50404, 0.94608, 0.17784, 0.76378, 0.00455, 0.50855, 0, 0.20875, 0.12178, 0.56121, 0.48365 ], + "triangles": [ 3, 2, 10, 4, 3, 10, 2, 1, 10, 4, 10, 5, 10, 8, 7, 9, 8, 10, 1, 0, 10, 10, 6, 5, 0, 9, 10, 10, 7, 6 ], + "vertices": [ 1, 40, -34.26, -6.05, 1, 1, 42, -30.63, 5.01, 1, 2, 42, -23.2, -1.94, 0.5, 43, 22.88, -4.3, 0.5, 2, 42, -11.51, -3.04, 0.61, 43, 11.91, -0.13, 0.39, 1, 42, 1.76, -0.99, 1, 2, 40, 4.74, -9.52, 0.54, 42, 5.29, 11.97, 0.46, 1, 40, 2.64, 0.59, 1, 2, 40, -4.47, 5.96, 0.35, 41, 5.55, -4.97, 0.65, 2, 40, -14.42, 6.1, 0.22, 41, 15.34, -3.16, 0.78, 2, 40, -26.12, 2.33, 0.49, 41, 26.07, 2.84, 0.51, 2, 40, -12.37, -8.89, 0.71, 43, 8.05, -15.29, 0.29 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 39, + "height": 31 + } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "girl/eye-front-low-eyelid", + "type": "mesh", + "uvs": [ 0.07038, 0, 0, 0.43773, 0.24154, 0.94046, 0.64093, 0.92609, 1, 0.39464, 1, 0.00682, 0.8516, 0, 0.61899, 0.36591, 0.30738, 0.39464 ], + "triangles": [ 8, 7, 3, 2, 8, 3, 2, 1, 8, 6, 5, 4, 7, 6, 4, 1, 0, 8, 3, 7, 4 ], + "vertices": [ 1, 36, -0.25, 5.3, 1, 1, 36, -2.79, 0.49, 1, 1, 37, 6.69, -3.95, 1, 2, 36, 20.29, -4.89, 0.61, 37, 20.82, -1.32, 0.39, 1, 36, 33.21, 0.96, 1, 1, 36, 33.21, 5.23, 1, 1, 36, 27.87, 5.3, 1, 2, 36, 19.5, 1.28, 0.61, 37, 18.99, 4.61, 0.39, 1, 37, 7.99, 2.37, 1 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 36, + "height": 11 + } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "girl/eye-front-up-eyelid", + "type": "mesh", + "uvs": [ 0.32251, 0.43387, 0.36464, 0.94737, 0.28564, 1, 0.16714, 0.73859, 0.15924, 0.42823, 0, 0.24201, 0, 0, 0.22771, 0.2138, 0.41731, 0, 0.66747, 0, 0.88604, 0.23637, 1, 0.54673, 1, 0.81194, 0.86497, 0.79501, 0.74121, 0.4903, 0.61217, 0.35487, 0.45417, 0.35487 ], + "triangles": [ 14, 15, 10, 2, 3, 1, 3, 0, 1, 13, 11, 12, 13, 14, 11, 3, 4, 0, 14, 10, 11, 0, 4, 7, 4, 5, 7, 5, 6, 7, 16, 0, 7, 7, 8, 16, 10, 15, 9, 9, 15, 8, 15, 16, 8 ], + "vertices": [ 2, 35, 6.87, 1.33, 0.47507, 34, 6.4, 2.84, 0.52493, 2, 35, 6.12, -13.25, 0.09298, 34, 8.93, -11.54, 0.90702, 1, 34, 4.19, -13.01, 1, 1, 34, -2.92, -5.69, 1, 2, 35, -2.64, 3.68, 0.0415, 34, -3.4, 3, 0.9585, 1, 34, -12.95, 8.21, 1, 1, 34, -12.95, 14.99, 1, 2, 35, 2.71, 8.61, 0.27883, 34, 0.71, 9, 0.72117, 1, 35, 15.14, 11.9, 1, 2, 35, 29.76, 8.54, 0.65, 34, 27.1, 14.99, 0.35, 2, 35, 41.06, -0.85, 0.28137, 34, 40.21, 8.37, 0.71863, 1, 34, 47.05, -0.32, 1, 1, 34, 47.05, -7.75, 1, 2, 35, 36.33, -15.81, 0.07124, 34, 38.95, -7.27, 0.92876, 2, 35, 31, -5.83, 0.45, 34, 31.52, 1.26, 0.55, 2, 35, 24.31, -0.4, 0.65, 34, 23.78, 5.05, 0.35, 2, 35, 15.07, 1.72, 0.76, 34, 14.3, 5.05, 0.24 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32 ], + "width": 60, + "height": 28 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "girl/eye-front-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.05111, 0.59525, 0.31445, 0.34389, 0.48174, 0.29362, 0.69861, 0.43007, 0.81323, 0.65271, 0.90617, 1, 1, 1, 1, 0.74607, 0.93406, 0.48034, 0.78845, 0.18589, 0.62115, 0, 0.49104, 0, 0.26798, 0, 0, 0.28644, 0, 0.48752 ], + "triangles": [ 3, 2, 9, 2, 1, 12, 5, 7, 6, 5, 4, 7, 4, 8, 7, 4, 3, 8, 0, 14, 1, 14, 13, 1, 3, 9, 8, 10, 9, 2, 10, 2, 11, 1, 13, 12, 2, 12, 11 ], + "vertices": [ 1, 78, -25.28, -10.9, 1, 1, 35, 14.1, 7.02, 1, 1, 35, 22.66, 6.19, 1, 2, 78, 7.58, -7.27, 0.37, 35, 32.77, 0.79, 0.63, 2, 78, 13.43, -12.17, 0.71, 35, 37.37, -5.29, 0.29, 1, 78, 18.17, -19.81, 1, 1, 78, 22.96, -19.81, 1, 1, 78, 22.96, -14.22, 1, 1, 78, 19.59, -8.37, 1, 1, 78, 12.17, -1.9, 1, 1, 78, 3.63, 2.19, 1, 1, 78, -3, 2.19, 1, 1, 78, -14.38, 2.19, 1, 1, 78, -28.04, -4.11, 1, 1, 78, -28.04, -8.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 51, + "height": 22 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "girl/eye-white-front", + "type": "mesh", + "uvs": [ 0, 0.13677, 0.03631, 0.56139, 0.18641, 0.96133, 0.54191, 0.97121, 0.90531, 0.87739, 1, 0.54164, 1, 0.24046, 0.80425, 0.13009, 0.57351, 0, 0.25751, 0.00346, 0.47082, 0.52682 ], + "triangles": [ 3, 2, 10, 2, 1, 10, 4, 3, 10, 4, 10, 5, 7, 6, 5, 1, 0, 10, 10, 9, 8, 10, 8, 7, 10, 7, 5, 0, 9, 10 ], + "vertices": [ 1, 34, 3.55, 4.71, 1, 2, 34, 5, -8.88, 0.5, 36, -3.97, 10.98, 0.5, 2, 36, 2.03, -1.82, 0.36, 37, 2.31, -1.44, 0.64, 2, 36, 16.25, -2.14, 0.32, 37, 16.37, 0.69, 0.68, 1, 36, 30.79, 0.87, 1, 1, 36, 34.57, 11.61, 1, 1, 34, 43.55, 1.39, 1, 2, 35, 35.91, -3.2, 0.27, 34, 35.72, 4.92, 0.73, 2, 35, 27.85, 2.93, 0.54, 34, 26.49, 9.09, 0.46, 2, 35, 15.51, 5.65, 0.62, 34, 13.85, 8.98, 0.38, 2, 35, 20.07, -12.59, 0.81, 37, 11.13, 14.21, 0.19 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 0, 18, 12, 14, 14, 16 ], + "width": 40, + "height": 32 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "eyelids/semiclosed", + "attachments": { + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "boy/eye-back-low-eyelid", + "type": "mesh", + "uvs": [ 0, 0.4084, 0.23683, 0.78185, 0.55761, 1, 0.86883, 0.83931, 1, 0.43712, 0.93586, 0, 0.79222, 0.23603, 0.55283, 0.37967, 0.30864, 0.27912, 0.11713, 0, 0.02616, 0.10676 ], + "triangles": [ 10, 9, 8, 0, 10, 8, 6, 5, 4, 1, 0, 8, 1, 8, 7, 4, 7, 6, 3, 7, 4, 2, 1, 7, 3, 2, 7 ], + "vertices": [ 1, 42, -29.75, -0.2, 1, 1, 42, -21.94, -4.31, 1, 1, 42, -11.35, -6.71, 1, 1, 42, -1.08, -4.94, 1, 1, 42, 3.25, -0.52, 1, 1, 42, 1.13, 4.29, 1, 1, 42, -3.61, 1.69, 1, 1, 42, -11.51, 0.11, 1, 1, 42, -19.57, 1.22, 1, 1, 42, -25.89, 4.29, 1, 1, 42, -28.89, 3.12, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 33, + "height": 11 + } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "boy/eye-back-up-eyelid", + "type": "mesh", + "uvs": [ 0, 1, 0, 0.49905, 0.19376, 0.24625, 0.47885, 0.02505, 0.78455, 0.00925, 1, 0.08826, 0.99407, 0.70446, 0.79485, 0.78345, 0.48229, 0.92565, 0.20407, 0.92565 ], + "triangles": [ 3, 7, 8, 3, 4, 7, 2, 8, 9, 0, 1, 9, 9, 1, 2, 7, 4, 6, 6, 4, 5, 8, 2, 3 ], + "vertices": [ 1, 40, -37.56, -7.74, 1, 1, 40, -37.56, -2.73, 1, 2, 40, -28.64, -0.2, 0.75, 41, 28.05, 5.81, 0.25, 2, 40, -15.53, 2.01, 0.47, 41, 15.62, 1.07, 0.53, 2, 40, -1.47, 2.17, 0.57, 41, 1.87, -1.84, 0.43, 2, 40, 8.44, 1.38, 0.57, 41, -8.01, -3.01, 0.43, 2, 40, 8.17, -4.78, 0.57, 41, -8.95, 3.09, 0.43, 2, 40, -0.99, -5.57, 0.57, 41, -0.12, 5.66, 0.43, 2, 40, -15.37, -6.99, 0.47, 41, 13.7, 9.87, 0.53, 2, 40, -28.17, -6.99, 0.75, 41, 26.25, 12.38, 0.25 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 16, 6, 18, 4 ], + "width": 46, + "height": 10 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "boy/eye-back-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.01882, 1, 0.2683, 0.88243, 0.57182, 0.81923, 0.80051, 0.81133, 1, 0.79553, 0.99593, 0.50323, 0.72151, 0.03713, 0.44709, 0, 0.11861, 0.35313, 0, 0.82713 ], + "triangles": [ 8, 7, 2, 2, 7, 6, 5, 2, 6, 1, 9, 8, 0, 9, 1, 2, 1, 8, 3, 2, 5, 3, 5, 4 ], + "vertices": [ 1, 40, -33.54, -8.4, 1, 2, 40, -24.06, -6.05, 0.83, 41, 22.41, 10.65, 0.17, 2, 40, -12.53, -4.78, 0.65, 41, 11.35, 7.15, 0.35, 1, 40, -3.84, -4.62, 1, 1, 40, 3.74, -4.31, 1, 2, 40, 3.59, 1.54, 0.58, 39, 16.64, 28.74, 0.42, 1, 39, 6.22, 38.06, 1, 1, 39, -4.21, 38.8, 1, 1, 39, -16.69, 31.74, 1, 2, 40, -34.26, -4.94, 0.58, 39, -21.2, 22.26, 0.42 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 38, + "height": 20 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "boy/eye-white-back", + "type": "mesh", + "uvs": [ 0.0386, 0.1421, 0, 0.46469, 0.15608, 0.80702, 0.39916, 0.96502, 0.68275, 0.96502, 0.91773, 0.87285, 0.99065, 0.51077, 0.9866, 0, 0.69491, 0.06968, 0.43967, 0.08944, 0.23306, 0.1026, 0.53286, 0.5108 ], + "triangles": [ 5, 4, 11, 4, 3, 11, 3, 2, 11, 5, 11, 6, 11, 1, 10, 10, 9, 11, 11, 2, 1, 10, 1, 0, 11, 8, 6, 11, 9, 8, 8, 7, 6 ], + "vertices": [ 1, 40, -32.75, -4.31, 1, 1, 40, -34.26, -12.05, 1, 2, 40, -28.17, -20.27, 0.83, 43, 26.31, -8.53, 0.17, 2, 40, -18.69, -24.06, 0.73, 43, 18.18, -2.35, 0.27, 2, 40, -7.63, -24.06, 0.76, 43, 7.51, 0.59, 0.24, 1, 40, 1.53, -21.85, 1, 1, 40, 4.38, -13.16, 1, 1, 40, 4.22, -0.9, 1, 2, 40, -7.16, -2.57, 0.59, 41, 6.51, 3.92, 0.41, 2, 40, -17.11, -3.04, 0.53, 41, 16.18, 6.34, 0.47, 2, 40, -25.17, -3.36, 0.76, 41, 24.02, 8.23, 0.24, 1, 40, -13.48, -13.16, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 39, + "height": 24 + } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "boy/eye-front-low-eyelid", + "type": "mesh", + "uvs": [ 0.00359, 0.67744, 0.23059, 1, 0.48195, 1, 0.80154, 0.72606, 1, 0.28852, 1, 0, 0.86259, 0, 0.72254, 0.19128, 0.47477, 0.42221, 0.27009, 0.43436, 0.069, 0.30067, 0, 0.42221 ], + "triangles": [ 1, 0, 9, 1, 9, 2, 2, 9, 8, 3, 2, 8, 8, 7, 3, 6, 5, 4, 7, 6, 4, 11, 10, 9, 0, 11, 9, 3, 7, 4 ], + "vertices": [ 1, 36, -3.95, -1.5, 1, 2, 36, 6.2, -5.54, 0.17, 37, 7.06, -4.39, 0.83, 2, 36, 17.26, -5.54, 0.56, 37, 17.95, -2.49, 0.44, 2, 36, 31.32, -1.98, 0.83, 37, 31.19, 3.44, 0.17, 1, 36, 40.05, 3.71, 1, 1, 36, 40.05, 7.46, 1, 1, 36, 34, 7.46, 1, 2, 36, 27.84, 4.97, 0.83, 37, 26.57, 9.69, 0.17, 2, 36, 16.94, 1.97, 0.56, 37, 16.35, 4.86, 0.44, 2, 36, 7.93, 1.81, 0.17, 37, 7.5, 3.15, 0.83, 1, 36, -0.91, 3.55, 1, 1, 36, -3.95, 1.97, 1 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 44, + "height": 13 + } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "boy/eye-front-up-eyelid", + "type": "mesh", + "uvs": [ 0.99382, 0.82748, 0.77725, 0.86546, 0.51988, 0.9106, 0.24969, 0.95799, 0.01014, 1, 0, 0.48275, 0.24339, 0.2556, 0.51727, 0, 0.77229, 0.0198, 1, 0.03748 ], + "triangles": [ 1, 2, 8, 4, 5, 3, 1, 8, 0, 0, 8, 9, 8, 2, 7, 7, 2, 6, 2, 3, 6, 3, 5, 6 ], + "vertices": [ 1, 34, 54.61, -3.86, 1, 2, 35, 39.18, -13.38, 0.22, 34, 41.18, -4.27, 0.78, 2, 35, 23.51, -10.3, 0.48, 34, 25.22, -4.77, 0.52, 2, 35, 7.07, -7.05, 0.94, 34, 8.47, -5.29, 0.06, 1, 34, -6.38, -5.75, 1, 1, 34, -7.01, -0.06, 1, 2, 35, 8.42, 0.56, 0.94, 34, 8.08, 2.43, 0.06, 2, 35, 25.6, -0.5, 0.48, 34, 25.06, 5.25, 0.52, 2, 35, 40.96, -4.25, 0.22, 34, 40.87, 5.03, 0.78, 1, 34, 54.99, 4.83, 1 ], + "hull": 10, + "edges": [ 8, 10, 0, 18, 10, 12, 12, 14, 4, 6, 6, 8, 6, 12, 4, 14, 0, 2, 2, 4, 14, 16, 16, 18 ], + "width": 62, + "height": 11 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "boy/eye-front-up-eyelid-back", + "type": "mesh", + "uvs": [ 0, 0.93436, 0.15772, 0.9219, 0.48014, 0.89643, 0.78654, 0.87222, 1, 0.85536, 1, 0.58325, 0.60474, 0, 0.45276, 0.00159, 0.23101, 0.00391, 0, 0.63591 ], + "triangles": [ 7, 2, 1, 3, 6, 5, 1, 9, 8, 4, 3, 5, 0, 9, 1, 2, 6, 3, 2, 7, 6, 1, 8, 7 ], + "vertices": [ 1, 34, 0.25, -2.59, 1, 2, 34, 8.45, -2.37, 0.1, 35, 7.71, -4.2, 0.9, 2, 34, 25.22, -1.91, 0.56, 35, 24.15, -7.51, 0.44, 2, 34, 41.15, -1.47, 0.85, 35, 39.77, -10.65, 0.15, 1, 34, 52.25, -1.17, 1, 1, 34, 52.25, 3.73, 1, 1, 32, 8.58, 40.07, 1, 1, 32, 0.67, 40.04, 1, 1, 32, -10.86, 40, 1, 1, 34, 0.25, 2.78, 1 ], + "hull": 10, + "edges": [ 8, 10, 16, 18, 0, 18, 0, 2, 2, 4, 4, 6, 6, 8, 12, 14, 14, 16, 14, 4, 2, 16, 6, 12, 10, 12 ], + "width": 52, + "height": 18 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "boy/eye-white-front", + "type": "mesh", + "uvs": [ 0.1783, 0.99386, 0.01136, 0.67178, 0.02924, 0.05194, 0.26177, 0.07624, 0.50324, 0.03978, 0.75962, 0.02763, 1, 0, 0.99215, 0.38009, 0.9057, 0.73863, 0.71192, 0.86624, 0.50622, 0.93309, 0.32438, 0.96348, 0.47343, 0.50162 ], + "triangles": [ 12, 5, 7, 4, 5, 12, 1, 3, 12, 1, 2, 3, 12, 3, 4, 7, 5, 6, 9, 12, 7, 0, 1, 11, 8, 9, 7, 10, 11, 12, 10, 12, 9, 11, 1, 12 ], + "vertices": [ 2, 37, 0.02, -3.61, 0.1401, 36, -0.6, -3.56, 0.8599, 2, 36, -9.45, 4.82, 0.34964, 34, -0.47, -15.04, 0.65036, 1, 34, 0.48, 1.08, 1, 2, 35, 12.58, -2.43, 0.42, 34, 12.8, 0.44, 0.58, 2, 35, 25.26, -4.37, 0.39, 34, 25.6, 1.39, 0.61, 2, 35, 38.58, -7.11, 0.19, 34, 39.19, 1.71, 0.81, 1, 34, 51.93, 2.43, 1, 2, 36, 42.54, 12.4, 0.14016, 34, 51.51, -7.46, 0.85984, 1, 36, 37.95, 3.08, 1, 2, 37, 27.31, 4.53, 0.42667, 36, 27.68, -0.24, 0.57333, 2, 37, 16.87, 0.94, 0.84, 36, 16.78, -1.98, 0.16, 1, 37, 7.51, -1.5, 1, 2, 37, 13.23, 11.69, 0.52, 34, 24.02, -10.62, 0.48 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 53, + "height": 26 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "eyes/eyes-blue", + "attachments": { + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "eyes/green", + "attachments": { + "eye-back-iris": { + "eye-back-iris": { "name": "boy/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-pupil": { + "eye-back-pupil": { "name": "boy/eye-back-pupil", "x": 0.43, "y": -0.67, "width": 15, "height": 17 } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "boy/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-pupil": { + "eye-front-pupil": { "name": "boy/eye-front-pupil", "x": -0.04, "y": -0.47, "width": 17, "height": 17 } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "eyes/violet", + "attachments": { + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "path": "girl-blue-cape/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "path": "girl-blue-cape/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "path": "girl-blue-cape/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "path": "girl-blue-cape/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "eyes/yellow", + "attachments": { + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "path": "girl-spring-dress/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "path": "girl-spring-dress/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "path": "girl-spring-dress/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "path": "girl-spring-dress/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "full-skins/boy", + "bones": [ "hat-base", "pompom-control", "hat", "zip-boy", "hat-control", "backpack", "backpack-control" ], + "transform": [ "hat-control" ], + "attachments": { + "arm-back": { + "arm-back": { + "name": "boy/arm-front", + "type": "mesh", + "uvs": [ 0, 0.9983, 1, 1, 1, 0.86682, 0.93575, 0.85962, 0.92543, 0.81301, 0.91517, 0.75475, 0.90967, 0.69766, 0.90374, 0.64195, 0.89852, 0.59071, 0.89321, 0.53993, 0.88593, 0.48173, 0.87995, 0.43392, 0.87387, 0.38539, 0.86778, 0.33662, 0.86019, 0.276, 0.85262, 0.21542, 0.84443, 0.15001, 0.83706, 0.09104, 0.82567, 0, 0.20656, 4.9E-4, 0.19476, 0.09288, 0.18669, 0.15618, 0.17892, 0.21703, 0.17122, 0.27738, 0.16365, 0.33672, 0.15684, 0.39004, 0.15032, 0.44113, 0.14396, 0.49098, 0.13775, 0.53965, 0.13226, 0.59099, 0.12603, 0.6493, 0.11997, 0.7051, 0.11515, 0.75592, 0.10543, 0.80835, 0.09698, 0.85907, 0.00989, 0.86774, 0.51288, 0.08992, 0.5068, 0.53843, 0.50952, 0.33772, 0.50435, 0.75817, 0.50554, 0.64894, 0.50328, 0.81283, 0.50817, 0.43751, 0.51115, 0.2178, 0.51199, 0.156, 0.51033, 0.27832, 0.50881, 0.38996, 0.50751, 0.48617, 0.50614, 0.59548, 0.5049, 0.70471, 0.50929, 0.85256 ], + "triangles": [ 34, 33, 50, 50, 4, 3, 0, 50, 1, 50, 0, 34, 0, 35, 34, 50, 3, 1, 3, 2, 1, 20, 19, 36, 36, 18, 17, 36, 19, 18, 44, 36, 17, 44, 20, 36, 46, 38, 13, 46, 24, 38, 38, 14, 13, 38, 45, 14, 24, 23, 38, 38, 23, 45, 45, 15, 14, 23, 22, 45, 37, 47, 10, 37, 27, 47, 27, 26, 47, 47, 11, 10, 47, 42, 11, 47, 26, 42, 26, 25, 42, 42, 12, 11, 42, 46, 12, 42, 25, 46, 25, 24, 46, 46, 13, 12, 49, 40, 7, 49, 30, 40, 30, 29, 40, 40, 8, 7, 40, 48, 8, 40, 29, 48, 48, 9, 8, 48, 37, 9, 29, 28, 48, 48, 28, 37, 9, 37, 10, 28, 27, 37, 33, 41, 50, 50, 41, 4, 4, 41, 5, 41, 39, 5, 33, 32, 41, 41, 32, 39, 39, 6, 5, 39, 49, 6, 32, 31, 39, 39, 31, 49, 31, 30, 49, 49, 7, 6, 45, 43, 15, 45, 22, 43, 43, 16, 15, 43, 44, 16, 22, 21, 43, 43, 21, 44, 21, 20, 44, 44, 17, 16 ], + "vertices": [ 1, 83, 30.3, -36.41, 1, 1, 83, 30.3, 34.59, 1, 1, 83, -0.09, 34.58, 1, 1, 83, -1.73, 30.02, 1, 3, 89, -1.79, 29.7, 0.51485, 88, 31.72, 29.7, 0.47152, 87, 64.98, 29.54, 0.01363, 3, 89, -14.92, 28.81, 0.16761, 88, 18.24, 28.84, 0.7202, 87, 51.66, 28.75, 0.11219, 3, 89, -27.79, 28.25, 0.02494, 88, 5.03, 28.32, 0.58139, 87, 38.61, 28.29, 0.39367, 4, 89, -40.37, 27.67, 3.1E-4, 88, -7.89, 27.77, 0.24325, 87, 25.85, 27.81, 0.73664, 86, 59.61, 27.66, 0.0198, 3, 88, -19.79, 27.28, 0.05132, 87, 14.09, 27.38, 0.81519, 86, 47.8, 27.3, 0.1335, 4, 88, -31.58, 26.79, 0.00265, 87, 2.43, 26.95, 0.57933, 86, 36.09, 26.94, 0.41791, 85, 69.67, 26.87, 1.1E-4, 3, 87, -10.9, 26.37, 0.1986, 86, 22.7, 26.43, 0.77283, 85, 56.26, 26.39, 0.02857, 3, 87, -21.85, 25.89, 0.03954, 86, 11.7, 26.02, 0.79423, 85, 45.25, 26, 0.16624, 4, 84, 66.95, 25.61, 2.5E-4, 87, -32.97, 25.41, 0.0015, 86, 0.53, 25.6, 0.51564, 85, 34.07, 25.6, 0.48261, 3, 84, 55.91, 25.21, 0.02493, 86, -10.7, 25.18, 0.18302, 85, 22.83, 25.2, 0.79205, 3, 84, 42.17, 24.71, 0.22892, 86, -24.67, 24.66, 0.01383, 85, 8.85, 24.71, 0.75725, 2, 84, 28.46, 24.21, 0.68211, 85, -5.12, 24.22, 0.31789, 2, 84, 13.66, 23.68, 0.96794, 85, -20.18, 23.68, 0.03206, 1, 79, 23.52, -0.26, 1, 1, 79, 22.72, 20.49, 1, 1, 79, -21.24, 20.38, 1, 1, 79, -22.08, -0.68, 1, 2, 84, 14.92, -23.03, 0.96207, 85, -18.91, -23.02, 0.03793, 2, 84, 28.69, -23.62, 0.67642, 85, -4.9, -23.62, 0.32358, 3, 84, 42.34, -24.21, 0.2106, 86, -24.41, -24.26, 0.01717, 85, 9.01, -24.21, 0.77223, 3, 84, 55.78, -24.78, 0.0197, 86, -10.74, -24.81, 0.18482, 85, 22.69, -24.79, 0.79548, 3, 87, -31.67, -25.49, 0.00253, 86, 1.54, -25.31, 0.54183, 85, 34.98, -25.31, 0.45564, 3, 87, -19.96, -25.9, 0.05261, 86, 13.3, -25.78, 0.80433, 85, 46.75, -25.81, 0.14306, 3, 87, -8.53, -26.3, 0.24883, 86, 24.77, -26.25, 0.73011, 85, 58.23, -26.3, 0.02106, 4, 88, -31.1, -26.85, 0.00529, 87, 2.63, -26.69, 0.57957, 86, 35.97, -26.7, 0.41477, 85, 69.44, -26.77, 3.7E-4, 3, 88, -19.17, -27.12, 0.06823, 87, 14.41, -27.02, 0.80427, 86, 47.8, -27.1, 0.1275, 4, 89, -38.03, -27.52, 0, 88, -5.62, -27.43, 0.32888, 87, 27.8, -27.4, 0.65921, 86, 61.24, -27.56, 0.01191, 3, 89, -25.42, -27.79, 0.02186, 88, 7.33, -27.73, 0.68409, 87, 40.58, -27.77, 0.29405, 3, 89, -13.96, -27.99, 0.14597, 88, 19.09, -27.95, 0.77839, 87, 52.2, -28.05, 0.07563, 3, 89, -2.13, -28.53, 0.457, 88, 31.23, -28.52, 0.53645, 87, 64.19, -28.69, 0.00655, 1, 83, -1.86, -29.53, 1, 1, 83, 0.13, -35.71, 1, 1, 79, 0.51, 0, 1, 2, 87, 2.22, -0.49, 0.93037, 86, 35.72, -0.5, 0.06963, 2, 86, -10.48, -0.25, 2.1E-4, 85, 23, -0.23, 0.99979, 1, 88, 19.33, -0.32, 1, 1, 87, 27.58, -0.45, 1, 2, 89, -1.47, -0.27, 0.18486, 88, 31.98, -0.27, 0.81514, 2, 86, 12.49, -0.38, 0.99961, 85, 45.99, -0.4, 3.9E-4, 2, 84, 28.93, -0.03, 0.99759, 85, -4.64, -0.03, 0.00241, 1, 84, 14.95, 0.07, 1, 2, 84, 42.63, -0.13, 2.9E-4, 85, 9.31, -0.13, 0.99971, 2, 86, 1.55, -0.32, 0.82986, 85, 35.04, -0.32, 0.17014, 1, 86, 23.69, -0.43, 1, 1, 87, 15.31, -0.47, 1, 1, 88, 6.95, -0.4, 1, 1, 83, -3.3, -0.26, 1 ], + "hull": 36, + "edges": [ 0, 2, 2, 4, 36, 38, 0, 70, 68, 70, 4, 6, 34, 36, 72, 34, 38, 40, 72, 40, 74, 56, 74, 18, 76, 48, 76, 26, 78, 64, 78, 10, 80, 60, 80, 14, 82, 78, 64, 66, 82, 66, 8, 10, 82, 8, 84, 52, 84, 22, 86, 44, 86, 30, 72, 88, 88, 86, 40, 42, 42, 44, 88, 42, 30, 32, 32, 34, 88, 32, 76, 90, 90, 86, 44, 46, 46, 48, 90, 46, 26, 28, 28, 30, 90, 28, 76, 92, 92, 84, 48, 50, 50, 52, 92, 50, 22, 24, 24, 26, 92, 24, 74, 94, 94, 84, 52, 54, 54, 56, 94, 54, 18, 20, 20, 22, 94, 20, 74, 96, 96, 80, 56, 58, 58, 60, 96, 58, 14, 16, 16, 18, 96, 16, 78, 98, 98, 80, 60, 62, 62, 64, 98, 62, 10, 12, 12, 14, 98, 12, 66, 68, 6, 8 ], + "width": 71, + "height": 229 + } + }, + "backpack": { + "backpack": { + "name": "boy/backpack", + "type": "mesh", + "uvs": [ 0.56777, 0.99667, 1, 0.92022, 0.98943, 0.32667, 0.91222, 0.0979, 0.87918, 0, 0.78253, 0, 0.24991, 0.03363, 0.11246, 0.09517, 0.03085, 0.20163, 0.02226, 0.32638, 0.04803, 0.66073, 0, 0.74057, 0, 0.8803, 0.09742, 0.96347, 0.18118, 0.96513, 0.33582, 1, 0.54199, 0.39791, 0.50334, 0.16504, 0.57206, 0.93685, 0.13608, 0.44449, 0.52372, 0.28781, 0.0781, 0.37629, 0.11031, 0.6391, 0.39913, 0.04858, 0.7798, 0.01708 ], + "triangles": [ 24, 23, 5, 5, 23, 6, 17, 23, 24, 17, 24, 3, 17, 8, 7, 6, 17, 7, 17, 6, 23, 20, 17, 3, 20, 9, 8, 20, 8, 17, 21, 9, 20, 16, 20, 2, 19, 21, 20, 16, 19, 20, 18, 16, 1, 22, 19, 16, 18, 22, 16, 18, 14, 22, 18, 15, 14, 0, 18, 1, 0, 15, 18, 24, 5, 4, 24, 4, 3, 20, 3, 2, 22, 21, 19, 10, 9, 21, 10, 21, 22, 22, 12, 11, 16, 2, 1, 10, 22, 11, 22, 14, 12, 14, 13, 12 ], + "vertices": [ 2, 56, 176.31, 109.14, 0.42, 55, 230.15, -10.16, 0.58, 1, 56, 161.95, 213.46, 1, 2, 56, -19.06, 228.58, 0.82644, 55, 34.78, 109.29, 0.17356, 2, 56, -90.51, 217.16, 0.76, 55, -36.67, 97.87, 0.24, 2, 56, -121.08, 212.27, 0.80924, 55, -67.25, 92.98, 0.19076, 2, 56, -123.31, 189.48, 0.76, 55, -69.47, 70.19, 0.24, 2, 56, -125.31, 62.84, 0.27, 55, -71.47, -56.45, 0.73, 2, 56, -109.72, 28.59, 0.6115, 55, -55.89, -90.7, 0.3885, 2, 56, -79.18, 6.18, 0.7, 55, -25.34, -113.11, 0.3, 2, 56, -41.38, 0.45, 0.69983, 55, 12.45, -118.84, 0.30017, 2, 56, 61.04, -3.39, 0.7, 55, 114.87, -122.68, 0.3, 2, 56, 84.25, -17.09, 0.7, 55, 138.09, -136.38, 0.3, 2, 56, 126.81, -21.24, 0.7, 55, 180.64, -140.53, 0.3, 2, 56, 154.38, -0.73, 0.7, 55, 208.21, -120.02, 0.3, 2, 56, 156.81, 18.98, 0.7, 55, 210.64, -100.31, 0.3, 2, 56, 170.98, 54.42, 0.63, 55, 224.82, -64.87, 0.37, 1, 55, 46.19, 1.64, 1, 1, 55, -25.63, -0.57, 1, 1, 55, 211.91, -7.36, 1, 2, 56, -2.79, 23.8, 0.64851, 55, 51.04, -95.49, 0.35149, 1, 55, 12.23, 0.59, 1, 2, 56, -24.9, 12.14, 0.7, 55, 28.94, -107.15, 0.3, 2, 56, 55.9, 11.94, 0.7, 55, 109.74, -107.35, 0.3, 1, 55, -63.49, -21.7, 1, 2, 56, -118.16, 188.33, 0.7, 55, -64.33, 69.03, 0.3 ], + "hull": 16, + "edges": [ 0, 2, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 34, 6, 4, 6, 32, 4, 2, 4, 36, 28, 36, 2, 38, 32, 16, 34, 32, 40, 40, 34, 18, 40, 42, 44, 46, 48, 6, 8 ], + "width": 237, + "height": 306 + } + }, + "backpack-pocket": { + "backpack-pocket": { + "name": "boy/backpack-pocket", + "type": "mesh", + "uvs": [ 0.86114, 0.35068, 1, 0.88458, 0.68875, 1, 0.18636, 1, 0, 0.70482, 0.0163, 0.4457, 0.09191, 0.41902, 0, 0.17629, 0.14203, 0, 0.57054, 0, 0.74293, 0.14141, 0.55084, 0.66994, 0.52128, 0.39897, 0.41292, 0.24068, 0.4549, 0.43438 ], + "triangles": [ 3, 11, 2, 2, 11, 1, 3, 4, 11, 14, 4, 5, 4, 14, 11, 11, 0, 1, 11, 14, 0, 5, 6, 14, 14, 12, 0, 14, 6, 12, 6, 13, 12, 6, 7, 13, 12, 10, 0, 12, 13, 10, 7, 8, 13, 13, 9, 10, 13, 8, 9 ], + "vertices": [ 2, 55, 125.55, -28.25, 0.86973, 56, 71.72, 91.05, 0.13027, 2, 55, 191.82, -25.36, 0.79774, 56, 137.99, 93.94, 0.20226, 2, 55, 203.92, -47.5, 0.88, 56, 150.09, 71.8, 0.12, 2, 55, 200.66, -81, 0.65, 56, 146.83, 38.3, 0.35, 2, 55, 163.31, -89.9, 0.65, 56, 109.48, 29.4, 0.35, 2, 55, 131.7, -85.72, 0.65, 56, 77.87, 33.58, 0.35, 2, 55, 128.92, -80.36, 0.65, 56, 75.09, 38.94, 0.35, 2, 55, 98.61, -83.6, 0.69, 56, 44.78, 35.7, 0.31, 2, 55, 77.95, -72.02, 0.65, 56, 24.12, 47.28, 0.35, 2, 55, 80.74, -43.45, 0.81, 56, 26.91, 75.85, 0.19, 2, 55, 99.17, -33.64, 0.83791, 56, 45.34, 85.66, 0.16209, 2, 55, 162.62, -52.75, 0.88, 56, 108.79, 66.55, 0.12, 2, 55, 129.26, -51.49, 0.83, 56, 75.43, 67.81, 0.17, 2, 55, 109.18, -56.83, 0.83, 56, 55.35, 62.47, 0.17, 2, 55, 133.16, -56.34, 0.88, 56, 79.33, 62.96, 0.12 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 24, 12, 28, 10, 28, 0 ], + "width": 67, + "height": 123 + } + }, + "backpack-strap-back": { + "backpack-strap-back": { + "name": "boy/backpack-strap-front", + "type": "mesh", + "uvs": [ 0.15746, 0.22195, 0.30944, 0.21252, 0.41799, 0.2408, 0.49615, 0.30303, 0.52654, 0.38223, 0.47878, 0.49349, 0.31812, 0.63303, 0, 0.81218, 0, 1, 0.16615, 1, 0.74365, 0.70846, 0.91733, 0.54818, 1, 0.40675, 1, 0.25401, 0.86523, 0.12201, 0.61338, 0.02395, 0.32246, 0, 0.05759, 0.02018, 0.04457, 0.17292 ], + "triangles": [ 2, 1, 16, 15, 2, 16, 9, 8, 7, 16, 1, 0, 0, 18, 17, 16, 0, 17, 6, 9, 7, 10, 9, 6, 10, 6, 5, 10, 5, 11, 11, 4, 12, 5, 4, 11, 4, 3, 13, 3, 15, 14, 3, 14, 13, 4, 13, 12, 3, 2, 15 ], + "vertices": [ 2, 55, 44.79, 75.8, 0.174, 56, -9.04, 195.1, 0.826, 2, 55, 49.06, 136.63, 0.56071, 56, -4.77, 255.93, 0.43929, 3, 55, 57.59, 153.08, 0.2997, 79, -3.48, -14.15, 0.5103, 56, 3.76, 272.38, 0.19, 1, 79, 4.79, -23.1, 1, 1, 79, 7.1, -36.96, 1, 2, 55, 100.34, 155.9, 0.19, 79, 3.47, -56.43, 0.81, 3, 55, 128.1, 112.78, 0.27, 79, -36.75, -88.24, 0.46366, 56, 74.27, 232.08, 0.26634, 2, 55, 144.33, 78.25, 0.1, 56, 90.51, 197.55, 0.9, 2, 55, 177.04, 75.06, 0.1, 56, 123.22, 194.36, 0.9, 2, 55, 178.27, 87.63, 0.1, 56, 124.44, 206.93, 0.9, 3, 55, 151.86, 136.31, 0.27, 79, -11.02, -109.61, 0.48185, 56, 98.04, 255.61, 0.24815, 2, 55, 113.1, 188.14, 0.15, 79, 36.8, -66, 0.85, 2, 55, 89.07, 196.79, 0.04, 79, 43.08, -41.25, 0.96, 1, 79, 43.08, -14.52, 1, 2, 79, 32.84, 8.58, 0.87, 56, -15.34, 310.73, 0.13, 3, 55, 18.46, 162.82, 0.5, 79, 2.42, 25.74, 0.00271, 56, -35.37, 282.12, 0.49729, 2, 55, 7.35, 92.05, 0.174, 56, -46.48, 211.35, 0.826, 2, 55, 8.91, 71.67, 0.174, 56, -44.92, 190.97, 0.826, 2, 55, 35.42, 68.1, 0.174, 56, -18.41, 187.39, 0.826 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 0, 36, 6, 26, 10, 22 ], + "width": 76, + "height": 175 + } + }, + "backpack-strap-front": { + "backpack-strap-front": { + "name": "boy/backpack-strap-front", + "type": "mesh", + "uvs": [ 0.15746, 0.22195, 0.30944, 0.21252, 0.41799, 0.2408, 0.49615, 0.30303, 0.52654, 0.38223, 0.47878, 0.49349, 0.31812, 0.63303, 0, 0.81218, 0, 1, 0.16615, 1, 0.74365, 0.70846, 0.91733, 0.54818, 1, 0.40675, 1, 0.25401, 0.86523, 0.12201, 0.61338, 0.02395, 0.32246, 0, 0.05759, 0.02018, 0.04457, 0.17292 ], + "triangles": [ 10, 6, 5, 10, 5, 11, 5, 4, 11, 11, 4, 12, 4, 13, 12, 4, 3, 13, 3, 14, 13, 3, 15, 14, 3, 2, 15, 15, 2, 16, 10, 9, 6, 9, 8, 7, 16, 1, 0, 0, 18, 17, 16, 0, 17, 6, 9, 7, 2, 1, 16 ], + "vertices": [ 1, 55, 36.1, 23.68, 1, 2, 55, 35.58, 35.33, 0.91, 7, -7.77, -3.67, 0.09, 2, 55, 41.31, 43.06, 0.37, 7, 0.48, -8.62, 0.63, 1, 7, 6.42, -19.51, 1, 2, 55, 66.74, 48.87, 0.04, 7, 8.73, -33.37, 0.96, 2, 55, 85.77, 43.37, 0.19, 7, 5.1, -52.84, 0.81, 2, 55, 108.89, 28.85, 0.48, 7, -7.11, -77.26, 0.52, 1, 55, 137.75, 1.75, 1, 1, 55, 170.46, -1.44, 1, 1, 55, 171.69, 11.13, 1, 2, 55, 125.16, 59.76, 0.42, 7, 25.23, -90.46, 0.58, 2, 55, 98.53, 75.62, 0.15, 7, 38.43, -62.41, 0.85, 2, 55, 74.5, 84.27, 0.04, 7, 44.71, -37.66, 0.96, 1, 7, 44.71, -10.93, 1, 1, 7, 34.47, 12.17, 1, 2, 55, 4.98, 61.52, 0.09, 7, 15.33, 29.33, 0.91, 2, 55, -1.34, 39.92, 0.96, 7, -6.78, 33.52, 0.04, 1, 55, 0.22, 19.55, 1, 1, 55, 26.73, 15.97, 1 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 0, 36, 6, 26, 10, 22 ], + "width": 76, + "height": 175 + } + }, + "backpack-up": { + "backpack-up": { + "name": "boy/backpack-up", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 56, -112.01, 144.15, 0.96, 55, -137.28, 27.99, 0.04, 2, 56, -103.52, 189.83, 0.81, 55, -128.79, 73.67, 0.19, 2, 56, -49.76, 82.9, 0.17, 55, -75.03, -33.27, 0.83, 2, 56, -74.02, 32.48, 0.58, 55, -99.3, -83.68, 0.42 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 42, + "height": 139 + } + }, + "base-head": { + "base-head": { "x": 74.74, "y": -10.09, "rotation": -87.57, "width": 189, "height": 145 } + }, + "body": { + "body": { "name": "boy/body", "type": "linkedmesh", "skin": "full-skins/girl", "parent": "body", "width": 194, "height": 263 } + }, + "boot-ribbon-back": { + "boot-ribbon-back": { + "name": "boy/boot-ribbon-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 95, 28.05, 31.91, 0.76, 103, 36.32, 40.94, 0.24, 2, 95, 28.6, 14.92, 0.76, 103, 19.33, 41.13, 0.24, 2, 95, 6.7, 14.22, 0.76, 103, 19.57, 62.88, 0.24, 2, 95, 6.15, 31.21, 0.76, 103, 36.57, 62.69, 0.24 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 17, + "height": 22 + } + }, + "boot-ribbon-front": { + "boot-ribbon-front": { + "name": "boy/boot-ribbon-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 102, 37.35, 36.26, 0.24, 27, 30.73, 31.09, 0.76, 2, 102, 20.65, 39.43, 0.24, 27, 29.77, 14.12, 0.76, 2, 102, 24.74, 60.87, 0.24, 27, 7.8, 15.36, 0.76, 2, 102, 41.44, 57.7, 0.24, 27, 8.76, 32.34, 0.76 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 17, + "height": 22 + } + }, + "collar": { + "collar": { + "name": "boy/collar", + "type": "mesh", + "uvs": [ 0.01507, 0.35374, 0.04243, 0.85436, 0.34348, 0.9329, 0.60063, 1, 0.7225, 0.99194, 0.8843, 0.75701, 1, 0.58901, 0.9885, 0.2137, 0.98194, 0, 0.82711, 0.02581, 0.63208, 0.05832, 0.54167, 0.04849, 0.29801, 0.06176, 0, 0.07798, 0.31391, 0.36632, 0.55976, 0.34041, 0.66022, 0.3489, 0.84942, 0.31117 ], + "triangles": [ 0, 12, 14, 15, 12, 11, 15, 14, 12, 0, 13, 12, 17, 16, 10, 16, 15, 10, 15, 11, 10, 10, 9, 17, 17, 9, 7, 9, 8, 7, 16, 4, 3, 16, 5, 4, 15, 16, 3, 2, 15, 3, 1, 14, 2, 2, 14, 15, 1, 0, 14, 6, 5, 17, 17, 5, 16, 17, 7, 6 ], + "vertices": [ 2, 4, 130.93, 66.36, 0.35519, 5, 33.21, 62.82, 0.64481, 1, 4, 103.81, 63.13, 1, 1, 4, 96.28, 19.92, 1, 1, 4, 89.85, -16.98, 1, 1, 4, 88.98, -34.64, 1, 1, 4, 100.8, -59.06, 1, 1, 4, 109.25, -76.52, 1, 2, 4, 134.32, -75.26, 0.36282, 5, 35.01, -78.53, 0.63718, 1, 5, 49.23, -77.07, 1, 1, 5, 48.26, -54.59, 1, 1, 5, 47.04, -26.28, 1, 1, 5, 47.91, -13.18, 1, 1, 5, 47.97, 22.16, 1, 1, 5, 48.04, 65.38, 1, 2, 4, 128.8, 23.01, 0.34961, 5, 30.6, 19.59, 0.65039, 2, 4, 129.22, -12.66, 0.3068, 5, 30.61, -16, 0.6932, 2, 4, 128.25, -27.24, 0.31124, 5, 29.49, -30.54, 0.68876, 2, 4, 129.27, -54.92, 0.39025, 5, 30.2, -58.19, 0.60975 ], + "hull": 14, + "edges": [ 6, 8, 20, 22, 2, 4, 4, 6, 22, 24, 24, 26, 8, 10, 10, 12, 16, 18, 18, 20, 4, 28, 28, 24, 6, 30, 30, 22, 8, 32, 32, 20, 10, 34, 34, 18, 2, 0, 0, 26, 28, 0, 12, 14, 14, 16, 34, 14 ], + "width": 145, + "height": 58 + } + }, + "ear": { + "ear": { + "name": "boy/ear", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 5, 74.1, 67.48, 0.22, 6, 33.88, 66.64, 0.78, 2, 5, 76.86, 105.37, 0.22, 6, 31.74, 104.6, 0.78, 2, 5, 121.73, 102.1, 0.22, 6, 76.69, 107.13, 0.78, 2, 5, 118.97, 64.2, 0.22, 6, 78.83, 69.17, 0.78 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 38, + "height": 45 + } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { "name": "boy/eyebrow-back", "x": 13.08, "y": -0.6, "rotation": -177.9, "width": 40, "height": 22 } + }, + "eye-back-iris": { + "eye-back-iris": { "name": "boy/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "boy/eye-back-low-eyelid", + "type": "mesh", + "uvs": [ 0, 0.4084, 0.23683, 0.78185, 0.55761, 1, 0.86883, 0.83931, 1, 0.43712, 0.93586, 0, 0.79222, 0.23603, 0.55283, 0.37967, 0.30864, 0.27912, 0.11713, 0, 0.02616, 0.10676 ], + "triangles": [ 10, 9, 8, 0, 10, 8, 6, 5, 4, 1, 0, 8, 1, 8, 7, 4, 7, 6, 3, 7, 4, 2, 1, 7, 3, 2, 7 ], + "vertices": [ 1, 42, -29.75, -0.2, 1, 1, 42, -21.94, -4.31, 1, 1, 42, -11.35, -6.71, 1, 1, 42, -1.08, -4.94, 1, 1, 42, 3.25, -0.52, 1, 1, 42, 1.13, 4.29, 1, 1, 42, -3.61, 1.69, 1, 1, 42, -11.51, 0.11, 1, 1, 42, -19.57, 1.22, 1, 1, 42, -25.89, 4.29, 1, 1, 42, -28.89, 3.12, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 33, + "height": 11 + } + }, + "eye-back-pupil": { + "eye-back-pupil": { "name": "boy/eye-back-pupil", "x": 0.43, "y": -0.67, "width": 15, "height": 17 } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "boy/eye-back-up-eyelid", + "type": "mesh", + "uvs": [ 0, 1, 0, 0.49905, 0.19376, 0.24625, 0.47885, 0.02505, 0.78455, 0.00925, 1, 0.08826, 0.99407, 0.70446, 0.79485, 0.78345, 0.48229, 0.92565, 0.20407, 0.92565 ], + "triangles": [ 3, 7, 8, 3, 4, 7, 2, 8, 9, 0, 1, 9, 9, 1, 2, 7, 4, 6, 6, 4, 5, 8, 2, 3 ], + "vertices": [ 1, 40, -37.56, -7.74, 1, 1, 40, -37.56, -2.73, 1, 2, 40, -28.64, -0.2, 0.75, 41, 28.05, 5.81, 0.25, 2, 40, -15.53, 2.01, 0.47, 41, 15.62, 1.07, 0.53, 2, 40, -1.47, 2.17, 0.57, 41, 1.87, -1.84, 0.43, 2, 40, 8.44, 1.38, 0.57, 41, -8.01, -3.01, 0.43, 2, 40, 8.17, -4.78, 0.57, 41, -8.95, 3.09, 0.43, 2, 40, -0.99, -5.57, 0.57, 41, -0.12, 5.66, 0.43, 2, 40, -15.37, -6.99, 0.47, 41, 13.7, 9.87, 0.53, 2, 40, -28.17, -6.99, 0.75, 41, 26.25, 12.38, 0.25 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 16, 6, 18, 4 ], + "width": 46, + "height": 10 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "boy/eye-back-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.01882, 1, 0.2683, 0.88243, 0.57182, 0.81923, 0.80051, 0.81133, 1, 0.79553, 0.99593, 0.50323, 0.72151, 0.03713, 0.44709, 0, 0.11861, 0.35313, 0, 0.82713 ], + "triangles": [ 8, 7, 2, 2, 7, 6, 5, 2, 6, 1, 9, 8, 0, 9, 1, 2, 1, 8, 3, 2, 5, 3, 5, 4 ], + "vertices": [ 1, 40, -33.54, -8.4, 1, 2, 40, -24.06, -6.05, 0.83, 41, 22.41, 10.65, 0.17, 2, 40, -12.53, -4.78, 0.65, 41, 11.35, 7.15, 0.35, 1, 40, -3.84, -4.62, 1, 1, 40, 3.74, -4.31, 1, 2, 40, 3.59, 1.54, 0.58, 39, 16.64, 28.74, 0.42, 1, 39, 6.22, 38.06, 1, 1, 39, -4.21, 38.8, 1, 1, 39, -16.69, 31.74, 1, 2, 40, -34.26, -4.94, 0.58, 39, -21.2, 22.26, 0.42 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 38, + "height": 20 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "boy/eye-white-back", + "type": "mesh", + "uvs": [ 0.0386, 0.1421, 0, 0.46469, 0.15608, 0.80702, 0.39916, 0.96502, 0.68275, 0.96502, 0.91773, 0.87285, 0.99065, 0.51077, 0.9866, 0, 0.69491, 0.06968, 0.43967, 0.08944, 0.23306, 0.1026, 0.53286, 0.5108 ], + "triangles": [ 5, 4, 11, 4, 3, 11, 3, 2, 11, 5, 11, 6, 11, 1, 10, 10, 9, 11, 11, 2, 1, 10, 1, 0, 11, 8, 6, 11, 9, 8, 8, 7, 6 ], + "vertices": [ 1, 40, -32.75, -4.31, 1, 1, 40, -34.26, -12.05, 1, 2, 40, -28.17, -20.27, 0.83, 43, 26.31, -8.53, 0.17, 2, 40, -18.69, -24.06, 0.73, 43, 18.18, -2.35, 0.27, 2, 40, -7.63, -24.06, 0.76, 43, 7.51, 0.59, 0.24, 1, 40, 1.53, -21.85, 1, 1, 40, 4.38, -13.16, 1, 1, 40, 4.22, -0.9, 1, 2, 40, -7.16, -2.57, 0.59, 41, 6.51, 3.92, 0.41, 2, 40, -17.11, -3.04, 0.53, 41, 16.18, 6.34, 0.47, 2, 40, -25.17, -3.36, 0.76, 41, 24.02, 8.23, 0.24, 1, 40, -13.48, -13.16, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 39, + "height": 24 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { "name": "boy/eyebrow-front", "x": 21.26, "y": 0.14, "rotation": -3.58, "width": 49, "height": 22 } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "boy/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "boy/eye-front-low-eyelid", + "type": "mesh", + "uvs": [ 0.00359, 0.67744, 0.23059, 1, 0.48195, 1, 0.80154, 0.72606, 1, 0.28852, 1, 0, 0.86259, 0, 0.72254, 0.19128, 0.47477, 0.42221, 0.27009, 0.43436, 0.069, 0.30067, 0, 0.42221 ], + "triangles": [ 1, 0, 9, 1, 9, 2, 2, 9, 8, 3, 2, 8, 8, 7, 3, 6, 5, 4, 7, 6, 4, 11, 10, 9, 0, 11, 9, 3, 7, 4 ], + "vertices": [ 1, 36, -3.95, -1.5, 1, 2, 36, 6.2, -5.54, 0.17, 37, 7.06, -4.39, 0.83, 2, 36, 17.26, -5.54, 0.56, 37, 17.95, -2.49, 0.44, 2, 36, 31.32, -1.98, 0.83, 37, 31.19, 3.44, 0.17, 1, 36, 40.05, 3.71, 1, 1, 36, 40.05, 7.46, 1, 1, 36, 34, 7.46, 1, 2, 36, 27.84, 4.97, 0.83, 37, 26.57, 9.69, 0.17, 2, 36, 16.94, 1.97, 0.56, 37, 16.35, 4.86, 0.44, 2, 36, 7.93, 1.81, 0.17, 37, 7.5, 3.15, 0.83, 1, 36, -0.91, 3.55, 1, 1, 36, -3.95, 1.97, 1 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 44, + "height": 13 + } + }, + "eye-front-pupil": { + "eye-front-pupil": { "name": "boy/eye-front-pupil", "x": -0.04, "y": -0.47, "width": 17, "height": 17 } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "boy/eye-front-up-eyelid", + "type": "mesh", + "uvs": [ 0.99382, 0.82748, 0.77725, 0.86546, 0.51988, 0.9106, 0.24969, 0.95799, 0.01014, 1, 0, 0.48275, 0.24339, 0.2556, 0.51727, 0, 0.77229, 0.0198, 1, 0.03748 ], + "triangles": [ 1, 2, 8, 4, 5, 3, 1, 8, 0, 0, 8, 9, 8, 2, 7, 7, 2, 6, 2, 3, 6, 3, 5, 6 ], + "vertices": [ 1, 34, 54.61, -3.86, 1, 2, 35, 39.18, -13.38, 0.22, 34, 41.18, -4.27, 0.78, 2, 35, 23.51, -10.3, 0.48, 34, 25.22, -4.77, 0.52, 2, 35, 7.07, -7.05, 0.94, 34, 8.47, -5.29, 0.06, 1, 34, -6.38, -5.75, 1, 1, 34, -7.01, -0.06, 1, 2, 35, 8.42, 0.56, 0.94, 34, 8.08, 2.43, 0.06, 2, 35, 25.6, -0.5, 0.48, 34, 25.06, 5.25, 0.52, 2, 35, 40.96, -4.25, 0.22, 34, 40.87, 5.03, 0.78, 1, 34, 54.99, 4.83, 1 ], + "hull": 10, + "edges": [ 8, 10, 0, 18, 10, 12, 12, 14, 4, 6, 6, 8, 6, 12, 4, 14, 0, 2, 2, 4, 14, 16, 16, 18 ], + "width": 62, + "height": 11 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "boy/eye-front-up-eyelid-back", + "type": "mesh", + "uvs": [ 0, 0.93436, 0.15772, 0.9219, 0.48014, 0.89643, 0.78654, 0.87222, 1, 0.85536, 1, 0.58325, 0.60474, 0, 0.45276, 0.00159, 0.23101, 0.00391, 0, 0.63591 ], + "triangles": [ 7, 2, 1, 3, 6, 5, 1, 9, 8, 4, 3, 5, 0, 9, 1, 2, 6, 3, 2, 7, 6, 1, 8, 7 ], + "vertices": [ 1, 34, 0.25, -2.59, 1, 2, 34, 8.45, -2.37, 0.1, 35, 7.71, -4.2, 0.9, 2, 34, 25.22, -1.91, 0.56, 35, 24.15, -7.51, 0.44, 2, 34, 41.15, -1.47, 0.85, 35, 39.77, -10.65, 0.15, 1, 34, 52.25, -1.17, 1, 1, 34, 52.25, 3.73, 1, 1, 32, 8.58, 40.07, 1, 1, 32, 0.67, 40.04, 1, 1, 32, -10.86, 40, 1, 1, 34, 0.25, 2.78, 1 ], + "hull": 10, + "edges": [ 8, 10, 16, 18, 0, 18, 0, 2, 2, 4, 4, 6, 6, 8, 12, 14, 14, 16, 14, 4, 2, 16, 6, 12, 10, 12 ], + "width": 52, + "height": 18 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "boy/eye-white-front", + "type": "mesh", + "uvs": [ 0.1783, 0.99386, 0.01136, 0.67178, 0.02924, 0.05194, 0.26177, 0.07624, 0.50324, 0.03978, 0.75962, 0.02763, 1, 0, 0.99215, 0.38009, 0.9057, 0.73863, 0.71192, 0.86624, 0.50622, 0.93309, 0.32438, 0.96348, 0.47343, 0.50162 ], + "triangles": [ 12, 5, 7, 4, 5, 12, 1, 3, 12, 1, 2, 3, 12, 3, 4, 7, 5, 6, 9, 12, 7, 0, 1, 11, 8, 9, 7, 10, 11, 12, 10, 12, 9, 11, 1, 12 ], + "vertices": [ 2, 37, 0.02, -3.61, 0.1401, 36, -0.6, -3.56, 0.8599, 2, 36, -9.45, 4.82, 0.34964, 34, -0.47, -15.04, 0.65036, 1, 34, 0.48, 1.08, 1, 2, 35, 12.58, -2.43, 0.42, 34, 12.8, 0.44, 0.58, 2, 35, 25.26, -4.37, 0.39, 34, 25.6, 1.39, 0.61, 2, 35, 38.58, -7.11, 0.19, 34, 39.19, 1.71, 0.81, 1, 34, 51.93, 2.43, 1, 2, 36, 42.54, 12.4, 0.14016, 34, 51.51, -7.46, 0.85984, 1, 36, 37.95, 3.08, 1, 2, 37, 27.31, 4.53, 0.42667, 36, 27.68, -0.24, 0.57333, 2, 37, 16.87, 0.94, 0.84, 36, 16.78, -1.98, 0.16, 1, 37, 7.51, -1.5, 1, 2, 37, 13.23, 11.69, 0.52, 34, 24.02, -10.62, 0.48 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 53, + "height": 26 + } + }, + "hair-back": { + "hair-back": { + "name": "boy/hair-back", + "type": "mesh", + "uvs": [ 0.72377, 0.13142, 0.82972, 0.05228, 0.85484, 0.14394, 0.9241, 0.10728, 0.99848, 0.11545, 0.99884, 0.27436, 0.99943, 0.531, 1, 0.78235, 0.83167, 0.64513, 0.71204, 1, 0, 1, 0, 0, 0.59007, 0, 0.71673, 0.30031, 0.80118, 0.34254, 0.91866, 0.31098, 0.91187, 0.51672 ], + "triangles": [ 0, 1, 2, 13, 12, 0, 13, 0, 2, 5, 15, 2, 3, 5, 2, 5, 3, 4, 14, 13, 2, 15, 14, 2, 16, 14, 15, 15, 5, 6, 16, 15, 6, 8, 14, 16, 8, 16, 6, 7, 8, 6, 13, 10, 11, 13, 11, 12, 8, 9, 10, 13, 8, 10, 8, 13, 14 ], + "vertices": [ 2, 6, 156.98, -52.6, 0.91, 30, 105.42, 83.77, 0.09, 3, 6, 170.88, -77.77, 0.586, 30, 131.16, 96.59, 0.23935, 49, 58.44, 47.85, 0.17464, 3, 6, 156.31, -84.5, 0.61272, 30, 137.27, 81.74, 0.25026, 49, 69.48, 36.2, 0.13702, 3, 6, 162.95, -101.07, 0.57311, 30, 154.1, 87.68, 0.23409, 49, 83.04, 47.8, 0.1928, 3, 6, 162.4, -119.18, 0.5041, 30, 172.17, 86.36, 0.2059, 49, 100.38, 53.08, 0.29, 3, 6, 136.68, -120.36, 0.5041, 30, 172.26, 60.62, 0.2059, 49, 109.74, 29.09, 0.29, 3, 6, 95.15, -122.26, 0.5041, 30, 172.4, 19.04, 0.2059, 49, 124.85, -9.64, 0.29, 3, 6, 54.47, -124.13, 0.5041, 30, 172.54, -21.68, 0.2059, 49, 139.65, -47.58, 0.29, 2, 6, 74.95, -82.32, 0.91, 30, 131.64, 0.55, 0.09, 2, 6, 16.28, -55.71, 0.91, 30, 102.57, -56.94, 0.09, 2, 6, 8.94, 117.16, 0.91, 30, -70.46, -56.94, 0.09, 2, 6, 170.8, 124.02, 0.91, 30, -70.46, 105.06, 0.09, 2, 6, 176.88, -19.23, 0.91, 30, 72.93, 105.06, 0.09, 2, 6, 129.57, -52.05, 0.91, 30, 103.71, 56.41, 0.09, 2, 6, 123.61, -72.84, 0.71, 30, 124.23, 49.57, 0.29, 3, 6, 129.93, -101.15, 0.58764, 30, 152.78, 54.68, 0.24002, 49, 93.7, 16.54, 0.17234, 3, 6, 96.56, -100.91, 0.61135, 30, 151.13, 21.35, 0.24971, 49, 104.17, -15.15, 0.13894 ], + "hull": 13, + "edges": [ 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 0, 2, 8, 10, 30, 10, 10, 12, 12, 14, 32, 12, 8, 6, 6, 4, 4, 2 ], + "width": 243, + "height": 162 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "boy/hair-bangs", + "type": "mesh", + "uvs": [ 0.21816, 0.2794, 0.12151, 0.44214, 0.03901, 0.65009, 0, 0.84447, 0, 1, 0.11916, 0.99365, 0.21344, 0.83543, 0.29594, 0.65009, 0.36194, 0.39242, 0.4303, 0.5416, 0.53166, 0.65913, 0.67308, 0.74954, 0.7603, 0.61393, 0.69901, 0.51447, 0.81923, 0.55516, 0.93473, 0.51447, 1, 0.41954, 1, 0.27036, 0.9253, 0.16187, 0.8098, 0.06694, 0.68016, 0.00817, 0.38787, 0.00365, 0.57307, 0.38232 ], + "triangles": [ 4, 3, 5, 5, 3, 6, 3, 2, 6, 6, 2, 7, 11, 10, 12, 10, 13, 12, 10, 9, 13, 2, 1, 7, 7, 1, 8, 14, 13, 15, 9, 22, 13, 9, 8, 22, 15, 13, 16, 16, 13, 17, 1, 0, 8, 18, 17, 13, 13, 22, 18, 22, 8, 21, 8, 0, 21, 22, 19, 18, 22, 20, 19, 22, 21, 20 ], + "vertices": [ 3, 6, 125.65, 24.16, 0.819, 29, -61.51, 56.32, 0.09, 48, 23.45, -7.43, 0.091, 3, 6, 113.21, 37.17, 0.64201, 29, -75.04, 44.44, 0.09, 48, 40.92, -11.79, 0.26799, 3, 6, 97.55, 48.07, 0.54508, 29, -86.59, 29.26, 0.06169, 48, 59.97, -12.64, 0.39323, 3, 6, 83.15, 52.92, 0.4171, 29, -92.05, 15.07, 0.07361, 48, 74.75, -9.05, 0.5093, 3, 6, 71.8, 52.44, 0.37688, 29, -92.05, 3.72, 0.06651, 48, 84.08, -2.59, 0.55661, 3, 6, 72.97, 35.8, 0.39111, 29, -75.37, 4.18, 0.06902, 48, 74.2, 10.86, 0.53987, 3, 6, 85.07, 23.1, 0.53235, 29, -62.17, 15.73, 0.09394, 48, 57.19, 15.14, 0.37371, 3, 6, 99.08, 12.13, 0.64178, 29, -50.62, 29.26, 0.12, 48, 39.49, 16.93, 0.23822, 2, 6, 118.26, 3.7, 0.86, 29, -41.38, 48.07, 0.14, 3, 6, 107.79, -6.33, 0.89872, 29, -31.81, 37.18, 0.05965, 49, 10.97, -34.81, 0.04163, 3, 6, 99.82, -20.87, 0.76196, 29, -17.62, 28.6, 0.10658, 49, 27.3, -37.7, 0.13146, 3, 6, 94.06, -40.93, 0.59399, 29, 2.18, 22, 0.10482, 49, 48.15, -36.72, 0.30119, 3, 6, 104.47, -52.71, 0.60482, 29, 14.39, 31.9, 0.10673, 49, 55.97, -23.09, 0.28845, 3, 6, 111.36, -43.83, 0.69544, 29, 5.81, 39.16, 0.08561, 49, 45.35, -19.41, 0.21895, 3, 6, 109.11, -60.77, 0.59573, 29, 22.64, 36.19, 0.09904, 49, 62.12, -16.12, 0.30524, 3, 6, 112.76, -76.8, 0.52077, 29, 38.81, 39.16, 0.0919, 49, 76.14, -7.52, 0.38732, 3, 6, 120.07, -85.63, 0.5084, 29, 47.95, 46.09, 0.08972, 49, 82.16, 2.24, 0.40188, 3, 6, 130.95, -85.17, 0.57569, 29, 47.95, 56.98, 0.08663, 49, 78.24, 12.4, 0.33769, 3, 6, 138.42, -74.39, 0.71063, 29, 37.49, 64.9, 0.04692, 49, 65.63, 16.02, 0.24246, 2, 6, 144.66, -57.94, 0.86805, 49, 48.05, 16.66, 0.13195, 2, 6, 148.18, -39.62, 0.96256, 49, 29.57, 14.12, 0.03744, 2, 6, 146.77, 1.27, 0.86, 29, -37.75, 76.45, 0.14, 3, 6, 120.25, -25.8, 0.89676, 29, -11.82, 48.81, 0.02582, 49, 25.43, -16.76, 0.07742 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42 ], + "width": 140, + "height": 73 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "boy/hair-bangs", + "type": "mesh", + "uvs": [ 0.21816, 0.2794, 0.12151, 0.44214, 0.03901, 0.65009, 0, 0.84447, 0, 1, 0.11916, 0.99365, 0.21344, 0.83543, 0.29594, 0.65009, 0.36194, 0.39242, 0.4303, 0.5416, 0.53166, 0.65913, 0.67308, 0.74954, 0.7603, 0.61393, 0.69901, 0.51447, 0.81923, 0.55516, 0.93473, 0.51447, 1, 0.41954, 1, 0.27036, 0.9253, 0.16187, 0.8098, 0.06694, 0.68016, 0.00817, 0.38787, 0.00365, 0.57307, 0.38232 ], + "triangles": [ 4, 3, 5, 5, 3, 6, 3, 2, 6, 6, 2, 7, 11, 10, 12, 10, 13, 12, 10, 9, 13, 2, 1, 7, 7, 1, 8, 14, 13, 15, 9, 22, 13, 9, 8, 22, 15, 13, 16, 16, 13, 17, 1, 0, 8, 18, 17, 13, 13, 22, 18, 22, 8, 21, 8, 0, 21, 22, 19, 18, 22, 20, 19, 22, 21, 20 ], + "vertices": [ 3, 6, 125.65, 24.16, 0.819, 29, -61.51, 56.32, 0.09, 48, 23.45, -7.43, 0.091, 3, 6, 113.21, 37.17, 0.64201, 29, -75.04, 44.44, 0.09, 48, 40.92, -11.79, 0.26799, 3, 6, 97.55, 48.07, 0.54508, 29, -86.59, 29.26, 0.06169, 48, 59.97, -12.64, 0.39323, 3, 6, 83.15, 52.92, 0.4171, 29, -92.05, 15.07, 0.07361, 48, 74.75, -9.05, 0.5093, 3, 6, 71.8, 52.44, 0.37688, 29, -92.05, 3.72, 0.06651, 48, 84.08, -2.59, 0.55661, 3, 6, 72.97, 35.8, 0.39111, 29, -75.37, 4.18, 0.06902, 48, 74.2, 10.86, 0.53987, 3, 6, 85.07, 23.1, 0.53235, 29, -62.17, 15.73, 0.09394, 48, 57.19, 15.14, 0.37371, 3, 6, 99.08, 12.13, 0.64178, 29, -50.62, 29.26, 0.12, 48, 39.49, 16.93, 0.23822, 2, 6, 118.26, 3.7, 0.86, 29, -41.38, 48.07, 0.14, 3, 6, 107.79, -6.33, 0.89872, 29, -31.81, 37.18, 0.05965, 49, 10.97, -34.81, 0.04163, 3, 6, 99.82, -20.87, 0.76196, 29, -17.62, 28.6, 0.10658, 49, 27.3, -37.7, 0.13146, 3, 6, 94.06, -40.93, 0.59399, 29, 2.18, 22, 0.10482, 49, 48.15, -36.72, 0.30119, 3, 6, 104.47, -52.71, 0.60482, 29, 14.39, 31.9, 0.10673, 49, 55.97, -23.09, 0.28845, 3, 6, 111.36, -43.83, 0.69544, 29, 5.81, 39.16, 0.08561, 49, 45.35, -19.41, 0.21895, 3, 6, 109.11, -60.77, 0.59573, 29, 22.64, 36.19, 0.09904, 49, 62.12, -16.12, 0.30524, 3, 6, 112.76, -76.8, 0.52077, 29, 38.81, 39.16, 0.0919, 49, 76.14, -7.52, 0.38732, 3, 6, 120.07, -85.63, 0.5084, 29, 47.95, 46.09, 0.08972, 49, 82.16, 2.24, 0.40188, 3, 6, 130.95, -85.17, 0.57569, 29, 47.95, 56.98, 0.08663, 49, 78.24, 12.4, 0.33769, 3, 6, 138.42, -74.39, 0.71063, 29, 37.49, 64.9, 0.04692, 49, 65.63, 16.02, 0.24246, 2, 6, 144.66, -57.94, 0.86805, 49, 48.05, 16.66, 0.13195, 2, 6, 148.18, -39.62, 0.96256, 49, 29.57, 14.12, 0.03744, 2, 6, 146.77, 1.27, 0.86, 29, -37.75, 76.45, 0.14, 3, 6, 120.25, -25.8, 0.89676, 29, -11.82, 48.81, 0.02582, 49, 25.43, -16.76, 0.07742 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42 ], + "width": 140, + "height": 73 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch", + "type": "mesh", + "color": "ff4b45ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "boy/hair-side", + "type": "mesh", + "uvs": [ 0.76395, 0.00237, 0.91575, 0.43213, 1, 0.68539, 0.95348, 0.8591, 0.91575, 1, 0.36135, 1, 0.33144, 0.88524, 0.29536, 0.74678, 0, 0.73911, 0, 0.49737, 0.59236, 0, 0.42735, 0.46668 ], + "triangles": [ 6, 7, 3, 4, 5, 6, 3, 4, 6, 11, 9, 10, 7, 8, 9, 1, 11, 10, 1, 10, 0, 11, 7, 9, 2, 7, 11, 2, 11, 1, 3, 7, 2 ], + "vertices": [ 1, 6, 119.95, 47.18, 1, 2, 6, 83.34, 38.03, 0.86, 29, -77.16, 14.64, 0.14, 3, 6, 61.76, 32.9, 0.61654, 46, 39.22, 17.05, 0.21346, 29, -72.95, -7.14, 0.17, 3, 6, 46.73, 34.59, 0.41184, 46, 53.6, 12.39, 0.41816, 29, -75.27, -22.08, 0.17, 3, 6, 34.55, 35.96, 0.24581, 46, 65.26, 8.61, 0.58419, 29, -77.16, -34.2, 0.17, 3, 6, 33.37, 63.65, 0.2605, 46, 60.87, -18.76, 0.6395, 29, -104.88, -34.2, 0.1, 3, 6, 43.17, 65.57, 0.35187, 46, 50.89, -18.68, 0.54813, 29, -106.38, -24.33, 0.1, 3, 6, 54.99, 67.87, 0.46211, 46, 38.85, -18.57, 0.43789, 29, -108.18, -12.42, 0.1, 2, 6, 55.02, 82.66, 0.55402, 46, 35.86, -33.05, 0.44598, 2, 6, 75.79, 83.54, 0.96, 29, -122.95, 9.03, 0.04, 1, 6, 119.79, 55.76, 1, 2, 6, 79.34, 62.3, 0.76, 29, -101.58, 11.67, 0.24 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 8, 10, 14, 16, 16, 18, 18, 20, 0, 20, 4, 6, 6, 8, 10, 12, 12, 14, 4, 14 ], + "width": 50, + "height": 86 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "boy/hair-side", + "type": "mesh", + "uvs": [ 0.76395, 0.00237, 0.91575, 0.43213, 1, 0.68539, 0.95348, 0.8591, 0.91575, 1, 0.36135, 1, 0.33144, 0.88524, 0.29536, 0.74678, 0, 0.73911, 0, 0.49737, 0.59236, 0, 0.42735, 0.46668 ], + "triangles": [ 6, 7, 3, 4, 5, 6, 3, 4, 6, 11, 9, 10, 7, 8, 9, 1, 11, 10, 1, 10, 0, 11, 7, 9, 2, 7, 11, 2, 11, 1, 3, 7, 2 ], + "vertices": [ 1, 6, 119.95, 47.18, 1, 2, 6, 83.34, 38.03, 0.86, 29, -77.16, 14.64, 0.14, 3, 6, 61.76, 32.9, 0.61654, 46, 39.22, 17.05, 0.21346, 29, -72.95, -7.14, 0.17, 3, 6, 46.73, 34.59, 0.41184, 46, 53.6, 12.39, 0.41816, 29, -75.27, -22.08, 0.17, 3, 6, 34.55, 35.96, 0.24581, 46, 65.26, 8.61, 0.58419, 29, -77.16, -34.2, 0.17, 3, 6, 33.37, 63.65, 0.2605, 46, 60.87, -18.76, 0.6395, 29, -104.88, -34.2, 0.1, 3, 6, 43.17, 65.57, 0.35187, 46, 50.89, -18.68, 0.54813, 29, -106.38, -24.33, 0.1, 3, 6, 54.99, 67.87, 0.46211, 46, 38.85, -18.57, 0.43789, 29, -108.18, -12.42, 0.1, 2, 6, 55.02, 82.66, 0.55402, 46, 35.86, -33.05, 0.44598, 2, 6, 75.79, 83.54, 0.96, 29, -122.95, 9.03, 0.04, 1, 6, 119.79, 55.76, 1, 2, 6, 79.34, 62.3, 0.76, 29, -101.58, 11.67, 0.24 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 8, 10, 14, 16, 16, 18, 18, 20, 0, 20, 4, 6, 6, 8, 10, 12, 12, 14, 4, 14 ], + "width": 50, + "height": 86 + } + }, + "hand-back": { + "hand-back-fingers": { "name": "boy/hand-backfingers", "x": 11.59, "y": -2.84, "rotation": 90, "width": 38, "height": 42 } + }, + "hand-front": { + "hand-front-fingers": { "name": "boy/hand-front-fingers", "x": 11.59, "y": 1.97, "rotation": 90, "width": 38, "height": 42 } + }, + "hat": { + "hat": { + "name": "boy/hat", + "type": "mesh", + "uvs": [ 1, 0.67762, 0.84575, 0.80843, 0.65489, 0.90654, 0.43192, 0.966, 0.225, 0.99573, 0.03592, 0.98978, 0, 0.85303, 0.027, 0.47546, 0.07694, 0.46357, 0.10013, 0.306, 0.18575, 0.11573, 0.31954, 0.01465, 0.49257, 0, 0.64775, 0.03249, 0.7637, 0.14546, 0.83327, 0.31492, 0.9064, 0.32384, 1, 0.53789, 0.22857, 0.48438, 0.39089, 0.45168, 0.59424, 0.40708, 0.74765, 0.3506, 0.24819, 0.2733, 0.38197, 0.25843, 0.57997, 0.21384 ], + "triangles": [ 20, 24, 21, 23, 24, 20, 19, 23, 20, 22, 10, 11, 22, 23, 19, 23, 22, 11, 23, 11, 12, 23, 12, 24, 24, 12, 13, 24, 13, 14, 21, 24, 14, 19, 20, 2, 8, 9, 18, 18, 19, 3, 15, 17, 21, 17, 15, 16, 0, 1, 17, 1, 21, 17, 6, 7, 8, 18, 6, 8, 2, 20, 1, 3, 19, 2, 4, 6, 18, 4, 5, 6, 18, 3, 4, 20, 21, 1, 18, 9, 22, 9, 10, 22, 18, 22, 19, 21, 14, 15 ], + "vertices": [ 1, 50, 13.89, -96.68, 1, 2, 50, -1.83, -68.79, 0.82, 52, -67.01, -62.58, 0.18, 2, 50, -14.21, -33.97, 0.72, 52, -74.39, -26.37, 0.28, 2, 50, -22.55, 6.96, 0.72, 52, -76.91, 15.33, 0.28, 2, 50, -27.47, 45.07, 0.82, 52, -76.43, 53.75, 0.18, 1, 50, -28.29, 80.05, 1, 1, 50, -13.41, 87.33, 1, 2, 50, 28.67, 84.11, 0.94502, 51, 49.2, 82.46, 0.05498, 3, 50, 30.39, 74.94, 0.90664, 51, 49.61, 73.14, 0.07509, 52, -14.96, 75.21, 0.01827, 2, 50, 48.04, 71.39, 0.83494, 51, 66.59, 67.15, 0.16506, 2, 50, 69.81, 56.46, 0.75704, 51, 86.05, 49.32, 0.24296, 2, 50, 82.07, 32.21, 0.73015, 51, 94.79, 23.58, 0.26985, 3, 50, 85.05, 0.3, 0.71911, 51, 93.27, -8.43, 0.27957, 52, 28.7, -6.36, 0.00132, 2, 50, 82.67, -28.54, 0.71902, 51, 86.86, -36.65, 0.28098, 2, 50, 71.05, -50.5, 0.7727, 51, 72.27, -56.76, 0.2273, 2, 50, 52.8, -64.16, 0.9302, 51, 52.29, -67.73, 0.0698, 2, 50, 52.39, -77.72, 0.97146, 51, 49.98, -81.09, 0.02854, 1, 50, 29.38, -96.02, 1, 3, 50, 29.27, 46.82, 0.76552, 51, 44.55, 45.45, 0.08448, 52, -20.01, 47.52, 0.15, 3, 50, 34.17, 16.97, 0.75083, 51, 45.22, 15.21, 0.07917, 52, -19.35, 17.28, 0.17, 3, 50, 40.71, -20.41, 0.75063, 51, 46.45, -22.71, 0.07937, 52, -18.11, -20.65, 0.17, 3, 50, 48.17, -48.5, 0.83648, 51, 49.91, -51.57, 0.09352, 52, -14.66, -49.51, 0.07, 3, 50, 52.83, 44.18, 0.71547, 51, 67.51, 39.54, 0.16811, 52, 2.95, 41.61, 0.11643, 3, 50, 55.53, 19.52, 0.68597, 51, 66.73, 14.75, 0.16403, 52, 2.16, 16.81, 0.15, 3, 50, 62.02, -16.86, 0.70061, 51, 68.06, -22.19, 0.18939, 52, 3.49, -20.13, 0.11 ], + "hull": 18, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 0, 34, 44, 22 ], + "width": 185, + "height": 111 + } + }, + "leg-back": { + "leg-back": { + "name": "boy/leg-front", + "type": "mesh", + "uvs": [ 0.07635, 0.9541, 0.06673, 0.89806, 0.05329, 0.83742, 0.06846, 0.78076, 0.1147, 0.71609, 0.09104, 0.65737, 0.07898, 0.59167, 0.08077, 0.52912, 0.07229, 0.46755, 0.06309, 0.4008, 0.05461, 0.3393, 0.04512, 0.27044, 0.0355, 0.20062, 0.02026, 0.09003, 0.0082, 0.0025, 0.86785, 0, 0.85558, 0.08164, 0.83969, 0.18726, 0.82872, 0.26024, 0.81835, 0.32916, 0.80924, 0.38977, 0.79934, 0.45558, 0.79031, 0.51561, 0.77996, 0.58393, 0.76519, 0.64798, 0.75106, 0.708, 0.81982, 0.77305, 0.82792, 0.82913, 0.81561, 0.88039, 0.82497, 0.91422, 1, 0.93396, 0.9918, 1, 0.08936, 1, 0.44189, 0.0854, 0.44189, 0.52429, 0.44189, 0.46108, 0.44189, 0.39534, 0.44189, 0.33482, 0.44189, 0.26387, 0.44189, 0.19291, 0.44582, 0.95343, 0.44247, 0.58821, 0.44304, 0.64978, 0.44358, 0.70926, 0.44851, 0.77908, 0.44475, 0.83655, 0.44521, 0.88665 ], + "triangles": [ 39, 11, 12, 18, 39, 17, 39, 12, 33, 39, 33, 17, 33, 12, 13, 17, 33, 16, 13, 14, 33, 16, 33, 15, 15, 33, 14, 38, 10, 11, 19, 38, 18, 38, 11, 39, 38, 39, 18, 36, 8, 9, 21, 36, 20, 36, 9, 37, 36, 37, 20, 37, 9, 10, 20, 37, 19, 37, 10, 38, 37, 38, 19, 7, 34, 41, 23, 34, 22, 34, 7, 35, 34, 35, 22, 35, 7, 8, 22, 35, 21, 35, 8, 36, 35, 36, 21, 42, 5, 41, 5, 6, 41, 42, 41, 24, 24, 41, 23, 6, 7, 41, 41, 34, 23, 2, 3, 45, 28, 45, 27, 44, 4, 43, 44, 43, 25, 43, 4, 42, 4, 5, 42, 43, 42, 25, 25, 42, 24, 1, 2, 45, 45, 26, 27, 45, 44, 26, 45, 3, 44, 44, 25, 26, 44, 3, 4, 40, 46, 28, 40, 28, 29, 0, 1, 46, 40, 0, 46, 32, 0, 40, 40, 29, 30, 32, 40, 31, 31, 40, 30, 1, 45, 46, 46, 45, 28 ], + "vertices": [ 3, 103, -20.08, 10.6, 0.75, 94, 23.49, -22.3, 0.24676, 95, 59.84, -22.28, 0.00324, 2, 103, -20.97, 28.44, 0.51, 94, 5.72, -22.89, 0.49, 2, 103, -22.07, 47.56, 0.31, 96, 58.17, -23.66, 0.69, 3, 103, -21.4, 65.39, 0.1116, 95, 4.59, -22.78, 0.8184, 96, 40.52, -22.77, 0.07, 4, 103, -18.75, 86.02, 0.01, 95, -16.13, -19.93, 0.10405, 96, 20.1, -19.96, 0.87254, 97, 56.45, -19.89, 0.01341, 3, 95, -35.05, -21.34, 1.0E-4, 96, 1.46, -21.4, 0.56453, 97, 37.51, -21.4, 0.43537, 3, 96, -19.07, -22.08, 0.03286, 97, 16.65, -22.14, 0.91428, 98, 52.69, -22.08, 0.05286, 3, 97, -3.17, -22.02, 0.36522, 98, 32.86, -22.03, 0.63379, 99, 68.32, -21.96, 9.9E-4, 3, 97, -22.68, -22.46, 0.00771, 98, 13.36, -22.55, 0.84445, 99, 49.14, -22.52, 0.14784, 3, 98, -7.93, -23.09, 0.1958, 99, 28.2, -23.11, 0.80288, 100, 64.58, -23.1, 0.00132, 3, 98, -27.79, -23.57, 4.7E-4, 99, 8.67, -23.62, 0.7924, 100, 44.76, -23.62, 0.20713, 3, 99, -12.93, -24.2, 0.11943, 100, 22.84, -24.2, 0.86721, 101, 58.46, -24.21, 0.01336, 2, 100, 0.77, -24.79, 0.53411, 101, 36.71, -24.79, 0.46589, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.4095, 101, 32.87, 24.27, 0.5905, 3, 99, -15.75, 23.6, 0.08894, 100, 19.96, 23.6, 0.87813, 101, 55.62, 23.59, 0.03292, 3, 98, -30.64, 23.03, 8.5E-4, 99, 5.77, 22.96, 0.71828, 100, 41.79, 22.97, 0.28088, 3, 98, -11.12, 22.43, 0.16727, 99, 24.96, 22.4, 0.82705, 100, 61.27, 22.42, 0.00568, 3, 97, -26.03, 21.9, 0.00115, 98, 9.83, 21.8, 0.86047, 99, 45.58, 21.82, 0.13838, 2, 97, -7.13, 21.27, 0.21266, 98, 28.73, 21.24, 0.78734, 3, 96, -21.14, 20.69, 0.01057, 97, 14.4, 20.61, 0.90163, 98, 50.27, 20.67, 0.0878, 2, 96, -1.28, 19.72, 0.4417, 97, 34.58, 19.72, 0.5583, 4, 103, 20.06, 88.71, 0.01, 95, -18.54, 18.89, 0.02159, 96, 17.65, 18.86, 0.95034, 97, 53.83, 18.92, 0.01808, 3, 103, 24.4, 68.19, 0.1116, 95, 2.32, 23.05, 0.8184, 96, 38.19, 23.06, 0.07, 2, 103, 25.14, 50.7, 0.31, 96, 55.61, 23.58, 0.69, 2, 103, 24.62, 34.65, 0.51, 94, 0.26, 22.8, 0.49, 3, 103, 25.37, 23.95, 0.52462, 94, 10.94, 23.37, 0.22, 95, 47.04, 23.38, 0.25538, 1, 103, 36.15, 17.9, 1, 1, 103, 36, -3.06, 1, 1, 103, -19.04, -3.97, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 103, 2.45, 11.15, 0.83, 94, 23.32, 0.24, 0.17, 2, 97, 15.67, 0.04, 0.99997, 98, 51.62, 0.1, 3.0E-5, 2, 96, -0.81, 0.07, 0.37159, 97, 35.13, 0.07, 0.62841, 2, 103, 1.32, 88.25, 0.01, 96, 18, 0.1, 0.99, 3, 103, 1.78, 66.12, 0.1116, 95, 4.15, 0.4, 0.8184, 96, 40.04, 0.41, 0.07, 2, 103, 1.81, 48.1, 0.31, 96, 57.92, 0.22, 0.69, 3, 103, 2.06, 32.36, 0.38323, 94, 2.19, 0.2, 0.57, 95, 38.18, 0.2, 0.04677 ], + "hull": 33, + "edges": [ 28, 30, 58, 60, 60, 62, 62, 64, 42, 44, 26, 28, 66, 26, 30, 32, 66, 32, 70, 68, 42, 70, 14, 16, 70, 16, 40, 42, 72, 70, 40, 72, 16, 18, 72, 18, 38, 40, 74, 72, 38, 74, 18, 20, 74, 20, 36, 38, 76, 74, 36, 76, 20, 22, 76, 22, 32, 34, 34, 36, 66, 78, 78, 76, 34, 78, 22, 24, 24, 26, 78, 24, 68, 82, 46, 82, 82, 12, 46, 48, 84, 82, 48, 84, 12, 10, 84, 10, 48, 50, 86, 84, 50, 86, 10, 8, 86, 8, 50, 52, 88, 86, 52, 88, 8, 6, 88, 6, 52, 54, 90, 88, 54, 90, 6, 4, 90, 4, 54, 56, 56, 58, 80, 92, 92, 90, 56, 92, 4, 2, 92, 2, 58, 80, 2, 0, 0, 64, 80, 0, 12, 14, 44, 46, 60, 80 ], + "width": 61, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "boy/leg-front", + "type": "mesh", + "uvs": [ 0.07635, 0.9541, 0.06673, 0.89806, 0.05329, 0.83742, 0.06846, 0.78076, 0.1147, 0.71609, 0.09104, 0.65737, 0.07898, 0.59167, 0.08077, 0.52912, 0.07229, 0.46755, 0.06309, 0.4008, 0.05461, 0.3393, 0.04512, 0.27044, 0.0355, 0.20062, 0.02026, 0.09003, 0.0082, 0.0025, 0.86785, 0, 0.85558, 0.08164, 0.83969, 0.18726, 0.82872, 0.26024, 0.81835, 0.32916, 0.80924, 0.38977, 0.79934, 0.45558, 0.79031, 0.51561, 0.77996, 0.58393, 0.76519, 0.64798, 0.75106, 0.708, 0.81982, 0.77305, 0.82792, 0.82913, 0.81561, 0.88039, 0.82497, 0.91422, 1, 0.93396, 0.9918, 1, 0.08936, 1, 0.44189, 0.0854, 0.44189, 0.52429, 0.44189, 0.46108, 0.44189, 0.39534, 0.44189, 0.33482, 0.44189, 0.26387, 0.44189, 0.19291, 0.44582, 0.95343, 0.44247, 0.58821, 0.44304, 0.64978, 0.44358, 0.70926, 0.44851, 0.77908, 0.44475, 0.83655, 0.44521, 0.88665 ], + "triangles": [ 38, 10, 11, 19, 38, 18, 38, 11, 39, 38, 39, 18, 39, 11, 12, 36, 8, 9, 21, 36, 20, 36, 9, 37, 36, 37, 20, 37, 9, 10, 20, 37, 19, 37, 10, 38, 37, 38, 19, 7, 34, 41, 23, 34, 22, 34, 7, 35, 34, 35, 22, 35, 7, 8, 22, 35, 21, 35, 8, 36, 35, 36, 21, 42, 5, 41, 5, 6, 41, 42, 41, 24, 24, 41, 23, 6, 7, 41, 41, 34, 23, 43, 4, 42, 43, 42, 25, 4, 5, 42, 44, 4, 43, 44, 43, 25, 25, 42, 24, 1, 2, 45, 28, 45, 27, 2, 3, 45, 45, 26, 27, 45, 44, 26, 45, 3, 44, 44, 3, 4, 46, 45, 28, 44, 25, 26, 18, 39, 17, 39, 12, 33, 39, 33, 17, 33, 12, 13, 17, 33, 16, 13, 14, 33, 16, 33, 15, 15, 33, 14, 32, 40, 31, 31, 40, 30, 32, 0, 40, 40, 29, 30, 40, 28, 29, 0, 1, 46, 1, 45, 46, 40, 0, 46, 40, 46, 28 ], + "vertices": [ 3, 102, -21.4, 12.07, 0.65, 28, 23.5, -22.3, 0.3448, 27, 59.45, -22.3, 0.00521, 3, 102, -21.96, 29.92, 0.51, 28, 5.76, -22.88, 0.33074, 27, 41.71, -22.88, 0.15926, 3, 102, -22.66, 49.08, 0.31148, 28, -13.39, -23.7, 0.0912, 27, 22.52, -23.7, 0.59732, 3, 102, -21.61, 66.95, 0.17, 27, 4.58, -22.78, 0.5805, 26, 40.54, -22.78, 0.2495, 4, 102, -18.4, 87.61, 0.03, 27, -15.86, -19.96, 0.10277, 26, 20.08, -19.96, 0.82804, 25, 56.01, -19.96, 0.03919, 3, 27, -34.44, -21.4, 7.9E-4, 26, 1.51, -21.4, 0.57156, 25, 37.44, -21.4, 0.42765, 3, 26, -19.27, -22.14, 0.05654, 25, 16.67, -22.14, 0.87764, 24, 52.6, -22.14, 0.06582, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 3, 26, -21.58, 20.62, 0.04097, 25, 14.4, 20.62, 0.83939, 24, 50.38, 20.63, 0.11963, 3, 26, -1.35, 19.72, 0.4338, 25, 34.64, 19.72, 0.56533, 24, 70.61, 19.73, 8.7E-4, 4, 102, 20.45, 89.06, 0.03, 27, -18.28, 18.86, 0.04202, 26, 17.66, 18.86, 0.84488, 25, 53.66, 18.87, 0.0831, 3, 102, 24.24, 68.6, 0.17, 27, 2.29, 23.05, 0.47119, 26, 38.23, 23.05, 0.35881, 2, 102, 24.6, 51.21, 0.32421, 27, 20.01, 23.55, 0.67579, 3, 102, 23.74, 35.21, 0.51, 28, 0.25, 22.8, 0.21249, 27, 36.2, 22.8, 0.27751, 3, 102, 24.29, 24.55, 0.73, 28, 10.95, 23.37, 0.25858, 27, 46.78, 23.36, 0.01142, 1, 102, 34.96, 18.3, 1, 1, 102, 34.41, -2.64, 1, 1, 102, -20.64, -2.52, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 102, 1.14, 12.19, 0.83, 28, 23.32, 0.24, 0.17, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 2, 102, 1.77, 89.22, 0.03, 26, 18, 0.1, 0.97, 3, 102, 1.58, 67.1, 0.17, 27, 4.15, 0.4, 0.76746, 26, 40.07, 0.4, 0.06254, 2, 102, 1.23, 49.11, 0.22, 27, 22.3, 0.17, 0.78, 3, 102, 1.15, 33.38, 0.37, 28, 2.2, 0.2, 0.5638, 27, 38.15, 0.2, 0.0662 ], + "hull": 33, + "edges": [ 28, 30, 58, 60, 60, 62, 62, 64, 42, 44, 26, 28, 66, 26, 30, 32, 66, 32, 70, 68, 42, 70, 14, 16, 70, 16, 40, 42, 72, 70, 40, 72, 16, 18, 72, 18, 38, 40, 74, 72, 38, 74, 18, 20, 74, 20, 36, 38, 76, 74, 36, 76, 20, 22, 76, 22, 32, 34, 34, 36, 66, 78, 78, 76, 34, 78, 22, 24, 24, 26, 78, 24, 68, 82, 46, 82, 82, 12, 46, 48, 84, 82, 48, 84, 12, 10, 84, 10, 48, 50, 86, 84, 50, 86, 10, 8, 86, 8, 50, 52, 88, 86, 52, 88, 8, 6, 88, 6, 52, 54, 90, 88, 54, 90, 6, 4, 90, 4, 54, 56, 56, 58, 80, 92, 92, 90, 56, 92, 4, 2, 92, 2, 58, 80, 2, 0, 0, 64, 80, 0, 12, 14, 44, 46, 60, 80 ], + "width": 61, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 }, + "mouth-smile": { "name": "boy/mouth-smile", "x": -4.12, "y": 2.56, "width": 57, "height": 13 } + }, + "nose": { + "nose": { + "name": "boy/nose", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 6, 51.55, -68.98, 0.63, 29, 28.41, -21.66, 0.37, 2, 6, 50.11, -35.01, 0.72, 29, -5.59, -21.66, 0.28, 2, 6, 69.09, -34.21, 0.72, 29, -5.59, -2.66, 0.28, 2, 6, 70.54, -68.18, 0.63, 29, 28.41, -2.66, 0.37 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 34, + "height": 19 + } + }, + "pompom": { + "pompom": { "name": "boy/pompom", "x": -48.24, "y": 11.74, "rotation": -95.63, "width": 96, "height": 85 } + }, + "sleeve-front": { + "sleeve-front": { + "name": "boy/arm-front", + "type": "mesh", + "uvs": [ 0, 0.9983, 1, 1, 1, 0.86682, 0.93575, 0.85962, 0.92543, 0.81301, 0.91517, 0.75475, 0.90967, 0.69766, 0.90374, 0.64195, 0.89852, 0.59071, 0.89321, 0.53993, 0.88593, 0.48173, 0.87995, 0.43392, 0.87387, 0.38539, 0.86778, 0.33662, 0.86019, 0.276, 0.85262, 0.21542, 0.84443, 0.15001, 0.83706, 0.09104, 0.82567, 0, 0.20656, 4.9E-4, 0.19476, 0.09288, 0.18669, 0.15618, 0.17892, 0.21703, 0.17122, 0.27738, 0.16365, 0.33672, 0.15684, 0.39004, 0.15032, 0.44113, 0.14396, 0.49098, 0.13775, 0.53965, 0.13226, 0.59099, 0.12603, 0.6493, 0.11997, 0.7051, 0.11515, 0.75592, 0.10543, 0.80835, 0.09698, 0.85907, 0.00989, 0.86774, 0.51288, 0.08992, 0.5068, 0.53843, 0.50952, 0.33772, 0.50435, 0.75817, 0.50554, 0.64894, 0.50328, 0.81283, 0.50817, 0.43751, 0.51115, 0.2178, 0.51199, 0.156, 0.51033, 0.27832, 0.50881, 0.38996, 0.50751, 0.48617, 0.50614, 0.59548, 0.5049, 0.70471, 0.50929, 0.85256 ], + "triangles": [ 0, 50, 1, 50, 0, 34, 0, 35, 34, 34, 33, 50, 50, 3, 1, 50, 4, 3, 3, 2, 1, 44, 36, 17, 44, 20, 36, 20, 19, 36, 36, 18, 17, 36, 19, 18, 33, 41, 50, 50, 41, 4, 4, 41, 5, 41, 39, 5, 33, 32, 41, 41, 32, 39, 39, 6, 5, 39, 49, 6, 32, 31, 39, 39, 31, 49, 31, 30, 49, 49, 7, 6, 49, 40, 7, 49, 30, 40, 30, 29, 40, 40, 8, 7, 40, 48, 8, 40, 29, 48, 48, 9, 8, 48, 37, 9, 29, 28, 48, 48, 28, 37, 9, 37, 10, 28, 27, 37, 37, 47, 10, 37, 27, 47, 27, 26, 47, 47, 11, 10, 47, 42, 11, 47, 26, 42, 26, 25, 42, 42, 12, 11, 42, 46, 12, 42, 25, 46, 25, 24, 46, 46, 13, 12, 46, 38, 13, 46, 24, 38, 38, 14, 13, 38, 45, 14, 24, 23, 38, 38, 23, 45, 45, 15, 14, 23, 22, 45, 45, 43, 15, 45, 22, 43, 43, 16, 15, 43, 44, 16, 22, 21, 43, 43, 21, 44, 21, 20, 44, 44, 17, 16 ], + "vertices": [ 1, 54, 30.3, -36.41, 1, 1, 54, 30.3, 34.59, 1, 1, 54, -0.09, 34.58, 1, 1, 54, -1.73, 30.02, 1, 3, 13, 65.08, 29.54, 0.00868, 12, 31.72, 29.7, 0.54327, 16, -1.8, 29.7, 0.44805, 3, 13, 51.72, 28.75, 0.09476, 12, 18.24, 28.84, 0.78295, 16, -14.97, 28.81, 0.12229, 4, 14, 72.39, 28.06, 1.0E-5, 13, 38.62, 28.29, 0.36416, 12, 5.03, 28.32, 0.62452, 16, -27.87, 28.25, 0.01131, 3, 14, 59.57, 27.66, 0.01697, 13, 25.84, 27.81, 0.71378, 12, -7.87, 27.77, 0.26925, 3, 14, 47.78, 27.3, 0.12736, 13, 14.09, 27.38, 0.81039, 12, -19.73, 27.28, 0.06225, 4, 15, 69.71, 26.86, 1.9E-4, 14, 36.09, 26.94, 0.41186, 13, 2.44, 26.95, 0.58392, 12, -31.48, 26.79, 0.00403, 3, 15, 56.29, 26.39, 0.03436, 14, 22.7, 26.43, 0.7688, 13, -10.92, 26.37, 0.19684, 3, 15, 45.26, 26, 0.17991, 14, 11.7, 26.02, 0.78189, 13, -21.89, 25.89, 0.03821, 4, 11, 66.92, 25.61, 4.0E-5, 15, 34.07, 25.6, 0.49682, 14, 0.53, 25.6, 0.5018, 13, -33.02, 25.41, 0.00134, 3, 11, 55.89, 25.21, 0.02124, 15, 22.83, 25.2, 0.80075, 14, -10.69, 25.18, 0.17801, 3, 11, 42.17, 24.71, 0.21905, 15, 8.85, 24.71, 0.76696, 14, -24.64, 24.66, 0.01399, 2, 11, 28.46, 24.21, 0.67585, 15, -5.12, 24.22, 0.32415, 2, 11, 13.66, 23.68, 0.96846, 15, -20.2, 23.68, 0.03154, 1, 8, 0.24, 23.24, 1, 1, 8, -20.51, 22.43, 1, 1, 8, -20.4, -21.52, 1, 1, 8, 0.66, -22.36, 1, 2, 11, 14.92, -23.03, 0.9591, 15, -18.93, -23.02, 0.0409, 2, 11, 28.69, -23.62, 0.67055, 15, -4.9, -23.62, 0.32945, 3, 11, 42.34, -24.21, 0.20785, 15, 9.01, -24.21, 0.77749, 14, -24.38, -24.26, 0.01467, 3, 11, 55.76, -24.78, 0.01896, 15, 22.69, -24.79, 0.80223, 14, -10.73, -24.81, 0.17882, 3, 15, 34.98, -25.31, 0.45683, 14, 1.54, -25.31, 0.5408, 13, -31.71, -25.5, 0.00238, 3, 15, 46.76, -25.81, 0.14032, 14, 13.3, -25.78, 0.80693, 13, -19.98, -25.9, 0.05275, 3, 15, 58.25, -26.3, 0.01945, 14, 24.77, -26.25, 0.7308, 13, -8.54, -26.3, 0.24975, 4, 15, 69.47, -26.77, 2.7E-4, 14, 35.97, -26.7, 0.41316, 13, 2.63, -26.69, 0.58179, 12, -31, -26.85, 0.00478, 3, 14, 47.78, -27.1, 0.12648, 13, 14.41, -27.02, 0.80795, 12, -19.11, -27.12, 0.06558, 3, 14, 61.2, -27.56, 0.01164, 13, 27.79, -27.4, 0.6672, 12, -5.6, -27.43, 0.32116, 3, 13, 40.6, -27.77, 0.30828, 12, 7.32, -27.73, 0.67545, 16, -25.51, -27.79, 0.01627, 3, 13, 52.26, -28.05, 0.08696, 12, 19.09, -27.95, 0.78468, 16, -14, -27.99, 0.12837, 3, 13, 64.29, -28.69, 0.00978, 12, 31.24, -28.52, 0.56264, 16, -2.14, -28.53, 0.42759, 1, 54, -1.86, -29.53, 1, 1, 54, 0.13, -35.71, 1, 1, 8, -0.01, 0.23, 1, 2, 14, 35.72, -0.5, 0.06656, 13, 2.22, -0.49, 0.93344, 1, 15, 23, -0.23, 1, 2, 13, 52.64, -0.42, 0, 12, 19.33, -0.32, 1, 1, 13, 27.58, -0.45, 1, 2, 12, 31.99, -0.27, 0.81958, 16, -1.47, -0.27, 0.18042, 2, 14, 12.49, -0.38, 1, 13, -20.94, -0.5, 0, 1, 11, 28.93, -0.03, 1, 1, 11, 14.95, 0.07, 1, 1, 15, 9.31, -0.13, 1, 2, 15, 35.04, -0.32, 0.18244, 14, 1.55, -0.32, 0.81756, 1, 14, 23.69, -0.44, 1, 1, 13, 15.31, -0.47, 1, 2, 13, 40.38, -0.44, 7.7E-4, 12, 6.95, -0.4, 0.99923, 1, 54, -3.3, -0.26, 1 ], + "hull": 36, + "edges": [ 0, 2, 2, 4, 36, 38, 0, 70, 68, 70, 4, 6, 34, 36, 72, 34, 38, 40, 72, 40, 74, 56, 74, 18, 76, 48, 76, 26, 78, 64, 78, 10, 80, 60, 80, 14, 82, 78, 64, 66, 82, 66, 8, 10, 82, 8, 84, 52, 84, 22, 86, 44, 86, 30, 72, 88, 88, 86, 40, 42, 42, 44, 88, 42, 30, 32, 32, 34, 88, 32, 76, 90, 90, 86, 44, 46, 46, 48, 90, 46, 26, 28, 28, 30, 90, 28, 76, 92, 92, 84, 48, 50, 50, 52, 92, 50, 22, 24, 24, 26, 92, 24, 74, 94, 94, 84, 52, 54, 54, 56, 94, 54, 18, 20, 20, 22, 94, 20, 74, 96, 96, 80, 56, 58, 58, 60, 96, 58, 14, 16, 16, 18, 96, 16, 78, 98, 98, 80, 60, 62, 62, 64, 98, 62, 10, 12, 12, 14, 98, 12, 66, 68, 6, 8 ], + "width": 71, + "height": 229 + } + }, + "zip-boy": { + "zip-boy": { "name": "boy/zip", "x": 14.35, "y": -0.15, "rotation": 82.23, "width": 27, "height": 46 } + } + } + }, + { + "name": "full-skins/girl", + "bones": [ "bag-back-front", "bag-flap", "hair-strand-back-1", "hair-strand-back-3", "hat", "pompom-control", "zip-girl", "bag-strap-front", "hair-holder-front", "scarf-back", "bag-back-down", "hat-control", "bag-strap-back", "hair-strand-front-2", "hair-strand-front-3", "hair-holder-back", "bag", "hair-strand-front-4", "bag-control", "hair-strand-front-1", "hair-strand-back-2", "hat-base" ], + "transform": [ "hat-control", "leg-down-back-up", "leg-up-back" ], + "attachments": { + "arm-back": { + "arm-back": { "name": "girl/arm-front", "type": "linkedmesh", "skin": "full-skins/boy", "parent": "arm-back", "width": 71, "height": 229 } + }, + "bag-base": { + "bag-base": { + "name": "girl/bag-base", + "type": "mesh", + "uvs": [ 0.83893, 0.8993, 0.6302, 1, 0.16529, 0.94665, 0.01981, 0.72002, 0, 0.45956, 0.05144, 0.21601, 0.15581, 0, 0.8073, 0.02997, 0.95278, 0.23969, 1, 0.45956, 1, 0.68619, 0.61122, 0.80458, 0.56694, 0.49338, 0.67131, 0.22616 ], + "triangles": [ 13, 5, 6, 13, 6, 7, 2, 11, 1, 8, 9, 13, 10, 11, 9, 12, 5, 13, 12, 9, 11, 3, 12, 11, 13, 9, 12, 0, 11, 10, 1, 11, 0, 13, 7, 8, 4, 5, 12, 3, 4, 12, 2, 3, 11 ], + "vertices": [ 2, 57, -24.02, 97.1, 0.4359, 58, -108.39, 43.99, 0.5641, 2, 57, 0.18, 111.52, 0.48095, 58, -84.2, 58.41, 0.51905, 2, 57, 57.69, 111.91, 0.16986, 58, -26.69, 58.81, 0.83014, 2, 57, 78.42, 88.05, 0.54, 58, -5.95, 34.95, 0.46, 2, 57, 84.25, 58.57, 0.53182, 58, -0.13, 5.47, 0.46818, 2, 57, 81.14, 30.02, 0.39, 58, -3.24, -23.08, 0.61, 1, 58, -13.17, -49.22, 1, 2, 57, -8.8, -1.79, 0.37, 58, -93.18, -54.89, 0.63, 2, 57, -29.32, 20.14, 0.51747, 58, -113.69, -32.96, 0.48253, 2, 57, -37.96, 44.6, 0.46, 58, -122.33, -8.5, 0.54, 2, 57, -40.92, 70.5, 0.46, 58, -125.29, 17.39, 0.54, 2, 57, 5.05, 89.45, 0.96, 58, -79.33, 36.35, 0.04, 1, 57, 14.52, 54.52, 1, 2, 57, 5.26, 22.53, 0.92, 58, -79.12, -30.58, 0.08 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 24, 26, 22, 6 ], + "width": 123, + "height": 115 + } + }, + "bag-strap-back": { + "bag-strap-back": { + "name": "girl/bag-strap-front", + "type": "mesh", + "uvs": [ 0.10329, 0.09701, 0.09625, 0.16933, 0.0882, 0.24002, 0.07824, 0.30385, 0.06981, 0.37343, 0.06125, 0.44416, 0.05318, 0.51073, 0.04445, 0.58281, 0.03622, 0.65075, 0.02694, 0.72743, 0.01818, 0.7997, 0.00877, 0.87745, 0, 0.94985, 0.49463, 0.9881, 1, 0.94985, 0.9924, 0.87902, 0.98374, 0.79824, 0.97585, 0.72459, 0.96826, 0.65383, 0.96097, 0.58591, 0.95321, 0.51354, 0.94607, 0.44688, 0.93834, 0.37479, 0.93057, 0.30235, 0.92162, 0.23729, 0.91478, 0.1693, 0.90826, 0.09429, 0.90262, 0.04177, 0.68729, 0.00493, 0.50446, 0.00754, 0.29063, 0.0106, 0.10929, 0.04743, 0.49571, 0.88043, 0.49652, 0.79968, 0.49725, 0.72601, 0.49799, 0.65234, 0.49866, 0.58577, 0.49938, 0.51352, 0.50005, 0.44693, 0.50078, 0.3747, 0.50147, 0.30525, 0.50233, 0.23869, 0.50296, 0.17069, 0.50358, 0.09559 ], + "triangles": [ 36, 6, 37, 7, 6, 36, 36, 37, 20, 19, 36, 20, 35, 7, 36, 8, 7, 35, 35, 36, 19, 18, 35, 19, 34, 8, 35, 34, 35, 18, 34, 18, 17, 9, 8, 34, 33, 9, 34, 33, 34, 17, 33, 17, 16, 10, 9, 33, 32, 10, 33, 11, 10, 32, 32, 33, 16, 32, 16, 15, 13, 11, 32, 12, 11, 13, 13, 32, 15, 13, 15, 14, 43, 30, 29, 43, 29, 28, 26, 43, 28, 26, 28, 27, 0, 31, 30, 0, 30, 43, 42, 0, 43, 1, 0, 42, 42, 43, 26, 42, 26, 25, 41, 1, 42, 41, 42, 25, 41, 25, 24, 2, 1, 41, 40, 2, 41, 3, 2, 40, 40, 41, 24, 40, 24, 23, 39, 3, 40, 4, 3, 39, 39, 40, 23, 22, 39, 23, 38, 4, 39, 5, 4, 38, 38, 39, 22, 38, 22, 21, 37, 5, 38, 6, 5, 37, 37, 38, 21, 20, 37, 21 ], + "vertices": [ 2, 61, -9.66, -6.38, 0.99238, 62, -9.66, 163.86, 0.00762, 2, 61, -9.83, -20.27, 0.95187, 62, -9.83, 149.97, 0.04813, 2, 61, -10.03, -33.84, 0.88337, 62, -10.03, 136.4, 0.11663, 2, 61, -10.27, -46.1, 0.80311, 62, -10.27, 124.14, 0.19689, 2, 61, -10.47, -59.46, 0.70151, 62, -10.47, 110.78, 0.29849, 2, 61, -10.67, -73.04, 0.58865, 62, -10.67, 97.2, 0.41135, 2, 61, -10.87, -85.82, 0.47894, 62, -10.87, 84.42, 0.52106, 2, 61, -11.08, -99.66, 0.36197, 62, -11.08, 70.58, 0.63803, 2, 61, -11.27, -112.7, 0.25859, 62, -11.27, 57.54, 0.74141, 2, 61, -11.5, -127.42, 0.15597, 62, -11.5, 42.82, 0.84403, 2, 61, -11.71, -141.3, 0.07856, 62, -11.71, 28.94, 0.92144, 2, 61, -11.93, -156.23, 0.02246, 62, -11.93, 14.01, 0.97754, 2, 61, -12.14, -170.13, 0.00178, 62, -12.14, 0.11, 0.99822, 1, 62, -0.27, -7.23, 1, 2, 61, 11.86, -170.13, 0.00175, 62, 11.86, 0.11, 0.99825, 2, 61, 11.67, -156.53, 0.0217, 62, 11.67, 13.71, 0.9783, 2, 61, 11.47, -141.02, 0.07999, 62, 11.47, 29.22, 0.92001, 2, 61, 11.28, -126.88, 0.15955, 62, 11.28, 43.36, 0.84045, 2, 61, 11.1, -113.29, 0.25429, 62, 11.1, 56.95, 0.74571, 2, 61, 10.92, -100.25, 0.35721, 62, 10.92, 69.99, 0.64279, 2, 61, 10.73, -86.36, 0.47445, 62, 10.73, 83.88, 0.52555, 2, 61, 10.56, -73.56, 0.58435, 62, 10.56, 96.68, 0.41565, 2, 61, 10.38, -59.72, 0.69956, 62, 10.38, 110.52, 0.30044, 2, 61, 10.19, -45.81, 0.80529, 62, 10.19, 124.43, 0.19471, 2, 61, 9.98, -33.32, 0.88656, 62, 9.98, 136.92, 0.11344, 2, 61, 9.81, -20.26, 0.95193, 62, 9.81, 149.98, 0.04807, 2, 61, 9.66, -5.86, 0.99321, 62, 9.66, 164.38, 0.00679, 2, 61, 9.52, 4.22, 0.99996, 62, 9.52, 174.46, 4.0E-5, 1, 61, 4.35, 11.3, 1, 1, 61, -0.04, 10.79, 1, 1, 61, -5.17, 10.21, 1, 2, 61, -9.52, 3.14, 0.99986, 62, -9.52, 173.38, 1.4E-4, 2, 61, -0.25, -156.8, 0.02105, 62, -0.25, 13.44, 0.97895, 2, 61, -0.23, -141.3, 0.07899, 62, -0.23, 28.94, 0.92101, 2, 61, -0.21, -127.15, 0.15826, 62, -0.21, 43.09, 0.84174, 2, 61, -0.19, -113.01, 0.25696, 62, -0.19, 57.23, 0.74304, 2, 61, -0.18, -100.22, 0.35801, 62, -0.18, 70.02, 0.64199, 2, 61, -0.16, -86.35, 0.47508, 62, -0.16, 83.89, 0.52492, 2, 61, -0.14, -73.57, 0.58483, 62, -0.14, 96.67, 0.41517, 2, 61, -0.12, -59.7, 0.70022, 62, -0.12, 110.54, 0.29978, 2, 61, -0.11, -46.37, 0.80185, 62, -0.11, 123.87, 0.19815, 2, 61, -0.09, -33.59, 0.88541, 62, -0.09, 136.65, 0.11459, 2, 61, -0.07, -20.53, 0.95108, 62, -0.07, 149.71, 0.04892, 2, 61, -0.06, -6.11, 0.9934, 62, -0.06, 164.13, 0.0066 ], + "hull": 32, + "edges": [ 24, 26, 26, 28, 54, 56, 60, 62, 56, 58, 58, 60, 24, 22, 26, 64, 22, 64, 28, 30, 64, 30, 22, 20, 66, 64, 20, 66, 30, 32, 66, 32, 20, 18, 68, 66, 18, 68, 32, 34, 68, 34, 18, 16, 70, 68, 16, 70, 34, 36, 70, 36, 16, 14, 72, 70, 14, 72, 36, 38, 72, 38, 38, 40, 74, 72, 40, 74, 14, 12, 74, 12, 12, 10, 76, 74, 10, 76, 40, 42, 76, 42, 10, 8, 78, 76, 8, 78, 42, 44, 78, 44, 8, 6, 80, 78, 6, 80, 44, 46, 80, 46, 6, 4, 82, 80, 4, 82, 46, 48, 82, 48, 4, 2, 84, 82, 2, 84, 48, 50, 84, 50, 2, 0, 0, 62, 58, 86, 86, 84, 0, 86, 50, 52, 52, 54, 86, 52 ], + "width": 24, + "height": 192 + } + }, + "bag-strap-front": { + "bag-strap-front": { + "name": "girl/bag-strap-front", + "type": "mesh", + "uvs": [ 0.10329, 0.09701, 0.09625, 0.16933, 0.0882, 0.24002, 0.07824, 0.30385, 0.06981, 0.37343, 0.06125, 0.44416, 0.05318, 0.51073, 0.04445, 0.58281, 0.03622, 0.65075, 0.02694, 0.72743, 0.01818, 0.7997, 0.00877, 0.87745, 0, 0.94985, 0.49463, 0.9881, 1, 0.94985, 0.9924, 0.87902, 0.98374, 0.79824, 0.97585, 0.72459, 0.96826, 0.65383, 0.96097, 0.58591, 0.95321, 0.51354, 0.94607, 0.44688, 0.93834, 0.37479, 0.93057, 0.30235, 0.92162, 0.23729, 0.91478, 0.1693, 0.90826, 0.09429, 0.90262, 0.04177, 0.68729, 0.00493, 0.50446, 0.00754, 0.29063, 0.0106, 0.10929, 0.04743, 0.49571, 0.88043, 0.49652, 0.79968, 0.49725, 0.72601, 0.49799, 0.65234, 0.49866, 0.58577, 0.49938, 0.51352, 0.50005, 0.44693, 0.50078, 0.3747, 0.50147, 0.30525, 0.50233, 0.23869, 0.50296, 0.17069, 0.50358, 0.09559 ], + "triangles": [ 36, 6, 37, 7, 6, 36, 36, 37, 20, 19, 36, 20, 35, 7, 36, 8, 7, 35, 35, 36, 19, 18, 35, 19, 34, 8, 35, 34, 35, 18, 34, 18, 17, 9, 8, 34, 33, 9, 34, 33, 34, 17, 33, 17, 16, 10, 9, 33, 32, 10, 33, 11, 10, 32, 32, 33, 16, 32, 16, 15, 13, 11, 32, 12, 11, 13, 13, 32, 15, 13, 15, 14, 43, 30, 29, 43, 29, 28, 26, 43, 28, 26, 28, 27, 0, 31, 30, 0, 30, 43, 42, 0, 43, 1, 0, 42, 42, 43, 26, 42, 26, 25, 41, 1, 42, 41, 42, 25, 41, 25, 24, 2, 1, 41, 40, 2, 41, 3, 2, 40, 40, 41, 24, 40, 24, 23, 39, 3, 40, 4, 3, 39, 39, 40, 23, 22, 39, 23, 38, 4, 39, 5, 4, 38, 38, 39, 22, 38, 22, 21, 37, 5, 38, 6, 5, 37, 37, 38, 21, 20, 37, 21 ], + "vertices": [ 2, 63, -8.77, -6.38, 0.99173, 64, -8.77, 163.86, 0.00827, 2, 63, -8.94, -20.27, 0.94988, 64, -8.94, 149.97, 0.05012, 2, 63, -9.13, -33.84, 0.8807, 64, -9.13, 136.4, 0.1193, 2, 63, -9.37, -46.1, 0.8002, 64, -9.37, 124.14, 0.1998, 2, 63, -9.57, -59.46, 0.69863, 64, -9.57, 110.78, 0.30137, 2, 63, -9.78, -73.04, 0.58605, 64, -9.78, 97.2, 0.41395, 2, 63, -9.97, -85.82, 0.47675, 64, -9.97, 84.42, 0.52325, 2, 63, -10.18, -99.66, 0.36031, 64, -10.18, 70.58, 0.63969, 2, 63, -10.38, -112.7, 0.25746, 64, -10.38, 57.54, 0.74254, 2, 63, -10.6, -127.42, 0.1554, 64, -10.6, 42.82, 0.8446, 2, 63, -10.81, -141.3, 0.07837, 64, -10.81, 28.94, 0.92163, 2, 63, -11.04, -156.23, 0.02242, 64, -11.04, 14.01, 0.97758, 2, 63, -11.25, -170.13, 0.00161, 64, -11.25, 0.11, 0.99839, 1, 64, 0.62, -7.23, 1, 2, 63, 12.75, -170.13, 0.00201, 64, 12.75, 0.11, 0.99799, 2, 63, 12.57, -156.53, 0.02191, 64, 12.57, 13.71, 0.97809, 2, 63, 12.36, -141.02, 0.07986, 64, 12.36, 29.22, 0.92014, 2, 63, 12.17, -126.88, 0.15897, 64, 12.17, 43.36, 0.84103, 2, 63, 11.99, -113.29, 0.25319, 64, 11.99, 56.95, 0.74681, 2, 63, 11.82, -100.25, 0.35558, 64, 11.82, 69.99, 0.64442, 2, 63, 11.63, -86.36, 0.47228, 64, 11.63, 83.88, 0.52772, 2, 63, 11.46, -73.56, 0.58177, 64, 11.46, 96.68, 0.41823, 2, 63, 11.27, -59.72, 0.69669, 64, 11.27, 110.52, 0.30331, 2, 63, 11.09, -45.81, 0.80238, 64, 11.09, 124.43, 0.19762, 2, 63, 10.87, -33.32, 0.88388, 64, 10.87, 136.92, 0.11612, 2, 63, 10.71, -20.26, 0.94981, 64, 10.71, 149.98, 0.05019, 2, 63, 10.55, -5.86, 0.9921, 64, 10.55, 164.38, 0.0079, 2, 63, 10.42, 4.22, 0.99987, 64, 10.42, 174.46, 1.3E-4, 1, 63, 5.25, 11.3, 1, 1, 63, 0.86, 10.79, 1, 1, 63, -4.27, 10.21, 1, 2, 63, -8.62, 3.14, 0.99986, 64, -8.62, 173.38, 1.4E-4, 2, 63, 0.65, -156.8, 0.02114, 64, 0.65, 13.44, 0.97886, 2, 63, 0.67, -141.3, 0.07883, 64, 0.67, 28.94, 0.92117, 2, 63, 0.69, -127.15, 0.15769, 64, 0.69, 43.09, 0.84231, 2, 63, 0.71, -113.01, 0.25584, 64, 0.71, 57.23, 0.74416, 2, 63, 0.72, -100.22, 0.35637, 64, 0.72, 70.02, 0.64363, 2, 63, 0.74, -86.35, 0.4729, 64, 0.74, 83.89, 0.5271, 2, 63, 0.75, -73.57, 0.58224, 64, 0.75, 96.67, 0.41776, 2, 63, 0.77, -59.7, 0.69735, 64, 0.77, 110.54, 0.30265, 2, 63, 0.79, -46.37, 0.79894, 64, 0.79, 123.87, 0.20106, 2, 63, 0.81, -33.59, 0.88274, 64, 0.81, 136.65, 0.11726, 2, 63, 0.82, -20.53, 0.94901, 64, 0.82, 149.71, 0.05099, 2, 63, 0.84, -6.11, 0.99248, 64, 0.84, 164.13, 0.00752 ], + "hull": 32, + "edges": [ 24, 26, 26, 28, 54, 56, 60, 62, 56, 58, 58, 60, 24, 22, 26, 64, 22, 64, 28, 30, 64, 30, 22, 20, 66, 64, 20, 66, 30, 32, 66, 32, 20, 18, 68, 66, 18, 68, 32, 34, 68, 34, 18, 16, 70, 68, 16, 70, 34, 36, 70, 36, 16, 14, 72, 70, 14, 72, 36, 38, 72, 38, 38, 40, 74, 72, 40, 74, 14, 12, 74, 12, 12, 10, 76, 74, 10, 76, 40, 42, 76, 42, 10, 8, 78, 76, 8, 78, 42, 44, 78, 44, 8, 6, 80, 78, 6, 80, 44, 46, 80, 46, 6, 4, 82, 80, 4, 82, 46, 48, 82, 48, 4, 2, 84, 82, 2, 84, 48, 50, 84, 50, 2, 0, 0, 62, 58, 86, 86, 84, 0, 86, 50, 52, 52, 54, 86, 52 ], + "width": 24, + "height": 192 + } + }, + "bag-top": { + "bag-top": { + "name": "girl/bag-top", + "type": "mesh", + "uvs": [ 1, 0.14894, 0.84966, 0.28898, 0.7266, 0.46792, 0.65912, 0.72077, 0.65516, 0.89193, 0.50829, 1, 0.17883, 0.94639, 0.03593, 0.81802, 0.01211, 0.59629, 0, 0.33955, 0.11532, 0.13338, 0.28203, 0, 1, 0.07114 ], + "triangles": [ 10, 11, 1, 1, 11, 12, 3, 8, 2, 2, 9, 10, 2, 8, 9, 2, 10, 1, 0, 1, 12, 5, 6, 4, 6, 7, 4, 4, 7, 3, 7, 8, 3 ], + "vertices": [ 2, 57, -5.42, 3.3, 0.41, 58, -89.79, -49.81, 0.59, 3, 59, -13.49, -71.44, 0.03398, 57, 7.63, 18.88, 0.85009, 58, -76.74, -34.22, 0.11592, 3, 59, -4.05, -52.04, 0.16652, 57, 17.58, 38.03, 0.80014, 58, -66.8, -15.07, 0.03334, 3, 59, -1.04, -26.07, 0.43064, 57, 21.28, 63.9, 0.54658, 58, -63.1, 10.8, 0.02277, 3, 59, -3.04, -9.07, 0.70704, 57, 19.72, 80.95, 0.28124, 58, -64.65, 27.85, 0.01172, 1, 59, 9.7, 3.64, 1, 3, 59, 42.42, 2.84, 0.93871, 57, 65.48, 91.66, 0.04781, 58, -18.89, 38.56, 0.01348, 3, 59, 58.08, -7.91, 0.78056, 57, 80.85, 80.5, 0.08, 58, -3.52, 27.4, 0.13944, 3, 59, 63.49, -29.54, 0.29048, 57, 85.69, 58.73, 0.39733, 58, 1.31, 5.63, 0.31219, 3, 59, 68.25, -54.8, 0.05104, 57, 89.78, 33.36, 0.53142, 58, 5.41, -19.74, 0.41754, 2, 57, 80.9, 11.59, 0.38, 58, -3.48, -41.51, 0.62, 1, 58, -18.2, -56.62, 1, 2, 57, -4.53, -4.43, 0.41, 58, -88.91, -57.54, 0.59 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 2, 20, 8, 14 ], + "width": 98, + "height": 100 + } + }, + "base-head": { + "base-head": { "x": 74.74, "y": -10.09, "rotation": -87.57, "width": 189, "height": 145 } + }, + "body": { + "body": { + "name": "girl/body", + "type": "mesh", + "uvs": [ 0.59765, 0.99752, 0.42922, 1, 0.24876, 0.98569, 0.06428, 0.94872, 0.0322, 0.85553, 0.00613, 0.83483, 1.2E-4, 0.73129, 1.2E-4, 0.59965, 0.01215, 0.45174, 0.02217, 0.28165, 0.04624, 0.09676, 0.26881, 0, 0.59565, 0, 0.78012, 0.03908, 0.86835, 0.20473, 0.94053, 0.37187, 0.99066, 0.5257, 1, 0.64846, 1, 0.74608, 0.97663, 0.85405, 0.94455, 0.93392, 0.8102, 0.97682, 0.66583, 0.999, 0.27282, 0.87328, 0.44526, 0.88807, 0.58362, 0.88659, 0.66984, 0.88364, 0.81221, 0.8718, 0.94053, 0.8363, 0.61771, 0.76383, 0.71395, 0.75939, 0.26079, 0.7446, 0.95457, 0.70023, 0.96259, 0.76235, 0.61169, 0.64107, 0.58963, 0.51386, 0.54953, 0.37039, 0.64979, 0.35412, 0.6939, 0.50203, 0.71796, 0.63367, 0.26079, 0.53605, 0.2668, 0.3911, 0.85431, 0.31714, 0.93051, 0.4902, 0.42722, 0.12634, 0.54351, 0.11303, 0.49539, 0.24171, 0.59966, 0.221, 0.74202, 0.09676, 0.80218, 0.20473, 0.23071, 0.15001, 0.08634, 0.16924, 0.08233, 0.27721, 0.06428, 0.45174, 0.05225, 0.60409, 0.0703, 0.73425, 0.48183, 0.51247, 0.79828, 0.48323, 0.745, 0.43772 ], + "triangles": [ 17, 32, 43, 17, 43, 16, 32, 17, 18, 30, 34, 39, 33, 32, 18, 29, 34, 30, 32, 39, 57, 29, 31, 34, 5, 6, 55, 30, 32, 33, 32, 30, 39, 33, 27, 30, 19, 33, 18, 28, 33, 19, 4, 5, 55, 28, 27, 33, 31, 24, 23, 26, 29, 30, 26, 30, 27, 31, 29, 24, 25, 29, 26, 29, 25, 24, 20, 28, 19, 27, 28, 20, 4, 23, 3, 55, 23, 4, 31, 23, 55, 21, 26, 27, 21, 27, 20, 2, 3, 23, 0, 25, 26, 22, 0, 26, 21, 22, 26, 1, 23, 24, 2, 23, 1, 0, 1, 24, 0, 24, 25, 32, 57, 43, 42, 14, 15, 57, 42, 15, 31, 54, 40, 58, 37, 42, 57, 58, 42, 38, 37, 58, 38, 58, 57, 35, 36, 37, 35, 37, 38, 56, 36, 35, 43, 15, 16, 7, 8, 54, 39, 38, 57, 34, 35, 38, 34, 38, 39, 6, 7, 54, 31, 55, 54, 6, 54, 55, 56, 35, 34, 34, 31, 56, 43, 57, 15, 37, 49, 42, 48, 12, 13, 12, 44, 11, 45, 12, 48, 45, 44, 12, 50, 10, 11, 50, 11, 44, 51, 10, 50, 14, 49, 13, 48, 13, 49, 47, 45, 48, 47, 48, 49, 46, 44, 45, 46, 45, 47, 51, 9, 10, 52, 9, 51, 42, 49, 14, 37, 47, 49, 36, 46, 47, 36, 47, 37, 46, 41, 50, 46, 50, 44, 41, 46, 36, 52, 51, 50, 41, 52, 50, 53, 9, 52, 53, 52, 41, 8, 9, 53, 56, 41, 36, 40, 53, 41, 40, 41, 56, 54, 53, 40, 31, 40, 56, 54, 8, 53 ], + "vertices": [ 1, 2, 28.17, -64.12, 1, 1, 2, -4.5, -64.91, 1, 1, 2, -39.53, -61.29, 1, 1, 2, -75.35, -51.72, 1, 2, 3, -22.36, 79.55, 0.14323, 2, -81.68, -27.24, 0.85677, 2, 3, -16.73, 84.4, 0.19154, 2, -86.76, -21.81, 0.80846, 2, 3, 10.53, 84.54, 0.53301, 2, -88.04, 5.41, 0.46699, 2, 4, -18.75, 81.95, 0.21, 3, 45.12, 83.25, 0.79, 2, 4, 19.88, 76.85, 0.63, 3, 83.91, 79.46, 0.37, 1, 4, 64.36, 71.73, 1, 1, 4, 112.53, 63.61, 1, 1, 4, 134.84, 18.72, 1, 1, 4, 130.32, -44.52, 1, 2, 4, 117.52, -79.49, 0.86136, 3, 186.78, -73.49, 0.13864, 2, 4, 72.85, -93.46, 0.64743, 3, 142.61, -88.96, 0.35257, 3, 4, 28, -104.29, 0.26062, 3, 98.16, -101.31, 0.60938, 2, 94, 100.7, 0.13, 3, 4, -13.04, -111.11, 0.15, 3, 57.36, -109.51, 0.44607, 2, 103.9, 60.29, 0.40393, 3, 4, -45.38, -110.62, 0.11, 3, 25.03, -110.11, 0.28777, 2, 105.84, 28.01, 0.60223, 3, 4, -70.99, -108.79, 0.04, 3, -0.62, -109.15, 0.15795, 2, 105.95, 2.33, 0.80205, 1, 2, 101.54, -26.08, 1, 1, 2, 95.4, -47.11, 1, 1, 2, 69.38, -58.5, 1, 1, 2, 41.4, -64.45, 1, 1, 2, -34.98, -31.71, 1, 1, 2, -1.51, -35.46, 1, 1, 2, 25.33, -34.96, 1, 1, 2, 42.05, -34.11, 1, 1, 2, 69.66, -30.88, 1, 1, 2, 94.51, -21.44, 1, 1, 2, 31.81, -2.64, 1, 1, 2, 50.47, -1.4, 1, 2, 3, 5.13, 34.14, 0.47225, 2, -37.46, 2.12, 0.52775, 3, 4, -58.33, -100.86, 0.09, 3, 11.76, -100.8, 0.21274, 2, 97.09, 14.36, 0.69726, 3, 4, -74.74, -101.25, 0.05, 3, -4.63, -101.74, 0.13139, 2, 98.71, -1.97, 0.81861, 3, 4, -38.07, -35.62, 0.12, 3, 29.8, -34.91, 0.46014, 2, 30.5, 29.64, 0.41986, 3, 4, -4.4, -33.73, 0.32, 3, 63.39, -31.88, 0.5848, 2, 26.08, 63.07, 0.0952, 2, 4, 33.79, -28.66, 0.53, 3, 101.38, -25.52, 0.47, 2, 4, 36.68, -48.36, 0.50575, 3, 104.93, -45.12, 0.49425, 3, 4, -2.73, -54.13, 0.32, 3, 65.74, -52.21, 0.578, 2, 46.3, 66.27, 0.102, 3, 4, -37.6, -56.32, 0.12, 3, 30.97, -55.58, 0.4488, 2, 51.11, 31.67, 0.4312, 1, 4, -5.67, 30.32, 1, 1, 4, 32.27, 26.44, 1, 3, 4, 43.55, -88.63, 0.42337, 3, 113.17, -85.13, 0.53663, 2, 77.21, 115.03, 0.04, 3, 4, -2.9, -100.14, 0.24, 3, 67.13, -98.2, 0.4463, 2, 92.19, 69.57, 0.3137, 1, 4, 99.51, -9.56, 1, 1, 4, 101.39, -32.32, 1, 2, 4, 68.3, -20.59, 0.85, 3, 135.6, -16.29, 0.15, 2, 4, 72.29, -41.16, 0.83269, 3, 140.28, -36.71, 0.16731, 2, 4, 102.92, -71.03, 0.84329, 3, 171.9, -65.53, 0.15671, 2, 4, 73.76, -80.65, 0.68178, 3, 143.09, -76.13, 0.31822, 1, 4, 96.01, 28.91, 1, 1, 4, 92.97, 57.2, 1, 1, 4, 64.7, 60, 1, 2, 4, 19.16, 66.76, 0.69519, 3, 83.53, 69.35, 0.30481, 2, 4, -20.64, 71.95, 0.21, 3, 43.58, 73.18, 0.79, 2, 3, 9.24, 70.97, 0.46736, 2, -74.42, 4.69, 0.53264, 2, 4, -2.54, -12.9, 0.39471, 3, 64.54, -11, 0.60529, 3, 4, 0.76, -74.68, 0.37, 3, 69.92, -72.63, 0.47153, 2, 66.53, 71.3, 0.15847, 3, 4, 13.43, -65.22, 0.37172, 3, 82.27, -62.75, 0.51471, 2, 56.14, 83.22, 0.11357 ], + "hull": 23, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 0, 44, 58, 62 ], + "width": 194, + "height": 263 + } + }, + "boot-ribbon-back": { + "boot-ribbon-back": { "name": "girl/boot-ribbon-front", "x": 67.51, "y": 16.46, "rotation": 90.17, "width": 26, "height": 25 } + }, + "boot-ribbon-front": { + "boot-ribbon-front": { "name": "girl/boot-ribbon-front", "x": 31.67, "y": 16.34, "rotation": 89.95, "width": 26, "height": 25 } + }, + "ear": { + "ear": { "name": "girl/ear", "x": 56.58, "y": 85.63, "rotation": -87.57, "width": 38, "height": 45 } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { "name": "girl/back-eyebrow", "x": 15.6, "y": -9.48, "rotation": -177.9, "width": 36, "height": 23 } + }, + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "girl/eye-back-low-eyelid", + "type": "mesh", + "uvs": [ 0, 0.26476, 0.20331, 0.79621, 0.50495, 0.95421, 0.8401, 0.89676, 1, 0.33658, 0.88319, 0.07803, 0.75871, 0.25039, 0.5241, 0.35094, 0.31343, 0.19294, 0.09798, 0 ], + "triangles": [ 3, 2, 7, 2, 1, 7, 7, 6, 3, 3, 6, 4, 1, 8, 7, 1, 0, 8, 6, 5, 4, 0, 9, 8 ], + "vertices": [ 1, 42, -29.75, 1.38, 1, 2, 42, -23.04, -4.47, 0.63, 43, 23.4, -1.82, 0.37, 2, 42, -13.09, -6.21, 0.62, 43, 14.27, 2.5, 0.38, 2, 42, -2.03, -5.57, 0.76, 43, 3.44, 4.83, 0.24, 1, 42, 3.25, 0.59, 1, 1, 42, -0.61, 3.43, 1, 2, 42, -4.72, 1.54, 0.76, 43, 4.14, -2.74, 0.24, 2, 42, -12.46, 0.43, 0.62, 43, 11.9, -3.73, 0.38, 2, 42, -19.41, 2.17, 0.63, 43, 18.14, -7.25, 0.37, 1, 42, -26.52, 4.29, 1 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 33, + "height": 11 + } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "girl/eye-back-up-eyelid", + "type": "mesh", + "uvs": [ 0.07861, 0.9592, 0.24977, 0.54703, 0.44727, 0.42338, 0.58882, 0.40964, 0.77315, 0.59512, 1, 0.16921, 1, 0, 0.76657, 0.13486, 0.61844, 0, 0.40119, 0.01807, 0.18065, 0.25164, 0, 0.73938, 0, 0.95234 ], + "triangles": [ 1, 10, 2, 3, 2, 9, 2, 10, 9, 3, 9, 8, 3, 8, 7, 1, 0, 11, 0, 12, 11, 11, 10, 1, 3, 7, 4, 4, 7, 5, 7, 6, 5 ], + "vertices": [ 1, 40, -31.8, -11.42, 1, 2, 40, -23.59, -1.94, 0.51, 41, 22.75, 6.53, 0.49, 2, 40, -14.11, 0.91, 0.15, 41, 14.01, 1.88, 0.85, 1, 41, 7.41, 0.24, 1, 1, 40, 1.53, -3.04, 1, 1, 40, 12.42, 6.75, 1, 1, 40, 12.42, 10.64, 1, 1, 40, 1.22, 7.54, 1, 1, 41, 7.87, -9.28, 1, 2, 40, -16.32, 10.23, 0.15, 41, 18.01, -6.83, 0.85, 2, 40, -26.91, 4.86, 0.52, 41, 27.34, 0.52, 0.48, 1, 40, -35.58, -6.36, 1, 1, 40, -35.58, -11.26, 1 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 48, + "height": 23 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "girl/eye-back-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.12627, 1, 0, 0.99472, 0, 0.60349, 0.16345, 0.30253, 0.44692, 0.06177, 0.74898, 0.00911, 1, 0.1972, 1, 0.52073, 0.72574, 0.37025, 0.49339, 0.42292, 0.25639, 0.68625 ], + "triangles": [ 0, 1, 2, 10, 0, 2, 10, 3, 9, 9, 4, 8, 8, 6, 7, 2, 3, 10, 3, 4, 9, 8, 5, 6, 8, 4, 5 ], + "vertices": [ 1, 40, -28.64, -7.74, 1, 1, 40, -32.94, -7.63, 1, 1, 39, -19.88, 27.79, 1, 1, 39, -14.32, 34.11, 1, 1, 39, -4.69, 39.17, 1, 1, 39, 5.58, 40.27, 1, 1, 39, 14.12, 36.32, 1, 1, 40, 1.06, 2.33, 1, 1, 41, 9.18, -3.76, 1, 2, 41, 16.71, -1.13, 0.92, 40, -16.16, 4.38, 0.08, 2, 41, 23.53, 5.88, 0.33, 40, -24.22, -1.15, 0.67 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 34, + "height": 21 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "girl/eye-white-back", + "type": "mesh", + "uvs": [ 0, 0.39191, 0.07911, 0.7283, 0.26952, 0.95255, 0.56931, 0.98823, 0.90962, 0.92197, 1, 0.50404, 0.94608, 0.17784, 0.76378, 0.00455, 0.50855, 0, 0.20875, 0.12178, 0.56121, 0.48365 ], + "triangles": [ 3, 2, 10, 4, 3, 10, 2, 1, 10, 4, 10, 5, 10, 8, 7, 9, 8, 10, 1, 0, 10, 10, 6, 5, 0, 9, 10, 10, 7, 6 ], + "vertices": [ 1, 40, -34.26, -6.05, 1, 1, 42, -30.63, 5.01, 1, 2, 42, -23.2, -1.94, 0.5, 43, 22.88, -4.3, 0.5, 2, 42, -11.51, -3.04, 0.61, 43, 11.91, -0.13, 0.39, 1, 42, 1.76, -0.99, 1, 2, 40, 4.74, -9.52, 0.54, 42, 5.29, 11.97, 0.46, 1, 40, 2.64, 0.59, 1, 2, 40, -4.47, 5.96, 0.35, 41, 5.55, -4.97, 0.65, 2, 40, -14.42, 6.1, 0.22, 41, 15.34, -3.16, 0.78, 2, 40, -26.12, 2.33, 0.49, 41, 26.07, 2.84, 0.51, 2, 40, -12.37, -8.89, 0.71, 43, 8.05, -15.29, 0.29 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 39, + "height": 31 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { "name": "girl/front-eyebrow", "x": 10.82, "y": 8.92, "rotation": -3.58, "width": 36, "height": 23 } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "girl/eye-front-low-eyelid", + "type": "mesh", + "uvs": [ 0.07038, 0, 0, 0.43773, 0.24154, 0.94046, 0.64093, 0.92609, 1, 0.39464, 1, 0.00682, 0.8516, 0, 0.61899, 0.36591, 0.30738, 0.39464 ], + "triangles": [ 8, 7, 3, 2, 8, 3, 2, 1, 8, 6, 5, 4, 7, 6, 4, 1, 0, 8, 3, 7, 4 ], + "vertices": [ 1, 36, -0.25, 5.3, 1, 1, 36, -2.79, 0.49, 1, 1, 37, 6.69, -3.95, 1, 2, 36, 20.29, -4.89, 0.61, 37, 20.82, -1.32, 0.39, 1, 36, 33.21, 0.96, 1, 1, 36, 33.21, 5.23, 1, 1, 36, 27.87, 5.3, 1, 2, 36, 19.5, 1.28, 0.61, 37, 18.99, 4.61, 0.39, 1, 37, 7.99, 2.37, 1 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 36, + "height": 11 + } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "girl/eye-front-up-eyelid", + "type": "mesh", + "uvs": [ 0.32251, 0.43387, 0.36464, 0.94737, 0.28564, 1, 0.16714, 0.73859, 0.15924, 0.42823, 0, 0.24201, 0, 0, 0.22771, 0.2138, 0.41731, 0, 0.66747, 0, 0.88604, 0.23637, 1, 0.54673, 1, 0.81194, 0.86497, 0.79501, 0.74121, 0.4903, 0.61217, 0.35487, 0.45417, 0.35487 ], + "triangles": [ 14, 15, 10, 2, 3, 1, 3, 0, 1, 13, 11, 12, 13, 14, 11, 3, 4, 0, 14, 10, 11, 0, 4, 7, 4, 5, 7, 5, 6, 7, 16, 0, 7, 7, 8, 16, 10, 15, 9, 9, 15, 8, 15, 16, 8 ], + "vertices": [ 2, 35, 6.87, 1.33, 0.47507, 34, 6.4, 2.84, 0.52493, 2, 35, 6.12, -13.25, 0.09298, 34, 8.93, -11.54, 0.90702, 1, 34, 4.19, -13.01, 1, 1, 34, -2.92, -5.69, 1, 2, 35, -2.64, 3.68, 0.0415, 34, -3.4, 3, 0.9585, 1, 34, -12.95, 8.21, 1, 1, 34, -12.95, 14.99, 1, 2, 35, 2.71, 8.61, 0.27883, 34, 0.71, 9, 0.72117, 1, 35, 15.14, 11.9, 1, 2, 35, 29.76, 8.54, 0.65, 34, 27.1, 14.99, 0.35, 2, 35, 41.06, -0.85, 0.28137, 34, 40.21, 8.37, 0.71863, 1, 34, 47.05, -0.32, 1, 1, 34, 47.05, -7.75, 1, 2, 35, 36.33, -15.81, 0.07124, 34, 38.95, -7.27, 0.92876, 2, 35, 31, -5.83, 0.45, 34, 31.52, 1.26, 0.55, 2, 35, 24.31, -0.4, 0.65, 34, 23.78, 5.05, 0.35, 2, 35, 15.07, 1.72, 0.76, 34, 14.3, 5.05, 0.24 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32 ], + "width": 60, + "height": 28 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "girl/eye-front-up-eyelid-back", + "type": "mesh", + "uvs": [ 0.05111, 0.59525, 0.31445, 0.34389, 0.48174, 0.29362, 0.69861, 0.43007, 0.81323, 0.65271, 0.90617, 1, 1, 1, 1, 0.74607, 0.93406, 0.48034, 0.78845, 0.18589, 0.62115, 0, 0.49104, 0, 0.26798, 0, 0, 0.28644, 0, 0.48752 ], + "triangles": [ 3, 2, 9, 2, 1, 12, 5, 7, 6, 5, 4, 7, 4, 8, 7, 4, 3, 8, 0, 14, 1, 14, 13, 1, 3, 9, 8, 10, 9, 2, 10, 2, 11, 1, 13, 12, 2, 12, 11 ], + "vertices": [ 1, 78, -25.28, -10.9, 1, 1, 35, 14.1, 7.02, 1, 1, 35, 22.66, 6.19, 1, 2, 78, 7.58, -7.27, 0.37, 35, 32.77, 0.79, 0.63, 2, 78, 13.43, -12.17, 0.71, 35, 37.37, -5.29, 0.29, 1, 78, 18.17, -19.81, 1, 1, 78, 22.96, -19.81, 1, 1, 78, 22.96, -14.22, 1, 1, 78, 19.59, -8.37, 1, 1, 78, 12.17, -1.9, 1, 1, 78, 3.63, 2.19, 1, 1, 78, -3, 2.19, 1, 1, 78, -14.38, 2.19, 1, 1, 78, -28.04, -4.11, 1, 1, 78, -28.04, -8.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 51, + "height": 22 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "girl/eye-white-front", + "type": "mesh", + "uvs": [ 0, 0.13677, 0.03631, 0.56139, 0.18641, 0.96133, 0.54191, 0.97121, 0.90531, 0.87739, 1, 0.54164, 1, 0.24046, 0.80425, 0.13009, 0.57351, 0, 0.25751, 0.00346, 0.47082, 0.52682 ], + "triangles": [ 3, 2, 10, 2, 1, 10, 4, 3, 10, 4, 10, 5, 7, 6, 5, 1, 0, 10, 10, 9, 8, 10, 8, 7, 10, 7, 5, 0, 9, 10 ], + "vertices": [ 1, 34, 3.55, 4.71, 1, 2, 34, 5, -8.88, 0.5, 36, -3.97, 10.98, 0.5, 2, 36, 2.03, -1.82, 0.36, 37, 2.31, -1.44, 0.64, 2, 36, 16.25, -2.14, 0.32, 37, 16.37, 0.69, 0.68, 1, 36, 30.79, 0.87, 1, 1, 36, 34.57, 11.61, 1, 1, 34, 43.55, 1.39, 1, 2, 35, 35.91, -3.2, 0.27, 34, 35.72, 4.92, 0.73, 2, 35, 27.85, 2.93, 0.54, 34, 26.49, 9.09, 0.46, 2, 35, 15.51, 5.65, 0.62, 34, 13.85, 8.98, 0.38, 2, 35, 20.07, -12.59, 0.81, 37, 11.13, 14.21, 0.19 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 0, 18, 12, 14, 14, 16 ], + "width": 40, + "height": 32 + } + }, + "hair-back": { + "hair-back": { + "name": "girl/hair-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 6, -3.46, -135.36, 0.71, 30, 189.29, -78.03, 0.29, 2, 6, -15.93, 158.38, 0.71, 30, -104.71, -78.03, 0.29, 2, 6, 168.91, 166.22, 0.71, 30, -104.71, 106.97, 0.29, 2, 6, 181.37, -127.51, 0.71, 30, 189.29, 106.97, 0.29 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 294, + "height": 185 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch", + "type": "mesh", + "color": "71ffe7ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-strand-back-1": { + "hair-strand-back-1": { + "name": "girl/hair-strand-back-1", + "type": "mesh", + "uvs": [ 0.04701, 0.06856, 0.1845, 0.21146, 0.29181, 0.36494, 0.41253, 0.53695, 0.51314, 0.76717, 0.60368, 1, 0.80489, 0.9974, 1, 0.89948, 1, 0.64544, 0.93567, 0.4311, 0.81159, 0.31731, 0.6674, 0.20352, 0.48631, 0.08444, 0.28846, 0, 0.7244, 0.58458 ], + "triangles": [ 14, 9, 8, 14, 8, 7, 6, 14, 7, 4, 14, 6, 5, 4, 6, 14, 10, 9, 4, 3, 14, 2, 1, 12, 1, 0, 13, 12, 1, 13, 14, 3, 10, 3, 11, 10, 11, 2, 12, 11, 3, 2 ], + "vertices": [ 1, 70, 7.91, 19.32, 1, 2, 70, -14.24, 5, 0.86951, 71, 5.53, -19.35, 0.13049, 2, 70, -37.68, -5.71, 0.79, 71, 31.29, -19.18, 0.21, 2, 70, -63.95, -17.77, 0.63, 71, 60.2, -18.95, 0.37, 2, 70, -98.57, -26.85, 0.42, 71, 95.5, -24.85, 0.58, 2, 70, -133.49, -34.74, 0.24, 71, 130.59, -31.96, 0.76, 2, 70, -134.87, -58.05, 0.09, 71, 141.4, -11.27, 0.91, 2, 70, -122.23, -81.7, 0.09, 71, 139.56, 15.49, 0.91, 2, 70, -84.99, -84.52, 0.24, 71, 106.74, 33.32, 0.76, 2, 70, -53.01, -79.45, 0.42, 71, 75.5, 41.8, 0.58, 2, 70, -35.24, -66.36, 0.63, 71, 53.93, 37.14, 0.37, 2, 70, -17.3, -50.94, 0.79, 71, 31.24, 30.43, 0.21, 2, 70, 1.74, -31.32, 0.83374, 71, 5.83, 20.33, 0.16626, 2, 70, 15.84, -9.37, 0.97706, 71, -16.03, 6.09, 0.02294, 2, 70, -73.66, -53.31, 0.42, 71, 83.62, 9.5, 0.58 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26, 6, 20 ], + "width": 116, + "height": 147 + } + }, + "hair-strand-back-2": { + "hair-strand-back-2": { + "name": "girl/hair-strand-back-2", + "type": "mesh", + "uvs": [ 0.01457, 0.31586, 0.12358, 0.46132, 0.26678, 0.63383, 0.42922, 0.79619, 0.61731, 0.96871, 0.77975, 1, 0.92509, 0.83679, 1, 0.68795, 0.98066, 0.50191, 0.86311, 0.43087, 0.68571, 0.33616, 0.48479, 0.26174, 0.34159, 0.14673, 0.24113, 0.08923, 0.08938, 0.13997, 0.65683, 0.61285 ], + "triangles": [ 5, 4, 6, 4, 15, 6, 4, 3, 15, 6, 15, 7, 8, 15, 9, 15, 8, 7, 15, 10, 9, 3, 2, 15, 15, 11, 10, 15, 2, 11, 2, 1, 11, 0, 14, 1, 1, 12, 11, 12, 14, 13, 12, 1, 14 ], + "vertices": [ 1, 70, -9.44, 45.94, 1, 2, 70, -27.62, 27.42, 0.75, 72, -16.98, -30.25, 0.25, 2, 70, -49.36, 2.93, 0.61, 72, 15.22, -36.25, 0.39, 2, 70, -70.21, -25.14, 0.44, 72, 50.02, -39.65, 0.56, 2, 70, -92.58, -57.78, 0.25, 72, 89.52, -41.98, 0.75, 2, 70, -98.39, -86.99, 0.12, 72, 117.55, -31.91, 0.88, 2, 70, -81.67, -114.78, 0.06, 72, 132.74, -3.26, 0.94, 2, 70, -65.63, -129.67, 0.06, 72, 137.23, 18.16, 0.94, 2, 70, -44.03, -127.77, 0.17, 72, 124.47, 35.69, 0.83, 2, 70, -34.28, -107.05, 0.25, 72, 101.68, 33.37, 0.75, 2, 70, -20.98, -75.68, 0.44, 72, 67.94, 28.59, 0.56, 2, 70, -9.69, -39.86, 0.61, 72, 31.43, 19.8, 0.39, 1, 70, 5.47, -14.87, 1, 1, 70, 13.44, 2.86, 1, 1, 70, 9.7, 30.84, 1, 2, 70, -52.31, -68.04, 0.32, 72, 77.55, -2.19, 0.68 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 182, + "height": 115 + } + }, + "hair-strand-back-3": { + "hair-strand-back-3": { "name": "girl/hair-strand-back-3", "x": 56.8, "y": -25.4, "rotation": 55.29, "width": 184, "height": 157 } + }, + "hair-strand-front-1": { + "hair-strand-front-1": { + "name": "girl/hair-strand-front-1", + "type": "mesh", + "uvs": [ 0.27351, 0, 0.15941, 0.16999, 0.0453, 0.35929, 0, 0.56107, 0.02974, 0.77118, 0.16459, 0.90639, 0.41355, 1, 0.78181, 1, 1, 0.95007, 1, 0.76493, 0.9789, 0.55691, 0.93222, 0.36345, 0.95297, 0.16999, 0.95815, 0, 0.48617, 0.76077, 0.52766, 0.55483, 0.54841, 0.37177 ], + "triangles": [ 3, 2, 15, 10, 15, 11, 14, 3, 15, 4, 3, 14, 5, 4, 14, 9, 15, 10, 6, 5, 14, 15, 9, 14, 8, 7, 9, 7, 14, 9, 6, 14, 7, 15, 2, 16, 13, 12, 16, 16, 2, 1, 13, 16, 0, 1, 0, 16, 11, 16, 12, 15, 16, 11 ], + "vertices": [ 1, 67, 23.66, 11.57, 1, 1, 67, -7.39, 22.5, 1, 2, 67, -42.05, 33.7, 0.56777, 68, 38.87, -36.21, 0.43223, 2, 67, -79.42, 39.94, 0.27008, 68, 76.66, -38.93, 0.72992, 2, 67, -118.76, 40.68, 0.08712, 68, 115.9, -36, 0.91288, 2, 67, -144.74, 32.5, 0.04098, 68, 141, -25.44, 0.95902, 2, 67, -163.6, 15.2, 0.07679, 68, 158.17, -6.46, 0.92321, 2, 67, -165.68, -12.34, 0.10317, 68, 157.68, 21.16, 0.89683, 2, 67, -157.61, -29.36, 0.11136, 68, 148.05, 37.35, 0.88864, 2, 67, -123.09, -31.97, 0.26753, 68, 113.44, 36.73, 0.73247, 2, 67, -84.18, -33.33, 0.41647, 68, 74.57, 34.46, 0.58353, 2, 67, -47.84, -32.57, 0.58895, 68, 38.46, 30.31, 0.41105, 2, 67, -11.88, -36.85, 0.76035, 68, 2.26, 31.22, 0.23965, 1, 67, 19.79, -39.63, 1, 2, 67, -119.4, 6.4, 0.21442, 68, 113.35, -1.81, 0.78558, 2, 67, -81.24, 0.39, 0.42231, 68, 74.79, 0.61, 0.57769, 2, 67, -47.22, -3.74, 0.5861, 68, 40.53, 1.56, 0.4139 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26 ], + "width": 75, + "height": 187 + } + }, + "hair-strand-front-2": { + "hair-strand-front-2": { + "name": "girl/hair-strand-front-3", + "type": "mesh", + "uvs": [ 1, 0.04687, 0.9312, 0.23176, 0.86413, 0.43106, 0.82389, 0.63997, 0.79259, 0.84408, 0.75235, 1, 0.33205, 0.99055, 0, 0.93772, 0, 0.73362, 0.0593, 0.55113, 0.20685, 0.37103, 0.42595, 0.19094, 0.73893, 0, 0.95355, 0, 0.5422, 0.39985, 0.43936, 0.60395, 0.70316, 0.20295 ], + "triangles": [ 15, 8, 9, 9, 10, 15, 5, 6, 4, 15, 6, 8, 6, 15, 4, 6, 7, 8, 4, 15, 3, 15, 14, 3, 10, 11, 14, 14, 16, 2, 3, 14, 2, 15, 10, 14, 1, 13, 0, 1, 12, 13, 16, 11, 12, 16, 12, 1, 2, 16, 1, 14, 11, 16 ], + "vertices": [ 1, 67, 12.41, -11.23, 1, 2, 67, -17, -3.01, 0.95, 74, 9.72, 24.71, 0.05, 2, 67, -48.76, 5.25, 0.57, 74, 42.51, 25.72, 0.43, 2, 67, -82.24, 11.29, 0.38, 74, 76.34, 29.34, 0.62, 2, 67, -115.01, 16.5, 0.21, 74, 109.25, 33.55, 0.79, 1, 74, 134.69, 35.39, 1, 1, 74, 140.8, -0.7, 1, 1, 74, 138.44, -30.73, 1, 2, 67, -91.96, 83.91, 0.21, 74, 106.1, -37.62, 0.79, 2, 67, -62.87, 76.54, 0.38, 74, 76.11, -38.72, 0.62, 2, 67, -34.75, 61.53, 0.57, 74, 44.9, -32.24, 0.43, 2, 67, -7.09, 40.33, 0.95, 74, 12.4, -19.67, 0.05, 1, 67, 21.7, 10.84, 1, 1, 67, 20.29, -7.78, 1, 2, 67, -41.6, 32.79, 0.57, 74, 43.4, -2.73, 0.43, 2, 67, -73.9, 44.21, 0.38, 74, 77.6, -4.6, 0.62, 2, 67, -10.85, 16.43, 0.95, 74, 9.28, 4.33, 0.05 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26, 4, 28, 6, 30, 2, 32 ], + "width": 87, + "height": 162 + } + }, + "hair-strand-front-3": { + "hair-strand-front-3": { + "name": "girl/hair-flap-down-front", + "type": "mesh", + "uvs": [ 0.7113, 0.13231, 0.65533, 0.28192, 0.56017, 0.43154, 0.40905, 0.55721, 0.17677, 0.69187, 0, 0.80558, 0, 1, 0.25793, 1, 0.57976, 0.97015, 0.72529, 0.80258, 0.86242, 0.63501, 0.94078, 0.47044, 0.98835, 0.2909, 1, 0.12034, 0.95757, 0, 0.78406, 0, 0.46222, 0.70982, 0.68891, 0.54524, 0.82604, 0.30287 ], + "triangles": [ 12, 18, 13, 14, 13, 15, 15, 13, 0, 11, 18, 12, 1, 0, 18, 18, 0, 13, 17, 1, 18, 10, 17, 11, 7, 5, 4, 7, 16, 8, 7, 4, 16, 7, 6, 5, 8, 16, 9, 16, 17, 9, 9, 17, 10, 4, 3, 16, 17, 3, 2, 17, 16, 3, 2, 1, 17, 17, 18, 11 ], + "vertices": [ 2, 69, 10.11, -20.49, 0.51752, 67, 12.87, 47.65, 0.48248, 2, 69, 30.11, -14.28, 0.4, 67, -5.94, 56.87, 0.6, 2, 69, 53.55, -12.3, 0.61, 67, -24.34, 71.53, 0.39, 2, 69, 79.47, -18.32, 0.76137, 67, -39.04, 93.71, 0.23863, 2, 69, 113.41, -32.36, 0.92, 67, -54.06, 127.22, 0.08, 1, 69, 140.37, -42.13, 1, 1, 69, 160, -26.2, 1, 1, 69, 137.41, 1.64, 1, 2, 69, 106.21, 33.93, 0.98205, 67, -94.36, 74.1, 0.01795, 2, 69, 76.55, 35.92, 0.74286, 67, -74.17, 52.28, 0.25714, 2, 69, 47.62, 36.99, 0.61, 67, -53.88, 31.63, 0.39, 2, 69, 24.14, 31.97, 0.54, 67, -33.37, 19.16, 0.46, 2, 69, 1.85, 22.4, 0.50655, 67, -10.59, 10.8, 0.49345, 2, 69, -16.39, 9.69, 0.46244, 67, 11.39, 7.52, 0.53756, 2, 69, -24.82, -4.75, 0.46, 67, 27.44, 12.22, 0.54, 2, 69, -9.62, -23.48, 0.48913, 67, 29.26, 36.27, 0.51087, 2, 69, 90.22, -0.08, 0.81, 67, -59.38, 87.83, 0.19, 2, 69, 53.75, 10.91, 0.61, 67, -40.43, 54.8, 0.39, 2, 69, 17.28, 5.86, 0.4, 67, -10.44, 33.42, 0.6 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 139, + "height": 130 + } + }, + "hair-strand-front-4": { + "hair-strand-front-4": { + "name": "girl/hair-strand-front-2", + "type": "mesh", + "uvs": [ 0.77614, 0, 0.63901, 0.21786, 0.44871, 0.36957, 0.21083, 0.45904, 0, 0.5524, 0, 0.8247, 0.31438, 1, 0.60822, 0.99586, 0.75655, 0.80525, 0.88248, 0.59908, 0.96084, 0.37346, 1, 0.13228, 1, 0, 0.47949, 0.68466, 0.76494, 0.43181 ], + "triangles": [ 9, 14, 10, 14, 1, 10, 0, 12, 11, 11, 1, 0, 10, 1, 11, 8, 13, 14, 2, 1, 14, 13, 2, 14, 3, 2, 13, 5, 4, 3, 5, 3, 13, 7, 13, 8, 6, 5, 13, 6, 13, 7, 9, 8, 14 ], + "vertices": [ 2, 75, -8.6, -29.1, 0.20005, 67, 27.34, 23.62, 0.79995, 2, 75, 16.25, -14.26, 0.5448, 67, 7.05, 44.27, 0.4552, 2, 75, 46.09, -8, 0.62198, 67, -6.08, 71.79, 0.37802, 2, 75, 80.31, -9.69, 0.78836, 67, -12.51, 105.43, 0.21164, 2, 75, 111.06, -9.86, 0.97352, 67, -19.61, 135.36, 0.02648, 2, 75, 119.47, 16.04, 0.98274, 67, -46.76, 137.41, 0.01726, 2, 75, 83.31, 46.2, 0.80419, 67, -67.54, 95.16, 0.19581, 2, 75, 44.33, 58.42, 0.71, 67, -70.2, 54.4, 0.29, 2, 75, 18.84, 46.65, 0.69, 67, -52.75, 32.41, 0.31, 2, 75, -4.17, 32.44, 0.55, 67, -33.51, 13.4, 0.45, 2, 75, -21.5, 14.34, 0.00249, 67, -11.84, 0.83, 0.99751, 1, 67, 11.8, -6.41, 1, 1, 67, 24.99, -7.41, 1, 2, 75, 51.75, 23.29, 0.58329, 67, -37.82, 69.9, 0.41671, 2, 75, 6.2, 11.49, 0.58111, 67, -15.6, 28.43, 0.41889 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 139, + "height": 100 + } + }, + "hand-back": { + "hand-back-fingers": { "name": "girl/hand-front-fingers", "x": 11.59, "y": 1.97, "rotation": 90, "width": 38, "height": 42 } + }, + "hand-front": { + "hand-front-fingers": { "name": "girl/hand-front-fingers", "x": 11.59, "y": 1.97, "rotation": 90, "width": 38, "height": 42 } + }, + "hat": { + "hat": { + "name": "girl/hat", + "type": "mesh", + "uvs": [ 0.0927, 1, 0.3018, 1, 0.54117, 0.96286, 0.79429, 0.88837, 1, 0.78284, 1, 0.66491, 0.89885, 0.53766, 0.8163, 0.53766, 0.73848, 0.40186, 0.65555, 0.25718, 0.57433, 0.11546, 0.50815, 0, 0.34032, 7.2E-4, 0.28185, 0.15871, 0.21639, 0.33559, 0.15752, 0.49466, 0.1037, 0.64008, 0.01016, 0.65249, 0, 0.94734, 0.30731, 0.64939, 0.62096, 0.58421, 0.46964, 0.62146, 0.43112, 0.10625, 0.57911, 0.43657, 0.45775, 0.46247, 0.32733, 0.47774, 0.53642, 0.28599, 0.44504, 0.29245, 0.34714, 0.30794, 0.49454, 0.13823, 0.36433, 0.16053 ], + "triangles": [ 22, 27, 30, 29, 27, 22, 30, 13, 12, 10, 29, 11, 22, 12, 11, 29, 22, 11, 22, 30, 12, 28, 13, 30, 26, 10, 9, 23, 26, 9, 23, 9, 8, 24, 27, 26, 24, 26, 23, 28, 27, 24, 25, 14, 28, 25, 28, 24, 15, 14, 25, 20, 23, 8, 20, 8, 7, 20, 21, 24, 20, 24, 23, 25, 24, 21, 19, 15, 25, 19, 25, 21, 16, 15, 19, 7, 6, 5, 3, 20, 7, 5, 3, 7, 4, 3, 5, 2, 21, 20, 2, 20, 3, 16, 18, 17, 1, 0, 16, 0, 18, 16, 19, 1, 16, 19, 21, 2, 1, 19, 2, 14, 13, 28, 28, 30, 27, 26, 29, 10, 27, 29, 26 ], + "vertices": [ 2, 50, -28.98, 69.5, 0.88, 52, -75.23, 83.03, 0.12, 2, 50, -27.34, 30.85, 0.76, 52, -79.03, 44.54, 0.24, 3, 50, -19.38, -13.13, 0.7291, 51, -12.02, -7.08, 9.0E-4, 52, -77.31, -0.13, 0.27, 2, 50, -5.19, -59.4, 0.8, 52, -69.75, -47.93, 0.2, 2, 50, 13.71, -96.69, 0.99957, 51, 9.03, -94.45, 4.3E-4, 2, 50, 33.04, -95.87, 0.95114, 51, 28.28, -96.35, 0.04886, 2, 50, 53.1, -76.29, 0.88191, 51, 50.88, -79.78, 0.11809, 3, 50, 52.45, -61.03, 0.879, 51, 52.38, -64.58, 0.11986, 52, -12.91, -57.63, 0.00114, 2, 50, 74.09, -45.7, 0.87726, 51, 75.96, -52.44, 0.12274, 3, 50, 97.14, -29.37, 0.73206, 51, 101.08, -39.5, 0.26419, 52, 35.78, -32.55, 0.00375, 3, 50, 119.73, -13.37, 0.42555, 51, 125.68, -26.83, 0.5184, 52, 60.39, -19.88, 0.05605, 3, 50, 138.13, -0.34, 0.29174, 51, 145.73, -16.5, 0.61231, 52, 80.43, -9.55, 0.09595, 3, 50, 136.69, 30.68, 0.22303, 51, 148.66, 14.41, 0.65697, 52, 83.36, 21.36, 0.12, 3, 50, 110.35, 40.39, 0.31671, 51, 123.93, 27.72, 0.59996, 52, 58.64, 34.67, 0.08333, 3, 50, 80.85, 51.26, 0.62374, 51, 96.25, 42.61, 0.36063, 52, 30.96, 49.57, 0.01563, 2, 50, 54.33, 61.03, 0.82549, 51, 71.36, 56.01, 0.17451, 2, 50, 30.08, 69.97, 0.88, 51, 48.61, 68.26, 0.12, 2, 50, 27.31, 87.17, 0.88702, 51, 48.28, 85.68, 0.11298, 1, 50, -21.08, 87, 1, 3, 50, 30.15, 32.27, 0.59407, 51, 43.39, 30.93, 0.18593, 52, -21.91, 37.88, 0.22, 3, 50, 43.29, -25.25, 0.66536, 51, 48.33, -27.87, 0.09464, 52, -16.96, -20.91, 0.24, 3, 50, 36, 2.46, 0.5548, 51, 45, 0.59, 0.1752, 52, -20.29, 7.54, 0.27, 3, 50, 120.12, 13.16, 0.30606, 51, 129.79, -0.61, 0.55394, 52, 64.49, 6.34, 0.14, 3, 50, 67.15, -16.49, 0.68076, 51, 73.19, -22.54, 0.12924, 52, 7.89, -15.59, 0.19, 3, 50, 61.96, 5.77, 0.57797, 51, 71.16, 0.22, 0.21203, 52, 5.87, 7.17, 0.21, 3, 50, 58.43, 29.77, 0.62009, 51, 71.04, 24.48, 0.22991, 52, 5.75, 31.43, 0.15, 3, 50, 91.49, -7.55, 0.59613, 51, 98.54, -17.1, 0.26387, 52, 33.24, -10.15, 0.14, 3, 50, 89.71, 9.3, 0.49151, 51, 99.14, -0.18, 0.31849, 52, 33.85, 6.78, 0.19, 3, 50, 86.41, 27.28, 0.48715, 51, 98.39, 18.1, 0.34285, 52, 33.1, 25.05, 0.17, 3, 50, 115.37, 1.22, 0.38285, 51, 123.41, -11.77, 0.45715, 52, 58.12, -4.82, 0.16, 3, 50, 110.7, 25.13, 0.30156, 51, 122.14, 12.56, 0.52844, 52, 56.84, 19.51, 0.17 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 32, 34, 34, 36, 0, 36, 30, 32, 28, 30, 14, 16, 16, 18, 40, 46, 16, 46, 42, 48, 46, 48, 38, 50, 48, 50, 52, 46, 18, 52, 44, 54, 54, 48, 52, 54, 56, 50, 54, 56, 56, 28, 18, 20, 20, 22, 58, 52, 20, 58, 60, 56, 24, 26, 26, 28, 60, 26 ], + "width": 185, + "height": 164 + } + }, + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 }, + "mouth-smile": { "name": "girl/mouth-smile", "x": -4.12, "y": 2.56, "width": 57, "height": 13 } + }, + "nose": { + "nose": { + "name": "girl/nose", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 6, 57.27, -63, 0.68, 29, 14.7, -17.7, 0.32, 2, 6, 56.34, -41.02, 0.73, 29, -7.3, -17.7, 0.27, 2, 6, 69.33, -40.47, 0.73, 29, -7.3, -4.7, 0.27, 2, 6, 70.26, -62.45, 0.68, 29, 14.7, -4.7, 0.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 13 + } + }, + "pompom": { + "pompom": { "name": "girl/pompom", "x": 0.31, "y": -0.35, "rotation": -95.63, "width": 96, "height": 85 } + }, + "scarf": { + "scarf": { + "name": "girl/scarf", + "type": "mesh", + "uvs": [ 0, 0.69166, 0.08052, 0.80607, 0.18349, 0.90523, 0.29463, 0.96243, 0.44173, 1, 0.5921, 0.99676, 0.69655, 0.96098, 0.81649, 0.89046, 0.92984, 0.74335, 0.98437, 0.67259, 1, 0.62301, 1, 0.43614, 0.987, 0.34894, 0.95168, 0.11197, 0.8389, 0.11579, 0.75309, 0.14439, 0.66045, 0.15555, 0.57902, 0.16537, 0.46625, 0.11579, 0.37308, 0.07002, 0.28482, 0.02426, 0.20473, 0, 0.09849, 0.02044, 0.056, 0.3408, 0, 0.51623, 0.2505, 0.51241, 0.45971, 0.56199, 0.6444, 0.52385, 0.85198, 0.46283, 0.15733, 0.43995, 0.3453, 0.53148, 0.54797, 0.54292, 0.74737, 0.5086, 0.26684, 0.42851, 0.3506, 0.44336, 0.46122, 0.45875, 0.16878, 0.36367, 0.94187, 0.40181 ], + "triangles": [ 32, 15, 28, 28, 15, 37, 27, 31, 17, 31, 35, 17, 27, 16, 32, 32, 16, 15, 37, 15, 14, 18, 35, 34, 34, 33, 19, 12, 14, 13, 12, 37, 14, 23, 22, 36, 33, 36, 20, 27, 17, 16, 17, 35, 18, 18, 34, 19, 19, 33, 20, 36, 21, 20, 36, 22, 21, 28, 37, 11, 30, 25, 34, 30, 34, 35, 34, 25, 33, 24, 23, 29, 25, 29, 33, 29, 36, 33, 29, 23, 36, 37, 12, 11, 5, 4, 26, 4, 3, 26, 6, 5, 31, 5, 26, 31, 26, 3, 30, 31, 27, 6, 7, 27, 32, 7, 6, 27, 3, 2, 30, 30, 1, 25, 30, 2, 1, 7, 32, 8, 29, 25, 1, 9, 8, 28, 28, 8, 32, 24, 29, 0, 0, 29, 1, 9, 28, 10, 10, 28, 11, 26, 35, 31, 26, 30, 35 ], + "vertices": [ 1, 4, 101.59, 148.9, 1, 1, 4, 88.51, 130.67, 1, 1, 4, 76.57, 106.99, 1, 1, 4, 68.76, 81.06, 1, 1, 4, 62.3, 46.43, 1, 1, 4, 59.93, 10.72, 1, 1, 4, 61.69, -14.34, 1, 1, 4, 66.71, -43.35, 1, 1, 4, 79.64, -71.38, 1, 1, 4, 85.86, -84.86, 1, 1, 4, 90.62, -88.96, 1, 2, 4, 111.53, -90.22, 0.68, 5, 12.11, -93.3, 0.32, 2, 4, 120.59, -87.62, 0.68, 5, 21.19, -90.81, 0.32, 1, 5, 49.45, -81.99, 1, 1, 5, 49.69, -55.15, 1, 1, 5, 47.25, -34.67, 1, 1, 5, 46.62, -12.6, 1, 1, 5, 46.07, 6.8, 1, 1, 5, 51.76, 33.52, 1, 1, 5, 56.94, 55.57, 1, 1, 5, 62.1, 76.47, 1, 1, 5, 65.02, 95.46, 1, 1, 5, 63.52, 120.79, 1, 2, 4, 133.66, 133.75, 0.68, 5, 36.73, 130.17, 0.32, 2, 4, 118.16, 147.77, 0.86, 5, 21.41, 144.43, 0.14, 2, 4, 113.61, 88.46, 0.68, 5, 16.19, 85.15, 0.32, 2, 4, 105.87, 38.97, 0.71, 5, 7.91, 35.81, 0.29, 2, 4, 107.27, -5.15, 0.68, 5, 8.8, -8.29, 0.32, 2, 4, 110.76, -54.86, 0.68, 5, 11.73, -57.98, 0.32, 2, 4, 122.22, 110.21, 0.68, 5, 25.04, 106.78, 0.32, 2, 4, 110.42, 66.02, 0.68, 5, 12.75, 62.78, 0.32, 2, 4, 106.59, 17.89, 0.68, 5, 8.39, 14.74, 0.32, 2, 4, 107.47, -29.73, 0.68, 5, 8.73, -32.84, 0.32, 2, 4, 121.95, 84.1, 0.68, 5, 24.47, 80.7, 0.32, 2, 4, 119.33, 64.26, 0.68, 5, 21.64, 60.92, 0.32, 2, 4, 116.31, 38.04, 0.68, 5, 18.32, 34.76, 0.32, 2, 4, 129.85, 107.06, 0.68, 5, 32.62, 103.55, 0.32, 2, 4, 115.79, -76.59, 0.68, 5, 16.52, -79.73, 0.32 ], + "hull": 25, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 18, 20, 20, 22, 26, 28, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 2, 58, 6, 60, 14, 64, 10, 12, 12, 14, 14, 16, 16, 18, 16, 56, 28, 30, 64, 30, 30, 32, 32, 34, 54, 32, 50, 66, 38, 68, 68, 60, 36, 70, 70, 52, 66, 40, 22, 24, 24, 26, 74, 24, 62, 34 ], + "width": 238, + "height": 102 + } + }, + "scarf-back": { + "scarf-back": { "name": "girl/scarf-back", "x": 46.88, "y": 3.26, "rotation": 177.98, "width": 143, "height": 102 } + }, + "sleeve-front": { + "sleeve-front": { "name": "girl/arm-front", "type": "linkedmesh", "skin": "full-skins/boy", "parent": "sleeve-front", "width": 71, "height": 229 } + }, + "zip-girl": { + "zip-girl": { "name": "girl/zip", "x": 19.66, "y": 3.69, "rotation": 80.66, "width": 37, "height": 49 } + } + } + }, + { + "name": "full-skins/girl-blue-cape", + "bones": [ "cape-blue-up", "dress-control-leg-up-front", "dress-control-leg-down-back", "sleeve-control-front", "dress-control-leg-up-back", "cape-front-rotator", "cape-blue-control", "cape-blue-down-middle", "cape-blue-middle-back", "cape-blue-middle-front", "dress-control-leg-down-front", "dress-control-middle", "sleeve-control-back", "cape-blue-up-front", "cape-back-rotator", "cape-blue-down-back", "cape-blue-down-front", "dress-control-foot-back", "cape-blue-down", "dress-control-foot-front", "cape-blue-up-back" ], + "transform": [ "leg-down-front", "leg-up", "leg-down-back", "leg-down-back-up", "leg-down-down", "leg-up-back" ], + "attachments": { + "arm-back": { + "arm-back": { + "name": "girl-blue-cape/sleeve-front", + "type": "mesh", + "uvs": [ 0.39189, 0, 0.14439, 0.01666, 0.15901, 0.10249, 0.17598, 0.19757, 0.191, 0.28175, 0.205, 0.3602, 0.22028, 0.44586, 0.23432, 0.52454, 0.2491, 0.60734, 0.22371, 0.71965, 0.1539, 0.82364, 0, 0.92776, 0, 0.99154, 0.23074, 0.95687, 0.37352, 1, 0.45602, 1, 0.6591, 0.94994, 1, 0.96658, 1, 0.91944, 0.88122, 0.81129, 0.81141, 0.71284, 0.76064, 0.59498, 0.73905, 0.50606, 0.71901, 0.4235, 0.7003, 0.34643, 0.68005, 0.26299, 0.65973, 0.17927, 0.63519, 0.07818, 0.61151, 0, 0.43698, 0.82821, 0.25612, 0.89754, 0.6242, 0.89754, 0.43118, 0.08805, 0.44237, 0.51902, 0.4401, 0.43175, 0.43805, 0.35262, 0.436, 0.27359, 0.43377, 0.18768, 0.44092, 0.60224, 0.43884, 0.72139 ], + "triangles": [ 4, 3, 37, 36, 37, 26, 37, 3, 32, 3, 2, 32, 37, 27, 26, 37, 32, 27, 2, 0, 32, 2, 1, 0, 32, 28, 27, 32, 0, 28, 6, 5, 35, 34, 35, 24, 35, 5, 36, 5, 4, 36, 35, 25, 24, 35, 36, 25, 36, 4, 37, 36, 26, 25, 7, 6, 34, 33, 34, 23, 34, 6, 35, 34, 24, 23, 39, 8, 38, 39, 38, 21, 38, 33, 22, 33, 8, 7, 33, 7, 34, 33, 23, 22, 38, 8, 33, 38, 22, 21, 29, 39, 20, 29, 9, 39, 9, 8, 39, 39, 21, 20, 10, 9, 29, 30, 10, 29, 14, 30, 29, 13, 30, 14, 15, 14, 29, 12, 11, 13, 15, 31, 16, 31, 15, 29, 16, 18, 17, 13, 11, 30, 16, 31, 18, 31, 19, 18, 31, 29, 19, 11, 10, 30, 29, 20, 19 ], + "vertices": [ 1, 84, -16.93, -3.67, 1, 1, 84, -16.62, -29.86, 1, 2, 85, -30.38, -28.39, 0.00675, 84, 3.66, -28.4, 0.99325, 2, 85, -7.5, -26.7, 0.28271, 84, 26.13, -26.7, 0.71729, 3, 86, -20.67, -25.24, 0.0369, 85, 12.75, -25.2, 0.82623, 84, 46.02, -25.2, 0.13687, 3, 86, -1.82, -23.81, 0.46001, 85, 31.62, -23.8, 0.53932, 84, 64.55, -23.8, 6.7E-4, 3, 87, -14.53, -22.33, 0.07429, 86, 18.77, -22.24, 0.89721, 85, 52.23, -22.28, 0.0285, 2, 87, 4.3, -20.78, 0.66292, 86, 37.68, -20.8, 0.33708, 3, 88, -9.4, -19.2, 0.39191, 87, 24.1, -19.15, 0.48809, 86, 57.58, -19.29, 0.12, 3, 131, 76.95, -52.14, 0.2, 88, 17.84, -21.57, 0.472, 87, 50.99, -21.67, 0.328, 3, 131, 84.21, -27.39, 0.33, 89, 9.43, -28.56, 0.5213, 88, 43.1, -28.59, 0.1487, 2, 131, 100.22, -2.61, 0.99748, 89, 34.19, -44.26, 0.00252, 1, 131, 100.22, 12.57, 1, 1, 131, 76.22, 4.32, 1, 1, 131, 61.37, 14.58, 1, 1, 131, 52.79, 14.58, 1, 1, 131, 31.67, 2.67, 1, 1, 131, -3.78, 6.63, 1, 3, 131, -3.78, -4.59, 0.99378, 89, 30.96, 59.71, 0.00244, 88, 65.41, 59.63, 0.00378, 4, 131, 8.57, -30.33, 0.60383, 89, 5.59, 47.04, 0.13666, 88, 39.34, 47.02, 0.2413, 87, 72.6, 46.82, 0.01821, 3, 131, 15.83, -53.76, 0.2, 88, 15.57, 39.53, 0.472, 87, 49.08, 39.45, 0.328, 5, 131, 21.11, -81.81, 0.0171, 89, -45.3, 33.86, 2.3E-4, 88, -12.93, 33.97, 0.32025, 87, 20.9, 34.04, 0.54241, 86, 54.67, 33.91, 0.12, 5, 131, 23.36, -102.97, 3.0E-5, 88, -34.45, 31.51, 0.01472, 87, -0.37, 31.69, 0.51834, 86, 33.3, 31.69, 0.46518, 85, 66.89, 31.63, 0.00174, 3, 87, -20.12, 29.51, 0.10716, 86, 13.46, 29.63, 0.77625, 85, 47.02, 29.61, 0.11659, 4, 87, -38.56, 27.48, 0.0033, 86, -5.07, 27.71, 0.43059, 85, 28.47, 27.72, 0.56203, 84, 61.45, 27.72, 0.00408, 3, 86, -25.12, 25.62, 0.05143, 85, 8.4, 25.67, 0.74366, 84, 41.73, 25.68, 0.20491, 2, 85, -11.75, 23.62, 0.18749, 84, 21.95, 23.62, 0.81251, 1, 84, 1.16, 17.55, 1, 1, 84, -11.55, 9.3, 1, 2, 131, 54.77, -26.3, 0.43, 89, 10.15, 0.89, 0.57, 3, 131, 73.58, -9.8, 0.43, 89, 26.74, -17.72, 0.56433, 88, 60.89, -17.78, 0.00567, 3, 131, 35.3, -9.8, 0.59, 89, 26.27, 20.56, 0.38171, 88, 60.51, 20.5, 0.02829, 1, 84, 0.33, -0.08, 1, 2, 87, 2.87, 0.85, 0.98548, 86, 36.38, 0.83, 0.01452, 2, 87, -18.01, 0.52, 2.8E-4, 86, 15.41, 0.62, 0.99972, 1, 85, 29.88, 0.44, 1, 2, 86, -22.6, 0.24, 1.2E-4, 85, 10.87, 0.28, 0.99988, 1, 84, 23.87, 0.12, 1, 4, 131, 54.37, -80.08, 0.04086, 88, -10.84, 0.74, 0.35514, 87, 22.79, 0.79, 0.484, 86, 56.38, 0.66, 0.12, 3, 131, 54.58, -51.73, 0.2, 88, 18.03, 0.8, 0.472, 87, 51.31, 0.71, 0.328 ], + "hull": 29, + "edges": [ 0, 2, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 56, 36, 62, 60, 22, 0, 64, 2, 4, 64, 4, 54, 56, 64, 54, 14, 16, 14, 66, 42, 44, 66, 44, 12, 14, 68, 66, 12, 68, 44, 46, 68, 46, 46, 48, 70, 68, 48, 70, 10, 12, 70, 10, 8, 10, 72, 70, 8, 72, 48, 50, 72, 50, 50, 52, 52, 54, 64, 74, 74, 72, 52, 74, 4, 6, 6, 8, 74, 6, 76, 66, 76, 42, 76, 16, 58, 78, 78, 76, 40, 78, 38, 58, 58, 20 ], + "width": 104, + "height": 238 + } + }, + "base-head": { + "base-head": { "x": 74.74, "y": -10.09, "rotation": -87.57, "width": 189, "height": 145 } + }, + "body-dress": { + "body-dress": { + "name": "girl-blue-cape/body-dress", + "type": "mesh", + "uvs": [ 0.37147, 0.03655, 0.19753, 0.06738, 0.15404, 0.12133, 0.32219, 0.19841, 0.33378, 0.22538, 0.2874, 0.28704, 0.23812, 0.34613, 0.20623, 0.41935, 0.18013, 0.49642, 0.14534, 0.60818, 0.11925, 0.7148, 0.09896, 0.82527, 0.08156, 0.87665, 0.02358, 0.92546, 0, 0.9614, 0, 0.98709, 0.11635, 0.9948, 0.2874, 1, 0.51933, 1, 0.72516, 0.99865, 0.97448, 0.99351, 1, 0.96782, 0.97738, 0.92286, 0.95999, 0.86891, 0.96578, 0.80597, 0.97738, 0.71091, 0.98028, 0.60301, 0.96578, 0.49382, 0.93679, 0.40776, 0.9049, 0.33325, 0.85852, 0.26517, 0.80344, 0.21251, 0.80634, 0.15984, 0.78024, 0.05858, 0.6121, 0.02646, 0.68457, 0.23071, 0.49613, 0.23199, 0.62261, 0.17757, 0.46316, 0.1917, 0.6719, 0.33814, 0.78206, 0.33428, 0.62551, 0.41393, 0.84584, 0.41136, 0.58202, 0.33557, 0.52404, 0.4165, 0.52114, 0.33557, 0.37619, 0.41264, 0.46026, 0.49228, 0.56463, 0.49614, 0.73857, 0.28162, 0.68059, 0.28419, 0.59652, 0.2829, 0.48635, 0.28676, 0.3443, 0.60918, 0.46026, 0.60661, 0.88643, 0.491, 0.32111, 0.7235, 0.19935, 0.71965, 0.52114, 0.72993, 0.80525, 0.72479, 0.55303, 0.60661, 0.79946, 0.60789, 0.51535, 0.88536, 0.83424, 0.88022, 0.30081, 0.88664, 0.30371, 0.81984, 0.52114, 0.81856, 0.81975, 0.81214, 0.82472, 0.94059, 0.61889, 0.94316, 0.39856, 0.94702, 0.23041, 0.95087, 0.09126, 0.94059, 0.35471, 0.49384, 0.13171, 0.87893, 0.15316, 0.82452, 0.93153, 0.92896, 0.91674, 0.87433, 0.92068, 0.80791, 0.05964, 0.93806 ], + "triangles": [ 49, 31, 30, 50, 51, 35, 50, 35, 49, 52, 36, 51, 5, 4, 52, 40, 49, 30, 40, 30, 29, 45, 52, 51, 43, 45, 51, 39, 51, 50, 43, 51, 39, 42, 40, 29, 46, 5, 52, 46, 52, 45, 41, 43, 39, 44, 45, 43, 39, 50, 49, 39, 49, 40, 41, 39, 40, 42, 41, 40, 37, 34, 33, 37, 33, 32, 38, 0, 34, 38, 34, 37, 3, 1, 0, 3, 0, 38, 2, 1, 3, 32, 35, 37, 4, 3, 38, 31, 35, 32, 36, 38, 37, 4, 38, 36, 36, 37, 35, 49, 35, 31, 51, 36, 35, 52, 4, 36, 6, 5, 46, 44, 43, 41, 46, 45, 44, 7, 6, 46, 76, 23, 22, 20, 76, 22, 20, 22, 21, 76, 68, 63, 76, 63, 77, 68, 76, 20, 19, 68, 20, 68, 19, 63, 79, 15, 14, 79, 14, 13, 15, 79, 72, 16, 72, 71, 15, 72, 16, 16, 71, 17, 63, 19, 69, 70, 64, 62, 17, 71, 64, 17, 64, 70, 18, 62, 69, 70, 62, 18, 17, 70, 18, 18, 69, 19, 63, 69, 62, 64, 65, 62, 25, 78, 59, 24, 78, 25, 67, 59, 78, 66, 59, 67, 23, 78, 24, 78, 63, 67, 77, 78, 23, 77, 63, 78, 62, 67, 63, 76, 77, 23, 62, 66, 67, 42, 29, 28, 55, 42, 28, 55, 28, 27, 55, 41, 42, 61, 48, 55, 55, 27, 26, 61, 26, 59, 55, 26, 61, 25, 59, 26, 59, 60, 61, 56, 58, 66, 62, 65, 66, 10, 9, 57, 56, 11, 57, 65, 56, 66, 57, 11, 10, 11, 56, 75, 56, 65, 75, 74, 11, 75, 12, 11, 74, 64, 75, 65, 74, 75, 64, 79, 13, 12, 72, 12, 74, 79, 12, 72, 71, 74, 64, 72, 74, 71, 66, 58, 59, 58, 56, 54, 59, 58, 60, 48, 44, 41, 47, 46, 44, 73, 46, 47, 47, 44, 48, 8, 7, 73, 60, 54, 47, 73, 47, 54, 48, 60, 47, 53, 8, 73, 53, 73, 54, 9, 8, 53, 57, 9, 53, 56, 53, 54, 48, 41, 55, 60, 48, 61, 56, 57, 53, 58, 54, 60, 73, 7, 46 ], + "vertices": [ 1, 4, 115.55, 22.28, 1, 1, 4, 103.28, 61.24, 1, 1, 4, 77.53, 72.69, 1, 1, 4, 36.95, 39, 1, 2, 4, 23.53, 37.48, 0.57, 3, 88.89, 40.23, 0.43, 2, 4, -5.96, 49.85, 0.4, 3, 59, 51.6, 0.6, 1, 2, -67.89, 26.14, 1, 2, 125, -119.82, 5.59, 0.41, 2, -74.84, -9.88, 0.59, 2, 125, -81.73, 1.16, 0.88, 126, -113.79, -10.46, 0.12, 2, 125, -26.52, -4.59, 0.75, 126, -58.29, -10.27, 0.25, 2, 125, 26.09, -8.53, 0.15, 126, -5.55, -8.55, 0.85, 2, 125, 80.56, -11.15, 0.12, 126, 48.88, -5.31, 0.88, 2, 125, 105.95, -14.1, 0.05, 126, 74.44, -5.52, 0.95, 2, 126, 100, -14.67, 0.49, 127, -24.37, -2.34, 0.51, 1, 127, -6.14, -4.95, 1, 1, 127, 6.37, -3.18, 1, 2, 129, -85.84, -9.66, 0.31, 127, 6.57, 22.47, 0.69, 2, 129, -48.55, -12.21, 0.52, 127, 3.88, 59.74, 0.48, 1, 129, 2.01, -12.21, 1, 2, 129, 46.88, -11.55, 0.53, 128, 17.25, -54.9, 0.47, 1, 128, 11.93, -0.75, 1, 1, 128, -0.98, 4.15, 1, 2, 124, 92.78, 14.32, 0.47, 128, -22.82, -1.91, 0.53, 3, 123, 101.67, 5.36, 0.29, 124, 66.47, 9.17, 0.4686, 128, -49.13, -7.06, 0.2414, 2, 123, 70.72, 6.91, 0.41, 124, 35.47, 8.84, 0.59, 2, 123, 23.98, 9.88, 0.76, 124, -11.36, 8.95, 0.24, 1, 123, -29.1, 11, 1, 2, 123, -82.85, 8.34, 0.89, 2, 90.75, -46.53, 0.11, 2, 123, -125.25, 2.41, 0.69, 2, 84.43, -4.18, 0.31, 1, 3, 30.67, -81.95, 1, 2, 4, -4.62, -75.11, 0.4, 3, 64.56, -73.25, 0.6, 2, 4, 22.12, -65.09, 0.57, 3, 90.95, -62.33, 0.43, 1, 4, 47.91, -67.67, 1, 1, 4, 98.02, -65.76, 1, 1, 4, 116.54, -30.4, 1, 2, 4, 15.15, -38.58, 0.57, 3, 83.08, -36.06, 0.43, 2, 4, 17.61, 2.43, 0.57, 3, 84.16, 5.01, 0.43, 1, 4, 42.24, -27.08, 1, 1, 4, 37.92, 8.11, 1, 1, 3, 30.39, -31.1, 1, 1, 3, 31.28, -55.18, 1, 2, 125, -125.52, 96.85, 0.32, 2, 16.57, -7.22, 0.68, 2, 123, -123.66, -17.43, 0.69, 2, 64.6, -5.95, 0.31, 1, 3, 32.47, -11.58, 1, 2, 125, -123.52, 74.78, 0.32, 2, -5.55, -8.48, 0.68, 1, 3, 33.02, 1.68, 1, 2, 125, -124.35, 42.51, 0.32, 2, -37.79, -6.58, 0.68, 2, 125, -85.79, 62.13, 0.97, 126, -124.37, 49.71, 0.03, 2, 125, -84.66, 84.93, 0.92, 2, 3.29, -47.66, 0.08, 2, 4, -10.72, -48.43, 0.4, 3, 57.57, -46.78, 0.6, 2, 4, -11.02, -35.73, 0.4, 3, 56.83, -34.1, 0.6, 2, 4, -9.01, -17.5, 0.4, 3, 58.23, -15.82, 0.6, 2, 4, -9.09, 6.59, 0.4, 3, 57.33, 8.26, 0.6, 2, 125, -27.47, 38.77, 0.92, 126, -63.88, 32.75, 0.08, 3, 125, -29.58, 64, 0.6336, 126, -68.67, 57.6, 0.3264, 124, -56.81, -106.27, 0.04, 2, 123, -84.4, -8.95, 0.89, 2, 73.45, -45.14, 0.11, 2, 125, 28.91, 35.59, 0.37, 126, -7.48, 35.62, 0.63, 2, 125, 27.9, 9, 0.22, 126, -5.64, 9.08, 0.78, 3, 125, 30.62, 79.28, 0.43771, 126, -10.46, 79.24, 0.53, 129, 2.41, 120.66, 0.03229, 2, 123, 30.45, -27.71, 0.32, 124, -2.61, -28.17, 0.68, 3, 125, -30.25, 84.21, 0.5664, 126, -71.51, 77.62, 0.3936, 124, -57.85, -86.07, 0.04, 1, 123, -27.07, -28.44, 1, 4, 125, 107.09, 80.56, 0.108, 126, 65.43, 88.71, 0.25092, 129, 1.14, 44.19, 0.4, 128, -36.06, -103.45, 0.24108, 3, 124, 73.43, -17.92, 0.3431, 129, 70.66, 46.72, 0.27, 128, -42.17, -34.15, 0.3869, 2, 126, 72.61, 42.49, 0.39, 129, -45.62, 43.56, 0.61, 2, 126, 39.98, 38.51, 0.68, 129, -44.99, 76.42, 0.32, 4, 125, 74.2, 80.73, 0.13965, 126, 32.72, 85.36, 0.46, 129, 2.41, 77.05, 0.17126, 128, -68.95, -103.88, 0.22909, 1, 124, 40.14, -22.8, 1, 2, 129, 68.59, 17.01, 0.32, 128, -12.4, -34.7, 0.68, 2, 129, 23.72, 15.75, 0.74, 128, -8.82, -79.44, 0.26, 1, 129, -24.32, 13.85, 1, 3, 126, 106.05, 31.73, 0.2256, 129, -60.97, 11.96, 0.52, 127, -18.31, 44.06, 0.2544, 3, 126, 105.3, 0.98, 0.2268, 129, -91.31, 17.01, 0.16, 127, -19.07, 13.31, 0.6132, 2, 125, -84.26, 39.16, 0.92, 126, -120.38, 27.04, 0.08, 3, 125, 106.71, -3.13, 0.03989, 126, 74.03, 5.46, 0.85011, 129, -82.49, 47.35, 0.11, 3, 125, 79.8, 0.65, 0.08746, 126, 46.86, 6.34, 0.82673, 129, -77.81, 74.12, 0.08581, 3, 124, 96.29, 4.49, 0.34371, 129, 91.87, 22.74, 0.05, 128, -19.31, -11.74, 0.60629, 4, 123, 104.25, -4.09, 0.1912, 124, 69.61, -0.11, 0.4382, 129, 88.65, 49.61, 0.06, 128, -45.98, -16.34, 0.31061, 4, 123, 71.58, -2.93, 0.28332, 124, 36.93, -0.93, 0.71646, 129, 89.51, 82.29, 5.0E-5, 128, -78.66, -17.16, 1.7E-4, 3, 126, 105.03, -6.02, 0.29357, 129, -98.2, 18.26, 0.08, 127, -19.34, 6.31, 0.62643 ], + "hull": 35, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 0, 68, 104, 10, 72, 8, 72, 70, 110, 96, 124, 128, 22, 112, 124, 126, 112, 116, 116, 118, 16, 146, 146, 94, 106, 146, 24, 148, 148, 128, 144, 142, 148, 150, 144, 30 ], + "width": 218, + "height": 492 + } + }, + "cape-back": { + "cape-back": { + "name": "girl-blue-cape/cape-back", + "type": "mesh", + "uvs": [ 0.16774, 0.18106, 0.16774, 0.29678, 0.15536, 0.37836, 0.1492, 0.41892, 0.13066, 0.53249, 0.10285, 0.63749, 0.06886, 0.74892, 0.03178, 0.84106, 0, 0.91392, 0, 0.96321, 0.12139, 0.97606, 0.26661, 0.98035, 0.36858, 0.99535, 0.49836, 1, 0.64667, 0.99106, 0.77645, 0.96535, 0.9124, 0.96535, 1, 0.94392, 1, 0.83678, 0.94639, 0.75535, 0.90313, 0.64606, 0.8815, 0.52821, 0.88459, 0.40392, 0.89409, 0.29849, 0.8803, 0.21766, 0.87223, 0.17035, 0.74864, 0, 0.23572, 0, 0.49006, 0.88368, 0.38711, 0.87971, 0.2632, 0.86913, 0.13357, 0.8612, 0.64257, 0.87178, 0.78173, 0.85062, 0.89421, 0.84798, 0.11069, 0.76072, 0.14882, 0.6457, 0.17551, 0.53994, 0.19457, 0.42227, 0.22507, 0.30196, 0.22507, 0.18165, 0.81605, 0.1724, 0.8332, 0.3998, 0.82939, 0.53465, 0.85227, 0.65628, 0.89611, 0.76998, 0.49768, 0.53861, 0.51865, 0.28874, 0.5034, 0.07324, 0.84979, 0.31308, 0.81597, 0.2321, 0.19995, 0.37876 ], + "triangles": [ 40, 27, 48, 46, 28, 29, 32, 28, 46, 11, 30, 29, 14, 32, 15, 28, 32, 14, 12, 11, 29, 13, 28, 14, 29, 28, 13, 12, 29, 13, 34, 33, 45, 34, 45, 19, 19, 18, 34, 17, 34, 18, 15, 32, 33, 16, 34, 17, 15, 33, 34, 16, 15, 34, 30, 31, 35, 7, 35, 31, 10, 9, 8, 31, 8, 7, 31, 10, 8, 10, 31, 30, 11, 10, 30, 21, 42, 22, 43, 42, 21, 43, 46, 42, 44, 43, 21, 44, 21, 20, 45, 44, 20, 45, 20, 19, 45, 33, 44, 46, 44, 32, 44, 46, 43, 44, 33, 32, 37, 4, 3, 36, 5, 4, 37, 36, 4, 35, 6, 5, 36, 35, 5, 7, 6, 35, 46, 36, 37, 36, 46, 29, 29, 30, 36, 30, 35, 36, 37, 38, 46, 48, 27, 26, 41, 48, 26, 41, 47, 48, 40, 48, 47, 49, 24, 23, 42, 50, 49, 47, 50, 42, 22, 49, 23, 42, 49, 22, 42, 46, 47, 41, 26, 25, 50, 47, 41, 49, 50, 24, 41, 24, 50, 24, 41, 25, 51, 2, 1, 38, 2, 51, 38, 51, 46, 40, 0, 27, 1, 0, 40, 39, 40, 47, 1, 40, 39, 39, 51, 1, 3, 2, 38, 47, 51, 39, 38, 37, 3, 46, 51, 47 ], + "vertices": [ 2, 139, -67.32, -1.83, 0.83, 4, 54.84, 90.31, 0.17, 2, 139, -22.81, -3.58, 0.9, 4, 10.42, 93.67, 0.1, 1, 139, 8.45, -8.12, 1, 2, 139, 23.99, -10.37, 0.84479, 137, -84.76, 9.18, 0.15521, 2, 139, 67.49, -17.04, 0.23, 137, -41.26, 2.52, 0.77, 3, 139, 107.59, -26.04, 0.00129, 137, -1.16, -6.49, 0.9964, 135, -109.35, 27.31, 0.00231, 3, 137, 41.35, -17.24, 0.64884, 135, -66.84, 16.56, 0.34223, 134, -85.85, -117.18, 0.00892, 4, 139, 185.16, -48.08, 0.02, 137, 76.41, -28.53, 0.21385, 135, -31.78, 5.27, 0.75071, 134, -50.79, -128.46, 0.01544, 2, 137, 104.1, -38.11, 0.00727, 135, -4.09, -4.31, 0.99273, 2, 135, 14.87, -5.06, 0.99722, 134, -4.14, -138.79, 0.00278, 3, 137, 129.28, -6.66, 0.02507, 135, 21.09, 27.14, 0.86628, 134, 2.08, -106.6, 0.10865, 3, 137, 132.45, 32.02, 0.04886, 135, 24.26, 65.82, 0.49631, 134, 5.25, -67.92, 0.45484, 3, 137, 139.29, 59, 0.0214, 135, 31.1, 92.79, 0.21036, 134, 12.09, -40.94, 0.76824, 4, 137, 142.44, 93.55, 6.5E-4, 135, 34.25, 127.35, 0.01537, 136, 25.25, -127.51, 3.3E-4, 134, 15.24, -6.39, 0.98365, 3, 138, 148.57, -64.7, 0.00449, 136, 23.37, -87.8, 0.17701, 134, 13.36, 33.32, 0.81851, 3, 138, 140.04, -29.69, 0.02334, 136, 14.84, -52.79, 0.60404, 134, 4.83, 68.33, 0.37262, 3, 138, 141.46, 6.58, 0.00358, 136, 16.27, -16.52, 0.93615, 134, 6.25, 104.6, 0.06026, 1, 136, 8.94, 7.18, 1, 3, 138, 92.92, 31.89, 0.14408, 136, -32.28, 8.8, 0.85584, 134, -42.29, 129.92, 8.0E-5, 3, 138, 61.03, 18.82, 0.46239, 136, -64.17, -4.27, 0.53552, 134, -74.18, 116.85, 0.00209, 2, 138, 18.54, 8.93, 0.91574, 136, -106.66, -14.16, 0.08426, 2, 140, 96.09, 1.28, 0.09, 138, -27.03, 4.94, 0.91, 2, 140, 48.31, 3.91, 0.53, 138, -74.81, 7.65, 0.47, 1, 140, 7.84, 7.97, 1, 2, 140, -23.4, 5.46, 0.81, 4, 26.44, -98.34, 0.19, 2, 140, -41.68, 3.99, 0.7, 4, 44.77, -97.57, 0.3, 2, 140, -108.46, -26.51, 0.93, 4, 112.65, -69.61, 0.07, 1, 4, 122.98, 66.95, 1, 4, 137, 97.61, 93.09, 0.01667, 135, -10.59, 126.89, 0.05862, 136, -19.58, -127.96, 0.00801, 134, -29.6, -6.84, 0.91669, 3, 137, 95, 65.69, 0.102, 135, -13.19, 99.49, 0.26627, 134, -32.2, -34.25, 0.63173, 3, 137, 89.63, 32.79, 0.20581, 135, -18.56, 66.59, 0.51806, 134, -37.57, -67.15, 0.27614, 3, 137, 85.22, -1.68, 0.21275, 135, -22.97, 32.12, 0.71605, 134, -41.98, -101.61, 0.0712, 3, 138, 102.64, -64, 0.07818, 136, -22.56, -87.09, 0.32621, 134, -32.57, 34.03, 0.59561, 3, 138, 95.96, -26.55, 0.18346, 136, -29.24, -49.64, 0.6387, 134, -39.25, 71.48, 0.17784, 3, 138, 96.12, 3.5, 0.16303, 136, -29.08, -19.6, 0.79715, 134, -39.09, 101.52, 0.03982, 3, 137, 46.33, -6.26, 0.62329, 135, -61.86, 27.54, 0.36315, 134, -80.87, -106.2, 0.01356, 4, 139, 111.23, -13.9, 6.6E-4, 137, 2.48, 5.65, 0.99342, 135, -105.71, 39.45, 0.0059, 134, -124.72, -94.28, 3.0E-5, 2, 139, 70.82, -5.18, 0.23, 137, -37.93, 14.37, 0.77, 2, 139, 25.75, 1.68, 0.84188, 137, -83, 21.24, 0.15812, 2, 139, -20.21, 11.64, 0.9, 4, 7.27, 78.55, 0.1, 2, 139, -66.49, 13.46, 0.83, 4, 53.46, 75.06, 0.17, 2, 140, -41.46, -11.03, 0.7, 4, 45.11, -82.55, 0.3, 2, 140, 46.2, -9.75, 0.53, 138, -76.94, -6, 0.47, 2, 140, 98.05, -12.72, 0.09, 138, -25.1, -9.06, 0.91, 2, 138, 21.93, -4.79, 0.90321, 136, -103.27, -27.89, 0.09679, 3, 138, 66.13, 5.19, 0.44464, 136, -59.07, -17.91, 0.54629, 134, -69.08, 103.21, 0.00907, 2, 139, 73.69, 80.79, 0.36969, 137, -35.06, 100.35, 0.63031, 2, 140, 0.31, -92.06, 0.96279, 138, -122.96, -88.24, 0.03721, 1, 140, -82.75, -93.01, 1, 1, 140, 13.01, -4.06, 1, 2, 140, -18.49, -11.91, 0.81, 4, 22.19, -80.8, 0.19, 1, 139, 9.07, 3.77, 1 ], + "hull": 28, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 50, 52, 52, 54, 0, 54, 44, 46, 46, 48, 48, 50, 2, 4, 4, 6 ], + "width": 267, + "height": 385 + } + }, + "cape-blue-shoulder-back": { + "cape-blue-shoulder-back": { + "name": "girl-blue-cape/cape-shoulder-back", + "type": "mesh", + "uvs": [ 0, 0.07849, 0.35461, 0.35256, 0.61389, 0.5707, 0.8193, 0.78883, 0.95063, 1, 1, 1, 1, 0.74409, 0.93379, 0.484, 0.79236, 0.20994, 0.59032, 0.01977, 0, 0 ], + "triangles": [ 6, 3, 7, 4, 3, 6, 4, 6, 5, 3, 2, 7, 2, 8, 7, 2, 1, 8, 0, 10, 9, 1, 0, 9, 1, 9, 8 ], + "vertices": [ 1, 4, 112.34, -7.46, 1, 2, 4, 77.47, -39.67, 0.89, 140, -72.17, -55.09, 0.11, 2, 4, 49.88, -63.07, 0.47, 140, -45.49, -30.67, 0.53, 2, 4, 22.7, -81.2, 0.2, 140, -19.01, -11.52, 0.8, 1, 140, 6.38, 0.4, 1, 1, 140, 6.56, 5.23, 1, 2, 4, 26.63, -99.26, 0.03, 140, -23.62, 6.37, 0.97, 2, 4, 57.72, -95.1, 0.19, 140, -54.53, 1.04, 0.81, 2, 4, 91.01, -83.72, 0.5, 140, -87.37, -11.59, 0.5, 2, 4, 114.88, -65.67, 0.71, 140, -110.54, -30.53, 0.29, 1, 4, 121.57, -8.16, 1 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 98, + "height": 118 + } + }, + "cape-blue-shoulder-front": { + "cape-blue-shoulder-front": { + "name": "girl-blue-cape/cape-shoulder-front", + "type": "mesh", + "uvs": [ 1, 0.26291, 0.82448, 0.42574, 0.58034, 0.61028, 0.30936, 0.80567, 0.09204, 1, 0.03839, 1, 0, 0.62982, 0, 0.31936, 0.21009, 0.09357, 0.51595, 0, 0.98546, 0.00238, 0.35765, 0.36929, 0.59912, 0.21298, 0.16717, 0.51258 ], + "triangles": [ 2, 11, 12, 2, 12, 1, 7, 8, 11, 1, 12, 0, 12, 10, 0, 12, 11, 8, 12, 8, 9, 12, 9, 10, 2, 13, 11, 13, 7, 11, 3, 4, 6, 4, 5, 6, 6, 13, 3, 2, 3, 13, 6, 7, 13 ], + "vertices": [ 1, 4, 82.18, -29.91, 1, 1, 4, 58.8, -6.49, 1, 2, 139, -47.93, 63.65, 0.33, 4, 33.09, 25.57, 0.67, 2, 139, -19.56, 29.18, 0.88, 4, 5.99, 61.04, 0.12, 1, 139, 8.9, 1.31, 1, 1, 139, 8.64, -5.28, 1, 2, 139, -47.77, -7.79, 0.73, 4, 35.51, 96.97, 0.27, 2, 139, -94.92, -5.94, 0.44, 4, 82.57, 93.41, 0.56, 2, 139, -128.2, 21.23, 0.21, 4, 114.84, 65.06, 0.79, 1, 4, 126.19, 26.47, 1, 1, 4, 121.47, -31.09, 1, 2, 139, -85.61, 37.72, 0.5, 4, 71.68, 50.12, 0.5, 1, 4, 93.14, 18.71, 1, 2, 139, -64.77, 13.46, 0.65, 4, 51.73, 75.12, 0.35 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 123, + "height": 152 + } + }, + "cape-blue-up-front": { + "cape-blue-up-front": { + "name": "girl-blue-cape/cape-up-front", + "type": "mesh", + "uvs": [ 1, 1, 0.7644, 1, 0.60402, 0.93701, 0.40799, 0.93403, 0.20484, 0.87139, 0.04445, 0.75804, 0, 0.57908, 0.00168, 0.39712, 0.16563, 0.2271, 0.39373, 0.07199, 0.60402, 0, 0.83568, 0, 1, 0.04515, 0.9034, 0.10182, 0.75727, 0.14955, 0.66461, 0.25991, 0.5862, 0.40905, 0.56481, 0.57013, 0.60045, 0.72225, 0.75371, 0.79682, 0.92835, 0.82665, 1, 0.90122, 0.32245, 0.38817, 0.29038, 0.58802, 0.40443, 0.76401, 0.43294, 0.16744, 0.13543, 0.58128, 0.19958, 0.34266, 0.23879, 0.78113, 0.4098, 0.13281, 0.61528, 0.04432 ], + "triangles": [ 2, 3, 24, 4, 28, 3, 2, 18, 19, 2, 24, 18, 1, 19, 20, 1, 20, 21, 2, 19, 1, 1, 21, 0, 28, 24, 3, 4, 5, 28, 5, 26, 28, 28, 26, 23, 28, 23, 24, 24, 23, 17, 24, 17, 18, 5, 6, 26, 8, 9, 29, 7, 8, 27, 6, 7, 26, 9, 10, 30, 30, 10, 11, 13, 11, 12, 14, 30, 11, 14, 11, 13, 25, 29, 30, 15, 30, 14, 25, 30, 15, 22, 27, 25, 16, 25, 15, 22, 25, 16, 23, 22, 17, 17, 22, 16, 29, 9, 30, 22, 23, 27, 29, 25, 27, 23, 26, 27, 26, 7, 27, 29, 27, 8 ], + "vertices": [ 1, 4, 85.07, -28.86, 1, 1, 4, 88.53, 16.95, 1, 2, 29, -78.55, -97.76, 0.12904, 4, 105.52, 47.03, 0.87096, 2, 29, -116.77, -97.07, 0.22, 4, 109.1, 85.09, 0.78, 4, 141, -191.82, 123.01, 0.23269, 29, -156.39, -82.47, 0.22918, 30, -67.47, -83.07, 0.13813, 4, 126.64, 123.49, 0.4, 4, 141, -165.41, 154.29, 0.28, 29, -187.66, -56.06, 0.40019, 30, -98.75, -56.66, 0.16114, 4, 155.33, 152.68, 0.15867, 4, 141, -123.71, 162.96, 0.17927, 6, 49.32, 155.86, 0.59755, 29, -196.33, -14.36, 0.06318, 30, -107.42, -14.96, 0.16, 3, 141, -81.31, 162.63, 0.07633, 6, 91.69, 157.33, 0.72367, 30, -107.09, 27.43, 0.2, 3, 141, -41.7, 130.66, 0.06, 6, 132.62, 127.07, 0.7, 30, -75.12, 67.05, 0.24, 4, 141, -5.56, 86.18, 0.08877, 6, 170.61, 84.16, 0.71399, 29, -119.55, 103.79, 0.01724, 30, -30.64, 103.19, 0.18, 4, 141, 11.21, 45.17, 0.51, 6, 189.11, 43.9, 0.19156, 29, -78.55, 120.56, 0.15, 30, 10.37, 119.96, 0.14844, 2, 141, 11.21, 0, 0.72, 29, -33.37, 120.56, 0.28, 2, 141, 0.7, -32.04, 0.72, 29, -1.33, 110.04, 0.28, 2, 141, -12.51, -13.21, 0.79, 29, -20.17, 96.84, 0.21, 2, 141, -23.63, 15.29, 0.71, 29, -48.66, 85.72, 0.29, 2, 141, -49.34, 33.36, 0.54, 29, -66.73, 60, 0.46, 2, 141, -84.09, 48.65, 0.45, 29, -82.02, 25.25, 0.55, 3, 141, -121.62, 52.82, 0.37571, 29, -86.19, -12.28, 0.55, 4, 191.34, 48.2, 0.07429, 3, 141, -157.07, 45.87, 0.27096, 29, -79.24, -47.72, 0.5, 4, 155.47, 43.94, 0.22904, 2, 29, -49.36, -65.1, 0.27899, 4, 135.89, 15.45, 0.72101, 2, 29, -15.3, -72.05, 0.11247, 4, 126.4, -17.98, 0.88753, 1, 4, 108.02, -30.6, 1, 2, 141, -79.23, 100.08, 0.64, 29, -133.45, 30.12, 0.36, 3, 141, -125.79, 106.33, 0.48, 29, -139.71, -16.45, 0.37805, 4, 191.22, 101.88, 0.14195, 3, 141, -166.8, 84.09, 0.27, 29, -117.47, -57.45, 0.423, 4, 148.65, 82.79, 0.307, 3, 141, -27.8, 78.53, 0.69314, 29, -111.91, 81.55, 0.28, 30, -22.99, 80.95, 0.02686, 4, 141, -124.22, 136.55, 0.35527, 29, -169.92, -14.88, 0.41, 30, -81.01, -15.48, 0.15867, 4, 195.06, 131.89, 0.07605, 3, 141, -68.62, 124.04, 0.86, 29, -157.41, 40.72, 0.10943, 30, -68.5, 40.12, 0.03057, 4, 141, -170.79, 116.39, 0.27213, 29, -149.77, -61.44, 0.35294, 30, -60.85, -62.04, 0.03493, 4, 147.11, 115.3, 0.34, 3, 141, -19.73, 83.05, 0.24, 29, -116.42, 89.62, 0.39163, 30, -27.5, 89.02, 0.36837, 3, 141, 0.89, 42.98, 0.64, 29, -76.35, 110.23, 0.27769, 30, 12.56, 109.64, 0.08231 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42, 54, 50, 52, 56, 58, 54, 58, 60 ], + "width": 195, + "height": 233 + } + }, + "cape-ribbon": { + "cape-ribbon": { "name": "girl-blue-cape/cape-ribbon", "x": 105.78, "y": -28.65, "rotation": -94.33, "width": 100, "height": 36 } + }, + "cape-up-back": { + "cape-up-back": { + "name": "girl-blue-cape/cape-back-up", + "type": "mesh", + "uvs": [ 0.52406, 0.00329, 0.62554, 0.04269, 0.7529, 0.09213, 0.90546, 0.25682, 1, 0.47751, 1, 0.7509, 0.89981, 0.91888, 0.75572, 1, 0.39127, 1, 0, 0.79372, 0, 0.22718, 0.29804, 0, 0.79245, 0.82336, 0.85743, 0.53021, 0.79245, 0.3227, 0.66532, 0.19753, 0.42518, 0.10531, 0.37997, 0.56974, 0.55552, 0.10358 ], + "triangles": [ 12, 13, 5, 7, 12, 6, 7, 8, 12, 13, 4, 5, 12, 17, 13, 13, 14, 4, 6, 12, 5, 16, 10, 11, 8, 17, 12, 17, 10, 16, 9, 17, 8, 9, 10, 17, 3, 14, 2, 14, 15, 2, 17, 16, 15, 16, 18, 15, 18, 1, 15, 16, 0, 18, 16, 11, 0, 18, 0, 1, 15, 1, 2, 14, 17, 15, 14, 3, 4, 17, 14, 13 ], + "vertices": [ 2, 141, 8.32, -5.56, 0.76, 29, -27.81, 117.67, 0.24, 2, 141, -0.3, -30.52, 0.76, 29, -2.85, 109.04, 0.24, 2, 141, -11.12, -61.85, 0.81, 29, 28.48, 98.23, 0.19, 3, 141, -45.87, -99.38, 0.51456, 29, 66.01, 63.48, 0.21, 4, 255.4, -109.28, 0.27544, 3, 141, -92.43, -122.64, 0.26657, 29, 89.27, 16.91, 0.13343, 4, 207.22, -128.96, 0.6, 3, 141, -150.12, -122.64, 0.00304, 29, 89.27, -40.77, 0.16, 4, 149.7, -124.61, 0.83696, 3, 29, 64.62, -76.22, 0.12, 30, 153.54, -76.82, 5.0E-4, 4, 116.21, -97.36, 0.8795, 1, 4, 101.82, -60.73, 1, 2, 29, -60.48, -93.33, 0.44568, 30, 28.44, -93.93, 0.55432, 3, 141, -159.15, 123.36, 0.72, 29, -156.73, -49.81, 0.00104, 30, -67.82, -50.41, 0.27896, 2, 30, -67.82, 69.13, 0.31, 6, 135.01, 119.86, 0.69, 4, 141, 8.32, 50.04, 0.28019, 29, -83.41, 117.67, 0.24, 30, 5.5, 117.07, 0.0456, 6, 186.01, 48.64, 0.43421, 2, 29, 38.21, -56.06, 0.16, 4, 138.3, -72.55, 0.84, 3, 141, -103.55, -87.57, 0.29987, 29, 54.2, 5.79, 0.15013, 4, 198.77, -93.15, 0.55, 3, 141, -59.72, -71.58, 0.5125, 29, 38.21, 49.63, 0.21, 4, 243.69, -80.52, 0.2775, 2, 141, -33.12, -40.31, 0.81, 29, 6.94, 76.22, 0.19, 2, 141, -13.8, 18.77, 0.76, 29, -52.14, 95.55, 0.24, 3, 141, -111.85, 29.89, 0.02898, 29, -63.26, -2.5, 0.24273, 30, 25.66, -3.1, 0.72829, 2, 141, -13.3, -13.3, 0.76, 29, -20.07, 96.05, 0.24 ], + "hull": 12, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 0, 2, 2, 4 ], + "width": 246, + "height": 211 + } + }, + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-blue-cape/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { + "name": "girl/back-eyebrow", + "path": "girl-blue-cape/back-eyebrow", + "x": 15.6, + "y": -9.48, + "rotation": -177.9, + "width": 36, + "height": 23 + } + }, + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "path": "girl-blue-cape/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "girl/eye-back-low-eyelid", + "type": "mesh", + "path": "girl-blue-cape/eye-back-low-eyelid", + "uvs": [ 0, 0.26476, 0.20331, 0.79621, 0.50495, 0.95421, 0.8401, 0.89676, 1, 0.33658, 0.88319, 0.07803, 0.75871, 0.25039, 0.5241, 0.35094, 0.31343, 0.19294, 0.09798, 0 ], + "triangles": [ 3, 2, 7, 2, 1, 7, 7, 6, 3, 3, 6, 4, 1, 8, 7, 1, 0, 8, 6, 5, 4, 0, 9, 8 ], + "vertices": [ 1, 42, -29.75, 1.38, 1, 2, 42, -23.04, -4.47, 0.63, 43, 23.4, -1.82, 0.37, 2, 42, -13.09, -6.21, 0.62, 43, 14.27, 2.5, 0.38, 2, 42, -2.03, -5.57, 0.76, 43, 3.44, 4.83, 0.24, 1, 42, 3.25, 0.59, 1, 1, 42, -0.61, 3.43, 1, 2, 42, -4.72, 1.54, 0.76, 43, 4.14, -2.74, 0.24, 2, 42, -12.46, 0.43, 0.62, 43, 11.9, -3.73, 0.38, 2, 42, -19.41, 2.17, 0.63, 43, 18.14, -7.25, 0.37, 1, 42, -26.52, 4.29, 1 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 33, + "height": 11 + } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "path": "girl-blue-cape/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "girl/eye-back-up-eyelid", + "type": "mesh", + "path": "girl-blue-cape/eye-back-up-eyelid", + "uvs": [ 0.07861, 0.9592, 0.24977, 0.54703, 0.44727, 0.42338, 0.58882, 0.40964, 0.77315, 0.59512, 1, 0.16921, 1, 0, 0.76657, 0.13486, 0.61844, 0, 0.40119, 0.01807, 0.18065, 0.25164, 0, 0.73938, 0, 0.95234 ], + "triangles": [ 1, 10, 2, 3, 2, 9, 2, 10, 9, 3, 9, 8, 3, 8, 7, 1, 0, 11, 0, 12, 11, 11, 10, 1, 3, 7, 4, 4, 7, 5, 7, 6, 5 ], + "vertices": [ 1, 40, -31.8, -11.42, 1, 2, 40, -23.59, -1.94, 0.51, 41, 22.75, 6.53, 0.49, 2, 40, -14.11, 0.91, 0.15, 41, 14.01, 1.88, 0.85, 1, 41, 7.41, 0.24, 1, 1, 40, 1.53, -3.04, 1, 1, 40, 12.42, 6.75, 1, 1, 40, 12.42, 10.64, 1, 1, 40, 1.22, 7.54, 1, 1, 41, 7.87, -9.28, 1, 2, 40, -16.32, 10.23, 0.15, 41, 18.01, -6.83, 0.85, 2, 40, -26.91, 4.86, 0.52, 41, 27.34, 0.52, 0.48, 1, 40, -35.58, -6.36, 1, 1, 40, -35.58, -11.26, 1 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 48, + "height": 23 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "girl/eye-back-up-eyelid-back", + "type": "mesh", + "path": "girl-blue-cape/eye-back-up-eyelid-back", + "uvs": [ 0.12627, 1, 0, 0.99472, 0, 0.60349, 0.16345, 0.30253, 0.44692, 0.06177, 0.74898, 0.00911, 1, 0.1972, 1, 0.52073, 0.72574, 0.37025, 0.49339, 0.42292, 0.25639, 0.68625 ], + "triangles": [ 0, 1, 2, 10, 0, 2, 10, 3, 9, 9, 4, 8, 8, 6, 7, 2, 3, 10, 3, 4, 9, 8, 5, 6, 8, 4, 5 ], + "vertices": [ 1, 40, -28.64, -7.74, 1, 1, 40, -32.94, -7.63, 1, 1, 39, -19.88, 27.79, 1, 1, 39, -14.32, 34.11, 1, 1, 39, -4.69, 39.17, 1, 1, 39, 5.58, 40.27, 1, 1, 39, 14.12, 36.32, 1, 1, 40, 1.06, 2.33, 1, 1, 41, 9.18, -3.76, 1, 2, 41, 16.71, -1.13, 0.92, 40, -16.16, 4.38, 0.08, 2, 41, 23.53, 5.88, 0.33, 40, -24.22, -1.15, 0.67 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 34, + "height": 21 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "girl/eye-white-back", + "type": "mesh", + "path": "girl-blue-cape/eye-white-back", + "uvs": [ 0, 0.39191, 0.07911, 0.7283, 0.26952, 0.95255, 0.56931, 0.98823, 0.90962, 0.92197, 1, 0.50404, 0.94608, 0.17784, 0.76378, 0.00455, 0.50855, 0, 0.20875, 0.12178, 0.56121, 0.48365 ], + "triangles": [ 3, 2, 10, 4, 3, 10, 2, 1, 10, 4, 10, 5, 10, 8, 7, 9, 8, 10, 1, 0, 10, 10, 6, 5, 0, 9, 10, 10, 7, 6 ], + "vertices": [ 1, 40, -34.26, -6.05, 1, 1, 42, -30.63, 5.01, 1, 2, 42, -23.2, -1.94, 0.5, 43, 22.88, -4.3, 0.5, 2, 42, -11.51, -3.04, 0.61, 43, 11.91, -0.13, 0.39, 1, 42, 1.76, -0.99, 1, 2, 40, 4.74, -9.52, 0.54, 42, 5.29, 11.97, 0.46, 1, 40, 2.64, 0.59, 1, 2, 40, -4.47, 5.96, 0.35, 41, 5.55, -4.97, 0.65, 2, 40, -14.42, 6.1, 0.22, 41, 15.34, -3.16, 0.78, 2, 40, -26.12, 2.33, 0.49, 41, 26.07, 2.84, 0.51, 2, 40, -12.37, -8.89, 0.71, 43, 8.05, -15.29, 0.29 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 39, + "height": 31 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { + "name": "girl/front-eyebrow", + "path": "girl-blue-cape/front-eyebrow", + "x": 10.82, + "y": 8.92, + "rotation": -3.58, + "width": 36, + "height": 23 + } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "path": "girl-blue-cape/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "girl/eye-front-low-eyelid", + "type": "mesh", + "path": "girl-blue-cape/eye-front-low-eyelid", + "uvs": [ 0.07038, 0, 0, 0.43773, 0.24154, 0.94046, 0.64093, 0.92609, 1, 0.39464, 1, 0.00682, 0.8516, 0, 0.61899, 0.36591, 0.30738, 0.39464 ], + "triangles": [ 8, 7, 3, 2, 8, 3, 2, 1, 8, 6, 5, 4, 7, 6, 4, 1, 0, 8, 3, 7, 4 ], + "vertices": [ 1, 36, -0.25, 5.3, 1, 1, 36, -2.79, 0.49, 1, 1, 37, 6.69, -3.95, 1, 2, 36, 20.29, -4.89, 0.61, 37, 20.82, -1.32, 0.39, 1, 36, 33.21, 0.96, 1, 1, 36, 33.21, 5.23, 1, 1, 36, 27.87, 5.3, 1, 2, 36, 19.5, 1.28, 0.61, 37, 18.99, 4.61, 0.39, 1, 37, 7.99, 2.37, 1 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 36, + "height": 11 + } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "path": "girl-blue-cape/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "girl/eye-front-up-eyelid", + "type": "mesh", + "path": "girl-blue-cape/eye-front-up-eyelid", + "uvs": [ 0.32251, 0.43387, 0.36464, 0.94737, 0.28564, 1, 0.16714, 0.73859, 0.15924, 0.42823, 0, 0.24201, 0, 0, 0.22771, 0.2138, 0.41731, 0, 0.66747, 0, 0.88604, 0.23637, 1, 0.54673, 1, 0.81194, 0.86497, 0.79501, 0.74121, 0.4903, 0.61217, 0.35487, 0.45417, 0.35487 ], + "triangles": [ 14, 15, 10, 2, 3, 1, 3, 0, 1, 13, 11, 12, 13, 14, 11, 3, 4, 0, 14, 10, 11, 0, 4, 7, 4, 5, 7, 5, 6, 7, 16, 0, 7, 7, 8, 16, 10, 15, 9, 9, 15, 8, 15, 16, 8 ], + "vertices": [ 2, 35, 6.87, 1.33, 0.47507, 34, 6.4, 2.84, 0.52493, 2, 35, 6.12, -13.25, 0.09298, 34, 8.93, -11.54, 0.90702, 1, 34, 4.19, -13.01, 1, 1, 34, -2.92, -5.69, 1, 2, 35, -2.64, 3.68, 0.0415, 34, -3.4, 3, 0.9585, 1, 34, -12.95, 8.21, 1, 1, 34, -12.95, 14.99, 1, 2, 35, 2.71, 8.61, 0.27883, 34, 0.71, 9, 0.72117, 1, 35, 15.14, 11.9, 1, 2, 35, 29.76, 8.54, 0.65, 34, 27.1, 14.99, 0.35, 2, 35, 41.06, -0.85, 0.28137, 34, 40.21, 8.37, 0.71863, 1, 34, 47.05, -0.32, 1, 1, 34, 47.05, -7.75, 1, 2, 35, 36.33, -15.81, 0.07124, 34, 38.95, -7.27, 0.92876, 2, 35, 31, -5.83, 0.45, 34, 31.52, 1.26, 0.55, 2, 35, 24.31, -0.4, 0.65, 34, 23.78, 5.05, 0.35, 2, 35, 15.07, 1.72, 0.76, 34, 14.3, 5.05, 0.24 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32 ], + "width": 60, + "height": 28 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "girl/eye-front-up-eyelid-back", + "type": "mesh", + "path": "girl-blue-cape/eye-front-up-eyelid-back", + "uvs": [ 0.05111, 0.59525, 0.31445, 0.34389, 0.48174, 0.29362, 0.69861, 0.43007, 0.81323, 0.65271, 0.90617, 1, 1, 1, 1, 0.74607, 0.93406, 0.48034, 0.78845, 0.18589, 0.62115, 0, 0.49104, 0, 0.26798, 0, 0, 0.28644, 0, 0.48752 ], + "triangles": [ 3, 2, 9, 2, 1, 12, 5, 7, 6, 5, 4, 7, 4, 8, 7, 4, 3, 8, 0, 14, 1, 14, 13, 1, 3, 9, 8, 10, 9, 2, 10, 2, 11, 1, 13, 12, 2, 12, 11 ], + "vertices": [ 1, 78, -25.28, -10.9, 1, 1, 35, 14.1, 7.02, 1, 1, 35, 22.66, 6.19, 1, 2, 78, 7.58, -7.27, 0.37, 35, 32.77, 0.79, 0.63, 2, 78, 13.43, -12.17, 0.71, 35, 37.37, -5.29, 0.29, 1, 78, 18.17, -19.81, 1, 1, 78, 22.96, -19.81, 1, 1, 78, 22.96, -14.22, 1, 1, 78, 19.59, -8.37, 1, 1, 78, 12.17, -1.9, 1, 1, 78, 3.63, 2.19, 1, 1, 78, -3, 2.19, 1, 1, 78, -14.38, 2.19, 1, 1, 78, -28.04, -4.11, 1, 1, 78, -28.04, -8.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 51, + "height": 22 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "girl/eye-white-front", + "type": "mesh", + "path": "girl-blue-cape/eye-white-front", + "uvs": [ 0, 0.13677, 0.03631, 0.56139, 0.18641, 0.96133, 0.54191, 0.97121, 0.90531, 0.87739, 1, 0.54164, 1, 0.24046, 0.80425, 0.13009, 0.57351, 0, 0.25751, 0.00346, 0.47082, 0.52682 ], + "triangles": [ 3, 2, 10, 2, 1, 10, 4, 3, 10, 4, 10, 5, 7, 6, 5, 1, 0, 10, 10, 9, 8, 10, 8, 7, 10, 7, 5, 0, 9, 10 ], + "vertices": [ 1, 34, 3.55, 4.71, 1, 2, 34, 5, -8.88, 0.5, 36, -3.97, 10.98, 0.5, 2, 36, 2.03, -1.82, 0.36, 37, 2.31, -1.44, 0.64, 2, 36, 16.25, -2.14, 0.32, 37, 16.37, 0.69, 0.68, 1, 36, 30.79, 0.87, 1, 1, 36, 34.57, 11.61, 1, 1, 34, 43.55, 1.39, 1, 2, 35, 35.91, -3.2, 0.27, 34, 35.72, 4.92, 0.73, 2, 35, 27.85, 2.93, 0.54, 34, 26.49, 9.09, 0.46, 2, 35, 15.51, 5.65, 0.62, 34, 13.85, 8.98, 0.38, 2, 35, 20.07, -12.59, 0.81, 37, 11.13, 14.21, 0.19 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 0, 18, 12, 14, 14, 16 ], + "width": 40, + "height": 32 + } + }, + "hair-back": { + "hair-back": { "name": "girl-blue-cape/hair-back", "x": 77.53, "y": 2.96, "rotation": -87.57, "width": 234, "height": 196 } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-blue-cape/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-blue-cape/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch2", + "type": "mesh", + "path": "girl/hair-patch", + "color": "ff6578ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-blue-cape/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "path": "girl-blue-cape/hair-head-side-back", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "path": "girl-blue-cape/hair-head-side-front", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-blue-cape/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hand-back": { + "hand-back-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-blue-cape/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "hand-front": { + "hand-front-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-blue-cape/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-blue-cape/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-blue-cape/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 }, + "mouth-smile": { "name": "girl/mouth-smile", "path": "girl-blue-cape/mouth-smile", "x": -4.12, "y": 2.56, "width": 57, "height": 13 } + }, + "neck": { + "neck": { "name": "girl-spring-dress/neck", "x": 27.19, "y": -3.15, "rotation": -91.34, "width": 39, "height": 63 } + }, + "nose": { + "nose": { + "name": "girl/nose", + "type": "mesh", + "path": "girl-blue-cape/nose", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 6, 57.27, -63, 0.68, 29, 14.7, -17.7, 0.32, 2, 6, 56.34, -41.02, 0.73, 29, -7.3, -17.7, 0.27, 2, 6, 69.33, -40.47, 0.73, 29, -7.3, -4.7, 0.27, 2, 6, 70.26, -62.45, 0.68, 29, 14.7, -4.7, 0.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 13 + } + }, + "ribbon-body": { + "ribbon-body": { "name": "girl-blue-cape/body-ribbon", "x": 18.42, "y": -33.29, "rotation": -94.33, "width": 100, "height": 75 } + }, + "sleeve-front": { + "sleeve-front": { + "name": "girl-blue-cape/sleeve-front", + "type": "mesh", + "uvs": [ 0.39189, 0, 0.14439, 0.01666, 0.15901, 0.10249, 0.17598, 0.19757, 0.191, 0.28175, 0.205, 0.3602, 0.22028, 0.44586, 0.23432, 0.52454, 0.2491, 0.60734, 0.22371, 0.71965, 0.1539, 0.82364, 0, 0.92776, 0, 0.99154, 0.23074, 0.95687, 0.37352, 1, 0.45602, 1, 0.6591, 0.94994, 1, 0.96658, 1, 0.91944, 0.88122, 0.81129, 0.81141, 0.71284, 0.76064, 0.59498, 0.73905, 0.50606, 0.71901, 0.4235, 0.7003, 0.34643, 0.68005, 0.26299, 0.65973, 0.17927, 0.63519, 0.07818, 0.61151, 0, 0.43698, 0.82821, 0.25612, 0.89754, 0.6242, 0.89754, 0.43118, 0.08805, 0.44237, 0.51902, 0.4401, 0.43175, 0.43805, 0.35262, 0.436, 0.27359, 0.43377, 0.18768, 0.44092, 0.60224, 0.43884, 0.72139 ], + "triangles": [ 13, 30, 14, 15, 14, 29, 12, 11, 13, 15, 31, 16, 31, 15, 29, 14, 30, 29, 16, 18, 17, 13, 11, 30, 16, 31, 18, 11, 10, 30, 31, 19, 18, 30, 10, 29, 31, 29, 19, 6, 5, 35, 34, 35, 24, 35, 5, 36, 5, 4, 36, 35, 25, 24, 35, 36, 25, 36, 4, 37, 36, 26, 25, 7, 6, 34, 33, 34, 23, 34, 6, 35, 34, 24, 23, 39, 38, 21, 39, 8, 38, 38, 8, 33, 38, 22, 21, 38, 33, 22, 33, 8, 7, 33, 7, 34, 33, 23, 22, 10, 9, 29, 29, 20, 19, 29, 39, 20, 29, 9, 39, 39, 21, 20, 9, 8, 39, 4, 3, 37, 36, 37, 26, 37, 3, 32, 3, 2, 32, 37, 27, 26, 37, 32, 27, 2, 0, 32, 2, 1, 0, 32, 28, 27, 32, 0, 28 ], + "vertices": [ 1, 11, -20.49, -4.66, 1, 1, 11, -16.63, -30.41, 1, 2, 11, 3.65, -28.95, 0.98956, 15, -30.38, -28.94, 0.01044, 2, 11, 26.12, -27.25, 0.69654, 15, -7.51, -27.25, 0.30346, 3, 11, 46.01, -25.75, 0.12833, 14, -20.67, -25.79, 0.04417, 15, 12.75, -25.75, 0.8275, 3, 11, 64.55, -24.35, 5.4E-4, 14, -1.82, -24.36, 0.45092, 15, 31.62, -24.35, 0.54855, 3, 13, -14.52, -22.88, 0.09244, 14, 18.77, -22.79, 0.86912, 15, 52.23, -22.83, 0.03844, 2, 13, 4.3, -21.33, 0.67682, 14, 37.68, -21.35, 0.32318, 3, 12, -9.39, -19.75, 0.17407, 13, 24.11, -19.7, 0.82329, 14, 57.58, -19.84, 0.00265, 3, 12, 17.84, -22.12, 0.96018, 13, 51, -22.22, 0.02472, 130, 19.81, 52.59, 0.0151, 2, 12, 43.11, -29.14, 0.51751, 130, 12.55, 28.05, 0.48249, 2, 12, 68.49, -44.89, 0.00319, 130, -3.45, 3.48, 0.99681, 1, 130, -3.45, -11.57, 1, 1, 130, 20.54, -3.4, 1, 1, 130, 35.39, -13.58, 1, 1, 130, 43.97, -13.58, 1, 1, 130, 65.09, -1.77, 1, 1, 130, 100.55, -5.7, 1, 2, 12, 65.42, 59.08, 0.01006, 130, 100.55, 5.43, 0.98994, 3, 12, 39.35, 46.47, 0.40219, 13, 72.61, 46.27, 0.00826, 130, 88.19, 30.95, 0.58955, 3, 12, 15.57, 38.98, 0.70901, 13, 49.08, 38.9, 0.15192, 130, 80.93, 54.19, 0.13907, 4, 12, -12.93, 33.42, 0.25073, 13, 20.9, 33.49, 0.66465, 14, 54.67, 33.36, 0.08185, 130, 75.65, 82, 0.00277, 4, 12, -34.44, 30.96, 0.01846, 13, -0.37, 31.14, 0.48291, 14, 33.3, 31.14, 0.4903, 15, 66.88, 31.08, 0.00833, 3, 13, -20.12, 28.96, 0.08139, 14, 13.46, 29.08, 0.74583, 15, 47.02, 29.06, 0.17278, 4, 11, 61.45, 27.17, 0.00108, 13, -38.56, 26.93, 7.5E-4, 14, -5.07, 27.16, 0.33502, 15, 28.47, 27.17, 0.66314, 3, 11, 41.73, 25.13, 0.17136, 14, -25.12, 25.07, 0.01658, 15, 8.4, 25.12, 0.81206, 2, 11, 21.95, 23.07, 0.80027, 15, -11.75, 23.07, 0.19973, 1, 11, -1.94, 20.59, 1, 1, 11, -20.42, 18.18, 1, 2, 12, 43.91, 0.31, 0.7298, 130, 41.99, 26.96, 0.2702, 2, 12, 60.9, -18.33, 0.15731, 130, 23.18, 10.61, 0.84269, 2, 12, 60.51, 19.95, 0.14683, 130, 61.46, 10.6, 0.85317, 1, 11, 0.33, -0.63, 1, 1, 13, 2.87, 0.3, 1, 1, 14, 15.41, 0.07, 1, 1, 15, 29.88, -0.11, 1, 2, 14, -22.6, -0.31, 0, 15, 10.87, -0.27, 1, 1, 11, 23.87, -0.43, 1, 3, 12, -10.83, 0.19, 2.3E-4, 13, 22.79, 0.24, 0.99974, 14, 56.38, 0.11, 3.0E-5, 3, 12, 18.04, 0.25, 0.9998, 13, 51.31, 0.16, 5.0E-5, 130, 42.18, 52.17, 1.5E-4 ], + "hull": 29, + "edges": [ 0, 2, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 56, 36, 62, 60, 22, 0, 64, 2, 4, 64, 4, 54, 56, 64, 54, 14, 16, 14, 66, 42, 44, 66, 44, 12, 14, 68, 66, 12, 68, 44, 46, 68, 46, 46, 48, 70, 68, 48, 70, 10, 12, 70, 10, 8, 10, 72, 70, 8, 72, 48, 50, 72, 50, 50, 52, 52, 54, 64, 74, 74, 72, 52, 74, 4, 6, 6, 8, 74, 6, 76, 66, 76, 42, 76, 16, 58, 78, 78, 76, 40, 78, 38, 58, 58, 20 ], + "width": 104, + "height": 238 + } + }, + "sleeve-inner-back": { + "sleeve-inner-back": { + "name": "girl-blue-cape/sleeve-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 1, 131, 5.56, 15.9, 1, 2, 131, 88.56, 15.9, 0.93003, 83, 41.53, -33.45, 0.06997, 2, 131, 88.56, -41.1, 0.44316, 83, -15.47, -33.45, 0.55684, 2, 131, 5.56, -41.1, 0.60086, 83, -15.47, 49.55, 0.39914 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 83, + "height": 57 + } + }, + "sleeve-inner-front": { + "sleeve-inner-front": { + "name": "girl-blue-cape/sleeve-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 130, 91.43, -14.89, 1, 2, 130, 8.43, -14.88, 1, 12, 87.21, -32.83, 0, 2, 130, 8.42, 41.64, 0.34345, 12, 29.2, -33.4, 0.65655, 2, 130, 91.42, 41.63, 0.5791, 12, 28.35, 49.6, 0.4209 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 83, + "height": 57 + } + } + } + }, + { + "name": "full-skins/girl-spring-dress", + "bones": [ "cape-red-front-inside", "skirt-control-front-down", "cape-red-front-outside", "cape-front-rotator", "skirt-control-back-down", "skirt-control-up", "skirt-rotation-back", "skirt-control", "cape-red-back-outside", "cape-back-rotator", "skirt-rotation-front", "skirt-control-middle", "skirt-control-front", "skirt-control-back", "cape-red-back-inside" ], + "transform": [ "skirt-rotation-back", "skirt-rotation-front" ], + "attachments": { + "arm-back": { + "arm-back": { + "name": "girl-spring-dress/arm-front", + "type": "mesh", + "uvs": [ 1, 1, 0.51047, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 0.53, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909, 0.52825, 0.08961, 0.52645, 0.18177, 0.52476, 0.26801, 0.52291, 0.36314, 0.52111, 0.45529, 0.51928, 0.54893, 0.51759, 0.63514, 0.51585, 0.72434, 0.5139, 0.82396, 0.51219, 0.91165 ], + "triangles": [ 10, 11, 28, 28, 27, 18, 29, 10, 28, 9, 10, 29, 28, 18, 19, 29, 28, 19, 29, 19, 20, 29, 30, 9, 30, 8, 9, 30, 29, 20, 30, 20, 21, 30, 31, 8, 32, 22, 23, 6, 7, 32, 32, 31, 22, 32, 7, 31, 31, 21, 22, 31, 7, 8, 33, 6, 32, 31, 30, 21, 5, 6, 33, 34, 4, 5, 33, 23, 24, 33, 34, 5, 34, 33, 24, 33, 32, 23, 34, 24, 25, 34, 35, 4, 35, 3, 4, 35, 34, 25, 1, 2, 3, 35, 1, 3, 35, 25, 0, 1, 35, 0, 26, 13, 14, 12, 13, 26, 14, 15, 16, 26, 14, 16, 27, 12, 26, 11, 12, 27, 26, 16, 17, 27, 26, 17, 28, 11, 27, 27, 17, 18 ], + "vertices": [ 1, 89, 35.41, 16.56, 1, 1, 89, 35.61, -0.08, 1, 1, 89, 35.83, -17.44, 1, 2, 89, 15.82, -17.69, 0.97415, 88, 49.68, -17.72, 0.02585, 2, 89, -4.19, -17.94, 0.30335, 88, 29.15, -17.93, 0.69665, 3, 89, -24.19, -18.19, 3.5E-4, 88, 8.61, -18.13, 0.83036, 87, 41.9, -18.17, 0.16929, 2, 88, -11.93, -18.33, 0.24, 87, 21.61, -18.27, 0.76, 2, 87, 1.31, -18.36, 0.8, 86, 34.7, -18.37, 0.2, 3, 87, -18.99, -18.46, 0.01161, 86, 14.31, -18.35, 0.93999, 85, 47.78, -18.38, 0.0484, 2, 86, -6.06, -18.32, 0.22079, 85, 27.38, -18.31, 0.77921, 2, 84, 40.35, -18.25, 0.20487, 85, 6.98, -18.25, 0.79513, 2, 84, 20.32, -18.19, 0.9496, 85, -13.42, -18.19, 0.0504, 1, 84, 0.28, -18.13, 1, 1, 84, -19.75, -18.07, 1, 1, 84, -19.7, -0.05, 1, 1, 84, -19.65, 15.93, 1, 1, 84, 0.38, 15.87, 1, 2, 84, 20.42, 15.81, 0.9733, 85, -13.31, 15.81, 0.0267, 2, 84, 40.45, 15.75, 0.16827, 85, 7.09, 15.75, 0.83173, 2, 86, -6.02, 15.68, 0.16665, 85, 27.49, 15.69, 0.83335, 3, 87, -19.15, 15.54, 0.00166, 86, 14.35, 15.65, 0.96514, 85, 47.89, 15.62, 0.0332, 2, 87, 1.15, 15.63, 0.5617, 86, 34.74, 15.63, 0.4383, 2, 88, -12.27, 15.67, 0.04304, 87, 21.45, 15.73, 0.95696, 2, 88, 8.27, 15.87, 0.86585, 87, 41.74, 15.83, 0.13415, 2, 89, -4.6, 16.06, 0.21057, 88, 28.8, 16.07, 0.78943, 2, 89, 15.4, 16.31, 0.97298, 88, 49.34, 16.27, 0.02702, 1, 84, 0.05, -0.17, 1, 1, 84, 20.36, -0.29, 1, 2, 84, 39.37, -0.4, 0.00128, 85, 5.99, -0.4, 0.99872, 1, 85, 27.33, -0.53, 1, 1, 86, 14.5, -0.63, 1, 2, 87, 2, -0.71, 0.95682, 86, 35.5, -0.72, 0.04318, 2, 88, -12.38, -0.74, 3.4E-4, 87, 21.25, -0.67, 0.99966, 2, 88, 7.77, -0.6, 0.99759, 87, 41.17, -0.64, 0.00241, 1, 88, 30.28, -0.44, 1, 1, 89, 16.17, -0.27, 1 ], + "hull": 26, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 0, 26, 28, 28, 30, 0, 2, 2, 4, 52, 28, 24, 52, 54, 52, 22, 54, 56, 54, 20, 56, 58, 56, 18, 58, 60, 58, 16, 60, 62, 60, 14, 62, 64, 62, 12, 64, 66, 64, 10, 66, 68, 66, 8, 68, 2, 70, 70, 68, 6, 70 ], + "width": 34, + "height": 222 + } + }, + "arm-front": { + "arm-front": { + "name": "girl-spring-dress/arm-front", + "type": "mesh", + "uvs": [ 1, 1, 0.51047, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 0.53, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909, 0.52825, 0.08961, 0.52645, 0.18177, 0.52476, 0.26801, 0.52291, 0.36314, 0.52111, 0.45529, 0.51928, 0.54893, 0.51759, 0.63514, 0.51585, 0.72434, 0.5139, 0.82396, 0.51219, 0.91165 ], + "triangles": [ 35, 3, 4, 34, 24, 25, 34, 35, 4, 35, 34, 25, 1, 2, 3, 35, 1, 3, 35, 25, 0, 1, 35, 0, 5, 6, 33, 34, 4, 5, 33, 23, 24, 33, 34, 5, 34, 33, 24, 33, 32, 23, 32, 22, 23, 6, 7, 32, 32, 31, 22, 32, 7, 31, 31, 21, 22, 31, 30, 21, 31, 7, 8, 33, 6, 32, 29, 19, 20, 29, 30, 9, 30, 8, 9, 30, 29, 20, 30, 20, 21, 30, 31, 8, 29, 10, 28, 9, 10, 29, 28, 18, 19, 29, 28, 19, 10, 11, 28, 26, 13, 14, 12, 13, 26, 14, 15, 16, 26, 14, 16, 27, 12, 26, 11, 12, 27, 26, 16, 17, 27, 26, 17, 28, 11, 27, 27, 17, 18, 28, 27, 18 ], + "vertices": [ 1, 16, 38.32, 16.3, 1, 1, 16, 38.52, -0.34, 1, 1, 16, 38.73, -17.69, 1, 2, 12, 52.67, -17.99, 0.00808, 16, 18.72, -17.94, 0.99192, 2, 12, 32.13, -18.19, 0.55013, 16, -1.29, -18.19, 0.44987, 3, 13, 44.84, -18.45, 0.17, 12, 11.58, -18.39, 0.82609, 16, -21.3, -18.44, 0.00391, 3, 14, 58.02, -18.69, 0.00461, 13, 24.54, -18.55, 0.51, 12, -8.96, -18.59, 0.48539, 2, 14, 37.65, -18.67, 0.24, 13, 4.25, -18.64, 0.76, 3, 15, 50.74, -18.68, 0.01218, 14, 17.27, -18.64, 0.69782, 13, -16.04, -18.74, 0.29, 2, 15, 30.34, -18.61, 0.58, 14, -3.11, -18.62, 0.42, 3, 11, 43.26, -18.55, 0.66266, 15, 9.94, -18.55, 0.32, 14, -23.49, -18.6, 0.01734, 2, 11, 23.22, -18.49, 0.87756, 15, -10.46, -18.49, 0.12244, 1, 11, 3.19, -18.43, 1, 1, 11, -16.84, -18.37, 1, 1, 11, -16.79, -0.35, 1, 1, 11, -16.74, 15.63, 1, 1, 11, 3.29, 15.57, 1, 2, 11, 23.32, 15.51, 0.91061, 15, -10.35, 15.51, 0.08939, 2, 11, 43.36, 15.45, 0.68, 15, 10.05, 15.45, 0.32, 2, 15, 30.45, 15.39, 0.58, 14, -3.07, 15.38, 0.42, 3, 15, 50.84, 15.32, 0.00487, 14, 17.31, 15.36, 0.70513, 13, -16.21, 15.26, 0.29, 2, 14, 37.69, 15.33, 0.24, 13, 4.09, 15.36, 0.76, 2, 13, 24.38, 15.45, 0.51, 12, -9.3, 15.4, 0.49, 2, 13, 44.67, 15.55, 0.17, 12, 11.24, 15.61, 0.83, 2, 12, 31.78, 15.81, 0.59679, 16, -1.7, 15.8, 0.40321, 2, 12, 52.32, 16.01, 0.00481, 16, 18.31, 16.05, 0.99519, 1, 11, 2.96, -0.47, 1, 1, 11, 23.27, -0.59, 1, 1, 15, 8.94, -0.71, 1, 2, 15, 30.28, -0.83, 0.58, 14, -3.2, -0.84, 0.42, 2, 14, 17.46, -0.93, 0.71, 13, -15.96, -1.02, 0.29, 2, 14, 38.45, -1.01, 0.24, 13, 4.94, -0.98, 0.76, 1, 13, 24.19, -0.95, 1, 2, 13, 44.1, -0.92, 0.17, 12, 10.74, -0.86, 0.83, 2, 12, 33.25, -0.7, 0.55299, 16, -0.23, -0.71, 0.44701, 1, 16, 19.07, -0.52, 1 ], + "hull": 26, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 0, 26, 28, 28, 30, 0, 2, 2, 4, 52, 28, 24, 52, 54, 52, 22, 54, 56, 54, 20, 56, 58, 56, 18, 58, 60, 58, 16, 60, 62, 60, 14, 62, 64, 62, 12, 64, 66, 64, 10, 66, 68, 66, 8, 68, 2, 70, 70, 68, 6, 70 ], + "width": 34, + "height": 222 + } + }, + "base-head": { + "base-head": { "x": 74.74, "y": -10.09, "rotation": -87.57, "width": 189, "height": 145 } + }, + "body-up": { + "body-up": { "name": "girl-spring-dress/body-up", "x": 59.16, "y": -14.67, "rotation": -94.33, "width": 128, "height": 131 } + }, + "cape-red-down": { + "cape-red-down": { + "name": "girl-spring-dress/cloak-down", + "type": "mesh", + "uvs": [ 0.14417, 0, 0.36304, 0.02025, 0.57682, 0.0966, 0.7397, 0.23912, 0.85168, 0.4529, 0.92294, 0.66668, 1, 0.82447, 1, 1, 0.70916, 1, 0.44448, 0.98735, 0.28669, 0.83974, 0.06273, 0.5038, 0, 0.26966, 0, 0.07624, 0.67674, 0.71028, 0.43738, 0.58788, 0.3008, 0.31931, 0.57552, 0.43898 ], + "triangles": [ 17, 2, 3, 17, 3, 4, 11, 16, 15, 11, 12, 16, 2, 17, 1, 17, 16, 1, 12, 13, 0, 16, 0, 1, 12, 0, 16, 15, 16, 17, 9, 14, 8, 14, 4, 5, 6, 8, 14, 6, 14, 5, 8, 6, 7, 14, 17, 4, 10, 11, 15, 10, 15, 9, 9, 15, 14, 15, 17, 14 ], + "vertices": [ 1, 4, 125.16, -19.58, 1, 1, 4, 121.49, -41.25, 1, 3, 120, 74.56, -19.08, 0.15867, 4, 112.27, -61.99, 0.14879, 122, 28.75, 13.93, 0.69254, 1, 122, 14.5, -2.36, 1, 2, 119, -12.43, 41.24, 0.46, 122, -6.88, -13.55, 0.54, 2, 119, -5.3, 19.86, 0.76, 122, -28.26, -20.68, 0.24, 2, 119, 2.41, 4.09, 0.86, 122, -44.04, -28.39, 0.14, 2, 120, -18.72, -54.46, 0.19, 119, 2.41, -13.47, 0.81, 2, 120, -16.52, -25.46, 0.36, 119, -26.68, -13.47, 0.64, 2, 120, -13.27, 0.84, 0.55, 119, -53.15, -12.2, 0.45, 2, 120, 2.64, 15.46, 0.83, 119, -68.93, 2.56, 0.17, 2, 120, 37.83, 35.26, 0.22, 4, 75.54, -7.66, 0.78, 1, 4, 99.36, -3.17, 1, 1, 4, 118.65, -4.63, 1, 3, 120, 12.61, -24.41, 0.36, 119, -29.92, 15.5, 0.59041, 122, -32.62, 3.94, 0.04959, 3, 120, 26.62, -1.47, 0.83, 119, -53.86, 27.74, 0.15527, 4, 64.33, -44.38, 0.01473, 1, 4, 92.14, -32.79, 1, 1, 4, 78.13, -59.28, 1 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 22, 24, 24, 26, 0, 26, 34, 2, 20, 22 ], + "width": 100, + "height": 100 + } + }, + "cape-red-up": { + "cape-red-up": { + "name": "girl-spring-dress/cloak-up", + "type": "mesh", + "uvs": [ 0.37962, 0, 0.24791, 0.0725, 0.15296, 0.15299, 0.06413, 0.27371, 0.01206, 0.6057, 0, 0.7499, 0, 0.9008, 0.07332, 1, 0.25097, 1, 0.43475, 1, 0.53889, 0.93434, 0.70123, 0.88404, 0.82988, 0.75325, 0.9187, 0.55875, 0.94933, 0.42461, 0.93402, 0.15969, 0.66448, 0, 0.26629, 0.82703, 0.48376, 0.7499, 0.64916, 0.6057, 0.72267, 0.38102, 0.63078, 0.14963, 0.3643, 0.34078, 0.29998, 0.60905 ], + "triangles": [ 3, 2, 22, 22, 23, 3, 18, 19, 11, 11, 19, 12, 12, 19, 13, 18, 23, 19, 17, 23, 18, 18, 10, 9, 9, 8, 17, 8, 7, 17, 7, 6, 17, 9, 17, 18, 10, 18, 11, 6, 5, 17, 17, 5, 23, 23, 5, 4, 23, 4, 3, 23, 22, 19, 19, 20, 13, 19, 22, 20, 13, 20, 14, 20, 15, 14, 22, 21, 20, 20, 21, 15, 2, 1, 22, 22, 0, 21, 22, 1, 0, 21, 16, 15, 21, 0, 16 ], + "vertices": [ 1, 4, 128.5, 22.39, 1, 1, 4, 121.37, 39.71, 1, 2, 4, 112.97, 52.44, 0.27, 117, -9.72, 16.53, 0.73, 1, 117, -21, 2.53, 1, 2, 115, -26.06, -1.94, 0.83, 117, -27.61, -35.98, 0.17, 1, 115, -9.34, -3.48, 1, 2, 115, 8.17, -3.48, 0.99, 117, -29.14, -70.21, 0.01, 2, 4, 15.76, 69.93, 0.07049, 115, 19.68, 5.84, 0.92951, 2, 115, 19.68, 28.4, 0.88, 113, -18.74, 59.54, 0.12, 2, 115, 19.68, 51.74, 0.73, 113, -20.5, 36.27, 0.27, 2, 115, 12.06, 64.96, 0.6, 113, -13.9, 22.51, 0.4, 2, 115, 6.22, 85.58, 0.4, 113, -9.64, 1.51, 0.6, 3, 4, 37.05, -28.04, 0.05405, 115, -8.95, 101.92, 0.27, 113, 4.26, -15.93, 0.67595, 3, 4, 58.7, -40.99, 0.42765, 115, -31.51, 113.2, 0.22, 113, 25.9, -28.88, 0.35235, 3, 4, 73.92, -46.04, 0.6319, 115, -47.07, 117.09, 0.11, 113, 41.13, -33.93, 0.2581, 2, 4, 104.71, -46.42, 0.91761, 113, 71.92, -34.31, 0.08239, 1, 4, 125.77, -13.68, 1, 2, 115, -0.39, 30.34, 0.88, 113, 1.12, 56.09, 0.12, 2, 115, -9.34, 57.96, 0.6, 113, 7.96, 27.88, 0.4, 3, 4, 55.85, -6.44, 0.3066, 115, -26.06, 78.97, 0.27, 113, 23.06, 5.67, 0.4234, 3, 4, 81.14, -17.72, 0.6764, 115, -52.13, 88.3, 0.11, 113, 48.34, -5.61, 0.2136, 1, 4, 108.78, -8.1, 1, 2, 4, 89.23, 27.31, 0.9433, 115, -56.79, 42.79, 0.0567, 2, 115, -25.67, 34.62, 0.91, 113, 26.01, 49.92, 0.09 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32, 8, 46, 6, 8 ], + "width": 127, + "height": 116 + } + }, + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-spring-dress/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { + "name": "girl/back-eyebrow", + "path": "girl-spring-dress/back-eyebrow", + "x": 15.6, + "y": -9.48, + "rotation": -177.9, + "width": 36, + "height": 23 + } + }, + "eye-back-iris": { + "eye-back-iris": { "name": "girl/eye-iris-back", "path": "girl-spring-dress/eye-iris-back", "x": 0.85, "y": -0.75, "width": 33, "height": 34 } + }, + "eye-back-low-eyelid": { + "eye-back-low-eyelid": { + "name": "girl/eye-back-low-eyelid", + "type": "mesh", + "path": "girl-spring-dress/eye-back-low-eyelid", + "uvs": [ 0, 0.26476, 0.20331, 0.79621, 0.50495, 0.95421, 0.8401, 0.89676, 1, 0.33658, 0.88319, 0.07803, 0.75871, 0.25039, 0.5241, 0.35094, 0.31343, 0.19294, 0.09798, 0 ], + "triangles": [ 7, 6, 3, 2, 1, 7, 3, 2, 7, 1, 8, 7, 3, 6, 4, 1, 0, 8, 6, 5, 4, 0, 9, 8 ], + "vertices": [ 1, 42, -29.75, 1.38, 1, 2, 42, -23.04, -4.47, 0.63, 43, 23.4, -1.82, 0.37, 2, 42, -13.09, -6.21, 0.22, 43, 14.27, 2.5, 0.78, 2, 42, -2.03, -5.57, 0.2, 43, 3.44, 4.83, 0.8, 1, 42, 3.25, 0.59, 1, 1, 42, -0.61, 3.43, 1, 2, 42, -4.72, 1.54, 0.39, 43, 4.14, -2.74, 0.61, 2, 42, -12.46, 0.43, 0.22, 43, 11.9, -3.73, 0.78, 2, 42, -19.41, 2.17, 0.63, 43, 18.14, -7.25, 0.37, 1, 42, -26.52, 4.29, 1 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 33, + "height": 11 + } + }, + "eye-back-pupil": { + "eye-back-pupil": { + "name": "girl/eye-back-pupil", + "path": "girl-spring-dress/eye-back-pupil", + "x": 0.43, + "y": -0.67, + "scaleX": 1.2, + "scaleY": 1.2062, + "width": 15, + "height": 17 + } + }, + "eye-back-up-eyelid": { + "eye-back-up-eyelid": { + "name": "girl/eye-back-up-eyelid", + "type": "mesh", + "path": "girl-spring-dress/eye-back-up-eyelid", + "uvs": [ 0.07861, 0.9592, 0.24977, 0.54703, 0.44727, 0.42338, 0.58882, 0.40964, 0.77315, 0.59512, 1, 0.16921, 1, 0, 0.76657, 0.13486, 0.61844, 0, 0.40119, 0.01807, 0.18065, 0.25164, 0, 0.73938, 0, 0.95234 ], + "triangles": [ 1, 10, 2, 3, 2, 9, 2, 10, 9, 3, 9, 8, 3, 8, 7, 1, 0, 11, 0, 12, 11, 11, 10, 1, 3, 7, 4, 4, 7, 5, 7, 6, 5 ], + "vertices": [ 1, 40, -31.8, -11.42, 1, 2, 40, -23.59, -1.94, 0.51, 41, 22.75, 6.53, 0.49, 2, 40, -14.11, 0.91, 0.15, 41, 14.01, 1.88, 0.85, 1, 41, 7.41, 0.24, 1, 1, 40, 1.53, -3.04, 1, 1, 40, 12.42, 6.75, 1, 1, 40, 12.42, 10.64, 1, 1, 40, 1.22, 7.54, 1, 1, 41, 7.87, -9.28, 1, 2, 40, -16.32, 10.23, 0.15, 41, 18.01, -6.83, 0.85, 2, 40, -26.91, 4.86, 0.52, 41, 27.34, 0.52, 0.48, 1, 40, -35.58, -6.36, 1, 1, 40, -35.58, -11.26, 1 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 48, + "height": 23 + } + }, + "eye-back-up-eyelid-back": { + "eye-back-up-eyelid-back": { + "name": "girl/eye-back-up-eyelid-back", + "type": "mesh", + "path": "girl-spring-dress/eye-back-up-eyelid-back", + "uvs": [ 0.12627, 1, 0, 0.99472, 0, 0.60349, 0.16345, 0.30253, 0.44692, 0.06177, 0.74898, 0.00911, 1, 0.1972, 1, 0.52073, 0.72574, 0.37025, 0.49339, 0.42292, 0.25639, 0.68625 ], + "triangles": [ 0, 1, 2, 10, 0, 2, 10, 3, 9, 9, 4, 8, 8, 6, 7, 2, 3, 10, 3, 4, 9, 8, 5, 6, 8, 4, 5 ], + "vertices": [ 1, 40, -28.64, -7.74, 1, 1, 40, -32.94, -7.63, 1, 1, 39, -19.88, 27.79, 1, 1, 39, -14.32, 34.11, 1, 1, 39, -4.69, 39.17, 1, 1, 39, 5.58, 40.27, 1, 1, 39, 14.12, 36.32, 1, 1, 40, 1.06, 2.33, 1, 1, 41, 9.18, -3.76, 1, 2, 41, 16.71, -1.13, 0.92, 40, -16.16, 4.38, 0.08, 2, 41, 23.53, 5.88, 0.33, 40, -24.22, -1.15, 0.67 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 34, + "height": 21 + } + }, + "eye-back-white": { + "eye-back-white": { + "name": "girl/eye-white-back", + "type": "mesh", + "path": "girl-spring-dress/eye-white-back", + "uvs": [ 0, 0.39191, 0.07911, 0.7283, 0.26952, 0.95255, 0.56931, 0.98823, 0.90962, 0.92197, 1, 0.50404, 0.94608, 0.17784, 0.76378, 0.00455, 0.50855, 0, 0.20875, 0.12178, 0.56121, 0.48365 ], + "triangles": [ 3, 2, 10, 4, 3, 10, 2, 1, 10, 4, 10, 5, 10, 8, 7, 9, 8, 10, 1, 0, 10, 10, 6, 5, 0, 9, 10, 10, 7, 6 ], + "vertices": [ 1, 40, -34.26, -6.05, 1, 1, 42, -30.63, 5.01, 1, 2, 42, -23.2, -1.94, 0.5, 43, 22.88, -4.3, 0.5, 2, 42, -11.51, -3.04, 0.61, 43, 11.91, -0.13, 0.39, 1, 42, 1.76, -0.99, 1, 2, 40, 4.74, -9.52, 0.54, 42, 5.29, 11.97, 0.46, 1, 40, 2.64, 0.59, 1, 2, 40, -4.47, 5.96, 0.35, 41, 5.55, -4.97, 0.65, 2, 40, -14.42, 6.1, 0.22, 41, 15.34, -3.16, 0.78, 2, 40, -26.12, 2.33, 0.49, 41, 26.07, 2.84, 0.51, 2, 40, -12.37, -8.89, 0.71, 43, 8.05, -15.29, 0.29 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 39, + "height": 31 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { + "name": "girl/front-eyebrow", + "path": "girl-spring-dress/front-eyebrow", + "x": 10.82, + "y": 8.92, + "rotation": -3.58, + "width": 36, + "height": 23 + } + }, + "eye-front-iris": { + "eye-front-iris": { "name": "girl/eye-iris-front", "path": "girl-spring-dress/eye-iris-front", "x": 0.22, "y": -0.71, "width": 36, "height": 35 } + }, + "eye-front-low-eyelid": { + "eye-front-low-eyelid": { + "name": "girl/eye-front-low-eyelid", + "type": "mesh", + "path": "girl-spring-dress/eye-front-low-eyelid", + "uvs": [ 0.07038, 0, 0, 0.43773, 0.24154, 0.94046, 0.64093, 0.92609, 1, 0.39464, 1, 0.00682, 0.8516, 0, 0.61899, 0.36591, 0.30738, 0.39464 ], + "triangles": [ 8, 7, 3, 2, 8, 3, 2, 1, 8, 6, 5, 4, 7, 6, 4, 1, 0, 8, 3, 7, 4 ], + "vertices": [ 1, 36, -0.25, 5.3, 1, 1, 36, -2.79, 0.49, 1, 1, 37, 6.69, -3.95, 1, 2, 36, 20.29, -4.89, 0.61, 37, 20.82, -1.32, 0.39, 1, 36, 33.21, 0.96, 1, 1, 36, 33.21, 5.23, 1, 1, 36, 27.87, 5.3, 1, 2, 36, 19.5, 1.28, 0.61, 37, 18.99, 4.61, 0.39, 1, 37, 7.99, 2.37, 1 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 36, + "height": 11 + } + }, + "eye-front-pupil": { + "eye-front-pupil": { + "name": "girl/eye-front-pupil", + "path": "girl-spring-dress/eye-front-pupil", + "x": -0.04, + "y": -0.47, + "scaleX": 1.2, + "scaleY": 1.2, + "width": 17, + "height": 17 + } + }, + "eye-front-up-eyelid": { + "eye-front-up-eyelid": { + "name": "girl/eye-front-up-eyelid", + "type": "mesh", + "path": "girl-spring-dress/eye-front-up-eyelid", + "uvs": [ 0.32251, 0.43387, 0.36464, 0.94737, 0.28564, 1, 0.16714, 0.73859, 0.15924, 0.42823, 0, 0.24201, 0, 0, 0.22771, 0.2138, 0.41731, 0, 0.66747, 0, 0.88604, 0.23637, 1, 0.54673, 1, 0.81194, 0.86497, 0.79501, 0.74121, 0.4903, 0.61217, 0.35487, 0.45417, 0.35487 ], + "triangles": [ 14, 15, 10, 2, 3, 1, 3, 0, 1, 13, 11, 12, 13, 14, 11, 3, 4, 0, 14, 10, 11, 0, 4, 7, 4, 5, 7, 5, 6, 7, 16, 0, 7, 7, 8, 16, 10, 15, 9, 9, 15, 8, 15, 16, 8 ], + "vertices": [ 2, 35, 6.87, 1.33, 0.47507, 34, 6.4, 2.84, 0.52493, 2, 35, 6.12, -13.25, 0.09298, 34, 8.93, -11.54, 0.90702, 1, 34, 4.19, -13.01, 1, 1, 34, -2.92, -5.69, 1, 2, 35, -2.64, 3.68, 0.0415, 34, -3.4, 3, 0.9585, 1, 34, -12.95, 8.21, 1, 1, 34, -12.95, 14.99, 1, 2, 35, 2.71, 8.61, 0.27883, 34, 0.71, 9, 0.72117, 1, 35, 15.14, 11.9, 1, 2, 35, 29.76, 8.54, 0.65, 34, 27.1, 14.99, 0.35, 2, 35, 41.06, -0.85, 0.28137, 34, 40.21, 8.37, 0.71863, 1, 34, 47.05, -0.32, 1, 1, 34, 47.05, -7.75, 1, 2, 35, 36.33, -15.81, 0.07124, 34, 38.95, -7.27, 0.92876, 2, 35, 31, -5.83, 0.45, 34, 31.52, 1.26, 0.55, 2, 35, 24.31, -0.4, 0.65, 34, 23.78, 5.05, 0.35, 2, 35, 15.07, 1.72, 0.76, 34, 14.3, 5.05, 0.24 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 0, 32 ], + "width": 60, + "height": 28 + } + }, + "eye-front-up-eyelid-back": { + "eye-front-up-eyelid-back": { + "name": "girl/eye-front-up-eyelid-back", + "type": "mesh", + "path": "girl-spring-dress/eye-front-up-eyelid-back", + "uvs": [ 0.05111, 0.59525, 0.31445, 0.34389, 0.48174, 0.29362, 0.69861, 0.43007, 0.81323, 0.65271, 0.90617, 1, 1, 1, 1, 0.74607, 0.93406, 0.48034, 0.78845, 0.18589, 0.62115, 0, 0.49104, 0, 0.26798, 0, 0, 0.28644, 0, 0.48752 ], + "triangles": [ 2, 1, 12, 3, 2, 9, 5, 4, 7, 5, 7, 6, 0, 14, 1, 4, 3, 8, 4, 8, 7, 14, 13, 1, 3, 9, 8, 10, 9, 2, 10, 2, 11, 1, 13, 12, 2, 12, 11 ], + "vertices": [ 1, 34, -1.1, 4.47, 1, 1, 35, 14.1, 7.02, 1, 1, 35, 22.66, 6.19, 1, 2, 34, 31.76, 8.1, 0.42, 35, 32.77, 0.79, 0.58, 2, 34, 37.61, 3.21, 0.71, 35, 37.37, -5.29, 0.29, 1, 34, 42.35, -4.43, 1, 1, 34, 47.13, -4.43, 1, 1, 78, 22.96, -14.22, 1, 1, 78, 19.59, -8.37, 1, 1, 78, 12.17, -1.9, 1, 1, 78, 3.63, 2.19, 1, 1, 78, -3, 2.19, 1, 1, 78, -14.38, 2.19, 1, 1, 78, -28.04, -4.11, 1, 1, 34, -3.87, 6.84, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 51, + "height": 22 + } + }, + "eye-front-white": { + "eye-front-white": { + "name": "girl/eye-white-front", + "type": "mesh", + "path": "girl-spring-dress/eye-white-front", + "uvs": [ 0, 0.13677, 0.03631, 0.56139, 0.18641, 0.96133, 0.54191, 0.97121, 0.90531, 0.87739, 1, 0.54164, 1, 0.24046, 0.80425, 0.13009, 0.57351, 0, 0.25751, 0.00346, 0.47082, 0.52682 ], + "triangles": [ 3, 2, 10, 2, 1, 10, 4, 3, 10, 4, 10, 5, 7, 6, 5, 1, 0, 10, 10, 9, 8, 10, 8, 7, 10, 7, 5, 0, 9, 10 ], + "vertices": [ 1, 34, 3.55, 4.71, 1, 2, 34, 5, -8.88, 0.5, 36, -3.97, 10.98, 0.5, 2, 36, 2.03, -1.82, 0.36, 37, 2.31, -1.44, 0.64, 2, 36, 16.25, -2.14, 0.32, 37, 16.37, 0.69, 0.68, 1, 36, 30.79, 0.87, 1, 1, 36, 34.57, 11.61, 1, 1, 34, 43.55, 1.39, 1, 2, 35, 35.91, -3.2, 0.27, 34, 35.72, 4.92, 0.73, 2, 35, 27.85, 2.93, 0.54, 34, 26.49, 9.09, 0.46, 2, 35, 15.51, 5.65, 0.62, 34, 13.85, 8.98, 0.38, 2, 35, 20.07, -12.59, 0.81, 37, 11.13, 14.21, 0.19 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 0, 18, 12, 14, 14, 16 ], + "width": 40, + "height": 32 + } + }, + "hair-back": { + "hair-back": { + "name": "girl/hair-back", + "type": "mesh", + "path": "girl-spring-dress/hair-back", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 0, 2, 3, 0 ], + "vertices": [ 2, 6, -3.46, -135.36, 0.71, 30, 189.29, -78.03, 0.29, 2, 6, -15.93, 158.38, 0.71, 30, -104.71, -78.03, 0.29, 2, 6, 168.91, 166.22, 0.71, 30, -104.71, 106.97, 0.29, 2, 6, 181.37, -127.51, 0.71, 30, 189.29, 106.97, 0.29 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 294, + "height": 185 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-spring-dress/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-spring-dress/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch2", + "type": "mesh", + "path": "girl/hair-patch", + "color": "94453fff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-spring-dress/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "path": "girl-spring-dress/hair-head-side-back", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "path": "girl-spring-dress/hair-head-side-front", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-spring-dress/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hand-back": { + "hand-back-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-spring-dress/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "hand-front": { + "hand-front-fingers": { + "name": "girl/hand-front-fingers", + "path": "girl-spring-dress/hand-front-fingers", + "x": 11.59, + "y": 1.97, + "rotation": 90, + "width": 38, + "height": 42 + } + }, + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-spring-dress/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-spring-dress/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 }, + "mouth-smile": { "name": "girl/mouth-smile", "path": "girl-spring-dress/mouth-smile", "x": -4.12, "y": 2.56, "width": 57, "height": 13 } + }, + "neck": { + "neck": { "name": "girl-spring-dress/neck", "x": 27.19, "y": -3.15, "rotation": -91.34, "width": 39, "height": 63 } + }, + "nose": { + "nose": { + "name": "girl/nose", + "type": "mesh", + "path": "girl-spring-dress/nose", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 6, 57.27, -63, 0.68, 29, 14.7, -17.7, 0.32, 2, 6, 56.34, -41.02, 0.73, 29, -7.3, -17.7, 0.27, 2, 6, 69.33, -40.47, 0.73, 29, -7.3, -4.7, 0.27, 2, 6, 70.26, -62.45, 0.68, 29, 14.7, -4.7, 0.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 13 + } + }, + "ribbon-shoulder": { + "ribbon-shoulder": { "name": "girl-spring-dress/shoulder-ribbon", "x": 100.69, "y": -35.56, "rotation": -94.33, "width": 71, "height": 48 } + }, + "skirt": { + "skirt": { + "name": "girl-spring-dress/skirt", + "type": "mesh", + "uvs": [ 0.532, 0, 0.4709, 0, 0.41171, 0, 0.25323, 0.09671, 0.14058, 0.22113, 0.0623, 0.34554, 0, 0.45708, 6.0E-5, 0.78742, 0.1654, 0.88181, 0.31815, 1, 0.50526, 1, 0.68856, 1, 0.83749, 0.87752, 0.99236, 0.73165, 1, 0.41418, 0.9215, 0.29835, 0.84131, 0.18252, 0.72866, 0.06668, 0.6141, 0, 0.13103, 0.46995, 0.23796, 0.60724, 0.35252, 0.69733, 0.50336, 0.74023, 0.6561, 0.69733, 0.76875, 0.60724, 0.86613, 0.46137, 0.78212, 0.3198, 0.71338, 0.41418, 0.62555, 0.47424, 0.51672, 0.4914, 0.38498, 0.48711, 0.29906, 0.39702, 0.21695, 0.30264, 0.35443, 0.23399, 0.29524, 0.1868, 0.42507, 0.25973, 0.52818, 0.26832, 0.59309, 0.24257, 0.64083, 0.19967, 0.69429, 0.14819 ], + "triangles": [ 20, 31, 30, 30, 35, 29, 29, 36, 28, 29, 35, 36, 30, 31, 35, 36, 37, 28, 28, 37, 27, 38, 27, 37, 31, 33, 35, 31, 32, 33, 38, 39, 26, 32, 34, 33, 32, 4, 34, 0, 37, 36, 36, 35, 1, 36, 1, 0, 33, 2, 35, 35, 2, 1, 38, 0, 18, 38, 37, 0, 33, 34, 2, 4, 3, 34, 38, 18, 39, 34, 3, 2, 39, 18, 17, 12, 11, 23, 23, 24, 12, 12, 24, 13, 24, 25, 13, 13, 25, 14, 28, 27, 24, 24, 27, 25, 27, 26, 25, 25, 15, 14, 25, 26, 15, 26, 27, 38, 26, 16, 15, 26, 39, 16, 39, 17, 16, 23, 28, 24, 9, 22, 10, 23, 11, 22, 11, 10, 22, 9, 21, 22, 9, 8, 21, 23, 22, 29, 22, 21, 29, 29, 28, 23, 21, 30, 29, 21, 20, 30, 8, 20, 21, 8, 7, 20, 7, 19, 20, 7, 6, 19, 20, 19, 31, 6, 5, 19, 19, 32, 31, 19, 5, 32, 5, 4, 32 ], + "vertices": [ 1, 4, 17.29, -36.28, 1, 1, 4, 18.97, -14.1, 1, 1, 4, 20.6, 7.38, 1, 2, 110, 65.82, -89.43, 0.30593, 4, 9.32, 66.08, 0.69407, 2, 110, 45.66, -48.43, 0.65597, 4, -7.68, 108.49, 0.34403, 2, 110, 25.51, -19.93, 0.88973, 4, -25.63, 138.42, 0.11027, 1, 110, 7.44, 2.74, 1, 1, 110, -46.08, 2.72, 1, 3, 110, -61.37, -57.46, 0.25894, 105, 13.43, 107.85, 0.71, 4, -115.09, 107.55, 0.03106, 3, 110, -80.52, -113.06, 0.21204, 105, -5.71, 52.25, 0.72535, 4, -138.37, 53.55, 0.06261, 1, 105, -5.71, -15.86, 1, 3, 105, -5.71, -82.58, 0.58138, 109, -87.91, 109.6, 0.34368, 4, -148.54, -80.89, 0.07494, 3, 105, 14.13, -136.79, 0.26163, 109, -68.06, 55.39, 0.68053, 4, -132.84, -136.44, 0.05783, 2, 105, 37.76, -193.16, 0.24, 109, -44.43, -0.99, 0.76, 1, 109, 7, -3.77, 1, 2, 109, 25.76, 24.81, 0.90843, 4, -41.59, -174.01, 0.09157, 2, 109, 44.53, 54, 0.73242, 4, -20.68, -146.32, 0.26758, 2, 109, 63.29, 95, 0.45401, 4, 1.12, -106.85, 0.54599, 1, 4, 15.04, -66.08, 1, 3, 110, 5.35, -44.95, 0.6612, 105, 80.15, 120.36, 0.2, 4, -47.61, 114.99, 0.1388, 3, 110, -16.89, -83.87, 0.37019, 105, 57.91, 81.44, 0.45, 4, -72.73, 77.86, 0.17981, 3, 110, -31.48, -125.57, 0.18786, 105, 43.32, 39.74, 0.5858, 4, -90.42, 37.38, 0.22634, 3, 105, 36.37, -15.16, 0.75525, 109, -45.82, 177.01, 0.06474, 4, -101.5, -16.84, 0.18, 3, 105, 43.32, -70.76, 0.49637, 109, -38.87, 121.41, 0.31941, 4, -98.76, -72.81, 0.18423, 3, 105, 57.91, -111.77, 0.4, 109, -24.28, 80.41, 0.47496, 4, -87.3, -114.8, 0.12504, 3, 105, 81.54, -147.21, 0.16, 109, -0.65, 44.96, 0.74601, 4, -66.41, -151.92, 0.09399, 3, 105, 104.48, -116.63, 0.17, 109, 22.29, 75.54, 0.56301, 4, -41.23, -123.16, 0.26699, 3, 105, 89.19, -91.61, 0.24, 109, 7, 100.56, 0.43686, 4, -54.59, -97.06, 0.32314, 3, 105, 79.46, -59.64, 0.33142, 109, -2.73, 132.53, 0.26648, 4, -61.88, -64.45, 0.40211, 3, 105, 76.68, -20.03, 0.40588, 109, -5.51, 172.15, 0.09581, 4, -61.67, -24.73, 0.49831, 3, 110, 2.57, -137.39, 0.12845, 105, 77.37, 27.93, 0.35758, 4, -57.36, 23.03, 0.51397, 3, 110, 17.17, -106.11, 0.2437, 105, 91.97, 59.2, 0.31, 4, -40.45, 53.12, 0.4463, 3, 110, 32.46, -76.23, 0.46618, 105, 107.26, 89.09, 0.09047, 4, -22.95, 81.76, 0.44335, 3, 110, 43.58, -126.27, 0.11844, 105, 118.38, 39.05, 0.11, 4, -15.63, 31.03, 0.77156, 3, 110, 51.22, -104.72, 0.22926, 105, 126.02, 60.59, 0.0575, 4, -6.38, 51.94, 0.71324, 2, 105, 114.21, 13.33, 0.17, 4, -21.73, 5.7, 0.83, 3, 105, 112.82, -24.2, 0.14524, 109, 30.63, 167.98, 0.09502, 4, -25.94, -31.62, 0.75974, 3, 105, 116.99, -47.83, 0.14384, 109, 34.8, 144.35, 0.18939, 4, -23.57, -55.49, 0.66677, 3, 105, 123.94, -65.2, 0.09, 109, 41.75, 126.97, 0.28023, 4, -17.95, -73.34, 0.62977, 3, 105, 132.28, -84.66, 0.03, 109, 50.09, 107.51, 0.39568, 4, -11.1, -93.38, 0.57432 ], + "hull": 19, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 4, 2, 70, 2, 2, 0, 0, 36, 72, 0, 18, 20, 20, 22, 44, 20, 54, 76 ], + "width": 364, + "height": 162 + } + }, + "underskirt": { + "underskirt": { + "name": "girl-spring-dress/underskirt", + "type": "mesh", + "uvs": [ 0.13668, 0, 0, 0.11048, 0, 0.35349, 0, 0.5756, 0.07116, 0.76423, 0.25979, 0.94448, 0.46464, 1, 0.68672, 0.97656, 0.87735, 0.83221, 1, 0.55421, 1, 0.38798, 1, 0, 0.79052, 0.28923, 0.64716, 0.42987, 0.49934, 0.45979, 0.35819, 0.40892, 0.23815, 0.30419, 0.12923, 0.13064, 0.52712, 0.17253 ], + "triangles": [ 13, 14, 18, 15, 16, 18, 18, 0, 11, 17, 0, 18, 13, 18, 12, 14, 15, 18, 12, 18, 11, 9, 8, 12, 8, 13, 12, 12, 10, 9, 12, 11, 10, 7, 13, 8, 7, 6, 14, 6, 5, 14, 14, 13, 7, 5, 15, 14, 5, 4, 15, 16, 4, 3, 16, 15, 4, 3, 2, 16, 2, 17, 16, 2, 1, 17, 17, 1, 0, 16, 17, 18 ], + "vertices": [ 4, 111, 66.62, -34.12, 0.33917, 108, 115.67, 117.58, 0.06079, 112, 61.17, 280.19, 4.0E-5, 4, -32.12, 111.03, 0.6, 2, 111, 52.25, 13.72, 0.98771, 108, 101.3, 165.42, 0.01229, 2, 111, 20.66, 13.72, 0.99893, 108, 69.71, 165.42, 0.00107, 2, 111, -8.21, 13.72, 0.78, 108, 40.84, 165.42, 0.22, 2, 111, -37.4, -20.91, 0.53, 108, 11.65, 130.79, 0.47, 2, 111, -56.17, -77.21, 0.435, 108, -7.12, 74.49, 0.565, 3, 111, -63.38, -154.35, 0.00296, 108, -14.33, -2.65, 0.98871, 112, -68.83, 159.96, 0.00833, 2, 108, -11.29, -74.93, 0.61621, 112, -65.78, 87.68, 0.38379, 2, 108, 7.48, -141.65, 0.5, 112, -47.02, 20.96, 0.5, 2, 108, 43.62, -184.58, 0.24, 112, -10.88, -21.97, 0.76, 1, 112, 10.73, -21.97, 1, 3, 108, 115.67, -184.58, 7.6E-4, 112, 61.17, -21.97, 0.88924, 4, -54.9, -190.27, 0.11, 4, 111, 29.02, -262.96, 2.5E-4, 108, 78.07, -111.26, 0.4, 112, 23.57, 51.35, 0.49361, 4, -86.87, -114.32, 0.10614, 4, 111, 13.85, -221.73, 0.00648, 108, 62.89, -70.03, 0.45247, 112, 8.4, 92.58, 0.40105, 4, -98.89, -72.07, 0.14, 4, 111, 6.84, -166.5, 0.0591, 108, 55.89, -14.79, 0.67677, 112, 1.4, 147.82, 0.12413, 4, -101.7, -16.46, 0.14, 4, 111, 13.46, -111.65, 0.28006, 108, 62.51, 40.06, 0.56032, 112, 8.01, 202.67, 0.01962, 4, -90.97, 37.74, 0.14, 4, 111, 27.07, -69.63, 0.54438, 108, 76.12, 82.07, 0.31301, 112, 21.63, 244.68, 0.00262, 4, -74.23, 78.6, 0.14, 4, 111, 49.63, -31.51, 0.74734, 108, 98.68, 120.19, 0.11265, 112, 44.19, 282.8, 1.0E-5, 4, -48.86, 114.91, 0.14, 1, 4, -64.79, -23.54, 1 ], + "hull": 12, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 22, 16, 24, 18, 20, 20, 22, 12, 28, 10, 30, 8, 32, 14, 26, 2, 4, 4, 6, 32, 4 ], + "width": 350, + "height": 130 + } + } + } + }, + { + "name": "hair/blue", + "attachments": { + "ear": { + "ear": { "name": "girl/ear", "x": 56.58, "y": 85.63, "rotation": -87.57, "width": 38, "height": 45 } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { "name": "girl/back-eyebrow", "x": 15.6, "y": -9.48, "rotation": -177.9, "width": 36, "height": 23 } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { "name": "girl/front-eyebrow", "x": 10.82, "y": 8.92, "rotation": -3.58, "width": 36, "height": 23 } + }, + "hair-back": { + "hair-back": { + "name": "girl/hair-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 6, -3.46, -135.36, 0.71, 30, 189.29, -78.03, 0.29, 2, 6, -15.93, 158.38, 0.71, 30, -104.71, -78.03, 0.29, 2, 6, 168.91, 166.22, 0.71, 30, -104.71, 106.97, 0.29, 2, 6, 181.37, -127.51, 0.71, 30, 189.29, 106.97, 0.29 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 294, + "height": 185 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch", + "type": "mesh", + "color": "71ffe7ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "hair/brown", + "attachments": { + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-spring-dress/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { + "name": "girl/back-eyebrow", + "path": "girl-spring-dress/back-eyebrow", + "x": 15.6, + "y": -9.48, + "rotation": -177.9, + "width": 36, + "height": 23 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { + "name": "girl/front-eyebrow", + "path": "girl-spring-dress/front-eyebrow", + "x": 10.82, + "y": 8.92, + "rotation": -3.58, + "width": 36, + "height": 23 + } + }, + "hair-back": { + "hair-back": { + "name": "girl/hair-back", + "type": "mesh", + "path": "girl-spring-dress/hair-back", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 0, 2, 3, 0 ], + "vertices": [ 2, 6, -3.46, -135.36, 0.71, 30, 189.29, -78.03, 0.29, 2, 6, -15.93, 158.38, 0.71, 30, -104.71, -78.03, 0.29, 2, 6, 168.91, 166.22, 0.71, 30, -104.71, 106.97, 0.29, 2, 6, 181.37, -127.51, 0.71, 30, 189.29, 106.97, 0.29 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 294, + "height": 185 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-spring-dress/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-spring-dress/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch2", + "type": "mesh", + "path": "girl/hair-patch", + "color": "94453fff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-spring-dress/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "path": "girl-spring-dress/hair-head-side-back", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "path": "girl-spring-dress/hair-head-side-front", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-spring-dress/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "hair/long-blue-with-scarf", + "bones": [ "hair-strand-back-1", "hair-strand-back-3", "hair-holder-front", "scarf-back", "hair-strand-front-2", "hair-holder-back", "hair-strand-front-3", "hair-strand-front-1", "hair-strand-front-4", "hair-strand-back-2" ], + "attachments": { + "ear": { + "ear": { "name": "girl/ear", "x": 56.58, "y": 85.63, "rotation": -87.57, "width": 38, "height": 45 } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { "name": "girl/back-eyebrow", "x": 15.6, "y": -9.48, "rotation": -177.9, "width": 36, "height": 23 } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { "name": "girl/front-eyebrow", "x": 10.82, "y": 8.92, "rotation": -3.58, "width": 36, "height": 23 } + }, + "hair-back": { + "hair-back": { + "name": "girl/hair-back", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 6, -3.46, -135.36, 0.71, 30, 189.29, -78.03, 0.29, 2, 6, -15.93, 158.38, 0.71, 30, -104.71, -78.03, 0.29, 2, 6, 168.91, 166.22, 0.71, 30, -104.71, 106.97, 0.29, 2, 6, 181.37, -127.51, 0.71, 30, 189.29, 106.97, 0.29 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 294, + "height": 185 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch2", + "type": "mesh", + "path": "girl/hair-patch", + "color": "71ffe7ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-strand-back-1": { + "hair-strand-back-1": { + "name": "girl/hair-strand-back-1", + "type": "mesh", + "uvs": [ 0.04701, 0.06856, 0.1845, 0.21146, 0.29181, 0.36494, 0.41253, 0.53695, 0.51314, 0.76717, 0.60368, 1, 0.80489, 0.9974, 1, 0.89948, 1, 0.64544, 0.93567, 0.4311, 0.81159, 0.31731, 0.6674, 0.20352, 0.48631, 0.08444, 0.28846, 0, 0.7244, 0.58458 ], + "triangles": [ 14, 9, 8, 14, 8, 7, 6, 14, 7, 4, 14, 6, 5, 4, 6, 14, 10, 9, 4, 3, 14, 2, 1, 12, 1, 0, 13, 12, 1, 13, 14, 3, 10, 3, 11, 10, 11, 2, 12, 11, 3, 2 ], + "vertices": [ 1, 70, 7.91, 19.32, 1, 2, 70, -14.24, 5, 0.86951, 71, 5.53, -19.35, 0.13049, 2, 70, -37.68, -5.71, 0.79, 71, 31.29, -19.18, 0.21, 2, 70, -63.95, -17.77, 0.63, 71, 60.2, -18.95, 0.37, 2, 70, -98.57, -26.85, 0.42, 71, 95.5, -24.85, 0.58, 2, 70, -133.49, -34.74, 0.24, 71, 130.59, -31.96, 0.76, 2, 70, -134.87, -58.05, 0.09, 71, 141.4, -11.27, 0.91, 2, 70, -122.23, -81.7, 0.09, 71, 139.56, 15.49, 0.91, 2, 70, -84.99, -84.52, 0.24, 71, 106.74, 33.32, 0.76, 2, 70, -53.01, -79.45, 0.42, 71, 75.5, 41.8, 0.58, 2, 70, -35.24, -66.36, 0.63, 71, 53.93, 37.14, 0.37, 2, 70, -17.3, -50.94, 0.79, 71, 31.24, 30.43, 0.21, 2, 70, 1.74, -31.32, 0.83374, 71, 5.83, 20.33, 0.16626, 2, 70, 15.84, -9.37, 0.97706, 71, -16.03, 6.09, 0.02294, 2, 70, -73.66, -53.31, 0.42, 71, 83.62, 9.5, 0.58 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26, 6, 20 ], + "width": 116, + "height": 147 + } + }, + "hair-strand-back-2": { + "hair-strand-back-2": { + "name": "girl/hair-strand-back-2", + "type": "mesh", + "uvs": [ 0.01457, 0.31586, 0.12358, 0.46132, 0.26678, 0.63383, 0.42922, 0.79619, 0.61731, 0.96871, 0.77975, 1, 0.92509, 0.83679, 1, 0.68795, 0.98066, 0.50191, 0.86311, 0.43087, 0.68571, 0.33616, 0.48479, 0.26174, 0.34159, 0.14673, 0.24113, 0.08923, 0.08938, 0.13997, 0.65683, 0.61285 ], + "triangles": [ 5, 4, 6, 4, 15, 6, 4, 3, 15, 6, 15, 7, 8, 15, 9, 15, 8, 7, 15, 10, 9, 3, 2, 15, 15, 11, 10, 15, 2, 11, 2, 1, 11, 0, 14, 1, 1, 12, 11, 12, 14, 13, 12, 1, 14 ], + "vertices": [ 1, 70, -9.44, 45.94, 1, 2, 70, -27.62, 27.42, 0.75, 72, -16.98, -30.25, 0.25, 2, 70, -49.36, 2.93, 0.61, 72, 15.22, -36.25, 0.39, 2, 70, -70.21, -25.14, 0.44, 72, 50.02, -39.65, 0.56, 2, 70, -92.58, -57.78, 0.25, 72, 89.52, -41.98, 0.75, 2, 70, -98.39, -86.99, 0.12, 72, 117.55, -31.91, 0.88, 2, 70, -81.67, -114.78, 0.06, 72, 132.74, -3.26, 0.94, 2, 70, -65.63, -129.67, 0.06, 72, 137.23, 18.16, 0.94, 2, 70, -44.03, -127.77, 0.17, 72, 124.47, 35.69, 0.83, 2, 70, -34.28, -107.05, 0.25, 72, 101.68, 33.37, 0.75, 2, 70, -20.98, -75.68, 0.44, 72, 67.94, 28.59, 0.56, 2, 70, -9.69, -39.86, 0.61, 72, 31.43, 19.8, 0.39, 1, 70, 5.47, -14.87, 1, 1, 70, 13.44, 2.86, 1, 1, 70, 9.7, 30.84, 1, 2, 70, -52.31, -68.04, 0.32, 72, 77.55, -2.19, 0.68 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 182, + "height": 115 + } + }, + "hair-strand-back-3": { + "hair-strand-back-3": { "name": "girl/hair-strand-back-3", "x": 56.8, "y": -25.4, "rotation": 55.29, "width": 184, "height": 157 } + }, + "hair-strand-front-1": { + "hair-strand-front-1": { + "name": "girl/hair-strand-front-1", + "type": "mesh", + "uvs": [ 0.27351, 0, 0.15941, 0.16999, 0.0453, 0.35929, 0, 0.56107, 0.02974, 0.77118, 0.16459, 0.90639, 0.41355, 1, 0.78181, 1, 1, 0.95007, 1, 0.76493, 0.9789, 0.55691, 0.93222, 0.36345, 0.95297, 0.16999, 0.95815, 0, 0.48617, 0.76077, 0.52766, 0.55483, 0.54841, 0.37177 ], + "triangles": [ 3, 2, 15, 10, 15, 11, 14, 3, 15, 4, 3, 14, 5, 4, 14, 9, 15, 10, 6, 5, 14, 15, 9, 14, 8, 7, 9, 7, 14, 9, 6, 14, 7, 15, 2, 16, 13, 12, 16, 16, 2, 1, 13, 16, 0, 1, 0, 16, 11, 16, 12, 15, 16, 11 ], + "vertices": [ 1, 67, 23.66, 11.57, 1, 1, 67, -7.39, 22.5, 1, 2, 67, -42.05, 33.7, 0.56777, 68, 38.87, -36.21, 0.43223, 2, 67, -79.42, 39.94, 0.27008, 68, 76.66, -38.93, 0.72992, 2, 67, -118.76, 40.68, 0.08712, 68, 115.9, -36, 0.91288, 2, 67, -144.74, 32.5, 0.04098, 68, 141, -25.44, 0.95902, 2, 67, -163.6, 15.2, 0.07679, 68, 158.17, -6.46, 0.92321, 2, 67, -165.68, -12.34, 0.10317, 68, 157.68, 21.16, 0.89683, 2, 67, -157.61, -29.36, 0.11136, 68, 148.05, 37.35, 0.88864, 2, 67, -123.09, -31.97, 0.26753, 68, 113.44, 36.73, 0.73247, 2, 67, -84.18, -33.33, 0.41647, 68, 74.57, 34.46, 0.58353, 2, 67, -47.84, -32.57, 0.58895, 68, 38.46, 30.31, 0.41105, 2, 67, -11.88, -36.85, 0.76035, 68, 2.26, 31.22, 0.23965, 1, 67, 19.79, -39.63, 1, 2, 67, -119.4, 6.4, 0.21442, 68, 113.35, -1.81, 0.78558, 2, 67, -81.24, 0.39, 0.42231, 68, 74.79, 0.61, 0.57769, 2, 67, -47.22, -3.74, 0.5861, 68, 40.53, 1.56, 0.4139 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26 ], + "width": 75, + "height": 187 + } + }, + "hair-strand-front-2": { + "hair-strand-front-2": { + "name": "girl/hair-strand-front-3", + "type": "mesh", + "uvs": [ 1, 0.04687, 0.9312, 0.23176, 0.86413, 0.43106, 0.82389, 0.63997, 0.79259, 0.84408, 0.75235, 1, 0.33205, 0.99055, 0, 0.93772, 0, 0.73362, 0.0593, 0.55113, 0.20685, 0.37103, 0.42595, 0.19094, 0.73893, 0, 0.95355, 0, 0.5422, 0.39985, 0.43936, 0.60395, 0.70316, 0.20295 ], + "triangles": [ 15, 8, 9, 9, 10, 15, 5, 6, 4, 15, 6, 8, 6, 15, 4, 6, 7, 8, 4, 15, 3, 15, 14, 3, 10, 11, 14, 14, 16, 2, 3, 14, 2, 15, 10, 14, 1, 13, 0, 1, 12, 13, 16, 11, 12, 16, 12, 1, 2, 16, 1, 14, 11, 16 ], + "vertices": [ 1, 67, 12.41, -11.23, 1, 2, 67, -17, -3.01, 0.95, 74, 9.72, 24.71, 0.05, 2, 67, -48.76, 5.25, 0.57, 74, 42.51, 25.72, 0.43, 2, 67, -82.24, 11.29, 0.38, 74, 76.34, 29.34, 0.62, 2, 67, -115.01, 16.5, 0.21, 74, 109.25, 33.55, 0.79, 1, 74, 134.69, 35.39, 1, 1, 74, 140.8, -0.7, 1, 1, 74, 138.44, -30.73, 1, 2, 67, -91.96, 83.91, 0.21, 74, 106.1, -37.62, 0.79, 2, 67, -62.87, 76.54, 0.38, 74, 76.11, -38.72, 0.62, 2, 67, -34.75, 61.53, 0.57, 74, 44.9, -32.24, 0.43, 2, 67, -7.09, 40.33, 0.95, 74, 12.4, -19.67, 0.05, 1, 67, 21.7, 10.84, 1, 1, 67, 20.29, -7.78, 1, 2, 67, -41.6, 32.79, 0.57, 74, 43.4, -2.73, 0.43, 2, 67, -73.9, 44.21, 0.38, 74, 77.6, -4.6, 0.62, 2, 67, -10.85, 16.43, 0.95, 74, 9.28, 4.33, 0.05 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26, 4, 28, 6, 30, 2, 32 ], + "width": 87, + "height": 162 + } + }, + "hair-strand-front-3": { + "hair-strand-front-3": { + "name": "girl/hair-flap-down-front", + "type": "mesh", + "uvs": [ 0.7113, 0.13231, 0.65533, 0.28192, 0.56017, 0.43154, 0.40905, 0.55721, 0.17677, 0.69187, 0, 0.80558, 0, 1, 0.25793, 1, 0.57976, 0.97015, 0.72529, 0.80258, 0.86242, 0.63501, 0.94078, 0.47044, 0.98835, 0.2909, 1, 0.12034, 0.95757, 0, 0.78406, 0, 0.46222, 0.70982, 0.68891, 0.54524, 0.82604, 0.30287 ], + "triangles": [ 12, 18, 13, 14, 13, 15, 15, 13, 0, 11, 18, 12, 1, 0, 18, 18, 0, 13, 17, 1, 18, 10, 17, 11, 7, 5, 4, 7, 16, 8, 7, 4, 16, 7, 6, 5, 8, 16, 9, 16, 17, 9, 9, 17, 10, 4, 3, 16, 17, 3, 2, 17, 16, 3, 2, 1, 17, 17, 18, 11 ], + "vertices": [ 2, 69, 10.11, -20.49, 0.51752, 67, 12.87, 47.65, 0.48248, 2, 69, 30.11, -14.28, 0.4, 67, -5.94, 56.87, 0.6, 2, 69, 53.55, -12.3, 0.61, 67, -24.34, 71.53, 0.39, 2, 69, 79.47, -18.32, 0.76137, 67, -39.04, 93.71, 0.23863, 2, 69, 113.41, -32.36, 0.92, 67, -54.06, 127.22, 0.08, 1, 69, 140.37, -42.13, 1, 1, 69, 160, -26.2, 1, 1, 69, 137.41, 1.64, 1, 2, 69, 106.21, 33.93, 0.98205, 67, -94.36, 74.1, 0.01795, 2, 69, 76.55, 35.92, 0.74286, 67, -74.17, 52.28, 0.25714, 2, 69, 47.62, 36.99, 0.61, 67, -53.88, 31.63, 0.39, 2, 69, 24.14, 31.97, 0.54, 67, -33.37, 19.16, 0.46, 2, 69, 1.85, 22.4, 0.50655, 67, -10.59, 10.8, 0.49345, 2, 69, -16.39, 9.69, 0.46244, 67, 11.39, 7.52, 0.53756, 2, 69, -24.82, -4.75, 0.46, 67, 27.44, 12.22, 0.54, 2, 69, -9.62, -23.48, 0.48913, 67, 29.26, 36.27, 0.51087, 2, 69, 90.22, -0.08, 0.81, 67, -59.38, 87.83, 0.19, 2, 69, 53.75, 10.91, 0.61, 67, -40.43, 54.8, 0.39, 2, 69, 17.28, 5.86, 0.4, 67, -10.44, 33.42, 0.6 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 139, + "height": 130 + } + }, + "hair-strand-front-4": { + "hair-strand-front-4": { + "name": "girl/hair-strand-front-2", + "type": "mesh", + "uvs": [ 0.77614, 0, 0.63901, 0.21786, 0.44871, 0.36957, 0.21083, 0.45904, 0, 0.5524, 0, 0.8247, 0.31438, 1, 0.60822, 0.99586, 0.75655, 0.80525, 0.88248, 0.59908, 0.96084, 0.37346, 1, 0.13228, 1, 0, 0.47949, 0.68466, 0.76494, 0.43181 ], + "triangles": [ 9, 14, 10, 14, 1, 10, 0, 12, 11, 11, 1, 0, 10, 1, 11, 8, 13, 14, 2, 1, 14, 13, 2, 14, 3, 2, 13, 5, 4, 3, 5, 3, 13, 7, 13, 8, 6, 5, 13, 6, 13, 7, 9, 8, 14 ], + "vertices": [ 2, 75, -8.6, -29.1, 0.20005, 67, 27.34, 23.62, 0.79995, 2, 75, 16.25, -14.26, 0.5448, 67, 7.05, 44.27, 0.4552, 2, 75, 46.09, -8, 0.62198, 67, -6.08, 71.79, 0.37802, 2, 75, 80.31, -9.69, 0.78836, 67, -12.51, 105.43, 0.21164, 2, 75, 111.06, -9.86, 0.97352, 67, -19.61, 135.36, 0.02648, 2, 75, 119.47, 16.04, 0.98274, 67, -46.76, 137.41, 0.01726, 2, 75, 83.31, 46.2, 0.80419, 67, -67.54, 95.16, 0.19581, 2, 75, 44.33, 58.42, 0.71, 67, -70.2, 54.4, 0.29, 2, 75, 18.84, 46.65, 0.69, 67, -52.75, 32.41, 0.31, 2, 75, -4.17, 32.44, 0.55, 67, -33.51, 13.4, 0.45, 2, 75, -21.5, 14.34, 0.00249, 67, -11.84, 0.83, 0.99751, 1, 67, 11.8, -6.41, 1, 1, 67, 24.99, -7.41, 1, 2, 75, 51.75, 23.29, 0.58329, 67, -37.82, 69.9, 0.41671, 2, 75, 6.2, 11.49, 0.58111, 67, -15.6, 28.43, 0.41889 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 139, + "height": 100 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "scarf": { + "scarf": { + "name": "girl/scarf", + "type": "mesh", + "uvs": [ 0, 0.69166, 0.08052, 0.80607, 0.18349, 0.90523, 0.29463, 0.96243, 0.44173, 1, 0.5921, 0.99676, 0.69655, 0.96098, 0.81649, 0.89046, 0.92984, 0.74335, 0.98437, 0.67259, 1, 0.62301, 1, 0.43614, 0.987, 0.34894, 0.95168, 0.11197, 0.8389, 0.11579, 0.75309, 0.14439, 0.66045, 0.15555, 0.57902, 0.16537, 0.46625, 0.11579, 0.37308, 0.07002, 0.28482, 0.02426, 0.20473, 0, 0.09849, 0.02044, 0.056, 0.3408, 0, 0.51623, 0.2505, 0.51241, 0.45971, 0.56199, 0.6444, 0.52385, 0.85198, 0.46283, 0.15733, 0.43995, 0.3453, 0.53148, 0.54797, 0.54292, 0.74737, 0.5086, 0.26684, 0.42851, 0.3506, 0.44336, 0.46122, 0.45875, 0.16878, 0.36367, 0.94187, 0.40181 ], + "triangles": [ 32, 15, 28, 28, 15, 37, 27, 31, 17, 31, 35, 17, 27, 16, 32, 32, 16, 15, 37, 15, 14, 18, 35, 34, 34, 33, 19, 12, 14, 13, 12, 37, 14, 23, 22, 36, 33, 36, 20, 27, 17, 16, 17, 35, 18, 18, 34, 19, 19, 33, 20, 36, 21, 20, 36, 22, 21, 28, 37, 11, 30, 25, 34, 30, 34, 35, 34, 25, 33, 24, 23, 29, 25, 29, 33, 29, 36, 33, 29, 23, 36, 37, 12, 11, 5, 4, 26, 4, 3, 26, 6, 5, 31, 5, 26, 31, 26, 3, 30, 31, 27, 6, 7, 27, 32, 7, 6, 27, 3, 2, 30, 30, 1, 25, 30, 2, 1, 7, 32, 8, 29, 25, 1, 9, 8, 28, 28, 8, 32, 24, 29, 0, 0, 29, 1, 9, 28, 10, 10, 28, 11, 26, 35, 31, 26, 30, 35 ], + "vertices": [ 1, 4, 101.59, 148.9, 1, 1, 4, 88.51, 130.67, 1, 1, 4, 76.57, 106.99, 1, 1, 4, 68.76, 81.06, 1, 1, 4, 62.3, 46.43, 1, 1, 4, 59.93, 10.72, 1, 1, 4, 61.69, -14.34, 1, 1, 4, 66.71, -43.35, 1, 1, 4, 79.64, -71.38, 1, 1, 4, 85.86, -84.86, 1, 1, 4, 90.62, -88.96, 1, 2, 4, 111.53, -90.22, 0.68, 5, 12.11, -93.3, 0.32, 2, 4, 120.59, -87.62, 0.68, 5, 21.19, -90.81, 0.32, 1, 5, 49.45, -81.99, 1, 1, 5, 49.69, -55.15, 1, 1, 5, 47.25, -34.67, 1, 1, 5, 46.62, -12.6, 1, 1, 5, 46.07, 6.8, 1, 1, 5, 51.76, 33.52, 1, 1, 5, 56.94, 55.57, 1, 1, 5, 62.1, 76.47, 1, 1, 5, 65.02, 95.46, 1, 1, 5, 63.52, 120.79, 1, 2, 4, 133.66, 133.75, 0.68, 5, 36.73, 130.17, 0.32, 2, 4, 118.16, 147.77, 0.86, 5, 21.41, 144.43, 0.14, 2, 4, 113.61, 88.46, 0.68, 5, 16.19, 85.15, 0.32, 2, 4, 105.87, 38.97, 0.71, 5, 7.91, 35.81, 0.29, 2, 4, 107.27, -5.15, 0.68, 5, 8.8, -8.29, 0.32, 2, 4, 110.76, -54.86, 0.68, 5, 11.73, -57.98, 0.32, 2, 4, 122.22, 110.21, 0.68, 5, 25.04, 106.78, 0.32, 2, 4, 110.42, 66.02, 0.68, 5, 12.75, 62.78, 0.32, 2, 4, 106.59, 17.89, 0.68, 5, 8.39, 14.74, 0.32, 2, 4, 107.47, -29.73, 0.68, 5, 8.73, -32.84, 0.32, 2, 4, 121.95, 84.1, 0.68, 5, 24.47, 80.7, 0.32, 2, 4, 119.33, 64.26, 0.68, 5, 21.64, 60.92, 0.32, 2, 4, 116.31, 38.04, 0.68, 5, 18.32, 34.76, 0.32, 2, 4, 129.85, 107.06, 0.68, 5, 32.62, 103.55, 0.32, 2, 4, 115.79, -76.59, 0.68, 5, 16.52, -79.73, 0.32 ], + "hull": 25, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 18, 20, 20, 22, 26, 28, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 2, 58, 6, 60, 14, 64, 10, 12, 12, 14, 14, 16, 16, 18, 16, 56, 28, 30, 64, 30, 30, 32, 32, 34, 54, 32, 50, 66, 38, 68, 68, 60, 36, 70, 70, 52, 66, 40, 22, 24, 24, 26, 74, 24, 62, 34 ], + "width": 238, + "height": 102 + } + }, + "scarf-back": { + "scarf-back": { "name": "girl/scarf-back", "x": 46.88, "y": 3.26, "rotation": 177.98, "width": 143, "height": 102 } + } + } + }, + { + "name": "hair/pink", + "attachments": { + "ear": { + "ear": { + "name": "girl/ear", + "path": "girl-blue-cape/ear", + "x": 56.58, + "y": 85.63, + "rotation": -87.57, + "width": 38, + "height": 45 + } + }, + "eye-back-eyebrow": { + "eye-back-eyebrow": { + "name": "girl/back-eyebrow", + "path": "girl-blue-cape/back-eyebrow", + "x": 15.6, + "y": -9.48, + "rotation": -177.9, + "width": 36, + "height": 23 + } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { + "name": "girl/front-eyebrow", + "path": "girl-blue-cape/front-eyebrow", + "x": 10.82, + "y": 8.92, + "rotation": -3.58, + "width": 36, + "height": 23 + } + }, + "hair-back": { + "hair-back": { "name": "girl-blue-cape/hair-back", "x": 77.53, "y": 2.96, "rotation": -87.57, "width": 234, "height": 196 } + }, + "hair-bangs": { + "hair-bangs": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-blue-cape/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "girl/hair-bangs", + "type": "mesh", + "path": "girl-blue-cape/hair-bangs", + "uvs": [ 0.73349, 0.08474, 0.58004, 0.03958, 0.45228, 0.00198, 0.31207, 0.07138, 0.18831, 0.31778, 0.11637, 0.47582, 0.03781, 0.68912, 0, 0.88662, 0, 1, 0.07971, 1, 0.13907, 0.91229, 0.18097, 0.79182, 0.18795, 0.89847, 0.26215, 0.88267, 0.3154, 0.69504, 0.34246, 0.48174, 0.3896, 0.67924, 0.45014, 0.83132, 0.53481, 0.95574, 0.60639, 0.96364, 0.63433, 0.87279, 0.60552, 0.79379, 0.68321, 0.86884, 0.72511, 0.81947, 0.71289, 0.76219, 0.78519, 0.80239, 0.85153, 0.71154, 0.8428, 0.66414, 0.90653, 0.66414, 1, 0.62679, 0.9912, 0.45677, 0.95279, 0.41727, 0.99033, 0.37382, 0.99906, 0.25334, 0.94319, 0.15657, 0.85677, 0.12102, 0.22173, 0.58035, 0.25665, 0.3947, 0.32823, 0.30779, 0.52365, 0.61985, 0.48544, 0.47172, 0.66002, 0.67317, 0.68796, 0.4184, 0.76565, 0.53492, 0.85069, 0.36741, 0.88473, 0.51553, 0.76941, 0.67946, 0.66833, 0.75906, 0.55572, 0.84004, 0.51557, 0.74524 ], + "triangles": [ 29, 28, 45, 46, 27, 26, 25, 46, 26, 21, 47, 22, 19, 18, 48, 20, 19, 48, 18, 17, 48, 48, 21, 20, 23, 22, 47, 23, 47, 24, 24, 46, 25, 24, 47, 41, 28, 27, 45, 45, 30, 29, 9, 8, 7, 10, 9, 7, 49, 16, 39, 21, 49, 39, 41, 21, 39, 39, 40, 42, 39, 15, 40, 17, 16, 49, 36, 37, 15, 14, 36, 15, 11, 36, 14, 11, 6, 36, 12, 11, 13, 13, 11, 14, 39, 42, 43, 41, 39, 43, 31, 44, 32, 45, 43, 44, 27, 43, 45, 27, 46, 43, 38, 3, 2, 4, 3, 38, 44, 0, 35, 44, 35, 34, 44, 34, 33, 32, 44, 33, 37, 4, 38, 42, 1, 0, 42, 0, 44, 1, 38, 2, 42, 38, 1, 42, 40, 38, 15, 37, 38, 5, 4, 37, 43, 42, 44, 36, 5, 37, 6, 5, 36, 7, 6, 11, 46, 24, 41, 47, 21, 41, 48, 49, 21, 46, 41, 43, 45, 44, 31, 45, 31, 30, 10, 7, 11, 40, 15, 38, 17, 49, 48, 39, 16, 15 ], + "vertices": [ 3, 49, 57.66, 21.48, 0.14316, 6, 146.15, -68.59, 0.78272, 29, 24.04, 70.86, 0.07412, 2, 49, 30.48, 14.92, 0.0173, 6, 148.65, -40.74, 0.9827, 1, 6, 150.72, -17.56, 1, 2, 6, 143.94, 7.71, 0.92837, 29, -52.29, 71.88, 0.07163, 3, 48, 28.17, -10.48, 0.05351, 6, 123.29, 29.26, 0.81347, 29, -74.69, 52.17, 0.13302, 3, 48, 45.97, -13.99, 0.12179, 6, 110.11, 41.73, 0.68081, 29, -87.71, 39.53, 0.1974, 3, 48, 68.1, -15.96, 0.21115, 6, 92.46, 55.22, 0.51338, 29, -101.93, 22.46, 0.27547, 3, 48, 84.98, -12.59, 0.31799, 6, 76.38, 61.38, 0.40325, 29, -108.77, 6.66, 0.27876, 3, 48, 92.44, -7.43, 0.32032, 6, 67.32, 61, 0.37603, 29, -108.77, -2.41, 0.30365, 4, 48, 84.22, 4.43, 0.28562, 49, -26.38, -89.52, 0.00233, 6, 67.93, 46.58, 0.34343, 29, -94.34, -2.41, 0.36862, 4, 48, 72.34, 9.27, 0.23652, 49, -18.89, -79.1, 0.01782, 6, 75.4, 36.15, 0.36895, 29, -83.6, 4.61, 0.37671, 4, 48, 60.1, 10.02, 0.1798, 49, -15.28, -67.38, 0.02453, 6, 85.35, 28.98, 0.43217, 29, -76.02, 14.25, 0.3635, 4, 48, 66.39, 15.91, 0.18722, 49, -11.03, -74.88, 0.03338, 6, 76.88, 27.35, 0.37794, 29, -74.75, 5.72, 0.40146, 4, 48, 57.71, 26.23, 0.12619, 49, 1.04, -68.86, 0.05896, 6, 78.71, 13.99, 0.40564, 29, -61.32, 6.98, 0.40921, 4, 48, 39.88, 25.61, 0.05336, 49, 4.63, -51.39, 0.06015, 6, 94.11, 5, 0.50399, 29, -51.68, 21.99, 0.38251, 4, 48, 23.06, 19.92, 0.00689, 49, 3.05, -33.71, 0.03861, 6, 111.37, 0.83, 0.67076, 29, -46.79, 39.05, 0.28375, 4, 48, 31.19, 35.93, 0.00485, 49, 16.7, -45.37, 0.09219, 6, 95.95, -8.37, 0.52133, 29, -38.25, 23.25, 0.38162, 3, 49, 31.3, -52.77, 0.16758, 6, 84.25, -19.83, 0.44588, 29, -27.3, 11.09, 0.38654, 3, 49, 49.19, -56.54, 0.21944, 6, 74.96, -35.57, 0.36056, 29, -11.97, 1.13, 0.42, 3, 49, 61.5, -52.46, 0.25071, 6, 74.88, -48.54, 0.32929, 29, 0.99, 0.5, 0.42, 3, 49, 63.6, -43.86, 0.26298, 6, 82.35, -53.28, 0.32679, 29, 6.04, 7.77, 0.41022, 3, 49, 56.46, -39.84, 0.24278, 6, 88.45, -47.8, 0.37761, 29, 0.83, 14.09, 0.37961, 3, 49, 71.74, -40.38, 0.27033, 6, 83.04, -62.11, 0.31735, 29, 14.89, 8.09, 0.41232, 3, 49, 77.39, -33.96, 0.27837, 6, 87.31, -69.52, 0.32678, 29, 22.47, 12.04, 0.39484, 3, 49, 73.68, -30.48, 0.28766, 6, 91.8, -67.11, 0.33769, 29, 20.26, 16.62, 0.37464, 3, 49, 87.04, -28.77, 0.28231, 6, 89.14, -80.32, 0.33141, 29, 33.35, 13.4, 0.38628, 3, 49, 95.63, -17.67, 0.28956, 6, 96.91, -92.01, 0.33992, 29, 45.36, 20.67, 0.37053, 3, 49, 92.79, -14.7, 0.2969, 6, 100.63, -90.27, 0.34854, 29, 43.78, 24.46, 0.35456, 3, 49, 103.55, -10.54, 0.2932, 6, 101.12, -101.8, 0.34419, 29, 55.31, 24.46, 0.36262, 3, 49, 118.25, -1.66, 0.28203, 6, 104.82, -118.57, 0.33108, 29, 72.23, 27.45, 0.38688, 3, 49, 111.87, 10.45, 0.30222, 6, 118.34, -116.41, 0.35704, 29, 70.64, 41.05, 0.34074, 3, 49, 104.24, 10.9, 0.30073, 6, 121.21, -109.33, 0.37095, 29, 63.68, 44.21, 0.32832, 3, 49, 109.33, 16.59, 0.304, 6, 124.97, -115.97, 0.40596, 29, 70.48, 47.69, 0.29003, 3, 49, 107.33, 26.15, 0.27438, 6, 134.66, -117.14, 0.51257, 29, 72.06, 57.33, 0.21304, 3, 49, 95.11, 29.73, 0.22989, 6, 141.97, -106.71, 0.58568, 29, 61.95, 65.07, 0.18442, 3, 49, 79.49, 26.75, 0.19562, 6, 144.15, -90.96, 0.63068, 29, 46.3, 67.91, 0.1737, 4, 48, 41.99, 6.45, 0.10254, 49, -14.5, -48.94, 0.01601, 6, 102.56, 22.32, 0.56688, 29, -68.64, 31.17, 0.31457, 3, 48, 26.18, 3.19, 0.03565, 6, 117.67, 16.64, 0.76005, 29, -62.32, 46.02, 0.20431, 2, 6, 125.16, 3.99, 0.84734, 29, -49.36, 52.97, 0.15266, 3, 49, 37.62, -32.2, 0.15696, 6, 101.72, -32.41, 0.48111, 29, -13.99, 28.01, 0.36193, 3, 49, 26.9, -23.64, 0.09937, 6, 113.27, -25, 0.59979, 29, -20.91, 39.86, 0.30085, 3, 49, 62.18, -27.29, 0.27323, 6, 98.51, -57.25, 0.38676, 29, 10.69, 23.74, 0.34001, 3, 49, 59.56, -6.45, 0.22058, 6, 119.08, -61.44, 0.47325, 29, 15.75, 44.12, 0.30616, 3, 49, 76.03, -10.08, 0.30524, 6, 110.37, -75.88, 0.38095, 29, 29.81, 34.8, 0.31381, 3, 49, 85.57, 7.96, 0.27217, 6, 124.41, -90.69, 0.42182, 29, 45.2, 48.2, 0.30602, 3, 49, 95.58, -0.87, 0.2988, 6, 112.83, -97.35, 0.35076, 29, 51.37, 36.35, 0.35044, 3, 49, 80.83, -20.63, 0.30072, 6, 98.84, -77.05, 0.35302, 29, 30.49, 23.24, 0.34625, 3, 49, 66.06, -33.16, 0.2839, 6, 91.7, -59.04, 0.34453, 29, 12.2, 16.87, 0.37158, 3, 49, 49.38, -46.54, 0.22619, 6, 84.37, -38.95, 0.38015, 29, -8.19, 10.39, 0.39367, 3, 49, 39.87, -42.08, 0.18746, 6, 91.64, -31.37, 0.43913, 29, -15.45, 17.97, 0.37341 ], + "hull": 36, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 22, 72, 96, 38, 42, 78, 0, 70, 0, 2, 2, 4, 58, 60 ], + "width": 181, + "height": 80 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch2", + "type": "mesh", + "path": "girl/hair-patch", + "color": "ff6578ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-blue-cape/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "hair-side-back": { + "hair-side-back": { + "name": "girl/hair-head-side-back", + "type": "mesh", + "path": "girl-blue-cape/hair-head-side-back", + "uvs": [ 0.17374, 0.1545, 0.22967, 0.37557, 0.21289, 0.61586, 0, 0.86256, 0, 1, 0.25205, 1, 0.45899, 0.87537, 0.69391, 0.87858, 0.80577, 0.69916, 0.82815, 0.52615, 1, 0.46528, 0.99594, 0.21858, 0.73306, 0.04236, 0.53171, 0, 0.27442, 0.04877, 0.51493, 0.5678, 0.59323, 0.17692, 0.73306, 0.35954, 0.46459, 0.76964 ], + "triangles": [ 17, 11, 10, 15, 1, 16, 16, 14, 13, 14, 16, 1, 1, 0, 14, 16, 12, 17, 17, 12, 11, 16, 13, 12, 15, 16, 17, 2, 1, 15, 5, 18, 6, 5, 4, 3, 6, 18, 7, 7, 18, 8, 5, 3, 2, 18, 5, 2, 18, 15, 8, 18, 2, 15, 8, 15, 9, 9, 17, 10, 15, 17, 9 ], + "vertices": [ 2, 47, 44.16, -9.72, 0.072, 6, 75.71, -87.13, 0.928, 2, 47, 65.84, -17.42, 0.21564, 6, 53.1, -91.39, 0.78436, 2, 47, 87.28, -29.83, 0.5439, 6, 28.33, -91.45, 0.4561, 3, 47, 103.9, -52.79, 0.8752, 6, 2.41, -79.98, 0.09988, 30, 134.21, -69.81, 0.02493, 3, 47, 116.42, -59.39, 0.89423, 6, -11.73, -80.58, 0.014, 30, 134.21, -83.97, 0.09177, 3, 47, 123.36, -46.24, 0.87011, 6, -11.1, -95.43, 0.00989, 30, 149.08, -83.97, 0.12, 3, 47, 117.69, -29.45, 0.77082, 6, 2.24, -107.09, 0.0941, 30, 161.29, -71.13, 0.13508, 3, 47, 124.45, -17.35, 0.86922, 6, 2.5, -120.95, 0.00701, 30, 175.15, -71.46, 0.12377, 3, 47, 111.18, -2.89, 0.73582, 6, 21.24, -126.76, 0.12392, 30, 181.75, -52.98, 0.14026, 3, 47, 96.03, 6.59, 0.55463, 6, 39.1, -127.33, 0.32878, 30, 183.07, -35.16, 0.11659, 3, 47, 95.21, 18.48, 0.54495, 6, 45.79, -137.19, 0.37264, 30, 193.21, -28.89, 0.08241, 2, 47, 72.62, 30.12, 0.39164, 6, 71.17, -135.87, 0.60836, 2, 47, 49.33, 24.86, 0.13442, 6, 88.65, -119.61, 0.86558, 2, 47, 39.93, 16.38, 0.03367, 6, 92.5, -107.55, 0.96633, 2, 47, 37.3, 0.61, 0.176, 6, 86.84, -92.6, 0.824, 3, 47, 91.21, -11.76, 0.52, 6, 34.03, -109.04, 0.39641, 30, 164.59, -39.45, 0.08358, 2, 47, 57.74, 11.1, 0.24029, 6, 74.45, -111.95, 0.75971, 3, 47, 78.23, 9.62, 0.39663, 6, 56.01, -120.99, 0.565, 30, 177.46, -18, 0.03837, 3, 47, 108.21, -24.08, 0.64328, 6, 13.13, -106.96, 0.22492, 30, 161.62, -60.24, 0.1318 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28 ], + "width": 59, + "height": 103 + } + }, + "hair-side-front": { + "hair-side-front": { + "name": "girl/hair-head-side-front", + "type": "mesh", + "path": "girl-blue-cape/hair-head-side-front", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 6, 5.69, 38.25, 1, 1, 6, 2.21, 120.17, 1, 1, 6, 85.14, 123.69, 1, 1, 6, 88.61, 41.77, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 82, + "height": 83 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "girl/hair-side", + "type": "mesh", + "path": "girl-blue-cape/hair-side", + "uvs": [ 0.54874, 0, 0.57663, 0.2101, 0.67888, 0.39601, 0.88339, 0.57495, 1, 0.69115, 1, 0.84221, 0.77989, 0.93436, 0.62311, 1, 0.34423, 0.99094, 0.18156, 0.87474, 0.06536, 0.73763, 0, 0.57728, 0, 0.34256, 0.17691, 0.11249, 0.34888, 0, 0.49296, 0.6958, 0.33029, 0.51453, 0.28846, 0.31003 ], + "triangles": [ 16, 12, 17, 16, 17, 1, 17, 14, 1, 14, 0, 1, 17, 13, 14, 12, 13, 17, 16, 1, 2, 16, 11, 12, 15, 16, 2, 6, 7, 15, 7, 8, 15, 8, 9, 15, 5, 6, 4, 6, 15, 3, 9, 16, 15, 9, 10, 16, 6, 3, 4, 15, 2, 3, 10, 11, 16 ], + "vertices": [ 1, 6, 120.54, 42.6, 1, 1, 6, 90.81, 39.69, 1, 2, 46, 36.72, 17.97, 0.312, 6, 64.74, 31.31, 0.688, 2, 46, 64.11, 28.28, 0.664, 6, 39.97, 15.73, 0.336, 2, 46, 81.71, 33.84, 0.808, 6, 23.83, 6.76, 0.192, 1, 46, 102.89, 30.44, 1, 1, 46, 113.34, 12.94, 1, 1, 46, 120.78, 0.47, 1, 1, 46, 116.37, -18.87, 1, 2, 46, 98.25, -27.66, 0.968, 6, -4.68, 63.71, 0.032, 2, 46, 77.72, -32.73, 0.84, 6, 14.43, 72.78, 0.16, 2, 46, 54.5, -33.7, 0.59346, 6, 36.98, 78.38, 0.40654, 2, 46, 21.59, -28.42, 0.32, 6, 70.28, 79.79, 0.68, 1, 6, 103.45, 68.63, 1, 1, 6, 119.93, 57.11, 1, 2, 46, 76.66, -1.81, 0.824, 6, 21.65, 42.7, 0.176, 2, 46, 49.42, -9.13, 0.57904, 6, 46.88, 55.33, 0.42096, 1, 6, 75.76, 59.53, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 10, 12, 12, 14 ], + "width": 71, + "height": 142 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "hair/short-red", + "attachments": { + "eye-back-eyebrow": { + "eye-back-eyebrow": { "name": "boy/eyebrow-back", "x": 13.08, "y": -0.6, "rotation": -177.9, "width": 40, "height": 22 } + }, + "eye-front-eyebrow": { + "eye-front-eyebrow": { "name": "boy/eyebrow-front", "x": 21.26, "y": 0.14, "rotation": -3.58, "width": 49, "height": 22 } + }, + "hair-back": { + "hair-back": { + "name": "boy/hair-back", + "type": "mesh", + "uvs": [ 0.72377, 0.13142, 0.82972, 0.05228, 0.85484, 0.14394, 0.9241, 0.10728, 0.99848, 0.11545, 0.99884, 0.27436, 0.99943, 0.531, 1, 0.78235, 0.83167, 0.64513, 0.71204, 1, 0, 1, 0, 0, 0.59007, 0, 0.71673, 0.30031, 0.80118, 0.34254, 0.91866, 0.31098, 0.91187, 0.51672 ], + "triangles": [ 0, 1, 2, 13, 12, 0, 13, 0, 2, 5, 15, 2, 3, 5, 2, 5, 3, 4, 14, 13, 2, 15, 14, 2, 16, 14, 15, 15, 5, 6, 16, 15, 6, 8, 14, 16, 8, 16, 6, 7, 8, 6, 13, 10, 11, 13, 11, 12, 8, 9, 10, 13, 8, 10, 8, 13, 14 ], + "vertices": [ 2, 6, 156.98, -52.6, 0.91, 30, 105.42, 83.77, 0.09, 3, 6, 170.88, -77.77, 0.586, 30, 131.16, 96.59, 0.23935, 49, 58.44, 47.85, 0.17464, 3, 6, 156.31, -84.5, 0.61272, 30, 137.27, 81.74, 0.25026, 49, 69.48, 36.2, 0.13702, 3, 6, 162.95, -101.07, 0.57311, 30, 154.1, 87.68, 0.23409, 49, 83.04, 47.8, 0.1928, 3, 6, 162.4, -119.18, 0.5041, 30, 172.17, 86.36, 0.2059, 49, 100.38, 53.08, 0.29, 3, 6, 136.68, -120.36, 0.5041, 30, 172.26, 60.62, 0.2059, 49, 109.74, 29.09, 0.29, 3, 6, 95.15, -122.26, 0.5041, 30, 172.4, 19.04, 0.2059, 49, 124.85, -9.64, 0.29, 3, 6, 54.47, -124.13, 0.5041, 30, 172.54, -21.68, 0.2059, 49, 139.65, -47.58, 0.29, 2, 6, 74.95, -82.32, 0.91, 30, 131.64, 0.55, 0.09, 2, 6, 16.28, -55.71, 0.91, 30, 102.57, -56.94, 0.09, 2, 6, 8.94, 117.16, 0.91, 30, -70.46, -56.94, 0.09, 2, 6, 170.8, 124.02, 0.91, 30, -70.46, 105.06, 0.09, 2, 6, 176.88, -19.23, 0.91, 30, 72.93, 105.06, 0.09, 2, 6, 129.57, -52.05, 0.91, 30, 103.71, 56.41, 0.09, 2, 6, 123.61, -72.84, 0.71, 30, 124.23, 49.57, 0.29, 3, 6, 129.93, -101.15, 0.58764, 30, 152.78, 54.68, 0.24002, 49, 93.7, 16.54, 0.17234, 3, 6, 96.56, -100.91, 0.61135, 30, 151.13, 21.35, 0.24971, 49, 104.17, -15.15, 0.13894 ], + "hull": 13, + "edges": [ 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 0, 2, 8, 10, 30, 10, 10, 12, 12, 14, 32, 12, 8, 6, 6, 4, 4, 2 ], + "width": 243, + "height": 162 + } + }, + "hair-bangs": { + "hair-bangs": { + "name": "boy/hair-bangs", + "type": "mesh", + "uvs": [ 0.21816, 0.2794, 0.12151, 0.44214, 0.03901, 0.65009, 0, 0.84447, 0, 1, 0.11916, 0.99365, 0.21344, 0.83543, 0.29594, 0.65009, 0.36194, 0.39242, 0.4303, 0.5416, 0.53166, 0.65913, 0.67308, 0.74954, 0.7603, 0.61393, 0.69901, 0.51447, 0.81923, 0.55516, 0.93473, 0.51447, 1, 0.41954, 1, 0.27036, 0.9253, 0.16187, 0.8098, 0.06694, 0.68016, 0.00817, 0.38787, 0.00365, 0.57307, 0.38232 ], + "triangles": [ 4, 3, 5, 5, 3, 6, 3, 2, 6, 6, 2, 7, 11, 10, 12, 10, 13, 12, 10, 9, 13, 2, 1, 7, 7, 1, 8, 14, 13, 15, 9, 22, 13, 9, 8, 22, 15, 13, 16, 16, 13, 17, 1, 0, 8, 18, 17, 13, 13, 22, 18, 22, 8, 21, 8, 0, 21, 22, 19, 18, 22, 20, 19, 22, 21, 20 ], + "vertices": [ 3, 6, 125.65, 24.16, 0.819, 29, -61.51, 56.32, 0.09, 48, 23.45, -7.43, 0.091, 3, 6, 113.21, 37.17, 0.64201, 29, -75.04, 44.44, 0.09, 48, 40.92, -11.79, 0.26799, 3, 6, 97.55, 48.07, 0.54508, 29, -86.59, 29.26, 0.06169, 48, 59.97, -12.64, 0.39323, 3, 6, 83.15, 52.92, 0.4171, 29, -92.05, 15.07, 0.07361, 48, 74.75, -9.05, 0.5093, 3, 6, 71.8, 52.44, 0.37688, 29, -92.05, 3.72, 0.06651, 48, 84.08, -2.59, 0.55661, 3, 6, 72.97, 35.8, 0.39111, 29, -75.37, 4.18, 0.06902, 48, 74.2, 10.86, 0.53987, 3, 6, 85.07, 23.1, 0.53235, 29, -62.17, 15.73, 0.09394, 48, 57.19, 15.14, 0.37371, 3, 6, 99.08, 12.13, 0.64178, 29, -50.62, 29.26, 0.12, 48, 39.49, 16.93, 0.23822, 2, 6, 118.26, 3.7, 0.86, 29, -41.38, 48.07, 0.14, 3, 6, 107.79, -6.33, 0.89872, 29, -31.81, 37.18, 0.05965, 49, 10.97, -34.81, 0.04163, 3, 6, 99.82, -20.87, 0.76196, 29, -17.62, 28.6, 0.10658, 49, 27.3, -37.7, 0.13146, 3, 6, 94.06, -40.93, 0.59399, 29, 2.18, 22, 0.10482, 49, 48.15, -36.72, 0.30119, 3, 6, 104.47, -52.71, 0.60482, 29, 14.39, 31.9, 0.10673, 49, 55.97, -23.09, 0.28845, 3, 6, 111.36, -43.83, 0.69544, 29, 5.81, 39.16, 0.08561, 49, 45.35, -19.41, 0.21895, 3, 6, 109.11, -60.77, 0.59573, 29, 22.64, 36.19, 0.09904, 49, 62.12, -16.12, 0.30524, 3, 6, 112.76, -76.8, 0.52077, 29, 38.81, 39.16, 0.0919, 49, 76.14, -7.52, 0.38732, 3, 6, 120.07, -85.63, 0.5084, 29, 47.95, 46.09, 0.08972, 49, 82.16, 2.24, 0.40188, 3, 6, 130.95, -85.17, 0.57569, 29, 47.95, 56.98, 0.08663, 49, 78.24, 12.4, 0.33769, 3, 6, 138.42, -74.39, 0.71063, 29, 37.49, 64.9, 0.04692, 49, 65.63, 16.02, 0.24246, 2, 6, 144.66, -57.94, 0.86805, 49, 48.05, 16.66, 0.13195, 2, 6, 148.18, -39.62, 0.96256, 49, 29.57, 14.12, 0.03744, 2, 6, 146.77, 1.27, 0.86, 29, -37.75, 76.45, 0.14, 3, 6, 120.25, -25.8, 0.89676, 29, -11.82, 48.81, 0.02582, 49, 25.43, -16.76, 0.07742 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42 ], + "width": 140, + "height": 73 + } + }, + "hair-bangs-transparent": { + "hair-bangs-transparent": { + "name": "boy/hair-bangs", + "type": "mesh", + "uvs": [ 0.21816, 0.2794, 0.12151, 0.44214, 0.03901, 0.65009, 0, 0.84447, 0, 1, 0.11916, 0.99365, 0.21344, 0.83543, 0.29594, 0.65009, 0.36194, 0.39242, 0.4303, 0.5416, 0.53166, 0.65913, 0.67308, 0.74954, 0.7603, 0.61393, 0.69901, 0.51447, 0.81923, 0.55516, 0.93473, 0.51447, 1, 0.41954, 1, 0.27036, 0.9253, 0.16187, 0.8098, 0.06694, 0.68016, 0.00817, 0.38787, 0.00365, 0.57307, 0.38232 ], + "triangles": [ 4, 3, 5, 5, 3, 6, 3, 2, 6, 6, 2, 7, 11, 10, 12, 10, 13, 12, 10, 9, 13, 2, 1, 7, 7, 1, 8, 14, 13, 15, 9, 22, 13, 9, 8, 22, 15, 13, 16, 16, 13, 17, 1, 0, 8, 18, 17, 13, 13, 22, 18, 22, 8, 21, 8, 0, 21, 22, 19, 18, 22, 20, 19, 22, 21, 20 ], + "vertices": [ 3, 6, 125.65, 24.16, 0.819, 29, -61.51, 56.32, 0.09, 48, 23.45, -7.43, 0.091, 3, 6, 113.21, 37.17, 0.64201, 29, -75.04, 44.44, 0.09, 48, 40.92, -11.79, 0.26799, 3, 6, 97.55, 48.07, 0.54508, 29, -86.59, 29.26, 0.06169, 48, 59.97, -12.64, 0.39323, 3, 6, 83.15, 52.92, 0.4171, 29, -92.05, 15.07, 0.07361, 48, 74.75, -9.05, 0.5093, 3, 6, 71.8, 52.44, 0.37688, 29, -92.05, 3.72, 0.06651, 48, 84.08, -2.59, 0.55661, 3, 6, 72.97, 35.8, 0.39111, 29, -75.37, 4.18, 0.06902, 48, 74.2, 10.86, 0.53987, 3, 6, 85.07, 23.1, 0.53235, 29, -62.17, 15.73, 0.09394, 48, 57.19, 15.14, 0.37371, 3, 6, 99.08, 12.13, 0.64178, 29, -50.62, 29.26, 0.12, 48, 39.49, 16.93, 0.23822, 2, 6, 118.26, 3.7, 0.86, 29, -41.38, 48.07, 0.14, 3, 6, 107.79, -6.33, 0.89872, 29, -31.81, 37.18, 0.05965, 49, 10.97, -34.81, 0.04163, 3, 6, 99.82, -20.87, 0.76196, 29, -17.62, 28.6, 0.10658, 49, 27.3, -37.7, 0.13146, 3, 6, 94.06, -40.93, 0.59399, 29, 2.18, 22, 0.10482, 49, 48.15, -36.72, 0.30119, 3, 6, 104.47, -52.71, 0.60482, 29, 14.39, 31.9, 0.10673, 49, 55.97, -23.09, 0.28845, 3, 6, 111.36, -43.83, 0.69544, 29, 5.81, 39.16, 0.08561, 49, 45.35, -19.41, 0.21895, 3, 6, 109.11, -60.77, 0.59573, 29, 22.64, 36.19, 0.09904, 49, 62.12, -16.12, 0.30524, 3, 6, 112.76, -76.8, 0.52077, 29, 38.81, 39.16, 0.0919, 49, 76.14, -7.52, 0.38732, 3, 6, 120.07, -85.63, 0.5084, 29, 47.95, 46.09, 0.08972, 49, 82.16, 2.24, 0.40188, 3, 6, 130.95, -85.17, 0.57569, 29, 47.95, 56.98, 0.08663, 49, 78.24, 12.4, 0.33769, 3, 6, 138.42, -74.39, 0.71063, 29, 37.49, 64.9, 0.04692, 49, 65.63, 16.02, 0.24246, 2, 6, 144.66, -57.94, 0.86805, 49, 48.05, 16.66, 0.13195, 2, 6, 148.18, -39.62, 0.96256, 49, 29.57, 14.12, 0.03744, 2, 6, 146.77, 1.27, 0.86, 29, -37.75, 76.45, 0.14, 3, 6, 120.25, -25.8, 0.89676, 29, -11.82, 48.81, 0.02582, 49, 25.43, -16.76, 0.07742 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42 ], + "width": 140, + "height": 73 + } + }, + "hair-patch": { + "hair-patch": { + "name": "girl/hair-patch", + "type": "mesh", + "color": "ff4b45ff", + "uvs": [ 1, 0.5146, 0.52267, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 3, 4, 0, 1, 2, 3, 0, 1, 3 ], + "vertices": [ 2, 29, -6.92, 43.07, 0.62, 30, 82, 42.47, 0.38, 2, 29, -69.92, 3.27, 0.45, 30, 18.99, 2.67, 0.55, 2, 29, -138.92, 3.27, 0.6, 30, -50, 2.67, 0.4, 2, 29, -138.92, 85.27, 0.55, 30, -50, 84.67, 0.45, 2, 29, -6.92, 85.27, 0.5, 30, 82, 84.67, 0.5 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 0, 2 ], + "width": 132, + "height": 82 + } + }, + "hair-side": { + "hair-side": { + "name": "boy/hair-side", + "type": "mesh", + "uvs": [ 0.76395, 0.00237, 0.91575, 0.43213, 1, 0.68539, 0.95348, 0.8591, 0.91575, 1, 0.36135, 1, 0.33144, 0.88524, 0.29536, 0.74678, 0, 0.73911, 0, 0.49737, 0.59236, 0, 0.42735, 0.46668 ], + "triangles": [ 3, 4, 6, 4, 5, 6, 6, 7, 3, 2, 11, 1, 1, 11, 10, 11, 7, 9, 3, 7, 2, 1, 10, 0, 11, 9, 10, 7, 8, 9, 2, 7, 11 ], + "vertices": [ 1, 6, 119.95, 47.18, 1, 2, 6, 83.34, 38.03, 0.81, 29, -77.16, 14.64, 0.19, 3, 6, 61.76, 32.9, 0.61654, 46, 39.22, 17.05, 0.21346, 29, -72.95, -7.14, 0.17, 3, 6, 46.73, 34.59, 0.41184, 46, 53.6, 12.39, 0.41816, 29, -75.27, -22.08, 0.17, 3, 6, 34.55, 35.96, 0.24581, 46, 65.26, 8.61, 0.58419, 29, -77.16, -34.2, 0.17, 3, 6, 33.37, 63.65, 0.2605, 46, 60.87, -18.76, 0.6395, 29, -104.88, -34.2, 0.1, 3, 6, 43.17, 65.57, 0.35187, 46, 50.89, -18.68, 0.54813, 29, -106.38, -24.33, 0.1, 3, 6, 54.99, 67.87, 0.46211, 46, 38.85, -18.57, 0.43789, 29, -108.18, -12.42, 0.1, 2, 6, 55.02, 82.66, 0.55402, 46, 35.86, -33.05, 0.44598, 1, 6, 75.79, 83.54, 1, 1, 6, 119.79, 55.76, 1, 3, 6, 79.34, 62.3, 0.7717, 46, 16.11, -8.24, 0.0883, 29, -101.58, 11.67, 0.14 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 8, 10, 14, 16, 16, 18, 18, 20, 0, 20, 4, 6, 6, 8, 10, 12, 12, 14, 4, 14 ], + "width": 50, + "height": 86 + } + }, + "hair-side-transparent": { + "hair-side": { + "name": "boy/hair-side", + "type": "mesh", + "uvs": [ 0.76395, 0.00237, 0.91575, 0.43213, 1, 0.68539, 0.95348, 0.8591, 0.91575, 1, 0.36135, 1, 0.33144, 0.88524, 0.29536, 0.74678, 0, 0.73911, 0, 0.49737, 0.59236, 0, 0.42735, 0.46668 ], + "triangles": [ 3, 4, 6, 4, 5, 6, 6, 7, 3, 3, 7, 2, 2, 11, 1, 2, 7, 11, 11, 7, 9, 1, 10, 0, 1, 11, 10, 7, 8, 9, 11, 9, 10 ], + "vertices": [ 1, 6, 119.95, 47.18, 1, 2, 6, 83.34, 38.03, 0.86, 29, -77.16, 14.64, 0.14, 3, 6, 61.76, 32.9, 0.61654, 46, 39.22, 17.05, 0.21346, 29, -72.95, -7.14, 0.17, 3, 6, 46.73, 34.59, 0.41184, 46, 53.6, 12.39, 0.41816, 29, -75.27, -22.08, 0.17, 3, 6, 34.55, 35.96, 0.24581, 46, 65.26, 8.61, 0.58419, 29, -77.16, -34.2, 0.17, 3, 6, 33.37, 63.65, 0.2605, 46, 60.87, -18.76, 0.6395, 29, -104.88, -34.2, 0.1, 3, 6, 43.17, 65.57, 0.35187, 46, 50.89, -18.68, 0.54813, 29, -106.38, -24.33, 0.1, 3, 6, 54.99, 67.87, 0.46211, 46, 38.85, -18.57, 0.43789, 29, -108.18, -12.42, 0.1, 2, 6, 55.02, 82.66, 0.55402, 46, 35.86, -33.05, 0.44598, 2, 6, 75.79, 83.54, 0.96, 29, -122.95, 9.03, 0.04, 1, 6, 119.79, 55.76, 1, 2, 6, 79.34, 62.3, 0.76, 29, -101.58, 11.67, 0.24 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 8, 10, 14, 16, 16, 18, 18, 20, 0, 20, 4, 6, 6, 8, 10, 12, 12, 14, 4, 14 ], + "width": 50, + "height": 86 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "legs/boots-pink", + "attachments": { + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-blue-cape/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-blue-cape/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-blue-cape/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "legs/boots-red", + "attachments": { + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-spring-dress/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "path": "girl-spring-dress/leg-front", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "path": "girl-spring-dress/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "legs/pants-green", + "attachments": { + "boot-ribbon-back": { + "boot-ribbon-back": { + "name": "boy/boot-ribbon-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 95, 28.05, 31.91, 0.76, 103, 36.32, 40.94, 0.24, 2, 95, 28.6, 14.92, 0.76, 103, 19.33, 41.13, 0.24, 2, 95, 6.7, 14.22, 0.76, 103, 19.57, 62.88, 0.24, 2, 95, 6.15, 31.21, 0.76, 103, 36.57, 62.69, 0.24 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 17, + "height": 22 + } + }, + "boot-ribbon-front": { + "boot-ribbon-front": { + "name": "boy/boot-ribbon-front", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 102, 37.35, 36.26, 0.24, 27, 30.73, 31.09, 0.76, 2, 102, 20.65, 39.43, 0.24, 27, 29.77, 14.12, 0.76, 2, 102, 24.74, 60.87, 0.24, 27, 7.8, 15.36, 0.76, 2, 102, 41.44, 57.7, 0.24, 27, 8.76, 32.34, 0.76 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 17, + "height": 22 + } + }, + "leg-back": { + "leg-back": { + "name": "boy/leg-front", + "type": "mesh", + "uvs": [ 0.07635, 0.9541, 0.06673, 0.89806, 0.05329, 0.83742, 0.06846, 0.78076, 0.1147, 0.71609, 0.09104, 0.65737, 0.07898, 0.59167, 0.08077, 0.52912, 0.07229, 0.46755, 0.06309, 0.4008, 0.05461, 0.3393, 0.04512, 0.27044, 0.0355, 0.20062, 0.02026, 0.09003, 0.0082, 0.0025, 0.86785, 0, 0.85558, 0.08164, 0.83969, 0.18726, 0.82872, 0.26024, 0.81835, 0.32916, 0.80924, 0.38977, 0.79934, 0.45558, 0.79031, 0.51561, 0.77996, 0.58393, 0.76519, 0.64798, 0.75106, 0.708, 0.81982, 0.77305, 0.82792, 0.82913, 0.81561, 0.88039, 0.82497, 0.91422, 1, 0.93396, 0.9918, 1, 0.08936, 1, 0.44189, 0.0854, 0.44189, 0.52429, 0.44189, 0.46108, 0.44189, 0.39534, 0.44189, 0.33482, 0.44189, 0.26387, 0.44189, 0.19291, 0.44582, 0.95343, 0.44247, 0.58821, 0.44304, 0.64978, 0.44358, 0.70926, 0.44851, 0.77908, 0.44475, 0.83655, 0.44521, 0.88665 ], + "triangles": [ 39, 11, 12, 18, 39, 17, 39, 12, 33, 39, 33, 17, 33, 12, 13, 17, 33, 16, 13, 14, 33, 16, 33, 15, 15, 33, 14, 38, 10, 11, 19, 38, 18, 38, 11, 39, 38, 39, 18, 36, 8, 9, 21, 36, 20, 36, 9, 37, 36, 37, 20, 37, 9, 10, 20, 37, 19, 37, 10, 38, 37, 38, 19, 7, 34, 41, 23, 34, 22, 34, 7, 35, 34, 35, 22, 35, 7, 8, 22, 35, 21, 35, 8, 36, 35, 36, 21, 42, 5, 41, 5, 6, 41, 42, 41, 24, 24, 41, 23, 6, 7, 41, 41, 34, 23, 2, 3, 45, 28, 45, 27, 44, 4, 43, 44, 43, 25, 43, 4, 42, 4, 5, 42, 43, 42, 25, 25, 42, 24, 1, 2, 45, 45, 26, 27, 45, 44, 26, 45, 3, 44, 44, 25, 26, 44, 3, 4, 40, 46, 28, 40, 28, 29, 0, 1, 46, 40, 0, 46, 32, 0, 40, 40, 29, 30, 32, 40, 31, 31, 40, 30, 1, 45, 46, 46, 45, 28 ], + "vertices": [ 3, 103, -20.08, 10.6, 0.75, 94, 23.49, -22.3, 0.24676, 95, 59.84, -22.28, 0.00324, 2, 103, -20.97, 28.44, 0.51, 94, 5.72, -22.89, 0.49, 2, 103, -22.07, 47.56, 0.31, 96, 58.17, -23.66, 0.69, 3, 103, -21.4, 65.39, 0.1116, 95, 4.59, -22.78, 0.8184, 96, 40.52, -22.77, 0.07, 4, 103, -18.75, 86.02, 0.01, 95, -16.13, -19.93, 0.10405, 96, 20.1, -19.96, 0.87254, 97, 56.45, -19.89, 0.01341, 3, 95, -35.05, -21.34, 1.0E-4, 96, 1.46, -21.4, 0.56453, 97, 37.51, -21.4, 0.43537, 3, 96, -19.07, -22.08, 0.03286, 97, 16.65, -22.14, 0.91428, 98, 52.69, -22.08, 0.05286, 3, 97, -3.17, -22.02, 0.36522, 98, 32.86, -22.03, 0.63379, 99, 68.32, -21.96, 9.9E-4, 3, 97, -22.68, -22.46, 0.00771, 98, 13.36, -22.55, 0.84445, 99, 49.14, -22.52, 0.14784, 3, 98, -7.93, -23.09, 0.1958, 99, 28.2, -23.11, 0.80288, 100, 64.58, -23.1, 0.00132, 3, 98, -27.79, -23.57, 4.7E-4, 99, 8.67, -23.62, 0.7924, 100, 44.76, -23.62, 0.20713, 3, 99, -12.93, -24.2, 0.11943, 100, 22.84, -24.2, 0.86721, 101, 58.46, -24.21, 0.01336, 2, 100, 0.77, -24.79, 0.53411, 101, 36.71, -24.79, 0.46589, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.4095, 101, 32.87, 24.27, 0.5905, 3, 99, -15.75, 23.6, 0.08894, 100, 19.96, 23.6, 0.87813, 101, 55.62, 23.59, 0.03292, 3, 98, -30.64, 23.03, 8.5E-4, 99, 5.77, 22.96, 0.71828, 100, 41.79, 22.97, 0.28088, 3, 98, -11.12, 22.43, 0.16727, 99, 24.96, 22.4, 0.82705, 100, 61.27, 22.42, 0.00568, 3, 97, -26.03, 21.9, 0.00115, 98, 9.83, 21.8, 0.86047, 99, 45.58, 21.82, 0.13838, 2, 97, -7.13, 21.27, 0.21266, 98, 28.73, 21.24, 0.78734, 3, 96, -21.14, 20.69, 0.01057, 97, 14.4, 20.61, 0.90163, 98, 50.27, 20.67, 0.0878, 2, 96, -1.28, 19.72, 0.4417, 97, 34.58, 19.72, 0.5583, 4, 103, 20.06, 88.71, 0.01, 95, -18.54, 18.89, 0.02159, 96, 17.65, 18.86, 0.95034, 97, 53.83, 18.92, 0.01808, 3, 103, 24.4, 68.19, 0.1116, 95, 2.32, 23.05, 0.8184, 96, 38.19, 23.06, 0.07, 2, 103, 25.14, 50.7, 0.31, 96, 55.61, 23.58, 0.69, 2, 103, 24.62, 34.65, 0.51, 94, 0.26, 22.8, 0.49, 3, 103, 25.37, 23.95, 0.52462, 94, 10.94, 23.37, 0.22, 95, 47.04, 23.38, 0.25538, 1, 103, 36.15, 17.9, 1, 1, 103, 36, -3.06, 1, 1, 103, -19.04, -3.97, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 103, 2.45, 11.15, 0.83, 94, 23.32, 0.24, 0.17, 2, 97, 15.67, 0.04, 0.99997, 98, 51.62, 0.1, 3.0E-5, 2, 96, -0.81, 0.07, 0.37159, 97, 35.13, 0.07, 0.62841, 2, 103, 1.32, 88.25, 0.01, 96, 18, 0.1, 0.99, 3, 103, 1.78, 66.12, 0.1116, 95, 4.15, 0.4, 0.8184, 96, 40.04, 0.41, 0.07, 2, 103, 1.81, 48.1, 0.31, 96, 57.92, 0.22, 0.69, 3, 103, 2.06, 32.36, 0.38323, 94, 2.19, 0.2, 0.57, 95, 38.18, 0.2, 0.04677 ], + "hull": 33, + "edges": [ 28, 30, 58, 60, 60, 62, 62, 64, 42, 44, 26, 28, 66, 26, 30, 32, 66, 32, 70, 68, 42, 70, 14, 16, 70, 16, 40, 42, 72, 70, 40, 72, 16, 18, 72, 18, 38, 40, 74, 72, 38, 74, 18, 20, 74, 20, 36, 38, 76, 74, 36, 76, 20, 22, 76, 22, 32, 34, 34, 36, 66, 78, 78, 76, 34, 78, 22, 24, 24, 26, 78, 24, 68, 82, 46, 82, 82, 12, 46, 48, 84, 82, 48, 84, 12, 10, 84, 10, 48, 50, 86, 84, 50, 86, 10, 8, 86, 8, 50, 52, 88, 86, 52, 88, 8, 6, 88, 6, 52, 54, 90, 88, 54, 90, 6, 4, 90, 4, 54, 56, 56, 58, 80, 92, 92, 90, 56, 92, 4, 2, 92, 2, 58, 80, 2, 0, 0, 64, 80, 0, 12, 14, 44, 46, 60, 80 ], + "width": 61, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "boy/leg-front", + "type": "mesh", + "uvs": [ 0.07635, 0.9541, 0.06673, 0.89806, 0.05329, 0.83742, 0.06846, 0.78076, 0.1147, 0.71609, 0.09104, 0.65737, 0.07898, 0.59167, 0.08077, 0.52912, 0.07229, 0.46755, 0.06309, 0.4008, 0.05461, 0.3393, 0.04512, 0.27044, 0.0355, 0.20062, 0.02026, 0.09003, 0.0082, 0.0025, 0.86785, 0, 0.85558, 0.08164, 0.83969, 0.18726, 0.82872, 0.26024, 0.81835, 0.32916, 0.80924, 0.38977, 0.79934, 0.45558, 0.79031, 0.51561, 0.77996, 0.58393, 0.76519, 0.64798, 0.75106, 0.708, 0.81982, 0.77305, 0.82792, 0.82913, 0.81561, 0.88039, 0.82497, 0.91422, 1, 0.93396, 0.9918, 1, 0.08936, 1, 0.44189, 0.0854, 0.44189, 0.52429, 0.44189, 0.46108, 0.44189, 0.39534, 0.44189, 0.33482, 0.44189, 0.26387, 0.44189, 0.19291, 0.44582, 0.95343, 0.44247, 0.58821, 0.44304, 0.64978, 0.44358, 0.70926, 0.44851, 0.77908, 0.44475, 0.83655, 0.44521, 0.88665 ], + "triangles": [ 38, 10, 11, 19, 38, 18, 38, 11, 39, 38, 39, 18, 39, 11, 12, 36, 8, 9, 21, 36, 20, 36, 9, 37, 36, 37, 20, 37, 9, 10, 20, 37, 19, 37, 10, 38, 37, 38, 19, 7, 34, 41, 23, 34, 22, 34, 7, 35, 34, 35, 22, 35, 7, 8, 22, 35, 21, 35, 8, 36, 35, 36, 21, 42, 5, 41, 5, 6, 41, 42, 41, 24, 24, 41, 23, 6, 7, 41, 41, 34, 23, 43, 4, 42, 43, 42, 25, 4, 5, 42, 44, 4, 43, 44, 43, 25, 25, 42, 24, 1, 2, 45, 28, 45, 27, 2, 3, 45, 45, 26, 27, 45, 44, 26, 45, 3, 44, 44, 3, 4, 46, 45, 28, 44, 25, 26, 18, 39, 17, 39, 12, 33, 39, 33, 17, 33, 12, 13, 17, 33, 16, 13, 14, 33, 16, 33, 15, 15, 33, 14, 32, 40, 31, 31, 40, 30, 32, 0, 40, 40, 29, 30, 40, 28, 29, 0, 1, 46, 1, 45, 46, 40, 0, 46, 40, 46, 28 ], + "vertices": [ 3, 102, -21.4, 12.07, 0.65, 28, 23.5, -22.3, 0.3448, 27, 59.45, -22.3, 0.00521, 3, 102, -21.96, 29.92, 0.51, 28, 5.76, -22.88, 0.33074, 27, 41.71, -22.88, 0.15926, 3, 102, -22.66, 49.08, 0.31148, 28, -13.39, -23.7, 0.0912, 27, 22.52, -23.7, 0.59732, 3, 102, -21.61, 66.95, 0.17, 27, 4.58, -22.78, 0.5805, 26, 40.54, -22.78, 0.2495, 4, 102, -18.4, 87.61, 0.03, 27, -15.86, -19.96, 0.10277, 26, 20.08, -19.96, 0.82804, 25, 56.01, -19.96, 0.03919, 3, 27, -34.44, -21.4, 7.9E-4, 26, 1.51, -21.4, 0.57156, 25, 37.44, -21.4, 0.42765, 3, 26, -19.27, -22.14, 0.05654, 25, 16.67, -22.14, 0.87764, 24, 52.6, -22.14, 0.06582, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 3, 26, -21.58, 20.62, 0.04097, 25, 14.4, 20.62, 0.83939, 24, 50.38, 20.63, 0.11963, 3, 26, -1.35, 19.72, 0.4338, 25, 34.64, 19.72, 0.56533, 24, 70.61, 19.73, 8.7E-4, 4, 102, 20.45, 89.06, 0.03, 27, -18.28, 18.86, 0.04202, 26, 17.66, 18.86, 0.84488, 25, 53.66, 18.87, 0.0831, 3, 102, 24.24, 68.6, 0.17, 27, 2.29, 23.05, 0.47119, 26, 38.23, 23.05, 0.35881, 2, 102, 24.6, 51.21, 0.32421, 27, 20.01, 23.55, 0.67579, 3, 102, 23.74, 35.21, 0.51, 28, 0.25, 22.8, 0.21249, 27, 36.2, 22.8, 0.27751, 3, 102, 24.29, 24.55, 0.73, 28, 10.95, 23.37, 0.25858, 27, 46.78, 23.36, 0.01142, 1, 102, 34.96, 18.3, 1, 1, 102, 34.41, -2.64, 1, 1, 102, -20.64, -2.52, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 102, 1.14, 12.19, 0.83, 28, 23.32, 0.24, 0.17, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 2, 102, 1.77, 89.22, 0.03, 26, 18, 0.1, 0.97, 3, 102, 1.58, 67.1, 0.17, 27, 4.15, 0.4, 0.76746, 26, 40.07, 0.4, 0.06254, 2, 102, 1.23, 49.11, 0.22, 27, 22.3, 0.17, 0.78, 3, 102, 1.15, 33.38, 0.37, 28, 2.2, 0.2, 0.5638, 27, 38.15, 0.2, 0.0662 ], + "hull": 33, + "edges": [ 28, 30, 58, 60, 60, 62, 62, 64, 42, 44, 26, 28, 66, 26, 30, 32, 66, 32, 70, 68, 42, 70, 14, 16, 70, 16, 40, 42, 72, 70, 40, 72, 16, 18, 72, 18, 38, 40, 74, 72, 38, 74, 18, 20, 74, 20, 36, 38, 76, 74, 36, 76, 20, 22, 76, 22, 32, 34, 34, 36, 66, 78, 78, 76, 34, 78, 22, 24, 24, 26, 78, 24, 68, 82, 46, 82, 82, 12, 46, 48, 84, 82, 48, 84, 12, 10, 84, 10, 48, 50, 86, 84, 50, 86, 10, 8, 86, 8, 50, 52, 88, 86, 52, 88, 8, 6, 88, 6, 52, 54, 90, 88, 54, 90, 6, 4, 90, 4, 54, 56, 56, 58, 80, 92, 92, 90, 56, 92, 4, 2, 92, 2, 58, 80, 2, 0, 0, 64, 80, 0, 12, 14, 44, 46, 60, 80 ], + "width": 61, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "legs/pants-jeans", + "attachments": { + "boot-ribbon-back": { + "boot-ribbon-back": { "name": "girl/boot-ribbon-front", "x": 67.51, "y": 16.46, "rotation": 90.17, "width": 26, "height": 25 } + }, + "boot-ribbon-front": { + "boot-ribbon-front": { "name": "girl/boot-ribbon-front", "x": 31.67, "y": 16.34, "rotation": 89.95, "width": 26, "height": 25 } + }, + "leg-back": { + "leg-back": { + "name": "girl/leg-front", + "type": "mesh", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 0, 48, 42, 42, 48, 31, 42, 31, 33, 34, 0, 42, 34, 42, 33, 31, 32, 33, 31, 48, 30, 41, 12, 13, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48 ], + "vertices": [ 3, 94, 22.95, -22.02, 0.22728, 95, 59.29, -22, 0.00272, 103, -19.33, 11.79, 0.77, 3, 94, 5.73, -22.61, 0.49142, 95, 41.79, -22.61, 0.23858, 103, -19.74, 29.07, 0.27, 4, 94, -10.55, -23.17, 0.11127, 95, 25.25, -23.18, 0.76279, 96, 60.87, -23.13, 0.00594, 103, -20.15, 45.45, 0.12, 2, 95, 5.13, -23.87, 0.69465, 96, 41.05, -23.86, 0.30535, 3, 95, -15.89, -24.56, 0.09408, 96, 20.35, -24.59, 0.86299, 97, 56.72, -24.52, 0.04292, 2, 96, 1.98, -25.21, 0.55425, 97, 38.06, -25.21, 0.44575, 3, 96, -19.09, -25.88, 0.05256, 97, 16.64, -25.95, 0.87891, 98, 52.7, -25.89, 0.06853, 3, 96, -33.74, -26.34, 3.3E-4, 97, 1.76, -26.46, 0.67227, 98, 37.81, -26.45, 0.32739, 2, 97, -3.17, -22.02, 0.47188, 98, 32.86, -22.03, 0.52812, 3, 97, -22.68, -22.46, 0.0172, 98, 13.36, -22.55, 0.87617, 99, 49.14, -22.52, 0.10662, 3, 98, -7.93, -23.09, 0.23789, 99, 28.2, -23.11, 0.75909, 100, 64.58, -23.1, 0.00302, 3, 98, -27.79, -23.57, 0.00312, 99, 8.67, -23.62, 0.75495, 100, 44.76, -23.62, 0.24193, 3, 99, -12.93, -24.2, 0.09944, 100, 22.84, -24.2, 0.87238, 101, 58.46, -24.21, 0.02818, 2, 100, 0.77, -24.79, 0.47358, 101, 36.71, -24.79, 0.52642, 1, 101, 1.72, -25.72, 1, 1, 101, -25.98, -26.46, 1, 1, 101, -26.33, 25.98, 1, 1, 101, -0.53, 25.24, 1, 2, 100, -3.13, 24.27, 0.37555, 101, 32.87, 24.27, 0.62445, 3, 99, -15.75, 23.6, 0.0536, 100, 19.96, 23.6, 0.92085, 101, 55.62, 23.59, 0.02556, 2, 99, 5.77, 22.96, 0.65378, 100, 41.79, 22.97, 0.34622, 3, 98, -11.12, 22.43, 0.12254, 99, 24.96, 22.4, 0.86248, 100, 61.27, 22.42, 0.01499, 3, 97, -26.03, 21.9, 0.00839, 98, 9.83, 21.8, 0.78745, 99, 45.58, 21.82, 0.20415, 3, 97, -7.13, 21.27, 0.362, 98, 28.73, 21.24, 0.63637, 99, 64.17, 21.3, 0.00163, 2, 97, -6.17, 28.11, 0.5025, 98, 29.67, 28.08, 0.4975, 3, 96, -21.38, 27.22, 0.03848, 97, 14.13, 27.14, 0.83871, 98, 49.97, 27.2, 0.12281, 3, 96, -2.33, 26.26, 0.40865, 97, 33.49, 26.25, 0.59016, 98, 69.34, 26.38, 0.00119, 3, 95, -20.14, 25.43, 0.05003, 96, 16.06, 25.39, 0.84798, 97, 52.19, 25.45, 0.10198, 2, 95, 1.24, 24.42, 0.56331, 96, 37.12, 24.42, 0.43669, 4, 94, -15.67, 23.56, 0.04308, 95, 20, 23.55, 0.81142, 96, 55.61, 23.58, 0.0255, 103, 26.63, 50.22, 0.12, 3, 94, 0.26, 22.8, 0.33337, 95, 36.2, 22.8, 0.39663, 103, 25.72, 34.13, 0.27, 3, 94, 18.48, 21.95, 0.22212, 95, 54.71, 21.97, 0.00788, 103, 24.69, 15.83, 0.77, 1, 103, 36.21, 8.95, 1, 1, 103, 36.08, -3.91, 1, 1, 103, -18.97, -3.34, 1, 1, 101, 0.45, 0, 1, 1, 98, 31.4, 0, 1, 1, 98, 11.41, 0, 1, 1, 99, 26.57, 0, 1, 1, 99, 7.43, 0, 1, 1, 100, 20.94, 0, 1, 1, 101, 34.45, 0, 1, 2, 94, 23.32, 0.24, 0.23, 103, 2.93, 11.2, 0.77, 1, 97, 15.67, 0.04, 1, 2, 96, -0.81, 0.07, 0.36735, 97, 35.13, 0.07, 0.63265, 1, 96, 18, 0.1, 1, 2, 95, 2.51, 0.14, 0.90776, 96, 38.42, 0.14, 0.09224, 2, 95, 22.3, 0.17, 0.88, 103, 3.23, 48.15, 0.12, 3, 94, 2.19, 0.2, 0.62933, 95, 38.18, 0.2, 0.10067, 103, 3.11, 32.41, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "leg-front": { + "leg-front": { + "name": "girl/leg-front", + "type": "mesh", + "uvs": [ 0.07389, 0.9524, 0.06404, 0.89807, 0.05462, 0.8461, 0.04309, 0.78246, 0.03121, 0.71692, 0.02073, 0.6591, 0.00852, 0.59172, 0, 0.54473, 0.07379, 0.52912, 0.06516, 0.46755, 0.05581, 0.4008, 0.04719, 0.3393, 0.03754, 0.27044, 0.02776, 0.20062, 0.01226, 0.09003, 0, 0.0025, 0.87399, 0, 0.8615, 0.08164, 0.84535, 0.18726, 0.83419, 0.26024, 0.82366, 0.32916, 0.81439, 0.38977, 0.80433, 0.45558, 0.79515, 0.51561, 0.90919, 0.51858, 0.89347, 0.583, 0.87847, 0.64444, 0.8642, 0.70289, 0.84791, 0.76964, 0.83339, 0.82913, 0.82087, 0.88039, 0.80679, 0.93811, 1, 0.95946, 1, 1, 0.08252, 1, 0.44092, 0.0854, 0.44092, 0.52429, 0.44092, 0.46108, 0.44092, 0.39534, 0.44092, 0.33482, 0.44092, 0.26387, 0.44092, 0.19291, 0.44492, 0.95343, 0.44151, 0.58821, 0.44209, 0.64978, 0.44264, 0.70926, 0.44324, 0.77395, 0.44383, 0.83655, 0.4443, 0.88665 ], + "triangles": [ 31, 48, 30, 0, 48, 42, 42, 48, 31, 34, 42, 33, 31, 32, 33, 42, 31, 33, 34, 0, 42, 40, 11, 12, 20, 40, 19, 40, 12, 41, 40, 41, 19, 41, 12, 13, 38, 9, 10, 22, 38, 21, 38, 10, 39, 38, 39, 21, 39, 10, 11, 21, 39, 20, 39, 11, 40, 39, 40, 20, 8, 36, 43, 43, 36, 23, 36, 8, 37, 36, 37, 23, 37, 8, 9, 23, 37, 22, 37, 9, 38, 37, 38, 22, 5, 43, 44, 5, 6, 43, 44, 43, 26, 26, 43, 25, 6, 8, 43, 6, 7, 8, 43, 23, 25, 25, 23, 24, 3, 4, 45, 46, 45, 28, 28, 45, 27, 45, 4, 44, 4, 5, 44, 45, 44, 27, 27, 44, 26, 1, 2, 47, 48, 47, 30, 30, 47, 29, 47, 2, 46, 2, 3, 46, 47, 46, 29, 29, 46, 28, 46, 3, 45, 48, 1, 47, 0, 1, 48, 19, 41, 18, 41, 13, 35, 41, 35, 18, 35, 13, 14, 18, 35, 17, 14, 15, 35, 17, 35, 16, 16, 35, 15 ], + "vertices": [ 3, 28, 22.96, -22.02, 0.22658, 27, 58.91, -22.02, 0.00342, 102, -21, 12.47, 0.77, 3, 28, 5.76, -22.61, 0.49273, 27, 41.71, -22.61, 0.23727, 102, -21.71, 29.73, 0.27, 4, 28, -10.68, -23.18, 0.11707, 27, 25.27, -23.18, 0.76681, 26, 61.22, -23.18, 0.00612, 102, -22.41, 46.07, 0.11, 2, 27, 5.13, -23.87, 0.6994, 26, 41.08, -23.87, 0.3006, 3, 27, -15.62, -24.58, 0.10595, 26, 20.33, -24.58, 0.85365, 25, 56.28, -24.58, 0.0404, 3, 27, -33.92, -25.21, 7.9E-4, 26, 2.03, -25.21, 0.57156, 25, 37.98, -25.21, 0.42765, 3, 26, -19.29, -25.94, 0.05654, 25, 16.66, -25.94, 0.87764, 24, 52.61, -25.94, 0.06582, 3, 26, -34.16, -26.46, 4.4E-4, 25, 1.79, -26.46, 0.67282, 24, 37.74, -26.46, 0.32674, 2, 25, -3.13, -22.03, 0.47104, 24, 32.82, -22.03, 0.52896, 3, 25, -22.61, -22.55, 0.01665, 24, 13.34, -22.55, 0.87142, 23, 49.29, -22.55, 0.11193, 3, 24, -7.79, -23.11, 0.22064, 23, 28.17, -23.11, 0.77569, 22, 64.12, -23.11, 0.00367, 3, 24, -27.25, -23.62, 0.00219, 23, 8.7, -23.62, 0.77556, 22, 44.65, -23.62, 0.22225, 3, 21, 58.81, -24.2, 0.0114, 23, -13.09, -24.2, 0.12046, 22, 22.86, -24.2, 0.86813, 2, 21, 36.72, -24.79, 0.42237, 22, 0.77, -24.79, 0.57763, 2, 21, 1.72, -25.72, 0.99849, 22, -34.23, -25.72, 0.00151, 1, 21, -25.98, -26.46, 1, 1, 21, -26.33, 25.98, 1, 2, 21, -0.53, 25.24, 0.99997, 22, -36.48, 25.24, 3.0E-5, 2, 21, 32.85, 24.27, 0.56274, 22, -3.1, 24.27, 0.43726, 3, 21, 55.91, 23.6, 0.02334, 23, -15.99, 23.6, 0.05774, 22, 19.96, 23.6, 0.91892, 3, 24, -30.16, 22.96, 3.0E-4, 23, 5.79, 22.96, 0.6752, 22, 41.74, 22.96, 0.3245, 3, 24, -11, 22.41, 0.14886, 23, 24.95, 22.41, 0.84172, 22, 60.9, 22.41, 0.00941, 3, 25, -26.16, 21.8, 0.00663, 24, 9.79, 21.8, 0.80794, 23, 45.74, 21.8, 0.18543, 3, 25, -7.19, 21.25, 0.35697, 24, 28.76, 21.25, 0.64235, 23, 64.72, 21.25, 6.7E-4, 2, 25, -6.22, 28.1, 0.49898, 24, 29.73, 28.1, 0.50102, 3, 26, -21.82, 27.15, 0.04097, 25, 14.13, 27.15, 0.83939, 24, 50.08, 27.15, 0.11963, 3, 26, -2.4, 26.25, 0.4338, 25, 33.55, 26.25, 0.56533, 24, 69.5, 26.25, 8.7E-4, 3, 27, -19.88, 25.4, 0.04332, 26, 16.07, 25.4, 0.87101, 25, 52.02, 25.4, 0.08567, 2, 27, 1.21, 24.42, 0.5677, 26, 37.16, 24.42, 0.4323, 4, 28, -15.94, 23.55, 0.03449, 27, 20.01, 23.55, 0.83346, 26, 55.96, 23.55, 0.02204, 102, 24.27, 51.7, 0.11, 3, 28, 0.25, 22.8, 0.31657, 27, 36.2, 22.8, 0.41343, 102, 23.66, 35.6, 0.27, 3, 28, 18.49, 21.95, 0.22027, 27, 54.44, 21.95, 0.00973, 102, 22.94, 17.27, 0.77, 1, 102, 34.58, 10.59, 1, 1, 102, 34.67, -2.26, 1, 1, 102, -20.38, -2.65, 1, 1, 21, 0.45, 0, 1, 1, 24, 31.4, 0, 1, 1, 24, 11.41, 0, 1, 1, 23, 26.57, 0, 1, 1, 23, 7.43, 0, 1, 1, 22, 20.94, 0, 1, 1, 21, 34.45, 0, 1, 2, 28, 23.32, 0.24, 0.23, 102, 1.26, 12.26, 0.77, 1, 25, 15.67, 0.04, 1, 2, 26, -0.81, 0.07, 0.37007, 25, 35.14, 0.07, 0.62993, 1, 26, 18, 0.1, 1, 2, 27, 2.5, 0.14, 0.92465, 26, 38.45, 0.14, 0.07535, 2, 27, 22.3, 0.17, 0.89, 102, 0.91, 49.21, 0.11, 3, 28, 2.2, 0.2, 0.65329, 27, 38.15, 0.2, 0.07671, 102, 1.08, 33.46, 0.27 ], + "hull": 35, + "edges": [ 30, 32, 62, 64, 64, 66, 66, 68, 16, 14, 46, 48, 44, 46, 28, 30, 70, 28, 32, 34, 70, 34, 74, 72, 44, 74, 16, 18, 74, 18, 42, 44, 76, 74, 42, 76, 18, 20, 76, 20, 40, 42, 78, 76, 40, 78, 20, 22, 78, 22, 38, 40, 80, 78, 38, 80, 22, 24, 80, 24, 34, 36, 36, 38, 70, 82, 82, 80, 36, 82, 24, 26, 26, 28, 82, 26, 48, 50, 72, 86, 50, 86, 14, 12, 86, 12, 50, 52, 88, 86, 52, 88, 12, 10, 88, 10, 52, 54, 90, 88, 54, 90, 10, 8, 90, 8, 54, 56, 92, 90, 56, 92, 8, 6, 92, 6, 56, 58, 94, 92, 58, 94, 6, 4, 94, 4, 58, 60, 60, 62, 84, 96, 96, 94, 60, 96, 4, 2, 96, 2, 62, 84, 2, 0, 0, 68, 84, 0 ], + "width": 60, + "height": 316 + } + }, + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + } + } + }, + { + "name": "nose/long", + "attachments": { + "mouth": { + "mouth-close": { "name": "boy/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "nose": { + "nose": { + "name": "boy/nose", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 6, 51.55, -68.98, 0.63, 29, 28.41, -21.66, 0.37, 2, 6, 50.11, -35.01, 0.72, 29, -5.59, -21.66, 0.28, 2, 6, 69.09, -34.21, 0.72, 29, -5.59, -2.66, 0.28, 2, 6, 70.54, -68.18, 0.63, 29, 28.41, -2.66, 0.37 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 34, + "height": 19 + } + } + } + }, + { + "name": "nose/short", + "attachments": { + "mouth": { + "mouth-close": { "name": "girl/mouth-close", "x": 6.2, "y": 5.18, "width": 42, "height": 9 } + }, + "nose": { + "nose": { + "name": "girl/nose", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 6, 57.27, -63, 0.68, 29, 14.7, -17.7, 0.32, 2, 6, 56.34, -41.02, 0.73, 29, -7.3, -17.7, 0.27, 2, 6, 69.33, -40.47, 0.73, 29, -7.3, -4.7, 0.27, 2, 6, 70.26, -62.45, 0.68, 29, 14.7, -4.7, 0.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 13 + } + } + } + } +], +"animations": { + "aware": { + "bones": { + "head-control": { + "translate": [ + { "x": -62.46, "y": -5.73 }, + { "time": 0.1667, "x": 30.37, "y": 35.21 }, + { "time": 0.2667, "x": 4.53, "y": 62.9 }, + { "time": 0.4667, "x": 5.81, "y": 43.4, "curve": "stepped" }, + { "time": 1.0667, "x": 5.81, "y": 43.4 } + ] + }, + "hips": { + "translate": [ + { "y": -91.4 }, + { "time": 0.1667, "y": 7.19 } + ] + }, + "hat-control": { + "translate": [ + { "x": -51.09, "y": -5.28 }, + { "time": 0.1667, "x": 34.82, "y": -14.72 } + ] + }, + "head": { + "rotate": [ + { "value": -2.68 }, + { "time": 0.1667, "value": 4.05 }, + { "time": 0.2667, "value": -1.51 }, + { "time": 0.4667, "value": 1.68, "curve": "stepped" }, + { "time": 0.5667, "value": 1.68 }, + { "time": 0.8333, "value": -4.08 } + ] + }, + "hat-base": { + "translate": [ + {}, + { "time": 0.1667, "x": -11.29, "y": 0.32 }, + { "time": 0.4, "x": -1.03, "y": 0.64 } + ] + }, + "hat": { + "rotate": [ + {}, + { "time": 0.2, "value": 15.74 }, + { "time": 0.4, "value": -16.53 }, + { "time": 0.6333, "value": 13.83 }, + { "time": 0.8, "value": 4.09 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.886 }, + { "time": 0.3333 } + ] + }, + "scarf-back": { + "rotate": [ + {}, + { "time": 0.1, "value": 20.93 }, + { "time": 0.3333, "value": -5.62 }, + { "time": 0.5, "value": 1.86 } + ] + }, + "hair-side-back": { + "rotate": [ + { "value": -9.73 }, + { "time": 0.1667, "value": 9.49 }, + { "time": 0.3, "value": -10.46 }, + { "time": 0.4667, "value": 1.95 }, + { "time": 0.6667, "value": -6 }, + { "time": 0.8667, "value": -0.63 } + ] + }, + "hair-side-front": { + "rotate": [ + { "value": -2.72 }, + { "time": 0.1667, "value": 10.36 }, + { "time": 0.3, "value": -19.18 }, + { "time": 0.4667, "value": -0.83 }, + { "time": 0.6667, "value": -9.9 }, + { "time": 0.8667, "value": -4.35 } + ] + }, + "hair-bangs-back": { + "rotate": [ + { "value": -19.65 }, + { "time": 0.1667, "value": 7.92 }, + { "time": 0.3, "value": -1.28 }, + { "time": 0.4667, "value": -9.58 }, + { "time": 0.6667, "value": -14.48 }, + { "time": 0.8667, "value": -8.73 } + ] + }, + "hair-bangs-front": { + "rotate": [ + { "value": 18.38, "curve": "stepped" }, + { "time": 0.1667, "value": 18.38 }, + { "time": 0.3, "value": -8.33 }, + { "time": 0.4667, "value": 8.04 }, + { "time": 0.6667, "value": -8.34 } + ] + }, + "skirt-control": { + "translate": [ + { "y": -94.48 }, + { "time": 0.1333, "x": -1.64, "y": 1.12 }, + { "time": 0.1667, "x": -2.05, "y": 47.36 }, + { "time": 0.3 } + ] + }, + "skirt-control-middle": { + "translate": [ + {}, + { "time": 0.1667, "x": -47.24, "y": -1.03 }, + { "time": 0.2333, "x": -43.72, "y": -0.73 }, + { "time": 0.4 } + ] + }, + "skirt-rotation-front": { + "rotate": [ + { "value": 18.42 }, + { "time": 0.1333, "value": 18.47 }, + { "time": 0.3667, "value": -29.8 }, + { "time": 0.5, "value": -0.34 }, + { "time": 0.7, "value": -19.33 } + ] + }, + "skirt-rotation-back": { + "rotate": [ + { "value": -19.75 }, + { "time": 0.1333, "value": -35.04 }, + { "time": 0.3, "value": 37.38 }, + { "time": 0.4333, "value": -3.17 }, + { "time": 0.7, "value": 14.47 } + ] + }, + "skirt-control-up": { + "translate": [ + { "time": 0.2333, "x": -1.03, "y": -1.03 } + ] + }, + "cape-front-rotator": { + "rotate": [ + { "value": 7.42, "curve": "stepped" }, + { "time": 0.1333, "value": 7.42 }, + { "time": 0.2333, "value": -6.54 }, + { "time": 0.5 } + ] + }, + "cape-back-rotator": { + "rotate": [ + { "value": 0.14 }, + { "time": 0.1333, "value": -19.44 }, + { "time": 0.2333, "value": 6.97 }, + { "time": 0.5 } + ] + }, + "hair-strand-back-1": { + "rotate": [ + { "value": -13.58 }, + { "time": 0.4, "value": 3.32 }, + { "time": 0.6667, "value": -11.78 }, + { "time": 0.9667, "value": -7.37 } + ] + }, + "hair-strand-back-2": { + "rotate": [ + { "value": 300.71 }, + { "time": 0.4, "value": 364.24 }, + { "time": 0.5667, "value": 360 }, + { "time": 0.9333, "value": 364.33 } + ] + }, + "hair-strand-back-3": { + "rotate": [ + { "value": -24.87 }, + { "time": 0.4, "value": 6.39 }, + { "time": 0.5667, "value": 8.01 }, + { "time": 0.9333, "value": 14.8 } + ] + }, + "hair-strand-front-1": { + "rotate": [ + { "value": -352.71 }, + { "time": 0.4, "value": -375.28 }, + { "time": 0.6667, "value": -352.48 }, + { "time": 0.9333, "value": -361.77 } + ] + }, + "hair-strand-front-3": { + "rotate": [ + { "value": 30.72 }, + { "time": 0.4, "value": -8.29 }, + { "time": 0.5667 }, + { "time": 0.9333, "value": -6.01 } + ] + }, + "hair-strand-front-2": { + "rotate": [ + { "value": -331.85 }, + { "time": 0.4, "value": -376.13 }, + { "time": 0.5667, "value": -360 }, + { "time": 0.8, "value": -368.78 }, + { "time": 1.0333, "value": -358.49 } + ] + }, + "hair-strand-front-4": { + "rotate": [ + { "value": 36.04 }, + { "time": 0.4, "value": -9.94 }, + { "time": 0.5667 }, + { "time": 0.9333, "value": -3.18 } + ] + }, + "bag": { + "rotate": [ + { "value": -5.68 }, + { "time": 0.2667, "value": 11.42 }, + { "time": 0.4333, "value": 4.78 }, + { "time": 0.6, "value": 9.21 } + ] + }, + "bag-control": { + "translate": [ + { "x": -15.82, "y": -19.18 }, + { "time": 0.2, "x": -7.23, "y": 14.62 }, + { "time": 0.4, "x": -3.97, "y": -11.03 }, + { "time": 0.6333, "x": -14.17, "y": -8.66 }, + { "time": 0.8667, "x": -3.91, "y": -9.14 } + ] + }, + "arm-front-down": { + "rotate": [ + { "value": 21.36 }, + { "time": 0.1333, "value": -4.81 }, + { "time": 0.3667, "value": 37.96 }, + { "time": 0.6667, "value": 25.99 } + ] + }, + "arm-front-up": { + "rotate": [ + { "value": 10.18 }, + { "time": 0.1333, "value": -9.82 }, + { "time": 0.3667, "value": -10.68 }, + { "time": 0.6667, "value": -16.66 } + ] + }, + "arm-back-up": { + "rotate": [ + { "value": -26.58 }, + { "time": 0.1667, "value": 14.59 }, + { "time": 0.3667, "value": 2.32 }, + { "time": 0.8667, "value": -3.61 } + ] + }, + "arm-back-down": { + "rotate": [ + { "value": 75.17 }, + { "time": 0.1667, "value": -3.13 }, + { "time": 0.3667, "value": 39.97 }, + { "time": 0.8667, "value": 34.08 } + ] + }, + "dress-control-leg-down-back": { + "translate": [ + { "x": -0.84, "y": -5.64 }, + { "time": 0.2 } + ] + }, + "cape-blue-middle-front": { + "translate": [ + { "x": 37.13, "y": 23.77 }, + { "time": 0.0667, "x": 59.36, "y": 36.71 }, + { "time": 0.1667, "x": 54.84, "y": 0.04 }, + { "time": 0.3, "x": 5.89, "y": -49.91 }, + { "time": 0.3333, "x": 54.3, "y": -41.62 }, + { "time": 0.4333, "x": 39.08, "y": -2.95 }, + { "time": 0.5333, "x": 46.83, "y": -8.42 }, + { "time": 0.5667, "x": 32.59, "y": -17.13 } + ] + }, + "cape-blue-down-front": { + "rotate": [ + { "time": 0.2 }, + { "time": 0.4333, "value": 24.99 }, + { "time": 0.5667, "value": 14.98 }, + { "time": 0.7, "value": -21.62 }, + { "time": 0.8, "value": 1.06 } + ], + "translate": [ + { "x": 5.22, "y": -6.79 }, + { "time": 0.1333, "x": 75.09, "y": 30.66 }, + { "time": 0.1667, "x": 51.71, "y": 31.97 }, + { "time": 0.4333, "x": 44.01, "y": -13.07 }, + { "time": 0.6667, "x": 43.38, "y": -12.67 }, + { "time": 0.7333, "x": 43.18, "y": 10.37 } + ] + }, + "cape-blue-down-back": { + "translate": [ + { "time": 0.1667, "x": 32.74, "y": -32 } + ] + }, + "dress-control-foot-front": { + "rotate": [ + { "value": -49.06 }, + { "time": 0.1667 } + ], + "translate": [ + { "x": -18.52, "y": 12.34 }, + { "time": 0.1667 } + ] + }, + "dress-control-foot-back": { + "translate": [ + { "x": 38.58, "y": -4.63 }, + { "time": 0.1667 } + ] + }, + "dress-control-leg-up-back": { + "translate": [ + { "x": -22.89, "y": 7.69 }, + { "time": 0.1667 } + ] + }, + "dress-control-leg-down-front": { + "translate": [ + { "x": -2.78, "y": -17.03 }, + { "time": 0.2 } + ] + } + } + }, + "blink": { + "slots": { + "eye-back-iris": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-back-iris" } + ] + }, + "eye-back-pupil": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-back-pupil" } + ] + }, + "eye-back-white": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-back-white" } + ] + }, + "eye-front-iris": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-front-iris" } + ] + }, + "eye-front-pupil": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-front-pupil" } + ] + }, + "eye-front-white": { + "attachment": [ + { "time": 0.0333 }, + { "time": 0.0732, "name": "eye-front-white" } + ] + } + }, + "bones": { + "eye-front-up-eyelid": { + "rotate": [ + {}, + { "time": 0.0183, "value": -42.34 }, + { "time": 0.1646 } + ] + }, + "eye-front-up-eyelid-holder": { + "translate": [ + {}, + { "time": 0.0183, "y": -4.35 }, + { "time": 0.0366, "x": 0.27, "y": -12.4, "curve": "stepped" }, + { "time": 0.0549, "x": 0.27, "y": -12.4 }, + { "time": 0.1646 } + ] + }, + "eye-back-up-eyelid": { + "rotate": [ + {}, + { "time": 0.0183, "value": 35.83 }, + { "time": 0.1646 } + ] + }, + "eye-back-up-eyelid-holder": { + "translate": [ + {}, + { "time": 0.0183, "x": -2.99, "y": -4.35 }, + { "time": 0.0366, "x": -1.68, "y": -11.31, "curve": "stepped" }, + { "time": 0.0549, "x": -1.68, "y": -11.31 }, + { "time": 0.1646 } + ] + }, + "eye-back-low-eyelid-holder": { + "rotate": [ + { "time": 0.0366, "value": 4.33 } + ], + "translate": [ + {}, + { "time": 0.0183, "x": -1.63, "y": 1.09 }, + { "time": 0.0366, "x": -1.09, "y": 6.52, "curve": "stepped" }, + { "time": 0.0549, "x": -1.09, "y": 6.52 }, + { "time": 0.0732, "x": -1.34, "y": -1.93 }, + { "time": 0.1646, "curve": "stepped" }, + { "time": 1.032 } + ] + }, + "eye-front-low-eyelid-holder": { + "translate": [ + {}, + { "time": 0.0366, "x": -1.36, "y": 4.55, "curve": "stepped" }, + { "time": 0.0549, "x": -1.36, "y": 4.55 }, + { "time": 0.0732, "x": -1.36, "y": -3.51 }, + { "time": 0.1646 } + ] + }, + "eye-back-low-eyelid": { + "rotate": [ + {}, + { "time": 0.0366, "value": -27.26, "curve": "stepped" }, + { "time": 0.0549, "value": -27.26 }, + { "time": 0.0732, "value": -11.09 }, + { "time": 0.1646 } + ] + }, + "eye-front-low-eyelid": { + "rotate": [ + {}, + { "time": 0.0366, "value": 18.27, "curve": "stepped" }, + { "time": 0.0549, "value": 18.27 }, + { "time": 0.1646 } + ] + }, + "eye-front-eyebrow": { + "rotate": [ + {}, + { "time": 0.0333, "value": -14.81 }, + { "time": 0.1333 } + ], + "translate": [ + {}, + { "time": 0.0333, "y": -8.69 }, + { "time": 0.1333 } + ] + }, + "eye-back-eyebrow": { + "rotate": [ + {}, + { "time": 0.0333, "value": 14.78 }, + { "time": 0.1333 } + ], + "translate": [ + {}, + { "time": 0.0333, "y": -8.69 }, + { "time": 0.1333 } + ] + } + } + }, + "dance": { + "bones": { + "foot-back-IK": { + "translate": [ + { "x": -3.94 } + ] + }, + "foot-front-IK": { + "translate": [ + { "x": -77.47 } + ] + }, + "arm-front-up": { + "rotate": [ + { "value": -43.38 }, + { "time": 0.2, "value": -64.19 }, + { "time": 0.5, "value": -43.38 } + ] + }, + "arm-front-down": { + "rotate": [ + { "value": 111.67 }, + { "time": 0.2, "value": 119.56 }, + { "time": 0.3, "value": 108.58 }, + { "time": 0.5, "value": 111.67 } + ] + }, + "arm-back-up": { + "rotate": [ + { "value": 62.56 }, + { "time": 0.2, "value": 55.24 }, + { "time": 0.5, "value": 62.56 } + ] + }, + "arm-back-down": { + "rotate": [ + { "value": -123.94 }, + { "time": 0.2, "value": -123.93 }, + { "time": 0.5, "value": -123.94 } + ] + }, + "head": { + "rotate": [ + { "value": 8.09 }, + { "time": 0.2667, "value": -4.72 }, + { "time": 0.5, "value": 8.09 } + ] + }, + "hips": { + "translate": [ + {}, + { "time": 0.1, "x": -31.02, "y": -57.32 }, + { "time": 0.2, "x": -75.67, "y": -45.42 }, + { "time": 0.2667, "x": -82.72, "y": 5.11 }, + { "time": 0.5 } + ] + }, + "skirt-control": { + "translate": [ + {}, + { "time": 0.2667, "x": -107.7, "y": -26.37 }, + { "time": 0.5 } + ] + }, + "body-down": { + "rotate": [ + {}, + { "time": 0.2667, "value": -37.27 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.2, "x": 13.63, "y": 25.56 }, + { "time": 0.5 } + ] + }, + "bag": { + "translate": [ + {}, + { "time": 0.1, "x": 2.14, "y": -46.73 }, + { "time": 0.2667, "x": 11.89, "y": 39.86 }, + { "time": 0.3, "x": 37.93, "y": 79.04 }, + { "time": 0.4, "x": 35.68, "y": 82.97 }, + { "time": 0.5 } + ] + }, + "bag-control": { + "translate": [ + {}, + { "time": 0.1667, "x": -9.48, "y": -9.24 }, + { "time": 0.2667, "x": -45.55, "y": 11.61 }, + { "time": 0.4, "x": -23.13, "y": 23.45 }, + { "time": 0.5 } + ] + }, + "bag-flap": { + "rotate": [ + {}, + { "time": 0.3, "value": 30.36 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.3, "x": 62.39, "y": -60.69 }, + { "time": 0.5 } + ] + }, + "body-up": { + "rotate": [ + {}, + { "time": 0.2667, "value": 25.81 }, + { "time": 0.4, "value": 6.12 }, + { "time": 0.5 } + ] + }, + "dress-control-leg-up-front": { + "translate": [ + { "x": -4.66, "y": 13.07 }, + { "time": 0.0667, "x": -6.42, "y": -2.09 }, + { "time": 0.1667, "x": -13.77, "y": -19.16 }, + { "time": 0.3, "x": -7.28, "y": 5.82 }, + { "time": 0.4333, "x": -4.66, "y": 13.07 } + ] + }, + "dress-control-leg-down-front": { + "translate": [ + { "x": -5.13, "y": 14.38 }, + { "time": 0.0667, "x": 10.01, "y": -1.87 }, + { "time": 0.1667, "x": 22.73, "y": -15.41 }, + { "time": 0.3, "x": 10.87, "y": -9.78 }, + { "time": 0.4333, "x": -5.13, "y": 14.38 } + ] + }, + "dress-control-leg-up-back": { + "translate": [ + {}, + { "time": 0.1667, "x": 26.48, "y": 1.39 }, + { "time": 0.5 } + ] + }, + "dress-control-leg-down-back": { + "rotate": [ + {}, + { "time": 0.1667, "value": 25.88 }, + { "time": 0.3, "value": -11.62 }, + { "time": 0.5 } + ] + }, + "skirt-rotation-front": { + "rotate": [ + { "value": -26.59 }, + { "time": 0.1, "value": -16.72 }, + { "time": 0.1667, "value": 22.5 }, + { "time": 0.2667, "value": 34.86 }, + { "time": 0.5, "value": -26.59 } + ] + }, + "skirt-rotation-back": { + "rotate": [ + { "value": 25.32 }, + { "time": 0.1, "value": 26.97 }, + { "time": 0.1667, "value": -23.4 }, + { "time": 0.2667, "value": -24.93 }, + { "time": 0.4, "value": -4.25 }, + { "time": 0.5, "value": 25.32 } + ] + }, + "skirt-control-front": { + "rotate": [ + { "value": -26.59 }, + { "time": 0.1667, "value": -3.25 }, + { "time": 0.5, "value": -26.59 } + ] + }, + "skirt-control-up": { + "translate": [ + {}, + { "time": 0.1333, "x": 10.41, "y": -19.43 }, + { "time": 0.2667, "x": 16.66, "y": -37.48 }, + { "time": 0.4, "x": 72.57, "y": -6.15 }, + { "time": 0.5 } + ] + }, + "skirt-control-middle": { + "translate": [ + {}, + { "time": 0.1, "x": -37.48 }, + { "time": 0.5 } + ] + }, + "skirt-control-front-down": { + "translate": [ + {}, + { "time": 0.1, "x": -34.98, "y": -13.44 }, + { "time": 0.2333, "x": -11.57, "y": 10.34 }, + { "time": 0.5 } + ] + }, + "skirt-control-back-down": { + "translate": [ + {}, + { "time": 0.1, "x": -34.58, "y": 14.44 }, + { "time": 0.2333, "x": -8.49, "y": -14.05 }, + { "time": 0.5 } + ] + }, + "hair-side-front": { + "rotate": [ + { + "value": -35.09, + "curve": [ 0.094, -31.19, 0.125, 11.81 ] + }, + { "time": 0.1667, "value": 11.81 }, + { "time": 0.3, "value": -27.76 }, + { "time": 0.5, "value": -35.09 } + ] + }, + "hair-side-back": { + "rotate": [ + { + "value": -22.34, + "curve": [ 0.147, -10.82, 0.109, 23.73 ] + }, + { + "time": 0.1667, + "value": 23.73, + "curve": [ 0.242, 23.73, 0.392, -23.17 ] + }, + { + "time": 0.4667, + "value": -23.17, + "curve": [ 0.475, -23.17, 0.492, -22.34 ] + }, + { "time": 0.5, "value": -22.34 } + ] + }, + "head-control": { + "translate": [ + { "x": 22.8, "y": -9.23 }, + { "time": 0.0667, "x": 57.97, "y": 46.22 }, + { "time": 0.2333, "x": -32.58, "y": -3.79 }, + { "time": 0.5, "x": 22.8, "y": -9.23 } + ] + }, + "hair-bangs-front": { + "rotate": [ + { "value": 17.62 }, + { "time": 0.1667, "value": 10.84 }, + { "time": 0.3333, "value": -24 }, + { "time": 0.4333 }, + { "time": 0.5, "value": 17.62 } + ] + }, + "hair-bangs-back": { + "rotate": [ + { "value": -39.79 }, + { "time": 0.1667, "value": -24.48 }, + { "time": 0.3333, "value": 29.96 }, + { "time": 0.4333 }, + { "time": 0.5, "value": -39.79 } + ] + }, + "hat": { + "rotate": [ + { "value": 27.46 }, + { "time": 0.1667, "value": -23.07 }, + { "time": 0.5, "value": 27.46 } + ] + }, + "hat-control": { + "translate": [ + { "x": 111.64, "y": 22.2 }, + { "time": 0.1667, "x": -159.23, "y": 20.72 }, + { "time": 0.3333, "x": -51.25, "y": -31.45 }, + { "time": 0.5, "x": 111.64, "y": 22.2 } + ] + }, + "hat-base": { + "translate": [ + { "x": -11.05, "y": 1.1 }, + { "time": 0.2667, "x": -9.51, "y": -2.68 }, + { "time": 0.5, "x": -11.05, "y": 1.1 } + ] + }, + "scarf-back": { + "rotate": [ + {}, + { "time": 0.0667, "value": -17.47 }, + { "time": 0.1667, "value": 13.07 }, + { "time": 0.2667, "value": 71.2 }, + { "time": 0.5 } + ] + }, + "backpack": { + "rotate": [ + { "value": 3.89 }, + { "time": 0.2, "value": -0.82 }, + { "time": 0.3333, "value": -33.86 }, + { "time": 0.5, "value": 3.89 } + ], + "translate": [ + { "x": 1.47, "y": 19.38, "curve": "stepped" }, + { "time": 0.1, "x": 1.47, "y": 19.38 }, + { "time": 0.2, "x": -9.61, "y": 18.55 }, + { "time": 0.3333, "x": 27.69, "y": 6.16 }, + { "time": 0.5, "x": 1.47, "y": 19.38 } + ] + }, + "backpack-control": { + "translate": [ + { "x": 15.05, "y": 56.59 }, + { "time": 0.1, "x": -13.31, "y": 78.1 }, + { "time": 0.2, "x": -44.92, "y": 33.07 }, + { "time": 0.3, "x": -69.87, "y": -53.48 }, + { "time": 0.5, "x": 15.05, "y": 56.59 } + ] + }, + "hair-strand-front-1": { + "rotate": [ + { "value": -10.89 }, + { "time": 0.2, "value": 20.95 }, + { "time": 0.3667, "value": -47.39 }, + { "time": 0.5, "value": -10.89 } + ] + }, + "hair-strand-front-3": { + "rotate": [ + { "value": 35.67 }, + { "time": 0.2, "value": -26.6 }, + { "time": 0.3667 }, + { "time": 0.5, "value": 35.67 } + ] + }, + "hair-strand-front-2": { + "rotate": [ + { "value": 35.67 }, + { "time": 0.2, "value": -26.6 }, + { "time": 0.3667 }, + { "time": 0.5, "value": 35.67 } + ] + }, + "hair-strand-front-4": { + "rotate": [ + { "value": 35.67 }, + { "time": 0.2, "value": -26.6 }, + { "time": 0.3667 }, + { "time": 0.5, "value": 35.67 } + ] + }, + "hair-strand-back-1": { + "rotate": [ + { "value": -23.48 }, + { "time": 0.2, "value": 9.31 }, + { "time": 0.3667, "value": -37.1 }, + { "time": 0.5, "value": -23.48 } + ] + }, + "hair-strand-back-2": { + "rotate": [ + { "value": -23.48 }, + { "time": 0.2, "value": 9.31 }, + { "time": 0.3667, "value": -37.1 }, + { "time": 0.5, "value": -23.48 } + ] + }, + "hair-strand-back-3": { + "rotate": [ + { "value": -23.48 }, + { "time": 0.2, "value": 9.31 }, + { "time": 0.3667, "value": -37.1 }, + { "time": 0.5, "value": -23.48 } + ] + }, + "arm-back-control": { + "translate": [ + {}, + { "time": 0.2, "x": -1.55, "y": 20.76 }, + { "time": 0.5 } + ], + "scale": [ + {}, + { "time": 0.2, "x": 0.808 }, + { "time": 0.5 } + ] + }, + "cape-front-rotator": { + "rotate": [ + { "value": -19.6 }, + { "time": 0.0667, "value": -17.3 }, + { "time": 0.1333, "value": 31.22 }, + { "time": 0.3, "value": 30.83 }, + { "time": 0.5, "value": -19.6 } + ], + "translate": [ + { "x": 4.1, "y": -19.38 } + ] + }, + "cape-back-rotator": { + "rotate": [ + { "value": -37.45, "curve": "stepped" }, + { "time": 0.3, "value": -37.45 }, + { "time": 0.4, "value": -3.51 }, + { "time": 0.5, "value": -37.45 } + ], + "translate": [ + { "x": -9.09, "y": 17.5 } + ] + }, + "cape-red-front-outside": { + "translate": [ + {}, + { "time": 0.2333, "x": 3.19, "y": 5.75 }, + { "time": 0.5 } + ] + }, + "cape-red-front-inside": { + "translate": [ + { + "x": 56.51, + "y": 20.65, + "curve": [ 0.058, 56.51, 0.175, 0, 0.058, 20.65, 0.175, 0 ] + }, + { + "time": 0.2333, + "curve": [ 0.3, 0, 0.433, 56.51, 0.3, 0, 0.433, 20.65 ] + }, + { "time": 0.5, "x": 56.51, "y": 20.65 } + ] + }, + "cape-red-back-inside": { + "translate": [ + { "x": 20.33, "y": -17.55 }, + { "time": 0.2333 }, + { "time": 0.5, "x": 20.33, "y": -17.55 } + ], + "scale": [ + { "x": 0.382, "y": 0.88 }, + { "time": 0.2333 }, + { "time": 0.5, "x": 0.382, "y": 0.88 } + ] + }, + "zip-boy": { + "rotate": [ + { + "value": -41.7, + "curve": [ 0.067, -41.7, 0.2, 46.45 ] + }, + { + "time": 0.2667, + "value": 46.45, + "curve": [ 0.325, 46.45, 0.442, -41.7 ] + }, + { "time": 0.5, "value": -41.7 } + ] + }, + "zip-girl": { + "rotate": [ + { "value": -58.05 }, + { "time": 0.2667, "value": 39.41 }, + { "time": 0.5, "value": -58.05 } + ] + }, + "cape-blue-up-back": { + "translate": [ + { "x": 4.09, "y": 18.6 }, + { "time": 0.2333, "x": -1.94, "y": 26.9 }, + { "time": 0.4, "x": -16.98, "y": -4.67 }, + { "time": 0.5, "x": 4.09, "y": 18.6 } + ] + }, + "cape-blue-up-front": { + "rotate": [ + { "value": 29.46 }, + { "time": 0.1, "value": 3.72 }, + { "time": 0.2333, "value": 16.06 }, + { "time": 0.5, "value": 29.46 } + ], + "translate": [ + { "x": -71.16, "y": 31.75 }, + { "time": 0.1333, "x": -50, "y": -9.47 }, + { "time": 0.1667, "x": -42.48, "y": -7.43 }, + { "time": 0.2333, "x": -31.85, "y": -5.14 }, + { "time": 0.3, "x": -37.02, "y": -9.08 }, + { "time": 0.3333, "x": -38.94, "y": 0.58 }, + { "time": 0.5, "x": -71.16, "y": 31.75 } + ] + }, + "cape-blue-control": { + "translate": [ + { "x": -2.65, "y": 26.78 }, + { "time": 0.3333, "x": -4, "y": -11.89 }, + { "time": 0.5, "x": -2.65, "y": 26.78 } + ] + }, + "cape-blue-down-middle": { + "rotate": [ + {}, + { "time": 0.1, "value": 70 }, + { "time": 0.2333 }, + { "time": 0.3, "value": 26.98, "curve": "stepped" }, + { "time": 0.3667, "value": 26.98 }, + { "time": 0.4333, "value": -53.51 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.1, "x": -57.35, "y": 107.86 }, + { "time": 0.2333, "x": -9.59, "y": 70.22 }, + { "time": 0.3, "x": -26.45, "y": 24.76 }, + { "time": 0.3667, "x": -54.55, "y": -99.41 }, + { "time": 0.4333, "x": 17.73, "y": -52.5 }, + { "time": 0.5 } + ] + }, + "cape-blue-middle-front": { + "translate": [ + {}, + { "time": 0.1, "x": -15.52, "y": -29.87 }, + { "time": 0.2333, "x": -20.17, "y": -2.76 }, + { "time": 0.3, "x": -63.38, "y": -41.99 }, + { "time": 0.3667, "x": -54.56, "y": -87.37 }, + { "time": 0.4333, "x": -75.84, "y": 5.06 }, + { "time": 0.5 } + ] + }, + "cape-blue-down-front": { + "rotate": [ + {}, + { "time": 0.3, "value": 40 }, + { "time": 0.3667, "value": 47.02 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.1, "x": -18.48, "y": 53.81 }, + { "time": 0.2333, "x": 7.23, "y": 30.67 }, + { "time": 0.3, "x": -0.62, "y": 46.8 }, + { "time": 0.4333, "x": 86.5, "y": 36.31 }, + { "time": 0.5 } + ] + }, + "cape-blue-middle-back": { + "rotate": [ + { "time": 0.2333 }, + { "time": 0.3667, "value": -55.53 }, + { "time": 0.4333, "value": -6.88 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.1, "x": -73.12, "y": -23.88 }, + { "time": 0.3, "x": -37.25, "y": -63.52 }, + { "time": 0.3667, "x": -25.92, "y": -26.42 }, + { "time": 0.4, "x": -3.29, "y": 10.46 }, + { "time": 0.4667, "x": 16.29, "y": 27.33 }, + { "time": 0.5 } + ] + }, + "cape-blue-down-back": { + "rotate": [ + {}, + { "time": 0.4, "value": -68.85 }, + { "time": 0.4333, "value": 70 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.1, "x": 40.03, "y": -86.48 }, + { "time": 0.2333, "x": -44.05, "y": -50.7 }, + { "time": 0.3667, "x": -28.53, "y": -57.67 }, + { "time": 0.4, "x": -11.43, "y": -48.9 }, + { "time": 0.4333, "x": -67.63, "y": -55.15 }, + { "time": 0.5 } + ] + }, + "dress-control-middle": { + "translate": [ + {}, + { "time": 0.3333, "x": -3.98, "y": 2.65 }, + { "time": 0.5 } + ] + }, + "sleeve-control-front": { + "translate": [ + { "x": 11.85, "y": -21.65 }, + { "time": 0.2333 }, + { "time": 0.5, "x": 11.85, "y": -21.65 } + ] + }, + "dress-control-foot-front": { + "translate": [ + { "x": -56.84 } + ] + }, + "hand-front": { + "rotate": [ + { "value": -99.58 } + ], + "translate": [ + { "x": 6.48, "y": 8.82 } + ] + }, + "arm-front-control": { + "translate": [ + {}, + { "time": 0.1, "y": -2.65 }, + { "time": 0.3667, "x": 3.15, "y": -33.01 }, + { "time": 0.5 } + ] + }, + "skirt-control-back": { + "rotate": [ + { "value": 26.75 }, + { "time": 0.1667, "value": -8.61 }, + { "time": 0.5, "value": 26.75 } + ] + } + }, + "transform": { + "leg-down-back": [ + { "mixRotate": 0.269, "mixX": 0.234, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-down": [ + { "mixRotate": 0.394, "mixX": 0.177, "mixScaleX": 0, "mixShearY": 0 } + ] + } + }, + "dress-up": { + "slots": { + "eye-back-iris": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-back-iris" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-back-iris" } + ] + }, + "eye-back-pupil": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-back-pupil" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-back-pupil" } + ] + }, + "eye-back-white": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-back-white" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-back-white" } + ] + }, + "eye-front-iris": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-front-iris" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-front-iris" } + ] + }, + "eye-front-pupil": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-front-pupil" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-front-pupil" } + ] + }, + "eye-front-white": { + "attachment": [ + { "time": 0.1333 }, + { "time": 0.1732, "name": "eye-front-white" }, + { "time": 2.2667 }, + { "time": 2.3, "name": "eye-front-white" } + ] + } + }, + "bones": { + "head-control": { + "translate": [ + {}, + { "time": 0.3333, "x": -47.63, "y": -2.02 }, + { "time": 0.5, "x": -48.35, "y": 14.96 }, + { "time": 1, "x": -48.9, "y": 27.83 }, + { "time": 1.2, "x": -48.35, "y": 14.96 }, + { "time": 2.1, "x": -47.63, "y": -2.02 }, + { "time": 2.1667, "x": -55.53, "y": -2.36 }, + { "time": 2.3667, "x": 12.09, "y": 0.51 }, + { "time": 2.6667 } + ] + }, + "arm-front-up": { + "rotate": [ + {}, + { "time": 0.3333, "value": -29.05, "curve": "stepped" }, + { "time": 1.2, "value": -29.05 }, + { "time": 1.5, "value": -38.17, "curve": "stepped" }, + { "time": 2.0333, "value": -38.17 }, + { "time": 2.2, "value": -29.05 }, + { "time": 2.4667 } + ] + }, + "arm-back-up": { + "rotate": [ + {}, + { "time": 0.3333, "value": 27.32, "curve": "stepped" }, + { "time": 1.0667, "value": 27.32 }, + { "time": 1.5333, "value": 59.19, "curve": "stepped" }, + { "time": 2, "value": 59.19 }, + { "time": 2.2, "value": 27.32 }, + { "time": 2.4667 } + ] + }, + "arm-front-down": { + "rotate": [ + {}, + { "time": 0.3333, "value": 39.04, "curve": "stepped" }, + { "time": 1.1, "value": 39.04 }, + { "time": 1.5, "value": 124.78, "curve": "stepped" }, + { "time": 2.0333, "value": 124.78 }, + { "time": 2.2, "value": 39.04 }, + { "time": 2.4667 } + ] + }, + "arm-back-down": { + "rotate": [ + {}, + { "time": 0.3333, "value": 26.51, "curve": "stepped" }, + { "time": 1.0333, "value": 26.51 }, + { "time": 1.4333, "value": 64.82, "curve": "stepped" }, + { "time": 2.0333, "value": 64.82 }, + { "time": 2.2, "value": 26.51 }, + { "time": 2.4667 } + ] + }, + "hat-control": { + "translate": [ + {}, + { "time": 0.3333, "x": -37.66, "y": 3.71, "curve": "stepped" }, + { "time": 2.2, "x": -37.66, "y": 3.71 }, + { "time": 2.4667 } + ] + }, + "bag": { + "rotate": [ + {}, + { "time": 0.3333, "value": 21.75 }, + { "time": 0.6, "value": -13.81 }, + { "time": 0.8, "value": 2.42 }, + { "time": 1.1, "value": -8.03 }, + { "time": 1.3667, "value": -15.72 }, + { "time": 1.5333, "value": 12.7 }, + { "time": 1.7667, "value": -10.53 }, + { "time": 2.7667 } + ], + "translate": [ + {}, + { "time": 0.3333, "x": 0.82, "y": 10.9, "curve": "stepped" }, + { "time": 2.2, "x": 0.82, "y": 10.9 }, + { "time": 2.4667 } + ] + }, + "bag-control": { + "translate": [ + {}, + { "time": 0.3333, "x": -17.26, "y": -4.51 }, + { "time": 0.7667, "x": -30.2, "y": -6.03 }, + { "time": 1.3333, "x": 18.2, "y": 7.15 }, + { "time": 1.7, "x": -18.84, "y": -4.69 }, + { "time": 2.2, "x": -17.26, "y": -4.51 }, + { "time": 2.4667 } + ] + }, + "hips": { + "translate": [ + {}, + { "time": 0.1667, "x": -10.19, "y": -35.32 }, + { "time": 0.3333, "x": -106.82, "y": 2.91, "curve": "stepped" }, + { "time": 1.1667, "x": -106.82, "y": 2.91 }, + { "time": 1.4, "x": -20.38, "y": 2.91 }, + { "time": 1.5333, "x": -13.65 }, + { "time": 2.0667 }, + { "time": 2.1667, "y": -9.1 }, + { "time": 2.2667, "y": 11.63 }, + { "time": 2.3667 } + ] + }, + "eye-back-up-eyelid-holder": { + "translate": [ + { "time": 0.1 }, + { "time": 0.1183, "x": -2.99, "y": -4.35 }, + { "time": 0.1366, "x": -1.68, "y": -11.31, "curve": "stepped" }, + { "time": 0.1549, "x": -1.68, "y": -11.31 }, + { "time": 0.3333, "y": -5.82, "curve": "stepped" }, + { "time": 2.2333, "y": -5.82 }, + { "time": 2.2667, "x": -1.68, "y": -11.31, "curve": "stepped" }, + { "time": 2.3, "x": -1.68, "y": -11.31 }, + { "time": 2.4 } + ] + }, + "eye-front-up-eyelid-holder": { + "translate": [ + { "time": 0.1 }, + { "time": 0.1183, "y": -4.35 }, + { "time": 0.1366, "x": 0.27, "y": -12.4, "curve": "stepped" }, + { "time": 0.1549, "x": 0.27, "y": -12.4 }, + { "time": 0.3333, "y": -4.74, "curve": "stepped" }, + { "time": 2.2333, "y": -4.74 }, + { "time": 2.2667, "x": 0.27, "y": -12.4, "curve": "stepped" }, + { "time": 2.3, "x": 0.27, "y": -12.4 }, + { "time": 2.4 } + ] + }, + "eye-back-pupil": { + "translate": [ + {}, + { "time": 0.3333, "y": -5.53 }, + { "time": 0.4667, "x": -3, "y": -5.53 }, + { "time": 1.2, "x": -3.57, "y": -5.53 }, + { "time": 1.2667, "x": 6.08, "y": -5.53 }, + { "time": 2.2333, "x": 7.68, "y": -5.53 }, + { "time": 2.2667, "y": -5.53 }, + { "time": 2.4333 } + ] + }, + "eye-front-pupil": { + "translate": [ + {}, + { "time": 0.3333, "y": -5.53 }, + { "time": 0.4667, "x": -3, "y": -5.53 }, + { "time": 1.2, "x": -3.57, "y": -5.53 }, + { "time": 1.2667, "x": 6.08, "y": -5.53 }, + { "time": 2.2333, "x": 7.68, "y": -5.53 }, + { "time": 2.2667, "y": -5.53 }, + { "time": 2.4333 } + ] + }, + "eye-front-up-eyelid": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1183, "value": -42.34 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": -42.34 }, + { "time": 2.4 } + ] + }, + "eye-back-up-eyelid": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1183, "value": 35.83 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": 35.83 }, + { "time": 2.4 } + ] + }, + "eye-back-low-eyelid-holder": { + "rotate": [ + {}, + { "time": 0.1366, "value": 4.33, "curve": "stepped" }, + { "time": 2.3, "value": 4.33 }, + { "time": 2.7667 } + ], + "translate": [ + { "time": 0.1 }, + { "time": 0.1183, "x": -1.63, "y": 1.09 }, + { "time": 0.1366, "x": -1.09, "y": 6.52, "curve": "stepped" }, + { "time": 0.1549, "x": -1.09, "y": 6.52 }, + { "time": 0.1732, "x": -1.34, "y": -1.93 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "x": -1.09, "y": 6.52 }, + { "time": 2.3, "x": -1.34, "y": -1.93 }, + { "time": 2.4 } + ] + }, + "eye-front-low-eyelid-holder": { + "translate": [ + { "time": 0.1 }, + { "time": 0.1366, "x": -1.36, "y": 4.55, "curve": "stepped" }, + { "time": 0.1549, "x": -1.36, "y": 4.55 }, + { "time": 0.1732, "x": -1.36, "y": -3.51 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "x": -1.36, "y": 4.55 }, + { "time": 2.3, "x": -1.36, "y": -3.51 }, + { "time": 2.4 } + ] + }, + "eye-back-low-eyelid": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1366, "value": -27.26, "curve": "stepped" }, + { "time": 0.1549, "value": -27.26 }, + { "time": 0.1732, "value": -11.09 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": -27.26 }, + { "time": 2.3, "value": -11.09 }, + { "time": 2.4 } + ] + }, + "eye-front-low-eyelid": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1366, "value": 18.27, "curve": "stepped" }, + { "time": 0.1549, "value": 18.27 }, + { "time": 0.2646, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": 18.27, "curve": "stepped" }, + { "time": 2.3, "value": 18.27 }, + { "time": 2.4 } + ] + }, + "eye-front-eyebrow": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1333, "value": -14.81 }, + { "time": 0.2333, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": -14.81 }, + { "time": 2.3667 } + ], + "translate": [ + { "time": 0.1 }, + { "time": 0.1333, "y": -8.69 }, + { "time": 0.2333, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "y": -8.69 }, + { "time": 2.3667 } + ] + }, + "eye-back-eyebrow": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.1333, "value": 14.78 }, + { "time": 0.2333, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "value": 14.78 }, + { "time": 2.3667 } + ], + "translate": [ + { "time": 0.1 }, + { "time": 0.1333, "y": -8.69 }, + { "time": 0.2333, "curve": "stepped" }, + { "time": 2.2333 }, + { "time": 2.2667, "y": -8.69 }, + { "time": 2.3667 } + ] + }, + "mouth": { + "rotate": [ + { "time": 0.3 }, + { "time": 0.5, "value": -11.73, "curve": "stepped" }, + { "time": 1.3, "value": -11.73 }, + { "time": 2.2667 } + ], + "translate": [ + { "time": 0.3 }, + { "time": 0.4667, "x": -3.46, "curve": "stepped" }, + { "time": 2.0667, "x": -3.46 }, + { "time": 2.1667, "x": -2.51, "y": -3.46 }, + { "time": 2.3667 } + ], + "scale": [ + { "time": 0.3 }, + { "time": 0.5333, "x": 0.778, "curve": "stepped" }, + { "time": 1.3, "x": 0.778 }, + { "time": 2.5333 } + ] + }, + "foot-front-IK": { + "translate": [ + {}, + { "time": 0.1667, "x": -90.11, "curve": "stepped" }, + { "time": 2.1, "x": -90.11 }, + { "time": 2.1667, "x": -60.07, "y": 11.03 }, + { "time": 2.3 } + ] + }, + "foot-front": { + "rotate": [ + { "time": 2.1 }, + { "time": 2.1667, "value": -15.81 }, + { "time": 2.2667 } + ] + }, + "hat": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.2667, "value": -13.9 }, + { "time": 0.6333, "value": 6.22 }, + { "time": 0.8333, "value": -1.48 }, + { "time": 1.0333, "value": 2.37 }, + { "time": 1.3667, "value": 12.29 }, + { "time": 1.6, "value": 1.92 }, + { "time": 2.2333, "value": 5.19 }, + { "time": 2.4, "value": -2.09 }, + { "time": 2.6, "value": 0.86 } + ] + }, + "hat-base": { + "translate": [ + { "time": 0.0667 }, + { "time": 0.6333, "x": 0.71, "y": -16.67, "curve": "stepped" }, + { "time": 2.2, "x": 0.71, "y": -16.67 }, + { "time": 2.4 } + ] + }, + "hair-side-front": { + "rotate": [ + {}, + { "time": 0.3667, "value": 13.8 }, + { "time": 0.6, "value": -10.12 }, + { "time": 0.8333, "value": 1.06 }, + { "time": 1.4333, "value": -18.54 }, + { "time": 1.7, "value": -2.53 }, + { "time": 1.9, "value": -7.78 }, + { "time": 2.3, "value": -0.26 }, + { "time": 2.5, "value": -4.54 }, + { "time": 2.7, "value": 0.58 }, + { "time": 2.7667 } + ] + }, + "hair-side-back": { + "rotate": [ + {}, + { "time": 0.3667, "value": 13.8 }, + { "time": 0.6, "value": -10.12 }, + { "time": 0.8333, "value": 1.06 }, + { "time": 1.4333, "value": -18.54 }, + { "time": 1.7, "value": -2.53 }, + { "time": 1.9, "value": -7.78 }, + { "time": 2.3, "value": -0.26 }, + { "time": 2.5, "value": -4.54 }, + { "time": 2.7, "value": 0.58 }, + { "time": 2.7667 } + ] + }, + "hair-bangs-front": { + "rotate": [ + {}, + { "time": 0.3667, "value": 13.8 }, + { "time": 0.6, "value": -10.12 }, + { "time": 0.8333, "value": 1.06 }, + { "time": 1.4333, "value": -18.54 }, + { "time": 1.7, "value": -2.53 }, + { "time": 1.9, "value": -7.78 }, + { "time": 2.3, "value": -0.26 }, + { "time": 2.5, "value": -4.54 }, + { "time": 2.7, "value": 0.58 }, + { "time": 2.7667 } + ] + }, + "hair-bangs-back": { + "rotate": [ + {}, + { "time": 0.3667, "value": 13.8 }, + { "time": 0.6, "value": -10.12 }, + { "time": 0.8333, "value": 1.06 }, + { "time": 1.4333, "value": -18.54 }, + { "time": 1.7, "value": -2.53 }, + { "time": 1.9, "value": -7.78 }, + { "time": 2.3, "value": -0.26 }, + { "time": 2.5, "value": -4.54 }, + { "time": 2.7, "value": 0.58 }, + { "time": 2.7667 } + ] + }, + "hand-back": { + "rotate": [ + { "time": 1.2667 }, + { "time": 1.4667, "value": -36.05, "curve": "stepped" }, + { "time": 2.0333, "value": -36.05 }, + { "time": 2.1667 } + ] + }, + "hair-strand-front-1": { + "rotate": [ + {}, + { "time": 0.3667, "value": 11.03 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.8667, "value": 7.77 }, + { "time": 1.1667, "value": 5.56 }, + { "time": 1.4, "value": -19.57 }, + { "time": 1.6667, "value": 1.37 }, + { "time": 1.9333, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-front-3": { + "rotate": [ + {}, + { "time": 0.4333, "value": 14.31 }, + { "time": 0.6333, "value": 2.76 }, + { "time": 0.9333, "value": 7.77 }, + { "time": 1.2, "value": 5.56 }, + { "time": 1.4333, "value": -19.57 }, + { "time": 1.7, "value": 1.37 }, + { "time": 1.9667, "value": -8.18 }, + { "time": 2.4333, "value": -4.06 }, + { "time": 2.7333, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-back-1": { + "rotate": [ + {}, + { "time": 0.3667, "value": 12.66 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.8667, "value": 7.77 }, + { "time": 1.1667, "value": 5.56 }, + { "time": 1.4, "value": -19.57 }, + { "time": 1.6667, "value": 1.37 }, + { "time": 1.9333, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-back-2": { + "rotate": [ + {}, + { "time": 0.2333, "value": 24.27 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.9333, "value": 7.77 }, + { "time": 1.2333, "value": 5.56 }, + { "time": 1.4333, "value": -19.57 }, + { "time": 1.7333, "value": 1.37 }, + { "time": 1.9667, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-back-3": { + "rotate": [ + {}, + { "time": 0.3667, "value": 24.27 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.8667, "value": 7.77 }, + { "time": 1.1667, "value": 5.56 }, + { "time": 1.4, "value": -19.57 }, + { "time": 1.6667, "value": 1.37 }, + { "time": 1.9333, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-front-2": { + "rotate": [ + {}, + { "time": 0.3667, "value": 9.64 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.8667, "value": 7.77 }, + { "time": 1.1667, "value": 5.56 }, + { "time": 1.4, "value": -19.57 }, + { "time": 1.6667, "value": 1.37 }, + { "time": 1.9333, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "hair-strand-front-4": { + "rotate": [ + {}, + { "time": 0.3667, "value": 24.27 }, + { "time": 0.5667, "value": 2.76 }, + { "time": 0.8667, "value": 7.77 }, + { "time": 1.1667, "value": 5.56 }, + { "time": 1.4, "value": -19.57 }, + { "time": 1.6667, "value": 1.37 }, + { "time": 1.9333, "value": -8.18 }, + { "time": 2.3667, "value": -4.06 }, + { "time": 2.6667, "value": -10.62 }, + { "time": 2.7667 } + ] + }, + "scarf-back": { + "rotate": [ + {}, + { "time": 0.4, "value": 11.79 }, + { "time": 0.6333, "value": -3.23 }, + { "time": 0.8667, "value": 3.81 }, + { "time": 1.3667, "value": 0.28 }, + { "time": 1.6667, "value": 8.68 }, + { "time": 1.9333, "value": 2.43 }, + { "time": 2.2333, "value": -2.29 }, + { "time": 2.4667, "value": 12.44 }, + { "time": 2.7, "value": -1.01 }, + { "time": 2.7667 } + ] + }, + "skirt-rotation-back": { + "rotate": [ + {}, + { "time": 0.2667, "value": 17.27 }, + { "time": 0.5333, "value": -4.07 }, + { "time": 0.8, "value": 7.18 }, + { "time": 1.3667, "value": -8.51 }, + { "time": 1.7, "value": 3.22 }, + { "time": 2, "value": -4.66 }, + { "time": 2.3667, "value": -3.6 }, + { "time": 2.7667 } + ] + }, + "skirt-rotation-front": { + "rotate": [ + {}, + { "time": 0.2667, "value": 17.27 }, + { "time": 0.5333, "value": -4.07 }, + { "time": 0.8, "value": 7.18 }, + { "time": 1.3667, "value": -8.51 }, + { "time": 1.7, "value": 3.22 }, + { "time": 2, "value": -4.66 }, + { "time": 2.3667, "value": -3.6 }, + { "time": 2.7667 } + ] + }, + "skirt-control": { + "translate": [ + {}, + { "time": 0.3, "x": -56.15 }, + { "time": 0.5333, "x": -128.57, "y": -5.35 }, + { "time": 0.6, "x": -111.57, "y": 3.12 }, + { "time": 0.7333, "x": -77.55, "curve": "stepped" }, + { "time": 1.1, "x": -77.55 }, + { "time": 1.3667, "x": -72.2, "y": 17.38 }, + { "time": 1.6667, "x": -24.07 }, + { "time": 1.8333, "x": -2.67 }, + { "time": 2, "x": -28.08, "y": 8.02 }, + { "time": 2.2667, "x": 5.35 }, + { "time": 2.4667, "x": 3.21, "y": 16.04 }, + { "time": 2.7667 } + ] + }, + "skirt-control-middle": { + "translate": [ + {}, + { "time": 0.2, "x": -13.37, "y": -33.42 }, + { "time": 0.5667, "x": 5.92, "y": 24.83 }, + { "time": 1.1667, "x": 5.92, "y": 24.83 }, + { "time": 1.4, "x": -3.11, "y": 35.48 }, + { "time": 2.3, "x": 12.15, "y": 12.12 }, + { "time": 2.7667 } + ] + }, + "skirt-control-front-down": { + "translate": [ + {}, + { "time": 0.2333, "x": -12.91, "y": 3.49 }, + { "time": 0.7, "x": 8.16, "y": 1.87 }, + { "time": 2.5333, "x": -15.11, "y": -0.38 }, + { "time": 2.7667 } + ] + }, + "skirt-control-back-down": { + "translate": [ + {}, + { "time": 0.2333, "x": -12.91, "y": 3.49 }, + { "time": 0.7, "x": 8.16, "y": 1.87 }, + { "time": 2.5333, "x": -15.11, "y": -0.38 }, + { "time": 2.7667 } + ] + }, + "cape-back-rotator": { + "rotate": [ + { "time": 1.9667 }, + { "time": 2.2333, "value": 10.12 }, + { "time": 2.4333, "value": -21.92 }, + { "time": 2.6667 } + ] + }, + "cape-front-rotator": { + "rotate": [ + { "time": 0.2667 }, + { "time": 0.4, "value": -11.53 }, + { "time": 0.5667 } + ] + }, + "sleeve-control-back": { + "rotate": [ + {}, + { "time": 0.3333, "value": -0.24, "curve": "stepped" }, + { "time": 0.9667, "value": -0.24 }, + { "time": 1.5333, "value": -31.01, "curve": "stepped" }, + { "time": 2.0333, "value": -31.01 }, + { "time": 2.1667, "value": 14.58 }, + { "time": 2.4667 } + ], + "translate": [ + {}, + { "time": 0.3333, "x": 6.58, "y": -16.19, "curve": "stepped" }, + { "time": 0.9667, "x": 6.58, "y": -16.19 }, + { "time": 1.5333, "x": 12.34, "y": -45.5, "curve": "stepped" }, + { "time": 2.0333, "x": 12.34, "y": -45.5 }, + { "time": 2.1667, "x": -6.58, "y": -28.25 }, + { "time": 2.4667 } + ] + }, + "sleeve-control-front": { + "rotate": [ + { "time": 0.9333 }, + { "time": 1.3, "value": 22.58 }, + { "time": 1.5667 } + ], + "translate": [ + { "time": 0.9333 }, + { "time": 1.3, "x": 36.42, "y": -18.93 }, + { "time": 1.5667, "x": 1.75, "y": -23.26, "curve": "stepped" }, + { "time": 2.1333, "x": 1.75, "y": -23.26 }, + { "time": 2.3333 } + ] + }, + "cape-blue-up-front": { + "rotate": [ + {}, + { "time": 0.3667, "value": 23.6, "curve": "stepped" }, + { "time": 2.0333, "value": 23.6 }, + { "time": 2.3667 } + ], + "translate": [ + {}, + { "time": 0.3667, "x": -34.1, "y": 21.4 }, + { "time": 0.6, "x": -21.04, "y": 7.34, "curve": "stepped" }, + { "time": 1.0333, "x": -21.04, "y": 7.34 }, + { "time": 1.4, "x": -31.5, "y": 14.58, "curve": "stepped" }, + { "time": 2.0667, "x": -31.5, "y": 14.58 }, + { "time": 2.3667 } + ] + }, + "cape-blue-up-back": { + "translate": [ + { "time": 2.3333 }, + { "time": 2.4667, "x": 3.77, "y": 14.35 }, + { "time": 2.7333 } + ] + }, + "cape-blue-up": { + "rotate": [ + {}, + { "time": 0.3667, "value": 13.4 }, + { "time": 1.3333, "value": -12.27 }, + { "time": 1.6667, "value": 13.33 }, + { "time": 1.9667, "value": -7.94 }, + { "time": 2.2333, "value": -0.51 }, + { "time": 2.5, "value": 1.05 }, + { "time": 2.7667 } + ] + }, + "cape-blue-down-middle": { + "rotate": [ + {}, + { "time": 0.5333, "value": 15.72 }, + { "time": 0.8667, "value": 4.92 }, + { "time": 1, "value": -1.14 }, + { "time": 1.5, "value": -12.27 }, + { "time": 1.8333, "value": 13.33 }, + { "time": 2.1333, "value": -7.94 }, + { "time": 2.4, "value": -0.51 }, + { "time": 2.6667, "value": 1.05 }, + { "time": 2.7667 } + ] + }, + "cape-blue-down": { + "rotate": [ + { "time": 0.1667 }, + { "time": 0.4667, "value": 15.72 }, + { "time": 0.7333, "value": -0.94 }, + { "time": 1.2333, "value": 21.3 }, + { "time": 1.4333, "value": -12.27 }, + { "time": 1.7667, "value": 8.41 }, + { "time": 2.0667, "value": -7.94 }, + { "time": 2.3333, "value": -0.51 }, + { "time": 2.6, "value": 1.05 }, + { "time": 2.7667 } + ] + }, + "zip-boy": { + "rotate": [ + {}, + { "time": 0.3667, "value": 19.76 }, + { "time": 0.6333, "value": -10.84 }, + { "time": 0.9, "value": -0.83 }, + { "time": 1.4333, "value": -28.17 }, + { "time": 1.8, "value": 1.4 }, + { "time": 2.0667, "value": -20.87 }, + { "time": 2.5667, "value": 5.59 }, + { "time": 2.7667 } + ] + }, + "backpack-control": { + "translate": [ + {}, + { "time": 0.1333, "x": -30.4, "y": 15.74 }, + { "time": 0.3, "x": 31.22, "y": 18.44 }, + { "time": 0.5, "x": -39.56, "y": 29.69 }, + { "time": 0.8, "x": 3.08, "y": 31.64, "curve": "stepped" }, + { "time": 1.2, "x": 3.08, "y": 31.64 }, + { "time": 1.4, "x": -1.97, "y": -20.19 }, + { "time": 1.7, "x": 1.17, "y": 12.05 }, + { "time": 2, "x": -0.47, "y": -4.82 }, + { "time": 2.3333, "x": 1.17, "y": 12.05 }, + { "time": 2.7667 } + ] + }, + "zip-girl": { + "rotate": [ + {}, + { "time": 0.3667, "value": 19.76 }, + { "time": 0.6333, "value": -10.84 }, + { "time": 0.9, "value": -0.83 }, + { "time": 1.4333, "value": -28.17 }, + { "time": 1.8, "value": 1.4 }, + { "time": 2.0667, "value": -20.87 }, + { "time": 2.5667, "value": 5.59 }, + { "time": 2.7667 } + ] + }, + "bag-back-front": { + "translate": [ + { "time": 1.1333 }, + { "time": 1.3333, "x": 11.85, "y": 4.61 }, + { "time": 1.6667 } + ] + }, + "bag-flap": { + "translate": [ + { "time": 0.6333 }, + { "time": 0.7, "x": 15.39, "y": -1 }, + { "time": 0.8667, "x": -2.69, "y": -2.82 }, + { "time": 1.2, "x": 13.95, "y": 2.75 }, + { "time": 1.3667, "x": 51.87, "y": -4.32 }, + { "time": 1.6, "x": 15.66, "y": -1.7 }, + { "time": 1.8333, "x": 2.36, "y": -4.34 }, + { "time": 2.0667, "x": 18.23, "y": 0.81 }, + { "time": 2.7667 } + ] + }, + "cape-blue-middle-back": { + "rotate": [ + {}, + { "time": 0.5333, "value": -20.99 }, + { "time": 2.3 } + ], + "translate": [ + {}, + { "time": 1.3333, "x": -64.75, "y": 53.37 }, + { "time": 1.4667, "x": -94.98, "y": 37.57 }, + { "time": 1.7, "x": -40.49, "y": 13.55 }, + { "time": 1.8, "x": -9.86, "y": 26.36 }, + { "time": 1.9667, "x": -75.79, "y": 7.62 }, + { "time": 2.3 } + ] + }, + "cape-blue-middle-front": { + "translate": [ + { "time": 0.1667 }, + { "time": 0.5333, "x": -27.07, "y": -64.48 }, + { "time": 0.8667 } + ] + }, + "dress-control-leg-down-front": { + "rotate": [ + { "time": 1.1 }, + { "time": 1.5, "value": -25.13 } + ], + "translate": [ + { "time": 0.1333 }, + { "time": 0.3667, "x": -97.47, "curve": "stepped" }, + { "time": 1.1, "x": -97.47 }, + { "time": 1.5, "x": -57.21 } + ] + }, + "dress-control-middle": { + "translate": [ + {}, + { "time": 0.4, "x": -46.62 }, + { "time": 1.2333, "x": -46.26 }, + { "time": 1.5667, "x": -29.74, "curve": "stepped" }, + { "time": 2.2333, "x": -29.74 }, + { "time": 2.5333 } + ] + }, + "cape-blue-down-front": { + "rotate": [ + {}, + { "time": 0.4, "value": 38.86 }, + { "time": 0.8667, "value": -51.06 }, + { "time": 1.1667, "value": 32.14 }, + { "time": 1.3667, "value": 3 }, + { "time": 2.3667, "value": 0.86 }, + { "time": 2.5667, "value": 11.18 }, + { "time": 2.7667 } + ] + }, + "cape-blue-down-back": { + "rotate": [ + { "time": 1.1 }, + { "time": 1.5333, "value": -43.88 }, + { "time": 1.8333, "value": -9.8 }, + { "time": 2.7667 } + ], + "translate": [ + { "time": 1.1333 }, + { "time": 1.5333, "x": -97.95, "y": -18.04 }, + { "time": 1.7, "x": -12.52, "y": -46.08 }, + { "time": 1.8333, "x": -14.67, "y": 15 }, + { "time": 2.7667 } + ] + } + }, + "transform": { + "leg-down-back": [ + { "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.1333, "mixRotate": 0, "mixX": 0.026, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 1.1667, "mixRotate": 0, "mixX": 0.026, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 1.2667, "mixRotate": 0.1905, "mixX": 0.2115, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 1.5333, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 2.0667, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 2.1, "mixRotate": 0.217, "mixX": 0.078, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 2.4667, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-down": [ + { "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.0667, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.3333, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 1.0667, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 1.3667, "mixX": 0.774, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 2.7667, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-front": [ + { "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.2333, "mixX": 0.609, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.3667, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 2.1, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 2.5, "mixScaleX": 0, "mixShearY": 0 } + ] + } + }, + "idle": { + "bones": { + "hips": { + "translate": [ + { + "x": 9.34, + "y": -2.33, + "curve": [ 0.179, 9.34, 0.471, 10.59, 0.179, -2.33, 0.471, -2.96 ] + }, + { + "time": 0.7333, + "x": 11.53, + "y": -3.43, + "curve": [ 0.899, 10.31, 1.054, 9.34, 0.899, -2.82, 1.054, -2.33 ] + }, + { "time": 1.1667, "x": 9.34, "y": -2.33 } + ] + }, + "body-up": { + "rotate": [ + { "value": -0.34 }, + { "time": 0.6, "value": 1.7 }, + { "time": 1.1667, "value": -0.34 } + ], + "translate": [ + {}, + { "time": 0.4667, "x": 5.83, "y": -0.23 }, + { "time": 1.1667 } + ] + }, + "arm-front-up": { + "rotate": [ + { "value": -12.12 }, + { "time": 0.5, "value": -14.38 }, + { "time": 0.9, "value": -12.34 }, + { "time": 1.1667, "value": -12.12 } + ] + }, + "arm-front-down": { + "rotate": [ + { "value": 28.61 }, + { "time": 0.3667, "value": 16.76 }, + { "time": 1, "value": 33.35 }, + { "time": 1.1667, "value": 28.61 } + ] + }, + "arm-back-up": { + "rotate": [ + { "value": -2.69 }, + { "time": 0.3333, "value": 5.25 }, + { "time": 0.9667, "value": -2.18 }, + { "time": 1.1667, "value": -2.69 } + ] + }, + "arm-back-down": { + "rotate": [ + { "value": 21.54 }, + { "time": 0.3333, "value": 2.11 }, + { "time": 0.8333, "value": 31.21 }, + { "time": 1.1667, "value": 21.54 } + ] + }, + "body-down": { + "rotate": [ + { + "curve": [ 0.117, 0, 0.35, -0.13 ] + }, + { + "time": 0.4667, + "value": -0.13, + "curve": [ 0.968, -0.14, 0.992, 0 ] + }, + { "time": 1.1667 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.275, -1.62 ] + }, + { + "time": 0.3667, + "value": -1.62, + "curve": [ 0.567, -1.62, 0.967, 0 ] + }, + { "time": 1.1667 } + ] + }, + "hair-strand-front-4": { + "rotate": [ + {}, + { "time": 0.7333, "value": -6.05 }, + { "time": 1.1667 } + ] + }, + "hair-strand-front-2": { + "rotate": [ + {}, + { "time": 0.4333, "value": -10.79 }, + { "time": 1.1667 } + ] + }, + "hair-strand-front-3": { + "rotate": [ + {}, + { "time": 0.6, "value": -11.49 }, + { "time": 1.1667 } + ] + }, + "hair-strand-front-1": { + "rotate": [ + {}, + { "time": 0.7333, "value": -10.79 }, + { "time": 1.1667 } + ] + }, + "hair-strand-back-2": { + "rotate": [ + {}, + { "time": 0.5667, "value": -12.75 }, + { "time": 1.1667 } + ] + }, + "hair-strand-back-3": { + "rotate": [ + {}, + { "time": 0.3333, "value": -8.16 }, + { "time": 1.1667 } + ] + }, + "hair-strand-back-1": { + "rotate": [ + {}, + { "time": 0.5333, "value": -6.11 }, + { "time": 1.1667 } + ] + }, + "scarf-back": { + "rotate": [ + {}, + { "time": 0.4667, "value": 5.82 }, + { "time": 1.1667 } + ] + }, + "head-control": { + "translate": [ + {}, + { "time": 0.4, "x": -10.56, "y": -3.74 }, + { "time": 1.1667 } + ] + }, + "hair-side-front": { + "rotate": [ + {}, + { "time": 0.3333, "value": -5.84 }, + { "time": 0.8, "value": 2.68 }, + { "time": 1.1667 } + ] + }, + "hair-side-back": { + "rotate": [ + {}, + { "time": 0.3333, "value": -3.31 }, + { "time": 0.8, "value": 3.56 }, + { "time": 1.1667 } + ] + }, + "hair-bangs-front": { + "rotate": [ + {}, + { "time": 0.4333, "value": 8.38 }, + { "time": 0.8, "value": 8.31 }, + { "time": 1.1667 } + ] + }, + "hair-bangs-back": { + "rotate": [ + {}, + { "time": 0.4333, "value": -13.14 }, + { "time": 0.8, "value": -2.84 }, + { "time": 1.1667 } + ] + }, + "hat": { + "rotate": [ + {}, + { "time": 0.4, "value": -5.13 }, + { "time": 0.8667, "value": 5.56 }, + { "time": 1.1667 } + ] + }, + "hat-control": { + "translate": [ + {}, + { "time": 0.5333, "x": -16.39, "y": -19.27 }, + { "time": 1.1667 } + ] + }, + "zip-girl": { + "rotate": [ + {}, + { "time": 0.2667, "value": -7.05 }, + { "time": 0.6333, "value": -2.82 }, + { "time": 0.9333, "value": -6.4 }, + { "time": 1.1667 } + ] + }, + "bag": { + "rotate": [ + {}, + { "time": 0.5667, "value": -6.05 }, + { "time": 0.9333, "value": 3.23 }, + { "time": 1.1667 } + ], + "translate": [ + {}, + { "time": 0.3333, "x": 1.12, "y": 11.76 }, + { "time": 1.1667 } + ] + }, + "bag-control": { + "translate": [ + {}, + { "time": 0.4667, "x": -17.12, "y": -0.3 }, + { "time": 1.1667 } + ] + }, + "cape-blue-up": { + "rotate": [ + {}, + { "time": 0.5667, "value": -5.28 }, + { "time": 1.1667 } + ] + }, + "cape-blue-middle-front": { + "translate": [ + {}, + { "time": 0.4333, "x": 10.87, "y": -26.11 }, + { "time": 0.8333, "x": 4.94, "y": -10.56 }, + { "time": 1.1667 } + ] + }, + "cape-blue-middle-back": { + "translate": [ + {}, + { "time": 0.4333, "x": 0.09, "y": -6.56 }, + { "time": 0.8333, "x": 0.04, "y": -1.67 }, + { "time": 1.1667 } + ] + }, + "cape-blue-down-front": { + "translate": [ + {}, + { "time": 0.3333, "x": 2.54, "y": 27.58 }, + { "time": 0.7, "x": 1.66, "y": -5.56 }, + { "time": 1.1667 } + ] + }, + "cape-blue-down-back": { + "translate": [ + {}, + { "time": 0.3333, "x": 0.04, "y": -13.13 }, + { "time": 0.8333, "x": -0.01, "y": -24.95 }, + { "time": 1.1667 } + ] + }, + "cape-blue-up-front": { + "rotate": [ + {}, + { "time": 0.3333, "value": 2.56 }, + { "time": 0.7667, "value": -0.44 }, + { "time": 1.1667 } + ], + "translate": [ + {}, + { + "time": 0.5, + "x": -8.76, + "y": 13.54, + "curve": [ 0.667, -8.76, 1, 0, 0.667, 13.54, 1, 0 ] + }, + { "time": 1.1667 } + ] + }, + "cape-blue-control": { + "translate": [ + {}, + { "time": 0.5333, "x": 7.66 }, + { "time": 1.1667 } + ] + }, + "dress-control-leg-down-front": { + "translate": [ + {}, + { "time": 0.5333, "x": 1.91, "y": -7.42 }, + { "time": 1.1667 } + ] + }, + "dress-control-leg-up-front": { + "translate": [ + {}, + { "time": 0.5333, "x": -0.01, "y": -7.66 }, + { "time": 1.1667 } + ] + }, + "dress-control-leg-down-back": { + "translate": [ + {}, + { "time": 0.5333, "x": 1.5, "y": -7.52 }, + { "time": 1.1667 } + ] + }, + "dress-control-leg-up-back": { + "translate": [ + {}, + { "time": 0.5333, "x": -0.61, "y": -7.64 }, + { "time": 1.1667 } + ] + }, + "cape-red-front-inside": { + "translate": [ + {}, + { "time": 0.4333, "x": 0.64, "y": 6.68 }, + { "time": 1.1667 } + ] + }, + "cape-red-back-inside": { + "translate": [ + {}, + { "time": 0.6667, "x": 0.64, "y": 6.68 }, + { "time": 1.1667 } + ] + }, + "skirt-rotation-back": { + "rotate": [ + {}, + { "time": 0.3667, "value": -2.3 }, + { "time": 1.1667 } + ] + }, + "skirt-rotation-front": { + "rotate": [ + {}, + { "time": 0.5333, "value": -3.07 }, + { "time": 1.1667 } + ] + }, + "backpack-control": { + "translate": [ + {}, + { "time": 0.4, "x": 15.06, "y": 4.96 }, + { "time": 0.7333, "x": -8.66, "y": 12.95 }, + { "time": 1.1667 } + ] + }, + "zip-boy": { + "rotate": [ + {}, + { "time": 0.3333, "value": -12.26 }, + { "time": 0.6333 }, + { "time": 0.9, "value": -12.26 }, + { "time": 1.1667 } + ] + }, + "skirt-control-middle": { + "translate": [ + {}, + { "time": 0.7667, "x": -7.43 }, + { "time": 1.1667 } + ] + }, + "skirt-control-up": { + "translate": [ + {}, + { "time": 0.7333, "x": 18.07, "y": 6.94 }, + { "time": 1.1667 } + ] + } + } + }, + "walk": { + "bones": { + "head-control": { + "translate": [ + { "x": 0.76, "y": -48.95 }, + { "time": 0.2333, "x": -14.41, "y": -38.22 }, + { "time": 0.3667, "x": 0.76, "y": -30.16 }, + { "time": 0.5333, "x": -9.39, "y": -42.69 }, + { "time": 0.6667, "x": 0.76, "y": -48.95 } + ] + }, + "features-control": { + "scale": [ + { "x": 0.856 } + ] + }, + "eye-front-pupil": { + "translate": [ + { "x": 8.95 }, + { "time": 0.3, "x": 14.07, "y": -1.22 }, + { "time": 0.6667, "x": 8.95 } + ] + }, + "eye-back-pupil": { + "translate": [ + { "x": 8.95 }, + { "time": 0.3, "x": 14.07, "y": -1.22 }, + { "time": 0.6667, "x": 8.95 } + ] + }, + "eye-back": { + "translate": [ + { "x": 2.24 } + ], + "scale": [ + { "x": 0.799 } + ] + }, + "eye-front": { + "scale": [ + { "x": 1.182 } + ] + }, + "foot-front-IK": { + "translate": [ + { "x": 170.4, "y": 49.42 }, + { "time": 0.0333, "x": 168.7, "y": -1.7 }, + { "time": 0.3, "x": -92.75, "y": -1.7 }, + { "time": 0.4333, "x": -34.08, "y": 47.71 }, + { "time": 0.6667, "x": 170.4, "y": 49.42 } + ] + }, + "leg-up": { + "translate": [ + { "x": 30.67 } + ] + }, + "foot-back-IK": { + "translate": [ + { "x": -168.7 }, + { "time": 0.1, "x": -123.6, "y": 42.6 }, + { "time": 0.3, "x": 52.82, "y": 50.97 }, + { "time": 0.3667, "x": 82.52, "y": -0.62 }, + { "time": 0.6667, "x": -168.7 } + ] + }, + "leg-up-back": { + "translate": [ + { "x": -28.97 } + ] + }, + "arm-back-control": { + "translate": [ + { "y": 5.61 } + ] + }, + "arm-front-control": { + "translate": [ + { "y": -4.58 } + ] + }, + "body-up": { + "rotate": [ + { "value": -15.04 }, + { "time": 0.3, "value": -3.33 }, + { "time": 0.6667, "value": -15.04 } + ] + }, + "neck": { + "rotate": [ + { "value": 8.91 } + ] + }, + "arm-front-down": { + "rotate": [ + { "value": -13.74 }, + { "time": 0.1, "value": -33.82 }, + { "time": 0.4, "value": 36.45 }, + { "time": 0.6667, "value": -13.74 } + ] + }, + "arm-front-up": { + "rotate": [ + { "value": -7.66 }, + { "time": 0.3, "value": 33.47 }, + { "time": 0.6667, "value": -7.66 } + ] + }, + "foot-front": { + "rotate": [ + { "value": 29.81 }, + { "time": 0.1, "curve": "stepped" }, + { "time": 0.3 }, + { "time": 0.3667, "value": -34.4 }, + { "time": 0.4667, "value": -33.47 }, + { "time": 0.6667, "value": 29.81 } + ] + }, + "foot-back": { + "rotate": [ + {}, + { "time": 0.0333, "value": -38.36 }, + { "time": 0.2333, "value": -55.8 }, + { "time": 0.3, "value": 27.44 }, + { "time": 0.4 } + ] + }, + "hips": { + "translate": [ + { "y": -20.45 }, + { "time": 0.0333, "y": -30.67 }, + { "time": 0.1, "y": -5.11 }, + { "time": 0.2333 }, + { "time": 0.3667, "y": -30.67 }, + { "time": 0.4, "y": -5.11 }, + { "time": 0.4667 }, + { "time": 0.6667, "y": -20.45 } + ] + }, + "arm-back-down": { + "rotate": [ + { "value": 23.02 }, + { "time": 0.1, "value": 43.78 }, + { "time": 0.4, "value": -28.87 }, + { "time": 0.6667, "value": 23.02 } + ], + "scale": [ + { "x": 0.637 }, + { "time": 0.2667, "x": 0.755 }, + { "time": 0.6667, "x": 0.637 } + ] + }, + "arm-back-up": { + "rotate": [ + { "value": 38.53 }, + { "time": 0.3667, "value": -24.46 }, + { "time": 0.6667, "value": 38.53 } + ] + }, + "skirt-control": { + "translate": [ + { "y": -17.04 }, + { "time": 0.1333, "y": 35.78 }, + { "time": 0.3, "y": -17.04 }, + { "time": 0.4333, "y": 35.78 }, + { "time": 0.6667, "y": -17.04 } + ] + }, + "skirt-rotation-back": { + "rotate": [ + {}, + { "time": 0.1, "value": 23.48 }, + { "time": 0.2667, "value": -2.5 }, + { "time": 0.4667, "value": 27.3 }, + { "time": 0.6667 } + ] + }, + "skirt-rotation-front": { + "rotate": [ + { "value": -12.71 }, + { "time": 0.1333 }, + { "time": 0.2667, "value": -21.18 }, + { "time": 0.4333 }, + { "time": 0.5333, "value": -21.18 }, + { "time": 0.6667, "value": -12.71 } + ] + }, + "skirt-control-middle": { + "translate": [ + {}, + { "time": 0.1, "x": -17.04 }, + { "time": 0.2333, "x": 1.7 }, + { "time": 0.3 }, + { "time": 0.4, "x": -17.04 }, + { "time": 0.4667, "x": 1.7 }, + { "time": 0.6667 } + ] + }, + "skirt-control-front-down": { + "translate": [ + {}, + { "time": 0.1, "x": -17.04 }, + { "time": 0.2333, "x": 1.7 }, + { "time": 0.3 }, + { "time": 0.4, "x": -17.04 }, + { "time": 0.4667, "x": 1.7 }, + { "time": 0.6667 } + ] + }, + "skirt-control-back-down": { + "translate": [ + {}, + { "time": 0.1, "x": -17.04 }, + { "time": 0.2333, "x": 1.7 }, + { "time": 0.3 }, + { "time": 0.4, "x": -17.04 }, + { "time": 0.4667, "x": 1.7 }, + { "time": 0.6667 } + ] + }, + "head": { + "rotate": [ + { "value": 2.83 }, + { "time": 0.1333, "value": -0.34 }, + { "time": 0.4333, "value": 7.06 }, + { "time": 0.6667, "value": 2.83 } + ] + }, + "hair-side-front": { + "rotate": [ + {}, + { "time": 0.2333, "value": -19.54 }, + { "time": 0.6667 } + ], + "scale": [ + { "time": 0.1 }, + { "time": 0.3, "x": 0.915 }, + { "time": 0.6 } + ] + }, + "hat": { + "rotate": [ + { "value": -5 }, + { "time": 0.1333, "value": -30.58 }, + { "time": 0.4333, "value": 29.1 }, + { "time": 0.6667, "value": -5 } + ] + }, + "body-down": { + "rotate": [ + {}, + { "time": 0.3, "value": -5.53 }, + { "time": 0.6667 } + ] + }, + "backpack": { + "rotate": [ + {}, + { "time": 0.3, "value": 0.81 }, + { "time": 0.6667 } + ], + "translate": [ + {}, + { "time": 0.1333, "x": 11.14 }, + { "time": 0.3 }, + { "time": 0.4333, "x": 13.74 }, + { "time": 0.6667 } + ] + }, + "backpack-control": { + "translate": [ + { "x": -3.64, "y": 10.08 }, + { "time": 0.2333, "x": 27.31, "y": -12.48 }, + { "time": 0.3667, "x": -50.45, "y": -42.94 }, + { "time": 0.4667, "x": 16.84, "y": -10.4 }, + { "time": 0.6667, "x": -3.64, "y": 10.08 } + ] + }, + "zip-boy": { + "rotate": [ + { "value": -19.74 }, + { "time": 0.1, "value": -54.66 }, + { "time": 0.4333, "value": 50.11 }, + { "time": 0.6667, "value": -19.74 } + ] + }, + "zip-girl": { + "rotate": [ + { "value": 25.57 }, + { "time": 0.1, "value": 62.19 }, + { "time": 0.4333, "value": -47.67 }, + { "time": 0.6667, "value": 25.57 } + ] + }, + "scarf-back": { + "rotate": [ + { "value": 5.28 }, + { "time": 0.2667, "value": -13.54 }, + { "time": 0.3667, "value": 8.42 }, + { "time": 0.4667, "value": -14.72 }, + { "time": 0.6667, "value": 5.28 } + ], + "translate": [ + {}, + { "time": 0.3667, "y": -17.01 }, + { "time": 0.6667 } + ] + }, + "sleeve-control-back": { + "translate": [ + { "time": 0.2667 }, + { "time": 0.3667, "x": -15.94, "y": 32.49 }, + { "time": 0.4, "x": 1.01, "y": 1.37 } + ] + }, + "bag": { + "rotate": [ + { + "value": -18.46, + "curve": [ 0.038, -27.57, 0.074, -34.41 ] + }, + { + "time": 0.1, + "value": -34.41, + "curve": [ 0.183, -34.41, 0.35, 21.8 ] + }, + { + "time": 0.4333, + "value": 21.8, + "curve": [ 0.49, 21.8, 0.585, -2.36 ] + }, + { "time": 0.6667, "value": -18.46 } + ], + "translate": [ + {}, + { "time": 0.1, "x": -44.06, "y": -6.77 }, + { "time": 0.4333, "x": -9.9, "y": -30.44 }, + { "time": 0.6667 } + ] + }, + "bag-control": { + "translate": [ + { "x": -32.3 }, + { "time": 0.1333, "x": 7.65, "y": -11.37 }, + { "time": 0.4333, "x": -5.1 }, + { "time": 0.6667, "x": -32.3 } + ] + }, + "bag-flap": { + "translate": [ + {}, + { "time": 0.3, "x": 38.46, "y": -36.26 }, + { "time": 0.4333 } + ] + }, + "hair-strand-front-1": { + "rotate": [ + { "value": 0.25 }, + { "time": 0.2333, "value": 16.54 }, + { "time": 0.6, "value": -3.01 }, + { "time": 0.6667, "value": 0.25 } + ] + }, + "hair-strand-front-3": { + "rotate": [ + { "value": -0.23 }, + { "time": 0.1333, "value": -9.51 }, + { "time": 0.4, "value": 18.33 }, + { "time": 0.6667, "value": -0.23 } + ] + }, + "hair-strand-back-1": { + "rotate": [ + { "value": -3.32 }, + { "time": 0.1, "value": -9.51 }, + { "time": 0.3667, "value": 18.33 }, + { "time": 0.6667, "value": -3.32 } + ] + }, + "hair-strand-back-2": { + "rotate": [ + { "value": -0.53 }, + { "time": 0.1333, "value": -9.51 }, + { "time": 0.4, "value": 17.42 }, + { "time": 0.6667, "value": -0.53 } + ] + }, + "hair-strand-back-3": { + "rotate": [ + { "value": -9.51 }, + { "time": 0.2667, "value": 0.95 }, + { "time": 0.6667, "value": -9.51 } + ] + }, + "hair-strand-front-2": { + "rotate": [ + { "value": -9.51 }, + { "time": 0.2667, "value": 12.43 }, + { "time": 0.6667, "value": -9.51 } + ] + }, + "hair-strand-front-4": { + "rotate": [ + { "value": -16.37 }, + { "time": 0.2667, "value": -1.14 }, + { "time": 0.6667, "value": -16.37 } + ] + }, + "cape-blue-control": { + "translate": [ + { "x": -0.59, "y": 9.92 }, + { "time": 0.1333, "y": 0.51 }, + { "time": 0.4667, "x": -1.38, "y": 22.46 }, + { "time": 0.6667, "x": -0.59, "y": 9.92 } + ] + }, + "cape-blue-up": { + "rotate": [ + { "value": -3.59 }, + { "time": 0.2667, "value": -20.08 }, + { "time": 0.6667, "value": -3.59 } + ] + }, + "cape-blue-down": { + "rotate": [ + { "value": -19.53 }, + { "time": 0.2667, "value": 12.13 }, + { "time": 0.6667, "value": -19.53 } + ] + }, + "cape-blue-middle-front": { + "translate": [ + { "x": 20.13, "y": 41.93 }, + { "time": 0.3, "x": -23.25, "y": 5.51 }, + { "time": 0.4333, "x": 4.64, "y": -3.95 }, + { "time": 0.5667, "x": 5.7, "y": 93.66 }, + { "time": 0.6667, "x": 20.13, "y": 41.93 } + ] + }, + "dress-control-leg-up-back": { + "rotate": [ + { "value": 39.47 }, + { "time": 0.1, "curve": "stepped" }, + { "time": 0.5 }, + { "time": 0.6667, "value": 39.47 } + ], + "translate": [ + { "x": 55, "y": 46.04 }, + { "time": 0.1, "curve": "stepped" }, + { "time": 0.5 }, + { "time": 0.6667, "x": 55, "y": 46.04 } + ], + "scale": [ + { "x": 0.753, "y": 0.753 }, + { "time": 0.1 }, + { "time": 0.2667, "x": 0.616 }, + { "time": 0.5 }, + { "time": 0.6667, "x": 0.753, "y": 0.753 } + ] + }, + "dress-control-middle": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.2667, "value": -43.74 }, + { "time": 0.5, "value": -0.49 }, + { "time": 0.6667 } + ], + "translate": [ + { "x": 56.15 }, + { "time": 0.2, "x": -74.87 }, + { "time": 0.2667, "x": -40.44, "y": 20.05 }, + { "time": 0.4333, "x": 45.63 }, + { "time": 0.6667, "x": 56.15 } + ] + }, + "dress-control-foot-back": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.3667, "value": 80.78 }, + { "time": 0.5 } + ], + "translate": [ + { "x": 79.3, "y": 61.39 }, + { "time": 0.1 }, + { "time": 0.2667, "y": 131.03 }, + { "time": 0.5 }, + { "time": 0.6667, "x": 79.3, "y": 61.39 } + ] + }, + "dress-control-leg-up-front": { + "rotate": [ + { "time": 0.1 }, + { "time": 0.3333, "value": -19.11 }, + { "time": 0.5 } + ], + "translate": [ + {}, + { "time": 0.1, "y": 8.02 }, + { "time": 0.3333, "x": -8.32, "y": 1.88 }, + { "time": 0.4333, "x": 9.36, "y": 1.34 }, + { "time": 0.5, "x": 25.4 }, + { "time": 0.6667 } + ], + "scale": [ + { "y": 1.243 }, + { "time": 0.1, "y": 1.257 }, + { "time": 0.3333, "y": 1.148 }, + { "time": 0.6667, "y": 1.243 } + ] + }, + "dress-control-leg-down-back": { + "translate": [ + { "x": 63.95, "y": 26.86 }, + { "time": 0.1, "curve": "stepped" }, + { "time": 0.5 }, + { "time": 0.6667, "x": 63.95, "y": 26.86 } + ] + }, + "dress-control-leg-down-front": { + "rotate": [ + { "value": -38.71 }, + { "time": 0.3333, "value": -26.56 }, + { "time": 0.5, "value": -15.76 }, + { "time": 0.6667, "value": -38.71 } + ], + "translate": [ + {}, + { "time": 0.1, "x": 12.03, "y": 33.43 }, + { "time": 0.3333, "x": -18.24, "y": 11.21 }, + { "time": 0.5, "x": 21.39 }, + { "time": 0.6667 } + ], + "scale": [ + { "time": 0.1 }, + { "time": 0.3333, "y": 1.851 }, + { "time": 0.6667 } + ] + }, + "dress-control-foot-front": { + "rotate": [ + { "value": -60.57 }, + { "time": 0.1, "value": -108.41 }, + { "time": 0.3333, "value": -26.56 }, + { "time": 0.5 }, + { "time": 0.6667, "value": -60.57 } + ], + "translate": [ + { "x": -49.47, "y": 36.1 }, + { "time": 0.1, "x": -45.46, "y": 97.6 }, + { "time": 0.3333, "x": -65.74, "y": 15.26 }, + { "time": 0.5 }, + { "time": 0.6667, "x": -49.47, "y": 36.1 } + ] + }, + "cape-blue-up-back": { + "rotate": [ + {}, + { "time": 0.3667, "value": 21.34 }, + { "time": 0.6667 } + ], + "translate": [ + { "x": 0.44, "y": 7.22 }, + { "time": 0.2333, "x": -36.78, "y": 21.02 }, + { "time": 0.3667, "x": -23.97, "y": 31.85 }, + { "time": 0.6667, "x": 0.44, "y": 7.22 } + ] + }, + "cape-blue-up-front": { + "translate": [ + {}, + { "time": 0.2333, "x": -23.13, "y": 5.32 }, + { "time": 0.6667 } + ] + }, + "cape-blue-down-front": { + "rotate": [ + {}, + { "time": 0.2333, "value": 36.76 }, + { "time": 0.3333, "value": 64.89 }, + { "time": 0.4333, "value": 41.43 }, + { "time": 0.5667, "value": -75.87 }, + { "time": 0.6667 } + ], + "translate": [ + { "x": 27.47, "y": 19.9 }, + { "time": 0.1, "x": 45.24, "y": 75.16 }, + { "time": 0.1667, "x": -7, "y": 77.7 }, + { "time": 0.4333, "x": -9.12, "y": 13.58 }, + { "time": 0.6667, "x": 27.47, "y": 19.9 } + ] + }, + "cape-blue-down-middle": { + "translate": [ + { "x": -27.47, "y": -19.9 }, + { "time": 0.2667 }, + { "time": 0.4667, "x": -54.77, "y": 11.14 }, + { "time": 0.6667, "x": -27.47, "y": -19.9 } + ] + }, + "cape-blue-down-back": { + "translate": [ + { "x": -82.17, "y": 5.71 }, + { "time": 0.2333 }, + { "time": 0.4667, "x": 54.77, "y": -11.14 }, + { "time": 0.6667, "x": -82.17, "y": 5.71 } + ] + }, + "cape-front-rotator": { + "rotate": [ + {}, + { "time": 0.2667, "value": -62.01 }, + { "time": 0.4667 } + ] + }, + "cape-back-rotator": { + "rotate": [ + { "value": -8.52 }, + { "time": 0.2333, "value": 34.05 }, + { "time": 0.3667, "value": -6.62 }, + { "time": 0.6667, "value": -8.52 } + ] + }, + "hair-side-back": { + "rotate": [ + { "value": 8.35 }, + { "time": 0.2, "value": 15.57 }, + { "time": 0.4, "value": 4.89 }, + { "time": 0.6667, "value": 8.35 } + ], + "translate": [ + { "x": 10.23, "y": -7.69 }, + { "time": 0.2, "x": 3.1, "y": -0.52 }, + { "time": 0.4, "x": 29.45, "y": 3.35 }, + { "time": 0.6667, "x": 10.23, "y": -7.69 } + ] + }, + "hair-bangs-back": { + "rotate": [ + {}, + { "time": 0.1667, "value": 29.31 }, + { "time": 0.4333, "value": -32.57 }, + { "time": 0.6667 } + ] + } + }, + "transform": { + "leg-down-back": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 0.1, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.3333, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.5667, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-back-up": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0, "curve": "stepped" }, + { "time": 0.1, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.3333, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.5667, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-down": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-down-front": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-up": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "leg-up-back": [ + { "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.3333, "mixScaleX": 0, "mixShearY": 0 }, + { "time": 0.5667, "mixRotate": 0, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + } + } +} +} \ No newline at end of file diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json.import b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json.import new file mode 100644 index 000000000..5d512adb5 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match-pro.spine-json.import @@ -0,0 +1,14 @@ +[remap] + +importer="spine.json" +type="SpineSkeletonFileResource" +uid="uid://ckitsrtfxmo2w" +path="res://.godot/imported/mix-and-match-pro.spine-json-3655503b0d08b0b0590c6310da1ac47b.spjson" + +[deps] + +source_file="res://assets/mix-and-match/mix-and-match-pro.spine-json" +dest_files=["res://.godot/imported/mix-and-match-pro.spine-json-3655503b0d08b0b0590c6310da1ac47b.spjson"] + +[params] + diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas new file mode 100644 index 000000000..3cab05d5e --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas @@ -0,0 +1,362 @@ +mix-and-match.png + size: 1024, 512 + filter: Linear, Linear + scale: 0.5 +base-head + bounds: 587, 2, 95, 73 +boy/arm-front + bounds: 558, 271, 36, 115 +boy/backpack + bounds: 235, 109, 119, 153 +boy/backpack-pocket + bounds: 328, 73, 34, 62 + rotate: 90 +boy/backpack-strap-front + bounds: 665, 79, 38, 88 +boy/backpack-up + bounds: 395, 364, 21, 70 + rotate: 90 +boy/body + bounds: 251, 264, 97, 132 + rotate: 90 +boy/boot-ribbon-front + bounds: 648, 131, 9, 11 +boy/collar + bounds: 744, 4, 73, 29 + rotate: 90 +boy/ear + bounds: 383, 109, 19, 23 + rotate: 90 +boy/eye-back-low-eyelid + bounds: 739, 284, 17, 6 + rotate: 90 +boy/eye-back-pupil + bounds: 832, 443, 8, 9 + rotate: 90 +boy/eye-back-up-eyelid + bounds: 558, 264, 23, 5 +boy/eye-back-up-eyelid-back + bounds: 802, 491, 19, 10 + rotate: 90 +boy/eye-front-low-eyelid + bounds: 386, 363, 22, 7 + rotate: 90 +boy/eye-front-pupil + bounds: 816, 389, 9, 9 +boy/eye-front-up-eyelid + bounds: 160, 71, 31, 6 + rotate: 90 +boy/eye-front-up-eyelid-back + bounds: 801, 434, 26, 9 + rotate: 90 +boy/eye-iris-back + bounds: 618, 264, 17, 17 +boy/eye-iris-front + bounds: 727, 264, 18, 18 +boy/eye-white-back + bounds: 580, 131, 20, 12 +boy/eye-white-front + bounds: 510, 130, 27, 13 +boy/eyebrow-back + bounds: 751, 88, 20, 11 + rotate: 90 +boy/eyebrow-front + bounds: 483, 130, 25, 11 +boy/hair-back + bounds: 494, 388, 122, 81 + rotate: 90 +boy/hair-bangs + bounds: 667, 284, 70, 37 +boy/hair-side + bounds: 789, 374, 25, 43 +boy/hand-backfingers + bounds: 467, 364, 19, 21 +boy/hand-front-fingers + bounds: 488, 364, 19, 21 +boy/hat + bounds: 615, 417, 93, 56 + rotate: 90 +boy/leg-front + bounds: 138, 104, 31, 158 +boy/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-blue-cape/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-spring-dress/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +boy/mouth-smile + bounds: 705, 79, 29, 7 +boy/nose + bounds: 836, 473, 17, 10 + rotate: 90 +boy/pompom + bounds: 747, 273, 48, 43 + rotate: 90 +boy/zip + bounds: 648, 144, 14, 23 +girl-blue-cape/back-eyebrow + bounds: 602, 131, 18, 12 +girl-blue-cape/body-dress + bounds: 2, 264, 109, 246 +girl-blue-cape/body-ribbon + bounds: 615, 283, 50, 38 +girl-blue-cape/cape-back + bounds: 2, 69, 134, 193 +girl-blue-cape/cape-back-up + bounds: 386, 387, 123, 106 + rotate: 90 +girl-blue-cape/cape-ribbon + bounds: 675, 264, 50, 18 +girl-blue-cape/cape-shoulder-back + bounds: 751, 110, 49, 59 +girl-blue-cape/cape-shoulder-front + bounds: 113, 264, 62, 76 + rotate: 90 +girl-blue-cape/cape-up-front + bounds: 399, 264, 98, 117 + rotate: 90 +girl-blue-cape/ear + bounds: 775, 2, 19, 23 +girl-spring-dress/ear + bounds: 775, 2, 19, 23 +girl/ear + bounds: 775, 2, 19, 23 +girl-blue-cape/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-spring-dress/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-blue-cape/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-spring-dress/eye-back-pupil + bounds: 816, 367, 8, 9 +girl/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-blue-cape/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-spring-dress/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-blue-cape/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-spring-dress/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-blue-cape/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-spring-dress/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-blue-cape/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-spring-dress/eye-front-pupil + bounds: 816, 378, 9, 9 +girl/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-blue-cape/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-spring-dress/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-blue-cape/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-spring-dress/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-blue-cape/eye-iris-back + bounds: 637, 264, 17, 17 +girl-blue-cape/eye-iris-front + bounds: 802, 471, 18, 18 +girl-blue-cape/eye-white-back + bounds: 596, 264, 20, 16 +girl-spring-dress/eye-white-back + bounds: 596, 264, 20, 16 +girl-blue-cape/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-spring-dress/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-blue-cape/front-eyebrow + bounds: 608, 149, 18, 12 + rotate: 90 +girl-blue-cape/hair-back + bounds: 508, 145, 117, 98 + rotate: 90 +girl-blue-cape/hair-bangs + bounds: 673, 419, 91, 40 + rotate: 90 +girl-blue-cape/hair-head-side-back + bounds: 196, 331, 30, 52 + rotate: 90 +girl-blue-cape/hair-head-side-front + bounds: 738, 323, 41, 42 +girl-blue-cape/hair-side + bounds: 473, 3, 36, 71 +girl-blue-cape/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-spring-dress/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-blue-cape/leg-front + bounds: 168, 72, 30, 158 + rotate: 90 +girl-blue-cape/mouth-smile + bounds: 736, 79, 29, 7 +girl-spring-dress/mouth-smile + bounds: 736, 79, 29, 7 +girl/mouth-smile + bounds: 736, 79, 29, 7 +girl-blue-cape/nose + bounds: 747, 264, 11, 7 +girl-spring-dress/nose + bounds: 747, 264, 11, 7 +girl/nose + bounds: 747, 264, 11, 7 +girl-blue-cape/sleeve-back + bounds: 767, 79, 42, 29 +girl-blue-cape/sleeve-front + bounds: 408, 76, 52, 119 + rotate: 90 +girl-spring-dress/arm-front + bounds: 596, 282, 17, 111 +girl-spring-dress/back-eyebrow + bounds: 801, 420, 18, 12 +girl-spring-dress/body-up + bounds: 179, 4, 64, 66 +girl-spring-dress/cloak-down + bounds: 775, 27, 50, 50 +girl-spring-dress/cloak-up + bounds: 360, 7, 64, 58 + rotate: 90 +girl-spring-dress/eye-iris-back + bounds: 656, 264, 17, 17 +girl-spring-dress/eye-iris-front + bounds: 814, 492, 18, 18 +girl-spring-dress/front-eyebrow + bounds: 822, 472, 18, 12 + rotate: 90 +girl-spring-dress/hair-back + bounds: 196, 363, 147, 93 + rotate: 90 +girl-spring-dress/hair-bangs + bounds: 696, 326, 91, 40 + rotate: 90 +girl-spring-dress/hair-head-side-back + bounds: 529, 76, 30, 52 +girl-spring-dress/hair-head-side-front + bounds: 781, 323, 41, 42 +girl-spring-dress/hair-side + bounds: 511, 3, 36, 71 +girl-spring-dress/leg-front + bounds: 171, 104, 30, 158 +girl-spring-dress/neck + bounds: 138, 70, 20, 32 +girl-spring-dress/shoulder-ribbon + bounds: 622, 131, 36, 24 + rotate: 90 +girl-spring-dress/skirt + bounds: 113, 328, 182, 81 + rotate: 90 +girl-spring-dress/underskirt + bounds: 2, 2, 175, 65 +girl/arm-front + bounds: 577, 395, 36, 115 +girl/back-eyebrow + bounds: 834, 492, 18, 12 + rotate: 90 +girl/bag-base + bounds: 191, 264, 62, 58 + rotate: 90 +girl/bag-strap-front + bounds: 385, 265, 12, 96 +girl/bag-top + bounds: 738, 367, 49, 50 +girl/body + bounds: 356, 130, 97, 132 +girl/boot-ribbon-front + bounds: 539, 130, 13, 13 +girl/eye-iris-back + bounds: 821, 424, 17, 17 +girl/eye-iris-front + bounds: 812, 443, 18, 18 +girl/eye-white-back + bounds: 814, 5, 20, 16 + rotate: 90 +girl/front-eyebrow + bounds: 816, 400, 18, 12 + rotate: 90 +girl/hair-back + bounds: 291, 363, 147, 93 + rotate: 90 +girl/hair-bangs + bounds: 715, 419, 91, 40 + rotate: 90 +girl/hair-flap-down-front + bounds: 288, 5, 70, 65 +girl/hair-head-side-back + bounds: 561, 77, 30, 52 +girl/hair-head-side-front + bounds: 757, 419, 41, 42 + rotate: 90 +girl/hair-patch + bounds: 245, 4, 66, 41 + rotate: 90 +girl/hair-side + bounds: 549, 3, 36, 71 +girl/hair-strand-back-1 + bounds: 684, 3, 58, 74 +girl/hair-strand-back-2 + bounds: 692, 171, 91, 58 + rotate: 90 +girl/hair-strand-back-3 + bounds: 615, 323, 92, 79 + rotate: 90 +girl/hair-strand-front-1 + bounds: 518, 269, 38, 94 +girl/hair-strand-front-2 + bounds: 593, 79, 70, 50 +girl/hair-strand-front-3 + bounds: 705, 88, 44, 81 +girl/hand-front-fingers + bounds: 530, 365, 19, 21 +girl/hat + bounds: 608, 169, 93, 82 + rotate: 90 +girl/leg-front + bounds: 203, 104, 30, 158 +girl/pompom + bounds: 757, 462, 48, 43 + rotate: 90 +girl/scarf + bounds: 455, 143, 119, 51 + rotate: 90 +girl/scarf-back + bounds: 420, 2, 72, 51 + rotate: 90 +girl/zip + bounds: 356, 109, 19, 25 + rotate: 90 diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas.import b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas.import new file mode 100644 index 000000000..62adf3d7e --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.atlas.import @@ -0,0 +1,15 @@ +[remap] + +importer="spine.atlas" +type="SpineAtlasResource" +uid="uid://cvu8lycjkd245" +path="res://.godot/imported/mix-and-match.atlas-3d349b543ecdcc01fb29033adaef0841.spatlas" + +[deps] + +source_file="res://assets/mix-and-match/mix-and-match.atlas" +dest_files=["res://.godot/imported/mix-and-match.atlas-3d349b543ecdcc01fb29033adaef0841.spatlas"] + +[params] + +normal_map_prefix="n" diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png new file mode 100644 index 000000000..441cd2a81 Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png differ diff --git a/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png.import b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png.import new file mode 100644 index 000000000..3d913e7f0 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/mix-and-match/mix-and-match.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkpeve6qcxa70" +path="res://.godot/imported/mix-and-match.png-c2d8e28d9f2efc380ff8b95a22dadcc3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/mix-and-match/mix-and-match.png" +dest_files=["res://.godot/imported/mix-and-match.png-c2d8e28d9f2efc380ff8b95a22dadcc3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.atlas.import b/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.atlas.import new file mode 100644 index 000000000..7f9c5ac13 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.atlas.import @@ -0,0 +1,15 @@ +[remap] + +importer="spine.atlas" +type="SpineAtlasResource" +uid="uid://c75mtwn6dnkwp" +path="res://.godot/imported/Raggedy Spineboy.atlas-07f7c6b30431397bcf472b18d48851e0.spatlas" + +[deps] + +source_file="res://assets/raggedyspineboy/Raggedy Spineboy.atlas" +dest_files=["res://.godot/imported/Raggedy Spineboy.atlas-07f7c6b30431397bcf472b18d48851e0.spatlas"] + +[params] + +normal_map_prefix="n" diff --git a/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.png.import b/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.png.import new file mode 100644 index 000000000..e852fe8b8 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raggedyspineboy/Raggedy Spineboy.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://couyrsq850nh6" +path="res://.godot/imported/Raggedy Spineboy.png-8982b59aad5b612b7ed1a5da8b447d00.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/raggedyspineboy/Raggedy Spineboy.png" +dest_files=["res://.godot/imported/Raggedy Spineboy.png-8982b59aad5b612b7ed1a5da8b447d00.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy-res.tres b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy-res.tres new file mode 100644 index 000000000..1534e14d0 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy-res.tres @@ -0,0 +1,8 @@ +[gd_resource type="SpineSkeletonDataResource" load_steps=3 format=2] + +[ext_resource path="res://assets/raggedyspineboy/Raggedy Spineboy.atlas" type="SpineAtlasResource" id=1] +[ext_resource path="res://assets/raggedyspineboy/raggedy spineboy.spine-json" type="SpineSkeletonFileResource" id=2] + +[resource] +atlas_res = ExtResource( 1 ) +skeleton_file_res = ExtResource( 2 ) diff --git a/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json new file mode 100644 index 000000000..ece22dd22 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json @@ -0,0 +1,304 @@ +{ +"skeleton": { + "hash": "ukmbgK+14T0", + "spine": "4.1.23-beta", + "x": -78.45, + "y": -9.66, + "width": 157.48, + "height": 364.98, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -0.79, "y": 82.38 }, + { "name": "abdomen", "parent": "hip", "length": 33.5, "rotation": 89.55, "y": -0.1 }, + { "name": "chest", "parent": "abdomen", "length": 29.58, "x": 38.08, "y": 0.73 }, + { "name": "L-arm", "parent": "chest", "length": 32.68, "rotation": -121.23, "x": 24.64, "y": -16.69 }, + { "name": "L-thigh", "parent": "hip", "length": 29.76, "rotation": -81.94, "x": 17.32, "y": -5.2 }, + { "name": "L-foot", "parent": "L-thigh", "length": 37.25, "rotation": -6.29, "x": 37.36, "y": -1.79 }, + { "name": "L-forearm", "parent": "L-arm", "length": 33.69, "rotation": -12.09, "x": 39.1, "y": -2.35 }, + { "name": "R-arm", "parent": "chest", "length": 36.76, "rotation": 133.38, "x": 26, "y": 13.63 }, + { "name": "R-thigh", "parent": "hip", "length": 29.49, "rotation": -93.16, "x": -18.19, "y": -6.06 }, + { "name": "R-foot", "parent": "R-thigh", "length": 39.99, "rotation": -1.8, "x": 36.41, "y": 0.27 }, + { "name": "R-forearm", "parent": "R-arm", "length": 36.13, "rotation": 2.73, "x": 41.66, "y": 0.28 }, + { "name": "head", "parent": "chest", "length": 94.23, "rotation": -2.25, "x": 41.02, "y": -0.11 }, + { "name": "scalp", "parent": "head", "length": 31.95, "rotation": -29.89, "x": 129.34, "y": 15.1 }, + { "name": "hair1", "parent": "scalp", "length": 23.01, "rotation": 68.49, "x": 36.51, "y": 4.13 }, + { "name": "hair2", "parent": "hair1", "length": 23.5, "rotation": 59.56, "x": 29.03, "y": 1.58 } +], +"slots": [ + { "name": "R-arm", "bone": "R-arm", "attachment": "arm" }, + { "name": "L-arm", "bone": "L-arm", "attachment": "arm" }, + { "name": "L-leg", "bone": "L-thigh", "attachment": "leg" }, + { "name": "R-leg", "bone": "R-thigh", "attachment": "leg" }, + { "name": "torso", "bone": "abdomen", "attachment": "torso" }, + { "name": "head", "bone": "head", "attachment": "head" } +], +"skins": [ + { + "name": "default", + "attachments": { + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.60755, 0.01864, 0.64146, 0.03355, 0.70227, 0.06028, 0.76687, 0.08869, 0.80696, 0.14524, 0.84158, 0.19407, 1, 0.41294, 1, 0.78562, 0.67349, 1, 0.38214, 1, 0.13935, 0.8937, 0.07949, 0.78808, 0.05899, 0.7519, 0, 0.64781, 0, 0.40213, 0.15055, 0.27784, 0.25632, 0.21734, 0.28424, 0.20137, 0.31117, 0.18597, 0.32034, 0.16739, 0.32984, 0.14814, 0.3317, 0.12798, 0.33358, 0.1076, 0.29623, 0.08869, 0.21779, 0.06978, 0.2514, 0.03195, 0.32659, 0.01699, 0.37521, 0.00732, 0.41202, 0, 0.45684, 0, 0.49046, 0, 0.53155, 0, 0.56517, 0, 0.55023, 0.1049, 0.46058, 0.06437, 0.38587, 0.05086, 0.31117, 0.04816, 0.54649, 0.17516, 0.35973, 0.28865, 0.14308, 0.41294, 0.13188, 0.57777, 0.24767, 0.43186, 0.43817, 0.37511, 0.59878, 0.3616, 0.78181, 0.43726, 0.89761, 0.53994, 0.87616, 0.37787 ], + "triangles": [ 36, 25, 26, 35, 27, 28, 23, 25, 36, 24, 25, 23, 26, 35, 36, 35, 26, 27, 22, 36, 35, 23, 36, 22, 28, 29, 34, 35, 28, 34, 21, 35, 34, 35, 21, 22, 37, 20, 34, 37, 38, 20, 19, 20, 38, 18, 19, 38, 17, 18, 38, 2, 4, 37, 4, 2, 3, 43, 4, 5, 43, 37, 4, 42, 38, 37, 43, 42, 37, 6, 46, 5, 44, 43, 5, 39, 14, 15, 41, 15, 16, 39, 15, 41, 16, 17, 38, 41, 16, 38, 41, 38, 42, 46, 44, 5, 45, 46, 6, 44, 46, 45, 40, 14, 39, 40, 39, 41, 13, 14, 40, 12, 13, 40, 45, 6, 7, 11, 12, 40, 9, 10, 40, 11, 40, 10, 9, 41, 42, 9, 40, 41, 8, 9, 42, 42, 43, 8, 44, 8, 43, 8, 44, 45, 8, 45, 7, 34, 29, 30, 33, 31, 32, 33, 32, 0, 31, 34, 30, 34, 20, 21, 31, 33, 34, 37, 34, 33, 1, 33, 0, 2, 33, 1, 33, 2, 37 ], + "vertices": [ 1, 14, 17.04, -22.66, 1, 3, 14, 11.42, -25.02, 0.97438, 12, 187.6, -11.93, 0.00182, 13, 63.98, 5.58, 0.02381, 2, 14, 1.36, -29.25, 0.37005, 12, 182.37, -21.52, 0.62995, 3, 14, -9.34, -33.75, 0.09775, 12, 176.82, -31.71, 0.82289, 13, 64.49, -16.93, 0.07936, 3, 14, -22.66, -31.7, 0.05494, 12, 165.13, -38.42, 0.86351, 13, 57.7, -28.58, 0.08156, 3, 14, -34.17, -29.93, 0.01796, 12, 155.03, -44.22, 0.89858, 13, 51.83, -38.64, 0.08345, 1, 12, 109.81, -70.7, 1, 1, 12, 30.84, -74.45, 1, 1, 12, -16.96, -26.55, 1, 1, 12, -19.08, 18.11, 1, 1, 12, 1.68, 56.4, 1, 1, 12, 23.63, 66.63, 1, 1, 12, 31.14, 70.14, 1, 1, 12, 52.77, 80.23, 1, 2, 12, 104.83, 82.69, 0.99074, 13, -54.93, 46.39, 0.00926, 3, 12, 132.26, 60.87, 0.88784, 13, -20.27, 41.13, 0.11168, 15, 48.07, 46.13, 4.7E-4, 4, 14, 14.49, 45.72, 0.00833, 12, 145.85, 45.26, 0.85196, 13, -0.71, 34.37, 0.12365, 15, 30.69, 34.9, 0.01605, 4, 14, 14.72, 40.26, 0.01053, 12, 149.44, 41.14, 0.84249, 13, 4.45, 32.59, 0.12681, 15, 26.1, 31.94, 0.02016, 4, 14, 14.94, 35, 0.01266, 12, 152.9, 37.17, 0.83336, 13, 9.43, 30.87, 0.12986, 15, 21.68, 29.08, 0.02412, 4, 14, 17.31, 31.55, 0.05833, 12, 156.9, 35.95, 0.60487, 13, 13.51, 31.8, 0.21603, 15, 19.9, 25.29, 0.12077, 4, 14, 19.76, 27.97, 0.10569, 12, 161.05, 34.68, 0.368, 13, 17.74, 32.78, 0.30535, 15, 18.06, 21.36, 0.22096, 4, 14, 23.06, 25.24, 0.1279, 12, 165.34, 34.6, 0.18497, 13, 21.49, 34.84, 0.23674, 15, 17.37, 17.13, 0.45039, 3, 14, 26.39, 22.47, 0.15034, 13, 25.29, 36.92, 0.16741, 15, 16.67, 12.86, 0.68225, 3, 14, 33.01, 24.76, 0.02128, 13, 25.58, 43.92, 0.03309, 15, 22, 8.32, 0.94563, 1, 15, 33.6, 3.18, 1, 1, 15, 27.7, -4.32, 1, 1, 15, 15.91, -6.38, 1, 1, 15, 8.29, -7.71, 1, 1, 15, 2.52, -8.72, 1, 2, 14, 33.8, -6.24, 0.33703, 15, -4.33, -8.07, 0.66297, 2, 14, 30.77, -10.42, 0.58778, 15, -9.46, -7.58, 0.41222, 2, 14, 27.08, -15.53, 0.81447, 15, -15.74, -6.98, 0.18553, 2, 14, 24.05, -19.7, 0.97838, 15, -20.88, -6.49, 0.02162, 1, 14, 7.37, -4.8, 1, 1, 14, 22.4, 1.3, 1, 1, 15, 7.54, 1.64, 1, 3, 14, 38.63, 17.86, 0.0046, 13, 34.06, 46.62, 0.01618, 15, 18.9, -0.03, 0.97922, 1, 13, 30.82, 1.68, 1, 3, 14, -7.07, 41.74, 7.0E-5, 12, 131.49, 28.69, 0.99828, 15, 16.34, 51.47, 0.00165, 1, 12, 103.58, 60.65, 1, 1, 12, 68.57, 60.72, 1, 1, 12, 100.33, 44.43, 1, 1, 12, 113.74, 15.8, 1, 1, 12, 117.77, -8.69, 1, 1, 12, 103.07, -37.5, 1, 1, 12, 82.15, -56.28, 1, 3, 14, -68.87, -11.37, 0.00371, 12, 116.34, -51.37, 0.97904, 13, 21.84, -64.11, 0.01725 ], + "hull": 33, + "edges": [ 16, 14, 16, 18, 18, 20, 26, 28, 28, 30, 44, 46, 46, 48, 48, 50, 14, 12, 10, 12, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 2, 0, 0, 64, 2, 4, 4, 6, 20, 22, 22, 24, 24, 26, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 12, 80, 26, 34, 36, 30, 32, 32, 34, 36, 38, 38, 40, 40, 42, 42, 44, 12, 92, 6, 8, 8, 10 ], + "width": 136, + "height": 187 + } + }, + "L-arm": { + "arm": { + "type": "mesh", + "uvs": [ 1, 0.16418, 0.90368, 0.30178, 0.80735, 0.43938, 0.75345, 0.50664, 0.71536, 0.55417, 0.66561, 0.61626, 0.63234, 0.65778, 0.59417, 0.7054, 0.45366, 0.8527, 0.31316, 1, 0.15658, 1, 0, 1, 0, 0.71458, 0.13235, 0.59074, 0.26471, 0.4669, 0.34675, 0.39836, 0.39153, 0.36096, 0.43008, 0.32876, 0.4689, 0.29633, 0.52302, 0.25113, 0.59417, 0.1917, 0.72983, 0.09585, 0.86549, 0, 1, 0, 0.15703, 0.83582, 0.46722, 0.51561, 0.78995, 0.22527, 0.34029, 0.70958, 0.62889, 0.3843 ], + "triangles": [ 10, 24, 9, 9, 27, 8, 9, 24, 27, 10, 11, 24, 11, 12, 24, 8, 27, 7, 12, 13, 24, 24, 13, 27, 13, 14, 27, 27, 25, 7, 25, 27, 14, 7, 25, 6, 6, 25, 5, 18, 4, 17, 28, 4, 18, 4, 28, 3, 15, 16, 25, 16, 17, 25, 25, 17, 5, 17, 4, 5, 3, 28, 2, 28, 26, 2, 2, 26, 1, 18, 19, 28, 19, 20, 28, 28, 20, 26, 1, 26, 0, 20, 21, 26, 26, 22, 0, 26, 21, 22, 22, 23, 0, 25, 14, 15 ], + "vertices": [ 1, 4, -11.38, 11.41, 1, 1, 4, 0.99, 11.79, 1, 1, 4, 13.36, 12.18, 1, 1, 4, 19.69, 11.97, 1, 2, 4, 24.16, 11.83, 0.91748, 7, -17.58, 10.73, 0.08252, 2, 4, 30, 11.64, 0.75238, 7, -11.83, 11.77, 0.24762, 2, 4, 33.91, 11.51, 0.44551, 7, -7.98, 12.46, 0.55449, 2, 4, 38.39, 11.36, 0.2127, 7, -3.57, 13.26, 0.7873, 2, 4, 53.17, 9.61, 0.07308, 7, 11.25, 14.65, 0.92692, 2, 4, 67.95, 7.86, 0.00873, 7, 26.07, 16.03, 0.99127, 1, 7, 34.26, 8.51, 1, 1, 7, 42.44, 0.99, 1, 1, 7, 27.96, -14.77, 1, 2, 4, 50.33, -20.36, 0.05494, 7, 14.76, -15.25, 0.94506, 2, 4, 37.32, -18.06, 0.23231, 7, 1.56, -15.74, 0.76769, 2, 4, 29.76, -16.28, 0.47868, 7, -6.21, -15.58, 0.52132, 2, 4, 25.63, -15.31, 0.71242, 7, -10.45, -15.5, 0.28758, 2, 4, 22.08, -14.47, 0.81876, 7, -14.1, -15.42, 0.18124, 2, 4, 18.5, -13.63, 0.9506, 7, -17.77, -15.35, 0.0494, 2, 4, 13.51, -12.45, 0.97879, 7, -22.9, -15.25, 0.02121, 2, 4, 6.96, -10.91, 0.99704, 7, -29.63, -15.11, 0.00296, 1, 4, -4.48, -7.2, 1, 1, 4, -15.91, -3.5, 1, 1, 4, -21.43, 4.29, 1, 1, 7, 25.9, -0.53, 1, 2, 4, 31.99, -4.22, 0.80128, 7, -6.56, -3.32, 0.19872, 1, 4, 0.98, 1.89, 1, 1, 7, 9.92, 1.3, 1, 1, 4, 17.32, -0.55, 1 ], + "hull": 24, + "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0, 10, 34, 30, 32, 32, 34, 10, 12, 12, 14, 6, 8, 8, 10, 34, 36, 36, 38, 8, 36 ], + "width": 71, + "height": 75 + } + }, + "L-leg": { + "leg": { + "type": "mesh", + "uvs": [ 1, 0.23129, 1, 0.29498, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65976, 1, 0.71766, 1, 0.87399, 0.73924, 1, 0.22971, 1, 0, 0.89715, 0, 0.64818, 0.01978, 0.59915, 0.08517, 0.43712, 0.10542, 0.38694, 0.13057, 0.32459, 0.15317, 0.26859, 0.178, 0.20707, 0.26155, 0, 1, 0, 0.61186, 0.12128, 0.51632, 0.54396 ], + "triangles": [ 21, 13, 4, 21, 4, 5, 12, 13, 21, 12, 21, 5, 12, 5, 6, 11, 12, 6, 9, 10, 11, 11, 6, 9, 6, 8, 9, 7, 8, 6, 20, 18, 19, 20, 19, 0, 17, 18, 20, 17, 20, 0, 17, 0, 1, 16, 17, 1, 16, 1, 2, 15, 16, 2, 15, 2, 3, 14, 15, 3, 14, 3, 4, 13, 14, 4 ], + "vertices": [ 1, 5, 11.02, 15.15, 1, 1, 5, 17.32, 14.75, 1, 2, 5, 24.75, 14.29, 0.95577, 6, -14.29, 14.6, 0.04423, 2, 5, 32.19, 13.83, 0.71874, 6, -6.84, 14.96, 0.28126, 2, 5, 38.49, 13.44, 0.37177, 6, -0.55, 15.26, 0.62823, 2, 5, 53.36, 12.51, 0.00736, 6, 14.34, 15.96, 0.99264, 1, 6, 20.07, 16.24, 1, 1, 6, 35.53, 16.97, 1, 1, 6, 48.43, 8.19, 1, 1, 6, 49.31, -10.13, 1, 1, 6, 39.53, -18.88, 1, 2, 5, 49.98, -23.35, 0.00313, 6, 14.91, -20.05, 0.99687, 2, 5, 45.18, -22.34, 0.02543, 6, 10.03, -19.57, 0.97457, 2, 5, 29.32, -18.99, 0.4709, 6, -6.11, -17.98, 0.5291, 2, 5, 24.4, -17.96, 0.69968, 6, -11.11, -17.49, 0.30032, 2, 5, 18.3, -16.67, 0.89625, 6, -17.32, -16.88, 0.10375, 2, 5, 12.82, -15.51, 0.9779, 6, -22.89, -16.33, 0.0221, 1, 5, 6.79, -14.24, 1, 1, 5, -13.48, -9.97, 1, 1, 5, -11.83, 16.57, 1, 1, 5, -0.72, 1.88, 1, 1, 6, 3.72, -1.97, 1 ], + "hull": 20, + "edges": [ 36, 38, 20, 22, 18, 20, 16, 18, 16, 14, 22, 24, 24, 10, 10, 12, 12, 14, 12, 22, 24, 26, 10, 8, 26, 8, 8, 6, 26, 28, 6, 28, 28, 30, 6, 4, 30, 4, 4, 2, 30, 32, 2, 32, 32, 34, 34, 36, 2, 0, 0, 38, 34, 0 ], + "width": 36, + "height": 99 + } + }, + "R-arm": { + "arm": { + "type": "mesh", + "uvs": [ 1, 0.16418, 0.90368, 0.30178, 0.80735, 0.43938, 0.75345, 0.50664, 0.71536, 0.55417, 0.66561, 0.61626, 0.63234, 0.65778, 0.59417, 0.7054, 0.45366, 0.8527, 0.31316, 1, 0.15658, 1, 0, 1, 0, 0.71458, 0.13235, 0.59074, 0.26471, 0.4669, 0.34675, 0.39836, 0.39153, 0.36096, 0.43008, 0.32876, 0.4689, 0.29633, 0.52302, 0.25113, 0.59417, 0.1917, 0.72983, 0.09585, 0.86549, 0, 1, 0, 0.15703, 0.83582, 0.46722, 0.51561, 0.78995, 0.22527, 0.34029, 0.70958, 0.62889, 0.3843 ], + "triangles": [ 10, 24, 9, 9, 27, 8, 9, 24, 27, 10, 11, 24, 11, 12, 24, 8, 27, 7, 12, 13, 24, 24, 13, 27, 13, 14, 27, 27, 25, 7, 25, 14, 15, 25, 27, 14, 7, 25, 6, 22, 23, 0, 26, 22, 0, 1, 26, 0, 6, 25, 5, 18, 4, 17, 28, 4, 18, 4, 28, 3, 15, 16, 25, 16, 17, 25, 25, 17, 5, 17, 4, 5, 3, 28, 2, 28, 26, 2, 2, 26, 1, 18, 19, 28, 19, 20, 28, 28, 20, 26, 20, 21, 26, 26, 21, 22 ], + "vertices": [ 1, 8, -6.97, 5.03, 1, 1, 8, 5.06, 7.93, 1, 1, 8, 17.1, 10.83, 1, 2, 8, 23.34, 11.91, 0.99563, 11, -17.75, 12.49, 0.00437, 2, 8, 27.74, 12.68, 0.95467, 11, -13.31, 13.04, 0.04533, 2, 8, 33.5, 13.69, 0.75827, 11, -7.51, 13.77, 0.24173, 2, 8, 37.35, 14.36, 0.53963, 11, -3.63, 14.26, 0.46037, 2, 8, 41.77, 15.13, 0.29363, 11, 0.82, 14.82, 0.70637, 2, 8, 56.6, 16.42, 4.0E-4, 11, 15.69, 15.41, 0.9996, 1, 11, 30.56, 16, 1, 1, 11, 38.34, 8.05, 1, 1, 11, 46.11, 0.1, 1, 1, 11, 30.8, -14.86, 1, 2, 8, 59.92, -13.5, 4.8E-4, 11, 17.59, -14.64, 0.99952, 2, 8, 46.72, -13.9, 0.17385, 11, 4.38, -14.41, 0.82615, 2, 8, 38.95, -13.7, 0.5683, 11, -3.37, -13.84, 0.4317, 2, 8, 34.71, -13.59, 0.79613, 11, -7.6, -13.53, 0.20387, 2, 8, 31.06, -13.49, 0.92362, 11, -11.24, -13.26, 0.07638, 2, 8, 27.39, -13.4, 0.98278, 11, -14.9, -12.99, 0.01722, 1, 8, 22.26, -13.26, 1, 1, 8, 15.53, -13.09, 1, 1, 8, 3.58, -11.79, 1, 1, 8, -8.37, -10.49, 1, 1, 8, -15.36, -3.99, 1, 1, 11, 29.51, -0.54, 1, 2, 8, 38.68, -1.43, 0.57762, 11, -3.06, -1.58, 0.42238, 1, 8, 7.07, -1.77, 1, 1, 11, 13.64, 2.15, 1, 1, 8, 23.56, -0.83, 1 ], + "hull": 24, + "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0, 10, 34, 30, 32, 32, 34, 10, 12, 12, 14, 6, 8, 8, 10, 34, 36, 36, 38, 8, 36 ], + "width": 71, + "height": 75 + } + }, + "R-leg": { + "leg": { + "type": "mesh", + "uvs": [ 1, 0.23129, 1, 0.29498, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65976, 1, 0.71766, 1, 0.87399, 0.73924, 1, 0.22971, 1, 0, 0.89715, 0, 0.64818, 0.01978, 0.59915, 0.08517, 0.43712, 0.10542, 0.38694, 0.13057, 0.32459, 0.15317, 0.26859, 0.178, 0.20707, 0.26155, 0, 1, 0, 0.61186, 0.12128, 0.51632, 0.54396 ], + "triangles": [ 21, 13, 4, 21, 4, 5, 12, 13, 21, 12, 21, 5, 12, 5, 6, 11, 12, 6, 9, 10, 11, 11, 6, 9, 6, 8, 9, 7, 8, 6, 20, 18, 19, 20, 19, 0, 17, 18, 20, 17, 20, 0, 17, 0, 1, 16, 17, 1, 16, 1, 2, 15, 16, 2, 15, 2, 3, 14, 15, 3, 14, 3, 4, 13, 14, 4 ], + "vertices": [ 1, 9, 7.41, 14.89, 1, 2, 9, 13.71, 15.24, 0.99432, 10, -23.16, 14.24, 0.00568, 2, 9, 21.15, 15.65, 0.91831, 10, -15.74, 14.89, 0.08169, 2, 9, 28.59, 16.06, 0.65731, 10, -8.32, 15.53, 0.34269, 2, 9, 34.88, 16.4, 0.33128, 10, -2.03, 16.08, 0.66872, 2, 9, 49.77, 17.22, 0.00401, 10, 12.81, 17.36, 0.99599, 1, 10, 18.52, 17.86, 1, 1, 10, 33.94, 19.2, 1, 1, 10, 47.18, 10.92, 1, 1, 10, 48.77, -7.35, 1, 1, 10, 39.34, -16.47, 1, 2, 9, 50.6, -18.79, 0.01347, 10, 14.78, -18.6, 0.98653, 2, 9, 45.72, -18.34, 0.05687, 10, 9.88, -18.31, 0.94313, 2, 9, 29.57, -16.87, 0.66681, 10, -6.3, -17.35, 0.33319, 2, 9, 24.57, -16.42, 0.86313, 10, -11.31, -17.05, 0.13687, 2, 9, 18.36, -15.85, 0.97673, 10, -17.54, -16.68, 0.02327, 2, 9, 12.77, -15.35, 0.99935, 10, -23.13, -16.35, 6.5E-4, 1, 9, 6.64, -14.79, 1, 2, 9, -13.99, -12.91, 0.99999, 10, -49.96, -14.76, 1.0E-5, 1, 9, -15.45, 13.63, 1, 1, 9, -2.7, 0.34, 1, 2, 9, 39.28, -0.79, 0.02735, 10, 2.9, -0.97, 0.97265 ], + "hull": 20, + "edges": [ 36, 38, 20, 22, 18, 20, 16, 18, 16, 14, 22, 24, 24, 10, 10, 12, 12, 14, 12, 22, 24, 26, 10, 8, 26, 8, 8, 6, 26, 28, 6, 28, 28, 30, 6, 4, 30, 4, 4, 2, 30, 32, 2, 32, 32, 34, 34, 36, 2, 0, 0, 38, 34, 0 ], + "width": 36, + "height": 99 + } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.87097, 0.13351, 1, 0.26703, 1, 0.45027, 1, 0.63351, 1, 0.81676, 1, 1, 0.75, 1, 0.5, 1, 0.25, 1, 0, 1, 0, 0.72402, 0, 0.44805, 0.09823, 0.22402, 0.19646, 0, 0.4692, 0, 0.74195, 0, 0.58869, 0.13132, 0.401, 0.46063, 0.8354, 0.50156, 0.42394, 0.2675, 0.36228, 0.63166, 0.58839, 0.76773, 0.71972, 0.25773, 0.84058, 0.76485, 0.57726, 0.50305, 0.24069, 0.44016, 0.19158, 0.8008, 0.29695, 0.12289, 0.37843, 0.84006, 0.71037, 0.63433, 0.15889, 0.60896 ], + "triangles": [ 8, 26, 28, 8, 28, 7, 9, 26, 8, 9, 10, 26, 23, 4, 5, 6, 23, 5, 7, 21, 6, 6, 21, 23, 23, 3, 4, 7, 28, 21, 26, 20, 28, 28, 20, 21, 10, 30, 26, 26, 30, 20, 20, 24, 21, 21, 29, 23, 21, 24, 29, 29, 18, 23, 23, 18, 3, 10, 11, 30, 29, 24, 18, 18, 2, 3, 30, 25, 20, 20, 17, 24, 20, 25, 17, 30, 11, 25, 2, 18, 1, 11, 12, 25, 22, 19, 16, 22, 0, 1, 19, 14, 16, 19, 27, 14, 22, 15, 0, 22, 16, 15, 12, 13, 27, 16, 14, 15, 27, 13, 14, 22, 24, 19, 1, 18, 22, 25, 27, 19, 25, 12, 27, 17, 19, 24, 24, 22, 18, 17, 25, 19 ], + "vertices": [ 1, 3, 31.69, -23.15, 1, 2, 3, 19.07, -31.25, 0.60494, 2, 57.15, -30.53, 0.39506, 2, 3, 1.66, -31.39, 0.39506, 2, 39.74, -30.66, 0.60494, 2, 3, -15.75, -31.53, 0.20988, 2, 22.33, -30.8, 0.79012, 1, 5, -7.76, 14.89, 1, 1, 5, 9.48, 12.45, 1, 1, 5, 7.3, -2.9, 1, 2, 5, 5.13, -18.25, 0.488, 9, 5.77, 18.5, 0.512, 2, 5, 2.96, -33.59, 0.16267, 9, 6.62, 3.03, 0.83733, 3, 3, -51.05, 30.2, 0.06996, 2, -12.97, 30.92, 0.26337, 9, 7.46, -12.45, 0.66667, 1, 9, -18.72, -13.88, 1, 2, 3, 1.38, 30.61, 0.39506, 2, 39.46, 31.34, 0.60494, 2, 3, 22.71, 24.69, 0.60494, 2, 60.79, 25.41, 0.39506, 1, 3, 44.04, 18.76, 1, 1, 3, 44.18, 1.86, 1, 1, 3, 44.31, -15.05, 1, 1, 3, 31.76, -5.65, 1, 2, 3, 0.38, 5.74, 0.448, 2, 38.46, 6.47, 0.552, 2, 3, -3.29, -21.22, 0.448, 2, 34.79, -20.5, 0.552, 1, 3, 18.74, 4.46, 1, 1, 2, 22.2, 8.74, 1, 2, 2, 9.38, -5.38, 0.52, 5, -15.95, -9.73, 0.48, 1, 3, 19.82, -13.87, 1, 2, 2, 9.78, -21.01, 0.52, 5, -14.03, 5.79, 0.48, 2, 3, -3.56, -5.22, 0.448, 2, 34.52, -4.49, 0.552, 2, 3, 2.25, 15.69, 0.448, 2, 40.33, 16.42, 0.552, 2, 2, 6.04, 19.2, 0.584, 9, -12.08, -1.62, 0.416, 1, 3, 32.42, 12.44, 1, 2, 2, 2.41, 7.58, 0.584, 9, -8.99, 10.15, 0.416, 1, 2, 22.11, -12.84, 1, 1, 2, 24.25, 21.37, 1 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 0 ], + "width": 62, + "height": 95 + } + } + } + } +], +"animations": { + "animation": { + "bones": { + "abdomen": { + "rotate": [ + { + "curve": [ 0.075, 0, 0.112, 6.52 ] + }, + { "time": 0.3, "value": 6.52 }, + { "time": 1.3333 } + ] + }, + "chest": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.137, 13.73 ] + }, + { + "time": 0.3667, + "value": 13.73, + "curve": [ 0.469, 13.73, 0.562, 13.32 ] + }, + { + "time": 0.6667, + "value": 12.78, + "curve": [ 0.77, 12.78, 0.842, 9.11 ] + }, + { + "time": 0.9, + "value": 9.11, + "curve": [ 1.092, 9.11, 1.225, 0 ] + }, + { "time": 1.3333 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.035, 0, 0.061, -5.44 ] + }, + { + "time": 0.1, + "value": -10.88, + "curve": [ 0.183, -10.88, 0.35, 6.77 ] + }, + { + "time": 0.4333, + "value": 6.77, + "curve": [ 1.157, 6.77, 0.966, 0.14 ] + }, + { "time": 1.3333 } + ] + }, + "R-arm": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.125, -26.35 ] + }, + { + "time": 0.1667, + "value": -26.35, + "curve": [ 0.233, -26.35, 0.367, -6.09 ] + }, + { + "time": 0.4333, + "value": -6.09, + "curve": [ 0.658, -6.09, 1.108, 0 ] + }, + { "time": 1.3333 } + ] + }, + "L-arm": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.125, 53.01 ] + }, + { + "time": 0.3333, + "value": 53.01, + "curve": [ 0.477, 52.83, 0.538, 35.12 ] + }, + { + "time": 0.6, + "value": 35.12, + "curve": [ 0.682, 35.12, 0.754, 56.78 ] + }, + { + "time": 0.8333, + "value": 56.78, + "curve": [ 1.128, 56.78, 1.181, 0 ] + }, + { "time": 1.3333 } + ] + }, + "R-forearm": { + "rotate": [ + { + "curve": [ 0.116, 0, 0.203, 4.89 ] + }, + { + "time": 0.3333, + "value": 9.78, + "curve": [ 0.583, 9.78, 0.804, 0 ] + }, + { "time": 1.3333 } + ] + }, + "L-forearm": { + "rotate": [ + { + "value": 14.9, + "curve": [ 0.143, -80.79, 0.229, 32.08 ] + }, + { + "time": 0.4333, + "value": 32.08, + "curve": [ 0.562, 32.08, 0.497, -11.74 ] + }, + { + "time": 0.6333, + "value": -11.74, + "curve": [ 0.814, -11.74, 0.749, 58 ] + }, + { + "time": 0.9333, + "value": 58, + "curve": [ 1.033, 58, 1.185, 14.9 ] + }, + { "time": 1.3333, "value": 14.9 } + ] + }, + "scalp": { + "rotate": [ + { + "value": -7.01, + "curve": [ 0.095, -7.01, 0.171, -0.43 ] + }, + { + "time": 0.2667, + "value": 7.61, + "curve": [ 0.35, 4.26, 0.458, 0 ] + }, + { "time": 0.6667 }, + { "time": 1.3333, "value": -7.01 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -8.8, + "curve": [ 0.067, -8.8, 0.1, -16.02 ] + }, + { + "time": 0.2667, + "value": -16.02, + "curve": [ 0.333, -16.02, 0.41, 29.39 ] + }, + { + "time": 0.5333, + "value": 29.39, + "curve": [ 0.733, 29.39, 0.885, -8.8 ] + }, + { "time": 1.3333, "value": -8.8 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 4.65, + "curve": [ 0.141, 4.65, 0.125, -17.96 ] + }, + { + "time": 0.3333, + "value": -17.96, + "curve": [ 0.408, -17.96, 0.494, 6.63 ] + }, + { + "time": 0.6333, + "value": 6.63, + "curve": [ 0.808, 6.63, 0.941, 4.65 ] + }, + { "time": 1.3333, "value": 4.65 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json.import b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json.import new file mode 100644 index 000000000..a4b2ecece --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raggedyspineboy/raggedy spineboy.spine-json.import @@ -0,0 +1,14 @@ +[remap] + +importer="spine.json" +type="SpineSkeletonFileResource" +uid="uid://2iqykoiop2tc" +path="res://.godot/imported/raggedy spineboy.spine-json-d90ee4b829503274afa3dbf64c369460.spjson" + +[deps] + +source_file="res://assets/raggedyspineboy/raggedy spineboy.spine-json" +dest_files=["res://.godot/imported/raggedy spineboy.spine-json-d90ee4b829503274afa3dbf64c369460.spjson"] + +[params] + diff --git a/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png b/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png new file mode 100644 index 000000000..b5b04d795 Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png differ diff --git a/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png.import b/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png.import new file mode 100644 index 000000000..7b8550c98 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/light-sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cggfs567rn1ay" +path="res://.godot/imported/light-sprite.png-346e910021b52658f1de723e4c80e05e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/raptor/light-sprite.png" +dest_files=["res://.godot/imported/light-sprite.png-346e910021b52658f1de723e4c80e05e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png b/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png new file mode 100644 index 000000000..5dc3697ca Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png differ diff --git a/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png.import b/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png.import new file mode 100644 index 000000000..8f302b3bb --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/n_raptor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dnjt8gyvsw0l8" +path="res://.godot/imported/n_raptor.png-d9af68b4a56af2b4319bb485e366dc90.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/raptor/n_raptor.png" +dest_files=["res://.godot/imported/n_raptor.png-d9af68b4a56af2b4319bb485e366dc90.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/assets/raptor/raptor-data.tres b/spine-godot/example-v4-csharp/assets/raptor/raptor-data.tres new file mode 100644 index 000000000..d4e99ca58 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/raptor-data.tres @@ -0,0 +1,9 @@ +[gd_resource type="SpineSkeletonDataResource" load_steps=3 format=2] + +[ext_resource path="res://assets/raptor/raptor.atlas" type="SpineAtlasResource" id=1] +[ext_resource path="res://assets/raptor/raptor-pro.skel" type="SpineSkeletonFileResource" id=2] + +[resource] +atlas_res = ExtResource( 1 ) +skeleton_file_res = ExtResource( 2 ) +default_mix = 0.2 diff --git a/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel b/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel new file mode 100644 index 000000000..32ab530d7 Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel differ diff --git a/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel.import b/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel.import new file mode 100644 index 000000000..845790969 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/raptor-pro.skel.import @@ -0,0 +1,14 @@ +[remap] + +importer="spine.skel" +type="SpineSkeletonFileResource" +uid="uid://dor8huwld4f84" +path="res://.godot/imported/raptor-pro.skel-022e23a5f5581547a2d7faa9fb2c54e3.spskel" + +[deps] + +source_file="res://assets/raptor/raptor-pro.skel" +dest_files=["res://.godot/imported/raptor-pro.skel-022e23a5f5581547a2d7faa9fb2c54e3.spskel"] + +[params] + diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt b/spine-godot/example-v4-csharp/assets/raptor/raptor.atlas similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt rename to spine-godot/example-v4-csharp/assets/raptor/raptor.atlas diff --git a/spine-godot/example-v4-csharp/assets/raptor/raptor.atlas.import b/spine-godot/example-v4-csharp/assets/raptor/raptor.atlas.import new file mode 100644 index 000000000..1c6ac9efb --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/raptor.atlas.import @@ -0,0 +1,15 @@ +[remap] + +importer="spine.atlas" +type="SpineAtlasResource" +uid="uid://dhtyf5vltqsjg" +path="res://.godot/imported/raptor.atlas-66da4b831eebf404341993162ba3ddb8.spatlas" + +[deps] + +source_file="res://assets/raptor/raptor.atlas" +dest_files=["res://.godot/imported/raptor.atlas-66da4b831eebf404341993162ba3ddb8.spatlas"] + +[params] + +normal_map_prefix="n" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.png b/spine-godot/example-v4-csharp/assets/raptor/raptor.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.png rename to spine-godot/example-v4-csharp/assets/raptor/raptor.png diff --git a/spine-godot/example-v4-csharp/assets/raptor/raptor.png.import b/spine-godot/example-v4-csharp/assets/raptor/raptor.png.import new file mode 100644 index 000000000..2326b1429 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/raptor/raptor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ucvdpil67hul" +path="res://.godot/imported/raptor.png-505be50f63fd1d0fb9175a9efbb9776c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/raptor/raptor.png" +dest_files=["res://.godot/imported/raptor.png-505be50f63fd1d0fb9175a9efbb9776c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy-data-res.tres b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-data-res.tres new file mode 100644 index 000000000..a1acac5ce --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-data-res.tres @@ -0,0 +1,20 @@ +[gd_resource type="SpineSkeletonDataResource" load_steps=5 format=3 uid="uid://cb6rn6vonqbx0"] + +[ext_resource type="SpineAtlasResource" uid="uid://dt2kctrit34y0" path="res://assets/spineboy/spineboy.atlas" id="1"] +[ext_resource type="SpineSkeletonFileResource" uid="uid://bngulrxfavqyn" path="res://assets/spineboy/spineboy-pro.spine-json" id="2"] + +[sub_resource type="SpineAnimationMix" id="1"] +from = "idle" +to = "run" +mix = 0.2 + +[sub_resource type="SpineAnimationMix" id="2"] +from = "run" +to = "idle" +mix = 0.2 + +[resource] +atlas_res = ExtResource("1") +skeleton_file_res = ExtResource("2") +default_mix = 0.1 +animation_mixes = [SubResource("1"), SubResource("2")] diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel new file mode 100644 index 000000000..199839b49 Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel differ diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel.import b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel.import new file mode 100644 index 000000000..f6d3adbf0 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.skel.import @@ -0,0 +1,14 @@ +[remap] + +importer="spine.skel" +type="SpineSkeletonFileResource" +uid="uid://cth0eypg16cgi" +path="res://.godot/imported/spineboy-pro.skel-52781a88227740d2a80cb8d7636ea22e.spskel" + +[deps] + +source_file="res://assets/spineboy/spineboy-pro.skel" +dest_files=["res://.godot/imported/spineboy-pro.skel-52781a88227740d2a80cb8d7636ea22e.spskel"] + +[params] + diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json new file mode 100644 index 000000000..b4dd8b40f --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json @@ -0,0 +1,8707 @@ +{ +"skeleton": { + "hash": "itfFESDjM1c", + "spine": "4.1.23-beta", + "x": -188.63, + "y": -7.94, + "width": 418.45, + "height": 686.2, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root", "rotation": 0.05 }, + { "name": "hip", "parent": "root", "y": 247.27 }, + { "name": "crosshair", "parent": "root", "x": 302.83, "y": 569.45, "color": "ff3f00ff" }, + { + "name": "aim-constraint-target", + "parent": "hip", + "length": 26.24, + "rotation": 19.61, + "x": 1.02, + "y": 5.62, + "color": "abe323ff" + }, + { "name": "rear-foot-target", "parent": "root", "x": 61.91, "y": 0.42, "color": "ff3f00ff" }, + { "name": "rear-leg-target", "parent": "rear-foot-target", "x": -33.91, "y": 37.34, "color": "ff3f00ff" }, + { + "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": 51.58, + "rotation": 45.78, + "x": 121.46, + "y": -0.76, + "color": "ff000dff" + }, + { + "name": "back-foot-tip", + "parent": "rear-foot", + "length": 50.3, + "rotation": -0.85, + "x": 51.17, + "y": 0.24, + "transform": "noRotationOrReflection", + "color": "ff000dff" + }, + { "name": "board-ik", "parent": "root", "x": -131.78, "y": 69.09, "color": "4c56ffff" }, + { "name": "clipping", "parent": "root" }, + { "name": "hoverboard-controller", "parent": "root", "rotation": -0.28, "x": -329.69, "y": 69.82, "color": "ff0004ff" }, + { "name": "exhaust1", "parent": "hoverboard-controller", "rotation": 3.02, "x": -249.68, "y": 53.39 }, + { "name": "exhaust2", "parent": "hoverboard-controller", "rotation": 26.34, "x": -191.6, "y": -22.92 }, + { + "name": "exhaust3", + "parent": "hoverboard-controller", + "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": "flare10", "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": "torso", + "parent": "hip", + "length": 42.52, + "rotation": 103.82, + "x": -1.62, + "y": 4.9, + "color": "e0da19ff" + }, + { "name": "torso2", "parent": "torso", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "torso3", "parent": "torso2", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "front-shoulder", "parent": "torso3", "rotation": 255.89, "x": 18.72, "y": 19.33, "color": "00ff04ff" }, + { "name": "front-upper-arm", "parent": "front-shoulder", "length": 69.45, "rotation": -87.51, "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-foot-target", "parent": "root", "x": -13.53, "y": 0.04, "color": "ff3f00ff" }, + { "name": "front-leg-target", "parent": "front-foot-target", "x": -28.4, "y": 29.06, "color": "ff3f00ff" }, + { + "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": 41.01, + "rotation": 51.27, + "x": 128.76, + "y": -0.34, + "color": "00ff04ff" + }, + { + "name": "front-foot-tip", + "parent": "front-foot", + "length": 56.03, + "rotation": -1.68, + "x": 41.42, + "y": -0.09, + "transform": "noRotationOrReflection", + "color": "00ff04ff" + }, + { "name": "back-shoulder", "parent": "torso3", "rotation": -104.11, "x": 7.32, "y": -19.22, "color": "ff000dff" }, + { "name": "rear-upper-arm", "parent": "back-shoulder", "length": 51.94, "rotation": -65.45, "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.43, + "x": 34.42, + "y": -0.45, + "color": "ff000dff" + }, + { "name": "gun-tip", "parent": "gun", "rotation": 7.1, "x": 200.78, "y": 52.5, "color": "ff0000ff" }, + { + "name": "neck", + "parent": "torso3", + "length": 25.45, + "rotation": -31.54, + "x": 42.46, + "y": -0.31, + "color": "e0da19ff" + }, + { + "name": "head", + "parent": "neck", + "length": 131.79, + "rotation": 26.1, + "x": 27.66, + "y": -0.26, + "color": "e0da19ff" + }, + { + "name": "hair1", + "parent": "head", + "length": 47.23, + "rotation": -49.1, + "x": 149.83, + "y": -59.77, + "color": "e0da19ff" + }, + { + "name": "hair2", + "parent": "hair1", + "length": 55.57, + "rotation": 50.42, + "x": 47.23, + "y": 0.19, + "color": "e0da19ff" + }, + { + "name": "hair3", + "parent": "head", + "length": 62.22, + "rotation": -32.17, + "x": 164.14, + "y": 3.68, + "color": "e0da19ff" + }, + { + "name": "hair4", + "parent": "hair3", + "length": 80.28, + "rotation": 83.71, + "x": 62.22, + "y": -0.04, + "color": "e0da19ff" + }, + { "name": "hoverboard-thruster-front", "parent": "hoverboard-controller", "rotation": -29.2, "x": 95.77, "y": -2.99, "transform": "noRotationOrReflection" }, + { "name": "hoverboard-thruster-rear", "parent": "hoverboard-controller", "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, "color": "ffb900ff" }, + { "name": "muzzle-ring", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring2", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring3", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring4", "parent": "muzzle", "color": "ffb900ff" }, + { "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": "hoverboard-controller", "x": -110.56, "y": 2.62, "color": "000effff" }, + { + "name": "side-glow2", + "parent": "hoverboard-controller", + "x": -110.56, + "y": 2.62, + "scaleX": 0.738, + "scaleY": 0.738, + "color": "000effff" + }, + { "name": "head-control", "parent": "head", "x": 110.21, "color": "00a220ff" } +], +"slots": [ + { "name": "portal-bg", "bone": "portal" }, + { "name": "portal-shade", "bone": "portal-shade" }, + { "name": "portal-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": "hoverboard-controller" }, + { "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": "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": "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": 13, + "bones": [ "rear-upper-arm" ], + "target": "crosshair", + "mix": 0 + }, + { + "name": "aim-torso-ik", + "order": 8, + "bones": [ "aim-constraint-target" ], + "target": "crosshair" + }, + { + "name": "board-ik", + "order": 1, + "bones": [ "hoverboard-controller" ], + "target": "board-ik" + }, + { + "name": "front-foot-ik", + "order": 6, + "bones": [ "front-foot" ], + "target": "front-foot-target" + }, + { + "name": "front-leg-ik", + "order": 4, + "bones": [ "front-thigh", "front-shin" ], + "target": "front-leg-target", + "bendPositive": false + }, + { + "name": "rear-foot-ik", + "order": 7, + "bones": [ "rear-foot" ], + "target": "rear-foot-target" + }, + { + "name": "rear-leg-ik", + "order": 5, + "bones": [ "rear-thigh", "rear-shin" ], + "target": "rear-leg-target", + "bendPositive": false + } +], +"transform": [ + { + "name": "aim-front-arm-transform", + "order": 11, + "bones": [ "front-upper-arm" ], + "target": "aim-constraint-target", + "rotation": -180, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-head-transform", + "order": 10, + "bones": [ "head" ], + "target": "aim-constraint-target", + "rotation": 84.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-rear-arm-transform", + "order": 12, + "bones": [ "rear-upper-arm" ], + "target": "aim-constraint-target", + "x": 57.7, + "y": 56.4, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-torso-transform", + "order": 9, + "bones": [ "torso" ], + "target": "aim-constraint-target", + "rotation": 69.5, + "shearY": -36, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "front-foot-board-transform", + "order": 2, + "bones": [ "front-foot-target" ], + "target": "hoverboard-controller", + "x": -69.8, + "y": 20.7, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "rear-foot-board-transform", + "order": 3, + "bones": [ "rear-foot-target" ], + "target": "hoverboard-controller", + "x": 86.6, + "y": 21.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "shoulder", + "bones": [ "back-shoulder" ], + "target": "front-shoulder", + "x": 40.17, + "y": -1.66, + "mixRotate": 0, + "mixX": -1, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "toes-board", + "order": 14, + "bones": [ "front-foot-tip", "back-foot-tip" ], + "target": "hoverboard-controller", + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 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 ], + "color": "ce3a3aff" + } + }, + "crosshair": { + "crosshair": { "width": 89, "height": 89 } + }, + "exhaust1": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "exhaust2": { + "hoverglow-small": { + "x": 0.01, + "y": -0.76, + "scaleX": 0.4208, + "scaleY": 0.8403, + "rotation": -89.25, + "width": 274, + "height": 75 + } + }, + "exhaust3": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "eye": { + "eye-indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -36.8, -91.35, 0.3, 46, 73.41, -91.35, 0.7, 2, 66, -87.05, -13.11, 0.70968, 46, 23.16, -13.11, 0.29032, 2, 66, -12.18, 34.99, 0.82818, 46, 98.03, 34.99, 0.17182, 2, 66, 38.07, -43.25, 0.59781, 46, 148.28, -43.25, 0.40219 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + }, + "eye-surprised": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 66, -46.74, -89.7, 0.3, 46, 63.47, -89.7, 0.7, 2, 66, -77.58, -1.97, 0.71, 46, 32.63, -1.97, 0.29, 2, 66, 6.38, 27.55, 0.83, 46, 116.59, 27.55, 0.17, 2, 66, 37.22, -60.19, 0.6, 46, 147.44, -60.19, 0.4 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "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": { + "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.17846, 0, 0.49796, 0 ], + "triangles": [ 8, 9, 3, 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 0, 12, 13, 0, 11, 12, 0, 1, 11, 9, 2, 3, 1, 2, 10, 9, 10, 2 ], + "vertices": [ 2, 38, 18.17, 41.57, 0.7896, 39, 12.46, 46.05, 0.2104, 2, 38, 24.08, 40.76, 0.71228, 39, 16.12, 41.34, 0.28772, 2, 38, 29.81, 39.98, 0.55344, 39, 19.67, 36.78, 0.44656, 2, 38, 32.81, 41.67, 0.38554, 39, 23, 35.89, 0.61446, 2, 38, 37.86, 44.52, 0.25567, 39, 28.61, 34.4, 0.74433, 2, 38, 42.65, 47.22, 0.17384, 39, 33.92, 32.99, 0.82616, 1, 39, 64.15, 14.56, 1, 1, 39, 64.51, -5.87, 1, 1, 39, 21.08, -6.64, 1, 2, 38, 44.67, -6.77, 0.5684, 39, -2.34, -6.97, 0.4316, 1, 38, 3.1, -48.81, 1, 1, 38, -26.73, -19.31, 1, 1, 38, -30.15, 15.69, 1, 1, 38, -1.84, 44.32, 1 ], + "hull": 14, + "edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 26, 6, 8, 8, 10 ], + "width": 126, + "height": 69 + } + }, + "front-shin": { + "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, + "edges": [ 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 46, 48, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 32, 34, 50, 52, 52, 54, 54, 56, 40, 58, 58, 60, 8, 10, 20, 22, 22, 24, 62, 64, 64, 66, 66, 68, 8, 70, 70, 60, 68, 70, 58, 72, 72, 74, 74, 76, 76, 78, 24, 26, 26, 28, 58, 80, 80, 82, 82, 84, 84, 86, 86, 44, 70, 88, 88, 90, 90, 92, 92, 94, 94, 48, 80, 88, 88, 6, 82, 90, 90, 4, 84, 92, 92, 2, 86, 94, 94, 0, 56, 60, 10, 12, 12, 14, 14, 16, 28, 30, 30, 32, 26, 98, 98, 78, 30, 98, 24, 100, 100, 50, 98, 100, 22, 102, 102, 62, 100, 102, 16, 18, 18, 20, 102, 18 ], + "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": 28.31, "y": 7.37, "rotation": 97.9, "width": 46, "height": 97 } + }, + "goggles": { + "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": [ 18, 44, 15, 21, 19, 20, 17, 18, 15, 44, 19, 21, 2, 3, 4, 18, 19, 44, 2, 33, 34, 33, 2, 4, 5, 33, 4, 5, 6, 33, 7, 32, 6, 31, 50, 33, 32, 31, 33, 6, 32, 33, 31, 49, 50, 49, 31, 32, 49, 32, 7, 8, 49, 7, 33, 50, 34, 17, 15, 16, 9, 48, 8, 49, 48, 50, 50, 48, 45, 47, 45, 48, 50, 45, 30, 45, 47, 46, 45, 46, 29, 30, 45, 29, 30, 29, 34, 30, 34, 50, 47, 26, 46, 25, 10, 11, 12, 25, 11, 41, 12, 42, 42, 44, 43, 43, 21, 22, 41, 40, 25, 41, 42, 40, 29, 35, 34, 40, 26, 25, 25, 26, 47, 37, 24, 0, 36, 37, 0, 42, 43, 39, 42, 39, 40, 28, 38, 36, 40, 39, 26, 28, 27, 38, 26, 39, 27, 37, 38, 23, 39, 43, 38, 38, 37, 36, 27, 39, 38, 43, 22, 38, 37, 23, 24, 22, 23, 38, 36, 0, 35, 28, 36, 35, 29, 28, 35, 27, 28, 46, 26, 27, 46, 35, 0, 1, 34, 35, 1, 12, 41, 25, 47, 10, 25, 44, 21, 43, 42, 14, 44, 14, 15, 44, 13, 14, 42, 12, 13, 42, 46, 28, 29, 47, 48, 10, 48, 9, 10, 49, 8, 48, 2, 34, 1 ], + "vertices": [ 2, 66, 61.88, 22.81, 0.832, 46, 172.09, 22.81, 0.168, 2, 66, 59.89, -31.19, 0.6855, 46, 170.1, -31.19, 0.3145, 2, 66, 49.2, -86.8, 0.32635, 46, 159.41, -86.8, 0.67365, 2, 66, 56.82, -99.01, 0.01217, 46, 167.03, -99.01, 0.98783, 1, 46, 143.4, -115.48, 1, 2, 66, 15, -110.14, 0.0041, 46, 125.21, -110.14, 0.9959, 2, 66, -0.32, -96.36, 0.07948, 46, 109.89, -96.36, 0.92052, 2, 66, -26.56, -100.19, 0.01905, 46, 83.65, -100.19, 0.98095, 2, 66, -46.96, -81.16, 0.4921, 46, 63.26, -81.16, 0.50791, 2, 66, -71.84, -76.69, 0.56923, 46, 38.37, -76.69, 0.43077, 2, 66, -72.54, -43.98, 0.74145, 46, 37.67, -43.98, 0.25855, 2, 66, -73.2, -13.47, 0.87929, 46, 37.01, -13.47, 0.12071, 2, 66, -59.63, 13.55, 0.864, 46, 50.58, 13.55, 0.136, 2, 66, -59.69, 38.45, 0.85289, 46, 50.52, 38.45, 0.14711, 2, 66, -45.26, 56.6, 0.74392, 46, 64.95, 56.6, 0.25608, 2, 66, -62.31, 79.96, 0.624, 46, 47.9, 79.96, 0.376, 2, 66, -80.76, 73.42, 0.616, 46, 29.45, 73.42, 0.384, 2, 66, -93.9, 86.64, 0.288, 46, 16.31, 86.64, 0.712, 1, 46, 81.51, 139.38, 1, 1, 46, 112.56, 150.3, 1, 2, 66, 16.76, 134.97, 0.02942, 46, 126.97, 134.97, 0.97058, 2, 66, 18.42, 113.28, 0.36147, 46, 128.63, 113.28, 0.63853, 2, 66, 20.02, 92.43, 0.7135, 46, 130.23, 92.43, 0.2865, 2, 66, 44.58, 81.29, 0.69603, 46, 154.79, 81.29, 0.30397, 2, 66, 52, 71.48, 0.848, 46, 162.21, 71.48, 0.152, 2, 66, -49.25, 13.27, 0.8, 46, 60.96, 13.27, 0.2, 2, 66, -23.88, 31.88, 0.896, 46, 86.33, 31.88, 0.104, 2, 66, 6.72, 42.6, 0.928, 46, 116.93, 42.6, 0.072, 2, 66, 25.26, 31.44, 0.8, 46, 135.47, 31.44, 0.2, 2, 66, 26.77, 2.59, 0.75, 46, 136.98, 2.59, 0.25, 2, 66, 21.02, -36.66, 0.54887, 46, 131.23, -36.66, 0.45113, 2, 66, 8.01, -74.65, 0.36029, 46, 118.22, -74.65, 0.63971, 2, 66, -1.52, -88.24, 0.1253, 46, 108.69, -88.24, 0.8747, 2, 66, 20.25, -95.44, 0.08687, 46, 130.46, -95.44, 0.91313, 2, 66, 34.42, -39.36, 0.72613, 46, 144.63, -39.36, 0.27387, 2, 66, 42.03, 1.7, 0.824, 46, 152.25, 1.7, 0.176, 2, 66, 45.85, 32.6, 0.856, 46, 156.06, 32.6, 0.144, 1, 66, 46.01, 61.02, 1, 1, 66, 22.35, 66.41, 1, 1, 66, 1.73, 61.84, 1, 2, 66, -31.17, 38.83, 0.928, 46, 79.04, 38.83, 0.072, 2, 66, -52.94, 19.31, 0.79073, 46, 57.27, 19.31, 0.20927, 2, 66, -39.54, 52.42, 0.912, 46, 70.67, 52.42, 0.088, 2, 66, -3.2, 87.61, 0.744, 46, 107.02, 87.61, 0.256, 2, 66, -14.82, 116.7, 0.6368, 46, 95.4, 116.7, 0.3632, 2, 66, 2.7, -6.87, 0.856, 46, 112.91, -6.87, 0.144, 2, 66, 6.21, 15.8, 0.744, 46, 116.42, 15.8, 0.256, 2, 66, -15.39, 2.47, 0.856, 46, 94.82, 2.47, 0.144, 2, 66, -12.98, -40.48, 0.72102, 46, 97.24, -40.48, 0.27898, 2, 66, -19.55, -68.16, 0.59162, 46, 90.66, -68.16, 0.40838, 2, 66, 17.44, -47.15, 0.53452, 46, 127.65, -47.15, 0.46548 ], + "hull": 25, + "edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ], + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 } + }, + "head": { + "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, 0.22468, 0.69824, 0.14552, 0.67405 ], + "triangles": [ 50, 49, 62, 34, 25, 31, 39, 35, 34, 38, 39, 34, 37, 38, 34, 42, 39, 38, 43, 39, 42, 32, 2, 31, 31, 37, 34, 42, 38, 37, 41, 42, 37, 43, 22, 39, 30, 31, 29, 36, 37, 31, 30, 36, 31, 40, 41, 37, 36, 40, 37, 36, 30, 44, 55, 22, 43, 55, 48, 56, 47, 48, 55, 46, 55, 54, 42, 55, 43, 47, 55, 46, 62, 49, 48, 61, 47, 46, 62, 48, 47, 61, 62, 47, 46, 54, 45, 42, 41, 55, 61, 46, 45, 55, 41, 54, 61, 51, 50, 61, 50, 62, 60, 41, 40, 54, 41, 60, 53, 61, 45, 52, 51, 61, 57, 53, 45, 57, 45, 54, 53, 52, 61, 52, 19, 51, 57, 18, 52, 57, 52, 53, 17, 54, 60, 57, 54, 17, 18, 57, 17, 19, 50, 51, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 29, 31, 2, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 29, 6, 44, 30, 6, 18, 19, 52, 49, 56, 48, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 22, 35, 22, 23, 35, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 56, 21, 22, 55, 56, 22, 9, 40, 8, 20, 21, 56, 20, 56, 49, 9, 60, 40, 10, 60, 9, 20, 50, 19, 12, 10, 11, 13, 10, 12, 14, 60, 10, 13, 14, 10, 59, 60, 14, 58, 59, 14, 58, 14, 15, 16, 17, 60, 59, 16, 60, 15, 16, 59, 15, 59, 58, 20, 49, 50 ], + "vertices": [ 2, 50, 41.97, -41.8, 0.94074, 66, 165.41, -22.6, 0.05926, 4, 48, 73.47, 27.54, 0.26795, 50, -5.75, -51.71, 0.4738, 49, 112.99, -11.41, 0.12255, 66, 143.5, -66.13, 0.1357, 4, 48, 38.23, 10.99, 0.6831, 50, -41.01, -35.22, 0.07866, 49, 92.73, -44.66, 0.04872, 66, 108.65, -83.49, 0.18952, 2, 48, 73.35, 10.89, 0.8455, 66, 143.77, -82.78, 0.1545, 2, 48, 58.59, -10.38, 0.91607, 66, 129.5, -104.39, 0.08393, 3, 46, 195.82, -119.82, 0.104, 47, 75.49, -4.55, 0.09191, 48, 14.36, -24.8, 0.80409, 4, 46, 178.62, -113.98, 0.19022, 47, 59.82, -13.72, 0.33409, 48, -2.7, -18.57, 0.46643, 66, 68.41, -113.98, 0.00926, 4, 46, 163.06, -108.69, 0.18724, 47, 45.64, -22.03, 0.3133, 48, -18.14, -12.93, 0.47469, 66, 52.84, -108.69, 0.02477, 2, 46, 151.52, -95.05, 0.91122, 66, 41.31, -95.05, 0.08878, 2, 46, 110.61, -87.69, 0.70564, 66, 0.4, -87.69, 0.29436, 2, 46, 81.05, -86.58, 0.63951, 66, -29.16, -86.58, 0.36049, 2, 46, 89.82, -114.32, 0.57, 66, -20.39, -114.32, 0.43, 2, 46, 68.72, -120.91, 0.57, 66, -41.49, -120.91, 0.43, 2, 46, 58.1, -115.9, 0.57, 66, -52.11, -115.9, 0.43, 2, 46, 51.03, -100.63, 0.64242, 66, -59.18, -100.63, 0.35758, 2, 46, 38.79, -106.76, 0.81659, 66, -71.43, -106.76, 0.18341, 2, 46, 2.68, -89.7, 0.77801, 66, -107.53, -89.7, 0.22199, 2, 46, -22.07, -19.3, 0.823, 66, -132.28, -19.3, 0.177, 2, 46, 1.2, 45.63, 0.51204, 66, -109.01, 45.63, 0.48796, 2, 46, 8.07, 64.81, 0.60869, 66, -102.14, 64.81, 0.39131, 2, 46, 35.44, 93.73, 0.80009, 66, -74.77, 93.73, 0.19991, 2, 46, 59.98, 119.66, 0.93554, 66, -50.23, 119.66, 0.06446, 2, 46, 109.26, 136.99, 0.99895, 66, -0.95, 136.99, 0.00105, 1, 46, 174.07, 135.27, 1, 3, 46, 205.59, 101.22, 0.80778, 49, -16.84, 104.63, 0.15658, 66, 95.38, 101.22, 0.03564, 3, 50, 58.94, 30.5, 0.43491, 49, 38.36, 61.89, 0.28116, 66, 119.35, 35.65, 0.28393, 2, 50, 75.56, 19.01, 0.92164, 66, 138.68, 41.52, 0.07836, 1, 50, 106.7, 26.9, 1, 1, 50, 83.79, -9.51, 1, 5, 47, 44.51, 27.24, 0.15139, 48, 19.12, 19.33, 0.44847, 50, -46.82, -15.19, 0.05757, 49, 72.19, -48.24, 0.1149, 66, 89.35, -75.58, 0.22767, 3, 47, 7.42, 19.08, 0.37772, 49, 34.32, -45.24, 0.09918, 66, 58.9, -52.89, 0.52311, 2, 49, 45.94, -9.07, 0.4826, 66, 87.99, -28.45, 0.5174, 2, 50, 20.62, -16.35, 0.7435, 66, 132.21, -23.49, 0.2565, 2, 50, 75.74, 0.94, 0.97172, 66, 152.95, 30.42, 0.02828, 4, 46, 200.45, 40.46, 0.18809, 50, 44.6, 56.29, 0.05831, 49, 11.15, 50.46, 0.14366, 66, 90.24, 40.46, 0.60994, 2, 46, 171.41, 90.12, 0.48644, 66, 61.2, 90.12, 0.51356, 2, 46, 164.84, -48.18, 0.43217, 66, 54.62, -48.18, 0.56783, 4, 46, 168.13, -6.02, 0.01949, 47, -28.65, 49.02, 0.02229, 49, 8.54, -6.09, 0.12791, 66, 57.92, -6.02, 0.83031, 2, 46, 167.84, 37.87, 0.15, 66, 57.63, 37.87, 0.85, 2, 46, 162.36, 71.5, 0.24107, 66, 52.15, 71.5, 0.75893, 2, 46, 163.11, -47.44, 0.41951, 66, 52.9, -47.44, 0.58049, 2, 46, 165.94, -5.87, 0.16355, 66, 55.73, -5.87, 0.83645, 2, 46, 165.14, 37.38, 0.15, 66, 54.93, 37.38, 0.85, 2, 46, 157.6, 71.4, 0.21735, 66, 47.39, 71.4, 0.78265, 3, 46, 163.5, -99.54, 0.61812, 47, 39.01, -15.71, 0.30445, 66, 53.29, -99.54, 0.07744, 2, 46, 45.38, 27.24, 0.16741, 66, -64.83, 27.24, 0.83259, 2, 46, 63.74, 44.98, 0.15, 66, -46.47, 44.98, 0.85, 2, 46, 70.7, 61.92, 0.22175, 66, -39.51, 61.92, 0.77825, 2, 46, 62.88, 78.71, 0.38, 66, -47.34, 78.71, 0.62, 2, 46, 46.53, 85.3, 0.51, 66, -63.68, 85.3, 0.49, 2, 46, 29.92, 79.34, 0.388, 66, -80.29, 79.34, 0.612, 2, 46, 15.08, 62.21, 0.38, 66, -95.13, 62.21, 0.62, 2, 46, 14.09, 45.32, 0.41, 66, -96.12, 45.32, 0.59, 2, 46, 24.3, 27.06, 0.192, 66, -85.91, 27.06, 0.808, 1, 66, -61.57, 15.3, 1, 2, 46, 84.87, 62.14, 0.16757, 66, -25.34, 62.14, 0.83243, 2, 46, 61.9, 94.84, 0.68145, 66, -48.31, 94.84, 0.31855, 2, 46, 22.54, 21.88, 0.16, 66, -87.67, 21.88, 0.84, 2, 46, 43.15, -95.95, 0.73445, 66, -67.06, -95.95, 0.26555, 2, 46, 41.77, -87.24, 0.67858, 66, -68.44, -87.24, 0.32142, 2, 46, 60.05, -70.36, 0.50195, 66, -50.16, -70.36, 0.49805, 2, 46, 48.49, 51.09, 0.25, 66, -61.72, 51.09, 0.75, 2, 46, 48.17, 73.71, 0.15634, 66, -62.04, 73.71, 0.84366 ], + "hull": 29, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ], + "width": 271, + "height": 298 + } + }, + "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": { + "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, + "edges": [ 0, 2, 8, 10, 10, 12, 12, 14, 18, 20, 20, 22, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 80, 82, 82, 84, 84, 86, 86, 88, 0, 88, 2, 90, 90, 92, 92, 94, 94, 96, 96, 32, 18, 98, 98, 100, 100, 102, 2, 4, 102, 4, 92, 102, 0, 104, 104, 106, 106, 108, 78, 80, 108, 78, 74, 76, 76, 78, 62, 56, 64, 70, 0, 110, 112, 114, 114, 116, 116, 118, 118, 42, 50, 116, 114, 34, 98, 120, 120, 122, 22, 24, 24, 26, 120, 24, 122, 124, 124, 126, 126, 128, 128, 96, 80, 130, 130, 132, 132, 134, 134, 88, 14, 16, 16, 18, 136, 16, 136, 138, 138, 140, 4, 6, 6, 8, 140, 6, 96, 112, 92, 142, 142, 144, 110, 146, 146, 112, 144, 146 ], + "width": 492, + "height": 152 + } + }, + "hoverboard-thruster-front": { + "hoverboard-thruster": { "x": 0.02, "y": -7.08, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverboard-thruster-rear": { + "hoverboard-thruster": { "x": 1.1, "y": -6.29, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverglow-front": { + "hoverglow-small": { + "x": 2.13, + "y": -2, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.15, + "width": 274, + "height": 75 + } + }, + "hoverglow-rear": { + "hoverglow-small": { + "x": 1.39, + "y": -2.09, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.61, + "width": 274, + "height": 75 + } + }, + "mouth": { + "mouth-grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.88, 0.22, 46, 11.28, -85.88, 0.78, 2, 66, -129.77, 1.84, 0.6, 46, -19.56, 1.84, 0.4, 2, 66, -74.12, 21.41, 0.6, 46, 36.09, 21.41, 0.4, 2, 66, -43.28, -66.32, 0.4, 46, 66.93, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-oooo": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 46, 11.28, -85.89, 0.22, 66, -98.93, -85.89, 0.78, 2, 46, -19.56, 1.85, 0.6, 66, -129.78, 1.85, 0.4, 2, 46, 36.1, 21.42, 0.6, 66, -74.12, 21.42, 0.4, 2, 46, 66.94, -66.32, 0.4, 66, -43.27, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-smile": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.89, 0.21075, 46, 11.28, -85.89, 0.78925, 2, 66, -129.77, 1.85, 0.6, 46, -19.56, 1.85, 0.4, 2, 66, -74.11, 21.42, 0.6, 46, 36.1, 21.42, 0.4, 2, 66, -43.27, -66.32, 0.40772, 46, 66.94, -66.32, 0.59228 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle01": { + "x": 151.97, + "y": 5.81, + "scaleX": 3.7361, + "scaleY": 3.7361, + "rotation": 0.15, + "width": 133, + "height": 79 + }, + "muzzle02": { + "x": 187.25, + "y": 5.9, + "scaleX": 4.0623, + "scaleY": 4.0623, + "rotation": 0.15, + "width": 135, + "height": 84 + }, + "muzzle03": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.1325, + "scaleY": 4.1325, + "rotation": 0.15, + "width": 166, + "height": 106 + }, + "muzzle04": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.0046, + "scaleY": 4.0046, + "rotation": 0.15, + "width": 149, + "height": 90 + }, + "muzzle05": { + "x": 293.8, + "y": 6.19, + "scaleX": 4.4673, + "scaleY": 4.4673, + "rotation": 0.15, + "width": 135, + "height": 75 + } + }, + "muzzle-glow": { + "muzzle-glow": { "width": 50, "height": 50 } + }, + "muzzle-ring": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring2": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring3": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring4": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "neck": { + "neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "portal-bg": { + "portal-bg": { "x": -3.1, "y": 7.25, "scaleX": 1.0492, "scaleY": 1.0492, "width": 266, "height": 266 } + }, + "portal-flare1": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare2": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare3": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare4": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare5": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare6": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare7": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare8": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare9": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare10": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-shade": { + "portal-shade": { "width": 266, "height": 266 } + }, + "portal-streaks1": { + "portal-streaks1": { "scaleX": 0.9774, "scaleY": 0.9774, "width": 252, "height": 256 } + }, + "portal-streaks2": { + "portal-streaks2": { "x": -1.64, "y": 2.79, "width": 250, "height": 249 } + }, + "rear-bracer": { + "rear-bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear-foot": { + "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, 3, 4, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 1, 10, 3, 9, 2, 2, 10, 1, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 3, 8, 9 ], + "vertices": [ 2, 8, 10.45, 29.41, 0.90802, 9, -6.74, 49.62, 0.09198, 2, 8, 16.56, 29.27, 0.84259, 9, -2.65, 45.09, 0.15741, 2, 8, 21.8, 29.15, 0.69807, 9, 0.85, 41.2, 0.30193, 2, 8, 25.53, 31.43, 0.52955, 9, 5.08, 40.05, 0.47045, 2, 8, 30.18, 34.27, 0.39303, 9, 10.33, 38.62, 0.60697, 2, 8, 44.02, 42.73, 0.27525, 9, 25.98, 34.36, 0.72475, 2, 8, 76.47, 47.28, 0.21597, 9, 51.56, 13.9, 0.78403, 2, 8, 88.09, 36.29, 0.28719, 9, 51.55, -2.09, 0.71281, 2, 8, 52.94, -0.73, 0.47576, 9, 0.52, -1.98, 0.52424, 2, 8, 34.63, -20.23, 0.68757, 9, -26.23, -2.03, 0.31243, 2, 8, 10.44, -45.81, 0.84141, 9, -61.43, -2, 0.15859, 2, 8, -15.11, -21.64, 0.93283, 9, -61.4, 33.15, 0.06717, 1, 8, -22.57, 6.61, 1, 1, 8, -0.76, 29.67, 1 ], + "hull": 14, + "edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ], + "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 } + }, + "side-glow1": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow2": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow3": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.3586, "scaleY": 0.6297, "width": 274, "height": 75 } + }, + "torso": { + "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": [ 18, 1, 2, 19, 2, 3, 18, 0, 1, 23, 15, 26, 27, 26, 16, 14, 15, 23, 15, 16, 26, 17, 27, 16, 13, 14, 23, 0, 27, 17, 13, 23, 30, 11, 12, 24, 21, 31, 19, 12, 13, 30, 24, 22, 31, 31, 22, 19, 12, 30, 24, 32, 24, 31, 24, 30, 22, 3, 20, 19, 32, 31, 21, 11, 24, 32, 4, 5, 3, 8, 28, 7, 7, 29, 6, 7, 28, 29, 9, 25, 8, 8, 25, 28, 9, 10, 25, 29, 5, 6, 10, 32, 25, 25, 21, 28, 25, 32, 21, 10, 11, 32, 28, 21, 29, 29, 20, 5, 29, 21, 20, 5, 20, 3, 20, 21, 19, 33, 26, 27, 22, 18, 19, 19, 18, 2, 33, 27, 18, 30, 23, 22, 22, 33, 18, 23, 33, 22, 33, 23, 26, 27, 0, 18 ], + "vertices": [ 2, 29, 44.59, -10.39, 0.88, 40, -17.65, 33.99, 0.12, 3, 28, 59.65, -45.08, 0.12189, 29, 17.13, -45.08, 0.26811, 40, 22.68, 15.82, 0.61, 3, 28, 55.15, -44.72, 0.1345, 29, 12.63, -44.72, 0.2555, 40, 23.43, 11.37, 0.61, 3, 27, 31.01, -39.45, 0.51133, 28, -11.51, -39.45, 0.30867, 40, 34.58, -54.57, 0.18, 3, 27, 27.01, -39.14, 0.53492, 28, -15.5, -39.14, 0.28508, 40, 35.25, -58.52, 0.18, 2, 27, 25.79, -31.5, 0.75532, 28, -16.73, -31.5, 0.24468, 1, 27, -2.61, -32, 1, 1, 27, -28.2, -12.29, 1, 1, 27, -26.08, 14.55, 1, 1, 27, -24.35, 36.5, 1, 2, 27, 17.6, 46.3, 0.8332, 28, -24.92, 46.3, 0.1668, 2, 27, 34.1, 48.89, 0.59943, 28, -8.42, 48.89, 0.40058, 3, 27, 51.83, 51.67, 0.29262, 28, 9.32, 51.67, 0.63181, 29, -33.2, 51.67, 0.07557, 3, 27, 75.34, 55.35, 0.06656, 28, 32.82, 55.35, 0.62298, 29, -9.7, 55.35, 0.31046, 2, 28, 54.06, 53.67, 0.37296, 29, 11.54, 53.67, 0.62704, 2, 28, 79.79, 51.64, 0.10373, 29, 37.27, 51.64, 0.89627, 1, 29, 71.04, 34.76, 1, 1, 29, 70.01, 21.72, 1, 1, 30, 36.74, 7.06, 1, 3, 30, 45.7, -24.98, 0.67, 28, 25.87, -18.9, 0.3012, 29, -16.65, -18.9, 0.0288, 2, 27, 28.69, -24.42, 0.77602, 28, -13.83, -24.42, 0.22398, 3, 30, 43.24, -56.49, 0.064, 27, 38.43, -8.84, 0.67897, 28, -4.09, -8.84, 0.25703, 3, 30, 22.02, -14.85, 0.29, 28, 41.48, 1.59, 0.53368, 29, -1.04, 1.59, 0.17632, 3, 30, -7.45, -8.33, 0.76, 28, 54.98, 28.59, 0.06693, 29, 12.46, 28.59, 0.17307, 3, 30, 3.91, -48.4, 0.25, 27, 55.87, 27.33, 0.15843, 28, 13.35, 27.33, 0.59157, 1, 27, 11.47, 21.51, 1, 2, 30, -11.09, 18.74, 0.416, 29, 39.6, 25.51, 0.584, 2, 30, 14.56, 20.03, 0.53, 29, 34.6, 0.33, 0.47, 1, 27, 14.12, -10.1, 1, 2, 27, 19.94, -21.03, 0.92029, 28, -22.58, -21.03, 0.07971, 3, 30, -2.08, -27.26, 0.29, 28, 35.31, 27.99, 0.49582, 29, -7.21, 27.99, 0.21418, 2, 30, 34.42, -39.19, 0.25, 28, 14.84, -4.5, 0.75, 2, 27, 34.87, 24.58, 0.67349, 28, -7.64, 24.58, 0.32651, 2, 30, 18.5, 1.59, 0.76, 29, 15.76, 1, 0.24 ], + "hull": 18, + "edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 32, 34, 30, 32, 2, 4, 36, 4, 36, 38, 38, 40, 4, 6, 6, 8, 40, 6, 40, 42, 14, 16, 16, 18, 50, 16, 46, 52, 54, 36, 2, 0, 0, 34, 54, 0, 54, 32, 20, 50, 14, 56, 56, 42, 50, 56, 56, 58, 58, 40, 58, 10, 46, 60, 60, 48, 26, 60, 60, 44, 24, 26, 24, 48, 42, 62, 62, 44, 48, 62, 48, 64, 64, 50, 42, 64, 20, 22, 22, 24, 64, 22, 26, 28, 28, 30, 28, 46, 44, 66, 66, 54, 46, 66, 66, 36, 62, 38 ], + "width": 98, + "height": 180 + } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "aim": { + "slots": { + "crosshair": { + "attachment": [ + { "name": "crosshair" } + ] + } + }, + "bones": { + "front-fist": { + "rotate": [ + { "value": 36.08 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": -26.55 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "value": 62.31 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 9.11 } + ] + }, + "gun": { + "rotate": [ + { "value": -0.31 } + ] + } + }, + "ik": { + "aim-ik": [ + { "mix": 0.995 } + ] + }, + "transform": { + "aim-front-arm-transform": [ + { "mixRotate": 0.784, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-head-transform": [ + { "mixRotate": 0.659, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-torso-transform": [ + { "mixRotate": 0.423, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + } + }, + "death": { + "slots": { + "eye": { + "attachment": [ + { "name": "eye-surprised" }, + { "time": 0.5333, "name": "eye-indifferent" }, + { "time": 2.2, "name": "eye-surprised" }, + { "time": 4.6, "name": "eye-indifferent" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-oooo" }, + { "time": 0.5333, "name": "mouth-grind" }, + { "time": 1.4, "name": "mouth-oooo" }, + { "time": 2.1667, "name": "mouth-grind" }, + { "time": 4.5333, "name": "mouth-oooo" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.015, -2.83, 0.036, 12.72 ] + }, + { + "time": 0.0667, + "value": 12.19, + "curve": [ 0.096, 11.68, 0.119, -1.14 ] + }, + { + "time": 0.1333, + "value": -6.86, + "curve": [ 0.149, -13.27, 0.21, -37.28 ] + }, + { + "time": 0.3, + "value": -36.86, + "curve": [ 0.354, -36.61, 0.412, -32.35 ] + }, + { + "time": 0.4667, + "value": -23.49, + "curve": [ 0.49, -19.87, 0.512, -3.29 ] + }, + { + "time": 0.5333, + "value": -3.24, + "curve": [ 0.56, -3.39, 0.614, -67.25 ] + }, + { + "time": 0.6333, + "value": -74.4, + "curve": [ 0.652, -81.58, 0.702, -88.94 ] + }, + { + "time": 0.7333, + "value": -88.93, + "curve": [ 0.805, -88.91, 0.838, -80.87 ] + }, + { + "time": 0.8667, + "value": -81.03, + "curve": [ 0.922, -81.32, 0.976, -85.29 ] + }, + { "time": 1, "value": -85.29, "curve": "stepped" }, + { + "time": 2.2333, + "value": -85.29, + "curve": [ 2.314, -85.29, 2.382, -68.06 ] + }, + { + "time": 2.4667, + "value": -63.48, + "curve": [ 2.57, -57.87, 2.916, -55.24 ] + }, + { + "time": 3.2, + "value": -55.1, + "curve": [ 3.447, -54.98, 4.135, -56.61 ] + }, + { + "time": 4.2667, + "value": -58.23, + "curve": [ 4.672, -63.24, 4.646, -82.69 ] + }, + { "time": 4.9333, "value": -85.29 } + ], + "scale": [ + { + "time": 0.4667, + "curve": [ 0.469, 1.005, 0.492, 1.065, 0.475, 1.018, 0.492, 0.94 ] + }, + { + "time": 0.5, + "x": 1.065, + "y": 0.94, + "curve": [ 0.517, 1.065, 0.541, 0.991, 0.517, 0.94, 0.542, 1.026 ] + }, + { + "time": 0.5667, + "x": 0.99, + "y": 1.025, + "curve": [ 0.593, 0.988, 0.609, 1.002, 0.595, 1.024, 0.607, 1.001 ] + }, + { "time": 0.6333 } + ] + }, + "neck": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.114, 1.33, 0.195, 4.13 ] + }, + { + "time": 0.2667, + "value": 4.13, + "curve": [ 0.351, 4.14, 0.444, -24.5 ] + }, + { + "time": 0.5, + "value": -24.69, + "curve": [ 0.571, -23.89, 0.55, 34.22 ] + }, + { + "time": 0.6667, + "value": 35.13, + "curve": [ 0.713, 34.81, 0.756, 22.76 ] + }, + { + "time": 0.8333, + "value": 22.82, + "curve": [ 0.868, 22.84, 0.916, 47.95 ] + }, + { "time": 0.9667, "value": 47.95, "curve": "stepped" }, + { + "time": 2.2333, + "value": 47.95, + "curve": [ 2.3, 47.95, 2.617, 18.72 ] + }, + { + "time": 2.6667, + "value": 18.51, + "curve": [ 3.172, 16.58, 4.06, 16.79 ] + }, + { + "time": 4.5333, + "value": 18.51, + "curve": [ 4.707, 19.13, 4.776, 41.11 ] + }, + { "time": 4.8, "value": 47.95 } + ] + }, + "torso": { + "rotate": [ + { + "value": -8.62, + "curve": [ 0.01, -16.71, 0.032, -33.6 ] + }, + { + "time": 0.0667, + "value": -33.37, + "curve": [ 0.182, -32.61, 0.298, 123.07 ] + }, + { + "time": 0.4667, + "value": 122.77, + "curve": [ 0.511, 122.69, 0.52, 100.2 ] + }, + { + "time": 0.5667, + "value": 88.96, + "curve": [ 0.588, 83.89, 0.667, 75.34 ] + }, + { + "time": 0.7, + "value": 75.34, + "curve": [ 0.767, 75.34, 0.9, 76.03 ] + }, + { "time": 0.9667, "value": 76.03 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -38.86, + "curve": [ 0.022, -40.38, 0.096, -41.92 ] + }, + { + "time": 0.1333, + "value": -41.92, + "curve": [ 0.176, -41.92, 0.216, -16.92 ] + }, + { + "time": 0.2333, + "value": -4.35, + "curve": [ 0.258, 13.69, 0.308, 60.35 ] + }, + { + "time": 0.4, + "value": 60.17, + "curve": [ 0.496, 59.98, 0.539, 33.63 ] + }, + { + "time": 0.5667, + "value": 23.06, + "curve": [ 0.595, 32.71, 0.675, 53.71 ] + }, + { + "time": 0.7333, + "value": 53.61, + "curve": [ 0.797, 53.51, 0.926, 30.98 ] + }, + { "time": 0.9333, "value": 19.57, "curve": "stepped" }, + { + "time": 1.9667, + "value": 19.57, + "curve": [ 2.245, 19.57, 2.702, 77.03 ] + }, + { + "time": 3.0667, + "value": 77.06, + "curve": [ 3.209, 77.33, 3.291, 67.99 ] + }, + { + "time": 3.4333, + "value": 67.96, + "curve": [ 3.608, 68.34, 3.729, 73.88 ] + }, + { + "time": 3.8333, + "value": 73.42, + "curve": [ 4.152, 73.91, 4.46, 71.98 ] + }, + { + "time": 4.6333, + "value": 64.77, + "curve": [ 4.688, 62.5, 4.847, 26.42 ] + }, + { "time": 4.8667, "value": 10.94 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": -44.7, + "curve": [ 0.033, -44.7, 0.12, 54.89 ] + }, + { + "time": 0.1333, + "value": 64.62, + "curve": [ 0.154, 79.18, 0.214, 79.42 ] + }, + { + "time": 0.2667, + "value": 63.4, + "curve": [ 0.293, 55.19, 0.332, 30.13 ] + }, + { + "time": 0.3667, + "value": 30.13, + "curve": [ 0.4, 30.13, 0.441, 39.87 ] + }, + { + "time": 0.4667, + "value": 55.13, + "curve": [ 0.488, 68.18, 0.52, 100.72 ] + }, + { + "time": 0.5333, + "value": 111.96, + "curve": [ 0.551, 126.88, 0.627, 185.97 ] + }, + { + "time": 0.6667, + "value": 185.97, + "curve": [ 0.692, 185.97, 0.736, 162.43 ] + }, + { + "time": 0.8, + "value": 158.01, + "curve": [ 0.9, 151.12, 1.017, 144.01 ] + }, + { "time": 1.1, "value": 144.01, "curve": "stepped" }, + { + "time": 2.3667, + "value": 144.01, + "curve": [ 2.492, 144.01, 2.742, 138.63 ] + }, + { + "time": 2.8667, + "value": 138.63, + "curve": [ 3.067, 138.63, 3.467, 138.63 ] + }, + { + "time": 3.6667, + "value": 138.63, + "curve": [ 3.883, 138.63, 4.317, 135.18 ] + }, + { + "time": 4.5333, + "value": 135.18, + "curve": [ 4.575, 135.18, 4.692, 131.59 ] + }, + { + "time": 4.7333, + "value": 131.59, + "curve": [ 4.758, 131.59, 4.517, 144.01 ] + }, + { "time": 4.8333, "value": 144.01 } + ], + "translate": [ + { + "time": 0.4667, + "curve": [ 0.517, 0, 0.617, -34.96, 0.517, 0, 0.617, -16.59 ] + }, + { "time": 0.6667, "x": -35.02, "y": -16.62 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 21.88, + "curve": [ 0.033, 21.88, 0.099, 20.44 ] + }, + { + "time": 0.1333, + "value": 9.43, + "curve": [ 0.164, -0.29, 0.162, -38.26 ] + }, + { + "time": 0.2, + "value": -38.05, + "curve": [ 0.24, -37.96, 0.228, -17.82 ] + }, + { + "time": 0.3333, + "value": -9.73, + "curve": [ 0.372, -6.76, 0.431, -0.74 ] + }, + { + "time": 0.4667, + "value": 6.47, + "curve": [ 0.489, 11.05, 0.503, 19.09 ] + }, + { + "time": 0.5333, + "value": 19.09, + "curve": [ 0.571, 19.09, 0.554, -42.67 ] + }, + { + "time": 0.6, + "value": -42.67, + "curve": [ 0.653, -42.67, 0.691, -13.8 ] + }, + { + "time": 0.7, + "value": -3.54, + "curve": [ 0.707, 3.8, 0.719, 24.94 ] + }, + { + "time": 0.8, + "value": 25.31, + "curve": [ 0.902, 24.75, 0.992, -0.34 ] + }, + { "time": 1, "value": -32.16, "curve": "stepped" }, + { + "time": 2.2333, + "value": -32.16, + "curve": [ 2.6, -32.16, 2.638, -5.3 ] + }, + { + "time": 2.7, + "value": -1.96, + "curve": [ 2.707, -1.56, 2.775, 1.67 ] + }, + { + "time": 2.8, + "value": 1.67, + "curve": [ 2.825, 1.67, 2.875, -0.39 ] + }, + { + "time": 2.9, + "value": -0.39, + "curve": [ 2.925, -0.39, 2.975, 0.26 ] + }, + { + "time": 3, + "value": 0.26, + "curve": [ 3.025, 0.26, 3.075, -1.81 ] + }, + { + "time": 3.1, + "value": -1.81, + "curve": [ 3.125, -1.81, 3.175, -0.52 ] + }, + { + "time": 3.2, + "value": -0.52, + "curve": [ 3.225, -0.52, 3.275, -2.41 ] + }, + { + "time": 3.3, + "value": -2.41, + "curve": [ 3.333, -2.41, 3.4, -0.38 ] + }, + { + "time": 3.4333, + "value": -0.38, + "curve": [ 3.467, -0.38, 3.533, -2.25 ] + }, + { + "time": 3.5667, + "value": -2.25, + "curve": [ 3.592, -2.25, 3.642, -0.33 ] + }, + { + "time": 3.6667, + "value": -0.33, + "curve": [ 3.7, -0.33, 3.767, -1.34 ] + }, + { + "time": 3.8, + "value": -1.34, + "curve": [ 3.825, -1.34, 3.862, -0.77 ] + }, + { + "time": 3.9, + "value": -0.77, + "curve": [ 3.942, -0.77, 3.991, -1.48 ] + }, + { + "time": 4, + "value": -1.87, + "curve": [ 4.167, -1.87, 4.5, -1.96 ] + }, + { + "time": 4.6667, + "value": -1.96, + "curve": [ 4.709, 18.05, 4.767, 34.55 ] + }, + { + "time": 4.8, + "value": 34.55, + "curve": [ 4.84, 34.24, 4.902, 12.03 ] + }, + { "time": 4.9333, "value": -18.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -2.33, + "curve": [ 0.019, 4.43, 0.069, 10.82 ] + }, + { + "time": 0.1, + "value": 10.6, + "curve": [ 0.148, 10.6, 0.123, -15.24 ] + }, + { + "time": 0.2, + "value": -15.35, + "curve": [ 0.266, -15.44, 0.316, -6.48 ] + }, + { + "time": 0.3333, + "value": -3.9, + "curve": [ 0.362, 0.43, 0.479, 22.36 ] + }, + { + "time": 0.5667, + "value": 22.01, + "curve": [ 0.61, 21.84, 0.627, 12.85 ] + }, + { + "time": 0.6333, + "value": 9.05, + "curve": [ 0.643, 2.77, 0.622, -39.43 ] + }, + { + "time": 0.7, + "value": -39.5, + "curve": [ 0.773, -39.57, 0.814, 14.77 ] + }, + { + "time": 0.8667, + "value": 14.81, + "curve": [ 0.965, 14.88, 1.1, 5.64 ] + }, + { "time": 1.1, "value": -6.08, "curve": "stepped" }, + { + "time": 2.2333, + "value": -6.08, + "curve": [ 2.307, -6.08, 2.427, -25.89 ] + }, + { + "time": 2.5333, + "value": -22.42, + "curve": [ 2.598, -20.38, 2.657, 5.73 ] + }, + { + "time": 2.7, + "value": 5.73, + "curve": [ 2.77, 5.73, 2.851, -5.38 ] + }, + { + "time": 2.9333, + "value": -5.38, + "curve": [ 3.008, -5.38, 3.087, -4.54 ] + }, + { + "time": 3.1667, + "value": -4.17, + "curve": [ 3.223, -3.91, 4.486, 5.73 ] + }, + { + "time": 4.6667, + "value": 5.73, + "curve": [ 4.733, 5.73, 4.886, -2.47 ] + }, + { "time": 4.9333, "value": -6.52 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.36, + "curve": [ 0.033, 10.36, 0.1, -32.89 ] + }, + { + "time": 0.1333, + "value": -32.89, + "curve": [ 0.183, -32.89, 0.283, -4.45 ] + }, + { + "time": 0.3333, + "value": -4.45, + "curve": [ 0.367, -4.45, 0.438, -6.86 ] + }, + { + "time": 0.4667, + "value": -8.99, + "curve": [ 0.529, -13.62, 0.605, -20.58 ] + }, + { + "time": 0.6333, + "value": -23.2, + "curve": [ 0.708, -30.18, 0.758, -35.56 ] + }, + { + "time": 0.8, + "value": -35.56, + "curve": [ 0.875, -35.56, 1.025, -23.2 ] + }, + { "time": 1.1, "value": -23.2 } + ] + }, + "gun": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.033, -2.79, 0.12, -7.22 ] + }, + { + "time": 0.1333, + "value": -8.52, + "curve": [ 0.168, -11.87, 0.29, -23.71 ] + }, + { + "time": 0.3333, + "value": -26.24, + "curve": [ 0.369, -28.31, 0.436, -29.75 ] + }, + { + "time": 0.5, + "value": -29.66, + "curve": [ 0.552, -29.58, 0.611, -25.47 ] + }, + { + "time": 0.6333, + "value": -22.68, + "curve": [ 0.656, -19.76, 0.68, -10.02 ] + }, + { + "time": 0.7, + "value": -6.49, + "curve": [ 0.722, -2.6, 0.75, -1.22 ] + }, + { + "time": 0.7667, + "value": -1.35, + "curve": [ 0.792, -1.55, 0.842, -19.74 ] + }, + { "time": 0.8667, "value": -19.8 } + ] + }, + "hip": { + "translate": [ + { + "curve": [ 0.098, -42.62, 0.166, -79.85, 0.029, 84.97, 0.109, 155.93 ] + }, + { + "time": 0.2667, + "x": -133.79, + "y": 152.44, + "curve": [ 0.361, -184.63, 0.392, -203.69, 0.42, 149.12, 0.467, -15.7 ] + }, + { + "time": 0.4667, + "x": -230.02, + "y": -113.87, + "curve": [ 0.523, -249.86, 0.565, -261.7, 0.473, -133.1, 0.583, -203.43 ] + }, + { + "time": 0.6, + "x": -268.57, + "y": -203.43, + "curve": [ 0.663, -280.98, 0.816, -290.05, 0.708, -203.43, 0.892, -203.5 ] + }, + { "time": 1, "x": -290.42, "y": -203.5 } + ] + }, + "front-thigh": { + "rotate": [ + { + "curve": [ 0.06, 1.02, 0.151, 45.23 ] + }, + { + "time": 0.1667, + "value": 54.01, + "curve": [ 0.19, 66.85, 0.358, 169.85 ] + }, + { + "time": 0.5, + "value": 169.51, + "curve": [ 0.628, 169.85, 0.692, 108.85 ] + }, + { + "time": 0.7, + "value": 97.74, + "curve": [ 0.723, 102.6, 0.805, 111.6 ] + }, + { + "time": 0.8667, + "value": 111.69, + "curve": [ 0.899, 111.83, 1.015, 109.15 ] + }, + { "time": 1.0667, "value": 95.8 } + ] + }, + "front-shin": { + "rotate": [ + { + "curve": [ 0.086, -0.02, 0.191, -24.25 ] + }, + { + "time": 0.2, + "value": -26.5, + "curve": [ 0.214, -29.92, 0.249, -40.51 ] + }, + { + "time": 0.3333, + "value": -40.57, + "curve": [ 0.431, -40.7, 0.459, -11.34 ] + }, + { + "time": 0.4667, + "value": -8.71, + "curve": [ 0.477, -5.16, 0.524, 17.13 ] + }, + { + "time": 0.6, + "value": 16.98, + "curve": [ 0.632, 17.09, 0.625, 2.76 ] + }, + { + "time": 0.6333, + "value": 2.76, + "curve": [ 0.648, 2.76, 0.653, 2.75 ] + }, + { + "time": 0.6667, + "value": 2.59, + "curve": [ 0.678, 2.39, 0.733, 2.53 ] + }, + { + "time": 0.7333, + "value": -9.43, + "curve": [ 0.745, -2.48, 0.782, 3.12 ] + }, + { + "time": 0.8, + "value": 4.28, + "curve": [ 0.832, 6.32, 0.895, 8.46 ] + }, + { + "time": 0.9333, + "value": 8.49, + "curve": [ 0.986, 8.53, 1.051, 6.38 ] + }, + { + "time": 1.0667, + "value": 2.28, + "curve": [ 1.078, 4.17, 1.103, 5.86 ] + }, + { + "time": 1.1333, + "value": 5.88, + "curve": [ 1.191, 5.93, 1.209, 4.56 ] + }, + { "time": 1.2333, "value": 2.52 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.12, 50.26 ] + }, + { + "time": 0.1333, + "value": 57.3, + "curve": [ 0.164, 73.34, 0.274, 147.18 ] + }, + { + "time": 0.3333, + "value": 147.1, + "curve": [ 0.475, 146.45, 0.583, 95.72 ] + }, + { + "time": 0.6, + "value": 79.66, + "curve": [ 0.62, 94.74, 0.732, 103.15 ] + }, + { + "time": 0.7667, + "value": 103.02, + "curve": [ 0.812, 102.85, 0.897, 95.75 ] + }, + { "time": 0.9333, "value": 83.01 } + ] + }, + "rear-shin": { + "rotate": [ + { + "curve": [ 0.021, -16.65, 0.091, -54.82 ] + }, + { + "time": 0.1667, + "value": -55.29, + "curve": [ 0.187, -55.42, 0.213, -52.52 ] + }, + { + "time": 0.2333, + "value": -45.98, + "curve": [ 0.242, -43.1, 0.311, -12.73 ] + }, + { + "time": 0.3333, + "value": -6.32, + "curve": [ 0.356, 0.13, 0.467, 24.5 ] + }, + { + "time": 0.5, + "value": 24.5, + "curve": [ 0.543, 24.5, 0.56, 3.78 ] + }, + { + "time": 0.5667, + "value": -3.53, + "curve": [ 0.585, 3.86, 0.659, 16.63 ] + }, + { + "time": 0.7, + "value": 16.56, + "curve": [ 0.782, 16.43, 0.896, 8.44 ] + }, + { + "time": 0.9333, + "value": 4.04, + "curve": [ 0.956, 6.84, 1.008, 8.41 ] + }, + { + "time": 1.0333, + "value": 8.41, + "curve": [ 1.067, 8.41, 1.122, 8.14 ] + }, + { "time": 1.1667, "value": 5.8 } + ] + }, + "rear-foot": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.033, -0.28, 0.256, -66.71 ] + }, + { + "time": 0.3667, + "value": -66.84, + "curve": [ 0.418, -66.91, 0.499, -21.79 ] + }, + { + "time": 0.6, + "value": -21.52, + "curve": [ 0.652, -21.38, 0.665, -53.96 ] + }, + { + "time": 0.7, + "value": -54.26, + "curve": [ 0.757, -53.96, 0.843, -2.07 ] + }, + { + "time": 0.9333, + "value": -1.47, + "curve": [ 0.968, -2.07, 0.975, -19.96 ] + }, + { + "time": 1, + "value": -19.96, + "curve": [ 1.025, -19.96, 1.075, -12.42 ] + }, + { + "time": 1.1, + "value": -12.42, + "curve": [ 1.133, -12.42, 1.2, -18.34 ] + }, + { "time": 1.2333, "value": -18.34 } + ] + }, + "front-foot": { + "rotate": [ + { + "curve": [ 0.008, -11.33, 0.108, -57.71 ] + }, + { + "time": 0.1333, + "value": -57.71, + "curve": [ 0.175, -57.71, 0.229, 19.73 ] + }, + { + "time": 0.3, + "value": 19.34, + "curve": [ 0.354, 19.34, 0.4, -57.76 ] + }, + { + "time": 0.4333, + "value": -57.76, + "curve": [ 0.458, -57.76, 0.511, -3.56 ] + }, + { + "time": 0.5333, + "value": 3.7, + "curve": [ 0.563, 13.29, 0.633, 15.79 ] + }, + { + "time": 0.6667, + "value": 15.79, + "curve": [ 0.7, 15.79, 0.767, -48.75 ] + }, + { + "time": 0.8, + "value": -48.75, + "curve": [ 0.842, -48.75, 0.925, 4.7 ] + }, + { + "time": 0.9667, + "value": 4.7, + "curve": [ 1, 4.7, 1.067, -22.9 ] + }, + { + "time": 1.1, + "value": -22.9, + "curve": [ 1.142, -22.9, 1.225, -13.28 ] + }, + { "time": 1.2667, "value": -13.28 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": -0.28 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.008, -0.28, 0.003, -66.62 ] + }, + { + "time": 0.0667, + "value": -65.75, + "curve": [ 0.166, -64.42, 0.234, 14.35 ] + }, + { + "time": 0.2667, + "value": 38.25, + "curve": [ 0.294, 57.91, 0.392, 89.79 ] + }, + { + "time": 0.4667, + "value": 90.73, + "curve": [ 0.483, 90.73, 0.55, 177.66 ] + }, + { + "time": 0.5667, + "value": 177.66, + "curve": [ 0.733, 176.24, 0.75, 11.35 ] + }, + { + "time": 0.8, + "value": 11.35, + "curve": [ 0.886, 12.29, 0.911, 47.88 ] + }, + { + "time": 0.9333, + "value": 56.77, + "curve": [ 0.967, 70.59, 1.05, 86.46 ] + }, + { + "time": 1.1, + "value": 86.46, + "curve": [ 1.187, 86.46, 1.214, 66.44 ] + }, + { "time": 1.3333, "value": 64.55 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0, -7.97, 0.027, -18.69 ] + }, + { + "time": 0.0667, + "value": -19, + "curve": [ 0.166, -19.3, 0.208, 15.58 ] + }, + { + "time": 0.2667, + "value": 45.95, + "curve": [ 0.306, 66.24, 0.378, 99.08 ] + }, + { + "time": 0.4333, + "value": 99.08, + "curve": [ 0.497, 98.62, 0.488, -1.2 ] + }, + { + "time": 0.5667, + "value": -1.32, + "curve": [ 0.637, -0.84, 0.687, 94.41 ] + }, + { + "time": 0.7333, + "value": 94.33, + "curve": [ 0.832, 94.16, 0.895, 29.6 ] + }, + { + "time": 0.9667, + "value": 28.67, + "curve": [ 1.026, 28.67, 1.045, 53.14 ] + }, + { "time": 1.1, "value": 53.38 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.011, 4.5, 0.05, 11.42 ] + }, + { + "time": 0.0667, + "value": 11.42, + "curve": [ 0.1, 11.42, 0.136, -5.92 ] + }, + { + "time": 0.1667, + "value": -10.54, + "curve": [ 0.206, -16.51, 0.327, -22 ] + }, + { + "time": 0.3667, + "value": -24.47, + "curve": [ 0.413, -27.37, 0.467, -43.99 ] + }, + { + "time": 0.5, + "value": -43.99, + "curve": [ 0.533, -43.99, 0.552, 12.12 ] + }, + { + "time": 0.6333, + "value": 11.85, + "curve": [ 0.714, 11.59, 0.758, -34.13 ] + }, + { + "time": 0.8, + "value": -34.13, + "curve": [ 0.858, -34.13, 1.015, -12.47 ] + }, + { + "time": 1.0667, + "value": -8.85, + "curve": [ 1.121, -5.07, 1.219, -0.02 ] + }, + { + "time": 1.3333, + "value": 1.29, + "curve": [ 1.509, 3.3, 1.763, 2.75 ] + }, + { + "time": 1.8667, + "value": 2.78, + "curve": [ 1.974, 2.81, 2.108, 2.81 ] + }, + { + "time": 2.2, + "value": 2.78, + "curve": [ 2.315, 2.74, 2.374, 1.22 ] + }, + { + "time": 2.4667, + "value": 1.18, + "curve": [ 2.525, 1.18, 2.608, 10.79 ] + }, + { + "time": 2.6667, + "value": 10.79, + "curve": [ 2.725, 10.79, 2.893, 4.72 ] + }, + { + "time": 3.0333, + "value": 4.72, + "curve": [ 3.117, 4.72, 3.283, 7.93 ] + }, + { + "time": 3.3667, + "value": 7.93, + "curve": [ 3.492, 7.93, 3.775, 6.93 ] + }, + { + "time": 3.9, + "value": 6.93, + "curve": [ 3.981, 6.93, 4.094, 6.9 ] + }, + { + "time": 4.2, + "value": 8.44, + "curve": [ 4.267, 9.42, 4.401, 16.61 ] + }, + { + "time": 4.5, + "value": 16.33, + "curve": [ 4.582, 16.12, 4.709, 9.94 ] + }, + { + "time": 4.7333, + "value": 6.51, + "curve": [ 4.747, 4.57, 4.779, -1.76 ] + }, + { + "time": 4.8, + "value": -1.75, + "curve": [ 4.823, -1.73, 4.82, 4.47 ] + }, + { + "time": 4.8667, + "value": 6.04, + "curve": [ 4.899, 7.14, 4.913, 6.93 ] + }, + { "time": 4.9333, "value": 6.93 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 10.61, + "curve": [ 0.075, 10.61, 0.05, 12.67 ] + }, + { + "time": 0.0667, + "value": 12.67, + "curve": [ 0.123, 12.67, 0.194, -16.51 ] + }, + { + "time": 0.2, + "value": -19.87, + "curve": [ 0.207, -23.48, 0.236, -31.68 ] + }, + { + "time": 0.3, + "value": -31.8, + "curve": [ 0.356, -31.9, 0.437, -25.61 ] + }, + { + "time": 0.4667, + "value": -19.29, + "curve": [ 0.485, -15.33, 0.529, 6.48 ] + }, + { + "time": 0.5667, + "value": 6.67, + "curve": [ 0.628, 6.97, 0.65, -46.39 ] + }, + { + "time": 0.7333, + "value": -46.3, + "curve": [ 0.843, -46.17, 0.941, -33.37 ] + }, + { + "time": 0.9667, + "value": -23.17, + "curve": [ 0.972, -20.98, 1.047, 15.21 ] + }, + { + "time": 1.1, + "value": 15.21, + "curve": [ 1.142, 15.21, 1.183, 10.73 ] + }, + { + "time": 1.2667, + "value": 10.61, + "curve": [ 1.45, 10.34, 1.817, 10.61 ] + }, + { + "time": 2, + "value": 10.61, + "curve": [ 2.075, 10.61, 2.225, 16.9 ] + }, + { + "time": 2.3, + "value": 16.9, + "curve": [ 2.327, 16.9, 2.347, 6.81 ] + }, + { + "time": 2.4, + "value": 6.83, + "curve": [ 2.492, 6.87, 2.602, 17.39 ] + }, + { + "time": 2.6667, + "value": 17.39, + "curve": [ 2.742, 17.39, 2.892, 10.67 ] + }, + { + "time": 2.9667, + "value": 10.64, + "curve": [ 3.187, 10.57, 3.344, 10.73 ] + }, + { + "time": 3.6, + "value": 11.4, + "curve": [ 3.766, 11.83, 3.874, 14.87 ] + }, + { + "time": 3.9333, + "value": 14.83, + "curve": [ 4.022, 14.76, 4.208, 9.49 ] + }, + { + "time": 4.3, + "value": 9.54, + "curve": [ 4.391, 9.58, 4.441, 14.82 ] + }, + { + "time": 4.5333, + "value": 14.84, + "curve": [ 4.642, 14.88, 4.692, 1.17 ] + }, + { + "time": 4.7667, + "value": 1.24, + "curve": [ 4.823, 1.3, 4.818, 18.35 ] + }, + { + "time": 4.8667, + "value": 18.38, + "curve": [ 4.905, 18.41, 4.901, 10.61 ] + }, + { "time": 4.9333, "value": 10.61 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.048, 0, 0.129, -12.73 ] + }, + { + "time": 0.1667, + "value": -15.95, + "curve": [ 0.221, -20.66, 0.254, -21.62 ] + }, + { + "time": 0.3, + "value": -21.59, + "curve": [ 0.458, -21.46, 0.46, -1.67 ] + }, + { + "time": 0.6333, + "value": -1.71, + "curve": [ 0.71, -1.73, 0.715, -4 ] + }, + { + "time": 0.7667, + "value": -3.97, + "curve": [ 0.866, -3.92, 0.84, 0.02 ] + }, + { "time": 1, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.275, 0, 2.867, -5.8 ] + }, + { + "time": 3.1, + "value": -6.44, + "curve": [ 3.327, -7.06, 3.71, -6.23 ] + }, + { + "time": 3.9333, + "value": -5.41, + "curve": [ 4.168, -4.53, 4.488, -2.83 ] + }, + { "time": 4.8 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.09, -3.66 ] + }, + { + "time": 0.1, + "value": -4.55, + "curve": [ 0.143, -8.4, 0.223, -17.07 ] + }, + { + "time": 0.2333, + "value": -18.31, + "curve": [ 0.282, -24.44, 0.35, -29 ] + }, + { + "time": 0.3667, + "value": -30.07, + "curve": [ 0.405, -32.58, 0.442, -33.03 ] + }, + { + "time": 0.4667, + "value": -32.99, + "curve": [ 0.491, -33.04, 0.505, -23.56 ] + }, + { + "time": 0.5333, + "value": -23.55, + "curve": [ 0.571, -23.67, 0.599, -27.21 ] + }, + { + "time": 0.6333, + "value": -27.21, + "curve": [ 0.669, -27.2, 0.742, -10.43 ] + }, + { + "time": 0.7667, + "value": -7.79, + "curve": [ 0.788, -5.53, 0.796, -4.42 ] + }, + { + "time": 0.8333, + "value": -2.9, + "curve": [ 0.875, -1.21, 0.933, 0 ] + }, + { "time": 0.9667, "curve": "stepped" }, + { + "time": 2.4333, + "curve": [ 2.517, 0, 2.683, 4.63 ] + }, + { + "time": 2.7667, + "value": 4.66, + "curve": [ 3.084, 4.76, 3.248, 4.37 ] + }, + { + "time": 3.4, + "value": 3.74, + "curve": [ 3.596, 2.92, 3.755, 2.18 ] + }, + { + "time": 3.8667, + "value": 1.72, + "curve": [ 4.136, 0.59, 4.471, 0 ] + }, + { "time": 4.8 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0, 0, 0.041, 10.74 ] + }, + { + "time": 0.0667, + "value": 14.16, + "curve": [ 0.075, 15.22, 0.148, 18.04 ] + }, + { + "time": 0.2, + "value": 18.13, + "curve": [ 0.251, 18.23, 0.307, -4.75 ] + }, + { + "time": 0.3667, + "value": -5.06, + "curve": [ 0.412, -5.3, 0.47, -0.96 ] + }, + { + "time": 0.5, + "value": 2.21, + "curve": [ 0.512, 3.48, 0.595, 20.31 ] + }, + { + "time": 0.6333, + "value": 24.87, + "curve": [ 0.647, 26.53, 0.719, 29.33 ] + }, + { + "time": 0.8, + "value": 29.22, + "curve": [ 0.859, 29.14, 0.9, 28.48 ] + }, + { + "time": 0.9333, + "value": 26.11, + "curve": [ 0.981, 22.72, 0.998, 2.06 ] + }, + { "time": 1.1, "value": 2.21 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.047, -0.21, 0.048, 7.86 ] + }, + { + "time": 0.0667, + "value": 13.27, + "curve": [ 0.083, 18.05, 0.135, 24.44 ] + }, + { + "time": 0.2, + "value": 24.02, + "curve": [ 0.225, 24.02, 0.28, 6.32 ] + }, + { + "time": 0.3, + "value": 3.1, + "curve": [ 0.323, -0.58, 0.382, -7.12 ] + }, + { + "time": 0.4667, + "value": -7.45, + "curve": [ 0.512, -7.66, 0.538, 12.13 ] + }, + { + "time": 0.5667, + "value": 16.46, + "curve": [ 0.609, 22.72, 0.672, 27.4 ] + }, + { + "time": 0.7333, + "value": 27.55, + "curve": [ 0.827, 27.4, 0.933, 23.23 ] + }, + { + "time": 0.9667, + "value": 19.11, + "curve": [ 0.998, 15.27, 1.092, -2.53 ] + }, + { + "time": 1.1333, + "value": -2.53, + "curve": [ 1.158, -2.53, 1.208, 0 ] + }, + { "time": 1.2333, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.075, 0, 2.248, 0.35 ] + }, + { + "time": 2.3333, + "value": 0.78, + "curve": [ 2.585, 2.06, 2.805, 3.46 ] + }, + { + "time": 3.2, + "value": 3.5, + "curve": [ 3.593, 3.54, 3.979, 2.36 ] + }, + { + "time": 4.1667, + "value": 1.55, + "curve": [ 4.391, 0.59, 4.447, 0.04 ] + }, + { + "time": 4.6, + "value": 0.04, + "curve": [ 4.642, 0.04, 4.742, 0 ] + }, + { "time": 4.9333 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.025, 0, 0.09, 1.43, 0.025, 0, 0.075, -34.76 ] + }, + { + "time": 0.1, + "x": 1.59, + "y": -34.76, + "curve": [ 0.214, 3.33, 0.375, 5.34, 0.192, -34.76, 0.441, -21.17 ] + }, + { + "time": 0.4667, + "x": 5.34, + "y": -12.57, + "curve": [ 0.492, 5.34, 0.55, 5.24, 0.482, -7.36, 0.504, 4.03 ] + }, + { + "time": 0.5667, + "x": 5.11, + "y": 4.01, + "curve": [ 0.658, 4.45, 0.679, 3.19, 0.649, 3.98, 0.642, -16.84 ] + }, + { + "time": 0.7, + "x": 2.8, + "y": -16.74, + "curve": [ 0.787, 1.15, 0.881, -1.29, 0.772, -16.62, 0.82, 8.95 ] + }, + { + "time": 0.9, + "x": -1.72, + "y": 8.91, + "curve": [ 0.961, -3.06, 1.025, -3.58, 0.975, 8.87, 0.951, -1.37 ] + }, + { + "time": 1.1, + "x": -3.58, + "y": -1.45, + "curve": [ 1.292, -3.58, 2.002, -2.4, 1.292, -1.56, 1.975, -1.45 ] + }, + { + "time": 2.1667, + "x": -1.39, + "y": -1.45, + "curve": [ 2.25, -0.88, 2.503, 1.38, 2.283, -1.45, 2.603, -12.44 ] + }, + { + "time": 2.6667, + "x": 2.13, + "y": -14.45, + "curve": [ 2.766, 2.59, 2.999, 2.81, 2.835, -19.73, 3.003, -25.2 ] + }, + { + "time": 3.1333, + "x": 2.91, + "y": -26.08, + "curve": [ 3.392, 3.1, 4.199, 4.05, 3.483, -28.44, 4.129, -27.23 ] + }, + { + "time": 4.3667, + "x": 4.81, + "y": -19.59, + "curve": [ 4.429, 5.1, 4.594, 8.54, 4.538, -14.08, 4.583, -7.88 ] + }, + { + "time": 4.6667, + "x": 8.65, + "y": -4.56, + "curve": [ 4.794, 8.86, 4.806, 5.93, 4.691, -3.59, 4.8, -1.61 ] + }, + { "time": 4.9333, "x": 5.8, "y": -1.99 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { "mix": 0 } + ], + "front-leg-ik": [ + { "mix": 0, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0.005 } + ], + "rear-leg-ik": [ + { "mix": 0.005, "bendPositive": false } + ] + } + }, + "hoverboard": { + "slots": { + "exhaust1": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust2": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust3": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "hoverboard-board": { + "attachment": [ + { "name": "hoverboard-board" } + ] + }, + "hoverboard-thruster-front": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverboard-thruster-rear": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverglow-front": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "hoverglow-rear": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "side-glow1": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + }, + "side-glow2": { + "attachment": [ + { "time": 0.0667, "name": "hoverglow-small" }, + { "time": 1 } + ] + }, + "side-glow3": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + } + }, + "bones": { + "hoverboard-controller": { + "translate": [ + { + "x": 319.55, + "y": -1.59, + "curve": [ 0.064, 319.55, 0.2, 347.85, 0.058, -1.2, 0.2, 23.11 ] + }, + { + "time": 0.2667, + "x": 347.66, + "y": 39.62, + "curve": [ 0.35, 347.41, 0.476, 341.47, 0.323, 53.58, 0.44, 85.82 ] + }, + { + "time": 0.5333, + "x": 338.47, + "y": 85.72, + "curve": [ 0.603, 334.83, 0.913, 319.65, 0.621, 85.62, 0.88, -1.53 ] + }, + { "time": 1, "x": 319.55, "y": -1.59 } + ] + }, + "hip": { + "translate": [ + { + "x": -53.49, + "y": 32.14, + "curve": [ 0.061, -53.77, 0.093, -51.81, 0.044, 16.34, 0.063, 9.67 ] + }, + { + "time": 0.1333, + "x": -49.31, + "y": 7.01, + "curve": [ 0.3, -35.27, 0.461, -20.06, 0.314, 9.52, 0.408, 121.09 ] + }, + { + "time": 0.5667, + "x": -20.06, + "y": 122.72, + "curve": [ 0.716, -20.09, 0.912, -53.29, 0.753, 121.8, 0.946, 51.85 ] + }, + { "time": 1, "x": -53.49, "y": 32.14 } + ] + }, + "exhaust1": { + "scale": [ + { + "x": 1.593, + "y": 0.964, + "curve": [ 0.033, 1.593, 0.1, 1, 0.033, 0.964, 0.1, 0.713 ] + }, + { + "time": 0.1333, + "y": 0.713, + "curve": [ 0.15, 1, 0.183, 1.774, 0.15, 0.713, 0.183, 0.883 ] + }, + { + "time": 0.2, + "x": 1.774, + "y": 0.883, + "curve": [ 0.242, 1.774, 0.325, 1.181, 0.242, 0.883, 0.325, 0.649 ] + }, + { + "time": 0.3667, + "x": 1.181, + "y": 0.649, + "curve": [ 0.408, 1.181, 0.492, 1.893, 0.408, 0.649, 0.492, 0.819 ] + }, + { + "time": 0.5333, + "x": 1.893, + "y": 0.819, + "curve": [ 0.558, 1.893, 0.608, 1.18, 0.558, 0.819, 0.608, 0.686 ] + }, + { + "time": 0.6333, + "x": 1.18, + "y": 0.686, + "curve": [ 0.658, 1.18, 0.708, 1.903, 0.658, 0.686, 0.708, 0.855 ] + }, + { + "time": 0.7333, + "x": 1.903, + "y": 0.855, + "curve": [ 0.767, 1.903, 0.833, 1.311, 0.767, 0.855, 0.833, 0.622 ] + }, + { + "time": 0.8667, + "x": 1.311, + "y": 0.622, + "curve": [ 0.9, 1.311, 0.967, 1.593, 0.9, 0.622, 0.967, 0.964 ] + }, + { "time": 1, "x": 1.593, "y": 0.964 } + ] + }, + "exhaust2": { + "scale": [ + { + "x": 1.88, + "y": 0.832, + "curve": [ 0.025, 1.88, 0.075, 1.311, 0.025, 0.832, 0.075, 0.686 ] + }, + { + "time": 0.1, + "x": 1.311, + "y": 0.686, + "curve": [ 0.133, 1.311, 0.2, 2.01, 0.133, 0.686, 0.208, 0.736 ] + }, + { + "time": 0.2333, + "x": 2.01, + "y": 0.769, + "curve": [ 0.267, 2.01, 0.333, 1, 0.282, 0.831, 0.333, 0.91 ] + }, + { + "time": 0.3667, + "y": 0.91, + "curve": [ 0.4, 1, 0.467, 1.699, 0.4, 0.91, 0.474, 0.891 ] + }, + { + "time": 0.5, + "x": 1.699, + "y": 0.86, + "curve": [ 0.517, 1.699, 0.55, 1.181, 0.54, 0.813, 0.55, 0.713 ] + }, + { + "time": 0.5667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.617, 1.181, 0.717, 1.881, 0.617, 0.713, 0.717, 0.796 ] + }, + { + "time": 0.7667, + "x": 1.881, + "y": 0.796, + "curve": [ 0.8, 1.881, 0.867, 1.3, 0.8, 0.796, 0.867, 0.649 ] + }, + { + "time": 0.9, + "x": 1.3, + "y": 0.649, + "curve": [ 0.925, 1.3, 0.975, 1.88, 0.925, 0.649, 0.975, 0.832 ] + }, + { "time": 1, "x": 1.88, "y": 0.832 } + ] + }, + "hoverboard-thruster-front": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-front": { + "scale": [ + { + "x": 0.849, + "y": 1.764, + "curve": [ 0.017, 0.849, 0.05, 0.835, 0.017, 1.764, 0.05, 2.033 ] + }, + { + "time": 0.0667, + "x": 0.835, + "y": 2.033, + "curve": [ 0.092, 0.835, 0.142, 0.752, 0.092, 2.033, 0.142, 1.584 ] + }, + { + "time": 0.1667, + "x": 0.752, + "y": 1.584, + "curve": [ 0.183, 0.752, 0.217, 0.809, 0.183, 1.584, 0.217, 1.71 ] + }, + { + "time": 0.2333, + "x": 0.809, + "y": 1.71, + "curve": [ 0.25, 0.809, 0.283, 0.717, 0.25, 1.71, 0.283, 1.45 ] + }, + { + "time": 0.3, + "x": 0.717, + "y": 1.45, + "curve": [ 0.317, 0.717, 0.35, 0.777, 0.317, 1.45, 0.35, 1.698 ] + }, + { + "time": 0.3667, + "x": 0.777, + "y": 1.698, + "curve": [ 0.4, 0.781, 0.45, 0.685, 0.375, 1.698, 0.45, 1.173 ] + }, + { + "time": 0.4667, + "x": 0.685, + "y": 1.173, + "curve": [ 0.492, 0.685, 0.542, 0.825, 0.492, 1.173, 0.542, 1.572 ] + }, + { + "time": 0.5667, + "x": 0.825, + "y": 1.572, + "curve": [ 0.611, 0.816, 0.63, 0.727, 0.611, 1.577, 0.606, 1.255 ] + }, + { + "time": 0.6667, + "x": 0.725, + "y": 1.241, + "curve": [ 0.692, 0.725, 0.742, 0.895, 0.692, 1.241, 0.749, 1.799 ] + }, + { + "time": 0.7667, + "x": 0.895, + "y": 1.857, + "curve": [ 0.783, 0.895, 0.796, 0.892, 0.796, 1.955, 0.817, 1.962 ] + }, + { + "time": 0.8333, + "x": 0.845, + "y": 1.962, + "curve": [ 0.845, 0.831, 0.883, 0.802, 0.85, 1.962, 0.872, 1.704 ] + }, + { + "time": 0.9, + "x": 0.802, + "y": 1.491, + "curve": [ 0.917, 0.802, 0.95, 0.845, 0.907, 1.441, 0.936, 1.508 ] + }, + { + "time": 0.9667, + "x": 0.845, + "y": 1.627, + "curve": [ 0.975, 0.845, 0.992, 0.849, 0.973, 1.652, 0.992, 1.764 ] + }, + { "time": 1, "x": 0.849, "y": 1.764 } + ] + }, + "hoverboard-thruster-rear": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-rear": { + "scale": [ + { + "x": 0.845, + "y": 1.31, + "curve": [ 0.017, 0.845, 0.117, 0.899, 0.017, 1.31, 0.117, 2.033 ] + }, + { + "time": 0.1333, + "x": 0.899, + "y": 2.033, + "curve": [ 0.15, 0.899, 0.183, 0.752, 0.15, 2.033, 0.183, 1.574 ] + }, + { + "time": 0.2, + "x": 0.752, + "y": 1.574, + "curve": [ 0.225, 0.752, 0.275, 0.809, 0.225, 1.574, 0.275, 1.71 ] + }, + { + "time": 0.3, + "x": 0.809, + "y": 1.71, + "curve": [ 0.317, 0.809, 0.35, 0.717, 0.317, 1.71, 0.35, 1.397 ] + }, + { + "time": 0.3667, + "x": 0.717, + "y": 1.397, + "curve": [ 0.383, 0.717, 0.417, 0.777, 0.383, 1.397, 0.417, 1.45 ] + }, + { + "time": 0.4333, + "x": 0.777, + "y": 1.45, + "curve": [ 0.45, 0.777, 0.496, 0.689, 0.45, 1.45, 0.481, 1.168 ] + }, + { + "time": 0.5333, + "x": 0.685, + "y": 1.173, + "curve": [ 0.565, 0.682, 0.617, 0.758, 0.575, 1.177, 0.617, 1.297 ] + }, + { + "time": 0.6333, + "x": 0.758, + "y": 1.297, + "curve": [ 0.658, 0.758, 0.708, 0.725, 0.658, 1.297, 0.708, 1.241 ] + }, + { + "time": 0.7333, + "x": 0.725, + "y": 1.241, + "curve": [ 0.772, 0.732, 0.796, 0.893, 0.782, 1.238, 0.778, 1.854 ] + }, + { + "time": 0.8333, + "x": 0.895, + "y": 1.857, + "curve": [ 0.878, 0.9, 0.992, 0.845, 0.88, 1.86, 0.992, 1.31 ] + }, + { "time": 1, "x": 0.845, "y": 1.31 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -85.92, + "curve": [ 0.08, -85.59, 0.284, -62.7 ] + }, + { + "time": 0.3667, + "value": -55.14, + "curve": [ 0.438, -48.65, 0.551, -43.21 ] + }, + { + "time": 0.6333, + "value": -43.21, + "curve": [ 0.716, -43.22, 0.908, -85.92 ] + }, + { "time": 1, "value": -85.92 } + ], + "translate": [ + { + "x": -0.59, + "y": -2.94, + "curve": [ 0.1, -1.21, 0.275, -1.74, 0.092, -2.94, 0.275, -6.39 ] + }, + { + "time": 0.3667, + "x": -1.74, + "y": -6.39, + "curve": [ 0.433, -1.74, 0.567, 0.72, 0.433, -6.39, 0.587, -4.48 ] + }, + { + "time": 0.6333, + "x": 0.72, + "y": -4.21, + "curve": [ 0.725, 0.72, 0.908, -0.08, 0.743, -3.57, 0.908, -2.94 ] + }, + { "time": 1, "x": -0.59, "y": -2.94 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 7.61, + "curve": [ 0.143, 7.62, 0.247, -23.17 ] + }, + { + "time": 0.2667, + "value": -26.56, + "curve": [ 0.281, -29.08, 0.351, -37.36 ] + }, + { + "time": 0.4333, + "value": -37.2, + "curve": [ 0.513, -37.05, 0.562, -29.88 ] + }, + { + "time": 0.6, + "value": -25.18, + "curve": [ 0.621, -22.58, 0.694, -3.98 ] + }, + { + "time": 0.8, + "value": 3.63, + "curve": [ 0.861, 8.03, 0.946, 7.57 ] + }, + { "time": 1, "value": 7.61 } + ], + "translate": [ + { + "curve": [ 0.117, 0, 0.35, 0.52, 0.117, 0, 0.35, -3.27 ] + }, + { + "time": 0.4667, + "x": 0.52, + "y": -3.27, + "curve": [ 0.6, 0.52, 0.867, 0, 0.6, -3.27, 0.867, 0 ] + }, + { "time": 1 } + ], + "shear": [ + { + "y": 19.83, + "curve": [ 0.117, 0, 0.35, 15.28, 0.117, 19.83, 0.35, 28.31 ] + }, + { + "time": 0.4667, + "x": 15.28, + "y": 28.31, + "curve": [ 0.6, 15.28, 0.867, 0, 0.6, 28.31, 0.867, 19.83 ] + }, + { "time": 1, "y": 19.83 } + ] + }, + "board-ik": { + "translate": [ + { + "x": 393.62, + "curve": [ 0.083, 393.62, 0.25, 393.48, 0.083, 0, 0.25, 117.69 ] + }, + { + "time": 0.3333, + "x": 393.48, + "y": 117.69, + "curve": [ 0.375, 393.48, 0.458, 393.62, 0.375, 117.69, 0.458, 83.82 ] + }, + { "time": 0.5, "x": 393.62, "y": 83.82 }, + { "time": 0.6667, "x": 393.62, "y": 30.15 }, + { "time": 1, "x": 393.62 } + ] + }, + "front-thigh": { + "translate": [ + { "x": -7.49, "y": 8.51 } + ] + }, + "front-leg-target": { + "translate": [ + { + "time": 0.3667, + "curve": [ 0.428, 10.83, 0.567, 12.78, 0.414, 7.29, 0.567, 8.79 ] + }, + { + "time": 0.6, + "x": 12.78, + "y": 8.79, + "curve": [ 0.692, 12.78, 0.772, 11.27, 0.692, 8.79, 0.766, 8.62 ] + }, + { "time": 0.8667 } + ] + }, + "rear-leg-target": { + "translate": [ + { + "time": 0.4667, + "curve": [ 0.492, 0, 0.534, 4.47, 0.492, 0, 0.542, 1.63 ] + }, + { + "time": 0.5667, + "x": 4.53, + "y": 1.77, + "curve": [ 0.622, 4.64, 0.717, 3.31, 0.615, 2.06, 0.71, 2.1 ] + }, + { "time": 0.8 } + ] + }, + "exhaust3": { + "scale": [ + { + "x": 1.882, + "y": 0.81, + "curve": [ 0.017, 1.882, 0.167, 1.3, 0.017, 0.81, 0.167, 0.649 ] + }, + { + "time": 0.2, + "x": 1.3, + "y": 0.649, + "curve": [ 0.225, 1.3, 0.275, 2.051, 0.225, 0.649, 0.275, 0.984 ] + }, + { + "time": 0.3, + "x": 2.051, + "y": 0.984, + "curve": [ 0.325, 2.051, 0.375, 1.311, 0.325, 0.984, 0.384, 0.715 ] + }, + { + "time": 0.4, + "x": 1.311, + "y": 0.686, + "curve": [ 0.433, 1.311, 0.5, 1.86, 0.426, 0.638, 0.5, 0.537 ] + }, + { + "time": 0.5333, + "x": 1.86, + "y": 0.537, + "curve": [ 0.567, 1.86, 0.633, 1.187, 0.567, 0.537, 0.604, 0.854 ] + }, + { + "time": 0.6667, + "x": 1.187, + "y": 0.854, + "curve": [ 0.7, 1.187, 0.767, 1.549, 0.707, 0.854, 0.774, 0.775 ] + }, + { + "time": 0.8, + "x": 1.549, + "y": 0.746, + "curve": [ 0.817, 1.549, 0.85, 1.181, 0.815, 0.729, 0.85, 0.713 ] + }, + { + "time": 0.8667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.9, 1.181, 0.967, 1.882, 0.9, 0.713, 0.967, 0.81 ] + }, + { "time": 1, "x": 1.882, "y": 0.81 } + ] + }, + "side-glow1": { + "rotate": [ + { "value": 51.12, "curve": "stepped" }, + { "time": 0.0667, "value": 43.82, "curve": "stepped" }, + { "time": 0.1, "value": 40.95, "curve": "stepped" }, + { "time": 0.1667, "value": 27.78, "curve": "stepped" }, + { "time": 0.2, "value": 10.24, "curve": "stepped" }, + { "time": 0.2667, "curve": "stepped" }, + { "time": 0.8, "value": -25.81 } + ], + "translate": [ + { "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.0667, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.1667, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.2667, "x": 248.16, "curve": "stepped" }, + { "time": 0.3, "x": 221.36, "curve": "stepped" }, + { "time": 0.3667, "x": 195.69, "curve": "stepped" }, + { "time": 0.4, "x": 171.08, "curve": "stepped" }, + { "time": 0.4667, "x": 144.84, "curve": "stepped" }, + { "time": 0.5, "x": 121.22, "curve": "stepped" }, + { "time": 0.5667, "x": 91.98, "curve": "stepped" }, + { "time": 0.6, "x": 62.63, "curve": "stepped" }, + { "time": 0.6667, "x": 30.78, "curve": "stepped" }, + { "time": 0.7, "curve": "stepped" }, + { "time": 0.7667, "x": -28.45, "curve": "stepped" }, + { "time": 0.8, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.8667, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "x": 0.535, "curve": "stepped" }, + { "time": 0.0667, "x": 0.594, "curve": "stepped" }, + { "time": 0.1, "x": 0.844, "curve": "stepped" }, + { "time": 0.1667, "curve": "stepped" }, + { "time": 0.8, "x": 0.534, "curve": "stepped" }, + { "time": 0.8667, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9, "x": 0.349, "y": 0.654 } + ] + }, + "side-glow2": { + "rotate": [ + { "time": 0.0667, "value": 51.12, "curve": "stepped" }, + { "time": 0.1, "value": 43.82, "curve": "stepped" }, + { "time": 0.1667, "value": 40.95, "curve": "stepped" }, + { "time": 0.2, "value": 27.78, "curve": "stepped" }, + { "time": 0.2667, "value": 10.24, "curve": "stepped" }, + { "time": 0.3, "curve": "stepped" }, + { "time": 0.8667, "value": -25.81 } + ], + "translate": [ + { "time": 0.0667, "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.1, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1667, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.2, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2667, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.3, "x": 248.16, "curve": "stepped" }, + { "time": 0.3667, "x": 221.36, "curve": "stepped" }, + { "time": 0.4, "x": 195.69, "curve": "stepped" }, + { "time": 0.4667, "x": 171.08, "curve": "stepped" }, + { "time": 0.5, "x": 144.84, "curve": "stepped" }, + { "time": 0.5667, "x": 121.22, "curve": "stepped" }, + { "time": 0.6, "x": 91.98, "curve": "stepped" }, + { "time": 0.6667, "x": 62.63, "curve": "stepped" }, + { "time": 0.7, "x": 30.78, "curve": "stepped" }, + { "time": 0.7667, "curve": "stepped" }, + { "time": 0.8, "x": -28.45, "curve": "stepped" }, + { "time": 0.8667, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.9, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9667, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "time": 0.0667, "x": 0.535, "curve": "stepped" }, + { "time": 0.1, "x": 0.594, "curve": "stepped" }, + { "time": 0.1667, "x": 0.844, "curve": "stepped" }, + { "time": 0.2, "curve": "stepped" }, + { "time": 0.8667, "x": 0.534, "curve": "stepped" }, + { "time": 0.9, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9667, "x": 0.349, "y": 0.654 } + ] + }, + "torso": { + "rotate": [ + { + "value": -34.73, + "curve": [ 0.034, -36.31, 0.162, -39.33 ] + }, + { + "time": 0.2667, + "value": -39.37, + "curve": [ 0.384, -39.37, 0.491, -29.52 ] + }, + { + "time": 0.5, + "value": -28.86, + "curve": [ 0.525, -26.95, 0.571, -21.01 ] + }, + { + "time": 0.6333, + "value": -21.01, + "curve": [ 0.725, -21.01, 0.969, -33.35 ] + }, + { "time": 1, "value": -34.73 } + ] + }, + "neck": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.07, 12.09, 0.189, 16.03 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.333, 16.14, 0.449, 8.03 ] + }, + { + "time": 0.5, + "value": 5.83, + "curve": [ 0.542, 4.02, 0.6, 2.68 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.68, 0.943, 8.57 ] + }, + { "time": 1, "value": 10.2 } + ] + }, + "head": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.044, 11.52, 0.2, 16.12 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.375, 16.17, 0.492, 2.65 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.7, 0.963, 9.26 ] + }, + { "time": 1, "value": 10.2 } + ], + "translate": [ + { + "curve": [ 0.03, -0.24, 0.2, -4.22, 0.051, -1.06, 0.2, -3.62 ] + }, + { + "time": 0.2667, + "x": -4.22, + "y": -3.62, + "curve": [ 0.358, -4.22, 0.542, 0.84, 0.358, -3.62, 0.542, 6.01 ] + }, + { + "time": 0.6333, + "x": 0.84, + "y": 6.01, + "curve": [ 0.725, 0.84, 0.939, 0.32, 0.725, 6.01, 0.945, 1.14 ] + }, + { "time": 1 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": -11.18, + "curve": [ 0.064, -14.82, 0.25, -20.01 ] + }, + { + "time": 0.3333, + "value": -20.01, + "curve": [ 0.429, -20.12, 0.58, 5.12 ] + }, + { + "time": 0.6, + "value": 8.67, + "curve": [ 0.617, 11.72, 0.687, 20.52 ] + }, + { + "time": 0.7667, + "value": 20.55, + "curve": [ 0.848, 20.7, 0.963, -9.43 ] + }, + { "time": 1, "value": -11.18 } + ] + }, + "hair3": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.014, 8.51, 0.075, 2.63 ] + }, + { + "time": 0.1, + "value": 2.63, + "curve": [ 0.15, 2.63, 0.25, 13.52 ] + }, + { + "time": 0.3, + "value": 13.52, + "curve": [ 0.35, 13.52, 0.45, 11.28 ] + }, + { + "time": 0.5, + "value": 11.28, + "curve": [ 0.575, 11.28, 0.725, 18.13 ] + }, + { + "time": 0.8, + "value": 18.13, + "curve": [ 0.85, 18.13, 0.978, 11.07 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -17.7, + "curve": [ 0.008, -17.7, 0.025, -23.73 ] + }, + { + "time": 0.0333, + "value": -23.73, + "curve": [ 0.067, -23.73, 0.154, -4.4 ] + }, + { + "time": 0.1667, + "value": -1.92, + "curve": [ 0.197, 4.09, 0.236, 12.91 ] + }, + { + "time": 0.2667, + "value": 17.56, + "curve": [ 0.301, 22.68, 0.342, 27.97 ] + }, + { + "time": 0.3667, + "value": 27.97, + "curve": [ 0.4, 27.97, 0.467, -1.45 ] + }, + { + "time": 0.5, + "value": -1.45, + "curve": [ 0.517, -1.45, 0.55, 3.16 ] + }, + { + "time": 0.5667, + "value": 3.16, + "curve": [ 0.583, 3.16, 0.617, -8.9 ] + }, + { + "time": 0.6333, + "value": -8.9, + "curve": [ 0.642, -8.9, 0.658, -5.4 ] + }, + { + "time": 0.6667, + "value": -5.4, + "curve": [ 0.683, -5.4, 0.717, -15.32 ] + }, + { + "time": 0.7333, + "value": -15.32, + "curve": [ 0.75, -15.32, 0.783, -9.19 ] + }, + { + "time": 0.8, + "value": -9.19, + "curve": [ 0.817, -9.19, 0.85, -23.6 ] + }, + { + "time": 0.8667, + "value": -23.6, + "curve": [ 0.883, -23.6, 0.917, -17.38 ] + }, + { + "time": 0.9333, + "value": -17.38, + "curve": [ 0.942, -17.38, 0.958, -20.46 ] + }, + { + "time": 0.9667, + "value": -20.46, + "curve": [ 0.975, -20.46, 0.992, -17.7 ] + }, + { "time": 1, "value": -17.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.06, 9.04, 0.25, 8.9 ] + }, + { + "time": 0.3333, + "value": 8.9, + "curve": [ 0.392, 8.9, 0.508, 14.58 ] + }, + { + "time": 0.5667, + "value": 14.58, + "curve": [ 0.675, 14.58, 0.956, 10.28 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -3.82, + "curve": [ 0.017, -3.82, 0.064, -9.16 ] + }, + { + "time": 0.1333, + "value": -9.09, + "curve": [ 0.178, -9.04, 0.234, 1.29 ] + }, + { + "time": 0.2667, + "value": 5.98, + "curve": [ 0.276, 7.27, 0.336, 17.1 ] + }, + { + "time": 0.3667, + "value": 17.1, + "curve": [ 0.413, 17.1, 0.467, 1.59 ] + }, + { + "time": 0.5, + "value": 1.59, + "curve": [ 0.533, 1.59, 0.567, 13.63 ] + }, + { + "time": 0.6, + "value": 13.63, + "curve": [ 0.617, 13.63, 0.683, 0.78 ] + }, + { + "time": 0.7, + "value": 0.78, + "curve": [ 0.717, 0.78, 0.75, 12.01 ] + }, + { + "time": 0.7667, + "value": 11.9, + "curve": [ 0.792, 11.73, 0.817, -0.85 ] + }, + { + "time": 0.8333, + "value": -0.85, + "curve": [ 0.85, -0.85, 0.88, 1.99 ] + }, + { + "time": 0.9, + "value": 1.82, + "curve": [ 0.916, 1.68, 0.95, -6.9 ] + }, + { + "time": 0.9667, + "value": -6.9, + "curve": [ 0.975, -6.9, 0.992, -3.82 ] + }, + { "time": 1, "value": -3.82 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 31.65, + "curve": [ 0.108, 31.65, 0.325, 13.01 ] + }, + { + "time": 0.4333, + "value": 13.01, + "curve": [ 0.71, 13.01, 0.917, 31.65 ] + }, + { "time": 1, "value": 31.65 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 31, + "curve": [ 0.108, 31, 0.325, 12.76 ] + }, + { + "time": 0.4333, + "value": 12.79, + "curve": [ 0.587, 12.82, 0.917, 31 ] + }, + { "time": 1, "value": 31 } + ] + }, + "gun": { + "rotate": [ + { + "value": 1.95, + "curve": [ 0.083, 1.95, 0.245, 36.73 ] + }, + { + "time": 0.3333, + "value": 36.71, + "curve": [ 0.439, 36.69, 0.589, 10.68 ] + }, + { + "time": 0.6333, + "value": 8.75, + "curve": [ 0.701, 5.81, 0.917, 1.95 ] + }, + { "time": 1, "value": 1.95 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 2.35 ] + }, + { + "time": 0.1333, + "value": 2.35, + "curve": [ 0.225, 2.35, 0.408, -2.4 ] + }, + { + "time": 0.5, + "value": -2.4, + "curve": [ 0.567, -2.4, 0.7, 1.44 ] + }, + { + "time": 0.7667, + "value": 1.44, + "curve": [ 0.825, 1.44, 0.942, 0 ] + }, + { "time": 1 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.063, 0.77, 0.106, 1.42 ] + }, + { + "time": 0.1667, + "value": 1.42, + "curve": [ 0.259, 1.42, 0.344, -1.25 ] + }, + { + "time": 0.4667, + "value": -1.26, + "curve": [ 0.656, -1.26, 0.917, -0.78 ] + }, + { "time": 1 } + ] + }, + "head-control": { + "translate": [ + { + "x": 0.37, + "y": -11.17, + "curve": [ 0.133, 0.37, 0.335, -10.23, 0.133, -11.17, 0.335, 3.15 ] + }, + { + "time": 0.5333, + "x": -10.23, + "y": 3.15, + "curve": [ 0.71, -10.23, 0.883, 0.37, 0.71, 3.15, 0.883, -11.17 ] + }, + { "time": 1, "x": 0.37, "y": -11.17 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 10.15, + "curve": [ 0.103, 1.46, 0.249, 1.36, 0.103, 10.15, 0.249, -4.39 ] + }, + { + "time": 0.4, + "x": 1.36, + "y": -4.39, + "curve": [ 0.621, 1.36, 0.85, 1.46, 0.621, -4.39, 0.85, 10.15 ] + }, + { "time": 1, "x": 1.46, "y": 10.15 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": 1.4, + "y": 0.44, + "curve": [ 0.088, 1.4, 0.208, -2.47, 0.088, 0.44, 0.208, 8.61 ] + }, + { + "time": 0.3333, + "x": -2.47, + "y": 8.61, + "curve": [ 0.572, -2.47, 0.833, 1.4, 0.572, 8.61, 0.833, 0.44 ] + }, + { "time": 1, "x": 1.4, "y": 0.44 } + ] + } + }, + "transform": { + "front-foot-board-transform": [ + { "mixRotate": 0.997 } + ], + "rear-foot-board-transform": [ + {} + ], + "toes-board": [ + { "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + }, + "attachments": { + "default": { + "front-foot": { + "front-foot": { + "deform": [ + { + "offset": 26, + "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ] + } + ] + } + }, + "front-shin": { + "front-shin": { + "deform": [ + { + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -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.54892, -3.06021, 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.80437, -7.01817 ] + }, + { + "time": 0.3667, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ] + }, + { + "time": 0.5333, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -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.54892, -3.06021, 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.80437, -7.01817 ] + }, + { + "time": 1, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -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.54892, -3.06021, 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.80437, -7.01817 ] + } + ] + } + }, + "hoverboard-board": { + "hoverboard-board": { + "deform": [ + { + "curve": [ 0.067, 0, 0.2, 1 ] + }, + { + "time": 0.2667, + "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 ], + "curve": [ 0.45, 0, 0.817, 1 ] + }, + { "time": 1 } + ] + } + }, + "rear-foot": { + "rear-foot": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + }, + "idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { "x": -69.06 } + ] + }, + "hip": { + "rotate": [ + { + "curve": [ 0.073, 0.35, 0.303, 1.27 ] + }, + { + "time": 0.4, + "value": 1.28, + "curve": [ 0.615, 1.3, 0.847, -1.41 ] + }, + { + "time": 1.2, + "value": -1.38, + "curve": [ 1.344, -1.37, 1.602, -0.28 ] + }, + { "time": 1.6667 } + ], + "translate": [ + { + "x": -11.97, + "y": -23.15, + "curve": [ 0.059, -12.96, 0.258, -15.19, 0.142, -23.15, 0.341, -24.89 ] + }, + { + "time": 0.4667, + "x": -15.14, + "y": -26.74, + "curve": [ 0.62, -15.1, 0.788, -13.28, 0.597, -28.66, 0.75, -30.01 ] + }, + { + "time": 0.9, + "x": -12.02, + "y": -30.01, + "curve": [ 0.978, -11.13, 1.175, -9.05, 1.036, -29.94, 1.234, -28.08 ] + }, + { + "time": 1.3333, + "x": -9.06, + "y": -26.64, + "curve": [ 1.501, -9.06, 1.614, -10.95, 1.454, -24.89, 1.609, -23.15 ] + }, + { "time": 1.6667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -60.87, + "curve": [ 0.154, -60.85, 0.452, -68.65 ] + }, + { + "time": 0.8333, + "value": -68.65, + "curve": [ 1.221, -68.65, 1.542, -60.87 ] + }, + { "time": 1.6667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 42.46, + "curve": [ 0.029, 42.97, 0.134, 45.28 ] + }, + { + "time": 0.3333, + "value": 45.27, + "curve": [ 0.578, 45.26, 0.798, 40.07 ] + }, + { + "time": 0.8333, + "value": 39.74, + "curve": [ 0.878, 39.32, 1.019, 38.23 ] + }, + { + "time": 1.2, + "value": 38.22, + "curve": [ 1.377, 38.22, 1.619, 41.68 ] + }, + { "time": 1.6667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 39.2, + "curve": [ 0.185, 39.22, 0.5, 29.37 ] + }, + { + "time": 0.6667, + "value": 29.37, + "curve": [ 0.917, 29.37, 1.417, 39.2 ] + }, + { "time": 1.6667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "value": -6.75, + "curve": [ 0.176, -7.88, 0.349, -8.95 ] + }, + { + "time": 0.4667, + "value": -8.95, + "curve": [ 0.55, -8.95, 0.697, -6.77 ] + }, + { + "time": 0.8333, + "value": -5.44, + "curve": [ 0.88, -4.98, 1.05, -4.12 ] + }, + { + "time": 1.1333, + "value": -4.12, + "curve": [ 1.266, -4.12, 1.469, -5.48 ] + }, + { "time": 1.6667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "curve": [ 0.086, 0, 0.233, 2.48 ] + }, + { + "time": 0.3333, + "value": 4.13, + "curve": [ 0.429, 5.7, 0.711, 10.06 ] + }, + { + "time": 0.8333, + "value": 10.06, + "curve": [ 0.926, 10.06, 1.092, 4.21 ] + }, + { + "time": 1.2, + "value": 2.78, + "curve": [ 1.349, 0.8, 1.551, 0 ] + }, + { "time": 1.6667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "curve": [ 0.063, 0.54, 0.367, 3.39 ] + }, + { + "time": 0.5333, + "value": 3.39, + "curve": [ 0.696, 3.39, 0.939, -1.63 ] + }, + { + "time": 1.2, + "value": -1.61, + "curve": [ 1.42, -1.59, 1.574, -0.67 ] + }, + { "time": 1.6667 } + ] + }, + "gun": { + "rotate": [ + { + "curve": [ 0.099, 0.27, 0.367, 1.23 ] + }, + { + "time": 0.5333, + "value": 1.23, + "curve": [ 0.665, 1.23, 0.937, -0.56 ] + }, + { + "time": 1.1333, + "value": -0.55, + "curve": [ 1.316, -0.55, 1.582, -0.21 ] + }, + { "time": 1.6667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -22.88, + "curve": [ 0.099, -23.45, 0.363, -24.74 ] + }, + { + "time": 0.5333, + "value": -24.74, + "curve": [ 0.706, -24.74, 0.961, -20.97 ] + }, + { + "time": 1.1333, + "value": -20.97, + "curve": [ 1.355, -20.97, 1.567, -22.28 ] + }, + { "time": 1.6667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "value": 3.78, + "curve": [ 0.167, 3.78, 0.5, 5.45 ] + }, + { + "time": 0.6667, + "value": 5.45, + "curve": [ 0.917, 5.45, 1.417, 3.78 ] + }, + { "time": 1.6667, "value": 3.78 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.067, 0.33, 0.341, 2.54 ] + }, + { + "time": 0.5333, + "value": 2.54, + "curve": [ 0.734, 2.55, 0.982, -0.94 ] + }, + { + "time": 1.1333, + "value": -0.93, + "curve": [ 1.365, -0.91, 1.549, -0.56 ] + }, + { "time": 1.6667 } + ] + }, + "torso3": { + "rotate": [ + { + "value": -2.15, + "curve": [ 0.052, -1.9, 0.384, -0.15 ] + }, + { + "time": 0.5333, + "value": -0.14, + "curve": [ 0.762, -0.13, 0.895, -3.1 ] + }, + { + "time": 1.1333, + "value": -3.1, + "curve": [ 1.348, -3.1, 1.592, -2.46 ] + }, + { "time": 1.6667, "value": -2.15 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.213, 2.86 ] + }, + { + "time": 0.2667, + "value": 3.65, + "curve": [ 0.358, 4.99, 0.535, 7.92 ] + }, + { + "time": 0.6667, + "value": 7.92, + "curve": [ 0.809, 7.92, 1.067, 5.49 ] + }, + { + "time": 1.1333, + "value": 4.7, + "curve": [ 1.245, 3.34, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.225, -7.97 ] + }, + { + "time": 0.2667, + "value": -9.75, + "curve": [ 0.316, -11.84, 0.519, -16.66 ] + }, + { + "time": 0.6667, + "value": -16.66, + "curve": [ 0.817, -16.66, 1.029, -11.43 ] + }, + { + "time": 1.1333, + "value": -9.14, + "curve": [ 1.25, -6.56, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.1, 0, 0.3, 1.32 ] + }, + { + "time": 0.4, + "value": 1.32, + "curve": [ 0.55, 1.32, 0.866, 0.93 ] + }, + { + "time": 1, + "value": 0.73, + "curve": [ 1.189, 0.46, 1.5, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.118, -0.44, 0.3, -8.52 ] + }, + { + "time": 0.4, + "value": -8.52, + "curve": [ 0.55, -8.52, 0.85, 1.96 ] + }, + { + "time": 1, + "value": 1.96, + "curve": [ 1.167, 1.96, 1.577, 0.38 ] + }, + { "time": 1.6667 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.098, 1.46, 0.3, 4.49, 0.17, 0.13, 0.316, -3.28 ] + }, + { + "time": 0.4, + "x": 4.55, + "y": -5.95, + "curve": [ 0.53, 4.64, 0.776, 2.59, 0.492, -8.89, 0.668, -14.21 ] + }, + { + "time": 0.8667, + "x": 1.42, + "y": -14.26, + "curve": [ 0.966, 0.15, 1.109, -2.91, 0.994, -14.26, 1.144, -10.58 ] + }, + { + "time": 1.2333, + "x": -3.02, + "y": -8.26, + "curve": [ 1.342, -3.02, 1.568, -1.48, 1.317, -6.1, 1.558, 0 ] + }, + { "time": 1.6667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.21, 0, 0.525, -1.72, 0.21, 0, 0.525, 4.08 ] + }, + { + "time": 0.8333, + "x": -1.72, + "y": 4.08, + "curve": [ 1.15, -1.72, 1.46, 0, 1.15, 4.08, 1.46, 0 ] + }, + { "time": 1.6667 } + ] + } + } + }, + "idle-turn": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-upper-arm": { + "rotate": [ + { + "value": -302.77, + "curve": [ 0, -406.9, 0.125, -420.87 ] + }, + { "time": 0.2667, "value": -420.87 } + ], + "translate": [ + { + "x": 2.24, + "y": -4.98, + "curve": [ 0.067, 2.24, 0.111, 0, 0.067, -4.98, 0.111, 0 ] + }, + { "time": 0.2667 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 248.56, + "curve": [ 0, 371.28, 0.062, 399.2 ] + }, + { "time": 0.1333, "value": 399.2 } + ], + "translate": [ + { + "x": -2.84, + "y": 37.28, + "curve": [ 0.033, -2.84, 0.069, 0, 0.033, 37.28, 0.069, 0 ] + }, + { "time": 0.1333 } + ] + }, + "gun": { + "rotate": [ + { + "value": -3.95, + "curve": [ 0, -10.4, 0.019, -20.43 ] + }, + { + "time": 0.0333, + "value": -20.45, + "curve": [ 0.044, -20.47, 0.125, 0 ] + }, + { "time": 0.2 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.2, + "curve": [ 0, 6.27, 0.125, 3.78 ] + }, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hip": { + "translate": [ + { + "x": -2.69, + "y": -6.79, + "curve": [ 0.067, -2.69, 0.2, -11.97, 0.067, -6.79, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -15.54, + "curve": [ 0, -3.08, 0.034, 18.44 ] + }, + { + "time": 0.0667, + "value": 19.02, + "curve": [ 0.108, 19.75, 0.169, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.94, + "curve": [ 0, 0.962, 0.024, 1.237, 0, 1, 0.026, 0.947 ] + }, + { + "time": 0.0667, + "x": 1.236, + "y": 0.947, + "curve": [ 0.117, 1.235, 0.189, 1, 0.117, 0.947, 0.189, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 11.75, + "curve": [ 0, -7.97, 0.017, -33.4 ] + }, + { + "time": 0.0333, + "value": -33.39, + "curve": [ 0.049, -33.37, 0.131, 0 ] + }, + { "time": 0.2 } + ] + }, + "torso": { + "rotate": [ + { + "value": -18.25, + "curve": [ 0, -10.59, 0.125, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.132, 1, 0.067, 1.03, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "head": { + "rotate": [ + { + "value": 5.12, + "curve": [ 0, -6.34, 0.125, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.107, 1, 0.067, 1.03, 0.107, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": -58.39, + "y": 30.48, + "curve": [ 0, -7.15, 0.047, 16.62, 0, 12.71, 0.039, 0.22 ] + }, + { + "time": 0.1, + "x": 34.14, + "y": -0.19, + "curve": [ 0.136, 45.79, 0.163, 48.87, 0.133, -0.41, 0.163, 0 ] + }, + { "time": 0.2, "x": 48.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 6.69, + "curve": [ 0, 19.76, 0.039, 56.53 ] + }, + { + "time": 0.0667, + "value": 56.63, + "curve": [ 0.114, 56.79, 0.189, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -1.85, + "curve": [ 0.014, -8.91, 0.047, -28.4 ] + }, + { + "time": 0.1, + "value": -28.89, + "curve": [ 0.144, -29.29, 0.262, -21.77 ] + }, + { "time": 0.2667 } + ], + "translate": [ + { + "x": 9.97, + "y": 0.82, + "curve": [ 0, -54.41, 0.078, -69.06, 0, 0.15, 0.078, 0 ] + }, + { "time": 0.1667, "x": -69.06 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -9.01, + "curve": [ 0.044, -9.01, 0.072, 7.41 ] + }, + { + "time": 0.1333, + "value": 10.08, + "curve": [ 0.166, 11.47, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -16.49, + "curve": [ 0.044, -16.49, 0.101, -5.98 ] + }, + { + "time": 0.1333, + "value": -2.95, + "curve": [ 0.162, -0.34, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -3.85, + "curve": [ 0.044, -3.85, 0.072, 6.91 ] + }, + { + "time": 0.1333, + "value": 8.05, + "curve": [ 0.166, 8.65, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 1.25, + "curve": [ 0.044, 1.25, 0.072, 8.97 ] + }, + { + "time": 0.1333, + "value": 8.6, + "curve": [ 0.166, 8.4, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 12.21, + "y": 1.89, + "curve": [ 0.033, 12.21, 0.1, 0, 0.033, 1.89, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.11, + "y": -1.38, + "curve": [ 0.033, -16.11, 0.1, 0, 0.033, -1.38, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "torso3": { + "rotate": [ + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "x": -13.72, + "y": -34.7, + "curve": [ 0.067, -13.72, 0.2, 0, 0.067, -34.7, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.13, + "y": -14.31, + "curve": [ 0.067, 1.13, 0.2, 0, 0.067, -14.31, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + } + } + }, + "jump": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" }, + { "time": 0.1, "name": "front-fist-closed" }, + { "time": 0.8333, "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-thigh": { + "rotate": [ + { + "value": 55.08, + "curve": [ 0.007, 46.66, 0.043, 26.3 ] + }, + { + "time": 0.0667, + "value": 22.84, + "curve": [ 0.1, 17.99, 0.165, 15.78 ] + }, + { + "time": 0.2333, + "value": 15.71, + "curve": [ 0.309, 15.63, 0.408, 46.67 ] + }, + { + "time": 0.5, + "value": 63.6, + "curve": [ 0.56, 74.72, 0.762, 91.48 ] + }, + { + "time": 0.9667, + "value": 91.81, + "curve": [ 1.068, 92.01, 1.096, 22.05 ] + }, + { + "time": 1.1667, + "value": 22.25, + "curve": [ 1.18, 22.29, 1.176, 56.17 ] + }, + { + "time": 1.2, + "value": 56.16, + "curve": [ 1.246, 56.15, 1.263, 54.94 ] + }, + { "time": 1.3333, "value": 55.08 } + ], + "translate": [ + { "x": -5.13, "y": 11.55 } + ] + }, + "torso": { + "rotate": [ + { + "value": -45.57, + "curve": [ 0.022, -44.61, 0.03, -39.06 ] + }, + { + "time": 0.0667, + "value": -35.29, + "curve": [ 0.12, -29.77, 0.28, -19.95 ] + }, + { + "time": 0.4333, + "value": -19.95, + "curve": [ 0.673, -19.95, 0.871, -22.38 ] + }, + { + "time": 0.9667, + "value": -27.08, + "curve": [ 1.094, -33.33, 1.176, -44.93 ] + }, + { "time": 1.3333, "value": -45.57 } + ], + "translate": [ + { "x": -3.79, "y": -0.77 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "value": 12.81, + "curve": [ 0.067, 12.81, 0.242, 67.88 ] + }, + { + "time": 0.2667, + "value": 74.11, + "curve": [ 0.314, 86.02, 0.454, 92.23 ] + }, + { + "time": 0.5667, + "value": 92.24, + "curve": [ 0.753, 92.26, 0.966, 67.94 ] + }, + { + "time": 1, + "value": 61.32, + "curve": [ 1.039, 53.75, 1.218, 12.68 ] + }, + { "time": 1.3333, "value": 12.81 } + ] + }, + "rear-shin": { + "rotate": [ + { + "value": -115.64, + "curve": [ 0.067, -117.17, 0.125, -117.15 ] + }, + { + "time": 0.1667, + "value": -117.15, + "curve": [ 0.225, -117.15, 0.332, -108.76 ] + }, + { + "time": 0.4, + "value": -107.15, + "curve": [ 0.48, -105.26, 0.685, -103.49 ] + }, + { + "time": 0.7667, + "value": -101.97, + "curve": [ 0.826, -100.87, 0.919, -92.3 ] + }, + { + "time": 1, + "value": -92.28, + "curve": [ 1.113, -92.26, 1.297, -114.22 ] + }, + { "time": 1.3333, "value": -115.64 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -40.21, + "curve": [ 0.054, -35.46, 0.15, -31.12 ] + }, + { + "time": 0.2, + "value": -31.12, + "curve": [ 0.308, -31.12, 0.547, -80.12 ] + }, + { + "time": 0.6333, + "value": -96.56, + "curve": [ 0.697, -108.56, 0.797, -112.54 ] + }, + { + "time": 0.8667, + "value": -112.6, + "curve": [ 1.137, -112.84, 1.274, -49.19 ] + }, + { "time": 1.3333, "value": -40.21 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.054, 32.23, 0.192, 55.84 ] + }, + { + "time": 0.2333, + "value": 62.58, + "curve": [ 0.29, 71.87, 0.375, 79.28 ] + }, + { + "time": 0.4333, + "value": 79.18, + "curve": [ 0.555, 78.98, 0.684, 27.54 ] + }, + { + "time": 0.7333, + "value": 13.28, + "curve": [ 0.786, -1.85, 0.874, -24.76 ] + }, + { + "time": 1, + "value": -25.45, + "curve": [ 1.165, -26.36, 1.303, 9.1 ] + }, + { "time": 1.3333, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.114, -39.59, 0.3, -45.61 ] + }, + { + "time": 0.4, + "value": -45.61, + "curve": [ 0.442, -45.61, 0.537, -21.54 ] + }, + { + "time": 0.5667, + "value": -15.4, + "curve": [ 0.592, -10.23, 0.692, 11.89 ] + }, + { + "time": 0.7333, + "value": 11.73, + "curve": [ 0.783, 11.54, 0.831, 1.8 ] + }, + { + "time": 0.8667, + "value": -5.78, + "curve": [ 0.897, -12.22, 0.901, -14.22 ] + }, + { + "time": 0.9333, + "value": -14.51, + "curve": [ 0.974, -14.89, 0.976, 10.38 ] + }, + { + "time": 1, + "value": 10.55, + "curve": [ 1.027, 10.74, 1.023, -8.44 ] + }, + { + "time": 1.0333, + "value": -8.42, + "curve": [ 1.059, -8.36, 1.074, 10.12 ] + }, + { + "time": 1.1, + "value": 10.22, + "curve": [ 1.168, 10.48, 1.27, -36.07 ] + }, + { "time": 1.3333, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.048, 36.1, 0.168, 20.45 ] + }, + { + "time": 0.3, + "value": 20.45, + "curve": [ 0.476, 20.45, 0.571, 33.76 ] + }, + { + "time": 0.6, + "value": 38.67, + "curve": [ 0.642, 45.8, 0.681, 57.44 ] + }, + { + "time": 0.7333, + "value": 62.91, + "curve": [ 0.829, 72.8, 0.996, 77.61 ] + }, + { + "time": 1.0333, + "value": 80.37, + "curve": [ 1.082, 83.94, 1.148, 90.6 ] + }, + { + "time": 1.2, + "value": 90.6, + "curve": [ 1.248, 90.46, 1.317, 53.07 ] + }, + { "time": 1.3333, "value": 49.06 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.022, 25.12, 0.187, -0.89 ] + }, + { + "time": 0.2, + "value": -2.52, + "curve": [ 0.257, -9.92, 0.372, -17.38 ] + }, + { + "time": 0.4333, + "value": -17.41, + "curve": [ 0.54, -17.47, 0.659, -16.91 ] + }, + { + "time": 0.7667, + "value": -12.1, + "curve": [ 0.907, -5.79, 1.025, 14.58 ] + }, + { + "time": 1.1, + "value": 20.58, + "curve": [ 1.191, 27.85, 1.283, 29.67 ] + }, + { "time": 1.3333, "value": 29.67 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.104, 11.82, 0.179, 11.15 ] + }, + { + "time": 0.2, + "value": 10.08, + "curve": [ 0.255, 7.29, 0.405, -8.15 ] + }, + { + "time": 0.4333, + "value": -9.35, + "curve": [ 0.508, -12.48, 0.595, -13.14 ] + }, + { + "time": 0.6667, + "value": -12.61, + "curve": [ 0.714, -12.26, 0.815, -5.57 ] + }, + { + "time": 0.8333, + "value": -4.08, + "curve": [ 0.883, -0.07, 1.045, 12.77 ] + }, + { + "time": 1.1, + "value": 15.06, + "curve": [ 1.208, 19.6, 1.279, 20.64 ] + }, + { "time": 1.3333, "value": 20.73 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.008, 12.19, 0.197, -23.53 ] + }, + { + "time": 0.3333, + "value": -23.95, + "curve": [ 0.509, -23.95, 0.667, -2.66 ] + }, + { + "time": 0.7333, + "value": -2.66, + "curve": [ 0.792, -2.66, 0.908, -13.32 ] + }, + { + "time": 0.9667, + "value": -13.32, + "curve": [ 1.158, -13.11, 1.241, -1.58 ] + }, + { "time": 1.3333, "value": -1.58 } + ], + "scale": [ + { + "curve": [ 0.041, 1, 0.052, 0.962, 0.041, 1, 0.052, 1.137 ] + }, + { + "time": 0.1, + "x": 0.954, + "y": 1.137, + "curve": [ 0.202, 0.962, 0.318, 1, 0.202, 1.137, 0.252, 1.002 ] + }, + { "time": 0.4667 }, + { + "time": 1.0667, + "x": 1.002, + "curve": [ 1.092, 1.002, 1.126, 1.143, 1.092, 1, 1.128, 0.975 ] + }, + { + "time": 1.1667, + "x": 1.144, + "y": 0.973, + "curve": [ 1.204, 1.145, 1.233, 0.959, 1.206, 0.972, 1.227, 1.062 ] + }, + { + "time": 1.2667, + "x": 0.958, + "y": 1.063, + "curve": [ 1.284, 0.958, 1.292, 1.001, 1.288, 1.063, 1.288, 1.001 ] + }, + { "time": 1.3333 } + ] + }, + "hip": { + "translate": [ + { + "y": -45.46, + "curve": [ 0.042, -0.09, 0.15, 15.22, 0.031, 44.98, 0.123, 289.73 ] + }, + { + "time": 0.2, + "x": 15.22, + "y": 415.85, + "curve": [ 0.332, 15.22, 0.539, -34.52, 0.271, 532.93, 0.483, 720.5 ] + }, + { + "time": 0.7667, + "x": -34.52, + "y": 721.6, + "curve": [ 0.888, -34.52, 1.057, -21.95, 1.049, 721.17, 1.098, 379.84 ] + }, + { + "time": 1.1333, + "x": -15.67, + "y": 266.77, + "curve": [ 1.144, -14.77, 1.188, -10.53, 1.15, 213.72, 1.172, -61.32 ] + }, + { + "time": 1.2333, + "x": -6.53, + "y": -61.34, + "curve": [ 1.272, -3.22, 1.311, 0.05, 1.291, -61.36, 1.296, -44.8 ] + }, + { "time": 1.3333, "y": -45.46 } + ] + }, + "front-shin": { + "rotate": [ + { + "value": -74.19, + "curve": [ 0, -51.14, 0.042, -12.54 ] + }, + { + "time": 0.1667, + "value": -12.28, + "curve": [ 0.285, -12.32, 0.37, -74.44 ] + }, + { + "time": 0.4333, + "value": -92.92, + "curve": [ 0.498, -111.86, 0.617, -140.28 ] + }, + { + "time": 0.9, + "value": -140.84, + "curve": [ 1.004, -141.04, 1.09, -47.87 ] + }, + { + "time": 1.1, + "value": -37.44, + "curve": [ 1.108, -29.83, 1.14, -21.18 ] + }, + { + "time": 1.1667, + "value": -21.08, + "curve": [ 1.18, -21.03, 1.191, -50.65 ] + }, + { + "time": 1.2, + "value": -53.17, + "curve": [ 1.22, -58.53, 1.271, -73.38 ] + }, + { "time": 1.3333, "value": -74.19 } + ] + }, + "front-foot": { + "rotate": [ + { + "value": 7.35, + "curve": [ 0, 4.8, 0.05, -26.64 ] + }, + { + "time": 0.0667, + "value": -26.64, + "curve": [ 0.192, -26.64, 0.442, -11.77 ] + }, + { + "time": 0.5667, + "value": -11.77, + "curve": [ 0.692, -11.77, 0.942, -19.36 ] + }, + { + "time": 1.0667, + "value": -19.36, + "curve": [ 1.133, -19.36, 1.32, 3.82 ] + }, + { "time": 1.3333, "value": 7.35 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -7.14 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.15, 30.81 ] + }, + { + "time": 0.2, + "value": 30.81, + "curve": [ 0.258, 30.81, 0.375, 13.26 ] + }, + { + "time": 0.4333, + "value": 13.26, + "curve": [ 0.508, 13.26, 0.658, 15.05 ] + }, + { + "time": 0.7333, + "value": 14.98, + "curve": [ 0.789, 14.94, 0.828, 13.62 ] + }, + { + "time": 0.8667, + "value": 12.72, + "curve": [ 0.887, 12.25, 0.984, 9.83 ] + }, + { + "time": 1.0333, + "value": 8.6, + "curve": [ 1.045, 8.31, 1.083, 7.55 ] + }, + { + "time": 1.1333, + "value": 7.13, + "curve": [ 1.175, 6.78, 1.283, 6.18 ] + }, + { "time": 1.3333, "value": 6.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-leg-target": { + "rotate": [ + { "value": -38.43 } + ], + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "front-foot-target": { + "rotate": [ + { "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 } + ], + "translate": [ + { "x": -176.39, "y": 134.12 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -143.73, + "curve": [ 0.083, -144.24, 0.167, -74.26 ] + }, + { + "time": 0.2667, + "value": -52.76, + "curve": [ 0.342, -36.57, 0.513, -36.57 ] + }, + { + "time": 0.6333, + "value": -30.97, + "curve": [ 0.724, -26.78, 0.848, -17.06 ] + }, + { + "time": 0.9667, + "value": -16.74, + "curve": [ 1.167, -16.2, 1.272, -144.17 ] + }, + { "time": 1.3333, "value": -143.73 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -1.57, + "curve": [ 0, -24.71, 0.162, -60.88 ] + }, + { + "time": 0.2667, + "value": -60.83, + "curve": [ 0.342, -60.8, 0.582, -43.5 ] + }, + { + "time": 0.7, + "value": -39.45, + "curve": [ 0.773, -36.94, 0.832, -36.78 ] + }, + { + "time": 0.9667, + "value": -36.6, + "curve": [ 1.054, -36.49, 1.092, -37.37 ] + }, + { + "time": 1.1667, + "value": -33.26, + "curve": [ 1.237, -29.37, 1.147, -1.41 ] + }, + { "time": 1.2, "value": -1.57 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, 13.59, 0.117, 18.21 ] + }, + { + "time": 0.1333, + "value": 18.21, + "curve": [ 0.167, 18.21, 0.26, 12.95 ] + }, + { + "time": 0.3, + "value": 11.56, + "curve": [ 0.382, 8.7, 0.55, 9.43 ] + }, + { + "time": 0.6667, + "value": 9.32, + "curve": [ 0.843, 9.15, 0.918, -7.34 ] + }, + { "time": 1.3333, "value": -6.81 } + ], + "translate": [ + { + "time": 0.6667, + "curve": [ 0.781, 0, 0.972, 16.03, 0.781, 0, 0.972, 0.92 ] + }, + { + "time": 1.1333, + "x": 16.03, + "y": 0.92, + "curve": [ 1.211, 16.03, 1.281, 0, 1.211, 0.92, 1.281, 0 ] + }, + { "time": 1.3333 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.88, 0.063, 16.18 ] + }, + { + "time": 0.1667, + "value": 16.14, + "curve": [ 0.242, 16.1, 0.249, 16.07 ] + }, + { + "time": 0.3333, + "value": 13.46, + "curve": [ 0.442, 10.09, 0.573, -2.2 ] + }, + { + "time": 0.6, + "value": -6.04, + "curve": [ 0.614, -8.05, 0.717, -33.44 ] + }, + { + "time": 0.7667, + "value": -33.44, + "curve": [ 0.809, -33.44, 0.835, -31.32 ] + }, + { + "time": 0.8667, + "value": -27.36, + "curve": [ 0.874, -26.47, 0.903, -14.28 ] + }, + { + "time": 0.9333, + "value": -14.47, + "curve": [ 0.956, -14.62, 0.944, -25.91 ] + }, + { + "time": 1, + "value": -25.96, + "curve": [ 1.062, -26.02, 1.051, -1.87 ] + }, + { + "time": 1.0667, + "value": -1.87, + "curve": [ 1.096, -1.87, 1.096, -16.09 ] + }, + { + "time": 1.1333, + "value": -16.08, + "curve": [ 1.169, -16.08, 1.153, -3.38 ] + }, + { + "time": 1.2, + "value": -3.38, + "curve": [ 1.234, -3.38, 1.271, -6.07 ] + }, + { "time": 1.3333, "value": -6.07 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, -3.17, 0.042, 16.33 ] + }, + { + "time": 0.0667, + "value": 16.33, + "curve": [ 0.21, 15.74, 0.208, -12.06 ] + }, + { + "time": 0.3333, + "value": -12.21, + "curve": [ 0.417, -12.3, 0.552, -3.98 ] + }, + { + "time": 0.6667, + "value": 1.52, + "curve": [ 0.726, 4.35, 0.817, 4.99 ] + }, + { + "time": 0.8667, + "value": 4.99, + "curve": [ 0.901, 4.99, 0.912, -29.05 ] + }, + { + "time": 0.9667, + "value": -27.45, + "curve": [ 0.987, -26.83, 1.018, -5.42 ] + }, + { + "time": 1.0667, + "value": -5.46, + "curve": [ 1.107, -5.22, 1.095, -33.51 ] + }, + { + "time": 1.1333, + "value": -33.28, + "curve": [ 1.162, -33.57, 1.192, 8.04 ] + }, + { + "time": 1.2667, + "value": 7.86, + "curve": [ 1.302, 7.77, 1.313, 2.7 ] + }, + { "time": 1.3333, "value": 2.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.12, 0.074, 14.66 ] + }, + { + "time": 0.1333, + "value": 14.66, + "curve": [ 0.188, 14.8, 0.293, 9.56 ] + }, + { + "time": 0.3333, + "value": 5.99, + "curve": [ 0.381, 1.72, 0.55, -11.11 ] + }, + { + "time": 0.6667, + "value": -11.11, + "curve": [ 0.833, -11.11, 0.933, 22.54 ] + }, + { + "time": 1.1, + "value": 22.54, + "curve": [ 1.158, 22.54, 1.275, -6.81 ] + }, + { "time": 1.3333, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.013, 2.33, 0.092, -9.75 ] + }, + { + "time": 0.1333, + "value": -9.75, + "curve": [ 0.175, -9.75, 0.291, -1.26 ] + }, + { + "time": 0.3333, + "value": 0.96, + "curve": [ 0.359, 2.3, 0.543, 4.25 ] + }, + { + "time": 0.6, + "value": 4.68, + "curve": [ 0.683, 5.3, 0.771, 5.92 ] + }, + { + "time": 0.8333, + "value": 6.48, + "curve": [ 0.871, 6.82, 1.083, 11.37 ] + }, + { + "time": 1.1667, + "value": 11.37, + "curve": [ 1.208, 11.37, 1.317, 6.18 ] + }, + { "time": 1.3333, "value": 4.52 } + ], + "translate": [ + { + "curve": [ 0, 0, 0.082, -2.24, 0, 0, 0.082, -0.42 ] + }, + { + "time": 0.1667, + "x": -2.98, + "y": -0.56, + "curve": [ 0.232, -2.24, 0.298, 0, 0.232, -0.42, 0.298, 0 ] + }, + { "time": 0.3333, "curve": "stepped" }, + { + "time": 0.8667, + "curve": [ 0.889, 0, 0.912, 0.26, 0.889, 0, 0.912, 0.06 ] + }, + { + "time": 0.9333, + "x": 0.68, + "y": 0.23, + "curve": [ 1.016, 2.22, 1.095, 5.9, 1.023, 0.97, 1.095, 1.99 ] + }, + { + "time": 1.1667, + "x": 6.47, + "y": 2.18, + "curve": [ 1.23, 5.75, 1.286, 0, 1.23, 1.94, 1.286, 0 ] + }, + { "time": 1.3333 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.025, 4.52, 0.075, -6.17 ] + }, + { + "time": 0.1, + "value": -6.17, + "curve": [ 0.175, -6.17, 0.381, -0.71 ] + }, + { + "time": 0.4, + "value": -0.25, + "curve": [ 0.447, 0.87, 0.775, 4.84 ] + }, + { + "time": 0.9, + "value": 4.84, + "curve": [ 1.008, 4.84, 1.225, 4.52 ] + }, + { "time": 1.3333, "value": 4.52 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.138, -2.4, 0.227, -10.44, 0.123, 1.05, 0.227, 2.7 ] + }, + { + "time": 0.3667, + "x": -10.44, + "y": 2.7, + "curve": [ 0.484, -10.44, 0.585, -5.63, 0.484, 2.7, 0.629, -23.62 ] + }, + { + "time": 0.7333, + "x": -2.29, + "y": -26.61, + "curve": [ 0.818, -0.39, 0.962, 1.21, 0.858, -30.17, 0.972, -28.75 ] + }, + { + "time": 1.1, + "x": 1.25, + "y": -28.75, + "curve": [ 1.192, 1.28, 1.234, 0.98, 1.224, -28.75, 1.235, -2.15 ] + }, + { "time": 1.3333 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.031, -2.22, 0.065, -3.73, 0.02, -3.25, 0.065, -14.74 ] + }, + { + "time": 0.1, + "x": -3.73, + "y": -14.74, + "curve": [ 0.216, -3.73, 0.384, -0.17, 0.216, -14.74, 0.402, -12.51 ] + }, + { + "time": 0.5, + "x": 1.63, + "y": -9.51, + "curve": [ 0.632, 3.69, 0.935, 7.41, 0.585, -6.91, 0.909, 10.86 ] + }, + { + "time": 1.1, + "x": 7.45, + "y": 10.99, + "curve": [ 1.18, 7.46, 1.265, 2.86, 1.193, 11.05, 1.294, 3.38 ] + }, + { "time": 1.3333 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { + "mix": 0, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2 } + ], + "front-leg-ik": [ + { + "mix": 0, + "bendPositive": false, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0 } + ], + "rear-leg-ik": [ + { "mix": 0, "bendPositive": false } + ] + }, + "events": [ + { "time": 1.2, "name": "footstep" } + ] + }, + "portal": { + "slots": { + "clipping": { + "attachment": [ + { "name": "clipping" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0.9, "name": "mouth-grind" }, + { "time": 2.2667, "name": "mouth-smile" } + ] + }, + "portal-bg": { + "attachment": [ + { "name": "portal-bg" }, + { "time": 3 } + ] + }, + "portal-flare1": { + "attachment": [ + { "time": 1.1, "name": "portal-flare1" }, + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667, "name": "portal-flare3" }, + { "time": 1.2, "name": "portal-flare1" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare2": { + "attachment": [ + { "time": 1.1, "name": "portal-flare2" }, + { "time": 1.1333, "name": "portal-flare3" }, + { "time": 1.1667, "name": "portal-flare1" }, + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667 } + ] + }, + "portal-flare3": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare4": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare2" }, + { "time": 1.3333 } + ] + }, + "portal-flare5": { + "attachment": [ + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare6": { + "attachment": [ + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3333 } + ] + }, + "portal-flare7": { + "attachment": [ + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667 } + ] + }, + "portal-flare8": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare9": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3 } + ] + }, + "portal-flare10": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3 } + ] + }, + "portal-shade": { + "attachment": [ + { "name": "portal-shade" }, + { "time": 3 } + ] + }, + "portal-streaks1": { + "attachment": [ + { "name": "portal-streaks1" }, + { "time": 3 } + ] + }, + "portal-streaks2": { + "attachment": [ + { "name": "portal-streaks2" }, + { "time": 3 } + ] + } + }, + "bones": { + "portal-root": { + "translate": [ + { + "x": -458.35, + "y": 105.19, + "curve": [ 0.333, -458.22, 0.669, -457.86, 0.934, 105.19, 0.671, 105.19 ] + }, + { + "time": 1, + "x": -456.02, + "y": 105.19, + "curve": [ 1.339, -454.14, 2.208, -447.28, 1.35, 105.19, 2.05, 105.19 ] + }, + { + "time": 2.4, + "x": -439.12, + "y": 105.19, + "curve": [ 2.463, -436.44, 2.502, -432.92, 2.487, 105.19, 2.512, 105.09 ] + }, + { + "time": 2.6, + "x": -432.58, + "y": 105.09, + "curve": [ 2.784, -431.94, 2.978, -446.6, 2.772, 105.09, 2.933, 105.19 ] + }, + { "time": 3.0333, "x": -457.42, "y": 105.19 } + ], + "scale": [ + { + "x": 0.003, + "y": 0.006, + "curve": [ 0.329, 0.044, 0.347, 0.117, 0.329, 0.097, 0.37, 0.249 ] + }, + { + "time": 0.4, + "x": 0.175, + "y": 0.387, + "curve": [ 0.63, 0.619, 0.663, 0.723, 0.609, 1.338, 0.645, 1.524 ] + }, + { + "time": 0.7333, + "x": 0.724, + "y": 1.52, + "curve": [ 0.798, 0.725, 0.907, 0.647, 0.797, 1.517, 0.895, 1.424 ] + }, + { + "time": 1, + "x": 0.645, + "y": 1.426, + "curve": [ 1.095, 0.643, 1.139, 0.688, 1.089, 1.428, 1.115, 1.513 ] + }, + { + "time": 1.2333, + "x": 0.685, + "y": 1.516, + "curve": [ 1.325, 0.683, 1.508, 0.636, 1.343, 1.518, 1.467, 1.4 ] + }, + { + "time": 1.6, + "x": 0.634, + "y": 1.401, + "curve": [ 1.728, 0.631, 1.946, 0.687, 1.722, 1.402, 1.924, 1.522 ] + }, + { + "time": 2.0667, + "x": 0.688, + "y": 1.522, + "curve": [ 2.189, 0.69, 2.289, 0.649, 2.142, 1.522, 2.265, 1.417 ] + }, + { + "time": 2.4, + "x": 0.65, + "y": 1.426, + "curve": [ 2.494, 0.651, 2.504, 0.766, 2.508, 1.434, 2.543, 1.566 ] + }, + { + "time": 2.6, + "x": 0.766, + "y": 1.568, + "curve": [ 2.73, 0.765, 3.006, 0.098, 2.767, 1.564, 2.997, 0.1 ] + }, + { "time": 3.0333, "x": 0.007, "y": 0.015 } + ] + }, + "portal-streaks1": { + "rotate": [ + {}, + { "time": 3.1667, "value": 1200 } + ], + "translate": [ + { + "x": 15.15, + "curve": [ 0.162, 15.15, 0.432, 12.6, 0.162, 0, 0.432, -3.86 ] + }, + { + "time": 0.6667, + "x": 10.9, + "y": -6.44, + "curve": [ 0.794, 9.93, 0.912, 9.21, 0.794, -7.71, 0.912, -8.66 ] + }, + { + "time": 1, + "x": 9.21, + "y": -8.66, + "curve": [ 1.083, 9.21, 1.25, 21.53, 1.083, -8.66, 1.265, -4.9 ] + }, + { + "time": 1.3333, + "x": 21.53, + "y": -3.19, + "curve": [ 1.5, 21.53, 1.939, 12.3, 1.446, -0.37, 1.9, 6.26 ] + }, + { + "time": 2.0667, + "x": 11.26, + "y": 6.26, + "curve": [ 2.239, 9.85, 2.389, 9.68, 2.208, 6.26, 2.523, 0.51 ] + }, + { + "time": 2.5667, + "x": 9.39, + "y": -0.8, + "curve": [ 2.657, 9.24, 2.842, 9.21, 2.646, -3.2, 2.842, -8.91 ] + }, + { "time": 2.9333, "x": 9.21, "y": -8.91 } + ], + "scale": [ + { + "curve": [ 0.167, 1, 0.5, 1.053, 0.167, 1, 0.5, 1.053 ] + }, + { + "time": 0.6667, + "x": 1.053, + "y": 1.053, + "curve": [ 0.833, 1.053, 1.167, 0.986, 0.833, 1.053, 1.167, 0.986 ] + }, + { + "time": 1.3333, + "x": 0.986, + "y": 0.986, + "curve": [ 1.5, 0.986, 1.833, 1.053, 1.5, 0.986, 1.833, 1.053 ] + }, + { "time": 2, "x": 1.053, "y": 1.053 } + ] + }, + "portal-streaks2": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ], + "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, + "curve": [ 0.229, 0.909, 0.501, 0.755, 0.242, 0.892, 0.502, 0.768 ] + }, + { + "time": 0.8667, + "x": 0.745, + "y": 0.745, + "curve": [ 1.282, 0.733, 2.021, 0.699, 1.27, 0.719, 2.071, 0.709 ] + }, + { + "time": 2.2, + "x": 0.7, + "y": 0.704, + "curve": [ 2.315, 0.7, 2.421, 0.794, 2.311, 0.701, 2.485, 0.797 ] + }, + { + "time": 2.5667, + "x": 0.794, + "y": 0.794, + "curve": [ 2.734, 0.794, 2.99, 0.323, 2.714, 0.789, 3.019, 0.341 ] + }, + { "time": 3.1667, "x": 0, "y": 0 } + ] + }, + "portal-shade": { + "translate": [ + { "x": -29.68 } + ], + "scale": [ + { "x": 0.714, "y": 0.714 } + ] + }, + "portal": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ] + }, + "clipping": { + "translate": [ + { "x": -476.55, "y": 2.27 } + ], + "scale": [ + { "x": 0.983, "y": 1.197 } + ] + }, + "hip": { + "rotate": [ + { + "time": 1.0667, + "value": 22.74, + "curve": [ 1.163, 18.84, 1.77, 8.77 ] + }, + { + "time": 1.9, + "value": 7.82, + "curve": [ 2.271, 5.1, 2.89, 0 ] + }, + { "time": 3.1667 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -694.16, + "y": 183.28, + "curve": [ 1.091, -602.08, 1.138, -427.59, 1.115, 185.6, 1.171, 133.18 ] + }, + { + "time": 1.2333, + "x": -316.97, + "y": 55.29, + "curve": [ 1.317, -220.27, 1.512, -123.21, 1.271, 8.68, 1.461, -83.18 ] + }, + { + "time": 1.6, + "x": -95.53, + "y": -112.23, + "curve": [ 1.718, -58.25, 2.037, -22.54, 1.858, -166.17, 2.109, -31.4 ] + }, + { + "time": 2.1667, + "x": -14.82, + "y": -31.12, + "curve": [ 2.294, -7.28, 2.442, -7.2, 2.274, -30.6, 2.393, -36.76 ] + }, + { + "time": 2.6, + "x": -7.2, + "y": -36.96, + "curve": [ 2.854, -7.2, 3.071, -11.87, 2.786, -36.27, 3.082, -22.98 ] + }, + { "time": 3.1667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "time": 1.0667, "value": 41.6, "curve": "stepped" }, + { + "time": 1.2333, + "value": 41.6, + "curve": [ 1.258, 41.6, 1.379, 35.46 ] + }, + { + "time": 1.4, + "value": 30.09, + "curve": [ 1.412, 27.04, 1.433, 10.65 ] + }, + { "time": 1.4333, "value": -0.28 }, + { "time": 1.6, "value": 2.44 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -591.13, + "y": 438.46, + "curve": [ 1.076, -539.77, 1.206, -268.1, 1.117, 418.44, 1.21, 333.18 ] + }, + { + "time": 1.2333, + "x": -225.28, + "y": 304.53, + "curve": [ 1.265, -175.22, 1.393, -74.21, 1.296, 226.52, 1.401, 49.61 ] + }, + { + "time": 1.4333, + "x": -52.32, + "y": 0.2, + "curve": [ 1.454, -40.85, 1.616, 40.87, 1.466, 0.17, 1.614, 0.04 ] + }, + { "time": 1.6667, "x": 45.87, "y": 0.01 }, + { "time": 1.9333, "x": 48.87 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "time": 1.0667, + "value": 32.08, + "curve": [ 1.108, 32.08, 1.192, 35.16 ] + }, + { + "time": 1.2333, + "value": 35.16, + "curve": [ 1.258, 35.16, 1.317, 2.23 ] + }, + { + "time": 1.3333, + "value": -4.74, + "curve": [ 1.351, -12.14, 1.429, -34.96 ] + }, + { + "time": 1.6, + "value": -34.77, + "curve": [ 1.765, -34.58, 1.897, -17.25 ] + }, + { "time": 1.9333 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -533.93, + "y": 363.75, + "curve": [ 1.074, -480.85, 1.18, -261.31, 1.094, 362.3, 1.195, 267.77 ] + }, + { + "time": 1.2333, + "x": -201.23, + "y": 199.93, + "curve": [ 1.269, -161.38, 1.294, -140.32, 1.274, 126.67, 1.308, 77.12 ] + }, + { + "time": 1.3333, + "x": -124.08, + "y": 0.2, + "curve": [ 1.426, -85.6, 1.633, -69.06, 1.45, 0.48, 1.633, 0 ] + }, + { "time": 1.7333, "x": -69.06 } + ] + }, + "torso": { + "rotate": [ + { + "time": 1.0667, + "value": 27.02, + "curve": [ 1.187, 26.86, 1.291, 7.81 ] + }, + { + "time": 1.3333, + "value": -2.62, + "curve": [ 1.402, -19.72, 1.429, -48.64 ] + }, + { + "time": 1.4667, + "value": -56.31, + "curve": [ 1.509, -64.87, 1.62, -77.14 ] + }, + { + "time": 1.7333, + "value": -77.34, + "curve": [ 1.837, -76.89, 1.895, -71.32 ] + }, + { + "time": 2, + "value": -57.52, + "curve": [ 2.104, -43.83, 2.189, -28.59 ] + }, + { + "time": 2.3, + "value": -29.03, + "curve": [ 2.413, -29.48, 2.513, -36.79 ] + }, + { + "time": 2.6667, + "value": -36.79, + "curve": [ 2.814, -36.95, 2.947, -22.88 ] + }, + { "time": 3.1667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "time": 1.0667, + "value": -3.57, + "curve": [ 1.146, -3.66, 1.15, -13.5 ] + }, + { + "time": 1.2333, + "value": -13.5, + "curve": [ 1.428, -13.5, 1.443, 11.58 ] + }, + { + "time": 1.5667, + "value": 11.42, + "curve": [ 1.658, 11.3, 1.775, 3.78 ] + }, + { + "time": 1.8667, + "value": 3.78, + "curve": [ 1.92, 3.78, 2.036, 8.01 ] + }, + { + "time": 2.1, + "value": 7.93, + "curve": [ 2.266, 7.72, 2.42, 3.86 ] + }, + { + "time": 2.5333, + "value": 3.86, + "curve": [ 2.783, 3.86, 3.004, 3.78 ] + }, + { "time": 3.1667, "value": 3.78 } + ] + }, + "head": { + "rotate": [ + { + "time": 1.0667, + "value": 16.4, + "curve": [ 1.133, 9.9, 1.207, 1.87 ] + }, + { + "time": 1.3333, + "value": 1.67, + "curve": [ 1.46, 1.56, 1.547, 47.54 ] + }, + { + "time": 1.7333, + "value": 47.55, + "curve": [ 1.897, 47.56, 2.042, 5.68 ] + }, + { + "time": 2.0667, + "value": 0.86, + "curve": [ 2.074, -0.61, 2.086, -2.81 ] + }, + { + "time": 2.1, + "value": -5.31, + "curve": [ 2.145, -13.07, 2.216, -23.65 ] + }, + { + "time": 2.2667, + "value": -23.71, + "curve": [ 2.334, -23.79, 2.426, -13.43 ] + }, + { + "time": 2.4667, + "value": -9.18, + "curve": [ 2.498, -5.91, 2.604, 2.53 ] + }, + { + "time": 2.6667, + "value": 2.52, + "curve": [ 2.738, 2.24, 2.85, -8.76 ] + }, + { + "time": 2.9333, + "value": -8.67, + "curve": [ 3.036, -8.55, 3.09, -7.09 ] + }, + { "time": 3.1667, "value": -6.75 } + ], + "scale": [ + { + "time": 1.3333, + "curve": [ 1.392, 1, 1.526, 1, 1.392, 1, 1.508, 1.043 ] + }, + { + "time": 1.5667, + "x": 0.992, + "y": 1.043, + "curve": [ 1.598, 0.985, 1.676, 0.955, 1.584, 1.043, 1.672, 1.04 ] + }, + { + "time": 1.7333, + "x": 0.954, + "y": 1.029, + "curve": [ 1.843, 0.954, 1.933, 1, 1.825, 1.013, 1.933, 1 ] + }, + { "time": 2 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "time": 0.9, + "value": 39.24, + "curve": [ 0.968, 39.93, 1.267, 85.31 ] + }, + { + "time": 1.4667, + "value": 112.27, + "curve": [ 1.555, 124.24, 1.576, 126.44 ] + }, + { + "time": 1.6333, + "value": 126.44, + "curve": [ 1.782, 126.44, 1.992, 94.55 ] + }, + { + "time": 2.1, + "value": 79.96, + "curve": [ 2.216, 64.26, 2.407, 34.36 ] + }, + { + "time": 2.5667, + "value": 33.38, + "curve": [ 2.815, 31.87, 3.1, 39.2 ] + }, + { "time": 3.1667, "value": 39.2 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "time": 1.0667, + "value": 56.07, + "curve": [ 1.138, 59.21, 1.192, 59.65 ] + }, + { + "time": 1.2333, + "value": 59.46, + "curve": [ 1.295, 59.17, 1.45, 22.54 ] + }, + { "time": 1.4667, "value": -0.84 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "time": 1.0667, + "value": 118.03, + "curve": [ 1.075, 93.64, 1.358, -34.03 ] + }, + { + "time": 1.6667, + "value": -33.94, + "curve": [ 1.808, -33.89, 1.879, -25 ] + }, + { + "time": 1.9667, + "value": -25.19, + "curve": [ 2.09, -25.46, 2.312, -34.58 ] + }, + { + "time": 2.3667, + "value": -38.36, + "curve": [ 2.465, -45.18, 2.557, -60.1 ] + }, + { + "time": 2.8333, + "value": -61.1, + "curve": [ 2.843, -61.06, 3.16, -60.87 ] + }, + { "time": 3.1667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 0.66, + "curve": [ 1.108, 0.66, 1.221, 44.95 ] + }, + { + "time": 1.2333, + "value": 49.25, + "curve": [ 1.263, 59.42, 1.342, 68.06 ] + }, + { + "time": 1.3667, + "value": 68.34, + "curve": [ 1.409, 68.8, 1.476, 4.9 ] + }, + { + "time": 1.5, + "value": -2.05, + "curve": [ 1.529, -10.3, 1.695, -15.95 ] + }, + { + "time": 1.7333, + "value": -17.38, + "curve": [ 1.807, -20.1, 1.878, -21.19 ] + }, + { + "time": 1.9333, + "value": -21.08, + "curve": [ 2.073, -20.8, 2.146, -7.63 ] + }, + { + "time": 2.1667, + "value": -3.64, + "curve": [ 2.186, 0.12, 2.275, 15.28 ] + }, + { + "time": 2.3333, + "value": 21.78, + "curve": [ 2.392, 28.31, 2.575, 37.66 ] + }, + { + "time": 2.7, + "value": 39.43, + "curve": [ 2.947, 42.93, 3.02, 42.46 ] + }, + { "time": 3.1667, "value": 42.46 } + ] + }, + "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 } + ] + }, + "front-foot-tip": { + "rotate": [ + { "time": 1.0667, "value": 42.55, "curve": "stepped" }, + { "time": 1.1333, "value": 42.55 }, + { "time": 1.2333, "value": 17.71 }, + { "time": 1.3667, "value": 3.63 }, + { "time": 1.4333 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 108.71, + "curve": [ 1.082, 108.29, 1.437, 50.73 ] + }, + { + "time": 1.5667, + "value": 24.87, + "curve": [ 1.62, 14.2, 1.66, -11.74 ] + }, + { + "time": 1.7333, + "value": -11.74, + "curve": [ 1.961, -11.73, 2.172, 1.66 ] + }, + { + "time": 2.2667, + "value": 7.88, + "curve": [ 2.331, 12.13, 2.439, 18.65 ] + }, + { + "time": 2.5333, + "value": 18.72, + "curve": [ 2.788, 18.91, 3.145, -0.3 ] + }, + { "time": 3.1667 } + ] + }, + "front-fist": { + "rotate": [ + { + "time": 1.1, + "value": 6.32, + "curve": [ 1.11, 3.31, 1.153, -5.07 ] + }, + { + "time": 1.2333, + "value": -5.13, + "curve": [ 1.311, -5.19, 1.364, 34.65 ] + }, + { + "time": 1.4667, + "value": 34.53, + "curve": [ 1.574, 34.41, 1.547, -55.78 ] + }, + { + "time": 1.8667, + "value": -54.7, + "curve": [ 1.947, -54.7, 2.03, -53.94 ] + }, + { + "time": 2.1333, + "value": -42.44, + "curve": [ 2.215, -33.42, 2.358, -4.43 ] + }, + { + "time": 2.4, + "value": 0.03, + "curve": [ 2.444, 4.66, 2.536, 8.2 ] + }, + { + "time": 2.6333, + "value": 8.2, + "curve": [ 2.733, 8.19, 2.804, -0.67 ] + }, + { + "time": 2.9, + "value": -0.82, + "curve": [ 3.127, -1.16, 3.093, 0 ] + }, + { "time": 3.1667 } + ] + }, + "gun": { + "rotate": [ + { + "time": 1.2667, + "curve": [ 1.35, 0, 1.549, 7.49 ] + }, + { + "time": 1.6, + "value": 9.5, + "curve": [ 1.663, 12.02, 1.846, 19.58 ] + }, + { + "time": 1.9333, + "value": 19.43, + "curve": [ 1.985, 19.4, 2.057, 2.98 ] + }, + { + "time": 2.2, + "value": 2.95, + "curve": [ 2.304, 3.55, 2.458, 10.8 ] + }, + { + "time": 2.5, + "value": 10.8, + "curve": [ 2.642, 10.8, 2.873, -2.54 ] + }, + { + "time": 2.9333, + "value": -2.55, + "curve": [ 3.09, -2.57, 3.08, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair2": { + "rotate": [ + { + "time": 1.0667, + "value": 26.19, + "curve": [ 1.158, 26.19, 1.368, 26 ] + }, + { + "time": 1.4333, + "value": 24.43, + "curve": [ 1.534, 22.03, 2, -29.14 ] + }, + { + "time": 2.2, + "value": -29.14, + "curve": [ 2.292, -29.14, 2.475, 6.71 ] + }, + { + "time": 2.5667, + "value": 6.71, + "curve": [ 2.675, 6.71, 2.814, -5.06 ] + }, + { + "time": 2.9, + "value": -5.06, + "curve": [ 2.973, -5.06, 3.123, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair4": { + "rotate": [ + { + "time": 1.0667, + "value": 5.21, + "curve": [ 1.108, 5.21, 1.192, 26.19 ] + }, + { + "time": 1.2333, + "value": 26.19, + "curve": [ 1.317, 26.19, 1.483, 10.63 ] + }, + { + "time": 1.5667, + "value": 10.63, + "curve": [ 1.627, 10.63, 1.642, 17.91 ] + }, + { + "time": 1.7, + "value": 17.94, + "curve": [ 1.761, 17.97, 1.774, 8.22 ] + }, + { + "time": 1.8, + "value": 3.33, + "curve": [ 1.839, -4.21, 1.95, -22.67 ] + }, + { + "time": 2, + "value": -22.67, + "curve": [ 2.025, -22.67, 2.123, -21.86 ] + }, + { + "time": 2.1667, + "value": -18.71, + "curve": [ 2.228, -14.31, 2.294, -0.3 ] + }, + { + "time": 2.3667, + "value": 6.36, + "curve": [ 2.433, 12.45, 2.494, 19.21 ] + }, + { + "time": 2.6, + "value": 19.21, + "curve": [ 2.729, 19.21, 2.854, 6.75 ] + }, + { + "time": 2.9333, + "value": 4.62, + "curve": [ 3.09, 0.45, 3.062, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair3": { + "rotate": [ + { + "time": 1.4333, + "curve": [ 1.45, 0, 1.452, 11.29 ] + }, + { + "time": 1.5, + "value": 11.21, + "curve": [ 1.596, 11.06, 1.573, -14.17 ] + }, + { + "time": 1.7333, + "value": -20.4, + "curve": [ 1.851, -24.98, 1.943, -28.45 ] + }, + { + "time": 2.2, + "value": -28.75, + "curve": [ 2.317, -28.75, 2.55, 7.04 ] + }, + { + "time": 2.6667, + "value": 7.04, + "curve": [ 2.792, 7.04, 2.885, -5.19 ] + }, + { + "time": 2.9667, + "value": -5.19, + "curve": [ 3.037, -5.19, 3.096, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair1": { + "rotate": [ + { + "time": 1.2333, + "curve": [ 1.283, 0, 1.349, 3.99 ] + }, + { + "time": 1.4333, + "value": 6.58, + "curve": [ 1.497, 8.54, 1.683, 9.35 ] + }, + { + "time": 1.7667, + "value": 9.35, + "curve": [ 1.825, 9.35, 1.945, -8.71 ] + }, + { + "time": 2, + "value": -11.15, + "curve": [ 2.058, -13.71, 2.2, -14.97 ] + }, + { + "time": 2.2667, + "value": -14.97, + "curve": [ 2.367, -14.97, 2.567, 18.77 ] + }, + { + "time": 2.6667, + "value": 18.77, + "curve": [ 2.733, 18.77, 2.817, 8.29 ] + }, + { + "time": 2.8667, + "value": 6.51, + "curve": [ 2.988, 2.17, 3.058, 0 ] + }, + { "time": 3.1667 } + ] + }, + "flare1": { + "rotate": [ + { "time": 1.1, "value": 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, + "curve": [ 1.119, 0.763, 1.16, 1.162, 1.117, 0.805, 1.15, 0.605 ] + }, + { + "time": 1.1667, + "x": 1.279, + "y": 0.605, + "curve": [ 1.177, 1.47, 1.192, 2.151, 1.175, 0.605, 1.192, 0.911 ] + }, + { + "time": 1.2, + "x": 2.151, + "y": 0.911, + "curve": [ 1.208, 2.151, 1.231, 1.668, 1.208, 0.911, 1.227, 0.844 ] + }, + { + "time": 1.2333, + "x": 1.608, + "y": 0.805, + "curve": [ 1.249, 1.205, 1.283, 0.547, 1.254, 0.685, 1.283, 0.416 ] + }, + { "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, "value": 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, "value": 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, "value": -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, "value": -5.36 }, + { "time": 1.2667, "value": -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, "value": 5.98 }, + { "time": 1.1333, "value": 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, "value": -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, "value": 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, "value": 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 } + ] + }, + "torso2": { + "rotate": [ + { + "time": 1, + "curve": [ 1.117, 0, 1.255, 24.94 ] + }, + { + "time": 1.4, + "value": 24.94, + "curve": [ 1.477, 24.94, 1.59, -17.62 ] + }, + { + "time": 1.6333, + "value": -19.48, + "curve": [ 1.717, -23.1, 1.784, -26.12 ] + }, + { + "time": 1.9333, + "value": -26.14, + "curve": [ 2.067, -26.15, 2.158, 4.3 ] + }, + { + "time": 2.3, + "value": 4.22, + "curve": [ 2.45, 4.13, 2.579, -1.76 ] + }, + { + "time": 2.7333, + "value": -1.8, + "curve": [ 2.816, -1.82, 2.857, -2.94 ] + }, + { + "time": 2.9333, + "value": -2.99, + "curve": [ 3.056, -3.08, 3.09, 0 ] + }, + { "time": 3.1667 } + ] + }, + "torso3": { + "rotate": [ + { + "time": 1.3, + "curve": [ 1.352, 0, 1.408, 6.47 ] + }, + { + "time": 1.4667, + "value": 6.43, + "curve": [ 1.55, 6.39, 1.723, -5.05 ] + }, + { + "time": 1.7333, + "value": -5.53, + "curve": [ 1.782, -7.72, 1.843, -16.94 ] + }, + { + "time": 1.9667, + "value": -16.86, + "curve": [ 2.111, -16.78, 2.259, -3.97 ] + }, + { + "time": 2.4, + "value": -2.43, + "curve": [ 2.525, -1.12, 2.639, -0.5 ] + }, + { + "time": 2.7333, + "value": -0.49, + "curve": [ 2.931, -0.47, 2.999, -2.15 ] + }, + { "time": 3.1667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "time": 1.2333, + "curve": [ 1.25, 0, 1.474, 6.89, 1.25, 0, 1.496, 0.98 ] + }, + { + "time": 1.6667, + "x": 11.99, + "y": -6.42, + "curve": [ 1.743, 14.01, 1.86, 14.33, 1.785, -11.55, 1.86, -27.1 ] + }, + { + "time": 1.9667, + "x": 13.91, + "y": -26.88, + "curve": [ 2.074, 13.49, 2.244, 8.13, 2.074, -26.65, 2.215, -21.78 ] + }, + { + "time": 2.3, + "x": 6.07, + "y": -16.64, + "curve": [ 2.416, 1.84, 2.497, -1.41, 2.417, -9.57, 2.526, -1.72 ] + }, + { + "time": 2.5667, + "x": -3.78, + "y": -1.71, + "curve": [ 2.661, -6.98, 2.76, -8.76, 2.692, -1.68, 2.821, -15.75 ] + }, + { + "time": 2.9, + "x": -8.32, + "y": -16.7, + "curve": [ 2.962, -8.12, 3.082, -0.04, 2.958, -17.39, 3.089, 0 ] + }, + { "time": 3.1667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "time": 1.3333, + "curve": [ 1.488, 0, 1.717, 0.21, 1.488, 0, 1.688, -30.29 ] + }, + { + "time": 1.9, + "x": 0.83, + "y": -30.29, + "curve": [ 2.078, 1.43, 2.274, 2.88, 2.071, -30.29, 2.289, 4.48 ] + }, + { + "time": 2.4333, + "x": 2.89, + "y": 4.59, + "curve": [ 2.604, 2.89, 2.677, -0.68, 2.57, 4.7, 2.694, -2.43 ] + }, + { + "time": 2.7667, + "x": -0.67, + "y": -2.47, + "curve": [ 2.866, -0.67, 2.986, -0.07, 2.882, -2.47, 3.036, -0.06 ] + }, + { "time": 3.1667 } + ] + } + }, + "ik": { + "rear-leg-ik": [ + { "time": 3.1667, "softness": 10, "bendPositive": false } + ] + } + }, + "run": { + "slots": { + "mouth": { + "attachment": [ + { "name": "mouth-grind" } + ] + } + }, + "bones": { + "front-thigh": { + "translate": [ + { + "x": -5.14, + "y": 11.13, + "curve": [ 0.033, -7.77, 0.112, -9.03, 0.034, 11.13, 0.108, 9.74 ] + }, + { + "time": 0.1667, + "x": -9.03, + "y": 7.99, + "curve": [ 0.23, -9.05, 0.314, -1.34, 0.236, 5.93, 0.28, 3.22 ] + }, + { + "time": 0.3333, + "x": 0.41, + "y": 3.19, + "curve": [ 0.352, 2.09, 0.449, 11.16, 0.384, 3.16, 0.449, 4.98 ] + }, + { + "time": 0.5, + "x": 11.17, + "y": 6.76, + "curve": [ 0.571, 10.79, 0.621, -1.83, 0.542, 8.21, 0.625, 11.13 ] + }, + { "time": 0.6667, "x": -5.14, "y": 11.13 } + ] + }, + "torso": { + "rotate": [ + { + "value": -37.66, + "curve": [ 0.034, -37.14, 0.107, -36.21 ] + }, + { + "time": 0.1333, + "value": -36.21, + "curve": [ 0.158, -36.21, 0.209, -38.8 ] + }, + { + "time": 0.2333, + "value": -38.79, + "curve": [ 0.259, -38.78, 0.313, -38.03 ] + }, + { + "time": 0.3333, + "value": -37.66, + "curve": [ 0.357, -37.21, 0.4, -36.21 ] + }, + { + "time": 0.4333, + "value": -36.21, + "curve": [ 0.458, -36.21, 0.539, -38.8 ] + }, + { + "time": 0.5667, + "value": -38.8, + "curve": [ 0.592, -38.8, 0.645, -38 ] + }, + { "time": 0.6667, "value": -37.66 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.41, + "y": 1.55, + "curve": [ 0.013, -15.67, 0.183, -8.55, 0.03, 2.39, 0.183, 6.17 ] + }, + { + "time": 0.2333, + "x": -8.55, + "y": 6.17, + "curve": [ 0.308, -8.55, 0.492, -19.75, 0.308, 6.17, 0.492, 0.61 ] + }, + { + "time": 0.5667, + "x": -19.75, + "y": 0.61, + "curve": [ 0.592, -19.75, 0.641, -18.06, 0.592, 0.61, 0.632, 0.78 ] + }, + { "time": 0.6667, "x": -16.41, "y": 1.55 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -39.03, + "curve": [ 0.051, -0.1, 0.145, 88.36 ] + }, + { + "time": 0.2333, + "value": 88.36, + "curve": [ 0.28, 88.76, 0.324, 59.52 ] + }, + { + "time": 0.3333, + "value": 51.13, + "curve": [ 0.358, 30.2, 0.445, -74.91 ] + }, + { + "time": 0.5667, + "value": -75.82, + "curve": [ 0.599, -76.06, 0.642, -55.72 ] + }, + { "time": 0.6667, "value": -39.03 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.052, 11.42, 0.089, 0.13 ] + }, + { + "time": 0.1333, + "value": 0.15, + "curve": [ 0.186, 0.17, 0.221, 26.29 ] + }, + { + "time": 0.2333, + "value": 32.37, + "curve": [ 0.247, 39.19, 0.286, 61.45 ] + }, + { + "time": 0.3333, + "value": 61.58, + "curve": [ 0.371, 61.69, 0.42, 55.79 ] + }, + { "time": 0.4667, "value": 49.68 }, + { "time": 0.6667, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.014, -38.8, 0.036, -43.27 ] + }, + { + "time": 0.0667, + "value": -43.37, + "curve": [ 0.102, -43.49, 0.182, -28.46 ] + }, + { + "time": 0.2, + "value": -23.04, + "curve": [ 0.23, -13.87, 0.264, 3.86 ] + }, + { + "time": 0.3333, + "value": 3.7, + "curve": [ 0.38, 3.64, 0.535, -16.22 ] + }, + { "time": 0.5667, "value": -21.29 }, + { "time": 0.6667, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.028, 23.74, 0.128, -79.86 ] + }, + { + "time": 0.2333, + "value": -79.87, + "curve": [ 0.38, -79.88, 0.403, 63.25 ] + }, + { + "time": 0.5667, + "value": 64.13, + "curve": [ 0.607, 64.35, 0.644, 53.1 ] + }, + { "time": 0.6667, "value": 40.5 } + ], + "translate": [ + { + "x": -3.79, + "y": -0.77, + "curve": [ 0.044, -4.58, 0.169, -5.48, 0.044, 0.93, 0.169, 2.85 ] + }, + { + "time": 0.2333, + "x": -5.48, + "y": 2.85, + "curve": [ 0.346, -5.48, 0.475, -2.68, 0.346, 2.85, 0.475, -3.13 ] + }, + { + "time": 0.5667, + "x": -2.68, + "y": -3.13, + "curve": [ 0.611, -2.68, 0.642, -3.34, 0.611, -3.13, 0.642, -1.73 ] + }, + { "time": 0.6667, "x": -3.79, "y": -0.77 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": 28.28 }, + { + "time": 0.2333, + "value": -11.12, + "curve": [ 0.252, -14.12, 0.297, -19.37 ] + }, + { + "time": 0.3333, + "value": -19.38, + "curve": [ 0.435, -19.41, 0.522, 38.96 ] + }, + { + "time": 0.5667, + "value": 38.87, + "curve": [ 0.619, 38.76, 0.644, 32.01 ] + }, + { "time": 0.6667, "value": 28.28 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.024, 11.4, 0.075, 9.74 ] + }, + { + "time": 0.1, + "value": 9.74, + "curve": [ 0.125, 9.74, 0.208, 13.36 ] + }, + { + "time": 0.2333, + "value": 13.36, + "curve": [ 0.258, 13.36, 0.321, 12.2 ] + }, + { + "time": 0.3333, + "value": 11.88, + "curve": [ 0.365, 11.06, 0.408, 9.72 ] + }, + { + "time": 0.4333, + "value": 9.72, + "curve": [ 0.458, 9.72, 0.542, 13.36 ] + }, + { + "time": 0.5667, + "value": 13.36, + "curve": [ 0.592, 13.36, 0.636, 12.48 ] + }, + { "time": 0.6667, "value": 11.88 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.02, 11.99, 0.039, 8.94 ] + }, + { + "time": 0.0667, + "value": 8.93, + "curve": [ 0.122, 8.9, 0.232, 15.8 ] + }, + { + "time": 0.2667, + "value": 15.81, + "curve": [ 0.325, 15.82, 0.357, 8.95 ] + }, + { + "time": 0.4, + "value": 8.93, + "curve": [ 0.444, 8.91, 0.568, 15.8 ] + }, + { + "time": 0.6, + "value": 15.77, + "curve": [ 0.632, 15.74, 0.649, 14.05 ] + }, + { "time": 0.6667, "value": 13.14 } + ], + "scale": [ + { + "curve": [ 0.014, 0.996, 0.068, 0.991, 0.027, 1.005, 0.083, 1.012 ] + }, + { + "time": 0.1, + "x": 0.991, + "y": 1.012, + "curve": [ 0.128, 0.991, 0.205, 1.018, 0.128, 1.012, 0.197, 0.988 ] + }, + { + "time": 0.2333, + "x": 1.018, + "y": 0.988, + "curve": [ 0.272, 1.018, 0.305, 1.008, 0.262, 0.988, 0.311, 0.995 ] + }, + { + "time": 0.3333, + "curve": [ 0.351, 0.995, 0.417, 0.987, 0.359, 1.006, 0.417, 1.013 ] + }, + { + "time": 0.4333, + "x": 0.987, + "y": 1.013, + "curve": [ 0.467, 0.987, 0.533, 1.02, 0.467, 1.013, 0.533, 0.989 ] + }, + { + "time": 0.5667, + "x": 1.02, + "y": 0.989, + "curve": [ 0.592, 1.02, 0.652, 1.004, 0.592, 0.989, 0.644, 0.996 ] + }, + { "time": 0.6667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.087, 20.25 ] + }, + { + "time": 0.1333, + "value": 20.19, + "curve": [ 0.168, 20.32, 0.254, -8.82 ] + }, + { + "time": 0.2667, + "value": -11.88, + "curve": [ 0.291, -17.91, 0.344, -24.11 ] + }, + { + "time": 0.4, + "value": -23.88, + "curve": [ 0.448, -23.69, 0.533, -15.47 ] + }, + { "time": 0.5667, "value": -8.69 }, + { "time": 0.6667, "value": 12.36 } + ] + }, + "hip": { + "rotate": [ + { "value": -8.24 } + ], + "translate": [ + { + "x": -3.6, + "y": -34.1, + "curve": [ 0.042, -3.84, 0.118, 7.62, 0.042, -33.74, 0.112, 20.55 ] + }, + { + "time": 0.1667, + "x": 7.61, + "y": 20.36, + "curve": [ 0.194, 7.6, 0.21, 5.06, 0.204, 20.65, 0.217, -8.69 ] + }, + { + "time": 0.2333, + "x": 1.68, + "y": -18.48, + "curve": [ 0.279, -4.99, 0.297, -5.64, 0.254, -31.08, 0.292, -34.55 ] + }, + { + "time": 0.3333, + "x": -5.76, + "y": -35, + "curve": [ 0.379, -5.9, 0.451, 6.8, 0.384, -35.56, 0.428, 17.6 ] + }, + { + "time": 0.5, + "x": 6.61, + "y": 17.01, + "curve": [ 0.536, 6.47, 0.545, 3.56, 0.533, 16.75, 0.548, -8.71 ] + }, + { + "time": 0.5667, + "x": 0.35, + "y": -18.81, + "curve": [ 0.597, -4.07, 0.642, -3.45, 0.584, -28.58, 0.642, -34.32 ] + }, + { "time": 0.6667, "x": -3.6, "y": -34.1 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -62.54, + "curve": [ 0.015, -74.19, 0.056, -103.19 ] + }, + { + "time": 0.0667, + "value": -111.08, + "curve": [ 0.092, -129.44, 0.189, -146.55 ] + }, + { + "time": 0.2333, + "value": -146.32, + "curve": [ 0.285, -146.06, 0.32, -125.1 ] + }, + { "time": 0.3333, "value": -117.24 }, + { + "time": 0.5, + "value": -35.07, + "curve": [ 0.522, -28.64, 0.546, -24.84 ] + }, + { + "time": 0.5667, + "value": -24.9, + "curve": [ 0.595, -25, 0.623, -40.82 ] + }, + { "time": 0.6667, "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 }, + { + "time": 0.0667, + "x": -101.43, + "y": 8.04, + "curve": [ 0.085, -131.35, 0.129, -207.69, 0.08, 14.9, 0.124, 113.28 ] + }, + { + "time": 0.1667, + "x": -207.92, + "y": 145.81, + "curve": [ 0.196, -208.13, 0.21, -202.91, 0.186, 160.26, 0.206, 163.48 ] + }, + { + "time": 0.2333, + "x": -189.94, + "y": 163.85, + "curve": [ 0.27, -169.94, 0.31, -126.19, 0.269, 164.35, 0.316, 85.97 ] + }, + { + "time": 0.3333, + "x": -90.56, + "y": 78.57, + "curve": [ 0.355, -57.99, 0.376, -29.14, 0.35, 71.55, 0.376, 66.4 ] + }, + { + "time": 0.4, + "x": 2.87, + "y": 66.38, + "curve": [ 0.412, 19.24, 0.469, 90.73, 0.429, 66.37, 0.469, 70.66 ] + }, + { + "time": 0.5, + "x": 117.18, + "y": 70.46, + "curve": [ 0.522, 136.24, 0.542, 151.33, 0.539, 70.2, 0.555, 38.25 ] + }, + { + "time": 0.5667, + "x": 151.49, + "y": 25.29, + "curve": [ 0.578, 146.76, 0.586, 133.13, 0.572, 19.7, 0.582, 12.23 ] + }, + { "time": 0.6, "x": 115.02, "y": 0.1 }, + { "time": 0.6667, "x": 16.34, "y": 0.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 }, + { + "time": 0.2333, + "value": 167.84, + "curve": [ 0.246, 153.66, 0.256, 129.74 ] + }, + { + "time": 0.2667, + "value": 124.32, + "curve": [ 0.296, 124.43, 0.313, 129.93 ] + }, + { + "time": 0.3667, + "value": 129.87, + "curve": [ 0.421, 128.32, 0.519, 0.98 ] + }, + { + "time": 0.5667, + "curve": [ 0.6, 0.27, 0.642, 4.73 ] + }, + { "time": 0.6667, "value": 18.55 } + ], + "translate": [ + { + "x": -176.39, + "y": 134.12, + "curve": [ 0.018, -142.26, 0.054, -94.41, 0.01, 120.96, 0.044, 84.08 ] + }, + { + "time": 0.0667, + "x": -73.56, + "y": 76.68, + "curve": [ 0.086, -42.82, 0.194, 101.2, 0.098, 66.73, 0.198, 60.88 ] + }, + { "time": 0.2333, "x": 98.32, "y": 32.17 }, + { "time": 0.2667, "x": 49.13, "y": -0.63 }, + { + "time": 0.4, + "x": -147.9, + "y": 0.32, + "curve": [ 0.414, -168.78, 0.478, -284.76, 0.43, 30.09, 0.478, 129.14 ] + }, + { + "time": 0.5, + "x": -283.37, + "y": 167.12, + "curve": [ 0.526, -285.66, 0.548, -280.54, 0.516, 194.84, 0.55, 216.53 ] + }, + { + "time": 0.5667, + "x": -266.98, + "y": 216.12, + "curve": [ 0.581, -256.27, 0.643, -206.54, 0.61, 214.82, 0.65, 145.33 ] + }, + { "time": 0.6667, "x": -176.39, "y": 134.12 } + ] + }, + "rear-leg-target": { + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -147.04, + "curve": [ 0.033, -113.4, 0.161, 44.34 ] + }, + { + "time": 0.2333, + "value": 43.48, + "curve": [ 0.24, 43.41, 0.282, 35.72 ] + }, + { + "time": 0.3, + "value": 0.29, + "curve": [ 0.347, 0.28, 0.396, 4.27 ] + }, + { + "time": 0.4, + "curve": [ 0.424, -23.8, 0.525, -181.39 ] + }, + { + "time": 0.5667, + "value": -181.39, + "curve": [ 0.592, -181.39, 0.642, -169.09 ] + }, + { "time": 0.6667, "value": -147.04 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.25, + "curve": [ 0.008, -0.25, 0.056, 1.73 ] + }, + { + "time": 0.0667, + "value": -7.68, + "curve": [ 0.075, -43.13, 0.15, -130.44 ] + }, + { + "time": 0.2, + "value": -130.08, + "curve": [ 0.239, -129.79, 0.272, -126.8 ] + }, + { + "time": 0.3, + "value": -116.24, + "curve": [ 0.333, -103.91, 0.348, -86.1 ] + }, + { + "time": 0.3667, + "value": -71.08, + "curve": [ 0.386, -55.25, 0.415, -32.44 ] + }, + { + "time": 0.4333, + "value": -21.63, + "curve": [ 0.47, -0.01, 0.542, 33.42 ] + }, + { + "time": 0.5667, + "value": 33.2, + "curve": [ 0.622, 32.7, 0.569, 0.64 ] + }, + { "time": 0.6667, "value": -0.25 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.087, -6.81, 0.143, -5.75 ] + }, + { + "time": 0.1667, + "value": -4.3, + "curve": [ 0.183, -3.28, 0.209, 2.79 ] + }, + { + "time": 0.2333, + "value": 2.78, + "curve": [ 0.262, 2.77, 0.305, -6.63 ] + }, + { + "time": 0.3333, + "value": -6.64, + "curve": [ 0.419, -6.68, 0.49, -4.84 ] + }, + { + "time": 0.5, + "value": -4.38, + "curve": [ 0.518, -3.56, 0.574, 2.32 ] + }, + { + "time": 0.6, + "value": 2.33, + "curve": [ 0.643, 2.35, 0.633, -6.81 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.014, -3.17, 0.109, 43.93 ] + }, + { + "time": 0.1333, + "value": 43.95, + "curve": [ 0.177, 43.97, 0.192, -13.76 ] + }, + { + "time": 0.2667, + "value": -13.83, + "curve": [ 0.302, -13.72, 0.322, -8.86 ] + }, + { + "time": 0.3333, + "value": -6.6, + "curve": [ 0.349, -3.5, 0.436, 41.1 ] + }, + { + "time": 0.4667, + "value": 41.05, + "curve": [ 0.51, 40.99, 0.549, -14.06 ] + }, + { + "time": 0.6, + "value": -14.18, + "curve": [ 0.63, -14.26, 0.656, -9.04 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.079, -6.83, 0.108, 0.3 ] + }, + { + "time": 0.1333, + "value": 1.96, + "curve": [ 0.177, 4.89, 0.208, 6.28 ] + }, + { + "time": 0.2333, + "value": 6.29, + "curve": [ 0.313, 6.31, 0.383, 3.49 ] + }, + { + "time": 0.4, + "value": 2.58, + "curve": [ 0.442, 0.28, 0.523, -6.81 ] + }, + { "time": 0.6, "value": -6.81 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.011, -4.06, 0.108, 24.92 ] + }, + { + "time": 0.1333, + "value": 24.92, + "curve": [ 0.158, 24.92, 0.208, -10.62 ] + }, + { + "time": 0.2333, + "value": -10.62, + "curve": [ 0.254, -10.62, 0.312, -9.73 ] + }, + { + "time": 0.3333, + "value": -6.4, + "curve": [ 0.356, -2.95, 0.438, 24.93 ] + }, + { + "time": 0.4667, + "value": 24.93, + "curve": [ 0.492, 24.93, 0.575, -9.78 ] + }, + { + "time": 0.6, + "value": -9.78, + "curve": [ 0.617, -9.78, 0.655, -8.63 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 3.5, + "curve": [ 0.07, 3.51, 0.075, 8.69 ] + }, + { + "time": 0.1, + "value": 8.69, + "curve": [ 0.139, 8.69, 0.214, 6.9 ] + }, + { + "time": 0.2333, + "value": 6.33, + "curve": [ 0.266, 5.34, 0.285, 3.48 ] + }, + { + "time": 0.3333, + "value": 3.48, + "curve": [ 0.398, 3.48, 0.408, 8.68 ] + }, + { + "time": 0.4333, + "value": 8.68, + "curve": [ 0.458, 8.68, 0.551, 6.8 ] + }, + { + "time": 0.5667, + "value": 6.26, + "curve": [ 0.598, 5.17, 0.642, 3.49 ] + }, + { "time": 0.6667, "value": 3.5 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.067, 4.54, 0.075, -7.27 ] + }, + { + "time": 0.1, + "value": -7.27, + "curve": [ 0.125, -7.27, 0.227, 0.84 ] + }, + { + "time": 0.2333, + "value": 1.24, + "curve": [ 0.254, 2.5, 0.301, 4.51 ] + }, + { + "time": 0.3333, + "value": 4.52, + "curve": [ 0.386, 4.54, 0.408, -7.35 ] + }, + { + "time": 0.4333, + "value": -7.35, + "curve": [ 0.458, -7.35, 0.549, -0.14 ] + }, + { + "time": 0.5667, + "value": 0.95, + "curve": [ 0.586, 2.18, 0.632, 4.54 ] + }, + { "time": 0.6667, "value": 4.52 } + ] + }, + "aim-constraint-target": { + "rotate": [ + { "value": 30.57 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -6.5 } + ] + }, + "front-foot": { + "rotate": [ + { "value": 4.5 } + ] + }, + "head-control": { + "translate": [ + { + "y": -9.94, + "curve": [ 0.058, 0, 0.175, -15.32, 0.044, -4.19, 0.175, 5 ] + }, + { + "time": 0.2333, + "x": -15.32, + "y": 5, + "curve": [ 0.317, -15.32, 0.429, -9.74, 0.317, 5, 0.382, -31.71 ] + }, + { + "time": 0.4667, + "x": -7.81, + "y": -31.59, + "curve": [ 0.507, -5.76, 0.617, 0, 0.549, -31.47, 0.628, -13.33 ] + }, + { "time": 0.6667, "y": -9.94 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": -0.74, + "y": 11.22, + "curve": [ 0.061, -0.74, 0.144, 1.17, 0.061, 11.22, 0.143, -17.93 ] + }, + { + "time": 0.2333, + "x": 1.19, + "y": -17.9, + "curve": [ 0.54, 1.25, 0.558, -0.74, 0.545, -17.8, 0.558, 11.22 ] + }, + { "time": 0.6667, "x": -0.74, "y": 11.22 } + ] + }, + "back-shoulder": { + "translate": [ + { + "curve": [ 0.083, 0, 0.25, 0, 0.083, 0, 0.25, 8.93 ] + }, + { + "time": 0.3333, + "y": 8.93, + "curve": [ 0.417, 0, 0.583, 0, 0.417, 8.93, 0.583, 0 ] + }, + { "time": 0.6667 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 10, "bendPositive": false }, + { "time": 0.5667, "softness": 14.8, "bendPositive": false }, + { "time": 0.6, "softness": 48.2, "bendPositive": false }, + { "time": 0.6667, "softness": 10, "bendPositive": false } + ], + "rear-leg-ik": [ + { "bendPositive": false }, + { "time": 0.1667, "softness": 22.5, "bendPositive": false }, + { "time": 0.3, "softness": 61.4, "bendPositive": false }, + { "time": 0.6667, "bendPositive": false } + ] + }, + "events": [ + { "time": 0.2333, "name": "footstep" }, + { "time": 0.5667, "name": "footstep" } + ] + }, + "run-to-idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { + "x": -16.5, + "y": 3.41, + "curve": [ 0.033, -16.5, 0.1, -69.06, 0.033, 3.41, 0.1, 0 ] + }, + { "time": 0.1333, "x": -69.06 } + ] + }, + "hip": { + "translate": [ + { + "x": -28.78, + "y": -72.96, + "curve": [ 0.036, -28.63, 0.2, -10.85, 0.135, -62.35, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": 33.15, + "y": 31.61, + "curve": [ 0.017, 33.15, 0.05, 24.41, 0.017, 31.61, 0.041, 20.73 ] + }, + { + "time": 0.0667, + "x": 24.41, + "y": 0.19, + "curve": [ 0.117, 24.41, 0.217, 48.87, 0.117, 0.19, 0.217, 0 ] + }, + { "time": 0.2667, "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -80.61, + "curve": [ 0.067, -80.61, 0.2, -60.87 ] + }, + { "time": 0.2667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 8.79, + "curve": [ 0.041, 8.79, 0.115, 6.3 ] + }, + { + "time": 0.1667, + "value": 6.41, + "curve": [ 0.201, 6.48, 0.241, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 55.3, + "curve": [ 0.067, 55.3, 0.2, 39.2 ] + }, + { "time": 0.2667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.083, 2.67 ] + }, + { + "time": 0.1333, + "value": 2.67, + "curve": [ 0.15, 2.67, 0.25, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 38.26, + "curve": [ 0.041, 38.26, 0.127, -2.19 ] + }, + { + "time": 0.1667, + "value": -3, + "curve": [ 0.209, -3.84, 0.241, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.844, + "curve": [ 0.067, 0.844, 0.2, 1, 0.067, 1, 0.2, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 57.24, + "curve": [ 0.067, 57.24, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 2.28, + "curve": [ 0.041, 2.28, 0.105, 15.34 ] + }, + { + "time": 0.1667, + "value": 15.32, + "curve": [ 0.205, 15.31, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -12.98, + "curve": [ 0.033, -12.98, 0.103, -14.81 ] + }, + { + "time": 0.1333, + "value": -16.63, + "curve": [ 0.168, -18.69, 0.233, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "x": 0.963, + "y": 1.074, + "curve": [ 0.067, 0.963, 0.132, 1, 0.067, 1.074, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 0.88 ] + }, + { + "time": 0.1333, + "value": 0.88, + "curve": [ 0.167, 0.88, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 15.97 ] + }, + { + "time": 0.1333, + "value": 15.97, + "curve": [ 0.167, 15.97, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 10.76 ] + }, + { + "time": 0.1333, + "value": 10.76, + "curve": [ 0.167, 10.76, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.014, -2.28, 0.042, -7.84 ] + }, + { + "time": 0.0667, + "value": -7.82, + "curve": [ 0.108, -7.79, 0.166, 6.57 ] + }, + { + "time": 0.2, + "value": 6.67, + "curve": [ 0.222, 6.73, 0.255, 1.98 ] + }, + { "time": 0.2667 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.041, 0, 0.107, 3.03 ] + }, + { + "time": 0.1667, + "value": 3.03, + "curve": [ 0.205, 3.03, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.049, 0, 0.166, 0.66 ] + }, + { + "time": 0.2, + "value": 0.66, + "curve": [ 0.232, 0.65, 0.249, -2.15 ] + }, + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { "x": -10.12, "y": 8.71 }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { "x": 4.91, "y": 11.54 }, + { "time": 0.2667 } + ] + } + } + }, + "shoot": { + "slots": { + "muzzle": { + "rgba": [ + { "time": 0.1333, "color": "ffffffff" }, + { "time": 0.2, "color": "ffffff62" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle01" }, + { "time": 0.0667, "name": "muzzle02" }, + { "time": 0.1, "name": "muzzle03" }, + { "time": 0.1333, "name": "muzzle04" }, + { "time": 0.1667, "name": "muzzle05" }, + { "time": 0.2 } + ] + }, + "muzzle-glow": { + "rgba": [ + { "color": "ff0c0c00" }, + { + "time": 0.0333, + "color": "ffc9adff", + "curve": [ 0.255, 1, 0.273, 1, 0.255, 0.76, 0.273, 0.4, 0.255, 0.65, 0.273, 0.22, 0.255, 1, 0.273, 1 ] + }, + { "time": 0.3, "color": "ff400cff" }, + { "time": 0.6333, "color": "ff0c0c00" } + ], + "attachment": [ + { "name": "muzzle-glow" } + ] + }, + "muzzle-ring": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.202, 0.85, 0.214, 0.84, 0.202, 0.73, 0.214, 0.73, 0.202, 1, 0.214, 1, 0.202, 1, 0.214, 0.21 ] + }, + { "time": 0.2333, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2333 } + ] + }, + "muzzle-ring2": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring3": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring4": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + } + }, + "bones": { + "gun": { + "rotate": [ + { + "time": 0.0667, + "curve": [ 0.094, 25.89, 0.112, 45.27 ] + }, + { + "time": 0.1333, + "value": 45.35, + "curve": [ 0.192, 45.28, 0.18, -0.09 ] + }, + { "time": 0.6333 } + ] + }, + "muzzle": { + "translate": [ + { "x": -11.02, "y": 25.16 } + ] + }, + "rear-upper-arm": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.045, 0.91, 0.083, 3.46, 0.044, 0.86, 0.083, 3.32 ] + }, + { + "time": 0.1, + "x": 3.46, + "y": 3.32, + "curve": [ 0.133, 3.46, 0.176, -0.1, 0.133, 3.32, 0.169, 0 ] + }, + { "time": 0.2333 } + ] + }, + "rear-bracer": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.075, -3.78, 0.083, -4.36, 0.08, -2.7, 0.083, -2.88 ] + }, + { + "time": 0.1, + "x": -4.36, + "y": -2.88, + "curve": [ 0.133, -4.36, 0.168, 0.18, 0.133, -2.88, 0.167, 0 ] + }, + { "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-target": { + "rotate": [ + { + "value": -32.82, + "curve": [ 0.035, -42.69, 0.057, -70.49 ] + }, + { + "time": 0.1, + "value": -70.59, + "curve": [ 0.236, -70.78, 0.335, -9.87 ] + }, + { + "time": 0.3667, + "value": -1.56, + "curve": [ 0.393, 5.5, 0.477, 13.96 ] + }, + { + "time": 0.5, + "value": 13.96, + "curve": [ 0.519, 13.96, 0.508, 0.13 ] + }, + { "time": 0.5667, "value": -0.28 }, + { + "time": 0.7333, + "value": -0.28, + "curve": [ 0.827, -0.06, 0.958, -21.07 ] + }, + { "time": 1, "value": -32.82 } + ], + "translate": [ + { + "x": -167.32, + "y": 0.58, + "curve": [ 0.022, -180.55, 0.075, -235.51, 0.045, 0.58, 0.075, 30.12 ] + }, + { + "time": 0.1, + "x": -235.51, + "y": 39.92, + "curve": [ 0.142, -235.51, 0.208, -201.73, 0.138, 54.94, 0.18, 60.78 ] + }, + { + "time": 0.2333, + "x": -176.33, + "y": 61.48, + "curve": [ 0.272, -136.61, 0.321, -45.18, 0.275, 62.02, 0.321, 56.6 ] + }, + { + "time": 0.3667, + "x": 8.44, + "y": 49.67, + "curve": [ 0.403, 51.03, 0.486, 66.86, 0.401, 44.37, 0.48, 23.11 ] + }, + { "time": 0.5, "x": 66.57, "y": 14.22 }, + { "time": 0.5333, "x": 52.58, "y": 0.6 }, + { "time": 1, "x": -167.32, "y": 0.58 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": 18.19, + "curve": [ 0.01, 11.17, 0.043, 1.37 ] + }, + { "time": 0.1, "value": 0.47 }, + { + "time": 0.2333, + "value": 0.55, + "curve": [ 0.364, 0.3, 0.515, -80.48 ] + }, + { + "time": 0.7333, + "value": -80.78, + "curve": [ 0.788, -80.38, 0.921, 17.42 ] + }, + { "time": 1, "value": 18.19 } + ], + "translate": [ + { + "x": 139.21, + "y": 22.94, + "curve": [ 0.025, 139.21, 0.069, 111.46, 0.031, 3.25, 0.075, 0.06 ] + }, + { "time": 0.1, "x": 96.69, "y": 0.06 }, + { + "time": 0.5, + "x": -94.87, + "y": -0.03, + "curve": [ 0.518, -106.82, 0.575, -152.56, 0.534, 5.42, 0.557, 38.46 ] + }, + { + "time": 0.6, + "x": -152.56, + "y": 57.05, + "curve": [ 0.633, -152.56, 0.688, -128.05, 0.643, 75.61, 0.7, 84.14 ] + }, + { + "time": 0.7333, + "x": -109.42, + "y": 84.14, + "curve": [ 0.771, -93.91, 0.832, -30.64, 0.787, 84.14, 0.799, 89.65 ] + }, + { + "time": 0.8667, + "x": 17, + "y": 75.25, + "curve": [ 0.903, 66.18, 0.967, 139.21, 0.932, 61.53, 0.967, 44.02 ] + }, + { "time": 1, "x": 139.21, "y": 22.94 } + ] + }, + "hip": { + "rotate": [ + { "value": -4.35 } + ], + "translate": [ + { + "x": -2.86, + "y": -13.86, + "curve": [ 0.025, -2.84, 0.067, -2.82, 0.028, -19.14, 0.054, -24.02 ] + }, + { + "time": 0.1, + "x": -2.61, + "y": -24.19, + "curve": [ 0.143, -2.34, 0.202, -1.79, 0.152, -23.98, 0.213, -14.81 ] + }, + { + "time": 0.2667, + "x": -1.21, + "y": -7.12, + "curve": [ 0.308, -0.86, 0.345, -0.51, 0.306, -1.63, 0.341, 3.15 ] + }, + { + "time": 0.3667, + "x": -0.33, + "y": 3.15, + "curve": [ 0.41, 0.02, 0.458, 0.26, 0.427, 3.3, 0.481, -6.75 ] + }, + { + "time": 0.5, + "x": 0.26, + "y": -10.59, + "curve": [ 0.553, 0.26, 0.559, 0.2, 0.519, -14.41, 0.548, -23.88 ] + }, + { + "time": 0.6, + "x": -0.17, + "y": -23.71, + "curve": [ 0.663, -0.72, 0.798, -2.09, 0.702, -23.36, 0.802, 3.53 ] + }, + { + "time": 0.8667, + "x": -2.46, + "y": 3.48, + "curve": [ 0.901, -2.63, 0.967, -2.87, 0.913, 3.45, 0.967, -7.64 ] + }, + { "time": 1, "x": -2.86, "y": -13.86 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": 28.96, + "curve": [ 0.056, 28.74, 0.049, 19.6 ] + }, + { "time": 0.0667, "value": 1.68 }, + { + "time": 0.5, + "value": -10, + "curve": [ 0.525, -10, 0.592, -54.69 ] + }, + { + "time": 0.6, + "value": -59.66, + "curve": [ 0.623, -74.54, 0.674, -101.78 ] + }, + { + "time": 0.7333, + "value": -101.78, + "curve": [ 0.812, -101.78, 0.855, -84.67 ] + }, + { + "time": 0.8667, + "value": -63.53, + "curve": [ 0.869, -58.38, 0.975, 28.96 ] + }, + { "time": 1, "value": 28.96 } + ] + }, + "torso": { + "rotate": [ + { + "value": -20.72, + "curve": [ 0.025, -20.57, 0.071, -20.04 ] + }, + { + "time": 0.1333, + "value": -20.04, + "curve": [ 0.187, -20.04, 0.285, -21.16 ] + }, + { + "time": 0.3667, + "value": -21.16, + "curve": [ 0.405, -21.16, 0.47, -20.9 ] + }, + { + "time": 0.5, + "value": -20.71, + "curve": [ 0.518, -20.6, 0.582, -20.03 ] + }, + { + "time": 0.6333, + "value": -20.04, + "curve": [ 0.709, -20.05, 0.815, -21.18 ] + }, + { + "time": 0.8667, + "value": -21.18, + "curve": [ 0.908, -21.18, 0.971, -20.93 ] + }, + { "time": 1, "value": -20.72 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.78, + "curve": [ 0.025, 17.93, 0.071, 18.46 ] + }, + { + "time": 0.1333, + "value": 18.46, + "curve": [ 0.187, 18.46, 0.285, 17.34 ] + }, + { + "time": 0.3667, + "value": 17.34, + "curve": [ 0.405, 17.34, 0.47, 17.6 ] + }, + { + "time": 0.5, + "value": 17.79, + "curve": [ 0.518, 17.9, 0.582, 18.47 ] + }, + { + "time": 0.6333, + "value": 18.46, + "curve": [ 0.709, 18.45, 0.815, 17.32 ] + }, + { + "time": 0.8667, + "value": 17.32, + "curve": [ 0.908, 17.32, 0.971, 17.57 ] + }, + { "time": 1, "value": 17.78 } + ] + }, + "head": { + "rotate": [ + { + "value": -12.23, + "curve": [ 0.061, -12.23, 0.191, -7.45 ] + }, + { + "time": 0.2667, + "value": -7.43, + "curve": [ 0.341, -7.42, 0.421, -12.23 ] + }, + { + "time": 0.5, + "value": -12.23, + "curve": [ 0.567, -12.26, 0.694, -7.46 ] + }, + { + "time": 0.7667, + "value": -7.47, + "curve": [ 0.853, -7.49, 0.943, -12.23 ] + }, + { "time": 1, "value": -12.23 } + ], + "scale": [ + { + "curve": [ 0.039, 1, 0.084, 0.991, 0.039, 1, 0.084, 1.019 ] + }, + { + "time": 0.1333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.205, 0.991, 0.318, 1.019, 0.205, 1.019, 0.337, 0.992 ] + }, + { + "time": 0.4, + "x": 1.019, + "y": 0.992, + "curve": [ 0.456, 1.019, 0.494, 1.001, 0.483, 0.991, 0.493, 0.999 ] + }, + { + "time": 0.5, + "curve": [ 0.508, 0.998, 0.584, 0.991, 0.51, 1.002, 0.584, 1.019 ] + }, + { + "time": 0.6333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.705, 0.991, 0.818, 1.019, 0.705, 1.019, 0.837, 0.992 ] + }, + { + "time": 0.9, + "x": 1.019, + "y": 0.992, + "curve": [ 0.956, 1.019, 0.955, 1, 0.983, 0.991, 0.955, 1 ] + }, + { "time": 1 } + ] + }, + "back-foot-tip": { + "rotate": [ + { "value": 4.09 }, + { "time": 0.0333, "value": 3.05 }, + { + "time": 0.1, + "value": -59.01, + "curve": [ 0.124, -72.97, 0.169, -100.05 ] + }, + { + "time": 0.2333, + "value": -99.71, + "curve": [ 0.326, -99.21, 0.349, -37.4 ] + }, + { + "time": 0.3667, + "value": -17.85, + "curve": [ 0.388, 4.74, 0.451, 32.35 ] + }, + { + "time": 0.5, + "value": 32.4, + "curve": [ 0.537, 32.44, 0.566, 6.43 ] + }, + { "time": 0.5667, "value": 2 }, + { "time": 1, "value": 4.09 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 17.15, + "y": -0.09, + "curve": [ 0.178, 17.14, 0.295, -4.26, 0.009, -0.09, 0.475, 0.02 ] + }, + { + "time": 0.5, + "x": -4.26, + "y": 0.02, + "curve": [ 0.705, -4.27, 0.848, 17.15, 0.525, 0.02, 0.975, -0.09 ] + }, + { "time": 1, "x": 17.15, "y": -0.09 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -17.71, + "y": -4.63, + "curve": [ 0.036, -19.81, 0.043, -20.86, 0.036, -4.63, 0.05, -7.03 ] + }, + { + "time": 0.1, + "x": -20.95, + "y": -7.06, + "curve": [ 0.162, -21.05, 0.4, 7.79, 0.2, -7.13, 0.4, -1.9 ] + }, + { + "time": 0.5, + "x": 7.79, + "y": -1.94, + "curve": [ 0.612, 7.69, 0.875, -10.49, 0.592, -1.97, 0.917, -3.25 ] + }, + { "time": 1, "x": -17.71, "y": -4.63 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 1, + "curve": [ 0.006, 1.2, 0.084, 2.88 ] + }, + { + "time": 0.1333, + "value": 2.88, + "curve": [ 0.205, 2.88, 0.284, -1.17 ] + }, + { + "time": 0.3667, + "value": -1.17, + "curve": [ 0.411, -1.17, 0.481, 0.57 ] + }, + { + "time": 0.5, + "value": 1, + "curve": [ 0.515, 1.33, 0.59, 2.83 ] + }, + { + "time": 0.6333, + "value": 2.85, + "curve": [ 0.683, 2.86, 0.796, -1.2 ] + }, + { + "time": 0.8667, + "value": -1.2, + "curve": [ 0.916, -1.2, 0.984, 0.62 ] + }, + { "time": 1, "value": 1 } + ] + }, + "torso3": { + "rotate": [ + { "value": -1.81 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -9.51, + "curve": [ 0.021, -13.32, 0.058, -19.4 ] + }, + { + "time": 0.1, + "value": -19.4, + "curve": [ 0.238, -19.69, 0.337, 7.78 ] + }, + { + "time": 0.3667, + "value": 16.2, + "curve": [ 0.399, 25.42, 0.497, 60.19 ] + }, + { + "time": 0.6, + "value": 60.26, + "curve": [ 0.719, 60.13, 0.845, 27.61 ] + }, + { + "time": 0.8667, + "value": 22.45, + "curve": [ 0.892, 16.38, 0.979, -3.27 ] + }, + { "time": 1, "value": -9.51 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 13.57, + "curve": [ 0.022, 9.71, 0.147, -3.78 ] + }, + { + "time": 0.3667, + "value": -3.69, + "curve": [ 0.457, -3.66, 0.479, 0.83 ] + }, + { + "time": 0.5, + "value": 4.05, + "curve": [ 0.513, 6.08, 0.635, 30.8 ] + }, + { + "time": 0.8, + "value": 30.92, + "curve": [ 0.974, 31, 0.98, 18.35 ] + }, + { "time": 1, "value": 13.57 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -28.72, + "curve": [ 0.024, -31.74, 0.176, -43.4 ] + }, + { + "time": 0.3667, + "value": -43.6, + "curve": [ 0.403, -43.65, 0.47, -40.15 ] + }, + { + "time": 0.5, + "value": -35.63, + "curve": [ 0.547, -28.59, 0.624, -4.57 ] + }, + { + "time": 0.7333, + "value": -4.59, + "curve": [ 0.891, -4.62, 0.954, -24.28 ] + }, + { "time": 1, "value": -28.48 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.034, 30.94, 0.068, 32.05 ] + }, + { + "time": 0.1, + "value": 31.88, + "curve": [ 0.194, 31.01, 0.336, -0.11 ] + }, + { + "time": 0.3667, + "value": -7.11, + "curve": [ 0.421, -19.73, 0.53, -46.21 ] + }, + { + "time": 0.6, + "value": -45.75, + "curve": [ 0.708, -45.03, 0.844, -13.56 ] + }, + { + "time": 0.8667, + "value": -6.48, + "curve": [ 0.909, 6.59, 0.958, 24.21 ] + }, + { "time": 1, "value": 28.28 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.074, -2.84, 0.121, 25.08 ] + }, + { + "time": 0.2333, + "value": 24.99, + "curve": [ 0.35, 24.89, 0.427, -2.86 ] + }, + { + "time": 0.5, + "value": -2.8, + "curve": [ 0.575, -2.73, 0.652, 24.5 ] + }, + { + "time": 0.7333, + "value": 24.55, + "curve": [ 0.828, 24.6, 0.932, -2.69 ] + }, + { "time": 1, "value": -2.79 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.01, + "curve": [ 0.106, -5.97, 0.151, 18.62 ] + }, + { + "time": 0.2333, + "value": 18.72, + "curve": [ 0.336, 18.7, 0.405, -11.37 ] + }, + { + "time": 0.5, + "value": -11.45, + "curve": [ 0.626, -11.46, 0.629, 18.94 ] + }, + { + "time": 0.7333, + "value": 18.92, + "curve": [ 0.833, 18.92, 0.913, -6.06 ] + }, + { "time": 1, "value": -6.01 } + ], + "translate": [ + { "x": 0.03, "y": 1.35 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.06, + "curve": [ 0.044, 11.16, 0.063, 11.49 ] + }, + { + "time": 0.1, + "value": 11.49, + "curve": [ 0.215, 11.49, 0.336, 2.92 ] + }, + { + "time": 0.3667, + "value": 0.84, + "curve": [ 0.416, -2.52, 0.498, -10.84 ] + }, + { + "time": 0.6, + "value": -10.83, + "curve": [ 0.762, -10.71, 0.845, -3.05 ] + }, + { + "time": 0.8667, + "value": -1.34, + "curve": [ 0.917, 2.54, 0.977, 8.81 ] + }, + { "time": 1, "value": 10.06 } + ] + }, + "gun": { + "rotate": [ + { + "value": -14.67, + "curve": [ 0.086, -14.67, 0.202, 8.31 ] + }, + { + "time": 0.2333, + "value": 12.14, + "curve": [ 0.279, 17.71, 0.391, 25.79 ] + }, + { + "time": 0.5, + "value": 25.77, + "curve": [ 0.631, 25.74, 0.694, 4.53 ] + }, + { + "time": 0.7333, + "value": -0.65, + "curve": [ 0.768, -5.21, 0.902, -14.4 ] + }, + { "time": 1, "value": -14.67 } + ] + }, + "front-leg-target": { + "translate": [ + { + "x": -2.83, + "y": -8.48, + "curve": [ 0.008, -2.83, 0.058, 0.09, 0.001, 4.97, 0.058, 6.68 ] + }, + { + "time": 0.0667, + "x": 0.09, + "y": 6.68, + "curve": [ 0.3, 0.09, 0.767, -2.83, 0.3, 6.68, 0.767, -8.48 ] + }, + { "time": 1, "x": -2.83, "y": -8.48 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.028, 1.24, 0.016, 3.46 ] + }, + { + "time": 0.1, + "value": 3.45, + "curve": [ 0.159, 3.45, 0.189, 0.23 ] + }, + { + "time": 0.2333, + "value": -2.29, + "curve": [ 0.265, -4.32, 0.305, -5.92 ] + }, + { + "time": 0.3667, + "value": -5.94, + "curve": [ 0.446, -5.96, 0.52, 3.41 ] + }, + { + "time": 0.6, + "value": 3.42, + "curve": [ 0.717, 3.42, 0.772, -5.93 ] + }, + { + "time": 0.8667, + "value": -5.97, + "curve": [ 0.933, -5.99, 0.982, -0.94 ] + }, + { "time": 1 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.159, -10.48 ] + }, + { + "time": 0.2333, + "value": -10.49, + "curve": [ 0.334, -10.5, 0.439, -0.09 ] + }, + { + "time": 0.5, + "value": -0.09, + "curve": [ 0.569, -0.09, 0.658, -10.75 ] + }, + { + "time": 0.7333, + "value": -10.7, + "curve": [ 0.833, -10.63, 0.947, 0 ] + }, + { "time": 1 } + ] + }, + "gun-tip": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring2": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring3": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring4": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": -0.18, + "y": -4.49, + "curve": [ 0.133, -0.18, 0.333, 7.69, 0.133, -4.49, 0.333, 2.77 ] + }, + { + "time": 0.4667, + "x": 7.69, + "y": 2.77, + "curve": [ 0.6, 7.69, 0.858, -0.18, 0.6, 2.77, 0.858, -4.49 ] + }, + { "time": 1, "x": -0.18, "y": -4.49 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 9.37, + "curve": [ 0.162, 1.41, 0.333, -1.66, 0.162, 9.37, 0.301, -7.23 ] + }, + { + "time": 0.5, + "x": -1.6, + "y": -7.27, + "curve": [ 0.735, -1.5, 0.847, 1.46, 0.723, -7.31, 0.838, 9.32 ] + }, + { "time": 1, "x": 1.46, "y": 9.37 } + ] + }, + "head-control": { + "translate": [ + { + "x": -6.46, + "y": -8.4, + "curve": [ 0.053, -5.31, 0.167, -3.64, 0.093, -8.4, 0.196, -3.81 ] + }, + { + "time": 0.2333, + "x": -3.64, + "y": -1.32, + "curve": [ 0.309, -3.64, 0.436, -5.84, 0.275, 1.43, 0.38, 10.3 ] + }, + { + "time": 0.5, + "x": -7.03, + "y": 10.29, + "curve": [ 0.538, -7.75, 0.66, -10.54, 0.598, 10.27, 0.694, 1.56 ] + }, + { + "time": 0.7333, + "x": -10.54, + "y": -1.26, + "curve": [ 0.797, -10.54, 0.933, -7.91, 0.768, -3.79, 0.875, -8.4 ] + }, + { "time": 1, "x": -6.46, "y": -8.4 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { + "softness": 25.7, + "bendPositive": false, + "curve": [ 0.008, 1, 0.025, 1, 0.008, 25.7, 0.025, 9.9 ] + }, + { + "time": 0.0333, + "softness": 9.9, + "bendPositive": false, + "curve": [ 0.15, 1, 0.383, 1, 0.15, 9.9, 0.383, 43.2 ] + }, + { + "time": 0.5, + "softness": 43.2, + "bendPositive": false, + "curve": [ 0.625, 1, 0.875, 1, 0.625, 43.2, 0.846, 45.57 ] + }, + { "time": 1, "softness": 25.7, "bendPositive": false } + ], + "rear-leg-ik": [ + { "softness": 5, "bendPositive": false }, + { "time": 0.4333, "softness": 4.9, "bendPositive": false }, + { "time": 0.5, "softness": 28.81, "bendPositive": false }, + { "time": 0.6, "softness": 43.8, "bendPositive": false }, + { "time": 1, "softness": 5, "bendPositive": false } + ] + }, + "events": [ + { "name": "footstep" }, + { "time": 0.5, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json.import b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json.import new file mode 100644 index 000000000..b0c0faeca --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy-pro.spine-json.import @@ -0,0 +1,14 @@ +[remap] + +importer="spine.json" +type="SpineSkeletonFileResource" +uid="uid://bngulrxfavqyn" +path="res://.godot/imported/spineboy-pro.spine-json-f9f3900b0187b1b6e5b1abca50f5f02a.spjson" + +[deps] + +source_file="res://assets/spineboy/spineboy-pro.spine-json" +dest_files=["res://.godot/imported/spineboy-pro.spine-json-f9f3900b0187b1b6e5b1abca50f5f02a.spjson"] + +[params] + diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas new file mode 100644 index 000000000..b07ccc3bf --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas @@ -0,0 +1,101 @@ +spineboy.png + size: 1024, 256 + filter: Linear, Linear + scale: 0.5 +crosshair + bounds: 813, 160, 45, 45 +eye-indifferent + bounds: 569, 2, 47, 45 +eye-surprised + bounds: 643, 7, 47, 45 + rotate: 90 +front-bracer + bounds: 811, 51, 29, 40 +front-fist-closed + bounds: 807, 93, 38, 41 +front-fist-open + bounds: 815, 210, 43, 44 +front-foot + bounds: 706, 64, 63, 35 + rotate: 90 +front-shin + bounds: 80, 11, 41, 92 +front-thigh + bounds: 754, 12, 23, 56 +front-upper-arm + bounds: 618, 5, 23, 49 +goggles + bounds: 214, 20, 131, 83 +gun + bounds: 347, 14, 105, 102 + rotate: 90 +head + bounds: 80, 105, 136, 149 +hoverboard-board + bounds: 2, 8, 246, 76 + rotate: 90 +hoverboard-thruster + bounds: 478, 2, 30, 32 +hoverglow-small + bounds: 218, 117, 137, 38 + rotate: 90 +mouth-grind + bounds: 775, 80, 47, 30 + rotate: 90 +mouth-oooo + bounds: 779, 31, 47, 30 + rotate: 90 +mouth-smile + bounds: 783, 207, 47, 30 + rotate: 90 +muzzle-glow + bounds: 779, 4, 25, 25 +muzzle-ring + bounds: 451, 14, 25, 105 +muzzle01 + bounds: 664, 60, 67, 40 + rotate: 90 +muzzle02 + bounds: 580, 56, 68, 42 + rotate: 90 +muzzle03 + bounds: 478, 36, 83, 53 + rotate: 90 +muzzle04 + bounds: 533, 49, 75, 45 + rotate: 90 +muzzle05 + bounds: 624, 56, 68, 38 + rotate: 90 +neck + bounds: 806, 8, 18, 21 +portal-bg + bounds: 258, 121, 133, 133 +portal-flare1 + bounds: 690, 2, 56, 30 + rotate: 90 +portal-flare2 + bounds: 510, 3, 57, 31 +portal-flare3 + bounds: 722, 4, 58, 30 + rotate: 90 +portal-shade + bounds: 393, 121, 133, 133 +portal-streaks1 + bounds: 528, 126, 126, 128 +portal-streaks2 + bounds: 656, 129, 125, 125 +rear-bracer + bounds: 826, 13, 28, 36 +rear-foot + bounds: 743, 70, 57, 30 + rotate: 90 +rear-shin + bounds: 174, 14, 38, 89 +rear-thigh + bounds: 783, 158, 28, 47 +rear-upper-arm + bounds: 783, 136, 20, 44 + rotate: 90 +torso + bounds: 123, 13, 49, 90 diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas.import b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas.import new file mode 100644 index 000000000..831af22f0 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.atlas.import @@ -0,0 +1,15 @@ +[remap] + +importer="spine.atlas" +type="SpineAtlasResource" +uid="uid://dt2kctrit34y0" +path="res://.godot/imported/spineboy.atlas-54c12b5ff1cdaaa1b4e452a7d0d868c9.spatlas" + +[deps] + +source_file="res://assets/spineboy/spineboy.atlas" +dest_files=["res://.godot/imported/spineboy.atlas-54c12b5ff1cdaaa1b4e452a7d0d868c9.spatlas"] + +[params] + +normal_map_prefix="n" diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png new file mode 100644 index 000000000..d1c3ac1be Binary files /dev/null and b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png differ diff --git a/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png.import b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png.import new file mode 100644 index 000000000..fd8195661 --- /dev/null +++ b/spine-godot/example-v4-csharp/assets/spineboy/spineboy.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh5imhdfuc6m0" +path="res://.godot/imported/spineboy.png-436dbd6da2b707b6828ede17b7871f43.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/spineboy/spineboy.png" +dest_files=["res://.godot/imported/spineboy.png-436dbd6da2b707b6828ede17b7871f43.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/default_env.tres b/spine-godot/example-v4-csharp/default_env.tres new file mode 100644 index 000000000..20207a4aa --- /dev/null +++ b/spine-godot/example-v4-csharp/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/spine-godot/example-v4-csharp/examples/01-helloworld/Spineboy.cs b/spine-godot/example-v4-csharp/examples/01-helloworld/Spineboy.cs new file mode 100644 index 000000000..e71d5a232 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/01-helloworld/Spineboy.cs @@ -0,0 +1,8 @@ +using Godot; +using System; + +public partial class Spineboy : SpineSprite { + public override void _Ready() { + GetAnimationState().SetAnimation("run", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/01-helloworld/helloworld.tscn b/spine-godot/example-v4-csharp/examples/01-helloworld/helloworld.tscn new file mode 100644 index 000000000..c4fdb82ff --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/01-helloworld/helloworld.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=3 format=3 uid="uid://d0v5rhv2ysej8"] + +[ext_resource type="Script" path="res://examples/01-helloworld/Spineboy.cs" id="2_2c2a7"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="3"] + +[node name="Node2D" type="Node2D"] + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(505, 466) +scale = Vector2(0.466832, 0.466832) +skeleton_data_res = ExtResource("3") +bones_color = Color(0.968627, 1, 0, 0.501961) +paths_color = Color(1, 0.498039, 0, 0.466667) +paths_clipping = Color(0.8, 0, 0, 0.5) +preview_skin = "Default" +preview_animation = "run" +preview_frame = true +preview_time = 0.24 +script = ExtResource("2_2c2a7") diff --git a/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/AnimationStateListener.cs b/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/AnimationStateListener.cs new file mode 100644 index 000000000..6a01413e8 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/AnimationStateListener.cs @@ -0,0 +1,43 @@ +using Godot; +using System; + +public partial class AnimationStateListener : Node2D +{ + public override void _Ready() + { + var footStepAudio = GetNode("FootstepAudio"); + var spineboy = GetNode("Spineboy"); + spineboy.AnimationStarted += (sprite, animationState, trackEntry) => + { + var spineTrackEntry = trackEntry as SpineTrackEntry; + Console.WriteLine("Animation started: " + spineTrackEntry.GetAnimation().GetName()); + }; + spineboy.AnimationInterrupted += (sprite, animationState, trackEntry) => + { + var spineTrackEntry = trackEntry as SpineTrackEntry; + Console.WriteLine("Animation interrupted: " + spineTrackEntry.GetAnimation().GetName()); + }; + spineboy.AnimationCompleted += (sprite, animationState, trackEntry) => + { + var spineTrackEntry = trackEntry as SpineTrackEntry; + Console.WriteLine("Animation completed: " + spineTrackEntry.GetAnimation().GetName()); + }; + spineboy.AnimationDisposed += (sprite, animationState, trackEntry) => + { + var spineTrackEntry = trackEntry as SpineTrackEntry; + Console.WriteLine("Animation disposed: " + spineTrackEntry.GetAnimation().GetName()); + }; + spineboy.AnimationEvent += (sprite, animationState, trackEntry, eventObject) => + { + var spineTrackEntry = trackEntry as SpineTrackEntry; + var spineEvent = eventObject as SpineEvent; + Console.WriteLine("Animation event: " + spineTrackEntry.GetAnimation().GetName() + ", " + spineEvent.GetData().GetEventName()); + if (spineEvent.GetData().GetEventName() == "footstep") + footStepAudio.Play(); + }; + var animationState = spineboy.GetAnimationState(); + animationState.SetAnimation("jump", false, 0); + animationState.AddAnimation("walk", 0, true, 0); + animationState.AddAnimation("run", 2, true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/animation-state-listeners.tscn b/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/animation-state-listeners.tscn new file mode 100644 index 000000000..6185b6c4f --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/02-animation-state-listeners/animation-state-listeners.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://c738i3nbdkn0h"] + +[ext_resource type="Script" path="res://examples/02-animation-state-listeners/AnimationStateListener.cs" id="1_cedgs"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="AudioStream" uid="uid://can7k84o8svum" path="res://assets/footstep.ogg" id="3"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_cedgs") + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(473, 487) +scale = Vector2(0.575051, 0.575051) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="FootstepAudio" type="AudioStreamPlayer" parent="."] +stream = ExtResource("3") diff --git a/spine-godot/example-v4-csharp/examples/03-mix-and-match/MixAndMatch.cs b/spine-godot/example-v4-csharp/examples/03-mix-and-match/MixAndMatch.cs new file mode 100644 index 000000000..6420080f4 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/03-mix-and-match/MixAndMatch.cs @@ -0,0 +1,29 @@ +using Godot; +using System; + +public partial class MixAndMatch : SpineSprite +{ + public override void _Ready() + { + var data = GetSkeleton().GetData(); + var custom_skin = NewSkin("custom-skin"); + var skin_base = data.FindSkin("skin-base"); + custom_skin.AddSkin(skin_base); + custom_skin.AddSkin(data.FindSkin("nose/short")); + custom_skin.AddSkin(data.FindSkin("eyelids/girly")); + custom_skin.AddSkin(data.FindSkin("eyes/violet")); + custom_skin.AddSkin(data.FindSkin("hair/brown")); + custom_skin.AddSkin(data.FindSkin("clothes/hoodie-orange")); + custom_skin.AddSkin(data.FindSkin("legs/pants-jeans")); + custom_skin.AddSkin(data.FindSkin("accessories/bag")); + custom_skin.AddSkin(data.FindSkin("accessories/hat-red-yellow")); + GetSkeleton().SetSkin(custom_skin); + + foreach (SpineSkinEntry entry in custom_skin.GetAttachments()) + { + Console.WriteLine(entry.GetSlotIndex() + " " + entry.GetName()); + } + + GetAnimationState().SetAnimation("dance", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/03-mix-and-match/mix-and-match.tscn b/spine-godot/example-v4-csharp/examples/03-mix-and-match/mix-and-match.tscn new file mode 100644 index 000000000..45a72291a --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/03-mix-and-match/mix-and-match.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://dodvuj07fsynd"] + +[ext_resource type="SpineSkeletonDataResource" path="res://assets/mix-and-match/mix-and-match-data.tres" id="1"] +[ext_resource type="Script" path="res://examples/03-mix-and-match/MixAndMatch.cs" id="2_80tsf"] + +[node name="Node2D" type="Node2D"] + +[node name="MixAndMatch" type="SpineSprite" parent="."] +position = Vector2(532.982, 480.287) +scale = Vector2(0.441932, 0.441932) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 +script = ExtResource("2_80tsf") diff --git a/spine-godot/example-v4-csharp/examples/04-simple-input/SpineboyInput.cs b/spine-godot/example-v4-csharp/examples/04-simple-input/SpineboyInput.cs new file mode 100644 index 000000000..b7de4d37e --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/04-simple-input/SpineboyInput.cs @@ -0,0 +1,33 @@ +using Godot; +using System; + +public partial class SpineboyInput : SpineSprite +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + GetAnimationState().SetAnimation("idle", true, 0); + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + if (Input.IsActionJustPressed("ui_left")) + { + GetAnimationState().SetAnimation("run", true, 0); + GetSkeleton().SetScaleX(-1); + } + + if (Input.IsActionJustReleased("ui_left")) + GetAnimationState().SetAnimation("idle", true, 0); + + if (Input.IsActionJustPressed("ui_right")) + { + GetAnimationState().SetAnimation("run", true, 0); + GetSkeleton().SetScaleX(1); + } + + if (Input.IsActionJustReleased("ui_right")) + GetAnimationState().SetAnimation("idle", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/04-simple-input/simple-input.tscn b/spine-godot/example-v4-csharp/examples/04-simple-input/simple-input.tscn new file mode 100644 index 000000000..1504b9082 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/04-simple-input/simple-input.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://bgdpghp11j3kg"] + +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="Script" path="res://examples/04-simple-input/SpineboyInput.cs" id="2_4ryek"] + +[node name="Node2D" type="Node2D"] + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(501.503, 472.035) +scale = Vector2(0.518624, 0.518624) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 +script = ExtResource("2_4ryek") diff --git a/spine-godot/example-v4-csharp/examples/05-mouse-following/MouseFollowing.cs b/spine-godot/example-v4-csharp/examples/05-mouse-following/MouseFollowing.cs new file mode 100644 index 000000000..63e3e2b42 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/05-mouse-following/MouseFollowing.cs @@ -0,0 +1,22 @@ +using Godot; +using System; + +public partial class MouseFollowing : Node2D +{ + private SpineSprite spineboy; + + private SpineBoneNode crosshairBonne; + + public override void _Ready() + { + spineboy = GetNode("Spineboy"); + crosshairBonne = spineboy.GetNode("CrosshairBone"); + spineboy.GetAnimationState().SetAnimation("walk", true, 0); + spineboy.GetAnimationState().SetAnimation("aim", true, 1); + } + + public override void _Process(double delta) + { + crosshairBonne.GlobalPosition = GetViewport().GetMousePosition(); + } +} diff --git a/spine-godot/example-v4-csharp/examples/05-mouse-following/mouse-following.tscn b/spine-godot/example-v4-csharp/examples/05-mouse-following/mouse-following.tscn new file mode 100644 index 000000000..e9c2b41e5 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/05-mouse-following/mouse-following.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=3 format=3 uid="uid://borp2l17n5xw1"] + +[ext_resource type="Script" path="res://examples/05-mouse-following/MouseFollowing.cs" id="1_sgiuf"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_sgiuf") + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(481, 457) +scale = Vector2(0.5, 0.5) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="CrosshairBone" type="SpineBoneNode" parent="Spineboy"] +show_behind_parent = true +position = Vector2(302.333, -569.714) +rotation = -0.000872665 +bone_name = "crosshair" +bone_mode = 1 diff --git a/spine-godot/example-v4-csharp/examples/06-bone-following/BoneFollowing.cs b/spine-godot/example-v4-csharp/examples/06-bone-following/BoneFollowing.cs new file mode 100644 index 000000000..252191d20 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/06-bone-following/BoneFollowing.cs @@ -0,0 +1,10 @@ +using Godot; +using System; + +public partial class BoneFollowing : Node2D +{ + public override void _Ready() + { + GetNode("Spineboy").GetAnimationState().SetAnimation("walk", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/06-bone-following/bone-following.tscn b/spine-godot/example-v4-csharp/examples/06-bone-following/bone-following.tscn new file mode 100644 index 000000000..3a62e652d --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/06-bone-following/bone-following.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=4 format=3 uid="uid://bir7yvf0qwdge"] + +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="Script" path="res://examples/06-bone-following/BoneFollowing.cs" id="1_2vlen"] +[ext_resource type="Texture2D" uid="uid://8ud5n2ywp5ba" path="res://icon.png" id="3"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_2vlen") + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(478, 483) +scale = Vector2(0.58461, 0.58461) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" +preview_animation = "" +preview_frame = false +preview_time = 0.0 + +[node name="GunTipBone" type="SpineBoneNode" parent="Spineboy"] +show_behind_parent = true +position = Vector2(214.298, -162.047) +rotation = 0.713316 +scale = Vector2(1, 1) +bone_name = "gun-tip" + +[node name="Sprite" type="Sprite2D" parent="Spineboy/GunTipBone"] +texture = ExtResource("3") diff --git a/spine-godot/example-v4-csharp/examples/07-slot-node/SlotNode.cs b/spine-godot/example-v4-csharp/examples/07-slot-node/SlotNode.cs new file mode 100644 index 000000000..8e60f1915 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/07-slot-node/SlotNode.cs @@ -0,0 +1,17 @@ +using Godot; +using System; + +public partial class SlotNode : Node2D +{ + public override void _Ready() + { + SpineSprite spineboy = GetNode("Spineboy"); + SpineSprite raptor = GetNode("Spineboy/GunSlot/Raptor"); + SpineSprite tinySpineboy = GetNode("Spineboy/FrontFirstSlot/TinySpineboy"); + + var entry = spineboy.GetAnimationState().SetAnimation("run", true, 0); + entry.SetTimeScale(0.1f); + raptor.GetAnimationState().SetAnimation("walk", true, 0); + tinySpineboy.GetAnimationState().SetAnimation("walk", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/07-slot-node/slot-node.tscn b/spine-godot/example-v4-csharp/examples/07-slot-node/slot-node.tscn new file mode 100644 index 000000000..fe24f7a6a --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/07-slot-node/slot-node.tscn @@ -0,0 +1,62 @@ +[gd_scene load_steps=5 format=3 uid="uid://bhht8dees2pyq"] + +[ext_resource type="Script" path="res://examples/07-slot-node/SlotNode.cs" id="1_8cn0r"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raptor-data.tres" id="3"] +[ext_resource type="Texture2D" uid="uid://8ud5n2ywp5ba" path="res://icon.png" id="4"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_8cn0r") + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(474, 506) +scale = Vector2(0.560712, 0.560712) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="GunSlot" type="SpineSlotNode" parent="Spineboy"] +show_behind_parent = true +position = Vector2(40.8753, -276.036) +rotation = 0.837234 +scale = Vector2(1, 1) +slot_name = "gun" + +[node name="Raptor" type="SpineSprite" parent="Spineboy/GunSlot"] +position = Vector2(84.6909, -67.9174) +scale = Vector2(0.193472, 0.193472) +skeleton_data_res = ExtResource("3") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="EyeSlot" type="SpineSlotNode" parent="Spineboy"] +show_behind_parent = true +position = Vector2(-23.4598, -402.301) +rotation = -1.71793 +scale = Vector2(1, 1) +slot_name = "eye" + +[node name="Sprite" type="Sprite2D" parent="Spineboy/EyeSlot"] +position = Vector2(84.4734, 43.4469) +rotation = 1.66344 +texture = ExtResource("4") + +[node name="FrontFistSlot" type="SpineSlotNode" parent="Spineboy"] +show_behind_parent = true +position = Vector2(-29.0298, -241.577) +rotation = 0.995187 +scale = Vector2(1, 1) +slot_name = "front-fist" + +[node name="TinySpineboy" type="SpineSprite" parent="Spineboy/FrontFistSlot"] +position = Vector2(-2.64624, -10.8111) +scale = Vector2(0.193389, 0.193389) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 diff --git a/spine-godot/example-v4-csharp/examples/08-animation-player/PlayCutscene.cs b/spine-godot/example-v4-csharp/examples/08-animation-player/PlayCutscene.cs new file mode 100644 index 000000000..c9c34fd7c --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/08-animation-player/PlayCutscene.cs @@ -0,0 +1,52 @@ +using Godot; +using System; + +public partial class PlayCutscene : Node2D +{ + AnimationPlayer player; + SpineSprite spineboy; + float speed = 400; + float velocityX = 0; + + public override void _Ready() + { + player = GetNode("AnimationPlayer"); + player.Play("cutscene"); + spineboy = GetNode("Spineboy"); + } + + public override void _Process(double delta) + { + if (player.IsPlaying()) return; + + if (Input.IsActionJustPressed("ui_left")) + { + spineboy.GetAnimationState().SetAnimation("run", true, 0); + spineboy.GetSkeleton().SetScaleX(-1); + velocityX = -1; + } + + if (Input.IsActionJustReleased("ui_left")) + { + spineboy.GetAnimationState().SetAnimation("idle", true, 0); + velocityX = 0; + } + + if (Input.IsActionJustPressed("ui_right")) + { + spineboy.GetAnimationState().SetAnimation("run", true, 0); + spineboy.GetSkeleton().SetScaleX(1); + velocityX = 1; + } + + if (Input.IsActionJustReleased("ui_right")) + { + spineboy.GetAnimationState().SetAnimation("idle", true, 0); + velocityX = 0; + } + + var newPosition = spineboy.Position; + newPosition.X += velocityX * speed * (float)delta; + spineboy.Position = newPosition; + } +} diff --git a/spine-godot/example-v4-csharp/examples/08-animation-player/animation-player.tscn b/spine-godot/example-v4-csharp/examples/08-animation-player/animation-player.tscn new file mode 100644 index 000000000..056518150 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/08-animation-player/animation-player.tscn @@ -0,0 +1,1944 @@ +[gd_scene load_steps=68 format=3 uid="uid://dmddd1ll1y0bm"] + +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="Script" path="res://examples/08-animation-player/PlayCutscene.cs" id="1_sfb8c"] +[ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raptor-data.tres" id="3"] + +[sub_resource type="Animation" id="Animation_0w4l6"] +resource_name = "aim_looped" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["aim"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_ypp0f"] +resource_name = "aim" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["aim"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_ro717"] +resource_name = "death_looped" +length = 4.9333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["death"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_eu7ym"] +resource_name = "death" +length = 4.9333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["death"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_0b0od"] +resource_name = "hoverboard_looped" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["hoverboard"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_ere4j"] +resource_name = "hoverboard" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["hoverboard"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_3t75h"] +resource_name = "idle_looped" +length = 1.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_0medg"] +resource_name = "idle" +length = 1.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_08xgr"] +resource_name = "idle-turn_looped" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle-turn"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_srxvc"] +resource_name = "idle-turn" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle-turn"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_dr83r"] +resource_name = "jump_looped" +length = 1.3333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_4fl4p"] +resource_name = "jump" +length = 1.3333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_jjgv6"] +resource_name = "portal_looped" +length = 3.1667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["portal"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_wjuhv"] +resource_name = "portal" +length = 3.1667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["portal"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_gkssb"] +resource_name = "run_looped" +length = 0.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_66ili"] +resource_name = "run" +length = 0.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_fntjy"] +resource_name = "run-to-idle_looped" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run-to-idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_g7jj5"] +resource_name = "run-to-idle" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run-to-idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_eoc38"] +resource_name = "shoot_looped" +length = 0.6333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["shoot"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_y5wex"] +resource_name = "shoot" +length = 0.6333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["shoot"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_mlycr"] +resource_name = "walk_looped" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_0dh1n"] +resource_name = "walk" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_caogd"] +resource_name = "RESET" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [""] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_foxls"] +_data = { +"-- Empty --": SubResource("Animation_caogd"), +"RESET": SubResource("Animation_caogd"), +"aim": SubResource("Animation_ypp0f"), +"aim_looped": SubResource("Animation_0w4l6"), +"death": SubResource("Animation_eu7ym"), +"death_looped": SubResource("Animation_ro717"), +"hoverboard": SubResource("Animation_ere4j"), +"hoverboard_looped": SubResource("Animation_0b0od"), +"idle": SubResource("Animation_0medg"), +"idle-turn": SubResource("Animation_srxvc"), +"idle-turn_looped": SubResource("Animation_08xgr"), +"idle_looped": SubResource("Animation_3t75h"), +"jump": SubResource("Animation_4fl4p"), +"jump_looped": SubResource("Animation_dr83r"), +"portal": SubResource("Animation_wjuhv"), +"portal_looped": SubResource("Animation_jjgv6"), +"run": SubResource("Animation_66ili"), +"run-to-idle": SubResource("Animation_g7jj5"), +"run-to-idle_looped": SubResource("Animation_fntjy"), +"run_looped": SubResource("Animation_gkssb"), +"shoot": SubResource("Animation_y5wex"), +"shoot_looped": SubResource("Animation_eoc38"), +"walk": SubResource("Animation_0dh1n"), +"walk_looped": SubResource("Animation_mlycr") +} + +[sub_resource type="Animation" id="Animation_8oucm"] +resource_name = "aim_looped" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["aim"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_awb25"] +resource_name = "aim" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["aim"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_ua7q4"] +resource_name = "death_looped" +length = 4.9333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["death"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_qkjth"] +resource_name = "death" +length = 4.9333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["death"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_nk1ja"] +resource_name = "hoverboard_looped" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["hoverboard"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_5ump1"] +resource_name = "hoverboard" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["hoverboard"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_r65d1"] +resource_name = "idle_looped" +length = 1.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_v5cis"] +resource_name = "idle" +length = 1.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_ekfrt"] +resource_name = "idle-turn_looped" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle-turn"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_i7uvx"] +resource_name = "idle-turn" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["idle-turn"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_h7d1m"] +resource_name = "jump_looped" +length = 1.3333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_p00wv"] +resource_name = "jump" +length = 1.3333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_h28vd"] +resource_name = "portal_looped" +length = 3.1667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["portal"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_7n3cr"] +resource_name = "portal" +length = 3.1667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["portal"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_narkj"] +resource_name = "run_looped" +length = 0.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_f0l7r"] +resource_name = "run" +length = 0.6667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_tqo2u"] +resource_name = "run-to-idle_looped" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run-to-idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_s4idr"] +resource_name = "run-to-idle" +length = 0.2667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["run-to-idle"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_u87bq"] +resource_name = "shoot_looped" +length = 0.6333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["shoot"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_p08dp"] +resource_name = "shoot" +length = 0.6333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["shoot"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_mras8"] +resource_name = "walk_looped" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_1kvym"] +resource_name = "walk" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_1epbr"] +resource_name = "RESET" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [""] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_x5gja"] +_data = { +"-- Empty --": SubResource("Animation_1epbr"), +"RESET": SubResource("Animation_1epbr"), +"aim": SubResource("Animation_awb25"), +"aim_looped": SubResource("Animation_8oucm"), +"death": SubResource("Animation_qkjth"), +"death_looped": SubResource("Animation_ua7q4"), +"hoverboard": SubResource("Animation_5ump1"), +"hoverboard_looped": SubResource("Animation_nk1ja"), +"idle": SubResource("Animation_v5cis"), +"idle-turn": SubResource("Animation_i7uvx"), +"idle-turn_looped": SubResource("Animation_ekfrt"), +"idle_looped": SubResource("Animation_r65d1"), +"jump": SubResource("Animation_p00wv"), +"jump_looped": SubResource("Animation_h7d1m"), +"portal": SubResource("Animation_7n3cr"), +"portal_looped": SubResource("Animation_h28vd"), +"run": SubResource("Animation_f0l7r"), +"run-to-idle": SubResource("Animation_s4idr"), +"run-to-idle_looped": SubResource("Animation_tqo2u"), +"run_looped": SubResource("Animation_narkj"), +"shoot": SubResource("Animation_p08dp"), +"shoot_looped": SubResource("Animation_u87bq"), +"walk": SubResource("Animation_1kvym"), +"walk_looped": SubResource("Animation_mras8") +} + +[sub_resource type="Animation" id="Animation_7c84c"] +resource_name = "gun-grab_looped" +length = 0.666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["gun-grab"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_fb0wh"] +resource_name = "gun-grab" +length = 0.666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["gun-grab"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_h2sun"] +resource_name = "gun-holster_looped" +length = 0.666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["gun-holster"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_jllc7"] +resource_name = "gun-holster" +length = 0.666667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["gun-holster"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_d0xy4"] +resource_name = "jump_looped" +length = 1.53333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_junop"] +resource_name = "jump" +length = 1.53333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["jump"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_g8fnf"] +resource_name = "roar_looped" +length = 2.13333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["roar"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_wujnd"] +resource_name = "roar" +length = 2.13333 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["roar"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_q37yj"] +resource_name = "walk_looped" +length = 1.26667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_kv7gf"] +resource_name = "walk" +length = 1.26667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": ["walk"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_3x4j7"] +resource_name = "RESET" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation_name") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [""] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:loop") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_i0k7e"] +_data = { +"-- Empty --": SubResource("Animation_3x4j7"), +"RESET": SubResource("Animation_3x4j7"), +"gun-grab": SubResource("Animation_fb0wh"), +"gun-grab_looped": SubResource("Animation_7c84c"), +"gun-holster": SubResource("Animation_jllc7"), +"gun-holster_looped": SubResource("Animation_h2sun"), +"jump": SubResource("Animation_junop"), +"jump_looped": SubResource("Animation_d0xy4"), +"roar": SubResource("Animation_wujnd"), +"roar_looped": SubResource("Animation_g8fnf"), +"walk": SubResource("Animation_kv7gf"), +"walk_looped": SubResource("Animation_q37yj") +} + +[sub_resource type="Animation" id="25"] +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Spineboy:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(72.0001, 520)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Raptor:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1284, 520)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Spineboy/SpineAnimationTrack:mix_duration") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [-1.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Spineboy/SpineAnimationTrack:reverse") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Raptor/SpineAnimationTrack:mix_duration") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [-1.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Spineboy/SpineAnimationTrack:time_scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} + +[sub_resource type="Animation" id="1"] +resource_name = "cutscene" +length = 10.0 +step = 0.02 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Spineboy:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 4, 10), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(72.0001, 520), Vector2(500, 520), Vector2(500, 520)] +} +tracks/1/type = "animation" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Spineboy/SpineAnimationTrack/Spineboy Track 0") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"clips": PackedStringArray("walk_looped", "idle", "death", "idle"), +"times": PackedFloat32Array(0, 4, 4.34, 8.86) +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Spineboy/SpineAnimationTrack2:mix_duration") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0.1] +} +tracks/3/type = "animation" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Spineboy/SpineAnimationTrack2/Spineboy Track 1") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"clips": PackedStringArray("-- Empty --", "aim", "-- Empty --"), +"times": PackedFloat32Array(0.14, 2.5, 3.94) +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Raptor:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 2.02, 3.7, 10), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1284, 520), Vector2(1284, 520), Vector2(750, 520), Vector2(750, 520)] +} +tracks/5/type = "animation" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Raptor/SpineAnimationTrack/Raptor Track 0") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"clips": PackedStringArray("walk_looped", "roar_looped", "-- Empty --"), +"times": PackedFloat32Array(0.46, 3.7, 9.64) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Spineboy/SpineAnimationTrack:mix_duration") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.2] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Raptor/SpineAnimationTrack:mix_duration") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.2] +} + +[sub_resource type="Animation" id="83"] +resource_name = "slow-moonwalk" +length = 5.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Spineboy:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(905, 565), Vector2(70, 565)] +} +tracks/1/type = "animation" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Spineboy/SpineAnimationTrack/Spineboy Track 0") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"clips": PackedStringArray("walk_looped"), +"times": PackedFloat32Array(0) +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Spineboy/SpineAnimationTrack:reverse") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Spineboy/SpineAnimationTrack:time_scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.5] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_3lgey"] +_data = { +"RESET": SubResource("25"), +"cutscene": SubResource("1"), +"slow-moonwalk": SubResource("83") +} + +[node name="Node2D2" type="Node2D"] +script = ExtResource("1_sfb8c") + +[node name="Spineboy" type="SpineSprite" parent="."] +position = Vector2(72.0001, 520) +scale = Vector2(0.323942, 0.323942) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="SpineAnimationTrack" type="SpineAnimationTrack" parent="Spineboy"] +track_index = 0 +debug = true + +[node name="Spineboy Track 0" type="AnimationPlayer" parent="Spineboy/SpineAnimationTrack"] +libraries = { +"": SubResource("AnimationLibrary_foxls") +} + +[node name="SpineAnimationTrack2" type="SpineAnimationTrack" parent="Spineboy"] +track_index = 1 +mix_duration = 0.1 +debug = true + +[node name="Spineboy Track 1" type="AnimationPlayer" parent="Spineboy/SpineAnimationTrack2"] +libraries = { +"": SubResource("AnimationLibrary_x5gja") +} + +[node name="Raptor" type="SpineSprite" parent="."] +position = Vector2(1284, 520) +scale = Vector2(-0.328761, 0.328761) +skeleton_data_res = ExtResource("3") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="SpineAnimationTrack" type="SpineAnimationTrack" parent="Raptor"] +track_index = 0 + +[node name="Raptor Track 0" type="AnimationPlayer" parent="Raptor/SpineAnimationTrack"] +libraries = { +"": SubResource("AnimationLibrary_i0k7e") +} + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_3lgey") +} diff --git a/spine-godot/example-v4-csharp/examples/09-custom-material/custom-material.tscn b/spine-godot/example-v4-csharp/examples/09-custom-material/custom-material.tscn new file mode 100644 index 000000000..4ca51ec15 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/09-custom-material/custom-material.tscn @@ -0,0 +1,45 @@ +[gd_scene load_steps=6 format=3 uid="uid://b4p2vn7bwm52a"] + +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] + +[sub_resource type="Shader" id="1"] +code = "shader_type canvas_item; + +void fragment() { + COLOR = texture(TEXTURE, UV); + COLOR.r = 0.0; +}" + +[sub_resource type="ShaderMaterial" id="2"] +shader = SubResource("1") + +[sub_resource type="Shader" id="3"] +code = "shader_type canvas_item; + +void fragment() { + COLOR = texture(TEXTURE, UV); + COLOR.b = 0.0; +}" + +[sub_resource type="ShaderMaterial" id="4"] +shader = SubResource("3") + +[node name="Node2D" type="Node2D"] + +[node name="SpineSprite" type="SpineSprite" parent="."] +position = Vector2(501, 507) +scale = Vector2(0.546374, 0.546373) +skeleton_data_res = ExtResource("1") +normal_material = SubResource("2") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="GunSlot" type="SpineSlotNode" parent="SpineSprite"] +show_behind_parent = true +position = Vector2(40.8753, -276.036) +rotation = 0.837234 +scale = Vector2(1, 1) +slot_name = "gun" +normal_material = SubResource("4") diff --git a/spine-godot/example-v4-csharp/examples/10-2d-lighting/2d-lighting.tscn b/spine-godot/example-v4-csharp/examples/10-2d-lighting/2d-lighting.tscn new file mode 100644 index 000000000..00a7f4ab5 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/10-2d-lighting/2d-lighting.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=4 format=3 uid="uid://rt2llskmx7xm"] + +[ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raptor-data.tres" id="1"] +[ext_resource type="Script" path="res://examples/10-2d-lighting/Lighting.cs" id="1_cdnty"] +[ext_resource type="Texture2D" uid="uid://cggfs567rn1ay" path="res://assets/raptor/light-sprite.png" id="2"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_cdnty") + +[node name="SpineSprite" type="SpineSprite" parent="."] +position = Vector2(576, 506) +scale = Vector2(0.458967, 0.458967) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" +preview_animation = "-- Empty --" +preview_frame = false +preview_time = 0.0 + +[node name="Light2D" type="PointLight2D" parent="."] +position = Vector2(691, 283) +scale = Vector2(1.51563, 1.51563) +color = Color(1, 0.0117647, 0.0117647, 1) +texture = ExtResource("2") +height = 100.0 + +[node name="CanvasModulate" type="CanvasModulate" parent="."] +color = Color(0.223529, 0.160784, 0.160784, 1) diff --git a/spine-godot/example-v4-csharp/examples/10-2d-lighting/Lighting.cs b/spine-godot/example-v4-csharp/examples/10-2d-lighting/Lighting.cs new file mode 100644 index 000000000..c2cd83800 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/10-2d-lighting/Lighting.cs @@ -0,0 +1,10 @@ +using Godot; +using System; + +public partial class Lighting : Node2D +{ + public override void _Ready() + { + GetNode("SpineSprite").GetAnimationState().SetAnimation("walk", true, 0); + } +} diff --git a/spine-godot/example-v4-csharp/examples/11-bone-node/BoneNode.cs b/spine-godot/example-v4-csharp/examples/11-bone-node/BoneNode.cs new file mode 100644 index 000000000..931399160 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/11-bone-node/BoneNode.cs @@ -0,0 +1,54 @@ +using Godot; +using System; + +public partial class BoneNode : Node2D +{ + private SpineSprite spineboy; + private SpineBoneNode centerBone; + private RayCast2D centerRay; + private SpineBoneNode targetBone; + private RayCast2D targetRay; + private SpineBoneNode hipBone; + private float centerHipDistance = 0; + + public override void _Ready() + { + spineboy = GetNode("SpineSprite"); + centerBone = GetNode("SpineSprite/HoverboardCenterBone"); + centerRay = GetNode("SpineSprite/HoverboardCenterBone/CenterRay"); + targetBone = GetNode("SpineSprite/HoverboardTargetBone"); + targetRay = GetNode("SpineSprite/HoverboardTargetBone/TargetRay"); + hipBone = GetNode("SpineSprite/HipBone"); + spineboy.GetAnimationState().SetAnimation("hoverboard", true, 0); + spineboy.UpdateSkeleton(0); + centerHipDistance = hipBone.GlobalPosition.Y - centerBone.GlobalPosition.Y; + } + + public override void _Process(double delta) + { + if (targetRay.IsColliding()) + { + var newPosition = targetBone.GlobalPosition; + newPosition.Y = targetRay.GetCollisionPoint().Y - 30; + targetBone.Position = newPosition; + } + + if (centerRay.IsColliding()) + { + var newPosition = centerBone.GlobalPosition; + newPosition.Y = centerRay.GetCollisionPoint().Y - 30; + centerBone.Position = newPosition; + } + + if (Math.Abs(hipBone.GlobalPosition.Y - centerBone.GlobalPosition.Y) - Math.Abs(centerHipDistance) < 20) + { + var newPosition = hipBone.GlobalPosition; + newPosition.Y = centerBone.GlobalPosition.Y + centerHipDistance; + hipBone.Position = newPosition; + } + + var position = spineboy.GlobalPosition; + position.X += (float)delta * 150; + spineboy.GlobalPosition = position; + } +} diff --git a/spine-godot/example-v4-csharp/examples/11-bone-node/bone-node.tscn b/spine-godot/example-v4-csharp/examples/11-bone-node/bone-node.tscn new file mode 100644 index 000000000..b9a9050e4 --- /dev/null +++ b/spine-godot/example-v4-csharp/examples/11-bone-node/bone-node.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=3 format=3 uid="uid://chrw4i0nksphn"] + +[ext_resource type="Script" path="res://examples/11-bone-node/BoneNode.cs" id="1_sspn4"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_sspn4") + +[node name="SpineSprite" type="SpineSprite" parent="."] +position = Vector2(13, 569) +scale = Vector2(0.278096, 0.278096) +skeleton_data_res = ExtResource("2") +update_mode = 1 +preview_skin = "Default" +preview_animation = "hoverboard" +preview_frame = true +preview_time = 0.0 + +[node name="HoverboardCenterBone" type="SpineBoneNode" parent="SpineSprite"] +show_behind_parent = true +position = Vector2(-10.1996, -68.2213) +rotation = -0.00403465 +bone_name = "hoverboard-controller" +bone_mode = 1 + +[node name="CenterRay" type="RayCast2D" parent="SpineSprite/HoverboardCenterBone"] +target_position = Vector2(0, 10000) + +[node name="HoverboardTargetBone" type="SpineBoneNode" parent="SpineSprite"] +show_behind_parent = true +position = Vector2(258.903, -71.9176) +rotation = -0.000872665 +bone_name = "board-ik" +bone_mode = 1 + +[node name="TargetRay" type="RayCast2D" parent="SpineSprite/HoverboardTargetBone"] +position = Vector2(-3.59872, 3.59277) +target_position = Vector2(0, 10000) + +[node name="HipBone" type="SpineBoneNode" parent="SpineSprite"] +show_behind_parent = true +position = Vector2(-53.7338, -279.363) +rotation = -0.000872665 +bone_name = "hip" +bone_mode = 1 + +[node name="Polygon2D" type="Polygon2D" parent="."] +polygon = PackedVector2Array(0, 596, 309, 471, 516, 515, 762, 447, 984, 504, 1023, 505, 1024, 596) + +[node name="StaticBody2D" type="StaticBody2D" parent="Polygon2D"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Polygon2D/StaticBody2D"] +polygon = PackedVector2Array(3, 592, 304, 469, 516, 514, 762, 443, 984, 499, 1252, 498, 1280, 596) diff --git a/spine-godot/example-v4-csharp/godot-nuget/Godot.NET.Sdk.4.1.1.nupkg b/spine-godot/example-v4-csharp/godot-nuget/Godot.NET.Sdk.4.1.1.nupkg new file mode 100644 index 000000000..825a2f777 Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/Godot.NET.Sdk.4.1.1.nupkg differ diff --git a/spine-godot/example-v4-csharp/godot-nuget/Godot.SourceGenerators.4.1.1.nupkg b/spine-godot/example-v4-csharp/godot-nuget/Godot.SourceGenerators.4.1.1.nupkg new file mode 100644 index 000000000..d2f379607 Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/Godot.SourceGenerators.4.1.1.nupkg differ diff --git a/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.nupkg b/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.nupkg new file mode 100644 index 000000000..c2a096aa6 Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.nupkg differ diff --git a/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.snupkg b/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.snupkg new file mode 100644 index 000000000..ca382a25c Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/GodotSharp.4.1.1.snupkg differ diff --git a/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.nupkg b/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.nupkg new file mode 100644 index 000000000..a05c4aa31 Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.nupkg differ diff --git a/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.snupkg b/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.snupkg new file mode 100644 index 000000000..9fb797f82 Binary files /dev/null and b/spine-godot/example-v4-csharp/godot-nuget/GodotSharpEditor.4.1.1.snupkg differ diff --git a/spine-godot/example-v4-csharp/icon.png b/spine-godot/example-v4-csharp/icon.png new file mode 100644 index 000000000..c98fbb601 Binary files /dev/null and b/spine-godot/example-v4-csharp/icon.png differ diff --git a/spine-godot/example-v4-csharp/icon.png.import b/spine-godot/example-v4-csharp/icon.png.import new file mode 100644 index 000000000..aab28cada --- /dev/null +++ b/spine-godot/example-v4-csharp/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8ud5n2ywp5ba" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/spine-godot/example-v4-csharp/nuget.config b/spine-godot/example-v4-csharp/nuget.config new file mode 100644 index 000000000..f366e0dc9 --- /dev/null +++ b/spine-godot/example-v4-csharp/nuget.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/spine-godot/example-v4-csharp/project.godot b/spine-godot/example-v4-csharp/project.godot new file mode 100644 index 000000000..06ebc2532 --- /dev/null +++ b/spine-godot/example-v4-csharp/project.godot @@ -0,0 +1,39 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="spine-godot-examples" +run/main_scene="res://examples/04-simple-input/simple-input.tscn" +config/features=PackedStringArray("4.1", "C#") +run/low_processor_mode=true +config/icon="res://icon.png" + +[dotnet] + +project/assembly_name="spine-godot-examples" + +[global] + +batch=false + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +batching/parameters/max_join_item_commands=100 +batching/parameters/batch_buffer_size=65535 +batching/parameters/item_reordering_lookahead=100 +quality/driver/driver_name="GLES2" +vram_compression/import_etc=true +vram_compression/import_etc2=false +environment/default_environment="res://default_env.tres" diff --git a/spine-godot/example-v4-csharp/spine-godot-examples.csproj b/spine-godot/example-v4-csharp/spine-godot-examples.csproj new file mode 100644 index 000000000..764d270dd --- /dev/null +++ b/spine-godot/example-v4-csharp/spine-godot-examples.csproj @@ -0,0 +1,7 @@ + + + net6.0 + true + spinegodotexamples + + \ No newline at end of file diff --git a/spine-godot/example-v4-csharp/spine-godot-examples.sln b/spine-godot/example-v4-csharp/spine-godot-examples.sln new file mode 100644 index 000000000..9a4b80dd2 --- /dev/null +++ b/spine-godot/example-v4-csharp/spine-godot-examples.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spine-godot-examples", "spine-godot-examples.csproj", "{B21498ED-66AD-4BA6-9E10-71D7C93549C9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {B21498ED-66AD-4BA6-9E10-71D7C93549C9}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/spine-godot/spine_godot/GodotSpineExtension.cpp b/spine-godot/spine_godot/GodotSpineExtension.cpp index 877e767aa..12f058252 100644 --- a/spine-godot/spine_godot/GodotSpineExtension.cpp +++ b/spine-godot/spine_godot/GodotSpineExtension.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "GodotSpineExtension.h" diff --git a/spine-godot/spine_godot/GodotSpineExtension.h b/spine-godot/spine_godot/GodotSpineExtension.h index 0d7a3e861..d8a1e9493 100644 --- a/spine-godot/spine_godot/GodotSpineExtension.h +++ b/spine-godot/spine_godot/GodotSpineExtension.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineAnimation.cpp b/spine-godot/spine_godot/SpineAnimation.cpp index 944487687..2cea7bb23 100644 --- a/spine-godot/spine_godot/SpineAnimation.cpp +++ b/spine-godot/spine_godot/SpineAnimation.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAnimation.h" diff --git a/spine-godot/spine_godot/SpineAnimation.h b/spine-godot/spine_godot/SpineAnimation.h index 3a04c73c3..15d46421d 100644 --- a/spine-godot/spine_godot/SpineAnimation.h +++ b/spine-godot/spine_godot/SpineAnimation.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineAnimationState.cpp b/spine-godot/spine_godot/SpineAnimationState.cpp index 7052bc91b..275013388 100644 --- a/spine-godot/spine_godot/SpineAnimationState.cpp +++ b/spine-godot/spine_godot/SpineAnimationState.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAnimationState.h" diff --git a/spine-godot/spine_godot/SpineAnimationState.h b/spine-godot/spine_godot/SpineAnimationState.h index 88a0a3865..aec8e02da 100644 --- a/spine-godot/spine_godot/SpineAnimationState.h +++ b/spine-godot/spine_godot/SpineAnimationState.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineAnimationTrack.cpp b/spine-godot/spine_godot/SpineAnimationTrack.cpp index 9867e7522..344dbd7cf 100644 --- a/spine-godot/spine_godot/SpineAnimationTrack.cpp +++ b/spine-godot/spine_godot/SpineAnimationTrack.cpp @@ -1,4 +1,33 @@ -#include "SpineAnimationTrack.h" +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#include "SpineAnimationTrack.h" #if VERSION_MAJOR > 3 #include "core/config/engine.h" #else @@ -85,9 +114,9 @@ void SpineAnimationTrack::_notification(int what) { sprite = Object::cast_to(get_parent()); if (sprite) #if VERSION_MAJOR > 3 - sprite->connect("before_animation_state_update", callable_mp(this, &SpineAnimationTrack::update_animation_state)); + sprite->connect(SNAME("before_animation_state_update"), callable_mp(this, &SpineAnimationTrack::update_animation_state)); #else - sprite->connect("before_animation_state_update", this, "update_animation_state"); + sprite->connect(SNAME("before_animation_state_update"), this, SNAME("update_animation_state")); #endif NOTIFY_PROPERTY_LIST_CHANGED(); break; @@ -99,9 +128,9 @@ void SpineAnimationTrack::_notification(int what) { case NOTIFICATION_UNPARENTED: { if (sprite) { #if VERSION_MAJOR > 3 - sprite->disconnect("before_animation_state_update", callable_mp(this, &SpineAnimationTrack::update_animation_state)); + sprite->disconnect(SNAME("before_animation_state_update"), callable_mp(this, &SpineAnimationTrack::update_animation_state)); #else - sprite->disconnect("before_animation_state_update", this, "update_animation_state"); + sprite->disconnect(SNAME("before_animation_state_update"), this, SNAME("update_animation_state")); #endif sprite = nullptr; } diff --git a/spine-godot/spine_godot/SpineAnimationTrack.h b/spine-godot/spine_godot/SpineAnimationTrack.h index 67f79d255..6ae49663e 100644 --- a/spine-godot/spine_godot/SpineAnimationTrack.h +++ b/spine-godot/spine_godot/SpineAnimationTrack.h @@ -1,16 +1,16 @@ -/****************************************************************************** +/****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineAtlasResource.cpp b/spine-godot/spine_godot/SpineAtlasResource.cpp index f766eec87..c56ee34e1 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.cpp +++ b/spine-godot/spine_godot/SpineAtlasResource.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAtlasResource.h" @@ -194,7 +194,8 @@ Error SpineAtlasResource::load_from_file(const String &path) { clear(); texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix); - atlas = new spine::Atlas(atlas_data.utf8(), atlas_data.size(), source_path.get_base_dir().utf8(), texture_loader); + auto utf8 = atlas_data.utf8(); + atlas = new spine::Atlas(utf8.ptr(), utf8.size(), source_path.get_base_dir().utf8(), texture_loader); if (atlas) return OK; clear(); diff --git a/spine-godot/spine_godot/SpineAtlasResource.h b/spine-godot/spine_godot/SpineAtlasResource.h index 3ae6344ce..6ae492990 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.h +++ b/spine-godot/spine_godot/SpineAtlasResource.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineAttachment.cpp b/spine-godot/spine_godot/SpineAttachment.cpp index 7b84c655b..df9684ab1 100644 --- a/spine-godot/spine_godot/SpineAttachment.cpp +++ b/spine-godot/spine_godot/SpineAttachment.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAttachment.h" diff --git a/spine-godot/spine_godot/SpineAttachment.h b/spine-godot/spine_godot/SpineAttachment.h index 76826c102..e547319d1 100644 --- a/spine-godot/spine_godot/SpineAttachment.h +++ b/spine-godot/spine_godot/SpineAttachment.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineBone.cpp b/spine-godot/spine_godot/SpineBone.cpp index a0994bb52..58ccbf082 100644 --- a/spine-godot/spine_godot/SpineBone.cpp +++ b/spine-godot/spine_godot/SpineBone.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineBone.h" diff --git a/spine-godot/spine_godot/SpineBone.h b/spine-godot/spine_godot/SpineBone.h index c7daebf8f..1af04a7b6 100644 --- a/spine-godot/spine_godot/SpineBone.h +++ b/spine-godot/spine_godot/SpineBone.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineBoneData.cpp b/spine-godot/spine_godot/SpineBoneData.cpp index 96e070ba6..bcdc4bf45 100644 --- a/spine-godot/spine_godot/SpineBoneData.cpp +++ b/spine-godot/spine_godot/SpineBoneData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineBoneData.h" diff --git a/spine-godot/spine_godot/SpineBoneData.h b/spine-godot/spine_godot/SpineBoneData.h index 2c13f2b36..4725624d3 100644 --- a/spine-godot/spine_godot/SpineBoneData.h +++ b/spine-godot/spine_godot/SpineBoneData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineBoneNode.cpp b/spine-godot/spine_godot/SpineBoneNode.cpp index f9f0b0c21..706eb8c9e 100644 --- a/spine-godot/spine_godot/SpineBoneNode.cpp +++ b/spine-godot/spine_godot/SpineBoneNode.cpp @@ -1,16 +1,16 @@ -/****************************************************************************** -* Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineBoneNode.h" @@ -59,9 +59,9 @@ void SpineBoneNode::_notification(int what) { SpineSprite *sprite = find_parent_sprite(); if (sprite) { #if VERSION_MAJOR > 3 - sprite->connect("world_transforms_changed", callable_mp(this, &SpineBoneNode::on_world_transforms_changed)); + sprite->connect(SNAME("world_transforms_changed"), callable_mp(this, &SpineBoneNode::on_world_transforms_changed)); #else - sprite->connect("world_transforms_changed", this, "_on_world_transforms_changed"); + sprite->connect(SNAME("world_transforms_changed"), this, SNAME("_on_world_transforms_changed")); #endif update_transform(sprite); #if VERSION_MAJOR == 3 @@ -83,9 +83,9 @@ void SpineBoneNode::_notification(int what) { SpineSprite *sprite = find_parent_sprite(); if (sprite) { #if VERSION_MAJOR > 3 - sprite->disconnect("world_transforms_changed", callable_mp(this, &SpineBoneNode::on_world_transforms_changed)); + sprite->disconnect(SNAME("world_transforms_changed"), callable_mp(this, &SpineBoneNode::on_world_transforms_changed)); #else - sprite->disconnect("world_transforms_changed", this, "_on_world_transforms_changed"); + sprite->disconnect(SNAME("world_transforms_changed"), this, SNAME("_on_world_transforms_changed")); #endif } break; diff --git a/spine-godot/spine_godot/SpineBoneNode.h b/spine-godot/spine_godot/SpineBoneNode.h index 52ec12cd4..f9367622f 100644 --- a/spine-godot/spine_godot/SpineBoneNode.h +++ b/spine-godot/spine_godot/SpineBoneNode.h @@ -1,16 +1,16 @@ -/****************************************************************************** -* Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineCommon.h b/spine-godot/spine_godot/SpineCommon.h index 622e566e9..e09384e86 100644 --- a/spine-godot/spine_godot/SpineCommon.h +++ b/spine-godot/spine_godot/SpineCommon.h @@ -1,16 +1,16 @@ -/****************************************************************************** -* Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_COMMON_H @@ -56,6 +56,9 @@ #define VARIANT_FLOAT Variant::REAL #define GDREGISTER_CLASS(x) ClassDB::register_class() #define GEOMETRY2D Geometry +#ifndef SNAME +#define SNAME(m_arg) ([]() -> const StringName & { static StringName sname = _scs_create(m_arg); return sname; })() +#endif #endif #define SPINE_CHECK(obj, ret) \ @@ -65,6 +68,7 @@ } #define SPINE_STRING(x) spine::String((x).utf8()) +#define SPINE_STRING_TMP(x) spine::String((x).utf8(), true, false) // Can't do template classes with Godot's object model :( class SpineObjectWrapper : public REFCOUNTED { @@ -81,9 +85,9 @@ protected: void spine_objects_invalidated() { spine_object = nullptr; #if VERSION_MAJOR > 3 - spine_owner->disconnect("_internal_spine_objects_invalidated", callable_mp(this, &SpineObjectWrapper::spine_objects_invalidated)); + spine_owner->disconnect(SNAME("_internal_spine_objects_invalidated"), callable_mp(this, &SpineObjectWrapper::spine_objects_invalidated)); #else - spine_owner->disconnect("_internal_spine_objects_invalidated", this, "_internal_spine_objects_invalidated"); + spine_owner->disconnect(SNAME("_internal_spine_objects_invalidated"), this, SNAME("_internal_spine_objects_invalidated")); #endif } @@ -108,9 +112,9 @@ protected: spine_owner = (Object *) _owner; spine_object = _object; #if VERSION_MAJOR > 3 - spine_owner->connect("_internal_spine_objects_invalidated", callable_mp(this, &SpineObjectWrapper::spine_objects_invalidated)); + spine_owner->connect(SNAME("_internal_spine_objects_invalidated"), callable_mp(this, &SpineObjectWrapper::spine_objects_invalidated)); #else - spine_owner->connect("_internal_spine_objects_invalidated", this, "_internal_spine_objects_invalidated"); + spine_owner->connect(SNAME("_internal_spine_objects_invalidated"), this, SNAME("_internal_spine_objects_invalidated")); #endif } diff --git a/spine-godot/spine_godot/SpineConstant.cpp b/spine-godot/spine_godot/SpineConstant.cpp index ef0f73166..9cfd1587f 100644 --- a/spine-godot/spine_godot/SpineConstant.cpp +++ b/spine-godot/spine_godot/SpineConstant.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineConstant.h" diff --git a/spine-godot/spine_godot/SpineConstant.h b/spine-godot/spine_godot/SpineConstant.h index 6d90da497..927630292 100644 --- a/spine-godot/spine_godot/SpineConstant.h +++ b/spine-godot/spine_godot/SpineConstant.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineConstraintData.cpp b/spine-godot/spine_godot/SpineConstraintData.cpp index 36d93aaa1..744ad7bcd 100644 --- a/spine-godot/spine_godot/SpineConstraintData.cpp +++ b/spine-godot/spine_godot/SpineConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineConstraintData.h" diff --git a/spine-godot/spine_godot/SpineConstraintData.h b/spine-godot/spine_godot/SpineConstraintData.h index 1ea763bc2..d2438d559 100644 --- a/spine-godot/spine_godot/SpineConstraintData.h +++ b/spine-godot/spine_godot/SpineConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineEditorPlugin.cpp b/spine-godot/spine_godot/SpineEditorPlugin.cpp index a631ecad0..9c202f7b9 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.cpp +++ b/spine-godot/spine_godot/SpineEditorPlugin.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifdef TOOLS_ENABLED @@ -220,18 +220,18 @@ void SpineEditorPropertyAnimationMixes::update_property() { hbox->add_child(delete_button); delete_button->set_text("Remove"); #if VERSION_MAJOR > 3 - delete_button->connect("pressed", callable_mp(this, &SpineEditorPropertyAnimationMixes::delete_mix).bind(varray(i))); + delete_button->connect(SNAME("pressed"), callable_mp(this, &SpineEditorPropertyAnimationMixes::delete_mix).bind(varray(i))); #else - delete_button->connect("pressed", this, "delete_mix", varray(i)); + delete_button->connect(SNAME("pressed"), this, SNAME("delete_mix"), varray(i)); #endif } auto add_mix_button = memnew(Button); add_mix_button->set_text("Add mix"); #if VERSION_MAJOR > 3 - add_mix_button->connect("pressed", callable_mp(this, &SpineEditorPropertyAnimationMixes::add_mix)); + add_mix_button->connect(SNAME("pressed"), callable_mp(this, &SpineEditorPropertyAnimationMixes::add_mix)); #else - add_mix_button->connect("pressed", this, "add_mix"); + add_mix_button->connect(SNAME("pressed"), this, SNAME("add_mix")); #endif container->add_child(add_mix_button); @@ -312,9 +312,9 @@ void SpineEditorPropertyAnimationMix::update_property() { from_enum->set_object_and_property(mix, "from"); from_enum->update_property(); #if VERSION_MAJOR > 3 - from_enum->connect("property_changed", callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); + from_enum->connect(SNAME("property_changed"), callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); #else - from_enum->connect("property_changed", this, "data_changed"); + from_enum->connect(SNAME("property_changed"), this, SNAME("data_changed")); #endif container->add_child(from_enum); @@ -326,9 +326,9 @@ void SpineEditorPropertyAnimationMix::update_property() { to_enum->set_object_and_property(mix, "to"); to_enum->update_property(); #if VERSION_MAJOR > 3 - to_enum->connect("property_changed", callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); + to_enum->connect(SNAME("property_changed"), callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); #else - to_enum->connect("property_changed", this, "data_changed"); + to_enum->connect(SNAME("property_changed"), this, SNAME("data_changed")); #endif container->add_child(to_enum); @@ -340,9 +340,9 @@ void SpineEditorPropertyAnimationMix::update_property() { mix_float->set_object_and_property(mix, "mix"); mix_float->update_property(); #if VERSION_MAJOR > 3 - mix_float->connect("property_changed", callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); + mix_float->connect(SNAME("property_changed"), callable_mp(this, &SpineEditorPropertyAnimationMix::data_changed)); #else - mix_float->connect("property_changed", this, "data_changed"); + mix_float->connect(SNAME("property_changed"), this, SNAME("data_changed")); #endif container->add_child(mix_float); diff --git a/spine-godot/spine_godot/SpineEditorPlugin.h b/spine-godot/spine_godot/SpineEditorPlugin.h index 4660c7ac5..527e54abf 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.h +++ b/spine-godot/spine_godot/SpineEditorPlugin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineEvent.cpp b/spine-godot/spine_godot/SpineEvent.cpp index 612a406e2..5931bee0a 100644 --- a/spine-godot/spine_godot/SpineEvent.cpp +++ b/spine-godot/spine_godot/SpineEvent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineEvent.h" diff --git a/spine-godot/spine_godot/SpineEvent.h b/spine-godot/spine_godot/SpineEvent.h index 2dfd90ce8..6873668c4 100644 --- a/spine-godot/spine_godot/SpineEvent.h +++ b/spine-godot/spine_godot/SpineEvent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineEventData.cpp b/spine-godot/spine_godot/SpineEventData.cpp index 9142809d1..cd30495e5 100644 --- a/spine-godot/spine_godot/SpineEventData.cpp +++ b/spine-godot/spine_godot/SpineEventData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineEventData.h" @@ -38,6 +38,8 @@ void SpineEventData::_bind_methods() { ClassDB::bind_method(D_METHOD("set_float_value", "v"), &SpineEventData::set_float_value); ClassDB::bind_method(D_METHOD("get_string_value"), &SpineEventData::get_string_value); ClassDB::bind_method(D_METHOD("set_string_value", "v"), &SpineEventData::set_string_value); + ClassDB::bind_method(D_METHOD("get_audio_path"), &SpineEventData::get_audio_path); + ClassDB::bind_method(D_METHOD("set_audio_path", "v"), &SpineEventData::set_audio_path); ClassDB::bind_method(D_METHOD("get_volume"), &SpineEventData::get_volume); ClassDB::bind_method(D_METHOD("set_volume", "v"), &SpineEventData::set_volume); ClassDB::bind_method(D_METHOD("get_balance"), &SpineEventData::get_balance); @@ -79,6 +81,16 @@ void SpineEventData::set_string_value(const String &v) { get_spine_object()->setStringValue(spine::String(v.utf8())); } +String SpineEventData::get_audio_path() { + SPINE_CHECK(get_spine_object(), "") + return get_spine_object()->getAudioPath().buffer(); +} + +void SpineEventData::set_audio_path(const String &v) { + SPINE_CHECK(get_spine_object(), ) + get_spine_object()->setAudioPath(spine::String(v.utf8())); +} + float SpineEventData::get_volume() { SPINE_CHECK(get_spine_object(), 0) return get_spine_object()->getVolume(); diff --git a/spine-godot/spine_godot/SpineEventData.h b/spine-godot/spine_godot/SpineEventData.h index b6bd18053..b5a1cfa8e 100644 --- a/spine-godot/spine_godot/SpineEventData.h +++ b/spine-godot/spine_godot/SpineEventData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once @@ -55,6 +55,10 @@ public: void set_string_value(const String &v); + String get_audio_path(); + + void set_audio_path(const String &v); + float get_volume(); void set_volume(float v); diff --git a/spine-godot/spine_godot/SpineIkConstraint.cpp b/spine-godot/spine_godot/SpineIkConstraint.cpp index 045b09a84..5bc7a3039 100644 --- a/spine-godot/spine_godot/SpineIkConstraint.cpp +++ b/spine-godot/spine_godot/SpineIkConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineIkConstraint.h" diff --git a/spine-godot/spine_godot/SpineIkConstraint.h b/spine-godot/spine_godot/SpineIkConstraint.h index 06189727b..68876a0b7 100644 --- a/spine-godot/spine_godot/SpineIkConstraint.h +++ b/spine-godot/spine_godot/SpineIkConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineIkConstraintData.cpp b/spine-godot/spine_godot/SpineIkConstraintData.cpp index c63f2bd33..b029cb58e 100644 --- a/spine-godot/spine_godot/SpineIkConstraintData.cpp +++ b/spine-godot/spine_godot/SpineIkConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineIkConstraintData.h" diff --git a/spine-godot/spine_godot/SpineIkConstraintData.h b/spine-godot/spine_godot/SpineIkConstraintData.h index 58f3ef9d2..cdb966d10 100644 --- a/spine-godot/spine_godot/SpineIkConstraintData.h +++ b/spine-godot/spine_godot/SpineIkConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpinePathConstraint.cpp b/spine-godot/spine_godot/SpinePathConstraint.cpp index 57f2e9d3c..3e2fa293d 100644 --- a/spine-godot/spine_godot/SpinePathConstraint.cpp +++ b/spine-godot/spine_godot/SpinePathConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpinePathConstraint.h" diff --git a/spine-godot/spine_godot/SpinePathConstraint.h b/spine-godot/spine_godot/SpinePathConstraint.h index 7ceb4db92..36584282b 100644 --- a/spine-godot/spine_godot/SpinePathConstraint.h +++ b/spine-godot/spine_godot/SpinePathConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpinePathConstraintData.cpp b/spine-godot/spine_godot/SpinePathConstraintData.cpp index 08722076c..3cae6b359 100644 --- a/spine-godot/spine_godot/SpinePathConstraintData.cpp +++ b/spine-godot/spine_godot/SpinePathConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpinePathConstraintData.h" diff --git a/spine-godot/spine_godot/SpinePathConstraintData.h b/spine-godot/spine_godot/SpinePathConstraintData.h index 3582aa7e0..67a314f71 100644 --- a/spine-godot/spine_godot/SpinePathConstraintData.h +++ b/spine-godot/spine_godot/SpinePathConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineRendererObject.h b/spine-godot/spine_godot/SpineRendererObject.h index 30bd525a3..f222660fc 100644 --- a/spine-godot/spine_godot/SpineRendererObject.h +++ b/spine-godot/spine_godot/SpineRendererObject.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef GODOT_SPINERENDEREROBJECT_H diff --git a/spine-godot/spine_godot/SpineSkeleton.cpp b/spine-godot/spine_godot/SpineSkeleton.cpp index 1e8564de1..ffbcbb40a 100644 --- a/spine-godot/spine_godot/SpineSkeleton.cpp +++ b/spine-godot/spine_godot/SpineSkeleton.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeleton.h" @@ -113,26 +113,34 @@ void SpineSkeleton::set_slots_to_setup_pose() { Ref SpineSkeleton::find_bone(const String &name) { SPINE_CHECK(skeleton, nullptr) if (EMPTY(name)) return nullptr; - auto bone = skeleton->findBone(SPINE_STRING(name)); + auto bone = skeleton->findBone(SPINE_STRING_TMP(name)); if (!bone) return nullptr; + if (_cached_bones.count(bone) > 0) { + return _cached_bones[bone]; + } Ref bone_ref(memnew(SpineBone)); bone_ref->set_spine_object(sprite, bone); + _cached_bones[bone] = bone_ref; return bone_ref; } Ref SpineSkeleton::find_slot(const String &name) { SPINE_CHECK(skeleton, nullptr) if (EMPTY(name)) return nullptr; - auto slot = skeleton->findSlot(SPINE_STRING(name)); + auto slot = skeleton->findSlot(SPINE_STRING_TMP(name)); if (!slot) return nullptr; + if (_cached_slots.count(slot) > 0) { + return _cached_slots[slot]; + } Ref slot_ref(memnew(SpineSlot)); slot_ref->set_spine_object(sprite, slot); + _cached_slots[slot] = slot_ref; return slot_ref; } void SpineSkeleton::set_skin_by_name(const String &skin_name) { SPINE_CHECK(skeleton, ) - skeleton->setSkin(SPINE_STRING(skin_name)); + skeleton->setSkin(SPINE_STRING_TMP(skin_name)); } void SpineSkeleton::set_skin(Ref new_skin) { @@ -144,7 +152,7 @@ void SpineSkeleton::set_skin(Ref new_skin) { Ref SpineSkeleton::get_attachment_by_slot_name(const String &slot_name, const String &attachment_name) { SPINE_CHECK(skeleton, nullptr) - auto attachment = skeleton->getAttachment(SPINE_STRING(slot_name), SPINE_STRING(attachment_name)); + auto attachment = skeleton->getAttachment(SPINE_STRING_TMP(slot_name), SPINE_STRING_TMP(attachment_name)); if (!attachment) return nullptr; Ref attachment_ref(memnew(SpineAttachment)); attachment_ref->set_spine_object(*sprite->get_skeleton_data_res(), attachment); @@ -153,7 +161,7 @@ Ref SpineSkeleton::get_attachment_by_slot_name(const String &sl Ref SpineSkeleton::get_attachment_by_slot_index(int slot_index, const String &attachment_name) { SPINE_CHECK(skeleton, nullptr) - auto attachment = skeleton->getAttachment(slot_index, SPINE_STRING(attachment_name)); + auto attachment = skeleton->getAttachment(slot_index, SPINE_STRING_TMP(attachment_name)); if (!attachment) return nullptr; Ref attachment_ref(memnew(SpineAttachment)); attachment_ref->set_spine_object(*sprite->get_skeleton_data_res(), attachment); @@ -168,7 +176,7 @@ void SpineSkeleton::set_attachment(const String &slot_name, const String &attach Ref SpineSkeleton::find_ik_constraint(const String &constraint_name) { SPINE_CHECK(skeleton, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton->findIkConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton->findIkConstraint(SPINE_STRING_TMP(constraint_name)); if (!constraint) return nullptr; Ref constraint_ref(memnew(SpineIkConstraint)); constraint_ref->set_spine_object(sprite, constraint); @@ -178,7 +186,7 @@ Ref SpineSkeleton::find_ik_constraint(const String &constrain Ref SpineSkeleton::find_transform_constraint(const String &constraint_name) { SPINE_CHECK(skeleton, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton->findTransformConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton->findTransformConstraint(SPINE_STRING_TMP(constraint_name)); if (!constraint) return nullptr; Ref constraint_ref(memnew(SpineTransformConstraint)); constraint_ref->set_spine_object(sprite, constraint); @@ -188,7 +196,7 @@ Ref SpineSkeleton::find_transform_constraint(const Str Ref SpineSkeleton::find_path_constraint(const String &constraint_name) { SPINE_CHECK(skeleton, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton->findPathConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton->findPathConstraint(SPINE_STRING_TMP(constraint_name)); if (!constraint) return nullptr; Ref constraint_ref(memnew(SpinePathConstraint)); constraint_ref->set_spine_object(sprite, constraint); diff --git a/spine-godot/spine_godot/SpineSkeleton.h b/spine-godot/spine_godot/SpineSkeleton.h index b8677d108..2d479177e 100644 --- a/spine-godot/spine_godot/SpineSkeleton.h +++ b/spine-godot/spine_godot/SpineSkeleton.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once @@ -37,6 +37,8 @@ #include "SpineTransformConstraint.h" #include "SpinePathConstraint.h" +#include + class SpineSprite; class SpineSkeleton : public REFCOUNTED { @@ -66,6 +68,9 @@ private: spine::Vector bounds_vertex_buffer; Ref last_skin; + std::unordered_map> _cached_bones; + std::unordered_map> _cached_slots; + public: SpineSkeleton(); ~SpineSkeleton() override; diff --git a/spine-godot/spine_godot/SpineSkeletonDataResource.cpp b/spine-godot/spine_godot/SpineSkeletonDataResource.cpp index 901af5357..36a0e636e 100644 --- a/spine-godot/spine_godot/SpineSkeletonDataResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonDataResource.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonDataResource.h" @@ -147,12 +147,12 @@ void SpineSkeletonDataResource::update_skeleton_data() { animation_state_data = nullptr; } - emit_signal("_internal_spine_objects_invalidated"); + emit_signal(SNAME("_internal_spine_objects_invalidated")); if (atlas_res.is_valid() && skeleton_file_res.is_valid()) { load_resources(atlas_res->get_spine_atlas(), skeleton_file_res->get_json(), skeleton_file_res->get_binary()); } - emit_signal("skeleton_data_changed"); + emit_signal(SNAME("skeleton_data_changed")); #ifdef TOOLS_ENABLED NOTIFY_PROPERTY_LIST_CHANGED(); #endif @@ -295,7 +295,7 @@ void SpineSkeletonDataResource::update_mixes() { Ref SpineSkeletonDataResource::find_animation(const String &animation_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(animation_name)) return nullptr; - auto animation = skeleton_data->findAnimation(SPINE_STRING(animation_name)); + auto animation = skeleton_data->findAnimation(SPINE_STRING_TMP(animation_name)); if (!animation) return nullptr; Ref animation_ref(memnew(SpineAnimation)); animation_ref->set_spine_object(this, animation); @@ -305,7 +305,7 @@ Ref SpineSkeletonDataResource::find_animation(const String &anim Ref SpineSkeletonDataResource::find_bone(const String &bone_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(bone_name)) return nullptr; - auto bone = skeleton_data->findBone(SPINE_STRING(bone_name)); + auto bone = skeleton_data->findBone(SPINE_STRING_TMP(bone_name)); if (!bone) return nullptr; Ref bone_ref(memnew(SpineBoneData)); bone_ref->set_spine_object(this, bone); @@ -315,7 +315,7 @@ Ref SpineSkeletonDataResource::find_bone(const String &bone_name) Ref SpineSkeletonDataResource::find_slot(const String &slot_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(slot_name)) return nullptr; - auto slot = skeleton_data->findSlot(SPINE_STRING(slot_name)); + auto slot = skeleton_data->findSlot(SPINE_STRING_TMP(slot_name)); if (!slot) return nullptr; Ref slot_ref(memnew(SpineSlotData)); slot_ref->set_spine_object(this, slot); @@ -325,7 +325,7 @@ Ref SpineSkeletonDataResource::find_slot(const String &slot_name) Ref SpineSkeletonDataResource::find_skin(const String &skin_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(skin_name)) return nullptr; - auto skin = skeleton_data->findSkin(SPINE_STRING(skin_name)); + auto skin = skeleton_data->findSkin(SPINE_STRING_TMP(skin_name)); if (!skin) return nullptr; Ref skin_ref(memnew(SpineSkin)); skin_ref->set_spine_object(this, skin); @@ -335,7 +335,7 @@ Ref SpineSkeletonDataResource::find_skin(const String &skin_name) con Ref SpineSkeletonDataResource::find_event(const String &event_data_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(event_data_name)) return nullptr; - auto event = skeleton_data->findEvent(SPINE_STRING(event_data_name)); + auto event = skeleton_data->findEvent(SPINE_STRING_TMP(event_data_name)); if (!event) return nullptr; Ref event_ref(memnew(SpineEventData)); event_ref->set_spine_object(this, event); @@ -345,7 +345,7 @@ Ref SpineSkeletonDataResource::find_event(const String &event_da Ref SpineSkeletonDataResource::find_ik_constraint(const String &constraint_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton_data->findIkConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton_data->findIkConstraint(SPINE_STRING_TMP(constraint_name)); if (!constraint) return nullptr; Ref constraint_ref(memnew(SpineIkConstraintData)); constraint_ref->set_spine_object(this, constraint); @@ -355,7 +355,7 @@ Ref SpineSkeletonDataResource::find_ik_constraint(const S Ref SpineSkeletonDataResource::find_transform_constraint(const String &constraint_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton_data->findTransformConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton_data->findTransformConstraint(SPINE_STRING_TMP(constraint_name)); if (!constraint) return nullptr; Ref constraint_ref(memnew(SpineTransformConstraintData)); constraint_ref->set_spine_object(this, constraint); @@ -364,7 +364,7 @@ Ref SpineSkeletonDataResource::find_transform_cons Ref SpineSkeletonDataResource::find_path_constraint(const String &constraint_name) const { SPINE_CHECK(skeleton_data, nullptr) if (EMPTY(constraint_name)) return nullptr; - auto constraint = skeleton_data->findPathConstraint(SPINE_STRING(constraint_name)); + auto constraint = skeleton_data->findPathConstraint(SPINE_STRING_TMP(constraint_name)); if (constraint == nullptr) return nullptr; Ref constraint_ref(memnew(SpinePathConstraintData)); constraint_ref->set_spine_object(this, constraint); diff --git a/spine-godot/spine_godot/SpineSkeletonDataResource.h b/spine-godot/spine_godot/SpineSkeletonDataResource.h index 97290ca62..78f90c4aa 100644 --- a/spine-godot/spine_godot/SpineSkeletonDataResource.h +++ b/spine-godot/spine_godot/SpineSkeletonDataResource.h @@ -1,3 +1,32 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + #pragma once #include "SpineAtlasResource.h" diff --git a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp index 17b99c442..53462c29e 100644 --- a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonFileResource.h" diff --git a/spine-godot/spine_godot/SpineSkeletonFileResource.h b/spine-godot/spine_godot/SpineSkeletonFileResource.h index e67da4c76..4fedd592e 100644 --- a/spine-godot/spine_godot/SpineSkeletonFileResource.h +++ b/spine-godot/spine_godot/SpineSkeletonFileResource.h @@ -1,31 +1,31 @@ /****************************************************************************** -* 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. -*****************************************************************************/ + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineSkin.cpp b/spine-godot/spine_godot/SpineSkin.cpp index c93271f69..2a6de0a95 100644 --- a/spine-godot/spine_godot/SpineSkin.cpp +++ b/spine-godot/spine_godot/SpineSkin.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkin.h" diff --git a/spine-godot/spine_godot/SpineSkin.h b/spine-godot/spine_godot/SpineSkin.h index 82db7f1eb..516b877f0 100644 --- a/spine-godot/spine_godot/SpineSkin.h +++ b/spine-godot/spine_godot/SpineSkin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineSlot.cpp b/spine-godot/spine_godot/SpineSlot.cpp index 798222fe4..f620b85dd 100644 --- a/spine-godot/spine_godot/SpineSlot.cpp +++ b/spine-godot/spine_godot/SpineSlot.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSlot.h" @@ -59,18 +59,28 @@ void SpineSlot::set_to_setup_pose() { Ref SpineSlot::get_data() { SPINE_CHECK(get_spine_object(), nullptr) - auto &slot_data = get_spine_object()->getData(); - Ref slot_data_ref(memnew(SpineSlotData)); - slot_data_ref->set_spine_object(*get_spine_owner()->get_skeleton_data_res(), &slot_data); - return slot_data_ref; + if (_data.is_valid()) { + return _data; + } else { + auto &slot_data = get_spine_object()->getData(); + Ref slot_data_ref(memnew(SpineSlotData)); + slot_data_ref->set_spine_object(*get_spine_owner()->get_skeleton_data_res(), &slot_data); + _data = slot_data_ref; + return slot_data_ref; + } } Ref SpineSlot::get_bone() { SPINE_CHECK(get_spine_object(), nullptr) - auto &bone = get_spine_object()->getBone(); - Ref bone_ref(memnew(SpineBone)); - bone_ref->set_spine_object(get_spine_owner(), &bone); - return bone_ref; + if (_bone.is_valid()) { + return _bone; + } else { + auto &bone = get_spine_object()->getBone(); + Ref bone_ref(memnew(SpineBone)); + bone_ref->set_spine_object(get_spine_owner(), &bone); + _bone = bone_ref; + return bone_ref; + } } Color SpineSlot::get_color() { diff --git a/spine-godot/spine_godot/SpineSlot.h b/spine-godot/spine_godot/SpineSlot.h index 795645473..f0a3b6b28 100644 --- a/spine-godot/spine_godot/SpineSlot.h +++ b/spine-godot/spine_godot/SpineSlot.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once @@ -40,6 +40,10 @@ class SpineSprite; class SpineSlot : public SpineSpriteOwnedObject { GDCLASS(SpineSlot, SpineObjectWrapper) +private: + Ref _bone; + Ref _data; + protected: static void _bind_methods(); diff --git a/spine-godot/spine_godot/SpineSlotData.cpp b/spine-godot/spine_godot/SpineSlotData.cpp index b95ed3352..94bff5253 100644 --- a/spine-godot/spine_godot/SpineSlotData.cpp +++ b/spine-godot/spine_godot/SpineSlotData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSlotData.h" @@ -104,7 +104,7 @@ String SpineSlotData::get_attachment_name() { } void SpineSlotData::set_attachment_name(const String &v) { SPINE_CHECK(get_spine_object(), ) - get_spine_object()->setAttachmentName(SPINE_STRING(v)); + get_spine_object()->setAttachmentName(SPINE_STRING_TMP(v)); } SpineConstant::BlendMode SpineSlotData::get_blend_mode() { diff --git a/spine-godot/spine_godot/SpineSlotData.h b/spine-godot/spine_godot/SpineSlotData.h index 2cc538dfe..ace3ca726 100644 --- a/spine-godot/spine_godot/SpineSlotData.h +++ b/spine-godot/spine_godot/SpineSlotData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineSlotNode.cpp b/spine-godot/spine_godot/SpineSlotNode.cpp index 593bb1f0b..a86d66911 100644 --- a/spine-godot/spine_godot/SpineSlotNode.cpp +++ b/spine-godot/spine_godot/SpineSlotNode.cpp @@ -1,16 +1,16 @@ -/****************************************************************************** -* Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSlotNode.h" @@ -62,9 +62,9 @@ void SpineSlotNode::_notification(int what) { SpineSprite *sprite = cast_to(get_parent()); if (sprite) { #if VERSION_MAJOR > 3 - sprite->connect("world_transforms_changed", callable_mp(this, &SpineSlotNode::on_world_transforms_changed)); + sprite->connect(SNAME("world_transforms_changed"), callable_mp(this, &SpineSlotNode::on_world_transforms_changed)); #else - sprite->connect("world_transforms_changed", this, "_on_world_transforms_changed"); + sprite->connect(SNAME("world_transforms_changed"), this, SNAME("_on_world_transforms_changed")); #endif update_transform(sprite); #if VERSION_MAJOR == 3 @@ -86,9 +86,9 @@ void SpineSlotNode::_notification(int what) { SpineSprite *sprite = cast_to(get_parent()); if (sprite) { #if VERSION_MAJOR > 3 - sprite->disconnect("world_transforms_changed", callable_mp(this, &SpineSlotNode::on_world_transforms_changed)); + sprite->disconnect(SNAME("world_transforms_changed"), callable_mp(this, &SpineSlotNode::on_world_transforms_changed)); #else - sprite->disconnect("world_transforms_changed", this, "_on_world_transforms_changed"); + sprite->disconnect(SNAME("world_transforms_changed"), this, SNAME("_on_world_transforms_changed")); #endif } break; diff --git a/spine-godot/spine_godot/SpineSlotNode.h b/spine-godot/spine_godot/SpineSlotNode.h index 9d66bb1fc..abf1fa1f0 100644 --- a/spine-godot/spine_godot/SpineSlotNode.h +++ b/spine-godot/spine_godot/SpineSlotNode.h @@ -1,16 +1,16 @@ -/****************************************************************************** -* Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineSprite.cpp b/spine-godot/spine_godot/SpineSprite.cpp index 4647ef2b5..6d26bd57f 100644 --- a/spine-godot/spine_godot/SpineSprite.cpp +++ b/spine-godot/spine_godot/SpineSprite.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSprite.h" @@ -41,6 +41,9 @@ #include "core/variant/array.h" #include "scene/resources/mesh.h" #include "servers/rendering_server.h" +#if VERSION_MINOR > 0 +#include "editor/editor_interface.h" +#endif #else #include "core/engine.h" #endif @@ -128,7 +131,7 @@ void SpineMesh2D::update_mesh(const Vector &vertices, const Vector &indices, SpineRendererObject *renderer_object) { #if VERSION_MAJOR > 3 - if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || last_indices_id != indices_id) { + if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || indices_changed) { if (mesh.is_valid()) { RS::get_singleton()->free(mesh); } @@ -148,7 +151,7 @@ void SpineMesh2D::update_mesh(const Vector &vertices, num_indices = indices.size(); vertex_buffer = surface.vertex_data; attribute_buffer = surface.attribute_data; - last_indices_id = indices_id; + indices_changed = false; } else { AABB aabb_new; uint8_t *vertex_write_buffer = vertex_buffer.ptrw(); @@ -180,7 +183,7 @@ void SpineMesh2D::update_mesh(const Vector &vertices, RenderingServer::get_singleton()->canvas_item_add_mesh(this->get_canvas_item(), mesh, Transform2D(), Color(1, 1, 1, 1), renderer_object->canvas_texture->get_rid()); #else - if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || last_indices_id != indices_id) { + if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || indices_changed) { if (mesh.is_valid()) { VS::get_singleton()->free(mesh); } @@ -200,7 +203,7 @@ void SpineMesh2D::update_mesh(const Vector &vertices, VS::get_singleton()->mesh_surface_make_offsets_from_format(mesh_surface_format, surface_vertex_len, surface_index_len, mesh_surface_offsets, mesh_stride); num_vertices = vertices.size(); num_indices = indices.size(); - last_indices_id = indices_id; + indices_changed = false; } else { AABB aabb_new; PoolVector::Write write_buffer = mesh_buffer.write(); @@ -412,15 +415,15 @@ void SpineSprite::on_skeleton_data_changed() { remove_meshes(); skeleton.unref(); animation_state.unref(); - emit_signal("_internal_spine_objects_invalidated"); + emit_signal(SNAME("_internal_spine_objects_invalidated")); if (skeleton_data_res.is_valid()) { #if VERSION_MAJOR > 3 - if (!skeleton_data_res->is_connected("skeleton_data_changed", callable_mp(this, &SpineSprite::on_skeleton_data_changed))) - skeleton_data_res->connect("skeleton_data_changed", callable_mp(this, &SpineSprite::on_skeleton_data_changed)); + if (!skeleton_data_res->is_connected(SNAME("skeleton_data_changed"), callable_mp(this, &SpineSprite::on_skeleton_data_changed))) + skeleton_data_res->connect(SNAME("skeleton_data_changed"), callable_mp(this, &SpineSprite::on_skeleton_data_changed)); #else - if (!skeleton_data_res->is_connected("skeleton_data_changed", this, "on_skeleton_data_changed")) - skeleton_data_res->connect("skeleton_data_changed", this, "on_skeleton_data_changed"); + if (!skeleton_data_res->is_connected(SNAME("skeleton_data_changed"), this, SNAME("on_skeleton_data_changed"))) + skeleton_data_res->connect(SNAME("skeleton_data_changed"), this, SNAME("on_skeleton_data_changed")); #endif } @@ -662,15 +665,15 @@ void SpineSprite::update_skeleton(float delta) { !animation_state->get_spine_object()) return; - emit_signal("before_animation_state_update", this); + emit_signal(SNAME("before_animation_state_update"), this); animation_state->update(delta); if (!is_visible_in_tree()) return; - emit_signal("before_animation_state_apply", this); + emit_signal(SNAME("before_animation_state_apply"), this); animation_state->apply(skeleton); - emit_signal("before_world_transforms_change", this); + emit_signal(SNAME("before_world_transforms_change"), this); skeleton->update_world_transform(); modified_bones = false; - emit_signal("world_transforms_changed", this); + emit_signal(SNAME("world_transforms_changed"), this); if (modified_bones) skeleton->update_world_transform(); sort_slot_nodes(); update_meshes(skeleton); @@ -766,15 +769,29 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { for (int j = 0; j < (int) num_vertices; j++) { mesh_instance->colors.set(j, Color(tint.r, tint.g, tint.b, tint.a)); } - mesh_instance->indices.resize((int) indices->size()); - for (int j = 0; j < (int) indices->size(); ++j) { - mesh_instance->indices.set(j, indices->buffer()[j]); + + auto indices_changed = true; + if (mesh_instance->indices.size() == indices->size()) { + auto old_indices = mesh_instance->indices.ptr(); + auto new_indices = indices->buffer(); + for (int j = 0; j < (int) indices->size(); j++) { + if (old_indices[j] != new_indices[j]) { + indices_changed = true; + break; + } + } + } + + if (indices_changed) { + mesh_instance->indices.resize((int) indices->size()); + for (int j = 0; j < (int) indices->size(); ++j) { + mesh_instance->indices.set(j, indices->buffer()[j]); + } + mesh_instance->indices_changed = true; } mesh_instance->renderer_object = renderer_object; -#if VERSION_MAJOR > 3 - mesh_instance->indices_id = (uint64_t) indices; -#endif + spine::BlendMode blend_mode = slot->getData().getBlendMode(); Ref custom_material; @@ -828,6 +845,24 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { skeleton_clipper->clipEnd(); } +void createLinesFromMesh(Vector &scratch_points, spine::Vector &triangles, spine::Vector *vertices) { + scratch_points.resize(0); + for (int i = 0; i < triangles.size(); i += 3) { + int i1 = triangles[i]; + int i2 = triangles[i + 1]; + int i3 = triangles[i + 2]; + Vector2 v1(vertices->buffer()[i1 * 2], vertices->buffer()[i1 * 2 + 1]); + Vector2 v2(vertices->buffer()[i2 * 2], vertices->buffer()[i2 * 2 + 1]); + Vector2 v3(vertices->buffer()[i3 * 2], vertices->buffer()[i3 * 2 + 1]); + scratch_points.push_back(v1); + scratch_points.push_back(v2); + scratch_points.push_back(v2); + scratch_points.push_back(v3); + scratch_points.push_back(v3); + scratch_points.push_back(v1); + } +} + void SpineSprite::draw() { if (!animation_state.is_valid() && !skeleton.is_valid()) return; if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) return; @@ -854,6 +889,12 @@ void SpineSprite::draw() { auto *vertices = &scratch_vertices; vertices->setSize(8, 0); region->computeWorldVertices(*slot, *vertices, 0); + + // Render triangles. + createLinesFromMesh(scratch_points, quad_indices, vertices); + draw_polyline(scratch_points, debug_regions_color); + + // Render hull. scratch_points.resize(0); for (int i = 0, j = 0; i < 4; i++, j += 2) { float x = vertices->buffer()[j]; @@ -885,6 +926,12 @@ void SpineSprite::draw() { auto *vertices = &scratch_vertices; vertices->setSize(mesh->getWorldVerticesLength(), 0); mesh->computeWorldVertices(*slot, *vertices); + + // Render triangles. + createLinesFromMesh(scratch_points, mesh->getTriangles(), vertices); + draw_polyline(scratch_points, debug_meshes_color); + + // Render hull scratch_points.resize(0); for (int i = 0, j = 0; i < mesh->getHullLength(); i++, j += 2) { float x = vertices->buffer()[j]; @@ -998,7 +1045,7 @@ void SpineSprite::draw() { #if VERSION_MAJOR > 3 default_font = control->get_theme_default_font(); #else - default_font = control->get_font("font", "Label"); + default_font = control->get_font(SNAME("font"), SNAME("Label")); #endif memfree(control); @@ -1070,22 +1117,22 @@ void SpineSprite::callback(spine::AnimationState *state, spine::EventType type, switch (type) { case spine::EventType_Start: - emit_signal("animation_started", this, animation_state, entry_ref); + emit_signal(SNAME("animation_started"), this, animation_state, entry_ref); break; case spine::EventType_Interrupt: - emit_signal("animation_interrupted", this, animation_state, entry_ref); + emit_signal(SNAME("animation_interrupted"), this, animation_state, entry_ref); break; case spine::EventType_End: - emit_signal("animation_ended", this, animation_state, entry_ref); + emit_signal(SNAME("animation_ended"), this, animation_state, entry_ref); break; case spine::EventType_Complete: - emit_signal("animation_completed", this, animation_state, entry_ref); + emit_signal(SNAME("animation_completed"), this, animation_state, entry_ref); break; case spine::EventType_Dispose: - emit_signal("animation_disposed", this, animation_state, entry_ref); + emit_signal(SNAME("animation_disposed"), this, animation_state, entry_ref); break; case spine::EventType_Event: - emit_signal("animation_event", this, animation_state, entry_ref, event_ref); + emit_signal(SNAME("animation_event"), this, animation_state, entry_ref, event_ref); break; } } diff --git a/spine-godot/spine_godot/SpineSprite.h b/spine-godot/spine_godot/SpineSprite.h index 0c4b3c5a4..b0668b82d 100644 --- a/spine-godot/spine_godot/SpineSprite.h +++ b/spine-godot/spine_godot/SpineSprite.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once @@ -56,9 +56,9 @@ protected: Vector indices; SpineRendererObject *renderer_object; + bool indices_changed; + #if VERSION_MAJOR > 3 - uint64_t last_indices_id; - uint64_t indices_id; RID mesh; uint32_t surface_offsets[RS::ARRAY_MAX]; int num_vertices; @@ -68,8 +68,6 @@ protected: uint32_t vertex_stride; uint32_t attribute_stride; #else - uint64_t last_indices_id; - uint64_t indices_id; RID mesh; uint32_t surface_offsets[VS::ARRAY_MAX]; int num_vertices; @@ -82,14 +80,14 @@ protected: public: #if VERSION_MAJOR > 3 - SpineMesh2D() : renderer_object(nullptr), last_indices_id(0), indices_id(0), num_vertices(0), num_indices(0), vertex_stride(0), attribute_stride(0){}; + SpineMesh2D() : renderer_object(nullptr), indices_changed(true), num_vertices(0), num_indices(0), vertex_stride(0), attribute_stride(0){}; ~SpineMesh2D() { if (mesh.is_valid()) { RS::get_singleton()->free(mesh); } } #else - SpineMesh2D() : renderer_object(nullptr), last_indices_id(0), indices_id(0), num_vertices(0), num_indices(0){}; + SpineMesh2D() : renderer_object(nullptr), indices_changed(true), num_vertices(0), num_indices(0){}; ~SpineMesh2D() { if (mesh.is_valid()) { VS::get_singleton()->free(mesh); diff --git a/spine-godot/spine_godot/SpineTimeline.cpp b/spine-godot/spine_godot/SpineTimeline.cpp index bb8bd400f..6b02f9110 100644 --- a/spine-godot/spine_godot/SpineTimeline.cpp +++ b/spine-godot/spine_godot/SpineTimeline.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineTimeline.h" diff --git a/spine-godot/spine_godot/SpineTimeline.h b/spine-godot/spine_godot/SpineTimeline.h index 6cac70f7b..1373fd216 100644 --- a/spine-godot/spine_godot/SpineTimeline.h +++ b/spine-godot/spine_godot/SpineTimeline.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineTrackEntry.cpp b/spine-godot/spine_godot/SpineTrackEntry.cpp index ae9110a7e..ba85068be 100644 --- a/spine-godot/spine_godot/SpineTrackEntry.cpp +++ b/spine-godot/spine_godot/SpineTrackEntry.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineTrackEntry.h" diff --git a/spine-godot/spine_godot/SpineTrackEntry.h b/spine-godot/spine_godot/SpineTrackEntry.h index a7ae3027b..0035149ff 100644 --- a/spine-godot/spine_godot/SpineTrackEntry.h +++ b/spine-godot/spine_godot/SpineTrackEntry.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineTransformConstraint.cpp b/spine-godot/spine_godot/SpineTransformConstraint.cpp index b241ed817..23c345743 100644 --- a/spine-godot/spine_godot/SpineTransformConstraint.cpp +++ b/spine-godot/spine_godot/SpineTransformConstraint.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineTransformConstraint.h" diff --git a/spine-godot/spine_godot/SpineTransformConstraint.h b/spine-godot/spine_godot/SpineTransformConstraint.h index 95f7cdcc4..721cf4234 100644 --- a/spine-godot/spine_godot/SpineTransformConstraint.h +++ b/spine-godot/spine_godot/SpineTransformConstraint.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/SpineTransformConstraintData.cpp b/spine-godot/spine_godot/SpineTransformConstraintData.cpp index b4804ce77..f0d713a2e 100644 --- a/spine-godot/spine_godot/SpineTransformConstraintData.cpp +++ b/spine-godot/spine_godot/SpineTransformConstraintData.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineTransformConstraintData.h" diff --git a/spine-godot/spine_godot/SpineTransformConstraintData.h b/spine-godot/spine_godot/SpineTransformConstraintData.h index 3d0b899c3..d98e757ec 100644 --- a/spine-godot/spine_godot/SpineTransformConstraintData.h +++ b/spine-godot/spine_godot/SpineTransformConstraintData.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-godot/spine_godot/register_types.cpp b/spine-godot/spine_godot/register_types.cpp index c1bcd8ff0..581ba4f39 100644 --- a/spine-godot/spine_godot/register_types.cpp +++ b/spine-godot/spine_godot/register_types.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineCommon.h" diff --git a/spine-godot/spine_godot/register_types.h b/spine-godot/spine_godot/register_types.h index cc88e50ce..465bd71d3 100644 --- a/spine-godot/spine_godot/register_types.h +++ b/spine-godot/spine_godot/register_types.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-haxe/.vscode/launch.json b/spine-haxe/.vscode/launch.json new file mode 100644 index 000000000..09a92a9da --- /dev/null +++ b/spine-haxe/.vscode/launch.json @@ -0,0 +1,13 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "lime", + "type": "lime", + "request": "launch" + } + ] +} diff --git a/spine-haxe/README.md b/spine-haxe/README.md new file mode 100644 index 000000000..e3bd01e0d --- /dev/null +++ b/spine-haxe/README.md @@ -0,0 +1,56 @@ +# spine-haxe + +The spine-haxe runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Haxe](https://haxe.org/) in combination with [OpenFL](https://www.openfl.org/) and [Lime](https://lime.openfl.org/). + +## 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-haxe works with data exported from Spine 4.1.xx. + +spine-haxe supports all Spine features except premultiplied alpha atlases and two color tinting. + +## Setup + +TBD + +## Example + +TBD + +## Development + +To setup the development environment install the following: + +1. [Haxe](https://haxe.org/download/), ensure it's available on the command line through your `PATH` if you use the binaries instead of the installer. +2. On the command line, run: + ``` + haxelib setup + haxelib install openfl + haxelib run openfl setup + haxelib install starling + ``` +3. Clone the `spine-runtimes` repository, and use `haxelib` to setup a dev library: + ``` + git clone https://github.com/esotericsoftware/spine-runtimes + cd spine-runtimes + haxelib dev spine-haxe . + ``` + +As an IDE, we recommend [Visual Studio Code](https://code.visualstudio.com/) with the following extension: + +1. [Haxe extension](https://marketplace.visualstudio.com/items?itemName=nadako.vshaxe) +2. [HXCPP debugger extension](https://marketplace.visualstudio.com/items?itemName=vshaxe.hxcpp-debugger) +3. [Lime extension](https://marketplace.visualstudio.com/items?itemName=openfl.lime-vscode-extension) + +The extensions provide IDE features like auto-completion, debugging, and build support. + +To debug a build, set the corresponding Lime target in the status bar at the bottom of VS Code to e.g. `HTML5 / Debug`. Run the `lime` run configuration by pressing `F5`. diff --git a/spine-haxe/example/assets/coin-pro.json b/spine-haxe/example/assets/coin-pro.json new file mode 100644 index 000000000..03fd5fe07 --- /dev/null +++ b/spine-haxe/example/assets/coin-pro.json @@ -0,0 +1,259 @@ +{ +"skeleton": { + "hash": "oo0dBSCqNHM", + "spine": "4.1.17", + "x": -152.5, + "y": -151, + "width": 305, + "height": 302, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "coin-front", "parent": "root" }, + { "name": "clipping", "parent": "coin-front" }, + { "name": "coin-sides", "parent": "root" }, + { "name": "coin-side-round", "parent": "coin-sides" }, + { "name": "coin-side-straight", "parent": "coin-sides" }, + { "name": "shine", "parent": "root", "x": 243.14 } +], +"slots": [ + { "name": "coin-side", "bone": "coin-side-straight", "color": "ffdb2fff", "attachment": "coin-side-straight" }, + { "name": "coin-side-round", "bone": "coin-side-round", "color": "ffdb2fff", "attachment": "coin-side-round" }, + { "name": "coin-front-texture", "bone": "coin-front", "color": "868686ff", "attachment": "coin-front-logo" }, + { "name": "coin-front-shine", "bone": "coin-front", "color": "888888ff", "dark": "000000", "attachment": "coin-front-shine-logo", "blend": "additive" }, + { "name": "clipping", "bone": "clipping", "attachment": "clipping" }, + { "name": "shine", "bone": "shine", "color": "ffffff60", "attachment": "shine", "blend": "additive" } +], +"skins": [ + { + "name": "default", + "attachments": { + "clipping": { + "clipping": { + "type": "clipping", + "end": "clipping", + "vertexCount": 39, + "vertices": [ 0.1, 140.26, -26.4, 138.14, -50.51, 131.25, -75.42, 119.06, -98.21, 101.04, -115.44, 82.22, -127.63, 62.08, -136.11, 39.03, -140.08, 19.68, -141.41, -0.19, -140.08, -22.98, -134.78, -45.5, -125.24, -66.44, -113.32, -84.19, -98.21, -101.95, -80.46, -116.52, -61.38, -127.39, -38.92, -134.81, -18.22, -139.27, -0.14, -140.58, 24.23, -138.48, 45.45, -132.46, 67.98, -122.5, 86.58, -110.19, 102.56, -95.25, 115.4, -78.75, 125.36, -61.72, 134, -42.33, 138.46, -22.15, 139.24, -0.15, 138.46, 20.29, 133.48, 39.94, 127.19, 58.54, 117.5, 76.1, 104.4, 92.86, 88.42, 108.32, 69.03, 121.42, 50.43, 130.85, 26.32, 137.4 ], + "color": "ce3a3aff" + } + }, + "coin-front-shine": { + "coin-front-shine-logo": { "width": 282, "height": 282 }, + "coin-front-shine-spineboy": { "width": 282, "height": 282 } + }, + "coin-front-texture": { + "coin-front-logo": { "width": 305, "height": 302 }, + "coin-front-spineboy": { "width": 305, "height": 302 } + }, + "coin-side": { + "coin-side-straight": { "x": 0.5, "width": 17, "height": 282 } + }, + "coin-side-round": { + "coin-side-round": { "x": -69.43, "width": 144, "height": 282 } + }, + "shine": { + "shine": { "y": 0.5, "scaleX": 1.6004, "scaleY": 1.6004, "width": 72, "height": 245 } + } + } + } +], +"animations": { + "animation": { + "slots": { + "coin-front-shine": { + "rgba2": [ + { "light": "7d7d7dff", "dark": "000000" }, + { "time": 0.2667, "light": "000000ff", "dark": "7e7e7e" }, + { "time": 0.664, "light": "000000ff", "dark": "000000" }, + { "time": 1.0333, "light": "7f7f7fff", "dark": "000000" }, + { "time": 1.3333, "light": "404040ff", "dark": "000000" }, + { "time": 1.6, "light": "000000ff", "dark": "7e7e7e" }, + { "time": 2.0022, "light": "000000ff", "dark": "000000" }, + { "time": 2.4, "light": "7f7f7fff", "dark": "000000" }, + { "time": 2.6667, "light": "7d7d7dff", "dark": "000000" } + ], + "attachment": [ + { "time": 0.6667, "name": "coin-front-shine-spineboy" }, + { "time": 2, "name": "coin-front-shine-logo" } + ] + }, + "coin-front-texture": { + "rgba": [ + { "color": "858585ff" }, + { "time": 0.4, "color": "ffffffff" }, + { + "time": 0.6696, + "color": "858585ff", + "curve": [ 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 1, 0.892, 1 ] + }, + { "time": 0.9667, "color": "ffffffff" }, + { "time": 1.3318, "color": "858585ff", "curve": "stepped" }, + { "time": 1.3333, "color": "858585ff" }, + { "time": 1.7333, "color": "ffffffff" }, + { "time": 1.9982, "color": "858585ff", "curve": "stepped" }, + { "time": 2.0022, "color": "858585ff" }, + { "time": 2.3, "color": "ffffffff" }, + { "time": 2.6667, "color": "858585ff" } + ], + "attachment": [ + { "time": 0.6667, "name": "coin-front-spineboy" }, + { "time": 2, "name": "coin-front-logo" } + ] + } + }, + "bones": { + "coin-front": { + "translate": [ + {}, + { "time": 0.664, "x": 8.3, "curve": "stepped" }, + { + "time": 0.6696, + "x": -8.3, + "curve": [ 0.794, -7.08, 1.167, 0, 0.794, 0, 1.167, 0 ] + }, + { "time": 1.3333 }, + { "time": 1.9982, "x": 8.3, "curve": "stepped" }, + { "time": 2.0022, "x": -8.3 }, + { "time": 2.6667 } + ], + "scale": [ + { + "curve": [ 0.164, 1, 0.484, 0.091, 0.164, 1, 0.484, 1 ] + }, + { "time": 0.664, "x": 0, "curve": "stepped" }, + { + "time": 0.6696, + "x": 0.003, + "curve": [ 0.786, 0.153, 1.167, 1, 0.786, 1, 1.167, 1 ] + }, + { + "time": 1.3333, + "curve": [ 1.442, 0.992, 1.858, 0.098, 1.442, 1, 1.858, 1 ] + }, + { "time": 1.9982, "x": 0.003, "curve": "stepped" }, + { + "time": 2.0022, + "x": 0.003, + "curve": [ 2.123, 0.151, 2.501, 1, 2.123, 1, 2.501, 1 ] + }, + { "time": 2.6667 } + ] + }, + "coin-side-round": { + "translate": [ + {}, + { "time": 0.664, "x": -6.75, "curve": "stepped" }, + { + "time": 0.6696, + "x": 7.03, + "curve": [ 0.794, 5.99, 1.167, 0, 0.794, 0, 1.167, 0 ] + }, + { "time": 1.3333 }, + { "time": 1.9982, "x": -6.75, "curve": "stepped" }, + { "time": 2.0022, "x": 7.03 }, + { "time": 2.6667 } + ], + "scale": [ + { + "curve": [ 0.085, 1, 0.207, 0.789, 0.085, 1, 0.207, 1 ] + }, + { + "time": 0.3333, + "x": 0.555, + "curve": [ 0.449, 0.347, 0.567, 0.122, 0.449, 1, 0.567, 1 ] + }, + { "time": 0.664, "x": 0.014, "curve": "stepped" }, + { + "time": 0.6696, + "x": -0.028, + "curve": [ 0.723, -0.126, 0.865, -0.367, 0.723, 1, 0.865, 1 ] + }, + { + "time": 1, + "x": -0.609, + "curve": [ 1.053, -0.778, 1.29, -0.997, 1.053, 1, 1.29, 1 ] + }, + { "time": 1.3318, "x": -1, "curve": "stepped" }, + { + "time": 1.3333, + "curve": [ 1.384, 0.997, 1.439, 0.94, 1.384, 1, 1.439, 1 ] + }, + { + "time": 1.5, + "x": 0.852, + "curve": [ 1.564, 0.748, 1.703, 0.509, 1.564, 1, 1.703, 1 ] + }, + { + "time": 1.8, + "x": 0.315, + "curve": [ 1.873, 0.13, 1.987, 0.015, 1.873, 1, 1.987, 1 ] + }, + { "time": 1.9982, "x": 0.014, "curve": "stepped" }, + { + "time": 2.0022, + "x": -0.028, + "curve": [ 2.039, -0.072, 2.123, -0.239, 2.039, 1, 2.123, 1 ] + }, + { + "time": 2.2018, + "x": -0.365, + "curve": [ 2.269, -0.513, 2.337, -0.635, 2.269, 1, 2.337, 1 ] + }, + { + "time": 2.4, + "x": -0.731, + "curve": [ 2.503, -0.871, 2.596, -0.961, 2.503, 1, 2.596, 1 ] + }, + { + "time": 2.6592, + "x": -1, + "curve": [ 2.661, -1, 2.665, 1, 2.661, 1, 2.665, 1 ] + }, + { "time": 2.6667 } + ] + }, + "shine": { + "translate": [ + { + "curve": [ 0.167, 0, 0.5, -473.39, 0.167, 0, 0.5, 0 ] + }, + { + "time": 0.6667, + "x": -473.39, + "curve": [ 0.833, -473.39, 1.167, -33.16, 0.833, 0, 1.167, 0 ] + }, + { + "time": 1.3333, + "x": -33.16, + "curve": [ 1.5, -33.16, 1.833, -473.39, 1.5, 0, 1.833, 0 ] + }, + { + "time": 2, + "x": -473.39, + "curve": [ 2.167, -473.39, 2.5, 0, 2.167, 0, 2.5, 0 ] + }, + { "time": 2.6667 } + ] + } + }, + "drawOrder": [ + { + "time": 0.6667, + "offsets": [ + { "slot": "coin-side", "offset": 2 } + ] + }, + { "time": 0.6696 }, + { + "time": 1.9982, + "offsets": [ + { "slot": "coin-side", "offset": 2 } + ] + }, + { "time": 2.0022 } + ] + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/coin-pro.skel b/spine-haxe/example/assets/coin-pro.skel new file mode 100644 index 000000000..eda3d9961 Binary files /dev/null and b/spine-haxe/example/assets/coin-pro.skel differ diff --git a/spine-haxe/example/assets/coin.atlas b/spine-haxe/example/assets/coin.atlas new file mode 100644 index 000000000..0ff436cff --- /dev/null +++ b/spine-haxe/example/assets/coin.atlas @@ -0,0 +1,18 @@ +coin.png + size: 1024, 1024 + filter: Linear, Linear +coin-front-logo + bounds: 2, 570, 305, 302 +coin-front-shine-logo + bounds: 2, 286, 282, 282 +coin-front-shine-spineboy + bounds: 305, 283, 282, 282 +coin-front-spineboy + bounds: 309, 567, 305, 302 + rotate: 90 +coin-side-round + bounds: 2, 2, 144, 282 +coin-side-straight + bounds: 286, 286, 17, 282 +shine + bounds: 148, 39, 72, 245 diff --git a/spine-haxe/example/assets/coin.png b/spine-haxe/example/assets/coin.png new file mode 100644 index 000000000..2298d1349 Binary files /dev/null and b/spine-haxe/example/assets/coin.png differ diff --git a/spine-haxe/example/assets/dragon-ess.json b/spine-haxe/example/assets/dragon-ess.json new file mode 100644 index 000000000..274ef6306 --- /dev/null +++ b/spine-haxe/example/assets/dragon-ess.json @@ -0,0 +1,1079 @@ +{ +"skeleton": { + "hash": "aPoA1GjXkVI", + "spine": "4.1.17", + "x": -366.31, + "y": -327.81, + "width": 660.39, + "height": 643, + "images": "./images/", + "audio": "././" +}, +"bones": [ + { "name": "root", "y": -176.12 }, + { "name": "center", "parent": "root", "y": 176.12, "color": "ffe300ff" }, + { + "name": "back", + "parent": "center", + "length": 115.38, + "rotation": 151.83, + "x": 16.04, + "y": 27.94, + "color": "ffe400ff" + }, + { + "name": "chest", + "parent": "center", + "length": 31.24, + "rotation": 161.7, + "x": 52.53, + "y": 15.35, + "color": "ffe400ff" + }, + { + "name": "neck", + "parent": "center", + "length": 41.37, + "rotation": 39.06, + "x": 64.76, + "y": 11.98, + "color": "ffe400ff" + }, + { + "name": "chin", + "parent": "neck", + "length": 153.16, + "rotation": -69.07, + "x": 64.63, + "y": -6.99, + "color": "ffe400ff" + }, + { + "name": "head", + "parent": "neck", + "length": 188.84, + "rotation": 8.07, + "x": 69.96, + "y": 2.5, + "color": "ffe400ff" + }, + { + "name": "left-front-thigh", + "parent": "chest", + "length": 67.42, + "rotation": 138.94, + "x": -45.59, + "y": 7.93, + "color": "ff0000ff" + }, + { + "name": "left-front-leg", + "parent": "left-front-thigh", + "length": 51.58, + "rotation": 43.36, + "x": 67.42, + "y": 0.03, + "color": "ff0000ff" + }, + { + "name": "left-front-toe1", + "parent": "left-front-leg", + "length": 51.45, + "rotation": -98.01, + "x": 45.54, + "y": 2.43, + "color": "ff0000ff" + }, + { + "name": "left-front-toe2", + "parent": "left-front-leg", + "length": 61.98, + "rotation": -55.26, + "x": 51.58, + "y": -0.13, + "color": "ff0000ff" + }, + { + "name": "left-front-toe3", + "parent": "left-front-leg", + "length": 45.65, + "rotation": -11.14, + "x": 54.19, + "y": 0.6, + "scaleX": 1.135, + "color": "ff0000ff" + }, + { + "name": "left-front-toe4", + "parent": "left-front-leg", + "length": 53.47, + "rotation": 19.43, + "x": 50.61, + "y": 7.09, + "scaleX": 1.135, + "color": "ff0000ff" + }, + { + "name": "right-rear-thigh", + "parent": "back", + "length": 123.47, + "rotation": 104.88, + "x": 65.31, + "y": 59.89, + "color": "29ff00ff" + }, + { + "name": "left-rear-thigh", + "parent": "right-rear-thigh", + "length": 88.06, + "rotation": 28.35, + "x": -8.59, + "y": 30.19, + "color": "ff0000ff" + }, + { + "name": "left-rear-leg", + "parent": "left-rear-thigh", + "length": 103.74, + "rotation": -122.41, + "x": 96.04, + "y": -0.97, + "color": "ff0000ff" + }, + { + "name": "left-wing", + "parent": "chest", + "length": 301.12, + "rotation": -75.51, + "x": -7.25, + "y": -24.66, + "color": "ff0000ff" + }, + { + "name": "right-front-thigh", + "parent": "chest", + "length": 81.64, + "rotation": 67.97, + "x": -10.89, + "y": 28.25, + "color": "29ff00ff" + }, + { + "name": "right-front-leg", + "parent": "right-front-thigh", + "length": 66.53, + "rotation": 92.7, + "x": 83.05, + "y": -0.31, + "color": "29ff00ff" + }, + { + "name": "right-front-toe1", + "parent": "right-front-leg", + "length": 46.66, + "rotation": 8.59, + "x": 70.03, + "y": 5.31, + "color": "29ff00ff" + }, + { + "name": "right-front-toe2", + "parent": "right-front-leg", + "length": 53.67, + "rotation": -35.02, + "x": 66.53, + "y": 0.34, + "color": "29ff00ff" + }, + { + "name": "right-front-toe3", + "parent": "right-front-leg", + "length": 58.39, + "rotation": -74.67, + "x": 62.1, + "y": -0.79, + "color": "29ff00ff" + }, + { + "name": "right-rear-leg", + "parent": "right-rear-thigh", + "length": 91.06, + "rotation": -129.04, + "x": 123.47, + "y": -0.27, + "color": "29ff00ff" + }, + { + "name": "right-rear-toe1", + "parent": "right-rear-leg", + "length": 95, + "rotation": 141.98, + "x": 90.07, + "y": 2.12, + "color": "29ff00ff" + }, + { + "name": "right-rear-toe2", + "parent": "right-rear-leg", + "length": 99.29, + "rotation": 125.32, + "x": 89.6, + "y": 1.52, + "color": "29ff00ff" + }, + { + "name": "right-rear-toe3", + "parent": "right-rear-leg", + "length": 103.46, + "rotation": 112.27, + "x": 91.06, + "y": -0.35, + "color": "29ff00ff" + }, + { + "name": "right-wing", + "parent": "head", + "length": 359.5, + "rotation": 83.21, + "x": -74.68, + "y": 20.91, + "color": "29ff00ff" + }, + { + "name": "tail1", + "parent": "back", + "length": 65.65, + "rotation": 44.32, + "x": 115.38, + "y": -0.2, + "color": "ffe400ff" + }, + { + "name": "tail2", + "parent": "tail1", + "length": 54.5, + "rotation": 12, + "x": 65.65, + "y": 0.23, + "color": "ffe400ff" + }, + { + "name": "tail3", + "parent": "tail2", + "length": 41.78, + "rotation": 1.8, + "x": 54.5, + "y": 0.37, + "color": "ffe400ff" + }, + { + "name": "tail4", + "parent": "tail3", + "length": 34.19, + "rotation": -1.8, + "x": 41.78, + "y": 0.16, + "color": "ffe400ff" + }, + { + "name": "tail5", + "parent": "tail4", + "length": 32.33, + "rotation": -3.15, + "x": 34.19, + "y": -0.19, + "color": "ffe400ff" + }, + { + "name": "tail6", + "parent": "tail5", + "length": 80.08, + "rotation": -29.55, + "x": 32.33, + "y": -0.23, + "color": "ffe400ff" + } +], +"slots": [ + { "name": "left-rear-leg", "bone": "left-rear-leg", "attachment": "left-rear-leg" }, + { "name": "left-rear-thigh", "bone": "left-rear-thigh", "attachment": "left-rear-thigh" }, + { "name": "left-wing", "bone": "left-wing", "attachment": "left-wing" }, + { "name": "tail6", "bone": "tail6", "attachment": "tail06" }, + { "name": "tail5", "bone": "tail5", "attachment": "tail05" }, + { "name": "tail4", "bone": "tail4", "attachment": "tail04" }, + { "name": "tail3", "bone": "tail3", "attachment": "tail03" }, + { "name": "tail2", "bone": "tail2", "attachment": "tail02" }, + { "name": "tail1", "bone": "tail1", "attachment": "tail01" }, + { "name": "back", "bone": "back", "attachment": "back" }, + { "name": "left-front-thigh", "bone": "left-front-thigh", "attachment": "left-front-thigh" }, + { "name": "left-front-leg", "bone": "left-front-leg", "attachment": "left-front-leg" }, + { "name": "left-front-toe1", "bone": "left-front-toe1", "attachment": "front-toe-a" }, + { "name": "left-front-toe4", "bone": "left-front-toe4", "attachment": "front-toe-b" }, + { "name": "left-front-toe3", "bone": "left-front-toe3", "attachment": "front-toe-b" }, + { "name": "left-front-toe2", "bone": "left-front-toe2", "attachment": "front-toe-b" }, + { "name": "chest", "bone": "chest", "attachment": "chest" }, + { "name": "right-rear-toe1", "bone": "right-rear-toe1", "attachment": "right-rear-toe" }, + { "name": "right-rear-toe2", "bone": "right-rear-toe2", "attachment": "right-rear-toe" }, + { "name": "right-rear-toe3", "bone": "right-rear-toe3", "attachment": "right-rear-toe" }, + { "name": "right-rear-leg", "bone": "right-rear-leg", "attachment": "right-rear-leg" }, + { "name": "right-rear-thigh", "bone": "right-rear-thigh", "attachment": "right-rear-thigh" }, + { "name": "right-front-toe1", "bone": "right-front-toe1", "attachment": "front-toe-b" }, + { "name": "right-front-thigh", "bone": "right-front-thigh", "attachment": "right-front-thigh" }, + { "name": "right-front-leg", "bone": "right-front-leg", "attachment": "right-front-leg" }, + { "name": "right-front-toe2", "bone": "right-front-toe2", "attachment": "front-toe-b" }, + { "name": "right-front-toe3", "bone": "right-front-toe3", "attachment": "front-toe-b" }, + { "name": "chin", "bone": "chin", "attachment": "chin" }, + { "name": "right-wing", "bone": "right-wing", "attachment": "right-wing" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "thiagobrayner", "bone": "root", "attachment": "thiagobrayner" } +], +"skins": [ + { + "name": "default", + "attachments": { + "back": { + "back": { "x": 35.85, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 } + }, + "chest": { + "chest": { "x": -14.6, "y": 24.79, "rotation": -161.7, "width": 136, "height": 122 } + }, + "chin": { + "chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 } + }, + "head": { + "head": { "x": 76.69, "y": 32.21, "rotation": -47.13, "width": 296, "height": 260 } + }, + "left-front-leg": { + "left-front-leg": { "x": 14.69, "y": 0.49, "rotation": 16, "width": 84, "height": 57 } + }, + "left-front-thigh": { + "left-front-thigh": { "x": 27.66, "y": -11.59, "rotation": 58.66, "width": 84, "height": 72 } + }, + "left-front-toe1": { + "front-toe-a": { "x": 31.93, "y": 0.61, "rotation": 109.56, "width": 29, "height": 50 } + }, + "left-front-toe2": { + "front-toe-b": { "x": 26.84, "y": -4.95, "rotation": 109.51, "width": 56, "height": 57 } + }, + "left-front-toe3": { + "front-toe-b": { + "x": 18.22, + "y": -7.22, + "scaleX": 0.8811, + "scaleY": 0.9409, + "rotation": 99.71, + "width": 56, + "height": 57 + } + }, + "left-front-toe4": { + "front-toe-b": { "x": 23.21, "y": -11.69, "scaleX": 0.8811, "rotation": 79.89, "width": 56, "height": 57 } + }, + "left-rear-leg": { + "left-rear-leg": { "x": 67.29, "y": 12.63, "rotation": -162.65, "width": 206, "height": 177 } + }, + "left-rear-thigh": { + "left-rear-thigh": { "x": 56.03, "y": 27.39, "rotation": 74.94, "width": 91, "height": 149 } + }, + "left-wing": { + "left-wing": { + "x": -36.32, + "y": -44.53, + "rotation": -83.7, + "width": 264, + "height": 589, + "sequence": { "count": 9, "digits": 2 } + } + }, + "right-front-leg": { + "right-front-leg": { "x": 17.8, "y": 4.23, "rotation": 37.63, "width": 101, "height": 89 } + }, + "right-front-thigh": { + "right-front-thigh": { "x": 35.29, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 } + }, + "right-front-toe1": { + "front-toe-b": { "x": 24.5, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 } + }, + "right-front-toe2": { + "front-toe-b": { "x": 26.39, "y": 1.17, "rotation": 104.58, "width": 56, "height": 57 } + }, + "right-front-toe3": { + "front-toe-b": { "x": 30.67, "y": -0.07, "rotation": 112.3, "width": 56, "height": 57 } + }, + "right-rear-leg": { + "right-rear-leg": { "x": 60.88, "y": -5.73, "rotation": -127.67, "width": 116, "height": 100 } + }, + "right-rear-thigh": { + "right-rear-thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 } + }, + "right-rear-toe1": { + "right-rear-toe": { "x": 54.76, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 } + }, + "right-rear-toe2": { + "right-rear-toe": { "x": 57.03, "y": -7.23, "rotation": 134.43, "width": 109, "height": 77 } + }, + "right-rear-toe3": { + "right-rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 } + }, + "right-wing": { + "right-wing": { + "x": 35.09, + "y": 78.11, + "rotation": -130.34, + "width": 365, + "height": 643, + "sequence": { "count": 9, "digits": 2 } + } + }, + "tail1": { + "tail01": { "x": 22.6, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 } + }, + "tail2": { + "tail02": { "x": 18.12, "y": -1.75, "rotation": 151.85, "width": 95, "height": 120 } + }, + "tail3": { + "tail03": { "x": 16.94, "y": -2.01, "rotation": 150.04, "width": 73, "height": 92 } + }, + "tail4": { + "tail04": { "x": 15.35, "y": -2.18, "rotation": 151.85, "width": 56, "height": 71 } + }, + "tail5": { + "tail05": { "x": 15.06, "y": -3.57, "rotation": 155, "width": 52, "height": 59 } + }, + "tail6": { + "tail06": { "x": 28.02, "y": -16.83, "rotation": -175.45, "width": 95, "height": 68 } + }, + "thiagobrayner": { + "thiagobrayner": { "y": -95, "width": 350, "height": 31 } + } + } + } +], +"animations": { + "flying": { + "bones": { + "back": { + "rotate": [ + { + "curve": [ 0.042, 2.86, 0.143, 10.41 ] + }, + { + "time": 0.1667, + "value": 11.59, + "curve": [ 0.245, 15.58, 0.383, 22.41 ] + }, + { + "time": 0.5, + "value": 22.4, + "curve": [ 0.593, 22.39, 0.75, -3.18 ] + }, + { + "time": 0.8333, + "value": -3.18, + "curve": [ 0.875, -3.18, 0.942, -2.19 ] + }, + { "time": 1 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.092, -0.1, 0.304, -21.22 ] + }, + { + "time": 0.3333, + "value": -23.16, + "curve": [ 0.386, -26.7, 0.442, -31.89 ] + }, + { + "time": 0.5333, + "value": -31.93, + "curve": [ 0.644, -31.97, 0.888, -0.1 ] + }, + { "time": 1 } + ] + }, + "right-rear-leg": { + "rotate": [ + { + "curve": [ 0.054, -7.16, 0.227, -10.75 ] + }, + { + "time": 0.3333, + "value": -10.75, + "curve": [ 0.417, -10.75, 0.583, 23.32 ] + }, + { + "time": 0.6667, + "value": 23.32, + "curve": [ 0.792, 23.32, 0.881, 13.94 ] + }, + { "time": 1 } + ] + }, + "right-rear-toe3": { + "rotate": [ + { + "value": -7.31, + "curve": [ 0.051, -3.08, 0.097, 0 ] + }, + { + "time": 0.1333, + "curve": [ 0.258, 0, 0.508, -36.06 ] + }, + { + "time": 0.6333, + "value": -36.06, + "curve": [ 0.723, -36.06, 0.875, -17.83 ] + }, + { "time": 1, "value": -7.31 } + ] + }, + "right-rear-toe2": { + "rotate": [ + { + "value": -1.41, + "curve": [ 0.025, -0.6, 0.047, 0 ] + }, + { + "time": 0.0667, + "curve": [ 0.192, 0, 0.442, -20.32 ] + }, + { + "time": 0.5667, + "value": -20.32, + "curve": [ 0.673, -20.32, 0.868, -5.88 ] + }, + { "time": 1, "value": -1.41 } + ] + }, + "right-rear-toe1": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, -18.71 ] + }, + { + "time": 0.5, + "value": -18.71, + "curve": [ 0.625, -18.71, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 1.04 ] + }, + { + "time": 0.5, + "value": 1.04, + "curve": [ 0.625, 1.04, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "chin": { + "rotate": [ + { + "curve": [ 0.136, -10.78, 0.217, -12.01 ] + }, + { + "time": 0.3333, + "value": -11.71, + "curve": [ 0.443, -11.42, 0.508, 21.91 ] + }, + { + "time": 0.6667, + "value": 22.01, + "curve": [ 0.847, 22.13, 0.95, 5.91 ] + }, + { "time": 1 } + ] + }, + "left-front-thigh": { + "rotate": [ + { + "value": -0.02, + "curve": [ 0.068, -0.02, 0.348, -32.09 ] + }, + { + "time": 0.5, + "value": -32.02, + "curve": [ 0.653, -31.95, 0.906, 0 ] + }, + { "time": 1 } + ] + }, + "right-front-thigh": { + "rotate": [ + { + "curve": [ 0.053, -5.52, 0.125, -12.96 ] + }, + { + "time": 0.1667, + "value": -12.96, + "curve": [ 0.25, -12.96, 0.417, 16.2 ] + }, + { + "time": 0.5, + "value": 16.2, + "curve": [ 0.625, 16.2, 0.866, 9.48 ] + }, + { "time": 1 } + ] + }, + "left-front-leg": { + "rotate": [ + { + "curve": [ 0.09, -12.24, 0.131, -21.37 ] + }, + { + "time": 0.2, + "value": -21.49, + "curve": [ 0.319, -21.94, 0.5, 77.25 ] + }, + { + "time": 0.6, + "value": 77.25, + "curve": [ 0.7, 77.25, 0.908, 12.37 ] + }, + { "time": 1 } + ] + }, + "left-front-toe1": { + "rotate": [ + { + "curve": [ 0.071, -4.48, 0.2, -12.68 ] + }, + { + "time": 0.2667, + "value": -12.68, + "curve": [ 0.375, -12.68, 0.592, 6.99 ] + }, + { + "time": 0.7, + "value": 6.99, + "curve": [ 0.775, 6.99, 0.904, 3.55 ] + }, + { "time": 1 } + ] + }, + "left-front-toe2": { + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.331, 0.125, 1, 0.375, 1.029 ] + }, + { + "time": 0.5, + "x": 1.331, + "y": 1.029, + "curve": [ 0.625, 1.331, 0.875, 1, 0.625, 1.029, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "left-front-toe4": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 26.52 ] + }, + { + "time": 0.5, + "value": 26.52, + "curve": [ 0.625, 26.52, 0.875, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.211, 0.125, 1, 0.375, 0.993 ] + }, + { + "time": 0.5, + "x": 1.211, + "y": 0.993, + "curve": [ 0.625, 1.211, 0.875, 1, 0.625, 0.993, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "left-front-toe3": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 16.99 ] + }, + { + "time": 0.5, + "value": 16.99, + "curve": [ 0.625, 16.99, 0.875, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.355, 0.125, 1, 0.375, 1.008 ] + }, + { + "time": 0.5, + "x": 1.355, + "y": 1.008, + "curve": [ 0.625, 1.355, 0.875, 1, 0.625, 1.008, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "right-front-leg": { + "rotate": [ + { + "curve": [ 0.11, -8.79, 0.179, -18.3 ] + }, + { + "time": 0.2667, + "value": -18.31, + "curve": [ 0.352, -18.33, 0.55, 15.48 ] + }, + { + "time": 0.6333, + "value": 15.48, + "curve": [ 0.758, 15.48, 0.875, 7.9 ] + }, + { "time": 1 } + ] + }, + "right-front-toe1": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.147, 8.28 ] + }, + { + "time": 0.1667, + "value": 10.52, + "curve": [ 0.238, 18.41, 0.406, 35.06 ] + }, + { + "time": 0.5, + "value": 34.84, + "curve": [ 0.577, 34.84, 0.669, 29.65 ] + }, + { + "time": 0.7667, + "value": 20.24, + "curve": [ 0.852, 11.97, 0.941, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.412, 0.125, 1, 0.375, 1 ] + }, + { + "time": 0.5, + "x": 1.412, + "curve": [ 0.625, 1.412, 0.875, 1, 0.625, 1, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "right-front-toe2": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.125, 24.7 ] + }, + { + "time": 0.1667, + "value": 24.7, + "curve": [ 0.25, 24.7, 0.417, 7.35 ] + }, + { + "time": 0.5, + "value": 7.35, + "curve": [ 0.544, 7.35, 0.671, 33.55 ] + }, + { + "time": 0.7333, + "value": 32.36, + "curve": [ 0.853, 30.19, 0.919, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.407, 0.125, 1, 0.375, 1.058 ] + }, + { + "time": 0.5, + "x": 1.407, + "y": 1.058, + "curve": [ 0.625, 1.407, 0.875, 1, 0.625, 1.058, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "right-front-toe3": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 11.01 ] + }, + { + "time": 0.1333, + "value": 11.01, + "curve": [ 0.208, 11.01, 0.358, -5.41 ] + }, + { + "time": 0.4333, + "value": -5.41, + "curve": [ 0.508, -5.41, 0.658, 20.3 ] + }, + { + "time": 0.7333, + "value": 20.3, + "curve": [ 0.8, 20.3, 0.933, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { + "curve": [ 0.125, 1, 0.375, 1.33, 0.125, 1, 0.375, 1.182 ] + }, + { + "time": 0.5, + "x": 1.33, + "y": 1.182, + "curve": [ 0.625, 1.33, 0.875, 1, 0.625, 1.182, 0.875, 1 ] + }, + { "time": 1 } + ] + }, + "right-wing": { + "rotate": [ + { + "value": -9.59, + "curve": [ 0.131, -9.59, 0.191, 22.41 ] + }, + { + "time": 0.3333, + "value": 22.81, + "curve": [ 0.417, 23.05, 0.533, 7.5 ] + }, + { + "time": 0.5667, + "value": 2.07, + "curve": [ 0.588, -1.48, 0.639, -8.35 ] + }, + { + "time": 0.7, + "value": -8.29, + "curve": [ 0.743, -8.24, 0.792, 5.28 ] + }, + { + "time": 0.8333, + "value": 5.02, + "curve": [ 0.904, 4.59, 0.957, -9.72 ] + }, + { "time": 1, "value": -9.59 } + ] + }, + "left-wing": { + "rotate": [ + { + "curve": [ 0.039, 0, 0.084, -21.1 ] + }, + { + "time": 0.1333, + "value": -21.1, + "curve": [ 0.292, -21.1, 0.505, 4.34 ] + }, + { + "time": 0.6333, + "value": 4.48, + "curve": [ 0.679, 4.48, 0.699, -6.03 ] + }, + { + "time": 0.7667, + "value": -5.95, + "curve": [ 0.857, -5.84, 0.936, 0 ] + }, + { "time": 1 } + ] + }, + "left-rear-leg": { + "rotate": [ + { + "curve": [ 0.08, 5.97, 0.25, 15.82 ] + }, + { + "time": 0.3333, + "value": 15.82, + "curve": [ 0.425, 15.82, 0.608, -17.33 ] + }, + { + "time": 0.7, + "value": -17.33, + "curve": [ 0.775, -17.33, 0.871, -8.98 ] + }, + { "time": 1 } + ] + }, + "center": { + "rotate": [ + { + "curve": [ 0.072, 6.07, 0.213, 17.69 ] + }, + { + "time": 0.3333, + "value": 17.69, + "curve": [ 0.454, 17.68, 0.583, -15 ] + }, + { + "time": 0.6667, + "value": -15, + "curve": [ 0.804, -15, 0.966, -3.62 ] + }, + { "time": 1 } + ], + "translate": [ + { + "curve": [ 0.125, 0, 0.375, -0.01, 0.162, 0, 0.288, 144.81 ] + }, + { + "time": 0.5, + "x": -0.01, + "y": 144.61, + "curve": [ 0.625, -0.01, 0.875, 0, 0.718, 145.5, 0.832, 0 ] + }, + { "time": 1 } + ] + }, + "tail1": { + "rotate": [ + { + "value": -1.88, + "curve": [ 0.125, -1.88, 0.375, -67.4 ] + }, + { + "time": 0.5, + "value": -67.4, + "curve": [ 0.625, -67.4, 0.875, -1.88 ] + }, + { "time": 1, "value": -1.88 } + ] + }, + "tail2": { + "rotate": [ + { + "value": -27.45, + "curve": [ 0.125, -27.45, 0.375, 2.68 ] + }, + { + "time": 0.5, + "value": 2.68, + "curve": [ 0.625, 2.68, 0.875, -27.45 ] + }, + { "time": 1, "value": -27.45 } + ] + }, + "tail3": { + "rotate": [ + { + "value": -7.63, + "curve": [ 0.125, -7.63, 0.375, 24.54 ] + }, + { + "time": 0.5, + "value": 24.54, + "curve": [ 0.625, 24.54, 0.875, -7.63 ] + }, + { "time": 1, "value": -7.63 } + ] + }, + "tail4": { + "rotate": [ + { + "value": -10.04, + "curve": [ 0.125, -10.04, 0.375, 1.03 ] + }, + { + "time": 0.5, + "value": 1.03, + "curve": [ 0.625, 1.03, 0.875, -10.04 ] + }, + { "time": 1, "value": -10.04 } + ] + }, + "tail5": { + "rotate": [ + { + "value": -11.26, + "curve": [ 0.152, -11.21, 0.334, 9.91 ] + }, + { + "time": 0.5, + "value": 9.93, + "curve": [ 0.662, 9.95, 0.844, -11.17 ] + }, + { "time": 1, "value": -11.26 } + ] + }, + "tail6": { + "rotate": [ + { + "value": 26.68, + "curve": [ 0.194, 26.72, 0.328, 35.84 ] + }, + { + "time": 0.5, + "value": 35.84, + "curve": [ 0.678, 35.84, 0.818, 26.62 ] + }, + { "time": 1, "value": 26.68 } + ] + }, + "right-rear-thigh": { + "rotate": [ + { + "curve": [ 0.055, -6.4, 0.166, -22.66 ] + }, + { + "time": 0.2667, + "value": -22.66, + "curve": [ 0.384, -22.66, 0.517, 19.08 ] + }, + { + "time": 0.6333, + "value": 19.32, + "curve": [ 0.746, 19.56, 0.91, 9.17 ] + }, + { "time": 1 } + ] + } + }, + "attachments": { + "default": { + "left-wing": { + "left-wing": { + "sequence": [ + { "mode": "loop", "delay": 0.0667 }, + { "time": 0.6 }, + { "time": 0.7333, "mode": "loop", "index": 1 }, + { "time": 0.8, "mode": "loop", "index": 2, "delay": 0.0333 }, + { "time": 0.9667, "index": 7 } + ] + } + }, + "right-wing": { + "right-wing": { + "sequence": [ + { "mode": "loop", "delay": 0.0667 }, + { "time": 0.6 }, + { "time": 0.7333, "mode": "loop", "index": 1 }, + { "time": 0.8, "mode": "loop", "index": 2, "delay": 0.0333 }, + { "time": 0.9667, "index": 7 } + ] + } + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/dragon-ess.skel b/spine-haxe/example/assets/dragon-ess.skel new file mode 100644 index 000000000..2fd796500 Binary files /dev/null and b/spine-haxe/example/assets/dragon-ess.skel differ diff --git a/spine-haxe/example/assets/dragon.atlas b/spine-haxe/example/assets/dragon.atlas new file mode 100644 index 000000000..bca5b1e1b --- /dev/null +++ b/spine-haxe/example/assets/dragon.atlas @@ -0,0 +1,123 @@ +dragon.png + size: 1024, 1024 + filter: Linear, Linear +back + bounds: 564, 534, 190, 185 +chest + bounds: 2, 645, 136, 122 +chin + bounds: 140, 619, 214, 146 +front-toe-a + bounds: 2, 862, 29, 50 + rotate: 90 +front-toe-b + bounds: 467, 835, 56, 57 + rotate: 90 +head + bounds: 756, 398, 296, 260 + rotate: 90 +left-front-leg + bounds: 599, 834, 84, 57 +left-front-thigh + bounds: 782, 819, 84, 72 +left-rear-leg + bounds: 356, 558, 206, 177 +left-rear-thigh + bounds: 216, 767, 91, 149 + rotate: 90 +left-wing01 + bounds: 2, 268, 264, 589 + rotate: 90 +left-wing02 + bounds: 2, 2, 264, 589 + rotate: 90 +right-front-leg + bounds: 113, 769, 101, 89 +right-front-thigh + bounds: 758, 709, 108, 108 +right-rear-leg + bounds: 640, 721, 116, 100 +right-rear-thigh + bounds: 367, 742, 91, 149 + rotate: 90 +right-rear-toe + bounds: 2, 781, 109, 77 +tail01 + bounds: 868, 696, 120, 153 + rotate: 90 +tail02 + bounds: 518, 737, 95, 120 + rotate: 90 +tail03 + bounds: 868, 818, 73, 92 + rotate: 90 +tail04 + bounds: 526, 835, 56, 71 + rotate: 90 +tail05 + bounds: 406, 839, 52, 59 + rotate: 90 +tail06 + bounds: 685, 823, 95, 68 +thiagobrayner + bounds: 54, 860, 350, 31 + +dragon_2.png + size: 1024, 1024 + filter: Linear, Linear +left-wing03 + bounds: 2, 534, 264, 589 + rotate: 90 +left-wing04 + bounds: 2, 268, 264, 589 + rotate: 90 +left-wing05 + bounds: 593, 209, 264, 589 +left-wing06 + bounds: 2, 2, 264, 589 + rotate: 90 + +dragon_3.png + size: 1024, 1024 + filter: Linear, Linear +left-wing07 + bounds: 2, 694, 264, 589 + rotate: 90 +left-wing08 + bounds: 2, 428, 264, 589 + rotate: 90 +left-wing09 + bounds: 593, 369, 264, 589 +right-wing01 + bounds: 2, 2, 365, 643 + rotate: 90 + +dragon_4.png + size: 1024, 1024 + filter: Linear, Linear +right-wing02 + bounds: 2, 369, 365, 643 +right-wing03 + bounds: 369, 369, 365, 643 +right-wing04 + bounds: 2, 2, 365, 643 + rotate: 90 + +dragon_5.png + size: 1024, 1024 + filter: Linear, Linear +right-wing05 + bounds: 2, 369, 365, 643 +right-wing06 + bounds: 369, 369, 365, 643 +right-wing07 + bounds: 2, 2, 365, 643 + rotate: 90 + +dragon_6.png + size: 1024, 1024 + filter: Linear, Linear +right-wing08 + bounds: 2, 2, 365, 643 +right-wing09 + bounds: 369, 2, 365, 643 diff --git a/spine-haxe/example/assets/dragon.png b/spine-haxe/example/assets/dragon.png new file mode 100644 index 000000000..f39141c47 Binary files /dev/null and b/spine-haxe/example/assets/dragon.png differ diff --git a/spine-haxe/example/assets/dragon_2.png b/spine-haxe/example/assets/dragon_2.png new file mode 100644 index 000000000..09429b5f8 Binary files /dev/null and b/spine-haxe/example/assets/dragon_2.png differ diff --git a/spine-haxe/example/assets/dragon_3.png b/spine-haxe/example/assets/dragon_3.png new file mode 100644 index 000000000..1a0e35759 Binary files /dev/null and b/spine-haxe/example/assets/dragon_3.png differ diff --git a/spine-haxe/example/assets/dragon_4.png b/spine-haxe/example/assets/dragon_4.png new file mode 100644 index 000000000..80239b8d4 Binary files /dev/null and b/spine-haxe/example/assets/dragon_4.png differ diff --git a/spine-haxe/example/assets/dragon_5.png b/spine-haxe/example/assets/dragon_5.png new file mode 100644 index 000000000..5a98f7efa Binary files /dev/null and b/spine-haxe/example/assets/dragon_5.png differ diff --git a/spine-haxe/example/assets/dragon_6.png b/spine-haxe/example/assets/dragon_6.png new file mode 100644 index 000000000..f40aed7c7 Binary files /dev/null and b/spine-haxe/example/assets/dragon_6.png differ diff --git a/spine-haxe/example/assets/goblins-pro.json b/spine-haxe/example/assets/goblins-pro.json new file mode 100644 index 000000000..4819a6573 --- /dev/null +++ b/spine-haxe/example/assets/goblins-pro.json @@ -0,0 +1,1232 @@ +{ +"skeleton": { + "hash": "CdaHvXeCMjE", + "spine": "4.1.17", + "x": -134.12, + "y": -3.28, + "width": 266.94, + "height": 349.61, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 0.65, "y": 114.41, "color": "ffcf00ff" }, + { + "name": "torso", + "parent": "hip", + "length": 85.83, + "rotation": 93.93, + "x": -6.42, + "y": 1.98, + "color": "ffcf00ff" + }, + { + "name": "neck", + "parent": "torso", + "length": 18.38, + "rotation": -1.52, + "x": 81.68, + "y": -6.35, + "color": "ffcf00ff" + }, + { + "name": "head", + "parent": "neck", + "length": 68.29, + "rotation": -13.92, + "x": 20.94, + "y": 11.59, + "color": "ffcf00ff" + }, + { + "name": "left-shoulder", + "parent": "torso", + "length": 35.43, + "rotation": -156.96, + "x": 74.05, + "y": -20.39, + "color": "ff0000ff" + }, + { + "name": "left-arm", + "parent": "left-shoulder", + "length": 35.62, + "rotation": 28.17, + "x": 37.86, + "y": -2.35, + "color": "ff0000ff" + }, + { + "name": "left-upper-leg", + "parent": "hip", + "length": 50.4, + "rotation": -89.1, + "x": 14.45, + "y": 2.81, + "color": "ff0000ff" + }, + { + "name": "left-lower-leg", + "parent": "left-upper-leg", + "length": 49.9, + "rotation": -16.66, + "x": 56.34, + "y": 0.99, + "color": "ff0000ff" + }, + { + "name": "left-foot", + "parent": "left-lower-leg", + "length": 46.5, + "rotation": 102.43, + "x": 58.94, + "y": -7.61, + "color": "ff0000ff" + }, + { + "name": "left-hand", + "parent": "left-arm", + "length": 11.52, + "rotation": 2.7, + "x": 35.62, + "y": 0.08, + "color": "ff0000ff" + }, + { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.58, "color": "ffcf00ff" }, + { + "name": "right-shoulder", + "parent": "torso", + "length": 37.25, + "rotation": 133.89, + "x": 76.02, + "y": 18.15, + "color": "62ff00ff" + }, + { + "name": "right-arm", + "parent": "right-shoulder", + "length": 36.75, + "rotation": 36.33, + "x": 37.61, + "y": 0.31, + "color": "62ff00ff" + }, + { + "name": "right-upper-leg", + "parent": "hip", + "length": 42.46, + "rotation": -97.5, + "x": -20.08, + "y": -6.84, + "color": "62ff00ff" + }, + { + "name": "right-lower-leg", + "parent": "right-upper-leg", + "length": 58.53, + "rotation": -14.34, + "x": 43, + "y": -0.62, + "color": "62ff00ff" + }, + { + "name": "right-foot", + "parent": "right-lower-leg", + "length": 45.46, + "rotation": 110.31, + "x": 64.89, + "y": 0.04, + "color": "62ff00ff" + }, + { + "name": "right-hand", + "parent": "right-arm", + "length": 15.32, + "rotation": 2.36, + "x": 36.9, + "y": 0.35, + "color": "62ff00ff" + }, + { + "name": "spear1", + "parent": "left-hand", + "length": 65.07, + "rotation": 102.43, + "x": 0.48, + "y": 17.03, + "color": "ffcf00ff" + }, + { + "name": "spear2", + "parent": "spear1", + "length": 61.42, + "rotation": 0.9, + "x": 65.06, + "y": 0.04, + "color": "ffcf00ff" + }, + { + "name": "spear3", + "parent": "spear2", + "length": 76.8, + "rotation": -0.9, + "x": 61.89, + "y": 0.57, + "color": "ffcf00ff" + } +], +"slots": [ + { "name": "left-shoulder", "bone": "left-shoulder", "attachment": "left-shoulder" }, + { "name": "left-arm", "bone": "left-arm", "attachment": "left-arm" }, + { "name": "left-hand-item", "bone": "left-hand", "attachment": "spear" }, + { "name": "left-hand", "bone": "left-hand", "attachment": "left-hand" }, + { "name": "left-foot", "bone": "left-foot", "attachment": "left-foot" }, + { "name": "left-lower-leg", "bone": "left-lower-leg", "attachment": "left-lower-leg" }, + { "name": "left-upper-leg", "bone": "left-upper-leg", "attachment": "left-upper-leg" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, + { "name": "right-foot", "bone": "right-foot", "attachment": "right-foot" }, + { "name": "right-lower-leg", "bone": "right-lower-leg", "attachment": "right-lower-leg" }, + { "name": "undie-straps", "bone": "pelvis", "attachment": "undie-straps" }, + { "name": "undies", "bone": "pelvis", "attachment": "undies" }, + { "name": "right-upper-leg", "bone": "right-upper-leg", "attachment": "right-upper-leg" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eyes", "bone": "head" }, + { "name": "right-shoulder", "bone": "right-shoulder", "attachment": "right-shoulder" }, + { "name": "right-arm", "bone": "right-arm", "attachment": "right-arm" }, + { "name": "right-hand-thumb", "bone": "right-hand", "attachment": "right-hand-thumb" }, + { "name": "right-hand-item", "bone": "right-hand", "attachment": "dagger" }, + { "name": "right-hand", "bone": "right-hand", "attachment": "right-hand" }, + { "name": "right-hand-item2", "bone": "right-hand", "attachment": "shield" } +], +"skins": [ + { + "name": "default", + "attachments": { + "left-hand-item": { + "dagger": { "x": 7.88, "y": -23.46, "rotation": 10.48, "width": 26, "height": 108 }, + "spear": { + "type": "mesh", + "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54328, 0.2259, 0.38362, 0.20891, 0.21605, 0.20043, 0.13243, 0, 0.1152, 0.4527, 0, 0.58399, 0 ], + "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], + "vertices": [ 1, 20, 38.54, -10.89, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.59, 0.5116, 20, -0.31, -6.16, 0.4884, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.07, 0.49728, 1, 10, 4.57, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.43, -141.1, 1, 1, 10, -6.49, 22.41, 1, 2, 18, 65.48, 6.65, 0.50272, 19, 0.53, 6.6, 0.49728, 2, 19, 62.19, 6.67, 0.5116, 20, 0.2, 6.1, 0.4884, 1, 20, 30.97, 6.62, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.6, 1, 1, 20, 79.78, -1.29, 1 ], + "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "width": 22, + "height": 368 + } + }, + "right-hand-item": { + "dagger": { + "type": "mesh", + "uvs": [ 0.78092, 0.38453, 1, 0.38406, 1, 0.44882, 0.73954, 0.4687, 0.74642, 0.81344, 0.34023, 1, 0.15434, 1, 0.11304, 0.78858, 0.23007, 0.47368, 0, 0.45047, 0, 0.38622, 0.22368, 0.38573, 0.24384, 0, 1, 0 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], + "vertices": [ 15.49, -12.83, 21.14, -13.57, 20.16, -20.5, 13.16, -21.68, 8.13, -58.57, -5.14, -77.04, -9.92, -76.37, -7.8, -53.61, -0.03, -20.36, -5.61, -17.04, -4.64, -10.17, 1.13, -10.93, 7.47, 30.24, 26.93, 27.5 ], + "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], + "width": 26, + "height": 108 + } + }, + "right-hand-item2": { + "shield": { "rotation": 93.5, "width": 70, "height": 72 } + } + } + }, + { + "name": "goblin", + "attachments": { + "eyes": { + "eyes-closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.9, "rotation": -88.93, "width": 34, "height": 12 } + }, + "head": { + "head": { + "name": "goblin/head", + "type": "mesh", + "uvs": [ 0, 0.60495, 0.14172, 0.51451, 0.24218, 0.55229, 0.32668, 0.67807, 0.37969, 0.79352, 0.53505, 0.93015, 0.86057, 1, 0.94071, 0.94169, 0.92099, 0.69924, 0.9888, 0.65498, 0.99003, 0.51643, 0.89633, 0.43562, 0.94487, 0.41917, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80755, 0.16045, 0.66699, 0.01998, 0.4734, 0.01806, 0.29215, 0.19893, 0.25393, 0.31824, 0.09117, 0.32401, 0, 0.44331, 0.43271, 0.69154, 0.46601, 0.47795, 0.35997, 0.31246, 0.73474, 0.68594, 0.72216, 0.57426, 0.8818, 0.5583, 0.80268, 0.51016 ], + "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], + "vertices": [ 14.56, 50.42, 23.12, 35.48, 17.47, 26.36, 11.58, 16.87, 3.75, 11.71, -5.9, -3.92, -11.83, -37.24, -8.32, -45.64, 7.75, -44.24, 10.4, -51.34, 19.53, -51.83, 25.21, -43.16, 26.13, -47.43, 27.36, -53.16, 34.84, -53.46, 35.97, -47.34, 37.11, -41.09, 43.75, -33.98, 53.59, -19.88, 54.51, 0.04, 43.32, 19.17, 35.61, 23.41, 35.89, 40.18, 28.4, 49.87, 10.26, 5.99, 24.21, 2, 35.55, 12.48, 9.39, -25.11, 16.8, -24.31, 17.21, -40.66, 20.69, -33.02 ], + "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "width": 103, + "height": 66 + } + }, + "left-arm": { + "left-arm": { + "name": "goblin/left-arm", + "type": "mesh", + "uvs": [ 0.68993, 0.29284, 1, 0.46364, 1, 0.74644, 0.8409, 1, 0.66344, 1, 0.33766, 0.64284, 0, 0.44124, 0, 0, 0.34296, 0 ], + "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], + "vertices": [ 18.6, 8.81, 32.2, 10.32, 38.02, 1.63, 38.08, -9.63, 32.32, -13.5, 14.37, -9.62, -0.76, -10.78, -9.85, 2.78, 1.29, 10.25 ], + "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "width": 37, + "height": 35 + } + }, + "left-foot": { + "left-foot": { + "name": "goblin/left-foot", + "type": "mesh", + "uvs": [ 0.15734, 0.31874, 0.08195, 0.78503, 0.15884, 0.99367, 0.41633, 0.96805, 0.68823, 0.97637, 1, 0.96388, 0.99386, 0.73501, 0.85295, 0.51863, 0.61479, 0.31056, 0.46992, 0, 0.48033, 0.75604, 0.75995, 0.77706 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], + "vertices": [ 2.28, 13.07, -1.77, -1.64, 3.6, -7.81, 20.26, -6.04, 37.92, -5.28, 58.13, -3.71, 57.32, 3.35, 47.78, 9.51, 31.95, 15.05, 21.99, 24.12, 24.03, 0.76, 42.21, 1.16 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], + "width": 65, + "height": 31 + } + }, + "left-hand": { + "left-hand": { + "name": "goblin/left-hand", + "type": "mesh", + "uvs": [ 0.51801, 0.12578, 1, 0.16286, 0.99789, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42793, 0.17601, 0, 0.43568, 0 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.43, 10.84, 22.27, 15.5, 14.56, 18.36, -8.96, 9.48, -14.33, -4.59, -14.3, -11.64, -2.64, -14.89, 13.68, -7.76, 18 ], + "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "width": 36, + "height": 41 + } + }, + "left-lower-leg": { + "left-lower-leg": { + "name": "goblin/left-lower-leg", + "type": "mesh", + "uvs": [ 0.95509, 0.2075, 0.81927, 0.65214, 0.94754, 0.77308, 0.67842, 0.97347, 0.46464, 1, 0.26845, 1, 0.04964, 0.90707, 0.21061, 0.60115, 0.07479, 0.40195, 0.18545, 0, 0.28858, 0 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.2, 6.82, 30.97, 10.96, 37.97, 17.34, 53.88, 12.6, 57.59, 6.32, 59.35, 0.09, 55.05, -8.63, 33, -9.34, 20.8, -17.44, -7.28, -21.57, -8.2, -18.29 ], + "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "width": 33, + "height": 70 + } + }, + "left-shoulder": { + "left-shoulder": { + "name": "goblin/left-shoulder", + "type": "mesh", + "uvs": [ 0.7377, 0.40692, 1, 0.75238, 1, 1, 0.62046, 1, 0.26184, 0.56602, 0, 0.29783, 0, 0, 0.44115, 0 ], + "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], + "vertices": [ 15.18, 5.74, 32.17, 5.33, 41.79, 0.22, 36.63, -9.5, 14.89, -9.73, 0.9, -10.9, -10.67, -4.75, -4.67, 6.55 ], + "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "width": 29, + "height": 44 + } + }, + "left-upper-leg": { + "left-upper-leg": { + "name": "goblin/left-upper-leg", + "type": "mesh", + "uvs": [ 1, 0.12168, 1, 0.54873, 0.91067, 0.78907, 0.76568, 1, 0.30871, 0.95791, 0, 0.68777, 0, 0.21901, 0.51962, 0, 0.87552, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], + "vertices": [ 2.34, 13.07, 33.51, 12.57, 51, 9.34, 66.32, 4.31, 63.01, -10.71, 43.13, -20.59, 8.91, -20.04, -6.8, -2.64, -6.61, 9.1 ], + "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], + "width": 33, + "height": 73 + } + }, + "neck": { + "neck": { + "name": "goblin/neck", + "type": "mesh", + "uvs": [ 0.81968, 0.27365, 0.92101, 0.82048, 0.47135, 1, 0.15679, 0.93541, 0, 0.7556, 0.19268, 0.51834, 0.15468, 0.35707, 0, 0.2199, 0.13568, 0, 0.68879, 0, 0.70146, 0.53873 ], + "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], + "vertices": [ 18.63, -11.66, -3.98, -13.86, -10.29, 2.77, -6.92, 13.9, 0.8, 19.06, 10.06, 11.51, 16.75, 12.45, 22.72, 17.65, 31.4, 12.2, 30.12, -7.68, 8.05, -6.71 ], + "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "width": 36, + "height": 41 + } + }, + "pelvis": { + "pelvis": { + "name": "goblin/pelvis", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 25.38, -20.73, -36.62, -20.73, -36.62, 22.27, 25.38, 22.27 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 62, + "height": 43 + } + }, + "right-arm": { + "right-arm": { + "name": "goblin/right-arm", + "type": "mesh", + "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24385, 1, 0, 0.86559, 0.20823, 0.1092, 0.50903, 0, 0.85342, 0 ], + "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.9, 41.82, -5.03, 35.54, -11.13, -2.54, -9.2, -8.5, -2.72, -9.1, 5.18 ], + "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "width": 23, + "height": 50 + } + }, + "right-foot": { + "right-foot": { + "name": "goblin/right-foot", + "type": "mesh", + "uvs": [ 0.40851, 0.00471, 0.59088, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97533, 0.89392, 0.90386, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65985, 0, 0.46578, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71258, 0.71501, 0.74681 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], + "vertices": [ 17.36, 26, 29.14, 15.44, 39.89, 10.81, 48.15, 7.25, 53.84, -2.38, 49.43, -6, 34.85, -6.39, 16.84, -6.87, -2.4, -7.38, -7.59, -3.87, -7.79, 3.7, -7.96, 10.1, -2.57, 22.36, 10.84, 25.98, 22.15, 2.76, 37.32, 2.03 ], + "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], + "width": 63, + "height": 33 + } + }, + "right-hand": { + "right-hand": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89824, 0.82005, 0.8259, 0.74286, 0.84224, 0.49994, 0.96357, 0.34102, 0.66024, 0 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.83, -9.45, 5.95, -15.35, 18.88, -14.9, 24.01, -7.5, 25.69, 5.16, 25.32, 16.08, 18.61, 17.44, 15.85, 14.74, 6.84, 15.02, 0.82, 19.19, -11.42, 7.84 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "width": 36, + "height": 37 + } + }, + "right-hand-thumb": { + "right-hand-thumb": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.88538, 0.22263, 0.76168, 0.3594, 0.75089, 0.78308, 0.95326, 0.84981, 1, 0.60303 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], + "vertices": [ -2.82, 15.98, 2.4, 11.72, 18.08, 11.91, 20.28, 19.28, 11.09, 20.62 ], + "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], + "width": 36, + "height": 37 + } + }, + "right-lower-leg": { + "right-lower-leg": { + "name": "goblin/right-lower-leg", + "type": "mesh", + "uvs": [ 1, 0.27261, 0.81312, 0.52593, 0.79587, 0.71796, 0.95544, 0.80989, 0.85194, 0.95493, 0.47242, 1, 0.14034, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30326, 0.60611, 0 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.27, 8.46, 23.32, 8.05, 37.1, 12.9, 41.45, 20.83, 53.07, 21.47, 61.33, 10.06, 65.78, -1.04, 59, -9.19, 43.02, -9.82, 16.33, -20.01, -12.8, -9.26 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "width": 36, + "height": 76 + } + }, + "right-shoulder": { + "right-shoulder": { + "name": "goblin/right-shoulder", + "type": "mesh", + "uvs": [ 0.62008, 0.03709, 0.92131, 0.09049, 1, 0.3832, 0.72049, 0.69371, 0.31657, 1, 0, 1, 0, 0.75106, 0.28234, 0.49989 ], + "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], + "vertices": [ -3.17, -11.05, -9, -0.58, -1.01, 10.34, 16.69, 11.17, 37.41, 8.2, 45.46, -1.16, 36.96, -8.46, 21.21, -7.48 ], + "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], + "width": 39, + "height": 45 + } + }, + "right-upper-leg": { + "right-upper-leg": { + "name": "goblin/right-upper-leg", + "type": "mesh", + "uvs": [ 0.27019, 0, 0.11619, 0.18177, 0, 0.70688, 0, 0.89577, 0.26669, 1, 0.48719, 1, 0.67619, 0.83533, 1, 0.5161, 1, 0.25544, 0.74619, 0.0571 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.86, -10.37, 2.18, -14.07, 35.49, -13.67, 47.29, -12.11, 52.62, -2.27, 51.64, 5.17, 40.51, 10.18, 19.14, 18.47, 2.85, 16.33, -8.41, 6.14 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 34, + "height": 63 + } + }, + "torso": { + "torso": { + "name": "goblin/torso", + "type": "mesh", + "uvs": [ 0, 0.33288, 0.15946, 0.46489, 0.15762, 0.60314, 0.15502, 0.79806, 0.32808, 0.93479, 0.68751, 1, 0.80732, 1, 1, 0.77763, 1, 0.66148, 1, 0.56704, 0.93208, 0.4771, 0.86944, 0.39417, 0.83838, 0.22601, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78735, 0.8625, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38317, 0.77692, 0.73447, 0.66479, 0.51012 ], + "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], + "vertices": [ 56.93, 27.95, 43.37, 18.24, 30.16, 19.5, 11.53, 21.29, -2.55, 10.69, -10.89, -13.12, -11.59, -21.24, 8.55, -36.13, 19.66, -37.09, 28.69, -37.86, 37.69, -34.01, 45.99, -30.45, 56.4, -29.07, 84.79, -20.92, 87.9, 15.15, 81.89, 25.8, 1.67, -21.02, 10.04, 2.19, 25.23, -18.25, 29.99, 0.01, 48.54, -8.4, 13.98, -21.37, 35.91, -15.6 ], + "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "width": 68, + "height": 96 + } + }, + "undie-straps": { + "undie-straps": { + "name": "goblin/undie-straps", + "type": "mesh", + "uvs": [ 0.36098, 0.4496, 0.66298, 0.60591, 1, 0.19486, 1, 0.57118, 0.75898, 1, 0.38698, 1, 0, 0.26433, 0, 0, 0.12498, 0 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.88, 6.54, 9.91, 25.62, 17.72, 25.62, 10.57, 11.97, 2.42, -9.09, 2.42, -31, 16.4, -31, 21.42, -23.93, 21.42 ], + "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "width": 55, + "height": 19 + } + }, + "undies": { + "undies": { + "name": "goblin/undies", + "type": "mesh", + "uvs": [ 0, 0.3203, 0.14893, 0.59457, 0.22438, 1, 0.3591, 1, 0.50999, 1, 0.7956, 0.58454, 0.98421, 0.28016, 1, 0.00588, 0.46957, 0.17647, 0, 0.03933, 0.48843, 0.59123, 0.48115, 0.431 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.57, -8, -2.48, -5.49, -14.28, -0.64, -14.36, 4.79, -14.46, 15.28, -2.59, 22.22, 6.12, 22.93, 14.06, 3.75, 9.45, -13.08, 13.72, 4.22, -2.59, 4.04, 2.06 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "width": 36, + "height": 29 + } + } + } + }, + { + "name": "goblingirl", + "attachments": { + "eyes": { + "eyes-closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.55, "rotation": -87.05, "width": 37, "height": 21 } + }, + "head": { + "head": { "name": "goblingirl/head", "x": 27.72, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } + }, + "left-arm": { + "left-arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.43, "rotation": 33.05, "width": 37, "height": 35 } + }, + "left-foot": { + "left-foot": { "name": "goblingirl/left-foot", "type": "linkedmesh", "skin": "goblin", "parent": "left-foot", "width": 65, "height": 31 } + }, + "left-hand": { + "left-hand": { + "name": "goblingirl/left-hand", + "x": 4.34, + "y": 2.39, + "scaleX": 0.8965, + "scaleY": 0.8965, + "rotation": 30.35, + "width": 35, + "height": 40 + } + }, + "left-lower-leg": { + "left-lower-leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.61, "rotation": 105.76, "width": 33, "height": 70 } + }, + "left-shoulder": { + "left-shoulder": { "name": "goblingirl/left-shoulder", "x": 19.81, "y": -0.43, "rotation": 61.22, "width": 28, "height": 46 } + }, + "left-upper-leg": { + "left-upper-leg": { "name": "goblingirl/left-upper-leg", "x": 30.22, "y": -2.95, "rotation": 89.1, "width": 33, "height": 70 } + }, + "neck": { + "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.15, "rotation": -98.86, "width": 35, "height": 41 } + }, + "pelvis": { + "pelvis": { "name": "goblingirl/pelvis", "x": -3.88, "y": 3.19, "width": 62, "height": 43 } + }, + "right-arm": { + "right-arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.53, "width": 28, "height": 50 } + }, + "right-foot": { + "right-foot": { "name": "goblingirl/right-foot", "type": "linkedmesh", "skin": "goblin", "parent": "right-foot", "width": 63, "height": 33 } + }, + "right-hand": { + "right-hand": { "name": "goblingirl/right-hand", "x": 7.22, "y": 3.44, "rotation": 91.17, "width": 36, "height": 37 } + }, + "right-hand-thumb": { + "right-hand-thumb": { "name": "goblingirl/right-hand", "x": 7.22, "y": 3.44, "rotation": 91.17, "width": 36, "height": 37 } + }, + "right-lower-leg": { + "right-lower-leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.28, "rotation": 111.84, "width": 36, "height": 76 } + }, + "right-shoulder": { + "right-shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.46, "rotation": 129.85, "width": 39, "height": 45 } + }, + "right-upper-leg": { + "right-upper-leg": { "name": "goblingirl/right-upper-leg", "x": 19.7, "y": 2.13, "rotation": 97.5, "width": 34, "height": 63 } + }, + "torso": { + "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.75, "width": 68, "height": 96 } + }, + "undie-straps": { + "undie-straps": { "name": "goblingirl/undie-straps", "x": -1.52, "y": 14.19, "width": 55, "height": 19 } + }, + "undies": { + "undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.71, "width": 36, "height": 29 } + } + } + } +], +"animations": { + "walk": { + "slots": { + "eyes": { + "attachment": [ + { "time": 0.7, "name": "eyes-closed" }, + { "time": 0.8 } + ] + } + }, + "bones": { + "left-upper-leg": { + "rotate": [ + { "value": -26.56 }, + { "time": 0.1333, "value": -8.79 }, + { "time": 0.2333, "value": 9.51 }, + { "time": 0.3667, "value": 30.74 }, + { "time": 0.5, "value": 25.34 }, + { "time": 0.6333, "value": 26.12 }, + { "time": 0.7333, "value": 7.45 }, + { "time": 0.8667, "value": -21.19 }, + { "time": 1, "value": -26.56 } + ], + "translate": [ + { "x": -1.32, "y": 1.71 }, + { "time": 0.3667, "x": -0.06, "y": 2.43 }, + { "time": 1, "x": -1.32, "y": 1.71 } + ] + }, + "right-upper-leg": { + "rotate": [ + { "value": 42.45 }, + { + "time": 0.1333, + "value": 49.86, + "curve": [ 0.175, 49.86, 0.204, 22.69 ] + }, + { "time": 0.2333, "value": 22.51 }, + { "time": 0.5, "value": -16.94 }, + { "time": 0.6333, "value": 1.9 }, + { + "time": 0.7333, + "value": 34.87, + "curve": [ 0.795, 37.71, 0.867, 58.69 ] + }, + { + "time": 0.8667, + "value": 58.69, + "curve": [ 0.933, 58.35, 1, 42.45 ] + }, + { "time": 1, "value": 42.45 } + ], + "translate": [ + { "x": 6.24 }, + { "time": 0.2333, "x": 2.14, "y": 2.4 }, + { "time": 0.5, "x": 2.44, "y": 4.8 }, + { "time": 1, "x": 6.24 } + ] + }, + "left-lower-leg": { + "rotate": [ + { "value": -18.05 }, + { "time": 0.1333, "value": -63.51 }, + { "time": 0.2333, "value": -83.02 }, + { "time": 0.5, "value": 5.12 }, + { "time": 0.6333, "value": -28.3 }, + { "time": 0.7333, "value": -27.52 }, + { "time": 0.8667, "value": 3.53 }, + { "time": 1, "value": -18.05 } + ], + "translate": [ + {}, + { "time": 0.2333, "x": 2.56, "y": -0.47 }, + { "time": 0.5 } + ] + }, + "left-foot": { + "rotate": [ + { "value": -14.57 }, + { "time": 0.1333, "value": -10.42 }, + { "time": 0.2333, "value": -5.01 }, + { "time": 0.3, "value": 6.67 }, + { "time": 0.3667, "value": 3.87 }, + { "time": 0.5, "value": -3.88 }, + { "time": 0.6333, "value": 2.78 }, + { "time": 0.7333, "value": -12 }, + { "time": 0.8667, "value": -12.45 }, + { "time": 1, "value": -14.57 } + ] + }, + "right-shoulder": { + "rotate": [ + { + "value": 5.29, + "curve": [ 0.167, 5.29, 0.475, 6.65 ] + }, + { "time": 0.6333, "value": 6.65 }, + { "time": 1, "value": 5.29 } + ] + }, + "right-arm": { + "rotate": [ + { + "value": -4.03, + "curve": [ 0.169, -3.91, 0.51, 19.66 ] + }, + { + "time": 0.6333, + "value": 19.79, + "curve": [ 0.746, 19.75, 0.922, -3.91 ] + }, + { "time": 1, "value": -4.03 } + ] + }, + "right-hand": { + "rotate": [ + { "value": 8.99 }, + { "time": 0.6333, "value": 0.51 }, + { "time": 1, "value": 8.99 } + ] + }, + "left-shoulder": { + "rotate": [ + { + "value": 6.26, + "curve": [ 0.17, 6.26, 0.342, -11.79 ] + }, + { + "time": 0.5, + "value": -11.79, + "curve": [ 0.641, -11.79, 0.843, 6.16 ] + }, + { "time": 1, "value": 6.26 } + ], + "translate": [ + { "x": 1.15, "y": 0.24 } + ] + }, + "left-hand": { + "rotate": [ + { + "value": -21.24, + "curve": [ 0.148, -21.24, 0.378, -27.21 ] + }, + { + "time": 0.5, + "value": -27.28, + "curve": [ 0.621, -27.28, 0.875, -21.4 ] + }, + { "time": 1, "value": -21.24 } + ] + }, + "left-arm": { + "rotate": [ + { + "value": 28.38, + "curve": [ 0.17, 28.38, 0.342, 60.09 ] + }, + { + "time": 0.5, + "value": 60.09, + "curve": [ 0.641, 60.09, 0.843, 28.54 ] + }, + { "time": 1, "value": 28.38 } + ] + }, + "torso": { + "rotate": [ + { "value": -10.28 }, + { + "time": 0.1333, + "value": -15.39, + "curve": [ 0.261, -15.36, 0.324, -9.78 ] + }, + { + "time": 0.3667, + "value": -9.78, + "curve": [ 0.521, -10.8, 0.545, -15.72 ] + }, + { + "time": 0.6333, + "value": -15.75, + "curve": [ 0.688, -15.66, 0.819, -7.07 ] + }, + { + "time": 0.8667, + "value": -7.07, + "curve": [ 0.895, -7.07, 0.975, -10.25 ] + }, + { "time": 1, "value": -10.28 } + ] + }, + "right-foot": { + "rotate": [ + { "value": -5.25 }, + { "time": 0.2333, "value": -17.77 }, + { "time": 0.3667, "value": -20.1 }, + { "time": 0.5, "value": -19.74 }, + { "time": 0.7333, "value": -11.69 }, + { "time": 0.8, "value": 4.47 }, + { "time": 0.8667, "value": 0.46 }, + { "time": 1, "value": -5.25 } + ] + }, + "right-lower-leg": { + "rotate": [ + { + "value": -3.39, + "curve": [ 0.042, -4.01, 0.099, -42.81 ] + }, + { + "time": 0.1333, + "value": -43.22, + "curve": [ 0.175, -43.22, 0.204, -26.09 ] + }, + { "time": 0.2333, "value": -25.98 }, + { "time": 0.5, "value": -19.53 }, + { "time": 0.6333, "value": -64.8 }, + { + "time": 0.7333, + "value": -89.54, + "curve": [ 0.882, -74, 1, -3.39 ] + }, + { "time": 1, "value": -3.39 } + ], + "translate": [ + { "time": 0.5 }, + { "time": 0.6333, "x": 2.19, "y": 0.21 }, + { "time": 1 } + ] + }, + "hip": { + "translate": [ + { "y": -8.4 }, + { + "time": 0.1333, + "y": -9.35, + "curve": [ 0.166, 0, 0.201, 0, 0.166, -8.91, 0.201, -1.14 ] + }, + { + "time": 0.2333, + "y": -0.59, + "curve": [ 0.277, 0, 0.319, 0, 0.277, -1.92, 0.319, -2.96 ] + }, + { "time": 0.3667, "y": -3.97 }, + { "time": 0.5, "y": -8.4 }, + { + "time": 0.6333, + "y": -10.01, + "curve": [ 0.669, 0, 0.698, 0, 0.669, -7.79, 0.698, -6.49 ] + }, + { + "time": 0.7333, + "y": -5.3, + "curve": [ 0.756, 0, 0.778, 0, 0.756, -4.27, 0.778, -3.35 ] + }, + { + "time": 0.8, + "y": -2.5, + "curve": [ 0.821, 0, 0.843, 0, 0.821, -3.02, 0.843, -3.5 ] + }, + { "time": 0.8667, "y": -3.97 }, + { "time": 1, "y": -8.4 } + ] + }, + "neck": { + "rotate": [ + { "value": 3.6 }, + { "time": 0.1333, "value": 17.5 }, + { "time": 0.2333, "value": 6.11 }, + { "time": 0.3667, "value": 3.46 }, + { "time": 0.5, "value": 5.18 }, + { "time": 0.6333, "value": 18.36 }, + { "time": 0.7333, "value": 6.09 }, + { "time": 0.8667, "value": 2.29 }, + { "time": 1, "value": 3.6 } + ] + }, + "head": { + "rotate": [ + { + "value": 3.6, + "curve": [ 0, 3.6, 0.094, -0.89 ] + }, + { "time": 0.1333, "value": -0.21 }, + { "time": 0.2333, "value": 6.11 }, + { "time": 0.3667, "value": 3.46 }, + { + "time": 0.5, + "value": 5.18, + "curve": [ 0.5, 5.18, 0.617, -1.4 ] + }, + { "time": 0.6667, "value": 1.11 }, + { "time": 0.7333, "value": 6.09 }, + { "time": 0.8667, "value": 2.29 }, + { "time": 1, "value": 3.6 } + ] + }, + "pelvis": { + "rotate": [ + { "value": -1.34 } + ], + "translate": [ + { "x": 0.39, "y": -0.78 } + ] + }, + "spear1": { + "rotate": [ + { "value": 1.85 }, + { "time": 0.2, "value": -5.39 }, + { "time": 0.5, "value": 2.95 }, + { "time": 0.7333, "value": -3.67 }, + { "time": 1, "value": 1.85 } + ] + }, + "spear2": { + "rotate": [ + { "value": 1.85 }, + { "time": 0.2, "value": -5.39 }, + { "time": 0.5, "value": 2.95 }, + { "time": 0.7333, "value": -3.67 }, + { "time": 1, "value": 1.85 } + ] + }, + "spear3": { + "rotate": [ + { "value": 3.64 }, + { "time": 0.2, "value": -3.6 }, + { "time": 0.5, "value": 4.74 }, + { "time": 0.7333, "value": -1.88 }, + { "time": 1, "value": 3.64 } + ] + } + }, + "attachments": { + "default": { + "right-hand-item": { + "dagger": { + "deform": [ + { + "offset": 26, + "vertices": [ 2.34755, 0.1447 ], + "curve": [ 0.125, 0, 0.375, 1 ] + }, + { + "time": 0.5, + "offset": 8, + "vertices": [ -1.19415, 4.31532, 0.07279, 6.41351, 1.66048, 6.18883, 1.75233, 3.59555 ], + "curve": [ 0.625, 0, 0.875, 1 ] + }, + { + "time": 1, + "offset": 26, + "vertices": [ 2.34755, 0.1447 ] + } + ] + } + } + }, + "goblin": { + "head": { + "head": { + "deform": [ + { + "curve": [ 0.127, 0, 0.15, 1 ] + }, + { + "time": 0.2, + "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392, -1.08534, 0.08392, -1.08534, 0.08392, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392 ], + "curve": [ 0.242, 0, 0.325, 1 ] + }, + { + "time": 0.3667, + "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018, 1.47305, 0.09018, 1.47305, 0.09018, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018 ], + "curve": [ 0.574, 0, 0.617, 1 ] + }, + { + "time": 0.7, + "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183, -1.17551, -0.17183, -1.17551, -0.17183, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183 ], + "curve": [ 0.742, 0, 0.825, 1 ] + }, + { + "time": 0.8667, + "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], + "curve": [ 0.9, 0, 0.967, 1 ] + }, + { "time": 1 } + ] + } + }, + "left-foot": { + "left-foot": { + "deform": [ + { + "offset": 8, + "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ] + }, + { "time": 0.1333 }, + { + "time": 0.2333, + "offset": 8, + "vertices": [ -3.96073, -2.34594, -5.80446, -12.47629, -2.2313, -12.99038, 2.02942, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] + }, + { + "time": 0.3667, + "offset": 8, + "vertices": [ 0.66505, 0.33548, 0.33902, 2.69014, -0.48171, 2.54524, -1.13593, 1.38562, 0, 0, 0, 0, 0, 0, -0.11908, 0.79273 ] + }, + { "time": 0.5, "curve": "stepped" }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 8, + "vertices": [ -2.97738, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72607, 6.30799, 0, 0, -1.48902, 4.88944, -7.06773, 10.70102 ] + }, + { + "time": 0.8333, + "offset": 6, + "vertices": [ 1.05319, 1.56362, -2.52723, 7.9974, -5.52031, 17.14137, -8.93317, 15.79635, -10.73748, 10.22056, -4.23801, 5.36992, 0, 0, 0, 0, -5.83148, 8.55532 ] + }, + { + "time": 1, + "offset": 8, + "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ] + } + ] + } + }, + "pelvis": { + "pelvis": { + "deform": [ + {}, + { + "time": 0.1333, + "offset": 6, + "vertices": [ -0.6899, -4.13284 ] + }, + { + "time": 0.3333, + "offset": 6, + "vertices": [ -1.04945, -3.10477 ] + }, + { + "time": 0.7, + "offset": 6, + "vertices": [ -1.4245, -6.30617 ] + }, + { + "time": 0.8667, + "offset": 6, + "vertices": [ -1.13542, -1.79036 ] + }, + { "time": 1 } + ] + } + }, + "right-foot": { + "right-foot": { + "deform": [ + {}, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.81259, 2.63115, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09855, -0.34813, 3.42912, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91372, -1.32986, 3.65703 ] + }, + { + "time": 0.2333, + "offset": 2, + "vertices": [ -6.39088, 6.41246, -7.74575, 8.27192, -7.02471, 11.35894, -4.03471, 13.93454, -2.50399, 12.62963, -1.46125, 7.58915, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84766, 2.61216, -4.53956, 7.92358 ] + }, + { + "time": 0.3, + "offset": 2, + "vertices": [ -8.27185, 6.68822, -9.29764, 10.13797, -8.62231, 14.7134, -4.5863, 18.81939, -2.20304, 17.10709, -0.07795, 9.9046, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94625, 2.38008, -4.59399, 10.01888 ] + }, + { + "time": 0.3667, + "offset": 2, + "vertices": [ -10.47684, 9.44176, -13.36883, 12.40983, -14.32569, 16.94392, -9.24463, 23.55674, -5.51712, 21.51378, -1.19582, 11.53193, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14848, 2.29389, -6.63419, 11.37127 ] + }, + { + "time": 0.5, + "offset": 2, + "vertices": [ -5.42474, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12806, -1.45498, 18.05411, 4.8662, 6.41679, 2.81463, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.9483 ] + }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 4, + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08368, -7.15892, -11.63194, -5.6792, -4.83545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06164, -6.93844 ] + }, + { + "time": 0.8, + "offset": 4, + "vertices": [ 0.65731, -3.4205, -0.43953, -6.2724, -2.99255, -7.04184, -3.57946, -5.81597, -2.8396, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79688, -1.28021, 0, 0, 0, 0, -1.03082, -3.46922 ] + }, + { "time": 0.8667 } + ] + } + }, + "right-hand": { + "right-hand": { + "deform": [ + { + "offset": 4, + "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ] + }, + { "time": 0.5 }, + { + "time": 1, + "offset": 4, + "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ] + } + ] + } + }, + "right-lower-leg": { + "right-lower-leg": { + "deform": [ + {}, + { + "time": 0.6, + "offset": 6, + "vertices": [ 1.80396, -1.56553 ] + }, + { "time": 1 } + ] + } + }, + "right-upper-leg": { + "right-upper-leg": { + "deform": [ + { + "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ] + }, + { "time": 0.3333 }, + { + "time": 0.8667, + "offset": 14, + "vertices": [ 0.13425, -2.35378, -1.33318, -5.99573, -1.35862, -4.43324 ] + }, + { + "time": 1, + "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ] + } + ] + } + }, + "torso": { + "torso": { + "deform": [ + { + "offset": 2, + "vertices": [ 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, -1.24131, 2.62652, -2.47492, 0.71183, -0.26363, -0.5308, 0.24821, 2.86673, 0.24821, 2.86673, 0, 0, 0, 0, 0, 0, 0, 0, 1.34461, 0.25215, 0.24821, 2.86673, 0.82507, 1.61798, 0.24821, 2.86673, 0, 0, -1.86431, -0.4326, 0.24821, 2.86673 ] + }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 1.66908, 3.51187, -0.62355, 2.47979, 1.1045, 3.49684, -1.09009, 6.08429, 0.35589, 4.10914, 0, 0, 0, 0, 0, 0, 0, 0, 3.01291, 0.15693, 0.35589, 4.10914, -1.11398, 3.7954, 0.35589, 4.10914, 0, 0, -2.96167, 0.55563, -2.20741, 4.40587 ] + }, + { + "time": 0.3, + "offset": 2, + "vertices": [ 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 6.32601, 0.19387, 7.84315, 1.94837, 7.08587, 3.64119, 4.52343, 4.46961, 0.2884, 3.32948, 0, 0, 0, 0, 0, 0, 0, 0, 4.36416, -1.83876, 0.2884, 3.32948, 4.2925, 3.60194, 0.2884, 3.32948, 0, 0, 3.72601, -0.19338, 0.2884, 3.32948 ] + }, + { + "time": 0.5, + "offset": 2, + "vertices": [ 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 2.57273, 2.74457, 2.88831, 3.04797, 3.48442, 3.04655, 1.80035, 4.609, 0.3133, 3.61659, 0, 0, 0, 0, 0, 0, 0, 0, 3.53782, -0.82203, 0.3133, 3.61659, 1.80022, 3.63246, 0.3133, 3.61659, 0, 0, 0.62718, 0.33564, -1.22467, 3.79463 ] + }, + { + "time": 0.6333, + "offset": 2, + "vertices": [ 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 1.19401, 3.60798, -0.53546, 3.49565, 1.1926, 4.5127, -1.002, 7.10015, 0.44398, 5.125, 0, 0, 0, 0, 0, 0, 0, 0, 3.101, 1.17278, 0.44398, 5.125, -1.02589, 4.81126, 0.44398, 5.125, 0, 0, -2.87358, 1.57149, -2.11931, 5.42173 ] + }, + { + "time": 0.8667, + "offset": 2, + "vertices": [ 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.92587, 2.24385, 0.68874, 1.29945, 3.55433, 3.00604, 2.71494, 5.89962, 0.30385, 3.50647, 0, 0, 0, 0, 0, 0, 0, 0, 1.96775, 0.40548, 0.30385, 3.50647, 2.6104, 2.3545, 0.30385, 3.50647, 0, 0, 0.22709, -0.12851, -0.62826, 3.61437 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, -1.1615, 3.54805, -2.39511, 1.63336, -0.18382, 0.39073, 0.32802, 3.78826, 0.32802, 3.78826, 0, 0, 0, 0, 0, 0, 0, 0, 1.42442, 1.17368, 0.32802, 3.78826, 0.90488, 2.53951, 0.32802, 3.78826, 0, 0, -1.7845, 0.48894, 0.32802, 3.78826 ] + } + ] + } + }, + "undie-straps": { + "undie-straps": { + "deform": [ + { + "offset": 2, + "vertices": [ -1.77697, 0.5476, -0.96145, -1.03793, -0.39148, -0.24072, -1.77697, 0.5476 ] + }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.25684, -1.03177, -1.49719, -4.23862, -0.7447, -2.84907, -1.90072, 0.54478 ] + }, + { + "time": 0.3333, + "offset": 2, + "vertices": [ -2.37974, -0.05432, -0.49433, 0.19437, -0.90861, 1.16519, -1.60956, 2.70799, 0.96186, 0.80615 ] + }, + { + "time": 0.7, + "offset": 2, + "vertices": [ -0.91715, -2.76567, -0.62215, -3.63489, -0.84941, -2.26772, -2.56077, 0.52971 ] + }, + { + "time": 0.8667, + "offset": 2, + "vertices": [ -2.56077, 0.52971, -1.58065, 0.32031, -1.3847, 0.32476, -2.56077, 0.52971 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ -1.77697, 0.5476, -0.80128, 0.53413, -0.80128, 0.53413, -1.77697, 0.5476 ] + } + ] + } + }, + "undies": { + "undies": { + "deform": [ + { + "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ] + }, + { + "time": 0.1333, + "vertices": [ 0.72659, 0.4332, 7.20417, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99862, -2.95085, -1.37543, -3.07404, 1.37759, 0, 0.35279, -0.2928, 2.99219, -0.0702, 3.90478, -0.1404 ] + }, + { + "time": 0.3333, + "vertices": [ 1.16999, 0, 2.10599, -0.23401, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] + }, + { + "time": 0.5333, + "vertices": [ 1.16999, 0, -0.234, -0.936, -2.92499, 0.351, 0, 0, 0, 0, 0.5, -0.24999, -0.64079, -2.07915, -0.64079, -2.07915 ] + }, + { + "time": 0.7, + "vertices": [ 1.86271, -0.11514, 4.66327, -0.091, -1.76428, 0.21171, 0, 0, -0.56833, 0.32833, -1.13833, -1.15111, -2.19996, -3.47068, -1.29719, -3.47068, 0, 0, 0, 0, 1.58785, -0.04643, 2.65942, 0.16715 ] + }, + { + "time": 0.8333, + "vertices": [ 2.41688, -0.20726, 8.58108, 0.585, -0.83571, 0.10029, 0, 0, -1.02299, 0.59099, -2.449, -1.872, -1.625, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08357, 4.78695, 0.30086 ] + }, + { + "time": 0.8667, + "vertices": [ 2.0197, -0.02141, 8.98546, 0.4446, -0.20937, 0.08023, 0.4592, 0, -0.3592, 0.47279, -1.8416, -1.4488, -0.79153, 1.26421, 0.53286, 1.23981, 0.4592, 0, 0.1176, -0.0976, 3.2839, -0.09025, 5.13116, 0.19389 ] + }, + { + "time": 1, + "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ] + } + ] + } + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/goblins-pro.skel b/spine-haxe/example/assets/goblins-pro.skel new file mode 100644 index 000000000..82135aa72 Binary files /dev/null and b/spine-haxe/example/assets/goblins-pro.skel differ diff --git a/spine-haxe/example/assets/goblins.atlas b/spine-haxe/example/assets/goblins.atlas new file mode 100644 index 000000000..b40ca29fc --- /dev/null +++ b/spine-haxe/example/assets/goblins.atlas @@ -0,0 +1,96 @@ +goblins.png + size: 1024, 128 + filter: Linear, Linear +dagger + bounds: 2, 18, 26, 108 +goblin/eyes-closed + bounds: 2, 4, 34, 12 +goblin/head + bounds: 113, 23, 103, 66 + rotate: 90 +goblin/left-arm + bounds: 937, 89, 37, 35 + rotate: 90 +goblin/left-foot + bounds: 609, 61, 65, 31 + rotate: 90 +goblin/left-hand + bounds: 840, 21, 36, 41 +goblin/left-lower-leg + bounds: 504, 56, 33, 70 +goblin/left-shoulder + bounds: 745, 17, 29, 44 +goblin/left-upper-leg + bounds: 397, 53, 33, 73 +goblin/neck + bounds: 862, 85, 36, 41 +goblin/pelvis + bounds: 776, 18, 62, 43 +goblin/right-arm + bounds: 181, 5, 23, 50 + rotate: 90 +goblin/right-foot + bounds: 747, 63, 63, 33 + rotate: 90 +goblin/right-hand + bounds: 878, 3, 36, 37 +goblin/right-lower-leg + bounds: 321, 50, 36, 76 +goblin/right-shoulder + bounds: 663, 14, 39, 45 +goblin/right-upper-leg + bounds: 675, 63, 34, 63 +goblin/torso + bounds: 181, 30, 68, 96 +goblin/undie-straps + bounds: 38, 2, 55, 19 +goblin/undies + bounds: 974, 97, 36, 29 +goblingirl/eyes-closed + bounds: 397, 30, 37, 21 +goblingirl/head + bounds: 30, 23, 103, 81 + rotate: 90 +goblingirl/left-arm + bounds: 916, 8, 37, 35 + rotate: 90 +goblingirl/left-foot + bounds: 642, 61, 65, 31 + rotate: 90 +goblingirl/left-hand + bounds: 900, 86, 35, 40 +goblingirl/left-lower-leg + bounds: 539, 56, 33, 70 +goblingirl/left-shoulder + bounds: 633, 13, 28, 46 +goblingirl/left-upper-leg + bounds: 574, 56, 33, 70 +goblingirl/neck + bounds: 878, 42, 35, 41 +goblingirl/pelvis + bounds: 817, 64, 62, 43 + rotate: 90 +goblingirl/right-arm + bounds: 603, 4, 28, 50 +goblingirl/right-foot + bounds: 782, 63, 63, 33 + rotate: 90 +goblingirl/right-hand + bounds: 915, 47, 36, 37 +goblingirl/right-lower-leg + bounds: 359, 50, 36, 76 +goblingirl/right-shoulder + bounds: 704, 16, 39, 45 +goblingirl/right-upper-leg + bounds: 711, 63, 34, 63 +goblingirl/torso + bounds: 251, 30, 68, 96 +goblingirl/undie-straps + bounds: 95, 2, 55, 19 +goblingirl/undies + bounds: 974, 66, 36, 29 +shield + bounds: 432, 54, 70, 72 +spear + bounds: 233, 6, 22, 368 + rotate: 90 diff --git a/spine-haxe/example/assets/goblins.png b/spine-haxe/example/assets/goblins.png new file mode 100644 index 000000000..2fab39406 Binary files /dev/null and b/spine-haxe/example/assets/goblins.png differ diff --git a/spine-ts/spine-phaser/example/assets/mix-and-match-pro.json b/spine-haxe/example/assets/mix-and-match-pro.json similarity index 100% rename from spine-ts/spine-phaser/example/assets/mix-and-match-pro.json rename to spine-haxe/example/assets/mix-and-match-pro.json diff --git a/spine-haxe/example/assets/mix-and-match-pro.skel b/spine-haxe/example/assets/mix-and-match-pro.skel new file mode 100644 index 000000000..e57bc08a0 Binary files /dev/null and b/spine-haxe/example/assets/mix-and-match-pro.skel differ diff --git a/spine-haxe/example/assets/mix-and-match.atlas b/spine-haxe/example/assets/mix-and-match.atlas new file mode 100644 index 000000000..3cab05d5e --- /dev/null +++ b/spine-haxe/example/assets/mix-and-match.atlas @@ -0,0 +1,362 @@ +mix-and-match.png + size: 1024, 512 + filter: Linear, Linear + scale: 0.5 +base-head + bounds: 587, 2, 95, 73 +boy/arm-front + bounds: 558, 271, 36, 115 +boy/backpack + bounds: 235, 109, 119, 153 +boy/backpack-pocket + bounds: 328, 73, 34, 62 + rotate: 90 +boy/backpack-strap-front + bounds: 665, 79, 38, 88 +boy/backpack-up + bounds: 395, 364, 21, 70 + rotate: 90 +boy/body + bounds: 251, 264, 97, 132 + rotate: 90 +boy/boot-ribbon-front + bounds: 648, 131, 9, 11 +boy/collar + bounds: 744, 4, 73, 29 + rotate: 90 +boy/ear + bounds: 383, 109, 19, 23 + rotate: 90 +boy/eye-back-low-eyelid + bounds: 739, 284, 17, 6 + rotate: 90 +boy/eye-back-pupil + bounds: 832, 443, 8, 9 + rotate: 90 +boy/eye-back-up-eyelid + bounds: 558, 264, 23, 5 +boy/eye-back-up-eyelid-back + bounds: 802, 491, 19, 10 + rotate: 90 +boy/eye-front-low-eyelid + bounds: 386, 363, 22, 7 + rotate: 90 +boy/eye-front-pupil + bounds: 816, 389, 9, 9 +boy/eye-front-up-eyelid + bounds: 160, 71, 31, 6 + rotate: 90 +boy/eye-front-up-eyelid-back + bounds: 801, 434, 26, 9 + rotate: 90 +boy/eye-iris-back + bounds: 618, 264, 17, 17 +boy/eye-iris-front + bounds: 727, 264, 18, 18 +boy/eye-white-back + bounds: 580, 131, 20, 12 +boy/eye-white-front + bounds: 510, 130, 27, 13 +boy/eyebrow-back + bounds: 751, 88, 20, 11 + rotate: 90 +boy/eyebrow-front + bounds: 483, 130, 25, 11 +boy/hair-back + bounds: 494, 388, 122, 81 + rotate: 90 +boy/hair-bangs + bounds: 667, 284, 70, 37 +boy/hair-side + bounds: 789, 374, 25, 43 +boy/hand-backfingers + bounds: 467, 364, 19, 21 +boy/hand-front-fingers + bounds: 488, 364, 19, 21 +boy/hat + bounds: 615, 417, 93, 56 + rotate: 90 +boy/leg-front + bounds: 138, 104, 31, 158 +boy/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-blue-cape/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-spring-dress/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +boy/mouth-smile + bounds: 705, 79, 29, 7 +boy/nose + bounds: 836, 473, 17, 10 + rotate: 90 +boy/pompom + bounds: 747, 273, 48, 43 + rotate: 90 +boy/zip + bounds: 648, 144, 14, 23 +girl-blue-cape/back-eyebrow + bounds: 602, 131, 18, 12 +girl-blue-cape/body-dress + bounds: 2, 264, 109, 246 +girl-blue-cape/body-ribbon + bounds: 615, 283, 50, 38 +girl-blue-cape/cape-back + bounds: 2, 69, 134, 193 +girl-blue-cape/cape-back-up + bounds: 386, 387, 123, 106 + rotate: 90 +girl-blue-cape/cape-ribbon + bounds: 675, 264, 50, 18 +girl-blue-cape/cape-shoulder-back + bounds: 751, 110, 49, 59 +girl-blue-cape/cape-shoulder-front + bounds: 113, 264, 62, 76 + rotate: 90 +girl-blue-cape/cape-up-front + bounds: 399, 264, 98, 117 + rotate: 90 +girl-blue-cape/ear + bounds: 775, 2, 19, 23 +girl-spring-dress/ear + bounds: 775, 2, 19, 23 +girl/ear + bounds: 775, 2, 19, 23 +girl-blue-cape/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-spring-dress/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-blue-cape/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-spring-dress/eye-back-pupil + bounds: 816, 367, 8, 9 +girl/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-blue-cape/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-spring-dress/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-blue-cape/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-spring-dress/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-blue-cape/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-spring-dress/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-blue-cape/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-spring-dress/eye-front-pupil + bounds: 816, 378, 9, 9 +girl/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-blue-cape/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-spring-dress/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-blue-cape/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-spring-dress/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-blue-cape/eye-iris-back + bounds: 637, 264, 17, 17 +girl-blue-cape/eye-iris-front + bounds: 802, 471, 18, 18 +girl-blue-cape/eye-white-back + bounds: 596, 264, 20, 16 +girl-spring-dress/eye-white-back + bounds: 596, 264, 20, 16 +girl-blue-cape/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-spring-dress/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-blue-cape/front-eyebrow + bounds: 608, 149, 18, 12 + rotate: 90 +girl-blue-cape/hair-back + bounds: 508, 145, 117, 98 + rotate: 90 +girl-blue-cape/hair-bangs + bounds: 673, 419, 91, 40 + rotate: 90 +girl-blue-cape/hair-head-side-back + bounds: 196, 331, 30, 52 + rotate: 90 +girl-blue-cape/hair-head-side-front + bounds: 738, 323, 41, 42 +girl-blue-cape/hair-side + bounds: 473, 3, 36, 71 +girl-blue-cape/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-spring-dress/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-blue-cape/leg-front + bounds: 168, 72, 30, 158 + rotate: 90 +girl-blue-cape/mouth-smile + bounds: 736, 79, 29, 7 +girl-spring-dress/mouth-smile + bounds: 736, 79, 29, 7 +girl/mouth-smile + bounds: 736, 79, 29, 7 +girl-blue-cape/nose + bounds: 747, 264, 11, 7 +girl-spring-dress/nose + bounds: 747, 264, 11, 7 +girl/nose + bounds: 747, 264, 11, 7 +girl-blue-cape/sleeve-back + bounds: 767, 79, 42, 29 +girl-blue-cape/sleeve-front + bounds: 408, 76, 52, 119 + rotate: 90 +girl-spring-dress/arm-front + bounds: 596, 282, 17, 111 +girl-spring-dress/back-eyebrow + bounds: 801, 420, 18, 12 +girl-spring-dress/body-up + bounds: 179, 4, 64, 66 +girl-spring-dress/cloak-down + bounds: 775, 27, 50, 50 +girl-spring-dress/cloak-up + bounds: 360, 7, 64, 58 + rotate: 90 +girl-spring-dress/eye-iris-back + bounds: 656, 264, 17, 17 +girl-spring-dress/eye-iris-front + bounds: 814, 492, 18, 18 +girl-spring-dress/front-eyebrow + bounds: 822, 472, 18, 12 + rotate: 90 +girl-spring-dress/hair-back + bounds: 196, 363, 147, 93 + rotate: 90 +girl-spring-dress/hair-bangs + bounds: 696, 326, 91, 40 + rotate: 90 +girl-spring-dress/hair-head-side-back + bounds: 529, 76, 30, 52 +girl-spring-dress/hair-head-side-front + bounds: 781, 323, 41, 42 +girl-spring-dress/hair-side + bounds: 511, 3, 36, 71 +girl-spring-dress/leg-front + bounds: 171, 104, 30, 158 +girl-spring-dress/neck + bounds: 138, 70, 20, 32 +girl-spring-dress/shoulder-ribbon + bounds: 622, 131, 36, 24 + rotate: 90 +girl-spring-dress/skirt + bounds: 113, 328, 182, 81 + rotate: 90 +girl-spring-dress/underskirt + bounds: 2, 2, 175, 65 +girl/arm-front + bounds: 577, 395, 36, 115 +girl/back-eyebrow + bounds: 834, 492, 18, 12 + rotate: 90 +girl/bag-base + bounds: 191, 264, 62, 58 + rotate: 90 +girl/bag-strap-front + bounds: 385, 265, 12, 96 +girl/bag-top + bounds: 738, 367, 49, 50 +girl/body + bounds: 356, 130, 97, 132 +girl/boot-ribbon-front + bounds: 539, 130, 13, 13 +girl/eye-iris-back + bounds: 821, 424, 17, 17 +girl/eye-iris-front + bounds: 812, 443, 18, 18 +girl/eye-white-back + bounds: 814, 5, 20, 16 + rotate: 90 +girl/front-eyebrow + bounds: 816, 400, 18, 12 + rotate: 90 +girl/hair-back + bounds: 291, 363, 147, 93 + rotate: 90 +girl/hair-bangs + bounds: 715, 419, 91, 40 + rotate: 90 +girl/hair-flap-down-front + bounds: 288, 5, 70, 65 +girl/hair-head-side-back + bounds: 561, 77, 30, 52 +girl/hair-head-side-front + bounds: 757, 419, 41, 42 + rotate: 90 +girl/hair-patch + bounds: 245, 4, 66, 41 + rotate: 90 +girl/hair-side + bounds: 549, 3, 36, 71 +girl/hair-strand-back-1 + bounds: 684, 3, 58, 74 +girl/hair-strand-back-2 + bounds: 692, 171, 91, 58 + rotate: 90 +girl/hair-strand-back-3 + bounds: 615, 323, 92, 79 + rotate: 90 +girl/hair-strand-front-1 + bounds: 518, 269, 38, 94 +girl/hair-strand-front-2 + bounds: 593, 79, 70, 50 +girl/hair-strand-front-3 + bounds: 705, 88, 44, 81 +girl/hand-front-fingers + bounds: 530, 365, 19, 21 +girl/hat + bounds: 608, 169, 93, 82 + rotate: 90 +girl/leg-front + bounds: 203, 104, 30, 158 +girl/pompom + bounds: 757, 462, 48, 43 + rotate: 90 +girl/scarf + bounds: 455, 143, 119, 51 + rotate: 90 +girl/scarf-back + bounds: 420, 2, 72, 51 + rotate: 90 +girl/zip + bounds: 356, 109, 19, 25 + rotate: 90 diff --git a/spine-haxe/example/assets/mix-and-match.png b/spine-haxe/example/assets/mix-and-match.png new file mode 100644 index 000000000..441cd2a81 Binary files /dev/null and b/spine-haxe/example/assets/mix-and-match.png differ diff --git a/spine-haxe/example/assets/owl-pro.json b/spine-haxe/example/assets/owl-pro.json new file mode 100644 index 000000000..5bb3e0d96 --- /dev/null +++ b/spine-haxe/example/assets/owl-pro.json @@ -0,0 +1,1168 @@ +{ +"skeleton": { + "hash": "Xf8aPQe0Mh0", + "spine": "4.1.17", + "x": -644, + "y": -274, + "width": 1350.84, + "height": 909.41, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { + "name": "branch-1", + "parent": "root", + "length": 487.04, + "rotation": 27.67, + "x": -579.3, + "y": -239.11, + "color": "1a8600ff" + }, + { "name": "branch-2", "parent": "branch-1", "length": 391.45, "rotation": -30.2, "x": 487.04, "color": "1a8600ff" }, + { "name": "owl-base", "parent": "branch-2", "x": 139.77, "y": 56.43, "color": "1697ffff" }, + { "name": "body-top-control", "parent": "owl-base", "rotation": 92.53, "x": -3.85, "y": 227.57, "color": "1697ffff" }, + { "name": "branch-3", "parent": "branch-2", "length": 231.51, "rotation": 30.15, "x": 391.45, "color": "1a8600ff" }, + { "name": "branch-4", "parent": "branch-3", "length": 158.83, "rotation": 38.9, "x": 231.51, "color": "1a8600ff" }, + { "name": "branch-5", "parent": "branch-4", "length": 82.96, "rotation": -26.21, "x": 158.83, "color": "1a8600ff" }, + { + "name": "branch-6", + "parent": "branch-5", + "length": 105.49, + "rotation": 68.78, + "x": -79.95, + "y": -20.15, + "color": "1a8600ff" + }, + { "name": "head", "parent": "body-top-control", "rotation": -90, "x": 51, "y": 0.33, "color": "1697ffff" }, + { "name": "control", "parent": "head", "y": 126.66, "color": "1697ffff" }, + { "name": "control-back", "parent": "head", "x": 1.74, "y": 75.81, "color": "b500afff" }, + { + "name": "leaf-1", + "parent": "branch-1", + "length": 170.88, + "rotation": 59.11, + "x": 81.78, + "y": 61.01, + "color": "c61616ff" + }, + { + "name": "leaf-2", + "parent": "branch-4", + "length": 177.54, + "rotation": -74.38, + "x": 116.86, + "y": -14.04, + "color": "c61616ff" + }, + { + "name": "leaf-3", + "parent": "branch-3", + "length": 206.74, + "rotation": -60.2, + "x": -15.26, + "y": 6.37, + "color": "c61616ff" + }, + { + "name": "leaf-4", + "parent": "branch-6", + "length": 152.22, + "rotation": 76.69, + "x": 110.99, + "y": 4.18, + "color": "c61616ff" + }, + { "name": "leaf-5", "parent": "branch-5", "length": 186.26, "rotation": 40.81, "x": 82.96, "color": "c61616ff" }, + { "name": "leaf-6", "parent": "branch-6", "length": 201.94, "rotation": 0.89, "x": 105.49, "color": "c61616ff" }, + { + "name": "leaf-7", + "parent": "branch-1", + "length": 155.86, + "rotation": 30.39, + "x": 214.62, + "y": 12.99, + "color": "c61616ff" + }, + { + "name": "tail-feathers", + "parent": "owl-base", + "length": 155.04, + "rotation": -87.98, + "x": -0.46, + "y": -20.62, + "color": "1697ffff" + } +], +"slots": [ + { "name": "feather-3", "bone": "tail-feathers", "attachment": "feather-3" }, + { "name": "feather-2", "bone": "tail-feathers", "attachment": "feather-2" }, + { "name": "feather-1", "bone": "tail-feathers", "attachment": "feather-1" }, + { "name": "body", "bone": "owl-base", "attachment": "body" }, + { "name": "wood", "bone": "branch-1", "attachment": "wood" }, + { "name": "R_wing", "bone": "body-top-control", "attachment": "R_wing" }, + { "name": "L_wing", "bone": "body-top-control", "attachment": "L_wing" }, + { "name": "R_foot", "bone": "branch-2", "attachment": "R_foot" }, + { "name": "L_foot", "bone": "branch-2", "attachment": "L_foot" }, + { "name": "head-base", "bone": "head", "attachment": "head-base" }, + { "name": "R_eye-iris", "bone": "control", "attachment": "R_eye-iris" }, + { "name": "R_eye-pupil", "bone": "control", "attachment": "R_eye-pupil" }, + { "name": "R_eye-light", "bone": "control", "attachment": "R_eye-light" }, + { "name": "L_eye-iris", "bone": "control", "attachment": "L_eye-iris" }, + { "name": "L_eye-pupil", "bone": "control", "attachment": "L_eye-pupil" }, + { "name": "L_eye-light", "bone": "control", "attachment": "L_eye-light" }, + { "name": "R_eye-closed", "bone": "control" }, + { "name": "L_eye-closed", "bone": "control" }, + { "name": "beak-down", "bone": "head", "attachment": "beak-down" }, + { "name": "beak", "bone": "head", "attachment": "beak" }, + { "name": "leaf-7", "bone": "leaf-7", "attachment": "leaf-7" }, + { "name": "leaf-6", "bone": "leaf-6", "attachment": "leaf-6" }, + { "name": "leaf-5", "bone": "leaf-5", "attachment": "leaf-5" }, + { "name": "leaf-4", "bone": "leaf-4", "attachment": "leaf-4" }, + { "name": "leaf-3", "bone": "leaf-3", "attachment": "leaf-3" }, + { "name": "leaf-2", "bone": "leaf-2", "attachment": "leaf-2" }, + { "name": "leaf-1", "bone": "leaf-1", "attachment": "leaf-1" } +], +"transform": [ + { + "name": "control-back", + "bones": [ "control-back" ], + "target": "control", + "mixRotate": 0, + "mixX": -1, + "mixScaleX": 0, + "mixShearY": 0 + } +], +"skins": [ + { + "name": "default", + "attachments": { + "beak": { + "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": [ 11, 9, 8, 10, 9, 11, 11, 8, 7, 6, 11, 7, 0, 10, 11, 5, 11, 6, 12, 11, 5, 1, 0, 11, 12, 1, 11, 2, 1, 12, 4, 3, 12, 2, 12, 3, 5, 4, 12 ], + "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, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 4, 6, 6, 8 ], + "width": 77, + "height": 82 + } + }, + "beak-down": { + "beak-down": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 73, + "height": 79 + } + }, + "body": { + "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, 4, 3, 20, 8, 7, 5, 19, 6, 16, 6, 19, 20, 7, 16, 16, 7, 6, 17, 12, 18, 12, 14, 15, 10, 9, 15, 12, 19, 18, 20, 16, 12, 12, 16, 19, 15, 20, 12, 9, 8, 15, 18, 5, 4, 15, 8, 20, 18, 19, 5, 14, 10, 15, 17, 13, 12, 0, 13, 1, 1, 17, 2, 1, 13, 17, 11, 14, 0, 0, 14, 13, 11, 10, 14, 2, 17, 3, 17, 18, 3, 13, 14, 12 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 38, 32, 32, 40 ], + "width": 496, + "height": 392 + } + }, + "feather-1": { + "feather-1": { "x": 66.77, "y": 51.32, "rotation": 90.51, "width": 117, "height": 119 } + }, + "feather-2": { + "feather-2": { "x": 70.22, "y": -56.15, "rotation": 90.51, "width": 124, "height": 130 } + }, + "feather-3": { + "feather-3": { "x": 83.66, "y": 7.47, "rotation": 90.51, "width": 111, "height": 152 } + }, + "head-base": { + "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": [ 44, 14, 13, 44, 13, 12, 15, 14, 44, 49, 15, 44, 20, 45, 21, 21, 45, 22, 19, 45, 20, 23, 22, 45, 50, 45, 19, 18, 50, 19, 16, 15, 49, 44, 12, 11, 43, 49, 44, 43, 44, 11, 46, 50, 18, 47, 17, 16, 48, 16, 49, 48, 49, 43, 47, 16, 48, 42, 45, 50, 42, 50, 46, 69, 23, 45, 69, 45, 42, 40, 48, 43, 65, 43, 11, 41, 42, 46, 18, 47, 46, 47, 18, 17, 30, 46, 47, 60, 41, 46, 30, 60, 46, 48, 30, 47, 59, 48, 40, 59, 30, 48, 65, 11, 10, 57, 42, 41, 57, 41, 60, 25, 69, 42, 25, 42, 57, 26, 43, 65, 40, 43, 26, 58, 40, 26, 59, 40, 58, 24, 23, 69, 70, 24, 69, 55, 70, 69, 66, 65, 10, 66, 10, 9, 53, 26, 65, 38, 30, 59, 37, 60, 30, 37, 30, 38, 66, 53, 65, 25, 55, 69, 66, 9, 8, 67, 66, 8, 51, 53, 66, 67, 51, 66, 39, 37, 38, 38, 59, 58, 54, 70, 55, 62, 58, 26, 62, 26, 53, 62, 53, 51, 71, 24, 70, 71, 70, 54, 61, 25, 57, 55, 25, 61, 54, 55, 61, 0, 24, 71, 67, 8, 7, 52, 62, 51, 52, 51, 67, 37, 57, 60, 37, 61, 57, 61, 37, 39, 56, 54, 61, 71, 54, 56, 0, 71, 56, 67, 7, 52, 68, 52, 7, 72, 0, 56, 27, 62, 52, 28, 56, 61, 72, 56, 28, 77, 27, 52, 77, 52, 68, 1, 0, 72, 73, 72, 28, 1, 72, 73, 6, 68, 7, 77, 68, 6, 75, 27, 77, 76, 35, 27, 75, 77, 6, 73, 28, 74, 75, 76, 27, 32, 74, 34, 33, 35, 76, 2, 73, 74, 1, 73, 2, 5, 76, 75, 5, 75, 6, 3, 32, 31, 2, 74, 32, 3, 2, 32, 4, 33, 76, 4, 76, 5, 31, 33, 4, 3, 31, 4, 38, 58, 62, 39, 38, 62, 63, 61, 39, 64, 39, 62, 63, 39, 64, 64, 62, 27, 28, 61, 63, 35, 64, 27, 29, 63, 64, 34, 28, 63, 29, 34, 63, 64, 35, 29, 36, 29, 35, 34, 29, 36, 74, 28, 34, 32, 34, 36, 36, 35, 33, 31, 32, 36, 31, 36, 33 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 90, 42, 14, 16, 16, 18, 18, 20, 20, 22 ], + "width": 597, + "height": 474 + } + }, + "leaf-1": { + "leaf-1": { "x": 93.08, "y": -14.9, "rotation": -86.78, "width": 152, "height": 202 } + }, + "leaf-2": { + "leaf-2": { "x": 84.31, "y": 7.56, "rotation": 65.1, "width": 130, "height": 189 } + }, + "leaf-3": { + "leaf-3": { "x": 115.81, "y": 28.41, "rotation": 32.57, "width": 263, "height": 154 } + }, + "leaf-4": { + "leaf-4": { "x": 70.16, "y": -4.79, "rotation": 174.22, "width": 178, "height": 98 } + }, + "leaf-5": { + "leaf-5": { "x": 89.18, "y": 24.8, "rotation": -81.12, "width": 106, "height": 211 } + }, + "leaf-6": { + "leaf-6": { "x": 107.78, "y": 6.61, "rotation": -109.98, "width": 176, "height": 231 } + }, + "leaf-7": { + "leaf-7": { "x": 83.07, "y": -8.64, "rotation": -58.07, "width": 108, "height": 172 } + }, + "L_eye-closed": { + "L_eye-closed": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 179, + "height": 171 + } + }, + "L_eye-iris": { + "L_eye-iris": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 179, + "height": 171 + } + }, + "L_eye-light": { + "L_eye-light": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 42, + "height": 39 + } + }, + "L_eye-pupil": { + "L_eye-pupil": { "x": 122.5, "y": -38.81, "width": 125, "height": 119 } + }, + "L_foot": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 128, + "height": 95 + } + }, + "L_wing": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 162, + "height": 220 + } + }, + "R_eye-closed": { + "R_eye-closed": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 179, + "height": 171 + } + }, + "R_eye-iris": { + "R_eye-iris": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 179, + "height": 171 + } + }, + "R_eye-light": { + "R_eye-light": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 42, + "height": 39 + } + }, + "R_eye-pupil": { + "R_eye-pupil": { "x": -123.5, "y": -38.81, "width": 125, "height": 119 } + }, + "R_foot": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 128, + "height": 95 + } + }, + "R_wing": { + "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, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 162, + "height": 220 + } + }, + "wood": { + "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": [ 27, 26, 24, 24, 26, 25, 19, 18, 48, 48, 18, 22, 18, 47, 22, 47, 23, 22, 19, 21, 20, 22, 21, 48, 19, 48, 21, 14, 45, 15, 29, 15, 45, 45, 30, 29, 15, 29, 16, 29, 28, 16, 28, 46, 16, 46, 24, 16, 16, 24, 17, 24, 23, 17, 17, 47, 18, 17, 23, 47, 28, 27, 46, 46, 27, 24, 10, 9, 44, 10, 44, 11, 33, 44, 34, 33, 11, 44, 11, 33, 12, 12, 33, 32, 12, 32, 13, 32, 31, 13, 13, 45, 14, 13, 31, 45, 45, 31, 30, 6, 43, 7, 7, 35, 8, 9, 8, 44, 44, 35, 34, 44, 8, 35, 43, 36, 7, 7, 36, 35, 1, 0, 41, 0, 42, 41, 41, 40, 1, 2, 40, 39, 2, 1, 40, 2, 39, 3, 3, 39, 4, 4, 39, 38, 4, 38, 5, 43, 6, 5, 5, 38, 37, 43, 5, 37, 43, 37, 36 ], + "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, + "edges": [ 0, 2, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 38, 40, 44, 46, 46, 48, 48, 50, 50, 52, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 0, 84, 68, 70, 70, 72, 66, 68, 88, 66, 18, 20, 20, 22, 88, 20, 16, 18, 88, 16, 88, 18, 24, 26, 26, 28, 90, 26, 28, 30, 30, 32, 90, 30, 60, 62, 90, 62, 56, 58, 58, 60, 90, 58, 94, 46, 94, 34, 36, 94, 36, 38, 32, 34, 34, 36, 52, 54, 54, 56, 62, 64, 64, 66, 14, 16, 2, 4, 40, 42, 42, 44, 96, 42 ], + "width": 1234, + "height": 609 + } + } + } + } +], +"animations": { + "blink": { + "slots": { + "L_eye-closed": { + "attachment": [ + { "time": 0.4667, "name": "L_eye-closed" }, + { "time": 0.5333 }, + { "time": 1.8333, "name": "L_eye-closed" }, + { "time": 1.9333 } + ] + }, + "R_eye-closed": { + "attachment": [ + { "time": 0.4667, "name": "R_eye-closed" }, + { "time": 0.5333 }, + { "time": 1.8333, "name": "R_eye-closed" }, + { "time": 1.9 }, + { "time": 5.2333 } + ] + } + } + }, + "down": { + "bones": { + "control": { + "rotate": [ + { "value": -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": [ + { "value": 16.75 } + ], + "translate": [ + { "x": -113.66 } + ], + "scale": [ + { "x": 1.017, "y": 1.017 } + ] + }, + "control-back": { + "translate": [ + { "y": 6.82 } + ] + }, + "branch-2": { + "rotate": [ + { "value": -13.73 } + ] + }, + "branch-1": { + "rotate": [ + { "value": -10.56 } + ] + }, + "branch-3": { + "rotate": [ + { "value": 0.72 } + ] + }, + "branch-4": { + "rotate": [ + { "value": 0.72 } + ] + }, + "branch-6": { + "rotate": [ + { "value": 6.85 } + ] + }, + "leaf-2": { + "rotate": [ + { "value": -13.94 } + ] + }, + "leaf-3": { + "rotate": [ + { "value": -34.11 } + ] + }, + "leaf-5": { + "rotate": [ + { "value": -49.78 } + ] + } + }, + "attachments": { + "default": { + "head-base": { + "head-base": { + "deform": [ + { + "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 ] + } + ] + } + }, + "L_foot": { + "L_foot": { + "deform": [ + { + "vertices": [ 0.18475, -11.92622, 1.50322, -1.16228, 9.49197, -2.14086, 8.17357, -12.90479 ] + } + ] + } + }, + "L_wing": { + "L_wing": { + "deform": [ + { + "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": { + "R_foot": { + "deform": [ + { + "vertices": [ 10.15533, 0.83983, 14.67896, -12.2128, 4.99141, -15.57014, 0.4679, -2.5175 ] + } + ] + } + }, + "R_wing": { + "R_wing": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + }, + "idle": { + "bones": { + "body-top-control": { + "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": [ + { "value": 0.09, "curve": "stepped" }, + { "time": 2.0333, "value": 0.09 }, + { "time": 3.5, "value": 0.79 }, + { "time": 4.8333, "value": 0.09 }, + { "time": 5.9, "value": -0.13 }, + { "time": 6.6667, "value": 0.09 } + ] + }, + "branch-4": { + "rotate": [ + { "value": -0.57 }, + { "time": 0.7667, "value": -1.75 }, + { "time": 1.8667, "value": -0.57 } + ] + }, + "branch-5": { + "rotate": [ + { "value": -0.75, "curve": "stepped" }, + { "time": 1.1, "value": -0.75 }, + { "time": 1.9, "value": -0.83 }, + { "time": 2.6667, "value": -0.75 }, + { "time": 5.6667, "value": 0.66 }, + { "time": 6.6667, "value": -0.75 } + ] + }, + "tail-feathers": { + "rotate": [ + { "time": 3.2333 }, + { "time": 3.3333, "value": 10.86 }, + { "time": 3.4, "value": -13.26 }, + { "time": 3.4667, "value": 12.72 }, + { "time": 3.5333, "value": -16.15 }, + { "time": 3.6333, "value": -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 } + ] + }, + "branch-3": { + "rotate": [ + {}, + { "time": 3.8333, "value": -1.4 }, + { "time": 6.6667 } + ] + }, + "head": { + "translate": [ + {}, + { "time": 1, "x": -19.41 }, + { "time": 4 }, + { "time": 4.6667, "x": -19.41 }, + { "time": 6.6667 } + ] + }, + "leaf-5": { + "rotate": [ + { "value": -2.05 }, + { "time": 0.3333 }, + { "time": 1, "value": -4.1 }, + { "time": 1.6667 }, + { "time": 2.3333, "value": -4.1 }, + { "time": 3 }, + { "time": 3.6667, "value": -4.1 }, + { "time": 4.3333 }, + { "time": 5, "value": -4.1 }, + { "time": 5.6667 }, + { "time": 6.3333, "value": -4.1 }, + { "time": 6.6667, "value": -2.05 } + ] + }, + "leaf-4": { + "rotate": [ + { "value": -2.05 }, + { "time": 0.3333 }, + { "time": 1, "value": -4.1 }, + { "time": 1.6667 }, + { "time": 2.3333, "value": -4.1 }, + { "time": 3 }, + { "time": 3.6667, "value": -4.1 }, + { "time": 4.3333 }, + { "time": 5, "value": -4.1 }, + { "time": 5.6667 }, + { "time": 6.3333, "value": -4.1 }, + { "time": 6.6667, "value": -2.05 } + ] + }, + "leaf-6": { + "rotate": [ + { "value": -4.1 }, + { "time": 0.3333, "value": -2.05 }, + { "time": 0.6667 }, + { "time": 1.3333, "value": -4.1 }, + { "time": 2 }, + { "time": 2.6667, "value": -4.1 }, + { "time": 3.3333 }, + { "time": 4, "value": -4.1 }, + { "time": 4.6667 }, + { "time": 5.3333, "value": -4.1 }, + { "time": 6 }, + { "time": 6.6667, "value": -4.1 } + ] + }, + "leaf-2": { + "rotate": [ + { "value": -2.05 }, + { "time": 0.3333 }, + { "time": 1, "value": -4.1 }, + { "time": 1.6667 }, + { "time": 2.3333, "value": -4.1 }, + { "time": 3 }, + { "time": 3.6667, "value": -4.1 }, + { "time": 4.3333 }, + { "time": 5, "value": -4.1 }, + { "time": 5.6667 }, + { "time": 6.3333, "value": -4.1 }, + { "time": 6.6667, "value": -2.05 } + ] + }, + "leaf-3": { + "rotate": [ + { "value": -4.1 }, + { "time": 0.3333, "value": -2.05 }, + { "time": 0.6667 }, + { "time": 1.3333, "value": -4.1 }, + { "time": 2 }, + { "time": 2.6667, "value": -4.1 }, + { "time": 3.3333 }, + { "time": 4, "value": -4.1 }, + { "time": 4.6667 }, + { "time": 5.3333, "value": -4.1 }, + { "time": 6 }, + { "time": 6.6667, "value": -4.1 } + ] + }, + "leaf-7": { + "rotate": [ + { "value": -2.05 }, + { "time": 0.3333 }, + { "time": 1, "value": -4.1 }, + { "time": 1.6667 }, + { "time": 2.3333, "value": -4.1 }, + { "time": 3 }, + { "time": 3.6667, "value": -4.1 }, + { "time": 4.3333 }, + { "time": 5, "value": -4.1 }, + { "time": 5.6667 }, + { "time": 6.3333, "value": -4.1 }, + { "time": 6.6667, "value": -2.05 } + ] + }, + "leaf-1": { + "rotate": [ + {}, + { "time": 0.6667, "value": -4.1 }, + { "time": 1.3333 }, + { "time": 2, "value": -4.1 }, + { "time": 2.6667 }, + { "time": 3.3333, "value": -4.1 }, + { "time": 4 }, + { "time": 4.6667, "value": -4.1 }, + { "time": 5.3333 }, + { "time": 6, "value": -4.1 }, + { "time": 6.6667 } + ] + } + } + }, + "left": { + "bones": { + "control": { + "translate": [ + { "x": 36.13, "y": -9.34 } + ], + "scale": [ + { "x": 0.881 } + ] + }, + "body-top-control": { + "translate": [ + { "x": 201.35, "y": 7.73 } + ] + }, + "head": { + "rotate": [ + { "value": 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": [ + { "value": -21.71 } + ], + "translate": [ + { "x": -66.39, "y": -2.93 } + ] + }, + "branch-6": { + "rotate": [ + { "value": -12.55 } + ] + }, + "branch-1": { + "rotate": [ + { "value": -4.71 } + ], + "shear": [ + { "x": -0.6 } + ] + }, + "leaf-1": { + "rotate": [ + { "value": -7.07 } + ] + }, + "leaf-7": { + "rotate": [ + { "value": -1.77 } + ] + }, + "leaf-3": { + "rotate": [ + { "value": -45.61 } + ] + }, + "branch-2": { + "rotate": [ + { "value": -13.14 } + ] + }, + "branch-3": { + "rotate": [ + { "value": -3.9 } + ] + }, + "branch-4": { + "rotate": [ + { "value": -17.48 } + ] + }, + "leaf-2": { + "rotate": [ + { "value": -9.76 } + ] + }, + "leaf-5": { + "rotate": [ + { "value": -22 } + ] + }, + "leaf-4": { + "rotate": [ + { "value": -9.91 } + ] + }, + "leaf-6": { + "rotate": [ + { "value": -9.91 } + ] + } + }, + "attachments": { + "default": { + "head-base": { + "head-base": { + "deform": [ + { + "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 ] + } + ] + } + }, + "L_foot": { + "L_foot": { + "deform": [ + { + "vertices": [ 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046 ] + } + ] + } + }, + "L_wing": { + "L_wing": { + "deform": [ + { + "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": { + "R_foot": { + "deform": [ + { + "vertices": [ -20.46537, -32.39883, -25.30428, -2.89771, -3.40881, 0.69367, 1.43011, -28.8075 ] + } + ] + } + }, + "R_wing": { + "R_wing": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + }, + "right": { + "bones": { + "control": { + "rotate": [ + { "value": -1.83 } + ], + "translate": [ + { "x": -27.71, "y": 0.14 } + ] + }, + "head": { + "rotate": [ + { "value": 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": [ + { "value": 12.67 } + ], + "translate": [ + { "x": 85.12, "y": 3.76 } + ] + }, + "branch-1": { + "shear": [ + { "x": 5.71 } + ] + }, + "leaf-1": { + "rotate": [ + { "value": -4.65 } + ] + }, + "leaf-7": { + "rotate": [ + { "value": -0.49 } + ] + }, + "branch-2": { + "rotate": [ + { "value": 14.88 } + ], + "shear": [ + { "y": 7.92 } + ] + }, + "branch-6": { + "rotate": [ + { "value": 22.6 } + ] + }, + "leaf-4": { + "rotate": [ + { "value": 33.05 } + ] + }, + "leaf-6": { + "rotate": [ + { "value": 9.92 } + ] + }, + "leaf-3": { + "rotate": [ + { "value": -0.07 } + ] + }, + "branch-4": { + "rotate": [ + { "value": 7.3 } + ] + }, + "leaf-5": { + "rotate": [ + { "value": 14.96 } + ] + }, + "leaf-2": { + "rotate": [ + { "value": -12.1 } + ] + }, + "branch-3": { + "rotate": [ + { "value": 5.4 } + ] + } + }, + "attachments": { + "default": { + "head-base": { + "head-base": { + "deform": [ + { + "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 ] + } + ] + } + }, + "L_foot": { + "L_foot": { + "deform": [ + { + "vertices": [ 39.31265, 4.41002, 41.72089, -32.44155, 14.37022, -34.22886, 11.96194, 2.62272 ] + } + ] + } + }, + "L_wing": { + "L_wing": { + "deform": [ + { + "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": { + "R_foot": { + "deform": [ + { + "vertices": [ -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33 ] + } + ] + } + }, + "R_wing": { + "R_wing": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + }, + "up": { + "bones": { + "control": { + "translate": [ + { "x": 0.3, "y": 34.37 } + ], + "scale": [ + { "y": 0.82 } + ] + }, + "control-back": { + "translate": [ + { "y": -17.04 } + ] + }, + "owl-base": { + "rotate": [ + { "value": -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": [ + { "value": 4.94 } + ] + }, + "branch-2": { + "rotate": [ + { "value": 0.52 } + ] + }, + "branch-3": { + "rotate": [ + { "value": 1.64 } + ] + }, + "branch-4": { + "rotate": [ + { "value": -10.43 } + ] + }, + "branch-6": { + "rotate": [ + { "value": -5.42 } + ] + }, + "leaf-6": { + "rotate": [ + { "value": -5.42 } + ] + }, + "leaf-2": { + "rotate": [ + { "value": 4.46 } + ] + } + }, + "attachments": { + "default": { + "body": { + "body": { + "deform": [ + { + "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": { + "head-base": { + "deform": [ + { + "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 ] + } + ] + } + }, + "L_foot": { + "L_foot": { + "deform": [ + { + "vertices": [ 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042 ] + } + ] + } + }, + "L_wing": { + "L_wing": { + "deform": [ + { + "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": { + "R_foot": { + "deform": [ + { + "vertices": [ 35.48705, -0.58566, 32.90477, 10.12547, 40.85446, 12.04202, 43.43665, 1.33094 ] + } + ] + } + }, + "R_wing": { + "R_wing": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/owl-pro.skel b/spine-haxe/example/assets/owl-pro.skel new file mode 100644 index 000000000..d313366c7 Binary files /dev/null and b/spine-haxe/example/assets/owl-pro.skel differ diff --git a/spine-haxe/example/assets/owl.atlas b/spine-haxe/example/assets/owl.atlas new file mode 100644 index 000000000..1b1d4b8b1 --- /dev/null +++ b/spine-haxe/example/assets/owl.atlas @@ -0,0 +1,73 @@ +owl.png + size: 1024, 512 + filter: Linear, Linear + scale: 0.5 +L_eye-closed + bounds: 512, 5, 90, 86 + rotate: 90 +L_eye-iris + bounds: 600, 10, 90, 86 + rotate: 90 +L_eye-light + bounds: 688, 4, 21, 20 + rotate: 90 +L_eye-pupil + bounds: 856, 13, 63, 60 + rotate: 90 +L_foot + bounds: 834, 78, 64, 48 + rotate: 90 +L_wing + bounds: 349, 4, 81, 110 + rotate: 90 +R_eye-closed + bounds: 637, 119, 90, 86 + rotate: 90 +R_eye-iris + bounds: 688, 27, 90, 86 + rotate: 90 +R_eye-light + bounds: 710, 4, 21, 20 + rotate: 90 +R_eye-pupil + bounds: 884, 80, 63, 60 + rotate: 90 +R_foot + bounds: 845, 145, 64, 48 + rotate: 90 +R_wing + bounds: 421, 93, 81, 110 +beak + bounds: 776, 2, 39, 41 +beak-down + bounds: 817, 3, 37, 40 +body + bounds: 2, 7, 248, 196 +feather-1 + bounds: 918, 18, 59, 60 +feather-2 + bounds: 781, 144, 62, 65 +feather-3 + bounds: 776, 45, 56, 76 +head-base + bounds: 621, 211, 299, 237 + rotate: 90 +leaf-1 + bounds: 559, 102, 76, 101 +leaf-2 + bounds: 252, 4, 65, 95 + rotate: 90 +leaf-3 + bounds: 252, 71, 132, 77 + rotate: 90 +leaf-4 + bounds: 461, 2, 89, 49 + rotate: 90 +leaf-5 + bounds: 504, 97, 53, 106 +leaf-6 + bounds: 331, 87, 88, 116 +leaf-7 + bounds: 725, 123, 54, 86 +wood + bounds: 2, 205, 617, 305 diff --git a/spine-haxe/example/assets/owl.png b/spine-haxe/example/assets/owl.png new file mode 100644 index 000000000..a375217a7 Binary files /dev/null and b/spine-haxe/example/assets/owl.png differ diff --git a/spine-haxe/example/assets/raptor-pro.json b/spine-haxe/example/assets/raptor-pro.json new file mode 100644 index 000000000..5439b9138 --- /dev/null +++ b/spine-haxe/example/assets/raptor-pro.json @@ -0,0 +1,9161 @@ +{ +"skeleton": { + "hash": "AAVlM3uJh3s", + "spine": "4.1.17", + "x": -809.16, + "y": -73.54, + "width": 1287.65, + "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, + "transform": "noScale", + "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, + "transform": "noScale", + "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, + "scaleX": 1.0004, + "scaleY": 1.0004, + "transform": "onlyTranslation", + "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.6, + "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" + }, + { "name": "head-control", "parent": "head", "rotation": -95.04, "x": 42.32, "y": -220.33, "color": "219517ff" }, + { "name": "leg-control", "parent": "front-leg1", "rotation": 53.14, "x": 172.97, "y": 4.16, "color": "1d8020ff" } +], +"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": "raptow-jaw-tooth", "bone": "jaw", "attachment": "raptor-jaw-tooth" }, + { "name": "raptor-horn-back", "bone": "horn-back", "attachment": "raptor-horn-back" }, + { "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", + "bendPositive": false + }, + { + "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", + "bendPositive": false + } +], +"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": [ 134, 135, 116, 107, 34, 35, 106, 107, 35, 106, 35, 36, 105, 106, 36, 78, 107, 77, 77, 107, 106, 76, 77, 106, 76, 106, 105, 76, 105, 75, 116, 135, 123, 134, 116, 117, 123, 122, 121, 123, 121, 120, 116, 123, 120, 130, 119, 120, 119, 117, 120, 126, 123, 136, 122, 125, 124, 125, 122, 126, 155, 20, 133, 20, 21, 112, 19, 20, 156, 133, 118, 132, 131, 132, 118, 122, 124, 127, 133, 113, 134, 131, 130, 148, 155, 131, 148, 130, 129, 147, 129, 128, 146, 17, 18, 19, 129, 146, 147, 1, 124, 125, 136, 114, 126, 16, 17, 15, 154, 17, 156, 2, 127, 124, 155, 148, 150, 145, 127, 2, 146, 128, 3, 148, 147, 150, 2, 124, 1, 151, 156, 153, 152, 154, 156, 13, 154, 11, 147, 149, 4, 11, 12, 13, 11, 154, 152, 4, 149, 3, 8, 9, 7, 111, 22, 23, 22, 112, 21, 112, 81, 113, 81, 82, 113, 113, 82, 114, 82, 83, 114, 83, 84, 114, 84, 85, 114, 114, 86, 115, 114, 85, 86, 115, 0, 1, 115, 86, 0, 10, 11, 9, 11, 152, 9, 9, 152, 7, 7, 152, 6, 6, 152, 151, 6, 151, 5, 5, 151, 150, 150, 4, 5, 150, 147, 4, 146, 3, 149, 145, 2, 3, 151, 153, 150, 152, 156, 151, 126, 114, 115, 135, 113, 114, 147, 146, 149, 1, 125, 115, 145, 3, 128, 13, 15, 154, 153, 155, 150, 13, 14, 15, 15, 17, 154, 20, 112, 113, 125, 126, 115, 148, 130, 147, 156, 155, 153, 127, 145, 128, 20, 113, 133, 127, 128, 121, 17, 19, 156, 135, 114, 136, 132, 131, 155, 120, 128, 129, 155, 133, 132, 131, 118, 119, 118, 117, 119, 156, 20, 155, 131, 119, 130, 133, 117, 118, 130, 120, 129, 122, 123, 126, 117, 116, 120, 121, 122, 127, 120, 121, 128, 113, 135, 134, 135, 136, 123, 133, 134, 117, 24, 111, 23, 111, 112, 22, 111, 80, 112, 112, 80, 81, 110, 107, 78, 30, 139, 29, 139, 140, 29, 29, 140, 28, 140, 108, 109, 140, 141, 28, 28, 141, 27, 27, 141, 142, 140, 109, 141, 141, 109, 142, 142, 26, 27, 142, 143, 26, 142, 109, 143, 26, 143, 25, 109, 110, 143, 110, 144, 143, 143, 144, 25, 109, 108, 110, 110, 79, 80, 79, 110, 78, 25, 144, 24, 110, 111, 144, 110, 80, 111, 144, 111, 24, 108, 34, 107, 30, 31, 138, 138, 31, 32, 138, 32, 137, 32, 33, 137, 33, 34, 137, 138, 139, 30, 138, 137, 139, 139, 137, 140, 108, 140, 137, 137, 34, 108, 110, 108, 107, 37, 105, 36, 104, 105, 37, 104, 37, 38, 38, 103, 104, 105, 104, 75, 103, 73, 104, 104, 73, 74, 75, 104, 74, 38, 39, 103, 39, 102, 103, 40, 102, 39, 101, 102, 40, 73, 103, 72, 101, 71, 102, 72, 103, 102, 72, 102, 71, 101, 40, 41, 100, 101, 41, 100, 41, 42, 100, 42, 99, 69, 100, 99, 71, 101, 70, 69, 70, 100, 101, 100, 70, 42, 43, 99, 99, 43, 98, 43, 44, 98, 98, 44, 97, 98, 97, 67, 99, 98, 68, 68, 98, 67, 99, 68, 69, 44, 45, 97, 97, 45, 96, 45, 46, 96, 96, 46, 95, 96, 95, 65, 97, 96, 66, 96, 65, 66, 97, 66, 67, 46, 47, 95, 95, 47, 94, 47, 48, 94, 94, 48, 93, 94, 93, 63, 95, 94, 64, 94, 63, 64, 95, 64, 65, 48, 49, 93, 93, 49, 92, 92, 49, 91, 49, 50, 91, 91, 61, 92, 93, 92, 62, 92, 61, 62, 93, 62, 63, 50, 90, 91, 51, 89, 90, 50, 51, 90, 51, 52, 89, 89, 59, 90, 59, 60, 90, 90, 60, 91, 60, 61, 91, 55, 87, 54, 55, 56, 87, 54, 87, 53, 52, 88, 89, 87, 88, 53, 52, 53, 88, 56, 57, 87, 87, 57, 88, 57, 58, 88, 88, 58, 89, 58, 59, 89 ], + "vertices": [ 2, 8, 142.31, -163.1, 0.91085, 74, -65.79, 94.58, 0.08915, 2, 8, 129.87, -206.92, 0.78514, 74, -21.05, 86.04, 0.21486, 2, 8, 113.94, -247.72, 0.77045, 74, 21, 73.75, 0.22955, 2, 8, 95.41, -280.88, 0.81697, 74, 55.65, 58.2, 0.18303, 2, 8, 76.47, -299.85, 0.92186, 74, 76.21, 41, 0.07814, 2, 8, 50.32, -309.1, 0.93376, 74, 87.72, 15.77, 0.06624, 2, 8, 30.6, -308.34, 0.9245, 74, 88.7, -3.95, 0.0755, 2, 8, 11.66, -304.47, 0.91842, 74, 86.51, -23.15, 0.08158, 2, 8, -21.93, -292.74, 0.98449, 74, 77.77, -57.64, 0.01551, 2, 8, -7.26, -287.07, 0.90726, 74, 70.83, -43.53, 0.09274, 2, 8, -23.63, -271.23, 0.89469, 74, 56.49, -61.23, 0.10531, 2, 8, -5.35, -267.89, 0.87252, 74, 51.57, -43.31, 0.12748, 2, 8, -22.13, -246.63, 0.90956, 74, 31.85, -61.9, 0.09044, 2, 8, 1.79, -243.11, 0.79155, 74, 26.25, -38.38, 0.20845, 2, 8, -5.62, -235.26, 0.80291, 74, 19.09, -46.44, 0.19709, 2, 8, 4.82, -234.16, 0.75452, 74, 17.07, -36.14, 0.24548, 2, 8, -3.61, -220.15, 0.7702, 74, 3.85, -45.77, 0.2298, 2, 8, 9.36, -218.37, 0.69443, 74, 0.94, -33, 0.30557, 2, 8, -6.91, -201.42, 0.7716, 74, -14.51, -50.7, 0.2284, 2, 8, 21.07, -197.82, 0.52991, 74, -20.56, -23.15, 0.47009, 2, 8, 25.72, -185.86, 0.48384, 74, -32.88, -19.56, 0.51616, 3, 8, -2.82, -155.01, 0.49549, 54, 99.81, 14.95, 0.1998, 74, -61.14, -50.76, 0.30472, 3, 8, -34.92, -139.14, 0.52773, 54, 107.98, -19.92, 0.45684, 74, -74.17, -84.14, 0.01543, 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.39257, 61, -55.62, 167.98, 0.26021, 1, -45.7, -168.32, 0.34722, 4, 62, -58.53, 122.52, 0.02965, 2, -92.91, -98.95, 0.15809, 61, 1.54, 109.92, 0.56291, 1, -71.11, -90.91, 0.24934, 5, 63, -87.14, 125.38, 0.01694, 62, -30.38, 104.17, 0.12049, 2, -117.05, -75.56, 0.06243, 61, 32.55, 96.96, 0.67353, 1, -93.12, -65.52, 0.12661, 5, 63, -54.56, 107.85, 0.06533, 62, 5.17, 93.91, 0.35431, 2, -149.99, -58.72, 0.01512, 61, 69.37, 93.3, 0.52081, 1, -124.48, -45.88, 0.04444, 4, 64, -91.18, 96.68, 0.02003, 63, -26.17, 96.68, 0.17282, 62, 35.28, 88.98, 0.56052, 61, 99.87, 93.89, 0.24663, 4, 64, -55.58, 91.31, 0.08871, 63, 9.43, 91.31, 0.37251, 62, 71.21, 91.24, 0.43883, 61, 134.8, 102.61, 0.09995, 5, 65, -80.72, 91.6, 0.01487, 64, -22.44, 85.2, 0.21852, 63, 42.57, 85.2, 0.55905, 62, 104.89, 92.27, 0.18543, 61, 167.74, 109.71, 0.02213, 4, 65, -51.3, 84.41, 0.07099, 64, 7.44, 80.26, 0.46092, 63, 72.45, 80.26, 0.39268, 62, 135.14, 93.74, 0.07541, 4, 65, -22.46, 78.67, 0.2126, 64, 36.63, 76.74, 0.62934, 63, 101.64, 76.74, 0.13917, 62, 164.42, 96.46, 0.01889, 4, 66, -61.72, 72.53, 0.05014, 65, 8.81, 72.53, 0.49668, 64, 68.28, 72.99, 0.41049, 63, 133.29, 72.99, 0.04268, 3, 66, -23.6, 64.7, 0.21233, 65, 46.93, 64.7, 0.64547, 64, 106.89, 68.09, 0.1422, 4, 67, -56.68, 59.57, 0.00497, 66, 11.45, 57.2, 0.56359, 65, 81.98, 57.2, 0.40675, 64, 142.41, 63.26, 0.0247, 4, 68, -88.32, 52.48, 0.00856, 67, -26.06, 50.98, 0.14719, 66, 42.4, 49.87, 0.68541, 65, 112.93, 49.87, 0.15884, 4, 68, -53.99, 42.22, 0.05573, 67, 8.43, 41.3, 0.39231, 66, 77.27, 41.61, 0.51595, 65, 147.8, 41.61, 0.036, 5, 69, -79.08, 32.17, 0.00731, 68, -23.87, 33.95, 0.20888, 67, 38.69, 33.54, 0.55959, 66, 107.81, 35.1, 0.21646, 65, 178.34, 35.1, 0.00775, 5, 69, -49.94, 24.87, 0.05717, 68, 5.1, 25.99, 0.4278, 67, 67.79, 26.07, 0.45737, 66, 137.19, 28.83, 0.05638, 65, 207.72, 28.83, 0.00128, 5, 70, -74, 19.39, 0.00687, 69, -24.91, 18.93, 0.21088, 68, 29.98, 19.49, 0.5528, 67, 92.78, 19.99, 0.22286, 66, 162.41, 23.77, 0.00659, 4, 70, -49.4, 13.39, 0.05569, 69, -0.28, 13.08, 0.44113, 68, 54.48, 13.08, 0.43894, 67, 117.38, 14, 0.06424, 4, 70, -26.39, 8.9, 0.21474, 69, 22.77, 8.73, 0.56103, 68, 77.42, 8.22, 0.21699, 67, 140.4, 9.52, 0.00724, 3, 70, -1, 6.11, 0.49366, 69, 48.17, 6.1, 0.44664, 68, 102.76, 5.01, 0.05971, 3, 70, 21.83, 3.3, 0.77042, 69, 71.02, 3.44, 0.22113, 68, 125.54, 1.84, 0.00845, 2, 70, 45.36, 1.27, 0.92172, 69, 94.56, 1.55, 0.07828, 2, 70, 75.48, -1.02, 0.98437, 69, 124.7, -0.54, 0.01563, 2, 70, 74.41, -10.99, 0.98712, 69, 123.69, -10.52, 0.01288, 2, 70, 47.53, -13.96, 0.9286, 69, 96.83, -13.66, 0.0714, 3, 70, 25.58, -16.62, 0.78026, 69, 74.89, -16.46, 0.21218, 68, 128.96, -18.15, 0.00756, 4, 70, 1.81, -20.07, 0.50456, 69, 51.15, -20.06, 0.43841, 68, 105.14, -21.21, 0.05555, 67, 168.62, -19.43, 0.00148, 4, 70, -21.82, -24.02, 0.2241, 69, 27.54, -24.16, 0.55698, 68, 81.45, -24.77, 0.20577, 67, 144.99, -23.39, 0.01316, 5, 70, -48.25, -27.85, 0.06037, 69, 1.14, -28.15, 0.44261, 68, 54.96, -28.17, 0.41953, 67, 118.56, -27.24, 0.07662, 66, 190.11, -22.36, 8.7E-4, 5, 70, -76.93, -32.01, 0.00843, 69, -27.52, -32.49, 0.21461, 68, 26.21, -31.86, 0.52853, 67, 89.88, -31.41, 0.23794, 66, 161.62, -27.71, 0.01048, 5, 69, -53.61, -36.45, 0.05984, 68, 0.04, -35.22, 0.4064, 67, 63.76, -35.22, 0.46847, 66, 135.68, -32.58, 0.06423, 65, 206.21, -32.58, 0.00106, 5, 69, -86.21, -41.34, 0.00821, 68, -32.66, -39.38, 0.19546, 67, 31.14, -39.93, 0.57299, 66, 103.28, -38.62, 0.21339, 65, 173.81, -38.62, 0.00994, 4, 68, -65.07, -43.5, 0.05047, 67, -1.2, -44.59, 0.45101, 66, 71.16, -44.6, 0.43746, 65, 141.69, -44.6, 0.06106, 4, 68, -97.64, -46.72, 0.00724, 67, -33.71, -48.36, 0.20423, 66, 38.83, -49.7, 0.58773, 65, 109.36, -49.7, 0.2008, 4, 67, -66.72, -52.2, 0.05217, 66, 6, -54.89, 0.45622, 65, 76.53, -54.89, 0.46325, 64, 145.49, -48.91, 0.02835, 3, 66, -30.62, -60.6, 0.17334, 65, 39.91, -60.6, 0.683, 64, 109.41, -57.39, 0.14366, 4, 66, -68.46, -66.77, 0.0295, 65, 2.07, -66.77, 0.50408, 64, 72.15, -66.42, 0.40417, 63, 137.16, -66.42, 0.06225, 4, 65, -34.88, -72.32, 0.18739, 64, 35.73, -74.76, 0.58778, 63, 100.73, -74.76, 0.2056, 62, 195.5, -51.82, 0.01923, 4, 65, -75.09, -77.7, 0.04676, 64, -3.96, -83.19, 0.39617, 63, 61.05, -83.19, 0.48167, 62, 158.49, -68.43, 0.07539, 3, 64, -32.54, -89.19, 0.14427, 63, 32.47, -89.19, 0.63908, 62, 131.82, -80.33, 0.21665, 4, 64, -71.85, -91.35, 0.04785, 63, -6.84, -91.35, 0.40108, 62, 93.85, -90.74, 0.50635, 61, 189.98, -72.27, 0.04472, 3, 63, -45.16, -103.67, 0.17783, 62, 58.99, -110.86, 0.68949, 61, 159.33, -98.37, 0.13269, 4, 63, -88.59, -107.18, 0.06196, 62, 17.28, -123.46, 0.5382, 2, -120.43, 156.97, 0.01597, 61, 120.58, -118.3, 0.38387, 4, 63, -112.39, -91.86, 0.01664, 62, -9.21, -113.51, 0.31712, 2, -96.32, 142.15, 0.06918, 61, 92.73, -113.3, 0.59706, 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, 2, 8, 144.24, -7.82, 0.89352, 74, -220.64, 82.87, 0.10648, 2, 8, 153.81, -49.13, 0.88, 74, -180.33, 96.03, 0.12, 2, 8, 154.57, -106.94, 0.91167, 74, -122.81, 101.86, 0.08833, 2, 70, 46.28, -5.67, 0.88974, 69, 95.52, -5.38, 0.11026, 3, 70, 24, -6.32, 0.78319, 69, 73.25, -6.17, 0.21288, 68, 127.55, -7.82, 0.00393, 3, 70, 0.06, -7.63, 0.4984, 69, 49.31, -7.63, 0.45067, 68, 103.59, -8.74, 0.05093, 4, 70, -25.34, -7.36, 0.21021, 69, 23.92, -7.52, 0.57916, 68, 78.21, -8.06, 0.20281, 67, 141.46, -6.74, 0.00782, 4, 70, -49.23, -8.43, 0.05008, 69, 0.04, -8.74, 0.44936, 68, 54.3, -8.74, 0.44109, 67, 117.57, -7.82, 0.05946, 5, 70, -78.74, -9.59, 0.00411, 69, -29.46, -10.08, 0.20704, 68, 24.78, -9.42, 0.55388, 67, 88.06, -9, 0.22906, 66, 158.89, -5.38, 0.0059, 4, 69, -57, -9.28, 0.05054, 68, -2.74, -7.99, 0.42931, 67, 60.53, -8.04, 0.46828, 66, 131.34, -5.55, 0.05187, 5, 69, -87.47, -7.89, 0.00416, 68, -33.16, -5.91, 0.19066, 67, 30.07, -6.47, 0.59281, 66, 100.84, -5.23, 0.20446, 65, 171.37, -5.23, 0.00791, 4, 68, -64.88, -2.76, 0.04806, 67, -1.7, -3.86, 0.44622, 66, 68.99, -3.93, 0.45724, 65, 139.52, -3.93, 0.04848, 4, 68, -98.1, -2.85, 0.00302, 67, -34.91, -4.51, 0.16897, 66, 35.83, -5.93, 0.6491, 65, 106.36, -5.93, 0.17891, 3, 67, -69.74, -5.58, 0.03488, 66, 1.08, -8.43, 0.4896, 65, 71.61, -8.43, 0.47552, 4, 67, -108.75, -4.75, 0.00424, 66, -37.94, -9.2, 0.16984, 65, 32.59, -9.2, 0.69137, 64, 98.21, -6.7, 0.13455, 2, 65, 0.17, -8.31, 0.52543, 64, 65.82, -8.27, 0.47457, 3, 65, -34.17, -6.83, 0.18477, 64, 31.46, -9.41, 0.62696, 63, 96.47, -9.41, 0.18827, 4, 65, -66.3, -4.22, 0.01263, 64, -0.78, -9.24, 0.46677, 63, 64.23, -9.24, 0.48853, 62, 146, 4.52, 0.03206, 3, 64, -35.25, -8.87, 0.22735, 63, 29.76, -8.87, 0.65577, 62, 112.23, -2.39, 0.11689, 4, 64, -69.22, -8.55, 0.02776, 63, -4.21, -8.55, 0.41215, 62, 78.95, -9.25, 0.52977, 61, 160.59, 5.18, 0.03032, 3, 63, -46.14, -2.26, 0.12876, 62, 36.63, -11.94, 0.70822, 61, 119.45, -5.12, 0.16302, 3, 63, -84, 7.67, 0.04548, 62, -2.46, -10.23, 0.46291, 61, 80.69, -10.51, 0.4916, 4, 62, -40.04, -2.56, 0.20066, 2, -87.22, 27.36, 0.04102, 61, 42.35, -9.75, 0.69947, 1, -54.47, 34.43, 0.05884, 4, 62, -84, 4.08, 0.06346, 2, -45.32, 12.47, 0.1335, 61, -2.09, -11.18, 0.66178, 1, -14.03, 15.96, 0.14126, 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, 4, 6, 151.36, -15.54, 0.1938, 7, 12.13, -31.86, 0.65264, 54, 35.04, -116.47, 0.10585, 74, -188.88, -122.43, 0.0477, 4, 7, 70.75, -31.76, 0.42196, 8, -5.28, -31.36, 0.19392, 54, 5.95, -65.58, 0.22877, 74, -184.09, -64, 0.15534, 3, 8, 47.28, -25.92, 0.60156, 54, -31.67, -28.46, 0.26709, 74, -194.09, -12.11, 0.13136, 3, 8, 110.31, -65.62, 0.66779, 54, -41.11, 45.43, 0.13197, 74, -160.06, 54.14, 0.20024, 2, 8, 120.51, -143.55, 0.72576, 74, -83.35, 71.14, 0.27424, 2, 8, 76.35, -191.51, 0.55039, 74, -31.7, 31.36, 0.44961, 2, 8, 63.06, -197.7, 0.57574, 74, -24.37, 18.67, 0.42426, 2, 8, 56.42, -210.42, 0.59162, 74, -11.11, 13.17, 0.40838, 2, 8, 62.27, -225.94, 0.54866, 74, 3.83, 20.37, 0.45134, 2, 8, 74.99, -231.02, 0.55882, 74, 7.78, 33.48, 0.44118, 2, 8, 90.83, -221.52, 0.5372, 74, -3.08, 48.42, 0.4628, 2, 8, 93.3, -206.31, 0.54037, 74, -18.44, 49.55, 0.45963, 2, 8, 86.63, -193.69, 0.56061, 74, -30.43, 41.8, 0.43939, 2, 8, 110.32, -205.97, 0.55507, 74, -20.28, 66.47, 0.44493, 2, 8, 111.33, -183.27, 0.52695, 74, -42.98, 65.49, 0.47305, 2, 8, 111.53, -160.07, 0.56797, 74, -66.1, 63.65, 0.43203, 2, 8, 102.49, -224.1, 0.57026, 74, -1.52, 60.27, 0.42974, 2, 8, 83.06, -235.84, 0.54683, 74, 11.87, 41.94, 0.45317, 2, 8, 75.02, -238.67, 0.5345, 74, 15.4, 34.18, 0.4655, 2, 8, 64.95, -240.47, 0.52774, 74, 18.07, 24.31, 0.47226, 2, 8, 59.74, -238.59, 0.52019, 74, 16.66, 18.96, 0.47981, 2, 8, 49.93, -213.38, 0.51178, 74, -7.59, 6.97, 0.48822, 2, 8, 46.45, -191.85, 0.53448, 74, -28.74, 1.61, 0.46552, 2, 8, 63.13, -172.79, 0.45609, 74, -49.18, 16.56, 0.54391, 2, 8, 76.73, -169.46, 0.47244, 74, -53.69, 29.81, 0.52756, 2, 8, 98.86, -157.68, 0.53514, 74, -67.37, 50.82, 0.46486, 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, 4, 6, 127.4, -71.89, 0.69313, 7, -43.11, -58.31, 0.19154, 54, 85.35, -151.38, 0.10631, 74, -167.16, -179.69, 0.00902, 2, 8, 104.61, -244.7, 0.66844, 74, 18.8, 64.19, 0.33156, 2, 8, 81.39, -264.16, 0.67294, 74, 40.23, 42.76, 0.32706, 2, 8, 66.82, -266.01, 0.65456, 74, 43.35, 28.41, 0.34544, 2, 8, 58.66, -259.02, 0.64393, 74, 37.11, 19.68, 0.35607, 2, 8, 78.9, -281.43, 0.75776, 74, 57.66, 41.81, 0.24224, 2, 8, 53.83, -287.14, 0.77384, 74, 65.54, 17.33, 0.22616, 2, 8, 33.86, -287.57, 0.80091, 74, 67.72, -2.53, 0.19909, 2, 8, 9.92, -286.55, 0.89717, 74, 68.81, -26.47, 0.10283, 2, 8, 36.24, -266.75, 0.70023, 74, 46.78, -1.99, 0.29977, 2, 8, 7.82, -257.69, 0.78734, 74, 40.25, -31.09, 0.21266, 2, 8, 41.56, -240.46, 0.5741, 74, 20.12, 1.01, 0.4259, 2, 8, 22.36, -235.22, 0.62581, 74, 16.58, -18.58, 0.37419 ], + "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": [ 14, 12, 13, 14, 11, 12, 14, 15, 11, 11, 15, 10, 55, 44, 47, 44, 45, 47, 10, 15, 45, 15, 47, 45, 55, 46, 44, 44, 46, 45, 45, 46, 10, 46, 9, 10, 48, 9, 46, 48, 8, 9, 16, 17, 15, 17, 47, 15, 18, 55, 17, 17, 55, 47, 19, 48, 18, 18, 48, 55, 20, 43, 19, 19, 43, 48, 48, 46, 55, 48, 43, 8, 21, 42, 20, 20, 42, 43, 21, 41, 42, 21, 22, 41, 43, 7, 8, 43, 42, 7, 42, 6, 7, 42, 41, 6, 23, 24, 22, 22, 24, 41, 41, 40, 6, 41, 24, 40, 6, 40, 5, 5, 39, 4, 5, 40, 39, 39, 26, 54, 39, 40, 26, 24, 25, 40, 40, 25, 26, 39, 38, 4, 4, 38, 3, 39, 50, 38, 39, 54, 50, 38, 37, 3, 3, 37, 2, 26, 27, 54, 54, 27, 50, 50, 51, 38, 38, 51, 37, 27, 28, 50, 50, 28, 51, 56, 57, 49, 32, 33, 57, 57, 58, 49, 57, 33, 58, 49, 58, 59, 59, 58, 34, 34, 58, 33, 59, 34, 0, 32, 57, 56, 37, 1, 2, 51, 36, 37, 37, 36, 1, 28, 52, 51, 51, 52, 36, 28, 29, 52, 29, 53, 52, 29, 30, 53, 36, 52, 35, 52, 53, 35, 36, 0, 1, 36, 35, 0, 31, 56, 30, 30, 56, 53, 53, 56, 35, 31, 32, 56, 56, 49, 35, 35, 59, 0, 49, 59, 35 ], + "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, 3, 42, 165.75, -94.49, 0.3178, 43, 105.59, -71.26, 0.67648, 75, -80.8, -39.34, 0.00571, 3, 42, 166.4, -79.07, 0.45961, 43, 90.23, -72.77, 0.53468, 75, -67.92, -34.74, 0.00571, 3, 42, 166.49, -74.17, 0.53171, 43, 85.43, -73.29, 0.45686, 75, -64.13, -33.63, 0.01143, 3, 42, 141.54, -82.47, 0.7272, 43, 97.13, -96.82, 0.26709, 75, -86.02, -21.18, 0.00571, 3, 42, 99.76, -97.08, 0.84471, 43, 117.34, -136.23, 0.14529, 75, -123.07, 1.78, 0.01, 2, 42, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16385, 2, 42, -16.21, -74.77, 0.53, 1, -42.95, -58.39, 0.47, 1, 1, -52.66, 17.56, 1, 1, 1, 70.07, 18.78, 1, 2, 42, 93.55, 4.14, 0.84985, 75, -47.66, 63.53, 0.15015, 3, 42, 185.14, -6.67, 0.69958, 43, 15.99, -64.28, 0.22749, 75, 0.73, -14.59, 0.07292, 3, 42, 217.11, -18.75, 0.50337, 43, 23.47, -30.93, 0.48663, 75, 9.65, -46.32, 0.01, 2, 42, 225.64, -32.92, 0.32528, 43, 36.31, -20.51, 0.67472, 3, 42, 223, -84.74, 0.2007, 43, 87.97, -15.86, 0.79322, 75, -43.91, -82.01, 0.00607, 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, 3, 42, -9.28, -17.51, 0.21934, 1, 7.72, -30.86, 0.74243, 75, -126.22, 130.87, 0.03823, 3, 42, 195.91, -53.82, 0.42127, 43, 61.12, -47.06, 0.57302, 75, -30.92, -46.02, 0.00571, 3, 42, 190.1, -48.45, 0.52927, 43, 56.62, -53.56, 0.46502, 75, -29.84, -39.6, 0.00571, 3, 42, 161.27, -48.26, 0.74345, 43, 60.44, -82.13, 0.18733, 75, -47.3, -19.14, 0.06922, 3, 42, 120.38, -58.54, 0.78619, 43, 76.31, -121.19, 0.13381, 75, -79.81, 7.32, 0.08, 3, 42, 197.37, -69.23, 0.33416, 43, 76.18, -43.47, 0.66185, 75, -43.15, -54, 0.00398, 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, 3, 42, 49.5, -83.17, 0.65468, 1, -17.26, -114.16, 0.26246, 75, -142.18, 45.76, 0.08286, 3, 42, -9.83, -51.31, 0.41164, 1, -21.43, -46.95, 0.57122, 75, -153.07, 111.17, 0.01714, 2, 42, -31.44, -20.43, 0.27617, 1, -6.57, -12.31, 0.72383, 3, 42, 0.92, 47.46, 0.40628, 1, 68.18, -4.06, 0.57468, 75, -69.72, 165.13, 0.01904 ], + "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": { + "type": "mesh", + "uvs": [ 0.23202, 0, 0.36456, 0.3051, 0.37967, 0.28578, 0.42983, 0.41504, 0.48255, 0.4592, 0.49181, 0.37558, 0.54262, 0.43364, 0.62744, 0.22373, 0.72685, 0.20157, 0.71155, 0.10296, 0.7437, 0.12629, 0.87154, 0.32694, 0.92655, 0.58847, 0.95146, 0.58291, 1, 0.79797, 0.99855, 0.91608, 0.95668, 0.9066, 0.89548, 0.84052, 0.85745, 0.71568, 0.81176, 0.71081, 0.79146, 0.64162, 0.7146, 0.66948, 0.70308, 0.72109, 0.66405, 0.91955, 0.57139, 1, 0.51265, 1, 0.40749, 0.94178, 0.34499, 0.80186, 0.24959, 0.49467, 0.23945, 0.4213, 0.15768, 0.37748, 0.10301, 0.43856, 0.0716, 0.54182, 0.0635, 0.72333, 0.0968, 0.78581, 0.19705, 0.70312, 0.20849, 0.70702, 0.13611, 0.87184, 0.0794, 0.95675, 0.03745, 0.92784, 0, 0.72707, 0, 0.49239, 0.01821, 0.37577, 0.08924, 0.16005, 0.2217, 0.08591, 0.21231, 0.02037, 0.21551, 0, 0.93395, 0.7495, 0.84078, 0.47214, 0.76078, 0.46484, 0.71616, 0.58482, 0.55373, 0.75879, 0.45392, 0.65487, 0.35185, 0.54621 ], + "triangles": [ 17, 18, 47, 0, 45, 46, 44, 45, 0, 8, 9, 10, 1, 44, 0, 8, 10, 11, 30, 43, 44, 29, 30, 44, 31, 42, 43, 1, 29, 44, 30, 31, 43, 4, 5, 6, 49, 8, 11, 48, 49, 11, 28, 29, 1, 32, 42, 31, 41, 42, 32, 53, 28, 1, 12, 48, 11, 49, 50, 7, 49, 7, 8, 6, 7, 50, 20, 49, 48, 50, 49, 20, 52, 3, 4, 6, 50, 51, 21, 50, 20, 18, 19, 20, 48, 18, 20, 48, 47, 18, 21, 22, 50, 32, 40, 41, 33, 40, 32, 47, 48, 12, 22, 51, 50, 4, 6, 51, 52, 4, 51, 47, 13, 14, 53, 27, 28, 1, 2, 3, 53, 1, 3, 37, 34, 35, 37, 35, 36, 16, 47, 14, 17, 47, 16, 23, 51, 22, 39, 40, 33, 39, 33, 34, 38, 39, 34, 53, 52, 27, 52, 53, 3, 25, 26, 52, 26, 27, 52, 37, 38, 34, 51, 25, 52, 24, 25, 51, 23, 24, 51, 47, 12, 13, 15, 16, 14 ], + "vertices": [ 1, 34, 281.61, 81.74, 1, 1, 34, 213.35, 84.72, 1, 1, 34, 211.41, 78.74, 1, 2, 34, 184.08, 81.47, 0.99749, 74, -201.91, 110.55, 0.00251, 1, 34, 165.27, 73.64, 1, 1, 34, 171.82, 61.6, 1, 2, 34, 152.01, 55.86, 0.99978, 74, -160.92, 112.71, 2.2E-4, 2, 34, 152.05, 10.45, 0.99, 74, -134.51, 149.65, 0.01, 2, 34, 127.93, -16.63, 0.98888, 74, -99.14, 157.63, 0.01112, 2, 34, 142.65, -24.37, 0.97775, 74, -106.6, 172.5, 0.02225, 2, 34, 131.57, -29.57, 0.9788, 74, -94.56, 170.26, 0.0212, 2, 34, 75.83, -37.63, 0.97359, 74, -44.55, 144.38, 0.02641, 2, 34, 32.94, -20.65, 0.93, 74, -19.57, 105.6, 0.07, 2, 34, 26.9, -27.43, 0.9, 74, -10.71, 107.6, 0.1, 2, 34, -9.24, -14.28, 0.86, 74, 11.02, 75.86, 0.14, 2, 34, -21.6, -0.12, 0.78, 74, 12.83, 57.16, 0.22, 2, 34, -9.42, 9.08, 0.84, 74, -2.43, 56.76, 0.16, 2, 34, 14.03, 16.44, 0.88122, 74, -25.78, 64.43, 0.11878, 2, 34, 37.64, 11.23, 0.93, 74, -41.95, 82.41, 0.07, 2, 34, 50.35, 21.92, 0.94, 74, -58.5, 81.12, 0.06, 2, 34, 63.22, 18.84, 0.95957, 74, -67.18, 91.12, 0.04043, 2, 34, 80.71, 41.03, 0.99714, 74, -94.31, 83.25, 0.00286, 1, 34, 78.21, 49.9, 1, 1, 34, 67.2, 82.69, 1, 1, 34, 83.22, 114.91, 1, 1, 34, 98.88, 129.38, 1, 1, 34, 133.2, 148.49, 1, 1, 34, 164.96, 147.54, 1, 1, 34, 223.55, 135.17, 1, 1, 34, 234.17, 129.11, 1, 1, 34, 260.7, 144.13, 1, 1, 34, 268.68, 164.73, 1, 1, 34, 265.91, 184.53, 1, 1, 34, 248.48, 207.72, 1, 1, 34, 232.86, 206.82, 1, 1, 34, 215.06, 172.46, 1, 1, 34, 211.59, 170.1, 1, 1, 34, 213.1, 207.18, 1, 1, 34, 219.05, 231.06, 1, 1, 34, 233.36, 238.02, 1, 1, 34, 265.01, 223.8, 1, 1, 34, 290.33, 196.4, 1, 1, 34, 298.06, 178.29, 1, 1, 34, 302.4, 135.6, 1, 1, 34, 275.09, 94.31, 1, 1, 34, 284.66, 88.97, 1, 1, 34, 286.01, 85.81, 1, 2, 34, 13.6, -3.66, 0.93, 74, -13.73, 80.52, 0.07, 1, 34, 68.37, -13.1, 1, 2, 34, 90.48, 5.75, 0.995, 74, -81.72, 117.62, 0.005, 2, 34, 89.43, 30.76, 0.995, 74, -95.42, 96.68, 0.005, 1, 34, 113.96, 91.09, 1, 1, 34, 151.78, 103.55, 1, 1, 34, 190.72, 116, 1 ], + "hull": 47, + "edges": [ 0, 92, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 30, 32, 32, 34, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 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, 28, 30, 16, 18, 34, 36, 58, 60, 96, 94, 96, 98, 98, 100 ], + "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": [ 15, 14, 0, 1, 23, 0, 12, 13, 15, 15, 13, 14, 8, 18, 7, 7, 18, 6, 18, 5, 6, 8, 19, 18, 17, 21, 16, 23, 15, 0, 24, 15, 23, 21, 20, 16, 21, 22, 20, 21, 24, 22, 24, 23, 22, 2, 22, 23, 20, 22, 3, 22, 2, 3, 2, 23, 1, 11, 24, 21, 4, 16, 20, 16, 4, 18, 17, 16, 19, 19, 16, 18, 18, 4, 5, 4, 20, 3, 9, 10, 17, 8, 9, 19, 9, 17, 19, 10, 21, 17, 10, 11, 21, 11, 12, 24, 12, 15, 24 ], + "vertices": [ 2, 54, 28.47, 75.44, 0.40489, 74, -91.22, 43.02, 0.59511, 2, 54, 66.98, 65.83, 0.54061, 74, -64.96, 13.27, 0.45939, 2, 54, 98.09, 68.86, 0.67457, 74, -37.62, -1.88, 0.32543, 2, 54, 132.32, 71.81, 0.77891, 74, -7.76, -18.87, 0.22109, 2, 54, 163.31, 76.98, 0.78694, 74, 20.7, -32.2, 0.21306, 2, 54, 190.52, 90.03, 0.78631, 74, 50.51, -36.88, 0.21369, 2, 54, 210.32, 100.44, 0.86507, 74, 72.72, -39.54, 0.13493, 1, 54, 238.9, 67.81, 1, 2, 54, 234.83, 1.64, 0.98898, 74, 36.86, -134.8, 0.01102, 2, 54, 173.67, -58.3, 0.98603, 74, -47.5, -149.48, 0.01397, 1, 54, 125.49, -79.1, 1, 2, 54, 87.8, -40.51, 0.77481, 74, -108.13, -86.11, 0.22519, 3, 54, -5.59, -78.2, 0.30353, 8, -21.32, -18.84, 0.63716, 74, -202.55, -73.18, 0.05931, 2, 8, 106.45, -6.22, 0.98571, 74, -224.49, 48.7, 0.01429, 2, 8, 95.42, -85.63, 0.62475, 74, -144.43, 44.69, 0.37525, 2, 54, 24.89, 6.25, 0.63522, 74, -133.42, -11.92, 0.36478, 2, 54, 177.48, 5.6, 0.7446, 74, -8.12, -99.01, 0.2554, 2, 54, 160.25, -36.54, 0.86286, 74, -46.21, -123.95, 0.13714, 2, 54, 216.48, 51.69, 0.84606, 74, 50.14, -83.17, 0.15394, 2, 54, 213.42, 2.58, 0.92571, 74, 19.76, -121.89, 0.07429, 2, 54, 138.62, 31.33, 0.63037, 74, -25.53, -55.78, 0.36963, 2, 54, 124.75, -11.2, 0.73167, 74, -61.07, -82.94, 0.26833, 2, 54, 102.54, 22.8, 0.5705, 74, -60.08, -42.34, 0.4295, 2, 54, 61.9, 25.79, 0.54075, 74, -91.85, -16.83, 0.45925, 2, 54, 86.18, -5.32, 0.63768, 74, -89.5, -56.22, 0.36232 ], + "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": [ 13, 11, 12, 10, 11, 13, 13, 12, 0, 13, 0, 1, 9, 13, 1, 9, 1, 2, 10, 13, 9, 14, 9, 2, 14, 2, 3, 5, 3, 4, 14, 3, 5, 15, 9, 14, 8, 9, 15, 7, 8, 15, 6, 14, 5, 15, 14, 6, 7, 15, 6 ], + "vertices": [ 2, 54, 28.9, 96.24, 0.84, 74, -73.48, 56.29, 0.16, 2, 54, 65.84, 86.82, 0.84002, 74, -48.4, 27.58, 0.15998, 2, 54, 125.41, 92.66, 0.88641, 74, 3.97, -1.4, 0.11359, 2, 54, 151.38, 98.09, 0.83356, 74, 28.44, -11.66, 0.16644, 2, 54, 191.91, 121, 0.85174, 74, 74.81, -15.78, 0.14826, 2, 54, 227.3, 89.29, 0.83919, 74, 85.97, -61.97, 0.16081, 2, 54, 223.4, 25.16, 0.94641, 74, 46.37, -112.58, 0.05359, 2, 54, 176.27, -33.76, 0.77848, 74, -25.86, -134.36, 0.22152, 2, 54, 132.75, -53.77, 0.70055, 74, -73.05, -126.15, 0.29945, 2, 54, 94.17, -16.26, 0.68436, 74, -83.54, -73.38, 0.31564, 3, 54, 19.52, -38.44, 0.28887, 8, -3.76, -62.46, 0.60639, 74, -154.63, -56.39, 0.10474, 1, 8, 98.59, -46.15, 1, 2, 8, 110.02, -102.65, 0.84736, 74, -123.17, 57.1, 0.15264, 2, 54, 31.25, 29.22, 0.82334, 74, -109.57, -0.23, 0.17666, 2, 54, 171.54, 28.72, 0.86269, 74, 5.69, -80.23, 0.13731, 2, 54, 161.87, -12.64, 0.71096, 74, -25.74, -108.8, 0.28904 ], + "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": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 54, 275.87, 107.8, 1, 2, 54, 235.58, 46.93, 0.94857, 74, -85.57, -171.76, 0.05143, 2, 54, 155.53, 99.92, 0.94, 74, -56.06, -80.4, 0.06, 1, 54, 195.82, 160.79, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "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 } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "gun-grab": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "front-open-hand" }, + { "time": 0.2333, "name": "gun" } + ] + }, + "gun": { + "attachment": [ + { "time": 0.2333 } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 12.34 ] + }, + { + "time": 0.1333, + "value": 12.34, + "curve": [ 0.158, 12.34, 0.208, -89.55 ] + }, + { + "time": 0.2333, + "value": -89.55, + "curve": [ 0.269, -89.03, 0.299, -89.03 ] + }, + { + "time": 0.3333, + "value": -79.79, + "curve": [ 0.397, -62.87, 0.583, -10.18 ] + }, + { "time": 0.6667, "value": -10.18 } + ], + "scale": [ + { + "curve": [ 0.058, 1, 0.175, 0.938, 0.058, 1, 0.175, 0.938 ] + }, + { + "time": 0.2333, + "x": 0.938, + "y": 0.938, + "curve": [ 0.342, 0.938, 0.558, 1, 0.342, 0.938, 0.558, 1 ] + }, + { "time": 0.6667 } + ] + }, + "front-arm": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.082, -21.08 ] + }, + { + "time": 0.1, + "value": -32, + "curve": [ 0.15, -62.93, 0.213, -120.29 ] + }, + { + "time": 0.2333, + "value": -136.89, + "curve": [ 0.29, -183.72, 0.308, -204.81 ] + }, + { + "time": 0.3333, + "value": -204.81, + "curve": [ 0.383, -204.81, 0.479, -143.9 ] + }, + { + "time": 0.5333, + "value": -113.86, + "curve": [ 0.563, -97.44, 0.633, -56.75 ] + }, + { "time": 0.6667, "value": -56.75 } + ], + "translate": [ + { + "curve": [ 0.058, 0, 0.173, 4.7, 0.058, 0, 0.175, -2.66 ] + }, + { + "time": 0.2333, + "x": 5.85, + "y": -2.66, + "curve": [ 0.258, 6.3, 0.308, 6.84, 0.258, -2.66, 0.308, 4.8 ] + }, + { + "time": 0.3333, + "x": 6.84, + "y": 4.8, + "curve": [ 0.417, 6.84, 0.583, 0, 0.417, 4.8, 0.583, 0 ] + }, + { "time": 0.6667 } + ] + }, + "front-bracer": { + "rotate": [ + { + "curve": [ 0.058, 0, 0.218, 76.7 ] + }, + { + "time": 0.2333, + "value": 86.02, + "curve": [ 0.267, 106.51, 0.317, 114.95 ] + }, + { + "time": 0.3333, + "value": 114.95, + "curve": [ 0.383, 114.95, 0.515, 89.58 ] + }, + { + "time": 0.5333, + "value": 81.86, + "curve": [ 0.574, 64.66, 0.633, 34.74 ] + }, + { "time": 0.6667, "value": 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": [ + {}, + { "time": 0.3, "name": "gun-nohand" } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { + "value": -10.18, + "curve": [ 0.042, -10.18, 0.132, -79.17 ] + }, + { + "time": 0.1667, + "value": -84.76, + "curve": [ 0.204, -90.76, 0.267, -89.52 ] + }, + { + "time": 0.3, + "value": -89.52, + "curve": [ 0.342, -89.52, 0.411, -56.54 ] + }, + { + "time": 0.4667, + "value": -35.36, + "curve": [ 0.507, -19.8, 0.617, 0.18 ] + }, + { "time": 0.6667, "value": 0.18 } + ], + "translate": [ + { + "curve": [ 0.017, 0, 0.05, -1.82, 0.017, 0, 0.05, 0.11 ] + }, + { "time": 0.0667, "x": -1.82, "y": 0.11 } + ], + "scale": [ + { + "curve": [ 0.075, 1, 0.225, 0.888, 0.075, 1, 0.225, 0.888 ] + }, + { "time": 0.3, "x": 0.888, "y": 0.888 } + ] + }, + "front-arm": { + "rotate": [ + { + "value": -56.75, + "curve": [ 0.042, -56.75, 0.104, -197.53 ] + }, + { + "time": 0.1667, + "value": -197.88, + "curve": [ 0.23, -198.59, 0.267, -143.09 ] + }, + { + "time": 0.3, + "value": -143.09, + "curve": [ 0.342, -143.09, 0.425, -159.79 ] + }, + { + "time": 0.4667, + "value": -159.79, + "curve": [ 0.517, -159.79, 0.617, -25.24 ] + }, + { "time": 0.6667, "value": -25.24 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 34.74, + "curve": [ 0.042, 34.74, 0.138, 83.37 ] + }, + { + "time": 0.1667, + "value": 90.01, + "curve": [ 0.195, 96.76, 0.369, 112.84 ] + }, + { + "time": 0.4, + "value": 114.44, + "curve": [ 0.422, 115.57, 0.45, 116.1 ] + }, + { "time": 0.4667, "value": 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, + "curve": [ 0.325, 0, 0.393, -4.59 ] + }, + { + "time": 0.4, + "value": -6.98, + "curve": [ 0.421, -14.42, 0.45, -69.67 ] + }, + { + "time": 0.4667, + "value": -69.67, + "curve": [ 0.483, -69.67, 0.509, -21.2 ] + }, + { + "time": 0.5333, + "value": -12.81, + "curve": [ 0.562, -2.84, 0.633, 5.74 ] + }, + { + "time": 0.6667, + "value": 5.74, + "curve": [ 0.742, 5.74, 0.892, 0 ] + }, + { "time": 0.9667 } + ], + "translate": [ + { + "x": -90.53, + "y": 47.55, + "curve": [ 0.015, -146.88, 0.075, -246.15, 0.036, 37.03, 0.075, 33.45 ] + }, + { + "time": 0.1, + "x": -246.15, + "y": 33.45, + "curve": [ 0.15, -246.15, 0.375, -246.15, 0.15, 33.45, 0.349, 33.63 ] + }, + { + "time": 0.4, + "x": -246.15, + "y": 33.45, + "curve": [ 0.413, -243.99, 0.447, -223.12, 0.413, 35.27, 0.46, 361.9 ] + }, + { + "time": 0.4667, + "x": -179.6, + "y": 397.56, + "curve": [ 0.484, -140.35, 0.517, 16.95, 0.477, 456.62, 0.496, 549.31 ] + }, + { + "time": 0.5333, + "x": 73.03, + "y": 636.97, + "curve": [ 0.557, 157.46, 0.606, 251.39, 0.56, 699.46, 0.633, 735.98 ] + }, + { + "time": 0.6667, + "x": 251.39, + "y": 737.16, + "curve": [ 0.796, 249.04, 0.947, 141, 0.81, 742.2, 0.947, 234.23 ] + }, + { "time": 0.9667, "x": 95.94, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { + "value": -4.48, + "curve": [ 0.049, -9.72, 0.1, -13.95 ] + }, + { + "time": 0.1333, + "value": -13.95, + "curve": [ 0.2, -13.95, 0.361, 5.8 ] + }, + { + "time": 0.4, + "value": 12.46, + "curve": [ 0.438, 19.02, 0.513, 31.53 ] + }, + { + "time": 0.6667, + "value": 31.43, + "curve": [ 0.821, 31.91, 0.951, 2.18 ] + }, + { + "time": 0.9667, + "value": -4.26, + "curve": [ 0.982, -10.63, 1.013, -18.69 ] + }, + { + "time": 1.0667, + "value": -18.59, + "curve": [ 1.108, -18.52, 1.292, 3.45 ] + }, + { + "time": 1.3333, + "value": 3.45, + "curve": [ 1.367, 3.45, 1.445, 2.35 ] + }, + { "time": 1.5333, "value": -4.48 } + ], + "translate": [ + { + "x": -47.56, + "y": 48.49, + "curve": [ 0.043, -69.43, 0.1, -79.91, 0.033, 48.49, 0.111, -39.5 ] + }, + { + "time": 0.1333, + "x": -79.91, + "y": -55.85, + "curve": [ 0.166, -79.91, 0.225, -76.38, 0.162, -76.85, 0.217, -91.17 ] + }, + { + "time": 0.2667, + "x": -52.47, + "y": -92.76, + "curve": [ 0.312, -26.39, 0.38, 56.36, 0.317, -94.39, 0.359, -58.96 ] + }, + { + "time": 0.4, + "x": 82.2, + "y": 39.51, + "curve": [ 0.426, 116.54, 0.532, 203.27, 0.43, 112.89, 0.475, 649.69 ] + }, + { + "time": 0.6667, + "x": 205.52, + "y": 649.79, + "curve": [ 0.775, 207.34, 0.857, 58.95, 0.879, 646.83, 0.926, 440.06 ] + }, + { + "time": 0.9667, + "x": 59.67, + "y": 161.1, + "curve": [ 1.026, 60.06, 1.041, 72.9, 0.982, 53.87, 1.004, -91.4 ] + }, + { + "time": 1.0667, + "x": 91.3, + "y": -91.6, + "curve": [ 1.083, 103.05, 1.246, 238.62, 1.207, -92.04, 1.234, 76.13 ] + }, + { + "time": 1.3333, + "x": 238.12, + "y": 75.68, + "curve": [ 1.408, 237.69, 1.5, 213.2, 1.41, 75.33, 1.497, 49.77 ] + }, + { "time": 1.5333, "x": 213.2, "y": 49.77 } + ] + }, + "back-foot-target": { + "rotate": [ + { + "time": 0.3, + "curve": [ 0.325, 0, 0.386, -31.84 ] + }, + { + "time": 0.4, + "value": -41.64, + "curve": [ 0.42, -55.3, 0.458, -86.03 ] + }, + { + "time": 0.4667, + "value": -86.03, + "curve": [ 0.475, -86.03, 0.515, -62.63 ] + }, + { + "time": 0.5333, + "value": -57.97, + "curve": [ 0.645, -29.13, 1.025, -7.79 ] + }, + { "time": 1.0333, "value": -7.79 } + ], + "translate": [ + { "x": 99.37, "curve": "stepped" }, + { + "time": 0.3, + "x": 99.37, + "curve": [ 0.352, 97.71, 0.349, 85.15, 0.4, 0, 0.3, 0 ] + }, + { + "time": 0.4, + "x": 83.35, + "curve": [ 0.412, 83.24, 0.424, 87.02, 0.411, 0.2, 0.415, -7.91 ] + }, + { + "time": 0.4333, + "x": 92.07, + "y": -9.73, + "curve": [ 0.451, 100.78, 0.463, 124.21, 0.449, 27.5, 0.462, 103.35 ] + }, + { + "time": 0.4667, + "x": 132.33, + "y": 119.67, + "curve": [ 0.476, 153.34, 0.517, 239.65, 0.476, 151.52, 0.518, 382.69 ] + }, + { + "time": 0.5333, + "x": 267.51, + "y": 435.87, + "curve": [ 0.553, 302.61, 0.632, 352.21, 0.557, 517.14, 0.645, 683.92 ] + }, + { + "time": 0.6667, + "x": 352.52, + "y": 702.46, + "curve": [ 0.747, 353.24, 0.797, 342.85, 0.745, 768.64, 0.789, 768.68 ] + }, + { + "time": 0.8333, + "x": 322.4, + "y": 717.67, + "curve": [ 0.866, 303.67, 0.932, 224.25, 0.865, 681.89, 0.936, 422.05 ] + }, + { + "time": 0.9667, + "x": 220.5, + "y": 293.73, + "curve": [ 0.989, 218.13, 1.009, 314.6, 0.987, 209.37, 1.024, 79.62 ] + }, + { "time": 1.0333, "x": 318.98 } + ] + }, + "front-leg-target": { + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -33.09, 0.025, 0, 0.075, -31.34 ] + }, + { + "time": 0.1, + "x": -33.09, + "y": -31.34, + "curve": [ 0.175, -33.09, 0.325, 140.91, 0.175, -31.34, 0.325, 51.55 ] + }, + { + "time": 0.4, + "x": 140.91, + "y": 51.55, + "curve": [ 0.434, 140.58, 0.421, 10.15, 0.435, 50.46, 0.45, 16 ] + }, + { + "time": 0.4667, + "x": -11.12, + "y": 4.78, + "curve": [ 0.501, -25.03, 0.586, -45.12, 0.511, -24.72, 0.56, -38.69 ] + }, + { + "time": 0.6667, + "x": -46.38, + "y": -40.57, + "curve": [ 0.74, -46.38, 0.923, -1.75, 0.74, -40.57, 0.896, 22.3 ] + }, + { + "time": 0.9667, + "x": -1.72, + "y": 20.96, + "curve": [ 0.993, -1.71, 0.993, -37.51, 0.995, 20.41, 0.954, -37.81 ] + }, + { + "time": 1.1, + "x": -38.27, + "y": -35.93, + "curve": [ 1.181, -38.85, 1.252, 44.94, 1.184, -34.84, 1.252, 5.48 ] + }, + { + "time": 1.3333, + "x": 44.94, + "y": 5.48, + "curve": [ 1.383, 44.94, 1.452, 0, 1.383, 5.48, 1.452, 0 ] + }, + { "time": 1.5333 } + ] + }, + "back-leg-target": { + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -35.37, 0.025, 0, 0.075, -16.42 ] + }, + { + "time": 0.1, + "x": -35.37, + "y": -16.42, + "curve": [ 0.141, -35.37, 0.205, -14.12, 0.141, -16.42, 0.214, 4.84 ] + }, + { + "time": 0.2667, + "x": -4.49, + "y": 4.24, + "curve": [ 0.317, 3.38, 0.366, 12.04, 0.319, 3.65, 0.375, -33.42 ] + }, + { + "time": 0.4, + "x": 12.04, + "y": -42.73, + "curve": [ 0.417, 12.04, 0.45, -46.17, 0.413, -47.43, 0.454, -76.29 ] + }, + { + "time": 0.4667, + "x": -46.17, + "y": -81.12, + "curve": [ 0.475, -46.17, 0.525, -38.36, 0.499, -93.24, 0.525, -96.11 ] + }, + { + "time": 0.5333, + "x": -38.36, + "y": -96.11, + "curve": [ 0.567, -38.36, 0.633, -55.58, 0.567, -96.11, 0.643, -67.83 ] + }, + { + "time": 0.6667, + "x": -55.58, + "y": -63.06, + "curve": [ 0.75, -55.58, 0.907, -56.88, 0.736, -49.33, 0.921, -52.06 ] + }, + { + "time": 1, + "x": -43, + "y": -42.05, + "curve": [ 1.076, -31.56, 1.101, -19.95, 1.084, -31.37, 1.125, -4.64 ] + }, + { + "time": 1.1333, + "x": -12.99, + "y": -3.97, + "curve": [ 1.198, 0.98, 1.233, 0, 1.173, -0.72, 1.233, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail1": { + "rotate": [ + { + "curve": [ 0.033, -0.73, 0.182, -1.37 ] + }, + { + "time": 0.2333, + "value": -0.68, + "curve": [ 0.324, 0.55, 0.378, 4.7 ] + }, + { + "time": 0.4, + "value": 6.15, + "curve": [ 0.449, 9.36, 0.523, 12.03 ] + }, + { + "time": 0.5667, + "value": 12.05, + "curve": [ 0.704, 12.09, 0.764, -9.79 ] + }, + { + "time": 0.9333, + "value": -9.74, + "curve": [ 0.984, -9.73, 1.054, -9.25 ] + }, + { + "time": 1.1, + "value": -7.09, + "curve": [ 1.173, -3.67, 1.279, 7.71 ] + }, + { + "time": 1.3333, + "value": 7.67, + "curve": [ 1.407, 7.63, 1.491, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail3": { + "rotate": [ + { + "curve": [ 0.143, -0.06, 0.212, -21.95 ] + }, + { + "time": 0.2333, + "value": -24.08, + "curve": [ 0.258, -26.54, 0.283, -26.63 ] + }, + { + "time": 0.3, + "value": -26.63, + "curve": [ 0.325, -26.63, 0.365, -22.41 ] + }, + { + "time": 0.4, + "value": -17.42, + "curve": [ 0.463, -8.36, 0.658, 0.68 ] + }, + { + "time": 0.7667, + "value": 0.99, + "curve": [ 0.839, 1.2, 0.911, -6.88 ] + }, + { + "time": 0.9333, + "value": -7.95, + "curve": [ 0.999, -11.08, 1.101, -12.03 ] + }, + { + "time": 1.1667, + "value": -11.94, + "curve": [ 1.233, -11.85, 1.317, -8.44 ] + }, + { + "time": 1.3333, + "value": -7.62, + "curve": [ 1.4, -4.31, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.076, 2.18, 0.15, 3.87 ] + }, + { + "time": 0.2, + "value": 3.87, + "curve": [ 0.25, 3.87, 0.317, -14.55 ] + }, + { + "time": 0.3667, + "value": -14.55, + "curve": [ 0.433, -14.55, 0.549, -7.29 ] + }, + { + "time": 0.6667, + "value": -0.64, + "curve": [ 0.725, 2.66, 0.883, 10.9 ] + }, + { + "time": 0.9667, + "value": 10.9, + "curve": [ 1.095, 10.9, 1.185, -6.18 ] + }, + { + "time": 1.2667, + "value": -6.04, + "curve": [ 1.38, -5.86, 1.471, -2.78 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.105, 6.29, 0.05, 0, 0.15, -22.92 ] + }, + { + "time": 0.2, + "x": 9.67, + "y": -22.92, + "curve": [ 0.417, 17.38, 0.775, 24.08, 0.392, -22.92, 0.806, 3.87 ] + }, + { + "time": 0.9667, + "x": 24.08, + "y": 4.46, + "curve": [ 1.012, 24.08, 1.071, 23.76, 1.022, 4.66, 1.077, -8.33 ] + }, + { + "time": 1.1333, + "x": 20.46, + "y": -8.46, + "curve": [ 1.221, 16.02, 1.317, 10.46, 1.21, -8.64, 1.352, 2.35 ] + }, + { + "time": 1.4, + "x": 5.93, + "y": 2.27, + "curve": [ 1.451, 3.19, 1.497, 0, 1.468, 2.16, 1.494, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm1": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.2, 51.21 ] + }, + { + "time": 0.2667, + "value": 51.21, + "curve": [ 0.325, 51.21, 0.442, -38.7 ] + }, + { + "time": 0.5, + "value": -38.7, + "curve": [ 0.567, -38.7, 0.706, 24.96 ] + }, + { + "time": 0.7667, + "value": 38.01, + "curve": [ 0.854, 56.01, 0.911, 62.19 ] + }, + { + "time": 1, + "value": 62.19, + "curve": [ 1.084, 62.19, 1.192, -14.43 ] + }, + { + "time": 1.2333, + "value": -14.43, + "curve": [ 1.292, -14.43, 1.408, 0 ] + }, + { "time": 1.4667 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.053, 0, 0.169, -1.43 ] + }, + { + "time": 0.2, + "value": -2.08, + "curve": [ 0.272, -3.58, 0.329, -4.44 ] + }, + { + "time": 0.4, + "value": -4.48, + "curve": [ 0.473, -4.51, 0.616, -2.46 ] + }, + { + "time": 0.6667, + "value": -1.01, + "curve": [ 0.728, 0.75, 0.881, 5.85 ] + }, + { + "time": 0.9667, + "value": 5.85, + "curve": [ 1.04, 5.86, 1.17, -1.69 ] + }, + { + "time": 1.2667, + "value": -1.79, + "curve": [ 1.317, -1.84, 1.483, 0 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.042, -1.88, 0.137, -2.9, 0.058, 3.23, 0.133, 7.83 ] + }, + { + "time": 0.2, + "x": -2.93, + "y": 7.91, + "curve": [ 0.262, -2.97, 0.337, 1.35, 0.262, 7.98, 0.333, -17.63 ] + }, + { + "time": 0.4, + "x": 5.6, + "y": -17.63, + "curve": [ 0.501, 12.45, 0.612, 22.88, 0.467, -17.63, 0.619, -5.42 ] + }, + { + "time": 0.6667, + "x": 25.24, + "y": -2.9, + "curve": [ 0.752, 28.94, 0.851, 31.66, 0.775, 2.84, 0.883, 5.36 ] + }, + { + "time": 0.9667, + "x": 31.78, + "y": 5.36, + "curve": [ 1.083, 31.89, 1.209, 25.93, 1.068, 5.52, 1.169, -13.52 ] + }, + { + "time": 1.2667, + "x": 22.31, + "y": -13.24, + "curve": [ 1.338, 17.8, 1.432, 11.29, 1.345, -13.01, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "back-arm1": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 41.83 ] + }, + { + "time": 0.1333, + "value": 41.83, + "curve": [ 0.233, 41.83, 0.433, -19.76 ] + }, + { + "time": 0.5333, + "value": -19.76, + "curve": [ 0.617, -19.76, 0.813, 7.86 ] + }, + { + "time": 0.8667, + "value": 16.31, + "curve": [ 0.922, 25.06, 0.992, 39.62 ] + }, + { + "time": 1.0333, + "value": 39.62, + "curve": [ 1.067, 39.62, 1.134, 36.98 ] + }, + { + "time": 1.1667, + "value": 21.98, + "curve": [ 1.184, 13.73, 1.242, -14.43 ] + }, + { + "time": 1.2667, + "value": -14.43, + "curve": [ 1.317, -14.43, 1.417, 0 ] + }, + { "time": 1.4667 } + ] + }, + "spineboy-hip": { + "translate": [ + { + "curve": [ 0.033, 0, 0.071, 12.38, 0.033, 0, 0.099, 6.02 ] + }, + { + "time": 0.1333, + "x": 18.47, + "y": 5.61, + "curve": [ 0.183, 23.25, 0.285, 23.09, 0.199, 4.82, 0.308, -11.17 ] + }, + { + "time": 0.3333, + "x": 24.3, + "y": -23.55, + "curve": [ 0.439, 26.95, 0.553, 40.03, 0.394, -53.54, 0.573, -55.54 ] + }, + { + "time": 0.6667, + "x": 51.3, + "y": -55.2, + "curve": [ 0.741, 58.64, 0.905, 68.29, 0.853, -54.53, 0.939, -42.26 ] + }, + { + "time": 1, + "x": 67.68, + "y": -37.87, + "curve": [ 1.071, 67.22, 1.216, 14.12, 1.055, -33.92, 1.171, -3.34 ] + }, + { + "time": 1.2667, + "x": 10.39, + "y": -1.83, + "curve": [ 1.376, 2.35, 1.467, 0, 1.338, -0.69, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail5": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.077, 8.48 ] + }, + { + "time": 0.1333, + "value": 5.57, + "curve": [ 0.214, 1.41, 0.249, -14.58 ] + }, + { + "time": 0.3, + "value": -14.58, + "curve": [ 0.341, -14.52, 0.36, -12.87 ] + }, + { + "time": 0.4, + "value": -10.37, + "curve": [ 0.466, -6.22, 0.481, 6.11 ] + }, + { + "time": 0.7667, + "value": 11.47, + "curve": [ 0.831, 12.69, 0.857, 12.88 ] + }, + { + "time": 0.9333, + "value": 12.89, + "curve": [ 1.073, 12.92, 1.137, -5.02 ] + }, + { + "time": 1.1667, + "value": -10.52, + "curve": [ 1.189, -14.81, 1.242, -16.26 ] + }, + { + "time": 1.2667, + "value": -16.26, + "curve": [ 1.292, -16.26, 1.344, -10.57 ] + }, + { + "time": 1.3667, + "value": -7.39, + "curve": [ 1.387, -4.51, 1.468, -0.3 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 18.42 ] + }, + { + "time": 0.1333, + "value": 18.42, + "curve": [ 0.225, 18.42, 0.408, -58.26 ] + }, + { + "time": 0.5, + "value": -58.26, + "curve": [ 0.567, -58.26, 0.702, -38.97 ] + }, + { + "time": 0.7667, + "value": -16.61, + "curve": [ 0.821, 2.07, 0.967, 12.73 ] + }, + { + "time": 1.0667, + "value": 13.08, + "curve": [ 1.108, 13.23, 1.192, -56.15 ] + }, + { + "time": 1.2333, + "value": -56.15, + "curve": [ 1.292, -56.15, 1.356, -0.71 ] + }, + { "time": 1.4667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.1333, "value": 15.28 }, + { "time": 0.4, "value": -53.41 }, + { "time": 0.7667, "value": -63.35 }, + { "time": 1.0667, "value": -29.92 }, + { "time": 1.3, "value": 7.24 }, + { "time": 1.4, "value": -3.7 }, + { "time": 1.4667 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.035, -0.03, 0.069, 8.8 ] + }, + { + "time": 0.1, + "value": 9.41, + "curve": [ 0.141, 10.24, 0.189, 4.37 ] + }, + { + "time": 0.2, + "value": 3.23, + "curve": [ 0.224, 0.67, 0.369, -14.75 ] + }, + { + "time": 0.4, + "value": -19.24, + "curve": [ 0.441, -25.21, 0.498, -33.84 ] + }, + { + "time": 0.5333, + "value": -33.74, + "curve": [ 0.581, -33.61, 0.614, -28.7 ] + }, + { + "time": 0.6667, + "value": -28.63, + "curve": [ 0.73, -28.55, 0.809, -29.54 ] + }, + { + "time": 0.9, + "value": -29.94, + "curve": [ 0.948, -30.15, 0.967, -4.31 ] + }, + { + "time": 1, + "value": -3.74, + "curve": [ 1.032, -3.18, 1.04, -9.87 ] + }, + { + "time": 1.0667, + "value": -9.83, + "curve": [ 1.094, -9.79, 1.157, 0.42 ] + }, + { + "time": 1.2, + "value": 0.36, + "curve": [ 1.237, 0.31, 1.249, -5.16 ] + }, + { + "time": 1.2667, + "value": -5.16, + "curve": [ 1.292, -5.16, 1.351, 3.76 ] + }, + { + "time": 1.4, + "value": 3.9, + "curve": [ 1.44, 4.01, 1.509, 0 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, 1.7, 0.05, 0, 0.15, -35.74 ] + }, + { + "time": 0.2, + "x": 2.52, + "y": -35.74, + "curve": [ 0.264, 3.57, 0.342, 10.41, 0.258, -35.74, 0.342, -18.19 ] + }, + { + "time": 0.4, + "x": 10.41, + "y": -18.19, + "curve": [ 0.458, 10.41, 0.608, 26.32, 0.458, -18.19, 0.608, -20.79 ] + }, + { + "time": 0.6667, + "x": 26.32, + "y": -20.79, + "curve": [ 0.75, 26.32, 0.917, 19.04, 0.75, -20.79, 0.917, 1.7 ] + }, + { "time": 1, "x": 19.04, "y": 1.7 } + ], + "scale": [ + { + "curve": [ 0.05, 1, 0.15, 0.985, 0.05, 1, 0.15, 1.049 ] + }, + { + "time": 0.2, + "x": 0.985, + "y": 1.049, + "curve": [ 0.233, 0.985, 0.3, 1, 0.233, 1.049, 0.3, 1 ] + }, + { + "time": 0.3333, + "curve": [ 0.375, 1, 0.458, 1.066, 0.375, 1, 0.458, 0.945 ] + }, + { + "time": 0.5, + "x": 1.066, + "y": 0.945, + "curve": [ 0.603, 1.066, 0.7, 0.987, 0.639, 0.945, 0.817, 1.049 ] + }, + { + "time": 0.8667, + "x": 0.985, + "y": 1.049, + "curve": [ 0.878, 0.985, 0.958, 1.066, 0.917, 1.049, 0.958, 0.945 ] + }, + { + "time": 1, + "x": 1.066, + "y": 0.945, + "curve": [ 1.045, 1.065, 1.061, 0.986, 1.05, 0.944, 1.058, 1.048 ] + }, + { + "time": 1.1, + "x": 0.985, + "y": 1.049, + "curve": [ 1.189, 0.983, 1.363, 1, 1.119, 1.048, 1.363, 1 ] + }, + { "time": 1.5333 } + ] + }, + "back-arm2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.124, -25.32 ] + }, + { + "time": 0.1333, + "value": -28.29, + "curve": [ 0.178, -42.54, 0.408, -75.93 ] + }, + { + "time": 0.5, + "value": -75.93, + "curve": [ 0.567, -75.93, 0.722, -61.84 ] + }, + { + "time": 0.7667, + "value": -57.21, + "curve": [ 0.834, -50.18, 0.992, -38.17 ] + }, + { + "time": 1.0667, + "value": -38.17, + "curve": [ 1.108, -38.17, 1.177, -49.68 ] + }, + { + "time": 1.2667, + "value": -49.36, + "curve": [ 1.349, -49.07, 1.475, 0 ] + }, + { "time": 1.5333 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "value": -4.78, + "curve": [ 0.033, -4.78, 0.088, -8.83 ] + }, + { + "time": 0.1333, + "value": -13.36, + "curve": [ 0.179, -17.9, 0.242, -26.07 ] + }, + { + "time": 0.2667, + "value": -31.39, + "curve": [ 0.31, -40.56, 0.382, -52.73 ] + }, + { + "time": 0.4667, + "value": -52.79, + "curve": [ 0.574, -52.87, 0.615, -44.38 ] + }, + { + "time": 0.6667, + "value": -36.05, + "curve": [ 0.71, -29.14, 0.917, 9.18 ] + }, + { + "time": 1, + "value": 9.18, + "curve": [ 1.058, 9.18, 1.163, -29.03 ] + }, + { + "time": 1.2333, + "value": -29.37, + "curve": [ 1.275, -29.37, 1.377, -9.74 ] + }, + { + "time": 1.4, + "value": -7.98, + "curve": [ 1.443, -4.61, 1.517, -1.69 ] + }, + { "time": 1.5333, "value": -1.69 } + ] + }, + "tail7": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.049, 6.72, 0.193, 20.19 ] + }, + { + "time": 0.2333, + "value": 20.19, + "curve": [ 0.25, 20.19, 0.325, -13.06 ] + }, + { + "time": 0.4, + "value": -13.06, + "curve": [ 0.433, -13.06, 0.484, -9.84 ] + }, + { + "time": 0.5333, + "value": -5.93, + "curve": [ 0.586, -1.74, 0.822, 16.83 ] + }, + { + "time": 0.9333, + "value": 16.85, + "curve": [ 0.992, 16.86, 1.035, 12.25 ] + }, + { + "time": 1.0667, + "value": 7.16, + "curve": [ 1.129, -2.72, 1.166, -16.97 ] + }, + { + "time": 1.2, + "value": -16.51, + "curve": [ 1.273, -16.51, 1.319, -13.06 ] + }, + { + "time": 1.3667, + "value": -8.95, + "curve": [ 1.421, -4.2, 1.508, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-foot2": { + "rotate": [ + { + "time": 0.4, + "curve": [ 0.403, -10.05, 0.416, -43.77 ] + }, + { + "time": 0.4333, + "value": -53.55, + "curve": [ 0.469, -73.71, 0.522, -67.11 ] + }, + { + "time": 0.5333, + "value": -67.11, + "curve": [ 0.592, -68.53, 0.613, 20.61 ] + }, + { + "time": 0.9333, + "value": 24.85, + "curve": [ 0.958, 24.85, 0.989, 20.15 ] + }, + { "time": 1 } + ] + }, + "front-hand": { + "rotate": [ + { + "curve": [ 0.076, 0, 0.185, -8.93 ] + }, + { + "time": 0.3, + "value": -8.94, + "curve": [ 0.333, -8.94, 0.372, 38.13 ] + }, + { + "time": 0.4333, + "value": 38.11, + "curve": [ 0.516, 38.08, 0.653, -22.01 ] + }, + { + "time": 0.6667, + "value": -27.75, + "curve": [ 0.693, -38.81, 0.75, -52.48 ] + }, + { + "time": 0.8, + "value": -52.38, + "curve": [ 0.896, -52.18, 1.052, 10.93 ] + }, + { + "time": 1.0667, + "value": 16.08, + "curve": [ 1.088, 23.55, 1.152, 45.76 ] + }, + { + "time": 1.2, + "value": 46.03, + "curve": [ 1.252, 46.32, 1.27, -12.74 ] + }, + { + "time": 1.3, + "value": -12.68, + "curve": [ 1.373, -12.53, 1.424, 0 ] + }, + { "time": 1.4667 } + ] + }, + "jaw": { + "rotate": [ + { "value": 0.83 }, + { "time": 0.1333, "value": 6.62 }, + { "time": 0.3333, "value": -3.98 }, + { + "time": 0.4667, + "value": -14.79, + "curve": [ 0.731, -14.76, 0.792, 3.22 ] + }, + { "time": 0.9, "value": 3.22 }, + { "time": 0.9333, "value": -3.14 }, + { "time": 1.0667, "value": 12.08 }, + { "time": 1.2333, "value": -8.41 }, + { "time": 1.5333, "value": 0.83 } + ], + "translate": [ + { + "x": -10.21, + "y": 13.96, + "curve": [ 0.041, -10.21, 0.086, -23.53, 0.041, 13.96, 0.086, -6.69 ] + }, + { + "time": 0.1333, + "x": -23.53, + "y": -6.69, + "curve": [ 0.233, -23.53, 0.347, -43.29, 0.233, -6.69, 0.347, 2.9 ] + }, + { + "time": 0.4667, + "x": -42.09, + "y": 4.75, + "curve": [ 0.607, -40.69, 0.757, -33.92, 0.607, 6.92, 0.757, -13.55 ] + }, + { + "time": 0.9, + "x": -28.39, + "y": -12.1, + "curve": [ 1.016, -24, 1.13, -30.31, 1.016, -10.94, 1.13, 3.19 ] + }, + { + "time": 1.2333, + "x": -26.95, + "y": 9.17, + "curve": [ 1.347, -23.32, 1.449, -10.21, 1.347, 15.64, 1.449, 13.96 ] + }, + { "time": 1.5333, "x": -10.21, "y": 13.96 } + ] + }, + "back-foot2": { + "rotate": [ + { + "time": 0.4333, + "curve": [ 0.442, 0, 0.454, -46.1 ] + }, + { + "time": 0.4667, + "value": -60.96, + "curve": [ 0.475, -70.47, 0.517, -76.49 ] + }, + { + "time": 0.5333, + "value": -76.49, + "curve": [ 0.567, -76.49, 0.643, -68.96 ] + }, + { + "time": 0.6667, + "value": -63.79, + "curve": [ 0.712, -53.71, 0.866, -1.7 ] + }, + { + "time": 0.9333, + "value": 16.34, + "curve": [ 0.944, 19.2, 0.983, 24.85 ] + }, + { + "time": 1, + "value": 24.85, + "curve": [ 1.017, 24.85, 1.067, 11.07 ] + }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + { + "curve": [ 0.046, 0, 0.017, 36.31 ] + }, + { + "time": 0.1667, + "value": 36.26, + "curve": [ 0.3, 36.22, 0.535, 24.33 ] + }, + { + "time": 0.6667, + "value": 24.22, + "curve": [ 0.769, 24.27, 0.907, 26.83 ] + }, + { + "time": 0.9667, + "value": 31.87, + "curve": [ 1.024, 36.68, 1.148, 55.22 ] + }, + { + "time": 1.2, + "value": 55.2, + "curve": [ 1.296, 55.16, 1.469, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail9": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.04, 6.72, 0.185, 21.12 ] + }, + { + "time": 0.2333, + "value": 21.25, + "curve": [ 0.27, 21.35, 0.284, 17.74 ] + }, + { + "time": 0.3, + "value": 14.56, + "curve": [ 0.322, 10.26, 0.375, -13.06 ] + }, + { + "time": 0.4, + "value": -13.06, + "curve": [ 0.433, -13.06, 0.51, -11.64 ] + }, + { + "time": 0.5333, + "value": -7.88, + "curve": [ 0.579, -0.37, 0.741, 21.14 ] + }, + { + "time": 0.7667, + "value": 23.25, + "curve": [ 0.819, 27.63, 0.865, 31.03 ] + }, + { + "time": 0.9333, + "value": 31.09, + "curve": [ 0.975, 31.12, 1.034, 24.27 ] + }, + { + "time": 1.0667, + "value": 16.48, + "curve": [ 1.121, 3.62, 1.146, -4.68 ] + }, + { + "time": 1.1667, + "value": -10.43, + "curve": [ 1.185, -15.54, 1.242, -22.43 ] + }, + { + "time": 1.2667, + "value": -22.43, + "curve": [ 1.292, -22.43, 1.338, -20.95 ] + }, + { + "time": 1.3667, + "value": -17.59, + "curve": [ 1.412, -12.34, 1.508, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-foot3": { + "rotate": [ + { + "time": 0.4, + "curve": [ 0.415, 0.16, 0.423, -3.39 ] + }, + { + "time": 0.4333, + "value": -8.31, + "curve": [ 0.438, -10.62, 0.486, -19.18 ] + }, + { + "time": 0.5333, + "value": -19.17, + "curve": [ 0.581, -19.16, 0.637, -15.86 ] + }, + { + "time": 0.6667, + "value": -13.75, + "curve": [ 0.743, -8.29, 0.858, 10.78 ] + }, + { + "time": 0.9333, + "value": 10.78, + "curve": [ 0.958, 10.78, 1.022, 10.58 ] + }, + { "time": 1.0333, "value": 0.34 } + ] + }, + "head2": { + "rotate": [ + { + "value": 18.08, + "curve": [ 0.033, 18.08, 0.108, 24.73 ] + }, + { + "time": 0.1333, + "value": 25.81, + "curve": [ 0.206, 28.87, 0.258, 29.66 ] + }, + { + "time": 0.3, + "value": 29.66, + "curve": [ 0.325, 29.66, 0.387, 27.38 ] + }, + { + "time": 0.4, + "value": 26.31, + "curve": [ 0.488, 19.31, 0.606, 9.53 ] + }, + { + "time": 0.6333, + "value": 7.4, + "curve": [ 0.681, 3.72, 0.761, -1.99 ] + }, + { + "time": 0.8333, + "value": -1.98, + "curve": [ 0.888, -1.97, 0.944, 1.29 ] + }, + { + "time": 0.9667, + "value": 3.21, + "curve": [ 1.005, 6.46, 1.019, 15.11 ] + }, + { + "time": 1.0667, + "value": 15.13, + "curve": [ 1.125, 15.15, 1.204, 13.96 ] + }, + { + "time": 1.2333, + "value": 12.87, + "curve": [ 1.271, 11.48, 1.275, 9.98 ] + }, + { + "time": 1.3333, + "value": 7.77, + "curve": [ 1.394, 5.46, 1.393, 5.9 ] + }, + { + "time": 1.4333, + "value": 5.86, + "curve": [ 1.481, 5.81, 1.517, 8.93 ] + }, + { "time": 1.5333, "value": 8.93 } + ], + "scale": [ + { + "time": 0.9, + "curve": [ 0.928, 1, 0.963, 1.056, 0.928, 1, 0.963, 0.978 ] + }, + { + "time": 1, + "x": 1.056, + "y": 0.978, + "curve": [ 1.052, 1.056, 1.11, 0.951, 1.052, 0.978, 1.11, 0.997 ] + }, + { + "time": 1.1667, + "x": 0.942, + "y": 1.001, + "curve": [ 1.267, 0.926, 1.367, 1, 1.267, 1.008, 1.367, 1 ] + }, + { "time": 1.4333 } + ] + }, + "neck2": { + "rotate": [ + { + "value": -0.77, + "curve": [ 0.033, -0.77, 0.1, 15.96 ] + }, + { + "time": 0.1333, + "value": 15.96, + "curve": [ 0.175, 15.96, 0.269, 11.97 ] + }, + { + "time": 0.3, + "value": 10.07, + "curve": [ 0.34, 7.56, 0.375, 4.11 ] + }, + { + "time": 0.4, + "value": 4.05, + "curve": [ 0.468, 3.91, 0.575, 8.43 ] + }, + { + "time": 0.6333, + "value": 8.48, + "curve": [ 0.73, 8.58, 0.883, -2.77 ] + }, + { + "time": 0.9667, + "value": -2.77, + "curve": [ 0.992, -2.77, 1.047, 3.79 ] + }, + { + "time": 1.0667, + "value": 5.45, + "curve": [ 1.094, 7.73, 1.192, 10.76 ] + }, + { + "time": 1.2333, + "value": 10.76, + "curve": [ 1.258, 10.76, 1.316, 7.65 ] + }, + { + "time": 1.3667, + "value": 7.6, + "curve": [ 1.417, 7.56, 1.5, 12.24 ] + }, + { "time": 1.5333, "value": 12.24 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "x": -0.43, "y": -9.01 }, + { "time": 0.5 }, + { "time": 0.9667, "x": -6.56, "y": 0.7 }, + { "time": 1.0667, "x": 12.25, "y": -29.51 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "value": -22.27 }, + { "time": 0.2667, "value": -16.91 }, + { "time": 0.4333, "value": -2.22 }, + { "time": 0.6667, "value": -6.95 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.3, "value": -13.39, "curve": "stepped" }, + { "time": 0.9667, "value": -13.39 }, + { "time": 1.3333 } + ] + }, + "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.4667 } + ] + }, + "tail2": { + "rotate": [ + { + "curve": [ 0.031, 0, 0.085, -0.3 ] + }, + { + "time": 0.1333, + "value": -0.88, + "curve": [ 0.22, -1.88, 0.255, -7.43 ] + }, + { + "time": 0.3, + "value": -7.43, + "curve": [ 0.325, -7.43, 0.366, -7.05 ] + }, + { + "time": 0.4, + "value": -5.89, + "curve": [ 0.434, -4.73, 0.506, 1.38 ] + }, + { + "time": 0.5333, + "value": 1.75, + "curve": [ 0.582, 2.41, 0.637, 3.11 ] + }, + { + "time": 0.7333, + "value": 3.14, + "curve": [ 0.814, 3.16, 0.903, 0.42 ] + }, + { + "time": 0.9333, + "value": -0.83, + "curve": [ 0.959, -1.87, 1.106, -7.13 ] + }, + { + "time": 1.1667, + "value": -7.07, + "curve": [ 1.206, -7.03, 1.308, 4.72 ] + }, + { + "time": 1.4, + "value": 4.89, + "curve": [ 1.452, 4.98, 1.501, -6.46 ] + }, + { "time": 1.5333, "value": -6.46 } + ] + }, + "tail4": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.072, 8.45 ] + }, + { + "time": 0.1333, + "value": 8.08, + "curve": [ 0.257, 7.33, 0.161, -3.27 ] + }, + { + "time": 0.3, + "value": -3.31, + "curve": [ 0.455, -3.35, 0.599, 7.47 ] + }, + { + "time": 0.7667, + "value": 11.95, + "curve": [ 0.804, 12.94, 0.861, 14.26 ] + }, + { + "time": 0.9333, + "value": 14.35, + "curve": [ 0.963, 14.39, 0.996, 14.41 ] + }, + { + "time": 1.0333, + "value": 6.04, + "curve": [ 1.072, -2.56, 1.116, -11.42 ] + }, + { + "time": 1.1667, + "value": -11.4, + "curve": [ 1.238, -11.4, 1.318, -6.95 ] + }, + { + "time": 1.3333, + "value": -5.65, + "curve": [ 1.364, -3.08, 1.508, 3.65 ] + }, + { "time": 1.5333, "value": 3.65 } + ] + }, + "tail6": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.017, 6.72, 0.079, 14.92 ] + }, + { + "time": 0.1333, + "value": 14.56, + "curve": [ 0.186, 14.23, 0.228, 8.64 ] + }, + { + "time": 0.2333, + "value": 6.59, + "curve": [ 0.245, 1.79, 0.303, -11.91 ] + }, + { + "time": 0.4, + "value": -11.91, + "curve": [ 0.474, -11.91, 0.702, 8.29 ] + }, + { + "time": 0.7667, + "value": 12.95, + "curve": [ 0.803, 15.57, 0.845, 18.42 ] + }, + { + "time": 0.9333, + "value": 18.64, + "curve": [ 1.043, 18.9, 1.08, -11.4 ] + }, + { + "time": 1.1667, + "value": -11.61, + "curve": [ 1.236, -11.44, 1.29, -10.99 ] + }, + { + "time": 1.3333, + "value": -8.88, + "curve": [ 1.423, -4.58, 1.472, 2.97 ] + }, + { "time": 1.5333, "value": 3.69 } + ] + }, + "tail8": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.179, 17.14 ] + }, + { + "time": 0.2333, + "value": 17.13, + "curve": [ 0.257, 17.2, 0.288, 11.35 ] + }, + { + "time": 0.3, + "value": 9.01, + "curve": [ 0.318, 5.47, 0.375, -14.47 ] + }, + { + "time": 0.4, + "value": -14.47, + "curve": [ 0.433, -14.47, 0.492, -12.37 ] + }, + { + "time": 0.5333, + "value": -9.76, + "curve": [ 0.575, -6.73, 0.732, 7.06 ] + }, + { + "time": 0.7667, + "value": 9.18, + "curve": [ 0.809, 11.79, 0.85, 14.28 ] + }, + { + "time": 0.9333, + "value": 14.4, + "curve": [ 0.98, 14.46, 1.027, 12.95 ] + }, + { + "time": 1.0667, + "value": 6.47, + "curve": [ 1.112, -0.74, 1.148, -13.08 ] + }, + { + "time": 1.1667, + "value": -14.91, + "curve": [ 1.215, -19.6, 1.259, -23.09 ] + }, + { + "time": 1.3, + "value": -23.17, + "curve": [ 1.376, -23.24, 1.508, -11.89 ] + }, + { "time": 1.5333, "value": -11.89 } + ] + }, + "tail10": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.038, 6.72, 0.199, 10.82 ] + }, + { + "time": 0.2333, + "value": 10.93, + "curve": [ 0.257, 11, 0.276, 11.07 ] + }, + { + "time": 0.3, + "value": 8.71, + "curve": [ 0.335, 5.33, 0.37, -8.93 ] + }, + { + "time": 0.4, + "value": -12.6, + "curve": [ 0.425, -15.68, 0.5, -18.92 ] + }, + { + "time": 0.5333, + "value": -18.92, + "curve": [ 0.549, -18.92, 0.651, 2.65 ] + }, + { + "time": 0.7, + "value": 9.59, + "curve": [ 0.725, 13.09, 0.791, 16.42 ] + }, + { + "time": 0.8333, + "value": 16.82, + "curve": [ 0.956, 17.98, 1.051, 10.26 ] + }, + { + "time": 1.0667, + "value": 7.38, + "curve": [ 1.098, 1.71, 1.13, -23.72 ] + }, + { + "time": 1.1667, + "value": -26.24, + "curve": [ 1.199, -28.46, 1.242, -29.22 ] + }, + { + "time": 1.2667, + "value": -29.22, + "curve": [ 1.292, -29.22, 1.353, -18.67 ] + }, + { + "time": 1.3667, + "value": -17.84, + "curve": [ 1.408, -15.28, 1.492, -11.19 ] + }, + { "time": 1.5333, "value": -11.19 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -13.92, + "curve": [ 0.119, -14.07, 0.185, -17.29 ] + }, + { + "time": 0.2667, + "value": -17.26, + "curve": [ 0.326, -17.24, 0.467, 1.36 ] + }, + { + "time": 0.5333, + "value": 1.36, + "curve": [ 0.583, 1.36, 0.686, 0.58 ] + }, + { + "time": 0.7333, + "value": -2.1, + "curve": [ 0.773, -4.34, 0.883, -27.93 ] + }, + { + "time": 0.9333, + "value": -27.93, + "curve": [ 1, -27.93, 1.128, -14.6 ] + }, + { + "time": 1.2, + "value": -13.79, + "curve": [ 1.305, -12.61, 1.352, -12.27 ] + }, + { + "time": 1.4333, + "value": -12.07, + "curve": [ 1.48, -11.96, 1.508, -14.43 ] + }, + { "time": 1.5333, "value": -14.43 } + ] + }, + "back-leg1": { + "translate": [ + {}, + { "time": 0.4667, "x": -12.67, "y": -22.45 }, + { "time": 0.9 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.317, 5.37 ] + }, + { + "time": 0.3333, + "value": 5.37, + "curve": [ 0.375, 5.37, 0.458, 17.56 ] + }, + { + "time": 0.5, + "value": 17.56, + "curve": [ 0.567, 17.56, 0.745, 7.05 ] + }, + { + "time": 0.7667, + "value": 5.59, + "curve": [ 0.792, 3.95, 0.944, -7.5 ] + }, + { + "time": 0.9667, + "value": -8.54, + "curve": [ 0.99, -9.6, 1.017, -10.01 ] + }, + { + "time": 1.0333, + "value": -10.01, + "curve": [ 1.067, -10.01, 1.152, 0.34 ] + }, + { + "time": 1.1667, + "value": 1.84, + "curve": [ 1.172, 2.4, 1.217, 5.06 ] + }, + { + "time": 1.2667, + "value": 5.88, + "curve": [ 1.28, 6.11, 1.317, 6.21 ] + }, + { + "time": 1.3333, + "value": 6.21, + "curve": [ 1.35, 6.21, 1.395, 1.51 ] + }, + { + "time": 1.4, + "value": 1.14, + "curve": [ 1.427, -0.79, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.324, 11.19 ] + }, + { + "time": 0.3333, + "value": 10.52, + "curve": [ 0.388, 6.71, 0.471, 1.06 ] + }, + { + "time": 0.5, + "value": -0.4, + "curve": [ 0.573, -4, 0.7, -7.16 ] + }, + { + "time": 0.7667, + "value": -7.16, + "curve": [ 0.817, -7.16, 0.917, -7.61 ] + }, + { + "time": 0.9667, + "value": -7.61, + "curve": [ 0.983, -7.61, 1.023, -5.42 ] + }, + { + "time": 1.0333, + "value": -4.76, + "curve": [ 1.088, -1.16, 1.133, 13.06 ] + }, + { + "time": 1.1667, + "value": 13.06, + "curve": [ 1.192, 13.06, 1.261, 3.4 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.285, -1.5, 1.317, -12.63 ] + }, + { + "time": 1.3333, + "value": -12.63, + "curve": [ 1.35, -12.63, 1.383, 16.65 ] + }, + { + "time": 1.4, + "value": 16.65, + "curve": [ 1.425, 16.65, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone5": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.321, 9.81 ] + }, + { + "time": 0.3333, + "value": 9.24, + "curve": [ 0.398, 6.26, 0.459, 4.3 ] + }, + { + "time": 0.5, + "value": 3.82, + "curve": [ 0.575, 2.94, 0.7, 1.96 ] + }, + { + "time": 0.7667, + "value": 1.96, + "curve": [ 0.817, 1.96, 0.91, -3.96 ] + }, + { + "time": 0.9667, + "value": -7.61, + "curve": [ 0.977, -8.28, 1.017, -10.01 ] + }, + { + "time": 1.0333, + "value": -10.01, + "curve": [ 1.067, -10.01, 1.133, 6.48 ] + }, + { + "time": 1.1667, + "value": 6.48, + "curve": [ 1.192, 6.48, 1.254, 3.31 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.294, -0.11, 1.317, -11.57 ] + }, + { + "time": 1.3333, + "value": -11.57, + "curve": [ 1.358, -11.57, 1.408, 5.16 ] + }, + { + "time": 1.4333, + "value": 5.16, + "curve": [ 1.458, 5.16, 1.508, -2.77 ] + }, + { "time": 1.5333, "value": -2.77 } + ] + }, + "bone": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.325, 10.28 ] + }, + { + "time": 0.3333, + "value": 9.74, + "curve": [ 0.388, 6.32, 0.46, 4.23 ] + }, + { + "time": 0.5, + "value": 3.82, + "curve": [ 0.562, 3.19, 0.7, 2.05 ] + }, + { + "time": 0.7667, + "value": 1.96, + "curve": [ 0.825, 1.88, 0.917, 4.62 ] + }, + { + "time": 0.9667, + "value": 4.62, + "curve": [ 0.983, 4.62, 1.023, 1.2 ] + }, + { + "time": 1.0333, + "value": 0.71, + "curve": [ 1.081, -1.59, 1.133, -2.71 ] + }, + { + "time": 1.1667, + "value": -2.71, + "curve": [ 1.192, -2.71, 1.246, -1.91 ] + }, + { + "time": 1.2667, + "value": -0.49, + "curve": [ 1.294, 1.34, 1.298, 3.19 ] + }, + { + "time": 1.3333, + "value": 5.49, + "curve": [ 1.342, 6.03, 1.383, 7.29 ] + }, + { + "time": 1.4, + "value": 7.29, + "curve": [ 1.425, 7.29, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.324, 10.89 ] + }, + { + "time": 0.3333, + "value": 10.09, + "curve": [ 0.392, 5.25, 0.471, -0.35 ] + }, + { + "time": 0.5, + "value": -2.13, + "curve": [ 0.562, -5.98, 0.7, -10.52 ] + }, + { + "time": 0.7667, + "value": -10.52, + "curve": [ 0.817, -10.52, 0.929, -8.78 ] + }, + { + "time": 0.9667, + "value": -6.83, + "curve": [ 0.998, -5.22, 1.027, -2.36 ] + }, + { + "time": 1.0333, + "value": -1.45, + "curve": [ 1.073, 4.26, 1.133, 18.91 ] + }, + { + "time": 1.1667, + "value": 18.91, + "curve": [ 1.192, 18.91, 1.26, 3.63 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.283, -1.14, 1.317, -7.27 ] + }, + { + "time": 1.3333, + "value": -7.27, + "curve": [ 1.35, -7.27, 1.383, 10.01 ] + }, + { + "time": 1.4, + "value": 10.01, + "curve": [ 1.425, 10.01, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.102, 0, 0.227, -26.08, 0.05, 0, 0.262, 97.74 ] + }, + { + "time": 0.4333, + "x": -26.1, + "y": 97.3, + "curve": [ 0.663, -26.12, 0.832, -16.98, 0.613, 96.83, 0.892, 22.95 ] + }, + { + "time": 0.9333, + "x": -14.02, + "y": 11.08, + "curve": [ 0.986, -12.5, 1.035, -10.47, 0.957, 4.24, 1.058, -31.97 ] + }, + { + "time": 1.1, + "x": -8.27, + "y": -31.97, + "curve": [ 1.163, -6.13, 1.265, -3.68, 1.158, -31.97, 1.275, 24.45 ] + }, + { + "time": 1.3333, + "x": -2.27, + "y": 24.45, + "curve": [ 1.447, 0.09, 1.483, 0, 1.383, 24.45, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "horn-front": { + "translate": [ + { + "curve": [ 0.108, 0, 0.325, -6.39, 0.108, 0, 0.325, 23.95 ] + }, + { + "time": 0.4333, + "x": -6.39, + "y": 23.95, + "curve": [ 0.558, -6.39, 0.808, 3.02, 0.558, 23.95, 0.808, -1.11 ] + }, + { + "time": 0.9333, + "x": 3.02, + "y": -1.11, + "curve": [ 0.975, 3.02, 1.058, 4.31, 0.975, -1.11, 1.058, -10.04 ] + }, + { + "time": 1.1, + "x": 4.31, + "y": -10.04, + "curve": [ 1.158, 4.31, 1.275, 3.72, 1.158, -10.04, 1.275, 6.17 ] + }, + { + "time": 1.3333, + "x": 3.72, + "y": 6.17, + "curve": [ 1.383, 3.72, 1.483, 0, 1.383, 6.17, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "horn-back": { + "translate": [ + { + "curve": [ 0.108, 0, 0.325, -3.27, 0.108, 0, 0.325, -12.12 ] + }, + { + "time": 0.4333, + "x": -3.27, + "y": -12.12, + "curve": [ 0.558, -3.27, 0.808, 0, 0.558, -12.12, 0.808, 0 ] + }, + { + "time": 0.9333, + "curve": [ 0.975, 0, 1.058, -2.83, 0.975, 0, 1.058, 17.37 ] + }, + { + "time": 1.1, + "x": -2.83, + "y": 17.37, + "curve": [ 1.158, -2.83, 1.275, 0.49, 1.158, 17.37, 1.275, 6.93 ] + }, + { + "time": 1.3333, + "x": 0.49, + "y": 6.93, + "curve": [ 1.383, 0.49, 1.483, 0, 1.383, 6.93, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "torso1": { + "rotate": [ + { + "curve": [ 0.118, 0.13, 0.135, 1.55 ] + }, + { + "time": 0.2, + "value": 3.04, + "curve": [ 0.243, 4.04, 0.325, 5.4 ] + }, + { + "time": 0.3667, + "value": 5.4, + "curve": [ 0.467, 5.4, 0.567, -16.54 ] + }, + { + "time": 0.6667, + "value": -16.54, + "curve": [ 0.804, -16.54, 0.878, 9.25 ] + }, + { + "time": 0.9667, + "value": 9.37, + "curve": [ 1.053, 9.48, 1.131, -2.06 ] + }, + { + "time": 1.2, + "value": -1.95, + "curve": [ 1.292, -1.8, 1.304, 2.68 ] + }, + { + "time": 1.3667, + "value": 2.86, + "curve": [ 1.429, 3.03, 1.472, -0.13 ] + }, + { "time": 1.5333 } + ] + }, + "saddle": { + "translate": [ + { "x": 19.28, "y": -10.71 } + ] + }, + "tongue1": { + "rotate": [ + { + "curve": [ 0.1, 0, 0.3, 9.37 ] + }, + { + "time": 0.4, + "value": 9.37, + "curve": [ 0.5, 9.37, 0.7, 17.48 ] + }, + { + "time": 0.8, + "value": 17.48, + "curve": [ 0.867, 17.48, 1, 22.44 ] + }, + { + "time": 1.0667, + "value": 22.44, + "curve": [ 1.117, 22.44, 1.217, -7.3 ] + }, + { + "time": 1.2667, + "value": -7.3, + "curve": [ 1.333, -7.3, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tongue2": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, -16.67 ] + }, + { + "time": 0.3333, + "value": -16.67, + "curve": [ 0.383, -16.67, 0.483, -20.4 ] + }, + { + "time": 0.5333, + "value": -20.4, + "curve": [ 0.592, -20.4, 0.708, -5.9 ] + }, + { "time": 0.7667, "value": -5.9 } + ] + }, + "tongue3": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, -16.67 ] + }, + { + "time": 0.3333, + "value": -16.67, + "curve": [ 0.383, -16.67, 0.483, -32.41 ] + }, + { + "time": 0.5333, + "value": -32.41, + "curve": [ 0.592, -32.41, 0.708, -4.64 ] + }, + { + "time": 0.7667, + "value": -4.64, + "curve": [ 0.817, -4.64, 0.917, 9.34 ] + }, + { "time": 0.9667, "value": 9.34 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "curve": [ 0.068, 0, 0.147, 0.59 ] + }, + { + "time": 0.2333, + "value": 0.26, + "curve": [ 0.286, 0.06, 0.364, -2.89 ] + }, + { + "time": 0.4, + "value": -4.33, + "curve": [ 0.432, -5.6, 0.489, -7.01 ] + }, + { + "time": 0.5333, + "value": -7.19, + "curve": [ 0.622, -7.54, 0.748, -0.51 ] + }, + { + "time": 0.8, + "value": 1.72, + "curve": [ 0.877, 5.01, 0.931, 5.58 ] + }, + { + "time": 1, + "value": 5.62, + "curve": [ 1.04, 5.64, 1.114, -0.98 ] + }, + { + "time": 1.1667, + "value": -2.42, + "curve": [ 1.307, -6.12, 1.433, -6.47 ] + }, + { "time": 1.5333, "value": -6.47 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.05, 0, 0.106, 0, 0.05, 0, 0.106, 100.22 ] + }, + { + "time": 0.1667, + "y": 100.22, + "curve": [ 0.199, 0, 0.234, 0, 0.199, 100.22, 0.242, -19.3 ] + }, + { + "time": 0.2667, + "y": -25.61, + "curve": [ 0.331, 0, 0.398, 0, 0.321, -39.52, 0.398, -43.58 ] + }, + { + "time": 0.4667, + "y": -43.47, + "curve": [ 0.522, 0, 0.578, 0, 0.522, -43.39, 0.598, 11.65 ] + }, + { + "time": 0.6333, + "y": 23.7, + "curve": [ 0.745, 0, 0.858, 0, 0.729, 55.73, 0.858, 75.57 ] + }, + { + "time": 0.9667, + "y": 71.98, + "curve": [ 0.989, 0, 1.012, 0, 0.989, 71.25, 1.012, -46.63 ] + }, + { + "time": 1.0333, + "y": -48.46, + "curve": [ 1.091, 0, 1.147, 0, 1.091, -53.23, 1.126, 120.27 ] + }, + { + "time": 1.2, + "y": 118.83, + "curve": [ 1.234, 0, 1.268, 0, 1.237, 118.12, 1.251, -67.36 ] + }, + { + "time": 1.3, + "y": -66.77, + "curve": [ 1.335, 0, 1.369, 0, 1.333, -66.38, 1.368, 44.6 ] + }, + { + "time": 1.4, + "y": 40.56, + "curve": [ 1.449, 0, 1.493, 0, 1.421, 37.96, 1.493, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm": { + "translate": [ + {}, + { "time": 0.4, "x": -5.67, "y": -4.08 }, + { "time": 0.5333, "y": -4.23 }, + { "time": 0.9, "x": -12.75, "y": 12.28 }, + { "time": 1.2333, "x": -4.44, "y": -5.6 }, + { "time": 1.5333 } + ], + "scale": [ + {}, + { "time": 0.4, "x": 1.057 }, + { "time": 0.5333, "x": 1.118 }, + { "time": 0.6667 }, + { "time": 1.3, "x": 1.105 }, + { "time": 1.5333 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 37.3, "bendPositive": false }, + { "time": 0.4333, "softness": 46.5, "bendPositive": false }, + { "time": 0.8, "softness": 15.1, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + {} + ], + "spineboy-front-arm-ik": [ + { "softness": 15, "stretch": true } + ] + }, + "drawOrder": [ + { + "offsets": [ + { "slot": "raptor-horn", "offset": 4 }, + { "slot": "front-thigh", "offset": -5 } + ] + } + ] + }, + "roar": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.6333, "name": "mouth-grind" }, + { "time": 1.5667, "name": "mouth-smile" } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.061, 2.9 ] + }, + { + "time": 0.1, + "value": 2.95, + "curve": [ 0.15, 3.01, 0.192, -10.89 ] + }, + { + "time": 0.2, + "value": -14.12, + "curve": [ 0.224, -23.48, 0.238, -33.2 ] + }, + { + "time": 0.3, + "value": -33.4, + "curve": [ 0.401, -33.71, 0.493, -9.73 ] + }, + { + "time": 0.5667, + "value": -6.44, + "curve": [ 0.589, -5.43, 0.683, -0.43 ] + }, + { + "time": 0.7, + "value": -0.43, + "curve": [ 0.739, -0.43, 0.778, -6.76 ] + }, + { + "time": 0.8333, + "value": -6.78, + "curve": [ 0.962, -6.83, 1.164, -5.78 ] + }, + { + "time": 1.4333, + "value": -5.93, + "curve": [ 1.531, -5.99, 1.535, -17.42 ] + }, + { + "time": 1.7, + "value": -17.43, + "curve": [ 1.808, -17.5, 1.816, 3.25 ] + }, + { + "time": 1.9333, + "value": 3.28, + "curve": [ 1.988, 3.3, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "y": 0.49, + "curve": [ 0.012, -0.48, 0.055, 34.36, 0.033, 15.91, 0.072, 19.98 ] + }, + { + "time": 0.1, + "x": 34.57, + "y": 19.97, + "curve": [ 0.3, 33.35, 0.261, -337.47, 0.27, 21.25, 0.435, -81.31 ] + }, + { + "time": 0.4667, + "x": -339.74, + "y": -103.88, + "curve": [ 0.525, -333.53, 0.54, -266.9, 0.518, -141.21, 0.548, -146.45 ] + }, + { + "time": 0.5667, + "x": -207.1, + "y": -146.24, + "curve": [ 0.577, -182.59, 0.605, 44.93, 0.613, -146.67, 0.629, -42.46 ] + }, + { + "time": 0.7, + "x": 44.98, + "y": -16.55, + "curve": [ 0.729, 44.99, 0.752, 42.93, 0.722, -8.54, 0.75, -6.52 ] + }, + { + "time": 0.7667, + "x": 41.57, + "y": -6.52, + "curve": [ 0.8, 38.2, 0.817, 35.92, 0.783, -6.52, 0.817, -13.34 ] + }, + { + "time": 0.8333, + "x": 35.92, + "y": -13.34, + "curve": [ 0.85, 35.92, 0.861, 39.13, 0.85, -13.34, 0.883, -6.52 ] + }, + { + "time": 0.9, + "x": 41.57, + "y": -6.52, + "curve": [ 0.945, 44.44, 1.276, 55.19, 0.992, -6.52, 1.275, -29.36 ] + }, + { + "time": 1.3667, + "x": 48.94, + "y": -29.36, + "curve": [ 1.579, 34.34, 1.622, -126.54, 1.558, -27.52, 1.659, -0.02 ] + }, + { + "time": 1.7, + "x": -127.64, + "y": 26.21, + "curve": [ 1.76, -128.48, 1.796, -115.83, 1.73, 45.34, 1.788, 70.47 ] + }, + { + "time": 1.8667, + "x": -78.95, + "y": 70.65, + "curve": [ 1.924, -49.19, 2.036, -1.03, 1.95, 70.79, 2.067, -30.6 ] + }, + { "time": 2.1333, "y": 0.49 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.093, 0.6, 0.15, 1.6 ] + }, + { + "time": 0.2, + "value": 1.61, + "curve": [ 0.29, 1.63, 0.346, -1.9 ] + }, + { + "time": 0.3667, + "value": -3.53, + "curve": [ 0.389, -5.3, 0.508, -20.04 ] + }, + { + "time": 0.5333, + "value": -22.32, + "curve": [ 0.559, -24.61, 0.596, -27.57 ] + }, + { + "time": 0.7, + "value": -27.54, + "curve": [ 0.758, -27.53, 0.754, -20.48 ] + }, + { + "time": 0.8, + "value": -20.36, + "curve": [ 0.831, -20.27, 0.851, -21.29 ] + }, + { + "time": 0.9, + "value": -21.25, + "curve": [ 0.963, -21.2, 1.021, -14.89 ] + }, + { + "time": 1.0667, + "value": -14.92, + "curve": [ 1.141, -14.99, 1.167, -18.09 ] + }, + { + "time": 1.2667, + "value": -18.03, + "curve": [ 1.385, -17.94, 1.605, -5.08 ] + }, + { + "time": 1.6667, + "value": -5.02, + "curve": [ 1.714, -4.98, 1.751, -7.53 ] + }, + { + "time": 1.8, + "value": -7.52, + "curve": [ 1.961, -6.98, 2.05, -0.54 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.167, 10.5, 0.05, 0, 0.15, 15.96 ] + }, + { + "time": 0.2, + "x": 12.62, + "y": 15.96, + "curve": [ 0.264, 16.81, 0.35, 19.16, 0.25, 15.96, 0.372, -12.74 ] + }, + { + "time": 0.4, + "x": 19.16, + "y": -15.96, + "curve": [ 0.45, 19.16, 0.565, 14.27, 0.46, -22.88, 0.55, -27.56 ] + }, + { + "time": 0.6, + "x": 13.67, + "y": -27.56, + "curve": [ 0.655, 12.74, 0.707, 12.17, 0.642, -27.56, 0.703, -24.23 ] + }, + { + "time": 0.7667, + "x": 12.05, + "y": -14.93, + "curve": [ 0.798, 11.99, 0.817, 12.59, 0.811, -8.49, 0.817, 0.87 ] + }, + { + "time": 0.8333, + "x": 13.4, + "y": 0.87, + "curve": [ 0.867, 15.08, 0.877, 16.88, 0.858, 0.87, 0.908, -11.59 ] + }, + { + "time": 0.9333, + "x": 18.37, + "y": -11.59, + "curve": [ 0.957, 19, 1.011, 19.96, 0.958, -11.59, 1.008, -1.9 ] + }, + { + "time": 1.0333, + "x": 20.16, + "y": -1.9, + "curve": [ 1.072, 20.52, 1.162, 20.95, 1.075, -1.9, 1.158, -5.89 ] + }, + { + "time": 1.2, + "x": 21.21, + "y": -5.89, + "curve": [ 1.245, 21.53, 1.375, 25.99, 1.258, -5.89, 1.375, 3.45 ] + }, + { + "time": 1.4333, + "x": 25.99, + "y": 3.45, + "curve": [ 1.5, 25.99, 1.645, 25.8, 1.5, 3.45, 1.646, 1.31 ] + }, + { + "time": 1.7, + "x": 25.18, + "y": 0.95, + "curve": [ 1.784, 24.23, 2.025, 0, 1.816, 0.17, 2.025, 0 ] + }, + { "time": 2.1333 } + ], + "scale": [ + { + "time": 0.5333, + "curve": [ 0.55, 1, 0.657, 1.09, 0.55, 1, 0.683, 0.966 ] + }, + { + "time": 0.7, + "x": 1.093, + "y": 0.966, + "curve": [ 0.772, 1.091, 0.8, 0.988, 0.774, 0.968, 0.8, 1.043 ] + }, + { + "time": 0.8333, + "x": 0.988, + "y": 1.043, + "curve": [ 0.867, 0.988, 0.983, 1.002, 0.867, 1.043, 0.991, 0.999 ] + }, + { "time": 1.1333 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "curve": [ 0.024, -0.09, 0.088, -27.73 ] + }, + { + "time": 0.1667, + "value": -27.92, + "curve": [ 0.193, -27.99, 0.216, -27.44 ] + }, + { + "time": 0.2333, + "value": -27.42, + "curve": [ 0.292, -27.34, 0.4, -41 ] + }, + { + "time": 0.4333, + "value": -47.9, + "curve": [ 0.481, -57.82, 0.578, -76.33 ] + }, + { + "time": 0.6333, + "value": -81.72, + "curve": [ 0.656, -83.88, 0.669, -84.84 ] + }, + { + "time": 0.7, + "value": -84.84, + "curve": [ 0.733, -84.84, 0.8, -60.21 ] + }, + { + "time": 0.8333, + "value": -60.21, + "curve": [ 0.85, -60.21, 0.873, -68.32 ] + }, + { + "time": 0.9, + "value": -68.29, + "curve": [ 0.933, -68.25, 0.958, -64.03 ] + }, + { + "time": 1, + "value": -63.97, + "curve": [ 1.085, -63.84, 1.213, -69.62 ] + }, + { + "time": 1.2667, + "value": -69.47, + "curve": [ 1.42, -69.06, 1.479, -59.79 ] + }, + { + "time": 1.5, + "value": -54.97, + "curve": [ 1.524, -49.41, 1.645, -25.87 ] + }, + { + "time": 1.7, + "value": -18.45, + "curve": [ 1.751, -11.45, 1.878, 0 ] + }, + { "time": 2.1333 } + ] + }, + "head2": { + "rotate": [ + { + "value": 12.98, + "curve": [ 0.031, 13.09, 0.051, 13.3 ] + }, + { + "time": 0.0667, + "value": 14.18, + "curve": [ 0.093, 15.64, 0.27, 32.49 ] + }, + { + "time": 0.3, + "value": 33.18, + "curve": [ 0.337, 34.04, 0.379, 21.48 ] + }, + { + "time": 0.4333, + "value": 21.71, + "curve": [ 0.495, 21.97, 0.586, 55.8 ] + }, + { + "time": 0.6333, + "value": 55.8, + "curve": [ 0.713, 55.8, 0.808, 48.07 ] + }, + { + "time": 0.9, + "value": 48.25, + "curve": [ 0.95, 48.35, 0.991, 53.74 ] + }, + { + "time": 1.0333, + "value": 53.37, + "curve": [ 1.058, 53.15, 1.073, 47.29 ] + }, + { + "time": 1.1, + "value": 47.47, + "curve": [ 1.189, 48.06, 1.186, 51.29 ] + }, + { + "time": 1.2333, + "value": 51.02, + "curve": [ 1.265, 50.85, 1.312, 48.13 ] + }, + { + "time": 1.3333, + "value": 45.79, + "curve": [ 1.359, 42.93, 1.443, 33.19 ] + }, + { + "time": 1.5, + "value": 32.96, + "curve": [ 1.555, 32.74, 1.584, 45.98 ] + }, + { + "time": 1.6333, + "value": 45.92, + "curve": [ 1.706, 45.84, 1.747, 24.35 ] + }, + { + "time": 1.8, + "value": 15.58, + "curve": [ 1.858, 6.03, 1.904, 0 ] + }, + { + "time": 1.9333, + "curve": [ 1.966, 0, 2.019, 17.18 ] + }, + { + "time": 2.0667, + "value": 17.31, + "curve": [ 2.097, 17.39, 2.116, 12.98 ] + }, + { "time": 2.1333, "value": 12.98 } + ], + "scale": [ + { + "time": 0.4667, + "curve": [ 0.497, 1, 0.531, 0.984, 0.497, 1, 0.531, 1.04 ] + }, + { + "time": 0.5667, + "x": 0.984, + "y": 1.04, + "curve": [ 0.618, 0.984, 0.684, 1.043, 0.618, 1.04, 0.668, 0.992 ] + }, + { + "time": 0.7333, + "x": 1.044, + "y": 0.99, + "curve": [ 0.775, 1.045, 0.844, 1, 0.767, 0.989, 0.844, 1 ] + }, + { "time": 0.9, "curve": "stepped" }, + { + "time": 1.4333, + "curve": [ 1.475, 1, 1.563, 1.001, 1.475, 1, 1.568, 1.003 ] + }, + { + "time": 1.6, + "x": 1.004, + "y": 1.008, + "curve": [ 1.651, 1.008, 1.675, 1.016, 1.637, 1.012, 1.675, 1.055 ] + }, + { + "time": 1.7, + "x": 1.016, + "y": 1.055, + "curve": [ 1.758, 1.016, 1.854, 1.008, 1.758, 1.055, 1.881, 1.014 ] + }, + { + "time": 1.9333, + "x": 1.004, + "y": 1.008, + "curve": [ 1.98, 1.001, 2.083, 1, 1.993, 1.001, 2.083, 1 ] + }, + { "time": 2.1333 } + ] + }, + "neck2": { + "rotate": [ + { + "value": 0.02, + "curve": [ 0.05, 0.02, 0.144, 5.69 ] + }, + { + "time": 0.2, + "value": 9.94, + "curve": [ 0.276, 15.74, 0.525, 37.25 ] + }, + { + "time": 0.6333, + "value": 37.25, + "curve": [ 0.808, 37.25, 1.175, 37.21 ] + }, + { + "time": 1.3333, + "value": 33.93, + "curve": [ 1.543, 29.58, 1.659, 13.32 ] + }, + { + "time": 1.7, + "value": 11.08, + "curve": [ 1.762, 7.68, 1.875, 0 ] + }, + { "time": 1.9333 } + ] + }, + "front-arm1": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.051, -14.24 ] + }, + { + "time": 0.1, + "value": -14.37, + "curve": [ 0.206, -14.64, 0.27, 25.52 ] + }, + { + "time": 0.3333, + "value": 25.6, + "curve": [ 0.466, 25.77, 0.528, -35.52 ] + }, + { + "time": 0.7, + "value": -35.63, + "curve": [ 0.742, -35.65, 0.808, -30.27 ] + }, + { + "time": 0.8333, + "value": -28.76, + "curve": [ 0.956, -21.55, 1.342, -18.16 ] + }, + { + "time": 1.5, + "value": -18.16, + "curve": [ 1.608, -18.16, 1.825, 13.78 ] + }, + { + "time": 1.9333, + "value": 13.78, + "curve": [ 1.983, 13.78, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-arm2": { + "rotate": [ + { + "curve": [ 0.157, 0, 0.166, 22.96 ] + }, + { + "time": 0.2333, + "value": 23.11, + "curve": [ 0.52, 23.77, 0.523, 3.24 ] + }, + { + "time": 0.5333, + "value": -3.34, + "curve": [ 0.561, -21.06, 0.604, -49.19 ] + }, + { + "time": 0.8, + "value": -59.15, + "curve": [ 0.896, -64.05, 1.195, -69.82 ] + }, + { + "time": 1.3333, + "value": -69.51, + "curve": [ 1.407, -69.35, 1.46, -64.94 ] + }, + { + "time": 1.5, + "value": -47.97, + "curve": [ 1.525, -37.26, 1.6, 20.75 ] + }, + { + "time": 1.6667, + "value": 20.78, + "curve": [ 1.801, 20.84, 1.868, -8.99 ] + }, + { + "time": 1.9333, + "value": -8.99, + "curve": [ 1.983, -8.99, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-hand": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.15, 15.17 ] + }, + { + "time": 0.2, + "value": 15.17, + "curve": [ 0.409, 14.83, 0.403, -26.62 ] + }, + { + "time": 0.5333, + "value": -25.8, + "curve": [ 0.62, -25.26, 0.648, 1.88 ] + }, + { + "time": 0.8, + "value": 1.88, + "curve": [ 0.983, 1.88, 1.479, -23.1 ] + }, + { + "time": 1.5333, + "value": -30.97, + "curve": [ 1.574, -36.96, 1.591, -46.26 ] + }, + { + "time": 1.6333, + "value": -46.06, + "curve": [ 1.75, -45.52, 1.762, 18.69 ] + }, + { + "time": 1.9333, + "value": 19.03, + "curve": [ 1.983, 19.13, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-arm2": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.081, -14.57 ] + }, + { + "time": 0.2, + "value": -14.55, + "curve": [ 0.287, -14.54, 0.388, -2.01 ] + }, + { + "time": 0.4667, + "value": -2.44, + "curve": [ 0.53, -2.78, 0.593, -10.56 ] + }, + { + "time": 0.6, + "value": -25.66, + "curve": [ 0.621, -73.18, 0.619, -95.18 ] + }, + { + "time": 0.7667, + "value": -97.24, + "curve": [ 0.847, -98.36, 1.279, -103.19 ] + }, + { + "time": 1.5, + "value": -77.44, + "curve": [ 1.567, -69.6, 1.77, -24.47 ] + }, + { + "time": 1.9333, + "value": -8.99, + "curve": [ 1.959, -6.54, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-hand": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.136, 7.7 ] + }, + { + "time": 0.2, + "value": 19.14, + "curve": [ 0.243, 26.85, 0.237, 49.93 ] + }, + { + "time": 0.3, + "value": 49.98, + "curve": [ 0.416, 50.06, 0.415, 33.42 ] + }, + { + "time": 0.4667, + "value": 33.94, + "curve": [ 0.586, 35.15, 0.557, 78.18 ] + }, + { + "time": 0.6, + "value": 78.77, + "curve": [ 0.624, 79.1, 0.639, 48.7 ] + }, + { + "time": 0.6667, + "value": 37.71, + "curve": [ 0.711, 20.36, 0.804, -1.75 ] + }, + { + "time": 0.9667, + "value": -3, + "curve": [ 1.168, -4.55, 1.332, -1.6 ] + }, + { + "time": 1.3667, + "value": 1.79, + "curve": [ 1.408, 5.92, 1.502, 36.79 ] + }, + { + "time": 1.5667, + "value": 36.4, + "curve": [ 1.685, 35.7, 1.9, 31.04 ] + }, + { + "time": 1.9333, + "value": 27.25, + "curve": [ 1.999, 19.84, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-arm1": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.056, 24.8 ] + }, + { + "time": 0.1667, + "value": 25.18, + "curve": [ 0.301, 25.64, 0.566, 11.56 ] + }, + { + "time": 0.6333, + "value": -5.85, + "curve": [ 0.672, -16, 0.707, -25.63 ] + }, + { + "time": 0.8, + "value": -25.79, + "curve": [ 0.975, -25.79, 1.295, -26.78 ] + }, + { + "time": 1.5, + "value": -12.94, + "curve": [ 1.564, -8.58, 1.825, 13.78 ] + }, + { + "time": 1.9333, + "value": 13.78, + "curve": [ 1.983, 13.78, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.114, -8.5 ] + }, + { + "time": 0.2, + "value": -8.26, + "curve": [ 0.29, -8.01, 0.537, 12.55 ] + }, + { + "time": 0.6333, + "value": 13.44, + "curve": [ 0.766, 14.68, 1.273, 2.13 ] + }, + { + "time": 1.4667, + "value": -3.5, + "curve": [ 1.565, -6.92, 1.656, -11.02 ] + }, + { + "time": 1.7, + "value": -10.74, + "curve": [ 1.788, -10.19, 1.852, 2.74 ] + }, + { + "time": 1.9333, + "value": 2.88, + "curve": [ 1.992, 2.98, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, -20.09, 0.05, 0, 0.174, -0.26 ] + }, + { + "time": 0.2, + "x": -19.98, + "y": -1.45, + "curve": [ 0.312, -19.75, 0.463, 34.4, 0.264, -4.43, 0.474, -34.98 ] + }, + { + "time": 0.6, + "x": 34.3, + "y": -34.87, + "curve": [ 0.672, 34.26, 0.742, 30.02, 0.638, -34.83, 0.742, -21.32 ] + }, + { + "time": 0.8, + "x": 30.02, + "y": -21.32, + "curve": [ 0.842, 30.02, 0.992, 37.66, 0.842, -21.32, 0.992, -41.18 ] + }, + { + "time": 1.0333, + "x": 37.66, + "y": -41.18, + "curve": [ 1.083, 37.66, 1.183, 23.6, 1.083, -41.18, 1.183, -0.63 ] + }, + { + "time": 1.2333, + "x": 23.6, + "y": -0.63, + "curve": [ 1.292, 23.6, 1.408, 26.3, 1.292, -0.63, 1.408, -26.62 ] + }, + { + "time": 1.4667, + "x": 26.3, + "y": -26.62, + "curve": [ 1.581, 26.3, 1.618, 17.21, 1.5, -26.62, 1.675, 3.64 ] + }, + { + "time": 1.7, + "x": 12.18, + "y": 3.64, + "curve": [ 1.773, 7.71, 1.87, 4.4, 1.758, 3.64, 1.875, -4.9 ] + }, + { + "time": 1.9333, + "x": 2.83, + "y": -4.9, + "curve": [ 2.001, 1.15, 2.083, 0, 1.983, -4.9, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.001, -4.96, 0.05, -6.66 ] + }, + { + "time": 0.0667, + "value": -6.57, + "curve": [ 0.211, -5.81, 0.176, 34.04 ] + }, + { + "time": 0.2667, + "value": 33.65, + "curve": [ 0.335, 33.7, 0.454, 12.93 ] + }, + { + "time": 0.5, + "value": 3.37, + "curve": [ 0.539, -4.68, 0.547, -11.66 ] + }, + { + "time": 0.6, + "value": -12.11, + "curve": [ 0.645, -11.69, 0.602, 31.75 ] + }, + { + "time": 0.8, + "value": 31.51, + "curve": [ 0.85, 31.51, 0.917, 25.3 ] + }, + { + "time": 0.9667, + "value": 25.3, + "curve": [ 1.075, 25.3, 1.392, 27.9 ] + }, + { + "time": 1.5, + "value": 27.9, + "curve": [ 1.55, 27.9, 1.717, -5.14 ] + }, + { + "time": 1.8, + "value": -4.51, + "curve": [ 1.861, -4.19, 1.949, 4.07 ] + }, + { + "time": 2.0333, + "value": 4.18, + "curve": [ 2.087, 4.25, 2.096, 2.99 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, 22.58, 0.05, 0, 0.154, -41.07 ] + }, + { + "time": 0.2, + "x": 22.75, + "y": -41.48, + "curve": [ 0.3, 23.09, 0.336, -13.2, 0.329, -42.63, 0.356, 19.91 ] + }, + { + "time": 0.5667, + "x": -12.04, + "y": 21.07, + "curve": [ 0.643, -12.24, 0.681, 19.67, 0.625, 21.26, 0.615, -90.96 ] + }, + { + "time": 0.7, + "x": 20.1, + "y": -90.36, + "curve": [ 0.718, 20.5, 0.75, 16.57, 0.738, -90.33, 0.75, -87.92 ] + }, + { + "time": 0.7667, + "x": 16.57, + "y": -87.92, + "curve": [ 0.783, 16.57, 0.817, 18.74, 0.783, -87.92, 0.817, -87.42 ] + }, + { + "time": 0.8333, + "x": 18.74, + "y": -87.42, + "curve": [ 0.85, 18.74, 0.883, 16.57, 0.85, -87.42, 0.883, -87.92 ] + }, + { + "time": 0.9, + "x": 16.57, + "y": -87.92, + "curve": [ 0.917, 16.57, 0.95, 18.74, 0.917, -87.92, 0.95, -87.42 ] + }, + { + "time": 0.9667, + "x": 18.74, + "y": -87.42, + "curve": [ 1.075, 18.74, 1.392, 27.31, 1.075, -87.42, 1.392, -84.9 ] + }, + { + "time": 1.5, + "x": 27.31, + "y": -84.9, + "curve": [ 1.554, 27.31, 1.605, -22.6, 1.512, -84.9, 1.575, -102.53 ] + }, + { + "time": 1.7, + "x": -22.58, + "y": -89.06, + "curve": [ 1.812, -23.81, 1.863, 9.94, 1.841, -71.22, 1.847, 11.93 ] + }, + { + "time": 1.9667, + "x": 10.77, + "y": 13.35, + "curve": [ 2.028, 11.26, 2.065, -0.88, 2.032, 14.12, 2.082, 7.52 ] + }, + { "time": 2.1333 } + ], + "shear": [ + { + "time": 0.6333, + "curve": [ 0.654, 0, 0.67, -0.13, 0.654, 0, 0.676, 0 ] + }, + { + "time": 0.7, + "x": -0.56, + "curve": [ 0.721, -0.86, 0.744, -1.24, 0.721, 0, 0.744, 0 ] + }, + { + "time": 0.7667, + "x": -1.24, + "curve": [ 0.788, -1.24, 0.819, -0.69, 0.788, 0, 0.811, 0 ] + }, + { + "time": 0.8333, + "x": -0.47, + "curve": [ 0.88, 0.25, 0.901, 0.43, 0.866, 0, 0.9, 0 ] + }, + { + "time": 0.9333, + "x": 0.43, + "curve": [ 0.975, 0.44, 1.017, -0.47, 1, 0, 1.068, 0 ] + }, + { + "time": 1.1333, + "x": -0.46, + "curve": [ 1.202, -0.44, 1.282, -0.01, 1.216, 0, 1.462, 0 ] + }, + { "time": 1.5 } + ] + }, + "jaw": { + "rotate": [ + { + "value": -1.2, + "curve": [ 0.05, -1.2, 0.158, 0.54 ] + }, + { + "time": 0.2, + "value": 1.83, + "curve": [ 0.273, 4.06, 0.417, 15.63 ] + }, + { + "time": 0.4667, + "value": 14.47, + "curve": [ 0.652, 10.18, 0.592, -68.7 ] + }, + { + "time": 0.6667, + "value": -68.7, + "curve": [ 0.731, -68.52, 0.767, -42.64 ] + }, + { + "time": 0.8, + "value": -42.45, + "curve": [ 0.808, -42.45, 0.801, -43.41 ] + }, + { + "time": 0.8333, + "value": -43.55, + "curve": [ 0.858, -43.55, 0.906, -39.81 ] + }, + { + "time": 0.9333, + "value": -39.73, + "curve": [ 0.956, -39.65, 1.013, -42.1 ] + }, + { + "time": 1.0333, + "value": -42.02, + "curve": [ 1.06, -41.91, 1.083, -35.38 ] + }, + { + "time": 1.1333, + "value": -35.34, + "curve": [ 1.169, -35.32, 1.22, -36.84 ] + }, + { + "time": 1.2667, + "value": -36.74, + "curve": [ 1.372, -36.31, 1.542, 1.5 ] + }, + { + "time": 1.6, + "value": -3.58, + "curve": [ 1.62, -3.98, 1.647, -9.02 ] + }, + { + "time": 1.7, + "value": -8.79, + "curve": [ 1.748, -8.74, 1.823, 3.7 ] + }, + { + "time": 1.9333, + "value": 4.73, + "curve": [ 1.951, 5.04, 1.975, -1.14 ] + }, + { + "time": 2, + "value": -1.34, + "curve": [ 2.048, -1.72, 2.1, -1.2 ] + }, + { "time": 2.1333, "value": -1.2 } + ], + "translate": [ + { + "x": -3.44, + "y": 2.51, + "curve": [ 0.111, -3.74, 0.391, -39.94, 0.155, 4.09, 0.297, -2.98 ] + }, + { + "time": 0.4667, + "x": -56.45, + "y": -10.08, + "curve": [ 0.527, -69.24, 0.561, -75.25, 0.577, -15.37, 0.551, -15.25 ] + }, + { + "time": 0.6, + "x": -74.43, + "y": -14.69, + "curve": [ 0.634, -74.95, 0.624, -60.95, 0.641, -14.11, 0.65, 23.07 ] + }, + { + "time": 0.6667, + "x": -53.45, + "y": 23.07, + "curve": [ 0.759, -37.12, 1.392, -28.49, 0.892, 23.07, 1.375, 19.61 ] + }, + { + "time": 1.6, + "x": -21.33, + "y": 16.78, + "curve": [ 1.762, -15.77, 1.825, -8.47, 1.625, 16.47, 1.78, 6.33 ] + }, + { + "time": 1.8667, + "x": -8.47, + "y": -3.77, + "curve": [ 1.9, -8.47, 1.967, -15.38, 1.914, -8.24, 1.967, -10.85 ] + }, + { + "time": 2, + "x": -15.38, + "y": -10.85, + "curve": [ 2.033, -15.38, 2.1, -3.44, 2.033, -10.85, 2.1, 2.51 ] + }, + { "time": 2.1333, "x": -3.44, "y": 2.51 } + ], + "scale": [ + { + "time": 0.5667, + "curve": [ 0.594, 1, 0.621, 0.956, 0.601, 1, 0.621, 1.058 ] + }, + { + "time": 0.6333, + "x": 0.956, + "y": 1.058, + "curve": [ 0.646, 0.956, 0.639, 0.994, 0.646, 1.058, 0.642, 1.02 ] + }, + { "time": 0.7 } + ], + "shear": [ + { + "time": 0.2333, + "curve": [ 0.283, 0, 0.361, -0.05, 0.283, 0, 0.405, -0.25 ] + }, + { + "time": 0.4333, + "x": 0.04, + "y": -0.47, + "curve": [ 0.498, 0.13, 0.57, 0.57, 0.485, -0.88, 0.533, -2.91 ] + }, + { + "time": 0.6333, + "x": 0.55, + "y": -2.91, + "curve": [ 0.702, 0.53, 0.717, 0.33, 0.68, -2.87, 0.748, -2.09 ] + }, + { + "time": 0.8, + "x": 0.2, + "y": -1.59, + "curve": [ 0.897, 0.05, 1.025, 0, 0.862, -0.98, 1.025, 0 ] + }, + { "time": 1.1333 } + ] + }, + "tongue1": { + "rotate": [ + { + "value": 16.25, + "curve": [ 0.05, 16.25, 0.197, 16.24 ] + }, + { + "time": 0.2, + "value": 15.93, + "curve": [ 0.244, 10.93, 0.33, -0.69 ] + }, + { + "time": 0.3667, + "value": -0.58, + "curve": [ 0.432, -0.37, 0.481, 1.4 ] + }, + { + "time": 0.5333, + "value": 5.31, + "curve": [ 0.541, 5.85, 0.57, 25.11 ] + }, + { + "time": 0.6, + "value": 28.2, + "curve": [ 0.611, 29.32, 0.623, 14.35 ] + }, + { + "time": 0.6333, + "value": 15.32, + "curve": [ 0.661, 17.81, 0.683, 18.19 ] + }, + { + "time": 0.7, + "value": 18.19, + "curve": [ 0.733, 18.19, 0.8, 13.38 ] + }, + { + "time": 0.8333, + "value": 13.38, + "curve": [ 0.867, 13.38, 0.937, 14.84 ] + }, + { + "time": 0.9667, + "value": 15.71, + "curve": [ 1.019, 17.29, 1.045, 19.01 ] + }, + { + "time": 1.0667, + "value": 20.57, + "curve": [ 1.084, 21.85, 1.148, 23.51 ] + }, + { + "time": 1.1667, + "value": 23.29, + "curve": [ 1.22, 22.66, 1.242, 16.58 ] + }, + { + "time": 1.2667, + "value": 16.58, + "curve": [ 1.283, 16.58, 1.327, 19.6 ] + }, + { + "time": 1.3333, + "value": 19.86, + "curve": [ 1.376, 21.73, 1.408, 22.44 ] + }, + { + "time": 1.4333, + "value": 22.44, + "curve": [ 1.458, 22.44, 1.481, 19.06 ] + }, + { + "time": 1.5333, + "value": 19.01, + "curve": [ 1.575, 18.98, 1.656, 22.9 ] + }, + { + "time": 1.7, + "value": 22.93, + "curve": [ 1.776, 22.99, 1.875, 16.25 ] + }, + { "time": 1.9333, "value": 16.25 } + ], + "translate": [ + { "x": -22.37, "y": 13.32 } + ], + "scale": [ + { + "time": 0.2, + "curve": [ 0.3, 1, 0.5, 1.16, 0.3, 1, 0.5, 1 ] + }, + { + "time": 0.6, + "x": 1.16, + "curve": [ 0.875, 1.16, 1.425, 1, 0.875, 1, 1.425, 1 ] + }, + { "time": 1.7 } + ] + }, + "torso1": { + "rotate": [ + { + "curve": [ 0.029, 0, 0.036, -1.4 ] + }, + { + "time": 0.1, + "value": -1.41, + "curve": [ 0.143, -1.42, 0.287, 10.8 ] + }, + { + "time": 0.3333, + "value": 10.73, + "curve": [ 0.479, 10.51, 0.531, 6.79 ] + }, + { + "time": 0.6, + "curve": [ 0.624, -2.59, 0.679, -4.75 ] + }, + { + "time": 0.7, + "value": -4.9, + "curve": [ 0.723, -5.06, 0.75, -2.6 ] + }, + { + "time": 0.7667, + "value": -2.6, + "curve": [ 0.783, -2.6, 0.814, -4.72 ] + }, + { + "time": 0.8333, + "value": -4.7, + "curve": [ 0.858, -4.67, 0.857, -1.2 ] + }, + { + "time": 0.9, + "value": -1.13, + "curve": [ 0.926, -1.09, 1, -3.27 ] + }, + { + "time": 1.0333, + "value": -3.27, + "curve": [ 1.061, -3.27, 1.1, 0.25 ] + }, + { + "time": 1.1333, + "value": 0.24, + "curve": [ 1.179, 0.23, 1.199, -1.36 ] + }, + { + "time": 1.2333, + "value": -1.36, + "curve": [ 1.295, -1.36, 1.29, 1.49 ] + }, + { + "time": 1.3667, + "value": 1.47, + "curve": [ 1.409, 1.46, 1.464, -1.37 ] + }, + { + "time": 1.5, + "value": -1.36, + "curve": [ 1.607, -1.3, 1.754, 1.39 ] + }, + { + "time": 1.9667, + "value": 1.36, + "curve": [ 2.008, 1.36, 2.092, 0 ] + }, + { "time": 2.1333 } + ] + }, + "horn-back": { + "rotate": [ + { "time": 0.2 }, + { "time": 1.0333, "value": 7.62 }, + { "time": 1.9333 } + ], + "translate": [ + { + "time": 1.6667, + "curve": [ 1.708, 0, 1.792, 19.83, 1.708, 0, 1.792, 22.59 ] + }, + { + "time": 1.8333, + "x": 19.83, + "y": 22.59, + "curve": [ 1.908, 19.83, 2.058, 0, 1.908, 22.59, 2.058, 0 ] + }, + { "time": 2.1333 } + ] + }, + "horn-front": { + "rotate": [ + { + "curve": [ 0.018, 0, 0.052, 0.73 ] + }, + { + "time": 0.0667, + "value": 1.73, + "curve": [ 0.084, 2.92, 0.1, 4.72 ] + }, + { + "time": 0.1333, + "value": 4.95, + "curve": [ 0.162, 5.16, 0.187, 4.3 ] + }, + { + "time": 0.2, + "value": 3.89, + "curve": [ 0.289, 0.95, 0.477, -6.85 ] + }, + { + "time": 0.6667, + "value": -6.06, + "curve": [ 0.809, -5.49, 0.953, -3.36 ] + }, + { + "time": 1.0333, + "value": -2.66, + "curve": [ 1.255, -0.73, 1.708, 0 ] + }, + { "time": 1.9333 } + ], + "translate": [ + { "time": 1.4667 }, + { "time": 1.9, "x": 5.8, "y": -14.31 }, + { "time": 2.0333, "x": 7.96, "y": -4.52 }, + { "time": 2.1333 } + ] + }, + "front-leg-target": { + "rotate": [ + { "value": -0.31 } + ], + "translate": [ + { + "curve": [ 0.138, 0.68, 0.144, 63.75, 0.092, 0, 0.15, 21.48 ] + }, + { + "time": 0.2, + "x": 63.06, + "y": 22.03, + "curve": [ 0.315, 61.65, 0.292, -25.03, 0.315, 23.29, 0.356, -56.94 ] + }, + { + "time": 0.5, + "x": -29.09, + "y": -56.75, + "curve": [ 0.601, -31.05, 0.583, 104.34, 0.589, -56.64, 0.583, 47.28 ] + }, + { "time": 0.7, "x": 104.34, "y": 47.28 }, + { + "time": 1.3667, + "x": 106.2, + "y": 47.7, + "curve": [ 1.538, 105.92, 1.633, 88.98, 1.552, 49.6, 1.633, 40.88 ] + }, + { + "time": 1.7333, + "x": 49.5, + "y": 28.71, + "curve": [ 1.842, 7.01, 2.025, -0.54, 1.842, 15.61, 2.025, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-leg-target": { + "translate": [ + {}, + { "time": 0.2, "x": 5.58, "y": 4.02 }, + { + "time": 0.4667, + "x": -39.15, + "y": -10.18, + "curve": [ 0.512, -15.45, 0.563, 1.22, 0.512, 9.94, 0.563, 28.79 ] + }, + { "time": 0.6333, "x": 17.09, "y": 42.26 }, + { "time": 0.7333, "x": 30.54, "y": 59.35 }, + { + "time": 1.4667, + "x": 31.18, + "y": 60.17, + "curve": [ 1.567, 24.16, 1.607, 12.61, 1.564, 55.67, 1.613, 36.27 ] + }, + { "time": 1.6667, "x": -19.04, "y": -0.52 }, + { "time": 2.1333 } + ] + }, + "spineboy-hip": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, 10.98 ] + }, + { + "time": 0.1, + "value": 10.98, + "curve": [ 0.157, 10.98, 0.238, 8.08 ] + }, + { + "time": 0.3333, + "value": 8.02, + "curve": [ 0.391, 7.98, 0.432, 11.76 ] + }, + { + "time": 0.4667, + "value": 11.66, + "curve": [ 0.491, 11.58, 0.504, 11.4 ] + }, + { + "time": 0.5333, + "value": 7.39, + "curve": [ 0.577, 1.45, 0.627, -5.5 ] + }, + { + "time": 0.7, + "value": -7.47, + "curve": [ 0.821, -10.75, 0.917, -11.16 ] + }, + { + "time": 1, + "value": -11.16, + "curve": [ 1.13, -11.16, 1.359, 3.64 ] + }, + { + "time": 1.5333, + "value": 3.43, + "curve": [ 1.603, 3.89, 1.637, -25.96 ] + }, + { + "time": 1.7, + "value": -25.96, + "curve": [ 1.811, -26.33, 1.881, 9.15 ] + }, + { + "time": 1.9667, + "value": 9.05, + "curve": [ 2.034, 8.97, 2.092, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -3.14, 0.025, 0, 0.075, 4.23 ] + }, + { + "time": 0.1, + "x": -2.69, + "y": 4.23, + "curve": [ 0.131, -2.14, 0.167, 3.27, 0.125, 4.23, 0.183, -2.98 ] + }, + { + "time": 0.2, + "x": 17.13, + "y": -6.44, + "curve": [ 0.214, 22.78, 0.275, 27.63, 0.235, -13.6, 0.274, -24.33 ] + }, + { + "time": 0.3, + "x": 27.63, + "y": -24.78, + "curve": [ 0.342, 27.63, 0.425, 23.61, 0.349, -25.62, 0.441, -8.74 ] + }, + { + "time": 0.4667, + "x": 23.61, + "y": -8.32, + "curve": [ 0.483, 23.61, 0.508, 20.92, 0.486, -7.99, 0.508, -37.58 ] + }, + { + "time": 0.5333, + "x": 35.42, + "y": -44.36, + "curve": [ 0.551, 45.68, 0.608, 70.81, 0.569, -53.86, 0.616, -66.98 ] + }, + { + "time": 0.6333, + "x": 70.81, + "y": -72.81, + "curve": [ 0.65, 70.81, 0.679, 65.64, 0.648, -77.73, 0.671, -76.48 ] + }, + { + "time": 0.7, + "x": 62.91, + "y": -76.91, + "curve": [ 0.725, 59.54, 0.775, 59.86, 0.73, -77.35, 0.775, -54.3 ] + }, + { + "time": 0.8, + "x": 59.86, + "y": -54.3, + "curve": [ 0.825, 59.86, 0.867, 59.93, 0.825, -54.3, 0.865, -55.33 ] + }, + { + "time": 0.9, + "x": 60.79, + "y": -56.69, + "curve": [ 0.946, 62, 0.962, 62.29, 0.923, -57.6, 0.951, -57.62 ] + }, + { + "time": 1, + "x": 63.78, + "y": -57.73, + "curve": [ 1.038, 65.26, 1.106, 68.28, 1.058, -57.86, 1.1, -57.63 ] + }, + { + "time": 1.1333, + "x": 69.44, + "y": -57.41, + "curve": [ 1.217, 72.97, 1.333, 77.13, 1.226, -56.82, 1.316, -55.55 ] + }, + { + "time": 1.4, + "x": 77.13, + "y": -53.65, + "curve": [ 1.433, 77.13, 1.467, 73.12, 1.437, -52.82, 1.492, -50.91 ] + }, + { + "time": 1.5333, + "x": 63.41, + "y": -49.52, + "curve": [ 1.549, 61.17, 1.597, 46.67, 1.576, -48.09, 1.599, -47.25 ] + }, + { + "time": 1.6333, + "x": 38.86, + "y": -45.65, + "curve": [ 1.687, 27.26, 1.722, 20.8, 1.677, -43.62, 1.71, -40.67 ] + }, + { + "time": 1.7333, + "x": 19.46, + "y": -38, + "curve": [ 1.803, 11.67, 1.885, 5.59, 1.758, -35.11, 1.888, -14.53 ] + }, + { + "time": 1.9333, + "x": 4.11, + "y": -7.78, + "curve": [ 2.006, 1.87, 2.083, 0, 1.96, -3.77, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2, "value": -21.93 }, + { "time": 0.3, "value": -23.29 }, + { "time": 0.4333, "value": -29.8 }, + { "time": 0.5333, "value": -36.62 }, + { "time": 0.6333, "value": -40.49 }, + { "time": 0.7, "value": -38.28 }, + { "time": 0.7667, "value": -33.33 }, + { "time": 0.8333, "value": -28.06 }, + { "time": 1.4333, "value": -27.17 }, + { "time": 1.5333, "value": -27.62 }, + { "time": 1.7 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.0667, "x": 1.11, "y": -2.35 }, + { "time": 0.3, "x": 21.56, "y": -45.67 }, + { "time": 0.5667, "x": 2.23, "y": -34.98 }, + { "time": 0.7333, "x": 28.52, "y": -47.75 }, + { "time": 0.8333, "x": 24.52, "y": -37.92 }, + { "time": 1.5, "x": 26.24, "y": -38.24 }, + { "time": 1.7, "x": -9.39, "y": -0.72 }, + { "time": 1.8667, "x": 1.03, "y": -21.86 }, + { "time": 2.1333 } + ] + }, + "gun": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -16.45 ] + }, + { + "time": 0.1, + "value": -16.38, + "curve": [ 0.186, -16.14, 0.268, -2.86 ] + }, + { + "time": 0.3, + "value": -2.83, + "curve": [ 0.342, -2.79, 0.427, -27.51 ] + }, + { + "time": 0.4333, + "value": -29.46, + "curve": [ 0.508, -53.36, 0.613, -60.85 ] + }, + { + "time": 0.6333, + "value": -60.92, + "curve": [ 0.711, -61.15, 0.734, -27.93 ] + }, + { + "time": 0.7667, + "value": -23.27, + "curve": [ 0.785, -20.65, 0.852, -13.39 ] + }, + { + "time": 0.9, + "value": -13.36, + "curve": [ 0.952, -13.33, 1.002, -20.79 ] + }, + { + "time": 1.0333, + "value": -20.87, + "curve": [ 1.206, -21.35, 1.432, -17.1 ] + }, + { + "time": 1.5, + "value": -14.02, + "curve": [ 1.549, -11.78, 1.65, 15.4 ] + }, + { + "time": 1.7, + "value": 15.4, + "curve": [ 1.733, 15.4, 1.8, 9.7 ] + }, + { + "time": 1.8333, + "value": 2.78, + "curve": [ 1.875, -5.94, 1.908, -25.4 ] + }, + { + "time": 1.9333, + "value": -25.23, + "curve": [ 2.015, -24.66, 2.108, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.308, 0, 0.525, -18.37, 0.308, 0, 0.525, -9.19 ] + }, + { + "time": 0.6333, + "x": -18.37, + "y": -9.19, + "curve": [ 0.9, -18.37, 1.433, 0, 0.9, -9.19, 1.433, 0 ] + }, + { "time": 1.7 } + ] + }, + "tail1": { + "rotate": [ + { + "curve": [ 0.098, 0.13, 0.204, -14.76 ] + }, + { + "time": 0.2667, + "value": -14.69, + "curve": [ 0.453, -14.49, 0.578, 19.55 ] + }, + { + "time": 0.9333, + "value": 19.85, + "curve": [ 1.08, 19.98, 1.328, 16.46 ] + }, + { + "time": 1.4333, + "value": 9.05, + "curve": [ 1.532, 2.13, 1.565, -5.76 ] + }, + { + "time": 1.7, + "value": -5.74, + "curve": [ 1.739, -5.73, 1.771, 1.08 ] + }, + { + "time": 1.8, + "value": 1.06, + "curve": [ 1.853, 1.04, 1.956, -1.66 ] + }, + { + "time": 2, + "value": -1.81, + "curve": [ 2.039, -1.95, 2.08, -0.07 ] + }, + { "time": 2.1333 } + ] + }, + "tail3": { + "rotate": [ + { + "value": -4.66, + "curve": [ 0.053, -3.48, 0.21, 0.22 ] + }, + { + "time": 0.2667, + "value": 0.23, + "curve": [ 0.331, 0.24, 0.337, -16.21 ] + }, + { + "time": 0.4333, + "value": -16.22, + "curve": [ 0.521, -16.24, 0.565, -5.72 ] + }, + { + "time": 0.6667, + "value": -5.73, + "curve": [ 0.743, -5.73, 0.805, -9.29 ] + }, + { + "time": 0.8333, + "value": -9.89, + "curve": [ 0.878, -10.85, 0.93, -11.71 ] + }, + { + "time": 1, + "value": -11.85, + "curve": [ 1.032, -11.91, 1.065, -10.91 ] + }, + { + "time": 1.1, + "value": -10.92, + "curve": [ 1.142, -10.93, 1.19, -11.14 ] + }, + { + "time": 1.2333, + "value": -11.21, + "curve": [ 1.268, -11.27, 1.296, -10.85 ] + }, + { + "time": 1.3333, + "value": -10.84, + "curve": [ 1.389, -10.83, 1.422, -12.91 ] + }, + { + "time": 1.4667, + "value": -12.9, + "curve": [ 1.523, -12.89, 1.594, 0.83 ] + }, + { + "time": 1.6667, + "value": 0.91, + "curve": [ 1.722, 0.97, 1.763, -1.01 ] + }, + { + "time": 1.8, + "value": -2.92, + "curve": [ 1.837, -4.84, 1.889, -7.19 ] + }, + { + "time": 1.9667, + "value": -7.21, + "curve": [ 2.039, -7.24, 2.081, -5.7 ] + }, + { "time": 2.1333, "value": -4.66 } + ] + }, + "tail5": { + "rotate": [ + { + "value": 5.3, + "curve": [ 0.036, 7.51, 0.233, 22.33 ] + }, + { + "time": 0.2667, + "value": 22.33, + "curve": [ 0.325, 22.33, 0.414, -17.46 ] + }, + { + "time": 0.5, + "value": -17.34, + "curve": [ 0.554, -17.27, 0.622, -8.56 ] + }, + { + "time": 0.6667, + "value": -3.3, + "curve": [ 0.68, -1.76, 0.718, 2.89 ] + }, + { + "time": 0.8, + "value": 2.99, + "curve": [ 0.87, 3.07, 0.878, -6.27 ] + }, + { + "time": 0.9333, + "value": -6.3, + "curve": [ 0.953, -6.31, 1.022, -0.18 ] + }, + { + "time": 1.0667, + "value": -0.19, + "curve": [ 1.141, -0.21, 1.247, -1.67 ] + }, + { + "time": 1.3333, + "value": -1.68, + "curve": [ 1.445, -1.69, 1.533, 6.2 ] + }, + { + "time": 1.6333, + "value": 6.15, + "curve": [ 1.783, 6.09, 1.796, 2.3 ] + }, + { + "time": 1.9333, + "value": 2.27, + "curve": [ 2.022, 2.41, 2.09, 3.96 ] + }, + { "time": 2.1333, "value": 5.3 } + ] + }, + "tail7": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.024, -9.39, 0.083, 2.54 ] + }, + { + "time": 0.1, + "value": 5.38, + "curve": [ 0.12, 8.69, 0.201, 19.39 ] + }, + { + "time": 0.2667, + "value": 19.39, + "curve": [ 0.326, 19.38, 0.373, 10.75 ] + }, + { + "time": 0.4, + "value": 6.64, + "curve": [ 0.425, 2.85, 0.527, -17.3 ] + }, + { + "time": 0.6, + "value": -17.31, + "curve": [ 0.729, -17.34, 0.751, 6.3 ] + }, + { + "time": 0.8, + "value": 6.38, + "curve": [ 0.868, 6.5, 0.914, -11.69 ] + }, + { + "time": 0.9667, + "value": -11.4, + "curve": [ 0.995, -11.24, 1.044, -1.32 ] + }, + { + "time": 1.1, + "value": -1.44, + "curve": [ 1.143, -1.54, 1.18, -10.37 ] + }, + { + "time": 1.2667, + "value": -10.23, + "curve": [ 1.295, -10.19, 1.34, -3.84 ] + }, + { + "time": 1.4333, + "value": -4.1, + "curve": [ 1.553, -4.43, 1.585, -16.61 ] + }, + { + "time": 1.6333, + "value": -16.61, + "curve": [ 1.688, -16.61, 1.696, 23.74 ] + }, + { + "time": 1.7333, + "value": 23.71, + "curve": [ 1.798, 23.66, 1.87, 16.5 ] + }, + { + "time": 1.9, + "value": 10.29, + "curve": [ 1.923, 5.57, 1.978, -13.06 ] + }, + { + "time": 2.0667, + "value": -13.03, + "curve": [ 2.081, -13.06, 2.106, -12.38 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tail9": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.033, -10.89, 0.109, -16.1 ] + }, + { + "time": 0.1667, + "value": -15.69, + "curve": [ 0.2, -15.45, 0.263, 24 ] + }, + { + "time": 0.3, + "value": 23.95, + "curve": [ 0.341, 23.91, 0.38, 20.42 ] + }, + { + "time": 0.4, + "value": 13.72, + "curve": [ 0.436, 1.64, 0.469, -22.42 ] + }, + { + "time": 0.5667, + "value": -22.06, + "curve": [ 0.592, -21.97, 0.619, -12.65 ] + }, + { + "time": 0.6333, + "value": -12.97, + "curve": [ 0.649, -13.32, 0.672, -23.19 ] + }, + { + "time": 0.7333, + "value": -23.77, + "curve": [ 0.753, -23.95, 0.784, 18.1 ] + }, + { + "time": 0.8333, + "value": 18.04, + "curve": [ 0.896, 17.97, 0.968, -8.44 ] + }, + { + "time": 1.0667, + "value": -8.3, + "curve": [ 1.102, -8.25, 1.147, 1.32 ] + }, + { + "time": 1.2, + "value": 1.29, + "curve": [ 1.225, 1.28, 1.264, -9.04 ] + }, + { + "time": 1.3333, + "value": -9.07, + "curve": [ 1.359, -9.08, 1.367, -0.8 ] + }, + { + "time": 1.4, + "value": -0.93, + "curve": [ 1.45, -1.14, 1.485, -13.55 ] + }, + { + "time": 1.5333, + "value": -13.67, + "curve": [ 1.589, -13.81, 1.592, -4.95 ] + }, + { + "time": 1.6333, + "value": -4.9, + "curve": [ 1.659, -4.87, 1.672, -6.82 ] + }, + { + "time": 1.7, + "value": -6.85, + "curve": [ 1.732, -6.89, 1.741, 23.58 ] + }, + { + "time": 1.8, + "value": 23.61, + "curve": [ 1.855, 23.65, 1.942, -2.54 ] + }, + { + "time": 1.9667, + "value": -7.74, + "curve": [ 1.979, -10.39, 2.03, -19.23 ] + }, + { + "time": 2.0667, + "value": -19.56, + "curve": [ 2.092, -19.79, 2.116, -10.89 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tongue2": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.192, -3.18 ] + }, + { + "time": 0.2, + "value": -3.18, + "curve": [ 0.217, -3.18, 0.25, 52.29 ] + }, + { + "time": 0.2667, + "value": 52.29, + "curve": [ 0.333, 52.29, 0.506, 33.61 ] + }, + { + "time": 0.5333, + "value": 17.71, + "curve": [ 0.545, 10.61, 0.575, -38.38 ] + }, + { + "time": 0.6, + "value": -63.26, + "curve": [ 0.613, -75.71, 0.625, -74.25 ] + }, + { + "time": 0.6333, + "value": -74.25, + "curve": [ 0.65, -74.25, 0.666, -50.57 ] + }, + { + "time": 0.7, + "value": -42.92, + "curve": [ 0.715, -39.42, 0.803, -33.62 ] + }, + { + "time": 0.8333, + "value": -32.97, + "curve": [ 0.884, -31.92, 0.934, -31.56 ] + }, + { + "time": 0.9667, + "value": -31.29, + "curve": [ 1.012, -30.9, 1.051, -29.92 ] + }, + { + "time": 1.0667, + "value": -28.95, + "curve": [ 1.105, -26.65, 1.142, -20.34 ] + }, + { + "time": 1.1667, + "value": -20.34, + "curve": [ 1.192, -20.34, 1.242, -24.26 ] + }, + { + "time": 1.2667, + "value": -24.26, + "curve": [ 1.283, -24.26, 1.317, -19.87 ] + }, + { + "time": 1.3333, + "value": -19.87, + "curve": [ 1.358, -19.87, 1.428, -21.71 ] + }, + { + "time": 1.4333, + "value": -22.11, + "curve": [ 1.481, -25.54, 1.508, -36.17 ] + }, + { + "time": 1.5333, + "value": -36.17, + "curve": [ 1.575, -36.17, 1.648, -17.58 ] + }, + { + "time": 1.7, + "value": -13.32, + "curve": [ 1.748, -9.35, 1.861, -3.44 ] + }, + { + "time": 1.9333, + "value": -1.54, + "curve": [ 1.975, -0.45, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.283, 0, 0.423, -0.54, 0.283, 0, 0.435, 0.96 ] + }, + { + "time": 0.5333, + "x": 6.19, + "y": 1.39, + "curve": [ 0.567, 8.27, 0.633, 45.26, 0.555, 1.49, 0.62, 1.67 ] + }, + { + "time": 0.6667, + "x": 57.07, + "y": 1.67, + "curve": [ 0.706, 70.68, 0.76, 94.14, 0.729, 1.67, 0.764, 1.67 ] + }, + { + "time": 0.8333, + "x": 94.09, + "y": 1.67, + "curve": [ 1.21, 93.82, 1.098, 7.05, 1.195, 1.67, 1.676, 1.67 ] + }, + { + "time": 1.9333, + "x": 6.19, + "y": 1.67, + "curve": [ 1.983, 6.14, 2.083, 0, 1.983, 1.67, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "tongue3": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.142, -1.29 ] + }, + { + "time": 0.2, + "value": 4.21, + "curve": [ 0.209, 5.09, 0.25, 52.29 ] + }, + { + "time": 0.2667, + "value": 52.29, + "curve": [ 0.333, 52.29, 0.491, 43.05 ] + }, + { + "time": 0.5333, + "value": 17.71, + "curve": [ 0.551, 6.94, 0.577, -41.44 ] + }, + { + "time": 0.6, + "value": -50.22, + "curve": [ 0.613, -55.02, 0.625, -24.1 ] + }, + { + "time": 0.6333, + "value": -24.1, + "curve": [ 0.65, -24.1, 0.683, 52.67 ] + }, + { + "time": 0.7, + "value": 52.67, + "curve": [ 0.733, 52.67, 0.8, -50.91 ] + }, + { + "time": 0.8333, + "value": -50.91, + "curve": [ 0.867, -50.91, 0.933, 36.54 ] + }, + { + "time": 0.9667, + "value": 36.54, + "curve": [ 0.992, 36.54, 1.042, -47.34 ] + }, + { + "time": 1.0667, + "value": -47.34, + "curve": [ 1.092, -47.34, 1.142, 5.53 ] + }, + { + "time": 1.1667, + "value": 5.53, + "curve": [ 1.192, 5.53, 1.242, -19.25 ] + }, + { + "time": 1.2667, + "value": -19.94, + "curve": [ 1.298, -20.82, 1.313, -13.2 ] + }, + { + "time": 1.3333, + "value": -2.03, + "curve": [ 1.368, 17.44, 1.408, 54.04 ] + }, + { + "time": 1.4333, + "value": 54.04, + "curve": [ 1.458, 54.04, 1.519, 43.79 ] + }, + { + "time": 1.5333, + "value": 35.49, + "curve": [ 1.581, 8.1, 1.658, -36.24 ] + }, + { + "time": 1.7, + "value": -36.24, + "curve": [ 1.758, -36.24, 1.875, 13.61 ] + }, + { + "time": 1.9333, + "value": 13.61, + "curve": [ 1.983, 13.61, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.283, 0, 0.45, 11.48, 0.283, 0, 0.45, 3.7 ] + }, + { "time": 0.5333, "x": 11.48, "y": 3.7 }, + { "time": 2.1333 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -2.53, + "curve": [ 0.079, -2.45, 0.302, -25.1 ] + }, + { + "time": 0.3333, + "value": -25.81, + "curve": [ 0.389, -27.07, 0.484, -26.23 ] + }, + { + "time": 0.5333, + "value": -26.79, + "curve": [ 0.561, -27.1, 0.608, -31.99 ] + }, + { + "time": 0.6333, + "value": -31.97, + "curve": [ 0.725, -31.89, 0.763, -10.53 ] + }, + { + "time": 0.8333, + "value": -7.75, + "curve": [ 0.911, -4.71, 1.308, -5.82 ] + }, + { + "time": 1.4667, + "value": -5.82, + "curve": [ 1.541, -5.82, 1.632, -4.15 ] + }, + { + "time": 1.7, + "value": -4.14, + "curve": [ 1.766, -4.13, 1.845, -11.09 ] + }, + { + "time": 1.9333, + "value": -11.09, + "curve": [ 1.983, -11.09, 2.083, -2.53 ] + }, + { "time": 2.1333, "value": -2.53 } + ], + "translate": [ + { + "curve": [ 0.083, 0, 0.25, 11.69, 0.083, 0, 0.25, -2.81 ] + }, + { + "time": 0.3333, + "x": 11.69, + "y": -2.81, + "curve": [ 0.408, 11.69, 0.558, 0, 0.408, -2.81, 0.558, 0 ] + }, + { "time": 0.6333 } + ], + "scale": [ + { + "time": 0.6333, + "curve": [ 0.65, 1, 0.666, 1.076, 0.65, 1, 0.683, 1 ] + }, + { + "time": 0.7, + "x": 1.103, + "curve": [ 0.737, 1.132, 0.8, 1.162, 0.733, 1, 0.8, 1 ] + }, + { + "time": 0.8333, + "x": 1.162, + "curve": [ 1.05, 1.162, 1.483, 1, 1.05, 1, 1.483, 1 ] + }, + { "time": 1.7 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "curve": [ 0.074, -0.1, 0.093, -16.93 ] + }, + { + "time": 0.1, + "value": -19.19, + "curve": [ 0.117, -24.39, 0.157, -24.35 ] + }, + { + "time": 0.2, + "value": -24.36, + "curve": [ 0.252, -24.36, 0.311, -22.81 ] + }, + { + "time": 0.4333, + "value": -22.8, + "curve": [ 0.628, -22.79, 0.776, -25.56 ] + }, + { + "time": 1.2333, + "value": -25.57, + "curve": [ 1.378, -25.58, 1.525, 2.24 ] + }, + { + "time": 1.7333, + "value": 2.24, + "curve": [ 1.797, 2.48, 1.732, -17.39 ] + }, + { + "time": 1.8, + "value": -17.18, + "curve": [ 1.923, -16.81, 2.073, 0.17 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "y": 1.27, + "curve": [ 0.027, -0.41, 0.053, -46.34, 0.023, 3.93, 0.05, 71.17 ] + }, + { + "time": 0.0667, + "x": -73.27, + "y": 71.17, + "curve": [ 0.088, -115.35, 0.169, -316.46, 0.103, 71.88, 0.17, 60.5 ] + }, + { + "time": 0.2, + "x": -392.1, + "y": 9.43, + "curve": [ 0.231, -419.09, 0.231, -422.04, 0.231, 9.43, 0.231, 9.43 ] + }, + { "time": 0.2667, "x": -422.04, "y": 9.43, "curve": "stepped" }, + { + "time": 0.6, + "x": -422.04, + "y": 9.43, + "curve": [ 0.643, -422.04, 0.688, -403.61, 0.643, 9.43, 0.688, 9.43 ] + }, + { "time": 0.7333, "x": -403.61, "y": 9.43, "curve": "stepped" }, + { + "time": 1.7333, + "x": -403.61, + "y": 9.43, + "curve": [ 1.769, -403.61, 1.793, -341.64, 1.768, 9.43, 1.783, 111.02 ] + }, + { + "time": 1.8, + "x": -308.05, + "y": 111.02, + "curve": [ 1.813, -248.48, 1.9, 0, 1.858, 109.79, 1.928, 38.95 ] + }, + { + "time": 1.9333, + "curve": [ 1.983, 0, 2.083, 0.76, 1.983, 0, 2.122, 0 ] + }, + { "time": 2.1333, "y": 1.27 } + ] + }, + "front-foot2": { + "rotate": [ + {}, + { "time": 0.0333, "value": -17.85 }, + { "time": 0.0667, "value": -27.51 }, + { "time": 0.1, "value": -21.45 }, + { "time": 0.1333, "value": -12.42 }, + { "time": 0.1667, "value": -1.36 }, + { "time": 0.2, "value": -17.5 }, + { "time": 0.6, "value": -17.43 }, + { "time": 0.7, "value": -21.13, "curve": "stepped" }, + { "time": 1.7333, "value": -21.13 }, + { "time": 1.8, "value": -41.83 }, + { "time": 1.8667, "value": -1.1 }, + { "time": 1.9333 } + ] + }, + "front-foot3": { + "rotate": [ + {}, + { "time": 0.0333, "value": 1.2 }, + { "time": 0.1, "value": 8.93 }, + { + "time": 0.2, + "value": 26.93, + "curve": [ 0.217, 26.93, 0.224, 25.26 ] + }, + { "time": 0.2333, "value": 16.32, "curve": "stepped" }, + { "time": 1.7333, "value": 16.32 }, + { "time": 1.7667, "value": 24.81 }, + { "time": 1.8, "value": -12.37 }, + { "time": 1.8333, "value": -17.66 }, + { "time": 1.9, "value": 9.39 }, + { "time": 1.9333, "value": 16.11 }, + { "time": 2 } + ], + "translate": [ + { "x": -29.67, "curve": "stepped" }, + { "time": 1.7333, "x": -29.67 }, + { "time": 1.8, "x": -34.03, "y": 8.95 }, + { "time": 2.1333, "x": -29.67 } + ] + }, + "back-hand2": { + "rotate": [ + { "value": -21.46 }, + { "time": 0.2, "value": -21.93 }, + { "time": 0.3, "value": -8.39 }, + { "time": 0.4333, "value": -5.38 }, + { "time": 0.5333, "value": -30.38 }, + { "time": 0.6333, "value": -55.56 }, + { "time": 0.7, "value": -18.74 }, + { "time": 0.7667, "value": -20.26 }, + { "time": 0.8333, "value": -21.46 } + ] + }, + "saddle": { + "rotate": [ + { + "value": -3.18, + "curve": [ 0.042, -3.18, 0.132, -3.3 ] + }, + { + "time": 0.1667, + "value": -3.04, + "curve": [ 0.278, -2.2, 0.517, 8.87 ] + }, + { + "time": 0.6333, + "value": 8.87, + "curve": [ 0.683, 8.87, 0.772, -1.92 ] + }, + { + "time": 0.8333, + "value": -2.37, + "curve": [ 0.9, -2.86, 1.258, -3.18 ] + }, + { + "time": 1.4, + "value": -3.18, + "curve": [ 1.458, -3.18, 1.575, -7.06 ] + }, + { + "time": 1.6333, + "value": -7.06, + "curve": [ 1.715, -7.06, 1.86, -0.12 ] + }, + { + "time": 1.9667, + "value": -0.07, + "curve": [ 2.05, -0.03, 2.09, -3.18 ] + }, + { "time": 2.1333, "value": -3.18 } + ], + "translate": [ + { + "x": 12.68, + "y": -2.67, + "curve": [ 0.042, 12.68, 0.125, 22.76, 0.042, -2.67, 0.125, -3.36 ] + }, + { + "time": 0.1667, + "x": 22.76, + "y": -3.36, + "curve": [ 0.283, 22.76, 0.517, 9.26, 0.283, -3.36, 0.517, -0.42 ] + }, + { + "time": 0.6333, + "x": 9.26, + "y": -0.42, + "curve": [ 0.658, 9.26, 0.708, 12.68, 0.658, -0.42, 0.708, -2.67 ] + }, + { "time": 0.7333, "x": 12.68, "y": -2.67 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "value": -0.37, + "curve": [ 0.067, -0.37, 0.2, -0.95 ] + }, + { + "time": 0.2667, + "value": -0.95, + "curve": [ 0.325, -0.95, 0.466, -15.05 ] + }, + { + "time": 0.5, + "value": -17.95, + "curve": [ 0.567, -23.58, 0.6, -27.12 ] + }, + { + "time": 0.6333, + "value": -27.12, + "curve": [ 0.658, -27.12, 0.688, -23.12 ] + }, + { + "time": 0.7333, + "value": -18.56, + "curve": [ 0.75, -16.89, 0.803, -13.87 ] + }, + { + "time": 0.8333, + "value": -12.02, + "curve": [ 0.866, -10.04, 0.97, -6.28 ] + }, + { + "time": 1.0667, + "value": -6.13, + "curve": [ 1.133, -6.02, 1.204, -10.67 ] + }, + { + "time": 1.2667, + "value": -10.07, + "curve": [ 1.394, -8.87, 1.514, -1.13 ] + }, + { + "time": 1.6, + "value": -1.13, + "curve": [ 1.675, -1.13, 1.825, -6.56 ] + }, + { + "time": 1.9, + "value": -6.68, + "curve": [ 1.952, -6.76, 1.982, -6.39 ] + }, + { + "time": 2, + "value": -5.97, + "curve": [ 2.033, -5.22, 2.1, -0.37 ] + }, + { "time": 2.1333, "value": -0.37 } + ], + "translate": [ + { + "curve": [ 0.125, 0, 0.375, -17.92, 0.125, 0, 0.375, -1.75 ] + }, + { + "time": 0.5, + "x": -17.92, + "y": -1.75, + "curve": [ 0.589, -17.92, 0.707, -7.06, 0.589, -1.75, 0.707, -4.51 ] + }, + { + "time": 0.8333, + "x": -2.9, + "y": -6.57, + "curve": [ 1.102, 5.81, 1.414, 11.49, 1.102, -10.87, 1.414, -16.3 ] + }, + { + "time": 1.6, + "x": 11.49, + "y": -16.3, + "curve": [ 1.733, 11.49, 2, 0, 1.733, -16.3, 2, 0 ] + }, + { "time": 2.1333 } + ] + }, + "spineboy-back-arm-target": { + "translate": [ + {}, + { "time": 0.6333, "x": 56.17, "y": -58.56 }, + { "time": 0.8333, "x": 34.47, "y": -59.19 }, + { "time": 2.1333 } + ] + }, + "tail2": { + "rotate": [ + { + "value": -4.33, + "curve": [ 0.027, -1.91, 0.124, 3.51 ] + }, + { + "time": 0.1667, + "value": 6.45, + "curve": [ 0.211, 9.51, 0.278, 10.89 ] + }, + { + "time": 0.3333, + "value": 10.99, + "curve": [ 0.392, 11.09, 0.385, -13.61 ] + }, + { + "time": 0.5, + "value": -13.56, + "curve": [ 0.614, -13.52, 0.636, -5.75 ] + }, + { + "time": 0.7, + "value": -5.76, + "curve": [ 0.787, -5.77, 0.831, -10.17 ] + }, + { + "time": 0.9667, + "value": -10.46, + "curve": [ 1.072, -10.68, 1.279, -8.29 ] + }, + { + "time": 1.3333, + "value": -6.23, + "curve": [ 1.389, -4.11, 1.509, 5.53 ] + }, + { + "time": 1.5333, + "value": 9.75, + "curve": [ 1.551, 12.82, 1.619, 27.3 ] + }, + { + "time": 1.6667, + "value": 27.26, + "curve": [ 1.734, 27.21, 1.763, 9.86 ] + }, + { + "time": 1.8, + "value": 5.3, + "curve": [ 1.836, 0.84, 1.926, -9.62 ] + }, + { + "time": 2, + "value": -9.49, + "curve": [ 2.071, -9.36, 2.091, -7.25 ] + }, + { "time": 2.1333, "value": -4.33 } + ], + "translate": [ + { + "curve": [ 0.133, 0, 0.435, 3.44, 0.133, 0, 0.4, 0 ] + }, + { + "time": 0.5333, + "x": 11.88, + "curve": [ 0.618, 19.17, 0.84, 41.3, 0.575, 0, 0.848, 4.02 ] + }, + { + "time": 0.9667, + "x": 41.27, + "y": 4.03, + "curve": [ 1.78, 41.12, 1.763, 0.25, 1.213, 4.03, 1.848, 0.08 ] + }, + { "time": 2.1333 } + ] + }, + "tail4": { + "rotate": [ + { + "value": 13.37, + "curve": [ 0.033, 13.37, 0.101, 11.83 ] + }, + { + "time": 0.1333, + "value": 11.78, + "curve": [ 0.201, 11.66, 0.233, 16.73 ] + }, + { + "time": 0.2667, + "value": 16.73, + "curve": [ 0.289, 16.73, 0.316, 16.02 ] + }, + { + "time": 0.3333, + "value": 13.79, + "curve": [ 0.391, 6.36, 0.456, -4.32 ] + }, + { + "time": 0.4667, + "value": -5.61, + "curve": [ 0.482, -7.52, 0.499, -10.14 ] + }, + { + "time": 0.5667, + "value": -10.33, + "curve": [ 0.576, -10.36, 0.616, -10.01 ] + }, + { + "time": 0.6667, + "value": -8.03, + "curve": [ 0.781, -3.75, 0.935, 3.38 ] + }, + { + "time": 1, + "value": 4.13, + "curve": [ 1.033, 4.52, 1.063, 4.54 ] + }, + { + "time": 1.1333, + "value": 4.55, + "curve": [ 1.176, 4.56, 1.221, 4.12 ] + }, + { + "time": 1.2667, + "value": 4.18, + "curve": [ 1.349, 4.28, 1.417, 4.99 ] + }, + { + "time": 1.4333, + "value": 5.83, + "curve": [ 1.466, 7.48, 1.557, 19.49 ] + }, + { + "time": 1.6333, + "value": 19.57, + "curve": [ 1.775, 19.71, 1.857, 7.44 ] + }, + { + "time": 1.9667, + "value": 7.46, + "curve": [ 2.045, 7.48, 2.092, 13.37 ] + }, + { "time": 2.1333, "value": 13.37 } + ] + }, + "tail6": { + "rotate": [ + { + "value": 5.3, + "curve": [ 0.026, 7.49, 0.15, 12.9 ] + }, + { + "time": 0.2, + "value": 17.27, + "curve": [ 0.251, 21.71, 0.291, 24.53 ] + }, + { + "time": 0.3333, + "value": 24.59, + "curve": [ 0.403, 24.69, 0.376, -22.01 ] + }, + { + "time": 0.5333, + "value": -21.87, + "curve": [ 0.601, -21.81, 0.697, -13.33 ] + }, + { + "time": 0.7333, + "value": -10.11, + "curve": [ 0.748, -8.78, 0.863, 4.36 ] + }, + { + "time": 0.9333, + "value": 4.22, + "curve": [ 0.974, 4.13, 1.063, 1.22 ] + }, + { + "time": 1.1, + "value": 1.32, + "curve": [ 1.145, 1.44, 1.196, 6.12 ] + }, + { + "time": 1.2333, + "value": 6.08, + "curve": [ 1.279, 6.03, 1.324, -4.69 ] + }, + { + "time": 1.4333, + "value": -5.05, + "curve": [ 1.505, -5.28, 1.608, -1.45 ] + }, + { + "time": 1.6333, + "value": 0.1, + "curve": [ 1.647, 0.95, 1.722, 20.39 ] + }, + { + "time": 1.8, + "value": 20.34, + "curve": [ 1.888, 20.3, 1.878, -3.6 ] + }, + { + "time": 2, + "value": -3.58, + "curve": [ 2.055, -3.58, 2.121, 3.57 ] + }, + { "time": 2.1333, "value": 5.3 } + ] + }, + "tail8": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.081, -11.05, 0.147, 13.08 ] + }, + { + "time": 0.1667, + "value": 15.43, + "curve": [ 0.186, 17.83, 0.268, 21.77 ] + }, + { + "time": 0.3333, + "value": 21.83, + "curve": [ 0.472, 21.96, 0.454, -21.07 ] + }, + { + "time": 0.5, + "value": -21.25, + "curve": [ 0.544, -20.58, 0.551, -10.78 ] + }, + { + "time": 0.6, + "value": -10.88, + "curve": [ 0.618, -10.92, 0.651, -17.9 ] + }, + { + "time": 0.6667, + "value": -17.69, + "curve": [ 0.694, -17.33, 0.795, 1.24 ] + }, + { + "time": 0.8333, + "value": 3.93, + "curve": [ 0.858, 5.72, 0.886, 7.58 ] + }, + { + "time": 0.9333, + "value": 7.55, + "curve": [ 0.982, 7.53, 0.948, -9.49 ] + }, + { + "time": 1.0333, + "value": -9.59, + "curve": [ 1.083, -9.64, 1.1, -4.47 ] + }, + { + "time": 1.1333, + "value": -4.45, + "curve": [ 1.195, -4.4, 1.198, -11.22 ] + }, + { + "time": 1.2667, + "value": -11.14, + "curve": [ 1.314, -11.08, 1.359, -8.01 ] + }, + { + "time": 1.4667, + "value": -8.41, + "curve": [ 1.523, -8.63, 1.603, -26.32 ] + }, + { + "time": 1.6667, + "value": -26.16, + "curve": [ 1.702, -26.06, 1.729, 19.38 ] + }, + { + "time": 1.8, + "value": 19.14, + "curve": [ 1.862, 18.93, 1.956, -1.69 ] + }, + { + "time": 1.9667, + "value": -3.18, + "curve": [ 2.006, -8.48, 2.092, -10.76 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tail10": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.033, -10.89, 0.111, -30.73 ] + }, + { + "time": 0.1667, + "value": -30.9, + "curve": [ 0.229, -31.08, 0.335, 27.4 ] + }, + { + "time": 0.4, + "value": 27.6, + "curve": [ 0.439, 27.72, 0.524, -27.93 ] + }, + { + "time": 0.5667, + "value": -27.88, + "curve": [ 0.62, -27.81, 0.664, -24.25 ] + }, + { + "time": 0.7, + "value": -20.93, + "curve": [ 0.734, -17.79, 0.814, 5.46 ] + }, + { + "time": 0.8333, + "value": 13.09, + "curve": [ 0.842, 16.62, 0.87, 28.27 ] + }, + { + "time": 0.9, + "value": 28.51, + "curve": [ 0.947, 28.9, 0.985, -19.51 ] + }, + { + "time": 1, + "value": -22.12, + "curve": [ 1.01, -23.84, 1.038, -31.09 ] + }, + { + "time": 1.0667, + "value": -31.14, + "curve": [ 1.103, -31.22, 1.133, 19.55 ] + }, + { + "time": 1.1667, + "value": 19.35, + "curve": [ 1.201, 19.15, 1.213, -14.84 ] + }, + { + "time": 1.3, + "value": -14.94, + "curve": [ 1.347, -14.99, 1.37, 11.37 ] + }, + { + "time": 1.4, + "value": 11.31, + "curve": [ 1.432, 11.24, 1.523, -27.59 ] + }, + { + "time": 1.5333, + "value": -31.27, + "curve": [ 1.565, -42.53, 1.588, -42.01 ] + }, + { + "time": 1.6, + "value": -42.01, + "curve": [ 1.64, -41.99, 1.753, -25.24 ] + }, + { + "time": 1.7667, + "value": -18.25, + "curve": [ 1.778, -12.25, 1.82, 14.24 ] + }, + { + "time": 1.9, + "value": 14.82, + "curve": [ 1.929, 14.81, 2.041, -14.3 ] + }, + { + "time": 2.0667, + "value": -14.15, + "curve": [ 2.096, -13.98, 2.11, -10.93 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "jaw-inside": { + "rotate": [ + {}, + { "time": 0.7667, "value": 13.77 }, + { "time": 2.1333 } + ], + "translate": [ + {}, + { "time": 0.6, "x": -4.3, "y": 4.48 }, + { "time": 0.7667, "x": -23.59, "y": -9.32 }, + { "time": 2.1333 } + ], + "scale": [ + { "time": 0.6 }, + { "time": 0.7667, "x": 1.119 }, + { "time": 2.1333 } + ] + }, + "bone": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.125, 6.63 ] + }, + { + "time": 0.1667, + "value": 6.63, + "curve": [ 0.192, 6.63, 0.242, 2.54 ] + }, + { + "time": 0.2667, + "value": 2.54, + "curve": [ 0.308, 2.54, 0.406, 11.71 ] + }, + { + "time": 0.4333, + "value": 12.45, + "curve": [ 0.491, 14, 0.6, 14.87 ] + }, + { + "time": 0.7, + "value": 14.69, + "curve": [ 0.725, 14.64, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.825, -1.4, 0.887, 5.02 ] + }, + { + "time": 0.9, + "value": 5.61, + "curve": [ 0.936, 7.29, 1, 9.11 ] + }, + { + "time": 1.0333, + "value": 9.11, + "curve": [ 1.058, 9.11, 1.108, 6.88 ] + }, + { + "time": 1.1333, + "value": 6.88, + "curve": [ 1.158, 6.88, 1.208, 10.51 ] + }, + { + "time": 1.2333, + "value": 10.51, + "curve": [ 1.258, 10.51, 1.308, 6.4 ] + }, + { + "time": 1.3333, + "value": 6.4, + "curve": [ 1.358, 6.4, 1.408, 14.34 ] + }, + { + "time": 1.4333, + "value": 14.34, + "curve": [ 1.45, 14.34, 1.496, 0.94 ] + }, + { + "time": 1.5, + "value": 0.49, + "curve": [ 1.525, -2.03, 1.575, -5.85 ] + }, + { + "time": 1.6, + "value": -5.85, + "curve": [ 1.625, -5.85, 1.675, 4.87 ] + }, + { + "time": 1.7, + "value": 4.87, + "curve": [ 1.717, 4.87, 1.75, -1.8 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.817, -1.8, 1.917, 13.56 ] + }, + { + "time": 1.9667, + "value": 13.56, + "curve": [ 2.008, 13.56, 2.092, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.146, -2.69 ] + }, + { + "time": 0.1667, + "value": -4.33, + "curve": [ 0.219, -8.51, 0.262, -16.86 ] + }, + { + "time": 0.2667, + "value": -17.98, + "curve": [ 0.308, -27.29, 0.392, -48.51 ] + }, + { + "time": 0.4333, + "value": -48.51, + "curve": [ 0.5, -48.51, 0.633, 6.49 ] + }, + { + "time": 0.7, + "value": 6.49, + "curve": [ 0.725, 6.49, 0.765, 3.58 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.848, -8.2, 0.875, -10.86 ] + }, + { + "time": 0.9, + "value": -10.86, + "curve": [ 0.933, -10.86, 1, -4.95 ] + }, + { + "time": 1.0333, + "value": -4.95, + "curve": [ 1.058, -4.95, 1.108, -14.48 ] + }, + { + "time": 1.1333, + "value": -14.48, + "curve": [ 1.158, -14.48, 1.208, -10.43 ] + }, + { + "time": 1.2333, + "value": -10.43, + "curve": [ 1.258, -10.43, 1.308, -28.38 ] + }, + { + "time": 1.3333, + "value": -28.38, + "curve": [ 1.358, -28.38, 1.43, -14.4 ] + }, + { + "time": 1.4333, + "value": -13.27, + "curve": [ 1.45, -7.85, 1.483, 0.49 ] + }, + { + "time": 1.5, + "value": 0.49, + "curve": [ 1.525, 0.49, 1.594, -14.84 ] + }, + { + "time": 1.6, + "value": -15.95, + "curve": [ 1.637, -22.9, 1.675, -38.34 ] + }, + { + "time": 1.7, + "value": -38.34, + "curve": [ 1.717, -38.34, 1.749, -24.54 ] + }, + { + "time": 1.7667, + "value": -21.29, + "curve": [ 1.81, -13.5, 1.902, -4.2 ] + }, + { + "time": 1.9667, + "value": 2.36, + "curve": [ 2, 5.78, 2.022, 7.84 ] + }, + { + "time": 2.0667, + "value": 8.12, + "curve": [ 2.1, 8.33, 2.1, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.064, -0.37 ] + }, + { + "time": 0.1, + "value": -2.21, + "curve": [ 0.125, -3.49, 0.155, -5.64 ] + }, + { + "time": 0.1667, + "value": -6.06, + "curve": [ 0.208, -7.52, 0.242, -7.08 ] + }, + { + "time": 0.2667, + "value": -7.08, + "curve": [ 0.375, -7.08, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.98, 3.03 ] + }, + { + "time": 1.0333, + "value": 2.98, + "curve": [ 1.076, 2.94, 1.149, 3.42 ] + }, + { + "time": 1.1667, + "value": 3.92, + "curve": [ 1.185, 4.42, 1.222, 5.94 ] + }, + { + "time": 1.2667, + "value": 5.9, + "curve": [ 1.299, 5.87, 1.305, 0.43 ] + }, + { + "time": 1.3667, + "value": 0.38, + "curve": [ 1.432, 0.32, 1.437, 2.12 ] + }, + { + "time": 1.4667, + "value": 2.12, + "curve": [ 1.491, 2.12, 1.514, -6.82 ] + }, + { + "time": 1.5667, + "value": -9.65, + "curve": [ 1.582, -10.49, 1.616, -10.48 ] + }, + { + "time": 1.6333, + "value": -10.48, + "curve": [ 1.65, -10.48, 1.725, -3.32 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.786, -1.1, 1.932, 0.99 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.989, 2.33, 2.006, 6.83 ] + }, + { + "time": 2.0333, + "value": 6.85, + "curve": [ 2.065, 6.87, 2.109, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.064, 0.8 ] + }, + { + "time": 0.1, + "value": -1.04, + "curve": [ 0.125, -2.32, 0.16, -5.18 ] + }, + { + "time": 0.1667, + "value": -5.78, + "curve": [ 0.207, -9.38, 0.242, -15.67 ] + }, + { + "time": 0.2667, + "value": -15.67, + "curve": [ 0.375, -15.67, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.984, 2.94 ] + }, + { + "time": 1.0333, + "value": 3, + "curve": [ 1.085, 3.06, 1.133, 3.41 ] + }, + { + "time": 1.1667, + "value": 4.6, + "curve": [ 1.213, 6.21, 1.234, 8.82 ] + }, + { + "time": 1.2667, + "value": 8.27, + "curve": [ 1.302, 7.7, 1.313, 0.66 ] + }, + { + "time": 1.3667, + "value": 0.43, + "curve": [ 1.413, 0.24, 1.437, 3 ] + }, + { + "time": 1.4667, + "value": 3, + "curve": [ 1.491, 3, 1.515, -15.25 ] + }, + { + "time": 1.5667, + "value": -15.03, + "curve": [ 1.601, -14.89, 1.626, -12.84 ] + }, + { + "time": 1.6333, + "value": -12.25, + "curve": [ 1.674, -9, 1.75, -1.8 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.784, -1.8, 1.804, -12.17 ] + }, + { + "time": 1.8333, + "value": -12.06, + "curve": [ 1.872, -11.93, 1.935, -3.2 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.986, 4.89, 2.008, 10.05 ] + }, + { + "time": 2.0333, + "value": 9.69, + "curve": [ 2.07, 9.18, 2.088, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone5": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.062, 28.42 ] + }, + { + "time": 0.1, + "value": 28.6, + "curve": [ 0.147, 28.83, 0.153, 11.26 ] + }, + { + "time": 0.1667, + "value": 7.14, + "curve": [ 0.184, 2.13, 0.242, -3.09 ] + }, + { + "time": 0.2667, + "value": -3.09, + "curve": [ 0.375, -3.09, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.985, -10.79 ] + }, + { + "time": 1.0333, + "value": -11.13, + "curve": [ 1.076, -11.41, 1.131, 1.61 ] + }, + { + "time": 1.1667, + "value": 9.66, + "curve": [ 1.176, 11.68, 1.223, 16.67 ] + }, + { + "time": 1.2667, + "value": 17.42, + "curve": [ 1.291, 17.84, 1.325, 1.33 ] + }, + { + "time": 1.3667, + "value": 1.77, + "curve": [ 1.4, 2.12, 1.437, 13.5 ] + }, + { + "time": 1.4667, + "value": 13.5, + "curve": [ 1.491, 13.5, 1.53, 12.52 ] + }, + { + "time": 1.5667, + "value": 6.34, + "curve": [ 1.592, 2.04, 1.625, -8.5 ] + }, + { + "time": 1.6333, + "value": -9.29, + "curve": [ 1.668, -12.54, 1.752, -12.67 ] + }, + { + "time": 1.7667, + "value": -13.33, + "curve": [ 1.796, -14.63, 1.798, -16.98 ] + }, + { + "time": 1.8333, + "value": -16.88, + "curve": [ 1.885, -16.74, 1.93, -6.63 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.989, 7.11, 2.008, 15.58 ] + }, + { + "time": 2.0333, + "value": 15.21, + "curve": [ 2.07, 14.7, 2.109, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-leg1": { + "rotate": [ + { "value": -10.53 } + ] + }, + "spineboy-front-foot-target": { + "translate": [ + { + "curve": [ 0.075, 0, 0.225, 12.33, 0.075, 0, 0.225, 10.25 ] + }, + { + "time": 0.3, + "x": 12.33, + "y": 10.25, + "curve": [ 0.758, 12.33, 1.675, 0, 0.758, 10.25, 1.675, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-arm": { + "rotate": [ + { + "value": -14.35, + "curve": [ 0.133, -14.35, 0.4, -19.58 ] + }, + { "time": 0.5333, "value": -19.58 } + ], + "translate": [ + { + "curve": [ 0.033, 0, 0.1, -7.25, 0.033, 0, 0.1, -6.08 ] + }, + { + "time": 0.1333, + "x": -7.25, + "y": -6.08, + "curve": [ 0.167, -7.25, 0.233, -9.9, 0.167, -6.08, 0.233, -6.36 ] + }, + { + "time": 0.2667, + "x": -9.9, + "y": -6.36, + "curve": [ 0.292, -9.9, 0.342, -18.75, 0.292, -6.36, 0.342, -3.94 ] + }, + { + "time": 0.3667, + "x": -18.75, + "y": -3.94, + "curve": [ 0.442, -18.75, 0.592, -6.67, 0.442, -3.94, 0.621, -5.2 ] + }, + { + "time": 0.6667, + "x": -6.67, + "y": -5.49, + "curve": [ 0.766, -6.67, 0.886, -6.5, 0.906, -7.04, 0.862, -6.67 ] + }, + { + "time": 1, + "x": -6.32, + "y": -7.71, + "curve": [ 1.142, -6.09, 1.277, -5.84, 1.153, -8.88, 1.277, -10.04 ] + }, + { + "time": 1.3667, + "x": -5.84, + "y": -10.04, + "curve": [ 1.415, -5.84, 1.452, -5.89, 1.415, -10.04, 1.434, -9.81 ] + }, + { + "time": 1.4667, + "x": -5.93, + "y": -9.67, + "curve": [ 1.567, -6.22, 1.62, -6.67, 1.51, -9.48, 1.71, -9.28 ] + }, + { + "time": 1.8, + "x": -6.67, + "y": -9.26, + "curve": [ 1.883, -6.67, 2.05, 0, 1.883, -9.25, 2.05, 0 ] + }, + { "time": 2.1333 } + ], + "scale": [ + { + "curve": [ 0.036, 1, 0.083, 1.024, 0.036, 1, 0.083, 1.001 ] + }, + { + "time": 0.1333, + "x": 1.024, + "y": 1.001, + "curve": [ 0.259, 1.024, 0.411, 1, 0.259, 1.001, 0.411, 1 ] + }, + { + "time": 0.5, + "curve": [ 0.575, 1, 0.592, 1.192, 0.575, 1, 0.592, 1 ] + }, + { + "time": 0.6667, + "x": 1.192, + "curve": [ 0.75, 1.192, 0.858, 1.081, 0.75, 1, 0.858, 1 ] + }, + { + "time": 0.9333, + "x": 1.081, + "curve": [ 1.017, 1.081, 0.917, 1.085, 1.017, 1, 0.917, 1 ] + }, + { + "time": 1, + "x": 1.085, + "curve": [ 1.1, 1.085, 1.267, 1.087, 1.1, 1, 1.267, 1 ] + }, + { + "time": 1.3667, + "x": 1.087, + "curve": [ 1.375, 1.087, 1.418, 1.125, 1.375, 1, 1.418, 1 ] + }, + { + "time": 1.4667, + "x": 1.162, + "curve": [ 1.502, 1.188, 1.676, 1.354, 1.502, 1, 1.676, 1 ] + }, + { + "time": 1.8, + "x": 1.301, + "curve": [ 1.841, 1.284, 2.109, 1, 1.841, 1, 2.109, 1 ] + }, + { "time": 2.1333 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.4333, "value": -19.63 }, + { "time": 0.8333, "value": -15.18 }, + { "time": 1.3333, "value": -5.96 }, + { "time": 1.7667, "value": -18.16 }, + { "time": 2.1333 } + ], + "translate": [ + {}, + { "time": 0.4333, "x": -1.45, "y": 16.31, "curve": "stepped" }, + { "time": 1, "x": -1.45, "y": 16.31 }, + { "time": 2.1333 } + ] + }, + "back-arm": { + "rotate": [ + { "value": 44.83 } + ], + "scale": [ + { "time": 0.4667 }, + { "time": 0.5667, "x": 1.088 }, + { "time": 0.6667, "x": 1.311 }, + { "time": 0.7667, "x": 1.211 }, + { "time": 1.2, "x": 1.008 }, + { "time": 1.5667, "x": 1.137 }, + { "time": 1.8333 } + ] + }, + "back-bracer": { + "rotate": [ + { "value": -108.62 } + ] + }, + "back-leg1": { + "rotate": [ + { "value": -8.96 } + ] + }, + "back-leg2": { + "rotate": [ + { "value": -19.65 } + ] + }, + "back-leg3": { + "rotate": [ + { "value": 19.47 } + ] + }, + "back-foot1": { + "rotate": [ + { "value": 1.53 } + ] + }, + "back-thigh": { + "rotate": [ + { "value": 6.63 } + ] + }, + "back-knee": { + "rotate": [ + { "value": -8.23 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 72.21 } + ] + }, + "front-leg2": { + "rotate": [ + { "value": -9.63 } + ] + }, + "front-leg3": { + "rotate": [ + { "value": 3.66 } + ] + }, + "front-foot1": { + "rotate": [ + { "value": 0.4 } + ] + }, + "front-thigh": { + "rotate": [ + { "value": 8.81 } + ] + }, + "lower-leg": { + "rotate": [ + { "value": -12.66 } + ] + }, + "stirrup-strap1": { + "rotate": [ + { "value": 5.25 } + ] + }, + "stirrup-strap2": { + "rotate": [ + { "value": -9.39 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.054, 0, 0.199, -1.25, 0.072, 1.29, 0.192, -16.81 ] + }, + { + "time": 0.2333, + "x": -7.11, + "y": -16.81, + "curve": [ 0.327, -23.29, 0.379, -49.73, 0.317, -16.81, 0.452, 14.65 ] + }, + { + "time": 0.5667, + "x": -48.04, + "y": 14.37, + "curve": [ 0.653, -47.8, 0.826, -35.85, 0.674, 14.1, 0.729, -25.53 ] + }, + { + "time": 0.8333, + "x": -35.79, + "y": -25.53, + "curve": [ 0.867, -35.49, 0.908, -35.48, 0.858, -25.53, 0.908, -15.45 ] + }, + { + "time": 0.9333, + "x": -35.48, + "y": -15.45, + "curve": [ 0.967, -35.48, 1.039, -37.97, 0.967, -15.45, 1.033, -22.04 ] + }, + { + "time": 1.0667, + "x": -39.2, + "y": -22.04, + "curve": [ 1.135, -42.29, 1.163, -43.43, 1.1, -22.04, 1.167, -6.45 ] + }, + { + "time": 1.2, + "x": -44.12, + "y": -6.45, + "curve": [ 1.24, -44.87, 1.325, -45.15, 1.242, -6.45, 1.287, -13.6 ] + }, + { + "time": 1.3667, + "x": -45.15, + "y": -13.61, + "curve": [ 1.417, -45.15, 1.517, -47.61, 1.448, -13.61, 1.509, -1.81 ] + }, + { + "time": 1.5667, + "x": -47.61, + "y": -1.61, + "curve": [ 1.617, -47.61, 1.671, -48.3, 1.653, -1.32, 1.756, -23.41 ] + }, + { + "time": 1.7667, + "x": -37.45, + "y": -28.41, + "curve": [ 1.791, -34.66, 1.814, -20.75, 1.796, -41.85, 1.804, -47.93 ] + }, + { + "time": 1.8333, + "x": -18.68, + "y": -47.78, + "curve": [ 1.92, -9.88, 1.961, -5.23, 1.906, -47.41, 1.952, -34.09 ] + }, + { + "time": 2, + "x": -3.41, + "y": -22.62, + "curve": [ 2.045, -1.31, 2.1, 0, 2.013, -19.49, 2.1, 0 ] + }, + { "time": 2.1333 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.017, 0, 0.05, 0, 0.017, 0, 0.05, 102.43 ] + }, + { + "time": 0.0667, + "y": 102.43, + "curve": [ 0.1, 0, 0.15, 0, 0.1, 102.43, 0.15, 97.83 ] + }, + { + "time": 0.2, + "y": 93.23, + "curve": [ 0.223, 0, 0.246, 0, 0.223, 91.13, 0.246, -33.33 ] + }, + { + "time": 0.2667, + "y": -34.99, + "curve": [ 0.292, 0, 0.315, 0, 0.292, -36.97, 0.315, 84.03 ] + }, + { + "time": 0.3333, + "y": 84.03, + "curve": [ 0.35, 0, 0.383, 0, 0.35, 84.03, 0.383, 22.16 ] + }, + { + "time": 0.4, + "y": 22.16, + "curve": [ 0.467, 0, 0.6, 11.4, 0.467, 22.16, 0.6, -252.93 ] + }, + { + "time": 0.6667, + "x": 11.4, + "y": -252.93, + "curve": [ 0.7, 11.4, 0.767, 11.4, 0.7, -252.93, 0.767, -174.39 ] + }, + { + "time": 0.8, + "x": 11.4, + "y": -174.39, + "curve": [ 0.825, 11.4, 0.875, 11.4, 0.825, -174.39, 0.875, -201.79 ] + }, + { + "time": 0.9, + "x": 11.4, + "y": -201.79, + "curve": [ 0.925, 11.4, 0.975, 11.4, 0.925, -201.79, 0.975, -174.33 ] + }, + { + "time": 1, + "x": 11.4, + "y": -174.33, + "curve": [ 1.033, 11.4, 1.1, 11.4, 1.033, -174.33, 1.1, -221.22 ] + }, + { + "time": 1.1333, + "x": 11.4, + "y": -221.22, + "curve": [ 1.167, 11.4, 1.233, 11.4, 1.167, -221.22, 1.233, -167.36 ] + }, + { + "time": 1.2667, + "x": 11.4, + "y": -167.36, + "curve": [ 1.308, 11.4, 1.392, 11.4, 1.308, -167.36, 1.392, -214.56 ] + }, + { + "time": 1.4333, + "x": 11.4, + "y": -214.56, + "curve": [ 1.508, 11.4, 1.725, 11.4, 1.508, -214.56, 1.725, 48.39 ] + }, + { + "time": 1.8, + "x": 11.4, + "y": 48.39, + "curve": [ 1.857, 11.4, 1.953, 6.13, 1.857, 48.39, 1.953, -139.31 ] + }, + { + "time": 2.0333, + "x": 2.76, + "y": -153.62, + "curve": [ 2.072, 1.2, 2.107, 0, 2.072, -160.25, 2.107, 0 ] + }, + { "time": 2.1333 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 73.5, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + { "softness": 15.4, "stretch": true } + ], + "spineboy-front-arm-ik": [ + { "softness": 15, "stretch": true } + ], + "spineboy-front-leg-ik": [ + { "softness": 19.9, "bendPositive": false } + ] + }, + "drawOrder": [ + { + "offsets": [ + { "slot": "raptor-horn", "offset": 4 }, + { "slot": "front-thigh", "offset": -5 } + ] + } + ] + }, + "walk": { + "slots": { + "raptor-jaw-inside": { + "rgba": [ + { "color": "646464ff" }, + { "time": 0.6333, "color": "808080ff" }, + { "time": 1.2667, "color": "646464ff" } + ] + }, + "tail-shadow": { + "rgba": [ + { + "color": "00000000", + "curve": [ 0.158, 0, 0.442, 0, 0.158, 0, 0.442, 0, 0.158, 0, 0.442, 0, 0.158, 0, 0.441, 0.2 ] + }, + { + "time": 0.6, + "color": "00000033", + "curve": [ 0.633, 0, 1.075, 0, 0.633, 0, 1.075, 0, 0.633, 0, 1.075, 0, 0.805, 0.2, 1.075, 0 ] + }, + { "time": 1.2333, "color": "00000000" } + ], + "attachment": [ + { "name": "raptor-tail-shadow" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.27, -32.53 ] + }, + { + "time": 0.3667, + "value": -51.26, + "curve": [ 0.411, -59.91, 0.559, -84.04 ] + }, + { + "time": 0.6333, + "value": -84.29, + "curve": [ 1.183, -83.79, 1.129, 0.25 ] + }, + { "time": 1.2667 } + ], + "translate": [ + { "x": 381.92, "y": 36.5 }, + { "time": 0.6333, "x": -134.72, "y": 37.42 }, + { + "time": 0.7, + "x": -171.19, + "y": 126.07, + "curve": [ 0.733, -171.19, 0.798, -142.14, 0.74, 182.63, 0.8, 238.01 ] + }, + { + "time": 0.8333, + "x": -70.41, + "y": 238.01, + "curve": [ 0.845, -46.13, 1.125, 418.07, 0.983, 235.62, 1.129, 141.43 ] + }, + { + "time": 1.1667, + "x": 418.07, + "y": 115.18, + "curve": [ 1.192, 418.07, 1.231, 404.25, 1.202, 89.98, 1.2, 84.96 ] + }, + { "time": 1.2667, "x": 381.92, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { + "value": -4.78, + "curve": [ 0.033, -4.18, 0.05, -3.99 ] + }, + { + "time": 0.0667, + "value": -3.99, + "curve": [ 0.142, -3.99, 0.292, -12.5 ] + }, + { + "time": 0.3667, + "value": -12.5, + "curve": [ 0.477, -12.56, 0.584, -4.05 ] + }, + { + "time": 0.7, + "value": -3.99, + "curve": [ 0.775, -3.89, 0.925, -12.5 ] + }, + { + "time": 1, + "value": -12.5, + "curve": [ 1.067, -12.5, 1.216, -6.08 ] + }, + { "time": 1.2667, "value": -4.78 } + ], + "translate": [ + { + "x": 161.93, + "y": 34.05, + "curve": [ 0.022, 155.35, 0.047, 146.41, 0.021, 20.48, 0.039, 1.4 ] + }, + { + "time": 0.0667, + "x": 146.25, + "y": 1.68, + "curve": [ 0.124, 146.16, 0.29, 209.86, 0.18, 2.76, 0.294, 142.08 ] + }, + { + "time": 0.4, + "x": 209.5, + "y": 140.69, + "curve": [ 0.562, 208.96, 0.624, 145.35, 0.537, 141.96, 0.63, 4.69 ] + }, + { + "time": 0.7, + "x": 145.67, + "y": 2.06, + "curve": [ 0.745, 145.86, 0.928, 209.19, 0.818, 3.05, 0.95, 138.66 ] + }, + { + "time": 1.0333, + "x": 209.19, + "y": 139.3, + "curve": [ 1.1, 209.19, 1.221, 175.02, 1.13, 140.4, 1.235, 58.97 ] + }, + { "time": 1.2667, "x": 161.93, "y": 34.05 } + ] + }, + "back-foot-target": { + "rotate": [ + { + "value": -80.75, + "curve": [ 0.198, -90.08, 0.228, -92.2 ] + }, + { + "time": 0.3667, + "value": -92.34, + "curve": [ 0.42, -92.39, 0.517, -45.34 ] + }, + { + "time": 0.5667, + "value": -45.34, + "curve": [ 0.655, -45.71, 1.097, -71.9 ] + }, + { "time": 1.2667, "value": -80.75 } + ], + "translate": [ + { + "x": -187.61, + "y": -15.47, + "curve": [ 0.049, -223.65, 0.093, -245.68, 0.092, -17.15, 0.095, -1.05 ] + }, + { + "time": 0.1333, + "x": -245.95, + "y": 31.3, + "curve": [ 0.166, -245.38, 0.315, 6.48, 0.173, 64.21, 0.228, 125.64 ] + }, + { + "time": 0.3667, + "x": 86.5, + "y": 124.4, + "curve": [ 0.382, 110.05, 0.518, 358.22, 0.462, 123.17, 0.549, 44.45 ] + }, + { + "time": 0.5667, + "x": 361.92, + "y": 29.91, + "curve": [ 0.583, 361.92, 0.579, 373.34, 0.597, 4.36, 0.603, 0.79 ] + }, + { "time": 0.6333, "x": 316.72, "y": -26.42 }, + { "time": 1.2667, "x": -187.61, "y": -15.47 } + ] + }, + "front-leg1": { + "translate": [ + { + "curve": [ 0.017, 0, 0.3, 0.01, 0.017, 0, 0.293, 13.2 ] + }, + { + "time": 0.3667, + "x": -0.27, + "y": 13.9, + "curve": [ 0.46, -0.66, 0.548, -1.22, 0.44, 14.6, 0.57, 15.77 ] + }, + { + "time": 0.6333, + "x": -2.25, + "y": 16.95, + "curve": [ 0.705, -3.11, 0.783, -4.75, 0.697, 18.15, 0.783, 31.94 ] + }, + { + "time": 0.8333, + "x": -4.75, + "y": 31.94, + "curve": [ 0.875, -4.75, 0.963, -4.5, 0.875, 31.94, 0.985, 27.76 ] + }, + { + "time": 1, + "x": -3.8, + "y": 25.55, + "curve": [ 1.07, -2.46, 1.2, 0, 1.033, 20.56, 1.2, 0 ] + }, + { "time": 1.2667 } + ] + }, + "front-leg-target": { + "translate": [ + { + "x": -18.05, + "y": -2.89, + "curve": [ 0.135, -18.7, 0.286, -40.73, 0.171, -2.56, 0.416, -51.29 ] + }, + { + "time": 0.5333, + "x": -42.2, + "y": -52.27, + "curve": [ 0.558, -42.2, 0.568, -44.03, 0.558, -52.27, 0.608, -22.52 ] + }, + { + "time": 0.6333, + "x": -36.87, + "y": -22.52, + "curve": [ 0.702, -29.26, 0.783, -26.32, 0.683, -22.52, 0.763, -44.03 ] + }, + { + "time": 0.8333, + "x": -26.32, + "y": -72.37, + "curve": [ 0.875, -26.32, 0.939, -42.98, 0.855, -81, 0.916, -109.88 ] + }, + { + "time": 1, + "x": -42.64, + "y": -109.99, + "curve": [ 1.176, -42.56, 1.221, -18.42, 1.18, -110.24, 1.217, -3.39 ] + }, + { "time": 1.2667, "x": -18.05, "y": -2.89 } + ] + }, + "back-leg-target": { + "rotate": [ + { "value": 2.39 } + ], + "translate": [ + { + "x": -24.54, + "y": 15.12, + "curve": [ 0.135, -24.49, 0.417, -40.42, 0.121, 14.56, 0.327, -140.88 ] + }, + { + "time": 0.5667, + "x": -40.21, + "y": -141.76, + "curve": [ 0.705, -40.01, 1.147, -24.39, 0.939, -143.13, 1.122, 15.12 ] + }, + { "time": 1.2667, "x": -24.54, "y": 15.12 } + ] + }, + "tail1": { + "rotate": [ + { + "value": -1.81, + "curve": [ 0.091, -1.81, 0.208, 12.33 ] + }, + { + "time": 0.3333, + "value": 12.33, + "curve": [ 0.431, 12.33, 0.532, -1.81 ] + }, + { + "time": 0.6333, + "value": -1.81, + "curve": [ 0.735, -1.81, 0.838, 11.62 ] + }, + { + "time": 0.9333, + "value": 11.62, + "curve": [ 1.06, 11.62, 1.176, -1.81 ] + }, + { "time": 1.2667, "value": -1.81 } + ] + }, + "torso1": { + "rotate": [ + { + "value": 7.22, + "curve": [ 0.048, 7.93, 0.072, 8.38 ] + }, + { + "time": 0.1333, + "value": 8.39, + "curve": [ 0.202, 8.4, 0.302, 2.44 ] + }, + { + "time": 0.3667, + "value": 2.44, + "curve": [ 0.433, 2.44, 0.588, 6.89 ] + }, + { + "time": 0.6, + "value": 7.22, + "curve": [ 0.618, 7.7, 0.683, 8.43 ] + }, + { + "time": 0.7333, + "value": 8.43, + "curve": [ 0.83, 8.43, 0.91, 2.42 ] + }, + { + "time": 0.9667, + "value": 2.42, + "curve": [ 1.033, 2.42, 1.212, 6.06 ] + }, + { "time": 1.2667, "value": 7.22 } + ] + }, + "saddle": { + "rotate": [ + { "value": -2.52 }, + { "time": 0.3667, "value": -4.17 }, + { "time": 0.6333, "value": -3.85 }, + { "time": 1, "value": -3.1 }, + { "time": 1.2667, "value": -2.52 } + ], + "translate": [ + { "x": 5.87, "y": -0.06 }, + { + "time": 0.3667, + "curve": [ 0.377, -0.01, 0.417, -0.04, 0.377, 1.66, 0.417, 5.92 ] + }, + { + "time": 0.4333, + "x": -0.04, + "y": 5.92, + "curve": [ 0.518, -0.04, 0.603, -6.88, 0.518, 5.92, 0.603, 1.38 ] + }, + { "time": 0.6333, "x": -8.81, "y": 0.1 }, + { "time": 0.7, "x": -7.83, "y": -2.27 }, + { + "time": 1, + "curve": [ 1.01, -0.01, 1.05, -0.04, 1.01, 1.66, 1.05, 5.92 ] + }, + { + "time": 1.0667, + "x": -0.04, + "y": 5.92, + "curve": [ 1.151, -0.04, 1.237, 4.57, 1.151, 5.92, 1.237, 1.25 ] + }, + { "time": 1.2667, "x": 5.87, "y": -0.06 } + ] + }, + "torso2": { + "rotate": [ + { + "value": -4.19, + "curve": [ 0.092, -4.19, 0.275, -2.54 ] + }, + { + "time": 0.3667, + "value": -2.54, + "curve": [ 0.433, -2.54, 0.567, -4.19 ] + }, + { + "time": 0.6333, + "value": -4.19, + "curve": [ 0.725, -4.19, 0.908, -2.57 ] + }, + { + "time": 1, + "value": -2.57, + "curve": [ 1.067, -2.57, 1.2, -4.19 ] + }, + { "time": 1.2667, "value": -4.19 } + ], + "translate": [ + { + "curve": [ 0.087, -1.87, 0.131, -1.57, 0.098, 9.88, 0.131, 12.61 ] + }, + { + "time": 0.1667, + "x": -1.57, + "y": 12.61, + "curve": [ 0.246, -1.57, 0.278, 8.5, 0.246, 12.61, 0.258, -10.38 ] + }, + { + "time": 0.3667, + "x": 8.38, + "y": -10.24, + "curve": [ 0.453, 8.25, 0.581, 1.81, 0.441, -10.14, 0.598, -3.48 ] + }, + { + "time": 0.6333, + "x": 0.09, + "curve": [ 0.666, -0.98, 0.764, -1.48, 0.667, 3.32, 0.764, 12.61 ] + }, + { + "time": 0.8, + "x": -1.48, + "y": 12.61, + "curve": [ 0.88, -1.48, 0.937, 8.5, 0.88, 12.61, 0.907, -10.4 ] + }, + { + "time": 1.0333, + "x": 8.38, + "y": -10.24, + "curve": [ 1.12, 8.26, 1.218, 2.68, 1.101, -10.15, 1.195, -5.21 ] + }, + { "time": 1.2667 } + ] + }, + "front-arm1": { + "rotate": [ + { + "value": -348.35, + "curve": [ 0.305, -348.39, 0.452, -330.1 ] + }, + { + "time": 0.6333, + "value": -329.45, + "curve": [ 0.927, -329.66, 0.992, -347.92 ] + }, + { "time": 1.2667, "value": -348.35 } + ], + "translate": [ + { + "x": 8.89, + "y": 9.56, + "curve": [ 0.065, 11.51, 0.276, 24.33, 0.111, 9.62, 0.302, 1.67 ] + }, + { + "time": 0.3667, + "x": 24.1, + "y": -1.47, + "curve": [ 0.479, 23.82, 0.545, 23.42, 0.424, -4.23, 0.533, -7.49 ] + }, + { + "time": 0.6333, + "x": 20.65, + "y": -7.55, + "curve": [ 0.724, 17.83, 0.908, 4.35, 0.725, -7.6, 0.903, -1.56 ] + }, + { + "time": 1, + "x": 4.35, + "y": 2.31, + "curve": [ 1.058, 4.35, 1.197, 6.14, 1.052, 4.38, 1.17, 9.44 ] + }, + { "time": 1.2667, "x": 8.89, "y": 9.56 } + ] + }, + "neck": { + "rotate": [ + { + "value": -22.13, + "curve": [ 0.092, -22.13, 0.275, -4.12 ] + }, + { + "time": 0.3667, + "value": -4.12, + "curve": [ 0.433, -4.12, 0.567, -22.13 ] + }, + { + "time": 0.6333, + "value": -22.13, + "curve": [ 0.725, -22.13, 0.908, -4.12 ] + }, + { + "time": 1, + "value": -4.12, + "curve": [ 1.067, -4.12, 1.2, -22.13 ] + }, + { "time": 1.2667, "value": -22.13 } + ], + "translate": [ + { + "x": 19.46, + "y": -14.29, + "curve": [ 0.046, 22.71, 0.064, 24.67, 0.027, -20.08, 0.067, -33.27 ] + }, + { + "time": 0.1, + "x": 24.7, + "y": -32.71, + "curve": [ 0.121, 24.71, 0.187, 5.34, 0.136, -32.09, 0.207, -18.93 ] + }, + { + "time": 0.2333, + "x": 5.16, + "y": -13.23, + "curve": [ 0.287, 4.94, 0.337, 5.54, 0.274, -4.5, 0.332, 3.98 ] + }, + { + "time": 0.3667, + "x": 7.2, + "y": 3.98, + "curve": [ 0.426, 10.51, 0.575, 18.6, 0.433, 3.98, 0.6, -8.7 ] + }, + { + "time": 0.6333, + "x": 21.66, + "y": -14.29, + "curve": [ 0.668, 23.45, 0.697, 24.53, 0.668, -20.07, 0.697, -32.36 ] + }, + { + "time": 0.7333, + "x": 24.7, + "y": -32.71, + "curve": [ 0.788, 24.95, 0.82, 4.99, 0.782, -33.17, 0.829, -21.82 ] + }, + { + "time": 0.8667, + "x": 5.16, + "y": -13.23, + "curve": [ 0.921, 5.36, 0.955, 6.02, 0.897, -6.22, 0.965, 3.98 ] + }, + { + "time": 1, + "x": 7.71, + "y": 3.98, + "curve": [ 1.046, 9.42, 1.17, 14.8, 1.067, 3.98, 1.227, -5.97 ] + }, + { "time": 1.2667, "x": 19.46, "y": -14.29 } + ] + }, + "back-arm1": { + "rotate": [ + { + "value": 36.77, + "curve": [ 0.275, 36.57, 0.464, 23.85 ] + }, + { + "time": 0.6333, + "value": 23.86, + "curve": [ 0.891, 23.91, 1.035, 36.68 ] + }, + { "time": 1.2667, "value": 36.77 } + ], + "translate": [ + { + "x": -20.37, + "y": -12.6, + "curve": [ 0.092, -20.37, 0.567, -30.85, 0.25, -12.16, 0.508, -9.49 ] + }, + { + "time": 0.6333, + "x": -30.85, + "y": -9.16, + "curve": [ 0.725, -30.85, 1.143, -20.51, 0.794, -9.16, 1.086, -12.8 ] + }, + { "time": 1.2667, "x": -20.37, "y": -12.6 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -5.12, + "curve": [ 0.042, -5.12, 0.104, -2.7 ] + }, + { + "time": 0.1667, + "value": 0.89, + "curve": [ 0.241, 5.11, 0.317, 10.59 ] + }, + { + "time": 0.3667, + "value": 10.59, + "curve": [ 0.433, 10.59, 0.567, 0.72 ] + }, + { + "time": 0.6333, + "value": 0.72, + "curve": [ 0.733, 0.72, 0.933, 7.72 ] + }, + { + "time": 1.0333, + "value": 7.72, + "curve": [ 1.092, 7.72, 1.208, -5.12 ] + }, + { "time": 1.2667, "value": -5.12 } + ] + }, + "front-arm2": { + "rotate": [ + { + "value": 20.46, + "curve": [ 0.092, 20.46, 0.29, 10.44 ] + }, + { + "time": 0.3667, + "value": 4.66, + "curve": [ 0.493, -4.86, 0.54, -11 ] + }, + { + "time": 0.6333, + "value": -11.14, + "curve": [ 0.725, -11.27, 0.934, 1.22 ] + }, + { + "time": 1, + "value": 6.77, + "curve": [ 1.042, 10.27, 1.15, 20.26 ] + }, + { "time": 1.2667, "value": 20.46 } + ] + }, + "head": { + "rotate": [ + { + "value": 21.27, + "curve": [ 0.121, 21.36, 0.118, 5.37 ] + }, + { + "time": 0.3333, + "value": 5.74, + "curve": [ 0.443, 5.92, 0.579, 20.65 ] + }, + { + "time": 0.6333, + "value": 20.71, + "curve": [ 0.761, 20.68, 0.8, 6.02 ] + }, + { + "time": 1.0333, + "value": 5.76, + "curve": [ 1.101, 5.8, 1.208, 21.57 ] + }, + { "time": 1.2667, "value": 21.27 } + ], + "translate": [ + { + "x": 9.88, + "y": -21.53, + "curve": [ 0.066, 2.9, 0.151, -2.12, 0.05, -24.49, 0.139, -28.72 ] + }, + { + "time": 0.2, + "x": -1.68, + "y": -28.94, + "curve": [ 0.281, -0.96, 0.392, 24.71, 0.278, -29.21, 0.37, -7.39 ] + }, + { + "time": 0.4667, + "x": 24.76, + "y": -6.79, + "curve": [ 0.645, 24.69, 0.668, -1.21, 0.622, -7.06, 0.597, -30.92 ] + }, + { + "time": 0.8, + "x": -1.47, + "y": -30.78, + "curve": [ 0.89, -1.64, 0.979, 25.37, 0.877, -30.73, 0.97, -7.01 ] + }, + { + "time": 1.0667, + "x": 25.27, + "y": -6.86, + "curve": [ 1.147, 25.19, 1.217, 15.2, 1.141, -6.75, 1.217, -18.56 ] + }, + { "time": 1.2667, "x": 9.88, "y": -21.53 } + ] + }, + "back-arm2": { + "rotate": [ + { + "value": -28.13, + "curve": [ 0.32, -28.07, 0.434, 0.42 ] + }, + { + "time": 0.6333, + "value": 0.31, + "curve": [ 0.941, 0.13, 0.968, -27.95 ] + }, + { "time": 1.2667, "value": -28.13 } + ] + }, + "stirrup": { + "rotate": [ + { "value": -17.15 }, + { "time": 0.3667, "value": -11.14 }, + { "time": 0.6333, "value": -6.95 }, + { "time": 1, "value": -11.84 }, + { "time": 1.2667, "value": -17.15 } + ], + "translate": [ + { "x": 8.98, "y": 4.99 }, + { "time": 0.3667, "x": 4.85, "y": 1 }, + { "time": 0.6333, "x": 7.76, "y": -2.99 }, + { "time": 1, "x": 4.85, "y": 1 }, + { "time": 1.2667, "x": 8.98, "y": 4.99 } + ] + }, + "front-foot2": { + "rotate": [ + { "value": 36.9 }, + { "time": 0.0667, "value": 7.88 }, + { "time": 0.1333, "value": 4.67 }, + { + "time": 0.5, + "value": 6.81, + "curve": [ 0.572, 7.04, 0.605, 6.97 ] + }, + { + "time": 0.6333, + "value": 6.25, + "curve": [ 0.686, 4.19, 0.708, -105.88 ] + }, + { + "time": 0.8, + "value": -104.63, + "curve": [ 0.955, -102.9, 1.188, 34.64 ] + }, + { "time": 1.2667, "value": 36.9 } + ] + }, + "front-hand": { + "rotate": [ + { + "value": -60.7, + "curve": [ 0.318, -60.68, 0.442, -6 ] + }, + { + "time": 0.6333, + "value": -6.02, + "curve": [ 0.847, -6.04, 1.076, -60.24 ] + }, + { "time": 1.2667, "value": -60.7 } + ] + }, + "horn-back": { + "translate": [ + { "x": 7.01, "y": 42.92 }, + { "time": 0.3667, "x": 13.17, "y": 33.39 }, + { "time": 0.6333, "x": 7.68, "y": 13.94 }, + { "time": 1, "x": 12.26, "y": 35.06 }, + { "time": 1.2667, "x": 7.01, "y": 42.92 } + ] + }, + "jaw": { + "rotate": [ + { + "value": -9.46, + "curve": [ 0.088, -9.55, 0.339, -16.63 ] + }, + { + "time": 0.3667, + "value": -17.51, + "curve": [ 0.562, -23.77, 0.8, -23.24 ] + }, + { + "time": 0.8333, + "value": -23.22, + "curve": [ 0.963, -23.18, 1.179, -9.56 ] + }, + { "time": 1.2667, "value": -9.46 } + ], + "translate": [ + { + "x": -0.34, + "y": -2.02, + "curve": [ 0.092, -0.34, 0.275, 0.79, 0.092, -2.02, 0.275, 9.47 ] + }, + { + "time": 0.3667, + "x": 0.79, + "y": 9.47, + "curve": [ 0.425, 0.79, 0.575, 0.93, 0.425, 9.47, 0.575, 6.04 ] + }, + { + "time": 0.6333, + "x": 0.93, + "y": 6.09, + "curve": [ 0.642, 0.93, 0.783, 0.79, 0.714, 6.16, 0.783, 9.47 ] + }, + { + "time": 0.8333, + "x": 0.79, + "y": 9.47, + "curve": [ 0.875, 0.79, 0.958, 0.57, 0.875, 9.47, 0.979, 7.85 ] + }, + { + "time": 1, + "x": 0.57, + "y": 7.17, + "curve": [ 1.067, 0.57, 1.2, -0.34, 1.083, 4.51, 1.2, -2.02 ] + }, + { "time": 1.2667, "x": -0.34, "y": -2.02 } + ] + }, + "back-foot2": { + "rotate": [ + { + "curve": [ 0.019, 0, 0.046, 0.68 ] + }, + { + "time": 0.0667, + "value": -2.42, + "curve": [ 0.127, -11.89, 0.157, -75.22 ] + }, + { + "time": 0.3, + "value": -74.35, + "curve": [ 0.372, -74.4, 0.44, -55.45 ] + }, + { + "time": 0.4667, + "value": -38.51, + "curve": [ 0.488, -24.72, 0.512, 30.14 ] + }, + { + "time": 0.6, + "value": 30.17, + "curve": [ 0.631, 30.18, 0.649, 17.16 ] + }, + { + "time": 0.6667, + "value": 2.1, + "curve": [ 0.758, 2.1, 1.2, 0 ] + }, + { "time": 1.2667 } + ] + }, + "back-hand": { + "rotate": [ + { + "value": -26.17, + "curve": [ 0.077, -26.23, 0.165, -15.08 ] + }, + { + "time": 0.2667, + "value": -15.07, + "curve": [ 0.348, -15.06, 0.514, -27.32 ] + }, + { + "time": 0.6333, + "value": -27.37, + "curve": [ 0.745, -27.37, 0.844, -14.99 ] + }, + { + "time": 1, + "value": -15.02, + "curve": [ 1.117, -15.05, 1.104, -26.34 ] + }, + { "time": 1.2667, "value": -26.17 } + ] + }, + "tongue1": { + "rotate": [ + { "value": 21.55 }, + { "time": 0.8, "value": 0.08 }, + { "time": 1.2667, "value": 21.55 } + ] + }, + "front-foot3": { + "rotate": [ + { "value": -1.65 }, + { + "time": 0.1, + "value": -3.94, + "curve": [ 0.158, -3.94, 0.308, -3.82 ] + }, + { + "time": 0.3667, + "value": -3.82, + "curve": [ 0.433, -3.82, 0.511, -6.36 ] + }, + { + "time": 0.6333, + "value": -6.62, + "curve": [ 0.701, -7.05, 0.687, 24.84 ] + }, + { + "time": 0.7333, + "value": 25.1, + "curve": [ 0.766, 25.1, 0.821, -23.09 ] + }, + { + "time": 0.8667, + "value": -22.96, + "curve": [ 0.975, -22.65, 1.139, 10.93 ] + }, + { + "time": 1.2, + "value": 10.93, + "curve": [ 1.217, 10.93, 1.267, 5.95 ] + }, + { "time": 1.2667, "value": -1.65 } + ] + }, + "tongue2": { + "rotate": [ + { + "value": -16.02, + "curve": [ 0.286, -15.88, 0.415, -3.2 ] + }, + { + "time": 0.6333, + "value": -3.21, + "curve": [ 0.988, -3.22, 1.102, -16.12 ] + }, + { "time": 1.2667, "value": -16.02 } + ] + }, + "tongue3": { + "rotate": [ + { + "value": -16.02, + "curve": [ 0.027, -12.15, 0.123, 0.49 ] + }, + { + "time": 0.2333, + "value": 0.44, + "curve": [ 0.457, 0.33, 0.862, -36.42 ] + }, + { + "time": 1.0667, + "value": -36.41, + "curve": [ 1.168, -36.41, 1.248, -19.42 ] + }, + { "time": 1.2667, "value": -16.02 } + ] + }, + "neck2": { + "rotate": [ + { "value": 24.69 } + ], + "translate": [ + { + "x": -6.84, + "y": -1.8, + "curve": [ 0.164, -6.45, 0.256, -6.42, 0.092, -1.8, 0.308, -0.45 ] + }, + { + "time": 0.4, + "x": -6.24, + "y": -0.45, + "curve": [ 0.514, -6.09, 0.567, -6.03, 0.467, -0.45, 0.567, -1.81 ] + }, + { + "time": 0.6333, + "x": -6.03, + "y": -1.81, + "curve": [ 0.725, -6.03, 0.908, -10.81, 0.725, -1.81, 0.908, -0.35 ] + }, + { + "time": 1, + "x": -10.81, + "y": -0.35, + "curve": [ 1.067, -10.81, 1.137, -7.65, 1.067, -0.35, 1.2, -1.8 ] + }, + { "time": 1.2667, "x": -6.84, "y": -1.8 } + ] + }, + "spineboy-hip": { + "translate": [ + { + "x": 53.69, + "y": -49.21, + "curve": [ 0.118, 53.52, 0.275, 16.15, 0.092, -49.21, 0.275, -32.56 ] + }, + { + "time": 0.3667, + "x": 16.15, + "y": -32.56, + "curve": [ 0.433, 16.15, 0.542, 53.47, 0.433, -32.56, 0.567, -49.21 ] + }, + { + "time": 0.6333, + "x": 53.69, + "y": -49.21, + "curve": [ 0.742, 53.95, 0.908, 15.73, 0.725, -49.21, 0.908, -29.74 ] + }, + { + "time": 1, + "x": 15.73, + "y": -29.74, + "curve": [ 1.067, 15.73, 1.11, 54.45, 1.067, -29.74, 1.2, -49.21 ] + }, + { "time": 1.2667, "x": 53.69, "y": -49.21 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "value": -37.55, + "curve": [ 0.092, -37.55, 0.275, -12.2 ] + }, + { + "time": 0.3667, + "value": -12.2, + "curve": [ 0.498, -12.2, 0.567, -37.66 ] + }, + { + "time": 0.6333, + "value": -37.66, + "curve": [ 0.725, -37.66, 0.908, -12.19 ] + }, + { + "time": 1, + "value": -12.19, + "curve": [ 1.131, -12.19, 1.2, -37.55 ] + }, + { "time": 1.2667, "value": -37.55 } + ] + }, + "front-arm": { + "translate": [ + { "y": -5.28 }, + { "time": 0.1333, "x": -3.61, "y": -8.36 }, + { "time": 0.3667, "x": -8.05, "y": -5.53 }, + { "time": 0.6333 }, + { "time": 1, "x": -7.45, "y": -1.99 }, + { "time": 1.2667, "y": -5.28 } + ] + }, + "gun": { + "rotate": [ + { + "value": -11.68, + "curve": [ 0.03, -14.01, 0.177, -31.16 ] + }, + { + "time": 0.3, + "value": -31.16, + "curve": [ 0.368, -31.16, 0.475, -9.46 ] + }, + { + "time": 0.5333, + "value": -9.58, + "curve": [ 0.737, -9.99, 0.77, -31.38 ] + }, + { + "time": 0.9333, + "value": -31.11, + "curve": [ 0.992, -31.11, 1.108, -9.58 ] + }, + { + "time": 1.1667, + "value": -9.58, + "curve": [ 1.192, -9.58, 1.236, -9.68 ] + }, + { "time": 1.2667, "value": -11.68 } + ], + "translate": [ + { + "curve": [ 0.042, -0.34, 0.098, -0.45, 0.039, -4.02, 0.098, -6.86 ] + }, + { + "time": 0.1333, + "x": -0.45, + "y": -6.86, + "curve": [ 0.194, -0.45, 0.256, 2.36, 0.194, -6.86, 0.245, 6.35 ] + }, + { + "time": 0.3333, + "x": 2.35, + "y": 6.16, + "curve": [ 0.439, 2.35, 0.579, 0.46, 0.418, 5.98, 0.6, 2.06 ] + }, + { + "time": 0.6333, + "curve": [ 0.668, -0.29, 0.731, -0.45, 0.679, -2.83, 0.731, -6.86 ] + }, + { + "time": 0.7667, + "x": -0.45, + "y": -6.86, + "curve": [ 0.828, -0.45, 0.89, 2.35, 0.828, -6.86, 0.899, 6.27 ] + }, + { + "time": 0.9667, + "x": 2.35, + "y": 6.16, + "curve": [ 1.053, 2.36, 1.213, 0.51, 1.051, 6.03, 1.226, 2.28 ] + }, + { "time": 1.2667 } + ] + }, + "tail2": { + "rotate": [ + { + "value": -12.17, + "curve": [ 0.091, -12.17, 0.207, -1.45 ] + }, + { + "time": 0.3333, + "value": -1.45, + "curve": [ 0.441, -1.45, 0.555, -12.17 ] + }, + { + "time": 0.6667, + "value": -12.17, + "curve": [ 0.896, -12.17, 0.874, -1.45 ] + }, + { + "time": 1, + "value": -1.45, + "curve": [ 1.107, -1.45, 1.117, -12.17 ] + }, + { "time": 1.2667, "value": -12.17 } + ] + }, + "tail3": { + "rotate": [ + { + "value": -7.15, + "curve": [ 0.083, -7.15, 0.25, 0.58 ] + }, + { + "time": 0.3333, + "value": 0.58, + "curve": [ 0.408, 0.58, 0.558, -7.15 ] + }, + { + "time": 0.6333, + "value": -7.15, + "curve": [ 0.717, -7.15, 0.883, 0.75 ] + }, + { + "time": 0.9667, + "value": 0.75, + "curve": [ 1.042, 0.75, 1.192, -7.15 ] + }, + { "time": 1.2667, "value": -7.15 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.87, 0.158, 0, 0.475, -0.87 ] + }, + { + "time": 0.6333, + "x": -9.87, + "y": -0.87, + "curve": [ 0.792, -9.87, 1.108, 0, 0.792, -0.87, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail4": { + "rotate": [ + { + "value": -3.83, + "curve": [ 0.013, -4.23, 0.024, -4.53 ] + }, + { + "time": 0.0333, + "value": -4.53, + "curve": [ 0.068, -4.53, 0.116, -3.13 ] + }, + { + "time": 0.1667, + "value": -0.39, + "curve": [ 0.24, 3.5, 0.318, 9.15 ] + }, + { + "time": 0.3667, + "value": 9.15, + "curve": [ 0.442, 9.15, 0.592, -4.53 ] + }, + { + "time": 0.6667, + "value": -4.53, + "curve": [ 0.75, -4.53, 0.917, 9 ] + }, + { + "time": 1, + "value": 9, + "curve": [ 1.065, 9, 1.187, -1.17 ] + }, + { "time": 1.2667, "value": -3.83 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -4.06, 0.158, 0, 0.475, 0.32 ] + }, + { + "time": 0.6333, + "x": -4.06, + "y": 0.32, + "curve": [ 0.792, -4.06, 1.108, 0, 0.792, 0.32, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail5": { + "rotate": [ + { + "value": -7.24, + "curve": [ 0.026, -8.78, 0.048, -9.9 ] + }, + { + "time": 0.0667, + "value": -9.9, + "curve": [ 0.093, -9.9, 0.129, -9.01 ] + }, + { + "time": 0.1667, + "value": -6.6, + "curve": [ 0.248, -1.49, 0.343, 7.39 ] + }, + { + "time": 0.4, + "value": 7.39, + "curve": [ 0.475, 7.39, 0.625, -9.9 ] + }, + { + "time": 0.7, + "value": -9.9, + "curve": [ 0.783, -9.9, 0.95, 7.29 ] + }, + { + "time": 1.0333, + "value": 7.29, + "curve": [ 1.09, 7.29, 1.19, -2.46 ] + }, + { "time": 1.2667, "value": -7.24 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -7.55, 0.158, 0, 0.475, 0.73 ] + }, + { + "time": 0.6333, + "x": -7.55, + "y": 0.73, + "curve": [ 0.792, -7.55, 1.108, 0, 0.792, 0.73, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail6": { + "rotate": [ + { + "value": -4.22, + "curve": [ 0.038, -7.4, 0.074, -9.9 ] + }, + { + "time": 0.1, + "value": -9.9, + "curve": [ 0.119, -9.9, 0.142, -9.79 ] + }, + { + "time": 0.1667, + "value": -8.22, + "curve": [ 0.255, -2.85, 0.369, 9.89 ] + }, + { + "time": 0.4333, + "value": 9.89, + "curve": [ 0.508, 9.89, 0.658, -9.9 ] + }, + { + "time": 0.7333, + "value": -9.9, + "curve": [ 0.817, -9.9, 0.983, 10.12 ] + }, + { + "time": 1.0667, + "value": 10.12, + "curve": [ 1.115, 10.12, 1.196, 1.7 ] + }, + { "time": 1.2667, "value": -4.22 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.06, 0.158, 0, 0.475, 1.58 ] + }, + { + "time": 0.6333, + "x": -9.06, + "y": 1.58, + "curve": [ 0.792, -9.06, 1.108, 0, 0.792, 1.58, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail7": { + "rotate": [ + { + "value": -0.76, + "curve": [ 0.051, -5.53, 0.1, -9.9 ] + }, + { + "time": 0.1333, + "value": -9.9, + "curve": [ 0.144, -9.9, 0.155, -10.45 ] + }, + { + "time": 0.1667, + "value": -9.89, + "curve": [ 0.257, -5.87, 0.394, 11.3 ] + }, + { + "time": 0.4667, + "value": 11.3, + "curve": [ 0.542, 11.3, 0.692, -9.9 ] + }, + { + "time": 0.7667, + "value": -9.9, + "curve": [ 0.85, -9.9, 1.017, 11.52 ] + }, + { + "time": 1.1, + "value": 11.52, + "curve": [ 1.141, 11.52, 1.205, 5.07 ] + }, + { "time": 1.2667, "value": -0.76 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.93, 0.158, 0, 0.475, 1.32 ] + }, + { + "time": 0.6333, + "x": -9.93, + "y": 1.32, + "curve": [ 0.792, -9.93, 1.108, 0, 0.792, 1.32, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail8": { + "rotate": [ + { + "value": 4.71, + "curve": [ 0.062, -2.19, 0.126, -10.79 ] + }, + { + "time": 0.1667, + "value": -10.79, + "curve": [ 0.25, -10.79, 0.417, 16.46 ] + }, + { + "time": 0.5, + "value": 16.46, + "curve": [ 0.575, 16.46, 0.725, -9.9 ] + }, + { + "time": 0.8, + "value": -9.9, + "curve": [ 0.883, -9.9, 1.05, 15.57 ] + }, + { + "time": 1.1333, + "value": 15.57, + "curve": [ 1.167, 15.57, 1.217, 10.43 ] + }, + { "time": 1.2667, "value": 4.71 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -12.57, 0.158, 0, 0.475, 1.97 ] + }, + { + "time": 0.6333, + "x": -12.57, + "y": 1.97, + "curve": [ 0.792, -12.57, 1.108, 0, 0.792, 1.97, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail9": { + "rotate": [ + { + "value": 7.95, + "curve": [ 0.072, 1.87, 0.151, -6.79 ] + }, + { + "time": 0.2, + "value": -6.79, + "curve": [ 0.283, -6.79, 0.45, 15.08 ] + }, + { + "time": 0.5333, + "value": 15.08, + "curve": [ 0.608, 15.08, 0.758, -6.79 ] + }, + { + "time": 0.8333, + "value": -6.79, + "curve": [ 0.917, -6.79, 1.083, 13.8 ] + }, + { + "time": 1.1667, + "value": 13.8, + "curve": [ 1.193, 13.8, 1.229, 11.28 ] + }, + { "time": 1.2667, "value": 7.95 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -15.36, 0.158, 0, 0.475, 2.18 ] + }, + { + "time": 0.6333, + "x": -15.36, + "y": 2.18, + "curve": [ 0.792, -15.36, 1.108, 0, 0.792, 2.18, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail10": { + "rotate": [ + { + "value": 8.87, + "curve": [ 0.078, 3.96, 0.177, -5.98 ] + }, + { + "time": 0.2333, + "value": -5.98, + "curve": [ 0.317, -5.98, 0.483, 10.93 ] + }, + { + "time": 0.5667, + "value": 10.93, + "curve": [ 0.642, 10.93, 0.792, -5.98 ] + }, + { + "time": 0.8667, + "value": -5.98, + "curve": [ 0.95, -5.98, 1.117, 11.58 ] + }, + { + "time": 1.2, + "value": 11.58, + "curve": [ 1.219, 11.58, 1.242, 10.48 ] + }, + { "time": 1.2667, "value": 8.87 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -19.3, 0.158, 0, 0.475, 1.9 ] + }, + { + "time": 0.6333, + "x": -19.3, + "y": 1.9, + "curve": [ 0.792, -19.3, 1.108, 0, 0.792, 1.9, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "horn-front": { + "translate": [ + { + "x": 3.46, + "y": -20.12, + "curve": [ 0.092, 3.46, 0.243, 3.41, 0.092, -20.12, 0.292, -6.08 ] + }, + { + "time": 0.3667, + "x": 3.57, + "y": -1.24, + "curve": [ 0.407, 3.63, 0.567, 5.09, 0.484, 6.36, 0.567, 11.01 ] + }, + { + "time": 0.6333, + "x": 5.09, + "y": 11.01, + "curve": [ 0.725, 5.09, 0.807, 2.74, 0.725, 11.01, 0.918, -0.08 ] + }, + { + "time": 1, + "x": 2.77, + "y": -5.87, + "curve": [ 1.116, 2.79, 1.2, 3.46, 1.049, -9.34, 1.2, -20.12 ] + }, + { "time": 1.2667, "x": 3.46, "y": -20.12 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "value": 3.65, + "curve": [ 0.091, 3.65, 0.233, 5.42 ] + }, + { + "time": 0.3667, + "value": 5.41, + "curve": [ 0.45, 5.4, 0.566, 3.49 ] + }, + { + "time": 0.6333, + "value": 3.49, + "curve": [ 0.732, 3.49, 0.89, 5.39 ] + }, + { + "time": 1.0333, + "value": 5.38, + "curve": [ 1.112, 5.38, 1.207, 3.65 ] + }, + { "time": 1.2667, "value": 3.65 } + ] + }, + "jaw-inside": { + "translate": [ + { "x": -8.34, "y": -3.22 }, + { "time": 0.6333, "x": 1.17, "y": -1.6 }, + { "time": 1.2667, "x": -8.34, "y": -3.22 } + ] + }, + "bone": { + "rotate": [ + { + "value": 2, + "curve": [ 0.031, 3.38, 0.075, 4.99 ] + }, + { + "time": 0.1, + "value": 5.01, + "curve": [ 0.194, 5.05, 0.398, -0.88 ] + }, + { + "time": 0.4667, + "value": -0.83, + "curve": [ 0.538, -0.78, 0.671, 4.88 ] + }, + { + "time": 0.7333, + "value": 4.88, + "curve": [ 0.846, 4.88, 1.032, -0.57 ] + }, + { + "time": 1.1, + "value": -0.57, + "curve": [ 1.142, -0.57, 1.201, 0.04 ] + }, + { "time": 1.2667, "value": 2 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.019, -8.93, 0.062, -21.67 ] + }, + { + "time": 0.1333, + "value": -21.67, + "curve": [ 0.23, -21.67, 0.346, 21.39 ] + }, + { + "time": 0.4667, + "value": 21.32, + "curve": [ 0.639, 21.22, 0.626, -21.47 ] + }, + { + "time": 0.7667, + "value": -21.67, + "curve": [ 0.863, -21.81, 1.013, 21.01 ] + }, + { + "time": 1.1, + "value": 21.32, + "curve": [ 1.204, 21.68, 1.245, 9.94 ] + }, + { "time": 1.2667 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, 11.45 ] + }, + { + "time": 0.3333, + "value": 11.45, + "curve": [ 0.407, 11.39, 0.547, 0.26 ] + }, + { + "time": 0.6333, + "value": 0.18, + "curve": [ 0.708, 0.18, 0.858, 11.29 ] + }, + { + "time": 0.9333, + "value": 11.29, + "curve": [ 1.017, 11.29, 1.183, 0 ] + }, + { "time": 1.2667 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0, -6.15, 0.044, -10.86 ] + }, + { + "time": 0.1, + "value": -11.06, + "curve": [ 0.161, -11.27, 0.267, 10.59 ] + }, + { + "time": 0.3667, + "value": 10.49, + "curve": [ 0.554, 10.32, 0.603, -10.61 ] + }, + { + "time": 0.7333, + "value": -10.98, + "curve": [ 0.782, -10.93, 0.949, 10.3 ] + }, + { + "time": 1.0333, + "value": 10.41, + "curve": [ 1.144, 10.56, 1.255, 4.55 ] + }, + { "time": 1.2667 } + ] + }, + "bone5": { + "rotate": [ + { + "value": 6.23, + "curve": [ 0.042, 3.41, 0.105, 3.02 ] + }, + { + "time": 0.1667, + "value": 3.03, + "curve": [ 0.222, 3.04, 0.334, 11.98 ] + }, + { + "time": 0.4333, + "value": 11.93, + "curve": [ 0.561, 11.87, 0.662, 3.23 ] + }, + { + "time": 0.8, + "value": 3.22, + "curve": [ 0.849, 3.21, 1.016, 11.92 ] + }, + { + "time": 1.1, + "value": 12.03, + "curve": [ 1.162, 12.12, 1.223, 9.21 ] + }, + { "time": 1.2667, "value": 6.23 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.3667, "x": -12.14, "y": 8.93 }, + { "time": 0.6333 }, + { "time": 1, "x": -10.79, "y": 7.94 }, + { "time": 1.2667 } + ] + }, + "front-hand2": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.275, 15.62 ] + }, + { + "time": 0.3667, + "value": 15.62, + "curve": [ 0.433, 15.62, 0.567, 0 ] + }, + { + "time": 0.6333, + "curve": [ 0.733, 0, 0.933, 15.62 ] + }, + { + "time": 1.0333, + "value": 15.62, + "curve": [ 1.092, 15.62, 1.208, 0 ] + }, + { "time": 1.2667 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 52.99 } + ] + }, + "head-control": { + "translate": [ + { + "y": -55.1, + "curve": [ 0.063, -1.75, 0.253, -5.83, 0.092, -55.1, 0.298, -20 ] + }, + { + "time": 0.3667, + "x": -5.85, + "y": -6.98, + "curve": [ 0.437, -5.86, 0.539, -2.89, 0.44, 6.9, 0.567, 28.15 ] + }, + { + "time": 0.6333, + "y": 28.15, + "curve": [ 0.709, 2.32, 0.858, 5.7, 0.708, 28.15, 0.867, 1.15 ] + }, + { + "time": 0.9333, + "x": 5.7, + "y": -12.05, + "curve": [ 1.017, 5.7, 1.157, 2.64, 1.02, -29.22, 1.183, -55.1 ] + }, + { "time": 1.2667, "y": -55.1 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.021, 0, 0.048, 3.27, 0.021, 0, 0.044, -99.76 ] + }, + { + "time": 0.0667, + "x": 5.16, + "y": -99.76, + "curve": [ 0.099, 8.46, 0.145, 12.65, 0.089, -99.76, 0.134, 67.18 ] + }, + { + "time": 0.1667, + "x": 12.65, + "y": 68.39, + "curve": [ 0.188, 12.65, 0.251, 7.24, 0.211, 70.03, 0.244, -68.23 ] + }, + { + "time": 0.2667, + "x": 4.95, + "y": -68.19, + "curve": [ 0.324, -3.3, 0.337, -4.96, 0.307, -68.11, 0.329, -15.36 ] + }, + { + "time": 0.3667, + "x": -10.49, + "y": -14.91, + "curve": [ 0.404, -17.53, 0.441, -25.51, 0.416, -14.33, 0.484, -84.78 ] + }, + { + "time": 0.5, + "x": -25.51, + "y": -101.71, + "curve": [ 0.566, -25.51, 0.634, -23.99, 0.543, -148.75, 0.634, -191.81 ] + }, + { + "time": 0.7, + "x": -21.81, + "y": -183.43, + "curve": [ 0.915, -14.78, 1.123, 0, 0.915, -156.4, 1.123, 0 ] + }, + { "time": 1.2667 } + ] + }, + "head2": { + "rotate": [ + { + "value": 11.97, + "curve": [ 0.021, 10.46, 0.104, 4.49 ] + }, + { + "time": 0.1667, + "value": 4.55, + "curve": [ 0.312, 4.71, 0.419, 14.2 ] + }, + { + "time": 0.5, + "value": 14.11, + "curve": [ 0.671, 13.92, 0.686, 4.54 ] + }, + { + "time": 0.8, + "value": 4.56, + "curve": [ 0.953, 4.59, 1.029, 14.2 ] + }, + { + "time": 1.1333, + "value": 14.13, + "curve": [ 1.186, 14.1, 1.214, 14.03 ] + }, + { "time": 1.2667, "value": 11.97 } + ], + "scale": [ + { + "curve": [ 0.011, 0.995, 0.122, 0.985, 0.055, 1.007, 0.104, 1.011 ] + }, + { + "time": 0.1667, + "x": 0.985, + "y": 1.012, + "curve": [ 0.256, 0.985, 0.415, 1.014, 0.245, 1.013, 0.419, 0.988 ] + }, + { + "time": 0.5, + "x": 1.013, + "y": 0.988, + "curve": [ 0.579, 1.013, 0.693, 0.988, 0.62, 0.988, 0.713, 1.014 ] + }, + { + "time": 0.8, + "x": 0.988, + "y": 1.014, + "curve": [ 0.881, 0.988, 1.075, 1.014, 0.908, 1.014, 1.033, 0.988 ] + }, + { + "time": 1.1333, + "x": 1.014, + "y": 0.989, + "curve": [ 1.181, 1.014, 1.2, 1.011, 1.164, 0.989, 1.23, 0.995 ] + }, + { "time": 1.2667 } + ] + } + }, + "ik": { + "back-leg-ik": [ + { "softness": 66.9, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + {} + ], + "spineboy-front-arm-ik": [ + { "softness": 14.4, "stretch": true } + ] + }, + "events": [ + { "time": 0.6333, "name": "footstep" }, + { "time": 1.2667, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/raptor-pro.skel b/spine-haxe/example/assets/raptor-pro.skel new file mode 100644 index 000000000..e35ec23d5 Binary files /dev/null and b/spine-haxe/example/assets/raptor-pro.skel differ diff --git a/spine-haxe/example/assets/raptor.atlas b/spine-haxe/example/assets/raptor.atlas new file mode 100644 index 000000000..89cf60341 --- /dev/null +++ b/spine-haxe/example/assets/raptor.atlas @@ -0,0 +1,100 @@ +raptor.png + size: 1024, 512 + filter: Linear, Linear + scale: 0.5 +back-arm + bounds: 829, 88, 46, 25 + rotate: 90 +back-bracer + bounds: 195, 238, 39, 28 + rotate: 90 +back-hand + bounds: 724, 140, 36, 34 + rotate: 90 +back-knee + bounds: 760, 131, 49, 67 + rotate: 90 +back-thigh + bounds: 225, 238, 39, 24 + rotate: 90 +eyes-open + bounds: 975, 204, 47, 45 +front-arm + bounds: 969, 112, 48, 26 +front-bracer + bounds: 724, 97, 41, 29 + rotate: 90 +front-hand + bounds: 251, 239, 41, 38 +front-open-hand + bounds: 856, 76, 43, 44 + rotate: 90 +front-thigh + bounds: 729, 178, 57, 29 + rotate: 90 +gun + bounds: 894, 251, 107, 103 +gun-nohand + bounds: 764, 241, 105, 102 +head + bounds: 756, 345, 136, 149 +lower-leg + bounds: 475, 237, 73, 98 + rotate: 90 +mouth-grind + bounds: 975, 172, 47, 30 +mouth-smile + bounds: 975, 140, 47, 30 +neck + bounds: 366, 282, 18, 21 +raptor-back-arm + bounds: 636, 97, 82, 86 + rotate: 90 +raptor-body + bounds: 2, 2, 632, 233 +raptor-front-arm + bounds: 871, 168, 81, 102 + rotate: 90 +raptor-front-leg + bounds: 2, 237, 191, 257 +raptor-hindleg-back + bounds: 195, 279, 169, 215 +raptor-horn + bounds: 431, 312, 182, 80 + rotate: 90 +raptor-horn-back + bounds: 513, 318, 176, 77 + rotate: 90 +raptor-jaw + bounds: 894, 356, 126, 138 +raptor-jaw-tooth + bounds: 294, 240, 37, 48 + rotate: 90 +raptor-mouth-inside + bounds: 344, 241, 36, 41 + rotate: 90 +raptor-saddle-strap-back + bounds: 575, 242, 54, 74 +raptor-saddle-strap-front + bounds: 764, 182, 57, 95 + rotate: 90 +raptor-saddle-w-shadow + bounds: 592, 323, 162, 171 +raptor-tail-shadow + bounds: 366, 305, 189, 63 + rotate: 90 +raptor-tongue + bounds: 387, 239, 86, 64 +stirrup-back + bounds: 829, 136, 44, 35 + rotate: 90 +stirrup-front + bounds: 866, 121, 45, 50 + rotate: 90 +stirrup-strap + bounds: 918, 120, 49, 46 +torso + bounds: 636, 181, 54, 91 + rotate: 90 +visor + bounds: 631, 237, 131, 84 diff --git a/spine-haxe/example/assets/raptor.png b/spine-haxe/example/assets/raptor.png new file mode 100644 index 000000000..a67b73a21 Binary files /dev/null and b/spine-haxe/example/assets/raptor.png differ diff --git a/spine-haxe/example/assets/spineboy-pro.json b/spine-haxe/example/assets/spineboy-pro.json new file mode 100644 index 000000000..78ba1dc0f --- /dev/null +++ b/spine-haxe/example/assets/spineboy-pro.json @@ -0,0 +1,8707 @@ +{ +"skeleton": { + "hash": "itfFESDjM1c", + "spine": "4.1.17", + "x": -188.63, + "y": -7.94, + "width": 418.45, + "height": 686.2, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root", "rotation": 0.05 }, + { "name": "hip", "parent": "root", "y": 247.27 }, + { "name": "crosshair", "parent": "root", "x": 302.83, "y": 569.45, "color": "ff3f00ff" }, + { + "name": "aim-constraint-target", + "parent": "hip", + "length": 26.24, + "rotation": 19.61, + "x": 1.02, + "y": 5.62, + "color": "abe323ff" + }, + { "name": "rear-foot-target", "parent": "root", "x": 61.91, "y": 0.42, "color": "ff3f00ff" }, + { "name": "rear-leg-target", "parent": "rear-foot-target", "x": -33.91, "y": 37.34, "color": "ff3f00ff" }, + { + "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": 51.58, + "rotation": 45.78, + "x": 121.46, + "y": -0.76, + "color": "ff000dff" + }, + { + "name": "back-foot-tip", + "parent": "rear-foot", + "length": 50.3, + "rotation": -0.85, + "x": 51.17, + "y": 0.24, + "transform": "noRotationOrReflection", + "color": "ff000dff" + }, + { "name": "board-ik", "parent": "root", "x": -131.78, "y": 69.09, "color": "4c56ffff" }, + { "name": "clipping", "parent": "root" }, + { "name": "hoverboard-controller", "parent": "root", "rotation": -0.28, "x": -329.69, "y": 69.82, "color": "ff0004ff" }, + { "name": "exhaust1", "parent": "hoverboard-controller", "rotation": 3.02, "x": -249.68, "y": 53.39 }, + { "name": "exhaust2", "parent": "hoverboard-controller", "rotation": 26.34, "x": -191.6, "y": -22.92 }, + { + "name": "exhaust3", + "parent": "hoverboard-controller", + "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": "flare10", "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": "torso", + "parent": "hip", + "length": 42.52, + "rotation": 103.82, + "x": -1.62, + "y": 4.9, + "color": "e0da19ff" + }, + { "name": "torso2", "parent": "torso", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "torso3", "parent": "torso2", "length": 42.52, "x": 42.52, "color": "e0da19ff" }, + { "name": "front-shoulder", "parent": "torso3", "rotation": 255.89, "x": 18.72, "y": 19.33, "color": "00ff04ff" }, + { "name": "front-upper-arm", "parent": "front-shoulder", "length": 69.45, "rotation": -87.51, "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-foot-target", "parent": "root", "x": -13.53, "y": 0.04, "color": "ff3f00ff" }, + { "name": "front-leg-target", "parent": "front-foot-target", "x": -28.4, "y": 29.06, "color": "ff3f00ff" }, + { + "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": 41.01, + "rotation": 51.27, + "x": 128.76, + "y": -0.34, + "color": "00ff04ff" + }, + { + "name": "front-foot-tip", + "parent": "front-foot", + "length": 56.03, + "rotation": -1.68, + "x": 41.42, + "y": -0.09, + "transform": "noRotationOrReflection", + "color": "00ff04ff" + }, + { "name": "back-shoulder", "parent": "torso3", "rotation": -104.11, "x": 7.32, "y": -19.22, "color": "ff000dff" }, + { "name": "rear-upper-arm", "parent": "back-shoulder", "length": 51.94, "rotation": -65.45, "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.43, + "x": 34.42, + "y": -0.45, + "color": "ff000dff" + }, + { "name": "gun-tip", "parent": "gun", "rotation": 7.1, "x": 200.78, "y": 52.5, "color": "ff0000ff" }, + { + "name": "neck", + "parent": "torso3", + "length": 25.45, + "rotation": -31.54, + "x": 42.46, + "y": -0.31, + "color": "e0da19ff" + }, + { + "name": "head", + "parent": "neck", + "length": 131.79, + "rotation": 26.1, + "x": 27.66, + "y": -0.26, + "color": "e0da19ff" + }, + { + "name": "hair1", + "parent": "head", + "length": 47.23, + "rotation": -49.1, + "x": 149.83, + "y": -59.77, + "color": "e0da19ff" + }, + { + "name": "hair2", + "parent": "hair1", + "length": 55.57, + "rotation": 50.42, + "x": 47.23, + "y": 0.19, + "color": "e0da19ff" + }, + { + "name": "hair3", + "parent": "head", + "length": 62.22, + "rotation": -32.17, + "x": 164.14, + "y": 3.68, + "color": "e0da19ff" + }, + { + "name": "hair4", + "parent": "hair3", + "length": 80.28, + "rotation": 83.71, + "x": 62.22, + "y": -0.04, + "color": "e0da19ff" + }, + { "name": "hoverboard-thruster-front", "parent": "hoverboard-controller", "rotation": -29.2, "x": 95.77, "y": -2.99, "transform": "noRotationOrReflection" }, + { "name": "hoverboard-thruster-rear", "parent": "hoverboard-controller", "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, "color": "ffb900ff" }, + { "name": "muzzle-ring", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring2", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring3", "parent": "muzzle", "color": "ffb900ff" }, + { "name": "muzzle-ring4", "parent": "muzzle", "color": "ffb900ff" }, + { "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": "hoverboard-controller", "x": -110.56, "y": 2.62, "color": "000effff" }, + { + "name": "side-glow2", + "parent": "hoverboard-controller", + "x": -110.56, + "y": 2.62, + "scaleX": 0.738, + "scaleY": 0.738, + "color": "000effff" + }, + { "name": "head-control", "parent": "head", "x": 110.21, "color": "00a220ff" } +], +"slots": [ + { "name": "portal-bg", "bone": "portal" }, + { "name": "portal-shade", "bone": "portal-shade" }, + { "name": "portal-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": "hoverboard-controller" }, + { "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": "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": "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": 13, + "bones": [ "rear-upper-arm" ], + "target": "crosshair", + "mix": 0 + }, + { + "name": "aim-torso-ik", + "order": 8, + "bones": [ "aim-constraint-target" ], + "target": "crosshair" + }, + { + "name": "board-ik", + "order": 1, + "bones": [ "hoverboard-controller" ], + "target": "board-ik" + }, + { + "name": "front-foot-ik", + "order": 6, + "bones": [ "front-foot" ], + "target": "front-foot-target" + }, + { + "name": "front-leg-ik", + "order": 4, + "bones": [ "front-thigh", "front-shin" ], + "target": "front-leg-target", + "bendPositive": false + }, + { + "name": "rear-foot-ik", + "order": 7, + "bones": [ "rear-foot" ], + "target": "rear-foot-target" + }, + { + "name": "rear-leg-ik", + "order": 5, + "bones": [ "rear-thigh", "rear-shin" ], + "target": "rear-leg-target", + "bendPositive": false + } +], +"transform": [ + { + "name": "aim-front-arm-transform", + "order": 11, + "bones": [ "front-upper-arm" ], + "target": "aim-constraint-target", + "rotation": -180, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-head-transform", + "order": 10, + "bones": [ "head" ], + "target": "aim-constraint-target", + "rotation": 84.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-rear-arm-transform", + "order": 12, + "bones": [ "rear-upper-arm" ], + "target": "aim-constraint-target", + "x": 57.7, + "y": 56.4, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "aim-torso-transform", + "order": 9, + "bones": [ "torso" ], + "target": "aim-constraint-target", + "rotation": 69.5, + "shearY": -36, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "front-foot-board-transform", + "order": 2, + "bones": [ "front-foot-target" ], + "target": "hoverboard-controller", + "x": -69.8, + "y": 20.7, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "rear-foot-board-transform", + "order": 3, + "bones": [ "rear-foot-target" ], + "target": "hoverboard-controller", + "x": 86.6, + "y": 21.3, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "shoulder", + "bones": [ "back-shoulder" ], + "target": "front-shoulder", + "x": 40.17, + "y": -1.66, + "mixRotate": 0, + "mixX": -1, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "toes-board", + "order": 14, + "bones": [ "front-foot-tip", "back-foot-tip" ], + "target": "hoverboard-controller", + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 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 ], + "color": "ce3a3aff" + } + }, + "crosshair": { + "crosshair": { "width": 89, "height": 89 } + }, + "exhaust1": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "exhaust2": { + "hoverglow-small": { + "x": 0.01, + "y": -0.76, + "scaleX": 0.4208, + "scaleY": 0.8403, + "rotation": -89.25, + "width": 274, + "height": 75 + } + }, + "exhaust3": { + "hoverglow-small": { "scaleX": 0.4629, "scaleY": 0.8129, "rotation": -83.07, "width": 274, "height": 75 } + }, + "eye": { + "eye-indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -36.8, -91.35, 0.3, 46, 73.41, -91.35, 0.7, 2, 66, -87.05, -13.11, 0.70968, 46, 23.16, -13.11, 0.29032, 2, 66, -12.18, 34.99, 0.82818, 46, 98.03, 34.99, 0.17182, 2, 66, 38.07, -43.25, 0.59781, 46, 148.28, -43.25, 0.40219 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + }, + "eye-surprised": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 2, 66, -46.74, -89.7, 0.3, 46, 63.47, -89.7, 0.7, 2, 66, -77.58, -1.97, 0.71, 46, 32.63, -1.97, 0.29, 2, 66, 6.38, 27.55, 0.83, 46, 116.59, 27.55, 0.17, 2, 66, 37.22, -60.19, 0.6, 46, 147.44, -60.19, 0.4 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "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": { + "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.17846, 0, 0.49796, 0 ], + "triangles": [ 8, 9, 3, 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 0, 12, 13, 0, 11, 12, 0, 1, 11, 9, 2, 3, 1, 2, 10, 9, 10, 2 ], + "vertices": [ 2, 38, 18.17, 41.57, 0.7896, 39, 12.46, 46.05, 0.2104, 2, 38, 24.08, 40.76, 0.71228, 39, 16.12, 41.34, 0.28772, 2, 38, 29.81, 39.98, 0.55344, 39, 19.67, 36.78, 0.44656, 2, 38, 32.81, 41.67, 0.38554, 39, 23, 35.89, 0.61446, 2, 38, 37.86, 44.52, 0.25567, 39, 28.61, 34.4, 0.74433, 2, 38, 42.65, 47.22, 0.17384, 39, 33.92, 32.99, 0.82616, 1, 39, 64.15, 14.56, 1, 1, 39, 64.51, -5.87, 1, 1, 39, 21.08, -6.64, 1, 2, 38, 44.67, -6.77, 0.5684, 39, -2.34, -6.97, 0.4316, 1, 38, 3.1, -48.81, 1, 1, 38, -26.73, -19.31, 1, 1, 38, -30.15, 15.69, 1, 1, 38, -1.84, 44.32, 1 ], + "hull": 14, + "edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 26, 6, 8, 8, 10 ], + "width": 126, + "height": 69 + } + }, + "front-shin": { + "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, + "edges": [ 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 46, 48, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 32, 34, 50, 52, 52, 54, 54, 56, 40, 58, 58, 60, 8, 10, 20, 22, 22, 24, 62, 64, 64, 66, 66, 68, 8, 70, 70, 60, 68, 70, 58, 72, 72, 74, 74, 76, 76, 78, 24, 26, 26, 28, 58, 80, 80, 82, 82, 84, 84, 86, 86, 44, 70, 88, 88, 90, 90, 92, 92, 94, 94, 48, 80, 88, 88, 6, 82, 90, 90, 4, 84, 92, 92, 2, 86, 94, 94, 0, 56, 60, 10, 12, 12, 14, 14, 16, 28, 30, 30, 32, 26, 98, 98, 78, 30, 98, 24, 100, 100, 50, 98, 100, 22, 102, 102, 62, 100, 102, 16, 18, 18, 20, 102, 18 ], + "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": 28.31, "y": 7.37, "rotation": 97.9, "width": 46, "height": 97 } + }, + "goggles": { + "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": [ 18, 44, 15, 21, 19, 20, 17, 18, 15, 44, 19, 21, 2, 3, 4, 18, 19, 44, 2, 33, 34, 33, 2, 4, 5, 33, 4, 5, 6, 33, 7, 32, 6, 31, 50, 33, 32, 31, 33, 6, 32, 33, 31, 49, 50, 49, 31, 32, 49, 32, 7, 8, 49, 7, 33, 50, 34, 17, 15, 16, 9, 48, 8, 49, 48, 50, 50, 48, 45, 47, 45, 48, 50, 45, 30, 45, 47, 46, 45, 46, 29, 30, 45, 29, 30, 29, 34, 30, 34, 50, 47, 26, 46, 25, 10, 11, 12, 25, 11, 41, 12, 42, 42, 44, 43, 43, 21, 22, 41, 40, 25, 41, 42, 40, 29, 35, 34, 40, 26, 25, 25, 26, 47, 37, 24, 0, 36, 37, 0, 42, 43, 39, 42, 39, 40, 28, 38, 36, 40, 39, 26, 28, 27, 38, 26, 39, 27, 37, 38, 23, 39, 43, 38, 38, 37, 36, 27, 39, 38, 43, 22, 38, 37, 23, 24, 22, 23, 38, 36, 0, 35, 28, 36, 35, 29, 28, 35, 27, 28, 46, 26, 27, 46, 35, 0, 1, 34, 35, 1, 12, 41, 25, 47, 10, 25, 44, 21, 43, 42, 14, 44, 14, 15, 44, 13, 14, 42, 12, 13, 42, 46, 28, 29, 47, 48, 10, 48, 9, 10, 49, 8, 48, 2, 34, 1 ], + "vertices": [ 2, 66, 61.88, 22.81, 0.832, 46, 172.09, 22.81, 0.168, 2, 66, 59.89, -31.19, 0.6855, 46, 170.1, -31.19, 0.3145, 2, 66, 49.2, -86.8, 0.32635, 46, 159.41, -86.8, 0.67365, 2, 66, 56.82, -99.01, 0.01217, 46, 167.03, -99.01, 0.98783, 1, 46, 143.4, -115.48, 1, 2, 66, 15, -110.14, 0.0041, 46, 125.21, -110.14, 0.9959, 2, 66, -0.32, -96.36, 0.07948, 46, 109.89, -96.36, 0.92052, 2, 66, -26.56, -100.19, 0.01905, 46, 83.65, -100.19, 0.98095, 2, 66, -46.96, -81.16, 0.4921, 46, 63.26, -81.16, 0.50791, 2, 66, -71.84, -76.69, 0.56923, 46, 38.37, -76.69, 0.43077, 2, 66, -72.54, -43.98, 0.74145, 46, 37.67, -43.98, 0.25855, 2, 66, -73.2, -13.47, 0.87929, 46, 37.01, -13.47, 0.12071, 2, 66, -59.63, 13.55, 0.864, 46, 50.58, 13.55, 0.136, 2, 66, -59.69, 38.45, 0.85289, 46, 50.52, 38.45, 0.14711, 2, 66, -45.26, 56.6, 0.74392, 46, 64.95, 56.6, 0.25608, 2, 66, -62.31, 79.96, 0.624, 46, 47.9, 79.96, 0.376, 2, 66, -80.76, 73.42, 0.616, 46, 29.45, 73.42, 0.384, 2, 66, -93.9, 86.64, 0.288, 46, 16.31, 86.64, 0.712, 1, 46, 81.51, 139.38, 1, 1, 46, 112.56, 150.3, 1, 2, 66, 16.76, 134.97, 0.02942, 46, 126.97, 134.97, 0.97058, 2, 66, 18.42, 113.28, 0.36147, 46, 128.63, 113.28, 0.63853, 2, 66, 20.02, 92.43, 0.7135, 46, 130.23, 92.43, 0.2865, 2, 66, 44.58, 81.29, 0.69603, 46, 154.79, 81.29, 0.30397, 2, 66, 52, 71.48, 0.848, 46, 162.21, 71.48, 0.152, 2, 66, -49.25, 13.27, 0.8, 46, 60.96, 13.27, 0.2, 2, 66, -23.88, 31.88, 0.896, 46, 86.33, 31.88, 0.104, 2, 66, 6.72, 42.6, 0.928, 46, 116.93, 42.6, 0.072, 2, 66, 25.26, 31.44, 0.8, 46, 135.47, 31.44, 0.2, 2, 66, 26.77, 2.59, 0.75, 46, 136.98, 2.59, 0.25, 2, 66, 21.02, -36.66, 0.54887, 46, 131.23, -36.66, 0.45113, 2, 66, 8.01, -74.65, 0.36029, 46, 118.22, -74.65, 0.63971, 2, 66, -1.52, -88.24, 0.1253, 46, 108.69, -88.24, 0.8747, 2, 66, 20.25, -95.44, 0.08687, 46, 130.46, -95.44, 0.91313, 2, 66, 34.42, -39.36, 0.72613, 46, 144.63, -39.36, 0.27387, 2, 66, 42.03, 1.7, 0.824, 46, 152.25, 1.7, 0.176, 2, 66, 45.85, 32.6, 0.856, 46, 156.06, 32.6, 0.144, 1, 66, 46.01, 61.02, 1, 1, 66, 22.35, 66.41, 1, 1, 66, 1.73, 61.84, 1, 2, 66, -31.17, 38.83, 0.928, 46, 79.04, 38.83, 0.072, 2, 66, -52.94, 19.31, 0.79073, 46, 57.27, 19.31, 0.20927, 2, 66, -39.54, 52.42, 0.912, 46, 70.67, 52.42, 0.088, 2, 66, -3.2, 87.61, 0.744, 46, 107.02, 87.61, 0.256, 2, 66, -14.82, 116.7, 0.6368, 46, 95.4, 116.7, 0.3632, 2, 66, 2.7, -6.87, 0.856, 46, 112.91, -6.87, 0.144, 2, 66, 6.21, 15.8, 0.744, 46, 116.42, 15.8, 0.256, 2, 66, -15.39, 2.47, 0.856, 46, 94.82, 2.47, 0.144, 2, 66, -12.98, -40.48, 0.72102, 46, 97.24, -40.48, 0.27898, 2, 66, -19.55, -68.16, 0.59162, 46, 90.66, -68.16, 0.40838, 2, 66, 17.44, -47.15, 0.53452, 46, 127.65, -47.15, 0.46548 ], + "hull": 25, + "edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ], + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 } + }, + "head": { + "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, 0.22468, 0.69824, 0.14552, 0.67405 ], + "triangles": [ 50, 49, 62, 34, 25, 31, 39, 35, 34, 38, 39, 34, 37, 38, 34, 42, 39, 38, 43, 39, 42, 32, 2, 31, 31, 37, 34, 42, 38, 37, 41, 42, 37, 43, 22, 39, 30, 31, 29, 36, 37, 31, 30, 36, 31, 40, 41, 37, 36, 40, 37, 36, 30, 44, 55, 22, 43, 55, 48, 56, 47, 48, 55, 46, 55, 54, 42, 55, 43, 47, 55, 46, 62, 49, 48, 61, 47, 46, 62, 48, 47, 61, 62, 47, 46, 54, 45, 42, 41, 55, 61, 46, 45, 55, 41, 54, 61, 51, 50, 61, 50, 62, 60, 41, 40, 54, 41, 60, 53, 61, 45, 52, 51, 61, 57, 53, 45, 57, 45, 54, 53, 52, 61, 52, 19, 51, 57, 18, 52, 57, 52, 53, 17, 54, 60, 57, 54, 17, 18, 57, 17, 19, 50, 51, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 29, 31, 2, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 29, 6, 44, 30, 6, 18, 19, 52, 49, 56, 48, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 22, 35, 22, 23, 35, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 56, 21, 22, 55, 56, 22, 9, 40, 8, 20, 21, 56, 20, 56, 49, 9, 60, 40, 10, 60, 9, 20, 50, 19, 12, 10, 11, 13, 10, 12, 14, 60, 10, 13, 14, 10, 59, 60, 14, 58, 59, 14, 58, 14, 15, 16, 17, 60, 59, 16, 60, 15, 16, 59, 15, 59, 58, 20, 49, 50 ], + "vertices": [ 2, 50, 41.97, -41.8, 0.94074, 66, 165.41, -22.6, 0.05926, 4, 48, 73.47, 27.54, 0.26795, 50, -5.75, -51.71, 0.4738, 49, 112.99, -11.41, 0.12255, 66, 143.5, -66.13, 0.1357, 4, 48, 38.23, 10.99, 0.6831, 50, -41.01, -35.22, 0.07866, 49, 92.73, -44.66, 0.04872, 66, 108.65, -83.49, 0.18952, 2, 48, 73.35, 10.89, 0.8455, 66, 143.77, -82.78, 0.1545, 2, 48, 58.59, -10.38, 0.91607, 66, 129.5, -104.39, 0.08393, 3, 46, 195.82, -119.82, 0.104, 47, 75.49, -4.55, 0.09191, 48, 14.36, -24.8, 0.80409, 4, 46, 178.62, -113.98, 0.19022, 47, 59.82, -13.72, 0.33409, 48, -2.7, -18.57, 0.46643, 66, 68.41, -113.98, 0.00926, 4, 46, 163.06, -108.69, 0.18724, 47, 45.64, -22.03, 0.3133, 48, -18.14, -12.93, 0.47469, 66, 52.84, -108.69, 0.02477, 2, 46, 151.52, -95.05, 0.91122, 66, 41.31, -95.05, 0.08878, 2, 46, 110.61, -87.69, 0.70564, 66, 0.4, -87.69, 0.29436, 2, 46, 81.05, -86.58, 0.63951, 66, -29.16, -86.58, 0.36049, 2, 46, 89.82, -114.32, 0.57, 66, -20.39, -114.32, 0.43, 2, 46, 68.72, -120.91, 0.57, 66, -41.49, -120.91, 0.43, 2, 46, 58.1, -115.9, 0.57, 66, -52.11, -115.9, 0.43, 2, 46, 51.03, -100.63, 0.64242, 66, -59.18, -100.63, 0.35758, 2, 46, 38.79, -106.76, 0.81659, 66, -71.43, -106.76, 0.18341, 2, 46, 2.68, -89.7, 0.77801, 66, -107.53, -89.7, 0.22199, 2, 46, -22.07, -19.3, 0.823, 66, -132.28, -19.3, 0.177, 2, 46, 1.2, 45.63, 0.51204, 66, -109.01, 45.63, 0.48796, 2, 46, 8.07, 64.81, 0.60869, 66, -102.14, 64.81, 0.39131, 2, 46, 35.44, 93.73, 0.80009, 66, -74.77, 93.73, 0.19991, 2, 46, 59.98, 119.66, 0.93554, 66, -50.23, 119.66, 0.06446, 2, 46, 109.26, 136.99, 0.99895, 66, -0.95, 136.99, 0.00105, 1, 46, 174.07, 135.27, 1, 3, 46, 205.59, 101.22, 0.80778, 49, -16.84, 104.63, 0.15658, 66, 95.38, 101.22, 0.03564, 3, 50, 58.94, 30.5, 0.43491, 49, 38.36, 61.89, 0.28116, 66, 119.35, 35.65, 0.28393, 2, 50, 75.56, 19.01, 0.92164, 66, 138.68, 41.52, 0.07836, 1, 50, 106.7, 26.9, 1, 1, 50, 83.79, -9.51, 1, 5, 47, 44.51, 27.24, 0.15139, 48, 19.12, 19.33, 0.44847, 50, -46.82, -15.19, 0.05757, 49, 72.19, -48.24, 0.1149, 66, 89.35, -75.58, 0.22767, 3, 47, 7.42, 19.08, 0.37772, 49, 34.32, -45.24, 0.09918, 66, 58.9, -52.89, 0.52311, 2, 49, 45.94, -9.07, 0.4826, 66, 87.99, -28.45, 0.5174, 2, 50, 20.62, -16.35, 0.7435, 66, 132.21, -23.49, 0.2565, 2, 50, 75.74, 0.94, 0.97172, 66, 152.95, 30.42, 0.02828, 4, 46, 200.45, 40.46, 0.18809, 50, 44.6, 56.29, 0.05831, 49, 11.15, 50.46, 0.14366, 66, 90.24, 40.46, 0.60994, 2, 46, 171.41, 90.12, 0.48644, 66, 61.2, 90.12, 0.51356, 2, 46, 164.84, -48.18, 0.43217, 66, 54.62, -48.18, 0.56783, 4, 46, 168.13, -6.02, 0.01949, 47, -28.65, 49.02, 0.02229, 49, 8.54, -6.09, 0.12791, 66, 57.92, -6.02, 0.83031, 2, 46, 167.84, 37.87, 0.15, 66, 57.63, 37.87, 0.85, 2, 46, 162.36, 71.5, 0.24107, 66, 52.15, 71.5, 0.75893, 2, 46, 163.11, -47.44, 0.41951, 66, 52.9, -47.44, 0.58049, 2, 46, 165.94, -5.87, 0.16355, 66, 55.73, -5.87, 0.83645, 2, 46, 165.14, 37.38, 0.15, 66, 54.93, 37.38, 0.85, 2, 46, 157.6, 71.4, 0.21735, 66, 47.39, 71.4, 0.78265, 3, 46, 163.5, -99.54, 0.61812, 47, 39.01, -15.71, 0.30445, 66, 53.29, -99.54, 0.07744, 2, 46, 45.38, 27.24, 0.16741, 66, -64.83, 27.24, 0.83259, 2, 46, 63.74, 44.98, 0.15, 66, -46.47, 44.98, 0.85, 2, 46, 70.7, 61.92, 0.22175, 66, -39.51, 61.92, 0.77825, 2, 46, 62.88, 78.71, 0.38, 66, -47.34, 78.71, 0.62, 2, 46, 46.53, 85.3, 0.51, 66, -63.68, 85.3, 0.49, 2, 46, 29.92, 79.34, 0.388, 66, -80.29, 79.34, 0.612, 2, 46, 15.08, 62.21, 0.38, 66, -95.13, 62.21, 0.62, 2, 46, 14.09, 45.32, 0.41, 66, -96.12, 45.32, 0.59, 2, 46, 24.3, 27.06, 0.192, 66, -85.91, 27.06, 0.808, 1, 66, -61.57, 15.3, 1, 2, 46, 84.87, 62.14, 0.16757, 66, -25.34, 62.14, 0.83243, 2, 46, 61.9, 94.84, 0.68145, 66, -48.31, 94.84, 0.31855, 2, 46, 22.54, 21.88, 0.16, 66, -87.67, 21.88, 0.84, 2, 46, 43.15, -95.95, 0.73445, 66, -67.06, -95.95, 0.26555, 2, 46, 41.77, -87.24, 0.67858, 66, -68.44, -87.24, 0.32142, 2, 46, 60.05, -70.36, 0.50195, 66, -50.16, -70.36, 0.49805, 2, 46, 48.49, 51.09, 0.25, 66, -61.72, 51.09, 0.75, 2, 46, 48.17, 73.71, 0.15634, 66, -62.04, 73.71, 0.84366 ], + "hull": 29, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ], + "width": 271, + "height": 298 + } + }, + "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": { + "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, + "edges": [ 0, 2, 8, 10, 10, 12, 12, 14, 18, 20, 20, 22, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 80, 82, 82, 84, 84, 86, 86, 88, 0, 88, 2, 90, 90, 92, 92, 94, 94, 96, 96, 32, 18, 98, 98, 100, 100, 102, 2, 4, 102, 4, 92, 102, 0, 104, 104, 106, 106, 108, 78, 80, 108, 78, 74, 76, 76, 78, 62, 56, 64, 70, 0, 110, 112, 114, 114, 116, 116, 118, 118, 42, 50, 116, 114, 34, 98, 120, 120, 122, 22, 24, 24, 26, 120, 24, 122, 124, 124, 126, 126, 128, 128, 96, 80, 130, 130, 132, 132, 134, 134, 88, 14, 16, 16, 18, 136, 16, 136, 138, 138, 140, 4, 6, 6, 8, 140, 6, 96, 112, 92, 142, 142, 144, 110, 146, 146, 112, 144, 146 ], + "width": 492, + "height": 152 + } + }, + "hoverboard-thruster-front": { + "hoverboard-thruster": { "x": 0.02, "y": -7.08, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverboard-thruster-rear": { + "hoverboard-thruster": { "x": 1.1, "y": -6.29, "rotation": 0.17, "width": 60, "height": 64 } + }, + "hoverglow-front": { + "hoverglow-small": { + "x": 2.13, + "y": -2, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.15, + "width": 274, + "height": 75 + } + }, + "hoverglow-rear": { + "hoverglow-small": { + "x": 1.39, + "y": -2.09, + "scaleX": 0.303, + "scaleY": 0.495, + "rotation": 0.61, + "width": 274, + "height": 75 + } + }, + "mouth": { + "mouth-grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.88, 0.22, 46, 11.28, -85.88, 0.78, 2, 66, -129.77, 1.84, 0.6, 46, -19.56, 1.84, 0.4, 2, 66, -74.12, 21.41, 0.6, 46, 36.09, 21.41, 0.4, 2, 66, -43.28, -66.32, 0.4, 46, 66.93, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-oooo": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 46, 11.28, -85.89, 0.22, 66, -98.93, -85.89, 0.78, 2, 46, -19.56, 1.85, 0.6, 66, -129.78, 1.85, 0.4, 2, 46, 36.1, 21.42, 0.6, 66, -74.12, 21.42, 0.4, 2, 46, 66.94, -66.32, 0.4, 66, -43.27, -66.32, 0.6 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth-smile": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 2, 66, -98.93, -85.89, 0.21075, 46, 11.28, -85.89, 0.78925, 2, 66, -129.77, 1.85, 0.6, 46, -19.56, 1.85, 0.4, 2, 66, -74.11, 21.42, 0.6, 46, 36.1, 21.42, 0.4, 2, 66, -43.27, -66.32, 0.40772, 46, 66.94, -66.32, 0.59228 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle01": { + "x": 151.97, + "y": 5.81, + "scaleX": 3.7361, + "scaleY": 3.7361, + "rotation": 0.15, + "width": 133, + "height": 79 + }, + "muzzle02": { + "x": 187.25, + "y": 5.9, + "scaleX": 4.0623, + "scaleY": 4.0623, + "rotation": 0.15, + "width": 135, + "height": 84 + }, + "muzzle03": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.1325, + "scaleY": 4.1325, + "rotation": 0.15, + "width": 166, + "height": 106 + }, + "muzzle04": { + "x": 231.96, + "y": 6.02, + "scaleX": 4.0046, + "scaleY": 4.0046, + "rotation": 0.15, + "width": 149, + "height": 90 + }, + "muzzle05": { + "x": 293.8, + "y": 6.19, + "scaleX": 4.4673, + "scaleY": 4.4673, + "rotation": 0.15, + "width": 135, + "height": 75 + } + }, + "muzzle-glow": { + "muzzle-glow": { "width": 50, "height": 50 } + }, + "muzzle-ring": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring2": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring3": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "muzzle-ring4": { + "muzzle-ring": { "x": -1.3, "y": 0.32, "scaleX": 0.3147, "scaleY": 0.3147, "width": 49, "height": 209 } + }, + "neck": { + "neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "portal-bg": { + "portal-bg": { "x": -3.1, "y": 7.25, "scaleX": 1.0492, "scaleY": 1.0492, "width": 266, "height": 266 } + }, + "portal-flare1": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare2": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare3": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare4": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare5": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare6": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare7": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare8": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare9": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-flare10": { + "portal-flare1": { "width": 111, "height": 60 }, + "portal-flare2": { "width": 114, "height": 61 }, + "portal-flare3": { "width": 115, "height": 59 } + }, + "portal-shade": { + "portal-shade": { "width": 266, "height": 266 } + }, + "portal-streaks1": { + "portal-streaks1": { "scaleX": 0.9774, "scaleY": 0.9774, "width": 252, "height": 256 } + }, + "portal-streaks2": { + "portal-streaks2": { "x": -1.64, "y": 2.79, "width": 250, "height": 249 } + }, + "rear-bracer": { + "rear-bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear-foot": { + "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, 3, 4, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 1, 10, 3, 9, 2, 2, 10, 1, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 3, 8, 9 ], + "vertices": [ 2, 8, 10.45, 29.41, 0.90802, 9, -6.74, 49.62, 0.09198, 2, 8, 16.56, 29.27, 0.84259, 9, -2.65, 45.09, 0.15741, 2, 8, 21.8, 29.15, 0.69807, 9, 0.85, 41.2, 0.30193, 2, 8, 25.53, 31.43, 0.52955, 9, 5.08, 40.05, 0.47045, 2, 8, 30.18, 34.27, 0.39303, 9, 10.33, 38.62, 0.60697, 2, 8, 44.02, 42.73, 0.27525, 9, 25.98, 34.36, 0.72475, 2, 8, 76.47, 47.28, 0.21597, 9, 51.56, 13.9, 0.78403, 2, 8, 88.09, 36.29, 0.28719, 9, 51.55, -2.09, 0.71281, 2, 8, 52.94, -0.73, 0.47576, 9, 0.52, -1.98, 0.52424, 2, 8, 34.63, -20.23, 0.68757, 9, -26.23, -2.03, 0.31243, 2, 8, 10.44, -45.81, 0.84141, 9, -61.43, -2, 0.15859, 2, 8, -15.11, -21.64, 0.93283, 9, -61.4, 33.15, 0.06717, 1, 8, -22.57, 6.61, 1, 1, 8, -0.76, 29.67, 1 ], + "hull": 14, + "edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ], + "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 } + }, + "side-glow1": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow2": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.2353, "scaleY": 0.4132, "width": 274, "height": 75 } + }, + "side-glow3": { + "hoverglow-small": { "x": 2.09, "scaleX": 0.3586, "scaleY": 0.6297, "width": 274, "height": 75 } + }, + "torso": { + "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": [ 18, 1, 2, 19, 2, 3, 18, 0, 1, 23, 15, 26, 27, 26, 16, 14, 15, 23, 15, 16, 26, 17, 27, 16, 13, 14, 23, 0, 27, 17, 13, 23, 30, 11, 12, 24, 21, 31, 19, 12, 13, 30, 24, 22, 31, 31, 22, 19, 12, 30, 24, 32, 24, 31, 24, 30, 22, 3, 20, 19, 32, 31, 21, 11, 24, 32, 4, 5, 3, 8, 28, 7, 7, 29, 6, 7, 28, 29, 9, 25, 8, 8, 25, 28, 9, 10, 25, 29, 5, 6, 10, 32, 25, 25, 21, 28, 25, 32, 21, 10, 11, 32, 28, 21, 29, 29, 20, 5, 29, 21, 20, 5, 20, 3, 20, 21, 19, 33, 26, 27, 22, 18, 19, 19, 18, 2, 33, 27, 18, 30, 23, 22, 22, 33, 18, 23, 33, 22, 33, 23, 26, 27, 0, 18 ], + "vertices": [ 2, 29, 44.59, -10.39, 0.88, 40, -17.65, 33.99, 0.12, 3, 28, 59.65, -45.08, 0.12189, 29, 17.13, -45.08, 0.26811, 40, 22.68, 15.82, 0.61, 3, 28, 55.15, -44.72, 0.1345, 29, 12.63, -44.72, 0.2555, 40, 23.43, 11.37, 0.61, 3, 27, 31.01, -39.45, 0.51133, 28, -11.51, -39.45, 0.30867, 40, 34.58, -54.57, 0.18, 3, 27, 27.01, -39.14, 0.53492, 28, -15.5, -39.14, 0.28508, 40, 35.25, -58.52, 0.18, 2, 27, 25.79, -31.5, 0.75532, 28, -16.73, -31.5, 0.24468, 1, 27, -2.61, -32, 1, 1, 27, -28.2, -12.29, 1, 1, 27, -26.08, 14.55, 1, 1, 27, -24.35, 36.5, 1, 2, 27, 17.6, 46.3, 0.8332, 28, -24.92, 46.3, 0.1668, 2, 27, 34.1, 48.89, 0.59943, 28, -8.42, 48.89, 0.40058, 3, 27, 51.83, 51.67, 0.29262, 28, 9.32, 51.67, 0.63181, 29, -33.2, 51.67, 0.07557, 3, 27, 75.34, 55.35, 0.06656, 28, 32.82, 55.35, 0.62298, 29, -9.7, 55.35, 0.31046, 2, 28, 54.06, 53.67, 0.37296, 29, 11.54, 53.67, 0.62704, 2, 28, 79.79, 51.64, 0.10373, 29, 37.27, 51.64, 0.89627, 1, 29, 71.04, 34.76, 1, 1, 29, 70.01, 21.72, 1, 1, 30, 36.74, 7.06, 1, 3, 30, 45.7, -24.98, 0.67, 28, 25.87, -18.9, 0.3012, 29, -16.65, -18.9, 0.0288, 2, 27, 28.69, -24.42, 0.77602, 28, -13.83, -24.42, 0.22398, 3, 30, 43.24, -56.49, 0.064, 27, 38.43, -8.84, 0.67897, 28, -4.09, -8.84, 0.25703, 3, 30, 22.02, -14.85, 0.29, 28, 41.48, 1.59, 0.53368, 29, -1.04, 1.59, 0.17632, 3, 30, -7.45, -8.33, 0.76, 28, 54.98, 28.59, 0.06693, 29, 12.46, 28.59, 0.17307, 3, 30, 3.91, -48.4, 0.25, 27, 55.87, 27.33, 0.15843, 28, 13.35, 27.33, 0.59157, 1, 27, 11.47, 21.51, 1, 2, 30, -11.09, 18.74, 0.416, 29, 39.6, 25.51, 0.584, 2, 30, 14.56, 20.03, 0.53, 29, 34.6, 0.33, 0.47, 1, 27, 14.12, -10.1, 1, 2, 27, 19.94, -21.03, 0.92029, 28, -22.58, -21.03, 0.07971, 3, 30, -2.08, -27.26, 0.29, 28, 35.31, 27.99, 0.49582, 29, -7.21, 27.99, 0.21418, 2, 30, 34.42, -39.19, 0.25, 28, 14.84, -4.5, 0.75, 2, 27, 34.87, 24.58, 0.67349, 28, -7.64, 24.58, 0.32651, 2, 30, 18.5, 1.59, 0.76, 29, 15.76, 1, 0.24 ], + "hull": 18, + "edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 32, 34, 30, 32, 2, 4, 36, 4, 36, 38, 38, 40, 4, 6, 6, 8, 40, 6, 40, 42, 14, 16, 16, 18, 50, 16, 46, 52, 54, 36, 2, 0, 0, 34, 54, 0, 54, 32, 20, 50, 14, 56, 56, 42, 50, 56, 56, 58, 58, 40, 58, 10, 46, 60, 60, 48, 26, 60, 60, 44, 24, 26, 24, 48, 42, 62, 62, 44, 48, 62, 48, 64, 64, 50, 42, 64, 20, 22, 22, 24, 64, 22, 26, 28, 28, 30, 28, 46, 44, 66, 66, 54, 46, 66, 66, 36, 62, 38 ], + "width": 98, + "height": 180 + } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "aim": { + "slots": { + "crosshair": { + "attachment": [ + { "name": "crosshair" } + ] + } + }, + "bones": { + "front-fist": { + "rotate": [ + { "value": 36.08 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": -26.55 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "value": 62.31 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 9.11 } + ] + }, + "gun": { + "rotate": [ + { "value": -0.31 } + ] + } + }, + "ik": { + "aim-ik": [ + { "mix": 0.995 } + ] + }, + "transform": { + "aim-front-arm-transform": [ + { "mixRotate": 0.784, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-head-transform": [ + { "mixRotate": 0.659, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ], + "aim-torso-transform": [ + { "mixRotate": 0.423, "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + } + }, + "death": { + "slots": { + "eye": { + "attachment": [ + { "name": "eye-surprised" }, + { "time": 0.5333, "name": "eye-indifferent" }, + { "time": 2.2, "name": "eye-surprised" }, + { "time": 4.6, "name": "eye-indifferent" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-oooo" }, + { "time": 0.5333, "name": "mouth-grind" }, + { "time": 1.4, "name": "mouth-oooo" }, + { "time": 2.1667, "name": "mouth-grind" }, + { "time": 4.5333, "name": "mouth-oooo" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.015, -2.83, 0.036, 12.72 ] + }, + { + "time": 0.0667, + "value": 12.19, + "curve": [ 0.096, 11.68, 0.119, -1.14 ] + }, + { + "time": 0.1333, + "value": -6.86, + "curve": [ 0.149, -13.27, 0.21, -37.28 ] + }, + { + "time": 0.3, + "value": -36.86, + "curve": [ 0.354, -36.61, 0.412, -32.35 ] + }, + { + "time": 0.4667, + "value": -23.49, + "curve": [ 0.49, -19.87, 0.512, -3.29 ] + }, + { + "time": 0.5333, + "value": -3.24, + "curve": [ 0.56, -3.39, 0.614, -67.25 ] + }, + { + "time": 0.6333, + "value": -74.4, + "curve": [ 0.652, -81.58, 0.702, -88.94 ] + }, + { + "time": 0.7333, + "value": -88.93, + "curve": [ 0.805, -88.91, 0.838, -80.87 ] + }, + { + "time": 0.8667, + "value": -81.03, + "curve": [ 0.922, -81.32, 0.976, -85.29 ] + }, + { "time": 1, "value": -85.29, "curve": "stepped" }, + { + "time": 2.2333, + "value": -85.29, + "curve": [ 2.314, -85.29, 2.382, -68.06 ] + }, + { + "time": 2.4667, + "value": -63.48, + "curve": [ 2.57, -57.87, 2.916, -55.24 ] + }, + { + "time": 3.2, + "value": -55.1, + "curve": [ 3.447, -54.98, 4.135, -56.61 ] + }, + { + "time": 4.2667, + "value": -58.23, + "curve": [ 4.672, -63.24, 4.646, -82.69 ] + }, + { "time": 4.9333, "value": -85.29 } + ], + "scale": [ + { + "time": 0.4667, + "curve": [ 0.469, 1.005, 0.492, 1.065, 0.475, 1.018, 0.492, 0.94 ] + }, + { + "time": 0.5, + "x": 1.065, + "y": 0.94, + "curve": [ 0.517, 1.065, 0.541, 0.991, 0.517, 0.94, 0.542, 1.026 ] + }, + { + "time": 0.5667, + "x": 0.99, + "y": 1.025, + "curve": [ 0.593, 0.988, 0.609, 1.002, 0.595, 1.024, 0.607, 1.001 ] + }, + { "time": 0.6333 } + ] + }, + "neck": { + "rotate": [ + { + "value": -2.83, + "curve": [ 0.114, 1.33, 0.195, 4.13 ] + }, + { + "time": 0.2667, + "value": 4.13, + "curve": [ 0.351, 4.14, 0.444, -24.5 ] + }, + { + "time": 0.5, + "value": -24.69, + "curve": [ 0.571, -23.89, 0.55, 34.22 ] + }, + { + "time": 0.6667, + "value": 35.13, + "curve": [ 0.713, 34.81, 0.756, 22.76 ] + }, + { + "time": 0.8333, + "value": 22.82, + "curve": [ 0.868, 22.84, 0.916, 47.95 ] + }, + { "time": 0.9667, "value": 47.95, "curve": "stepped" }, + { + "time": 2.2333, + "value": 47.95, + "curve": [ 2.3, 47.95, 2.617, 18.72 ] + }, + { + "time": 2.6667, + "value": 18.51, + "curve": [ 3.172, 16.58, 4.06, 16.79 ] + }, + { + "time": 4.5333, + "value": 18.51, + "curve": [ 4.707, 19.13, 4.776, 41.11 ] + }, + { "time": 4.8, "value": 47.95 } + ] + }, + "torso": { + "rotate": [ + { + "value": -8.62, + "curve": [ 0.01, -16.71, 0.032, -33.6 ] + }, + { + "time": 0.0667, + "value": -33.37, + "curve": [ 0.182, -32.61, 0.298, 123.07 ] + }, + { + "time": 0.4667, + "value": 122.77, + "curve": [ 0.511, 122.69, 0.52, 100.2 ] + }, + { + "time": 0.5667, + "value": 88.96, + "curve": [ 0.588, 83.89, 0.667, 75.34 ] + }, + { + "time": 0.7, + "value": 75.34, + "curve": [ 0.767, 75.34, 0.9, 76.03 ] + }, + { "time": 0.9667, "value": 76.03 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -38.86, + "curve": [ 0.022, -40.38, 0.096, -41.92 ] + }, + { + "time": 0.1333, + "value": -41.92, + "curve": [ 0.176, -41.92, 0.216, -16.92 ] + }, + { + "time": 0.2333, + "value": -4.35, + "curve": [ 0.258, 13.69, 0.308, 60.35 ] + }, + { + "time": 0.4, + "value": 60.17, + "curve": [ 0.496, 59.98, 0.539, 33.63 ] + }, + { + "time": 0.5667, + "value": 23.06, + "curve": [ 0.595, 32.71, 0.675, 53.71 ] + }, + { + "time": 0.7333, + "value": 53.61, + "curve": [ 0.797, 53.51, 0.926, 30.98 ] + }, + { "time": 0.9333, "value": 19.57, "curve": "stepped" }, + { + "time": 1.9667, + "value": 19.57, + "curve": [ 2.245, 19.57, 2.702, 77.03 ] + }, + { + "time": 3.0667, + "value": 77.06, + "curve": [ 3.209, 77.33, 3.291, 67.99 ] + }, + { + "time": 3.4333, + "value": 67.96, + "curve": [ 3.608, 68.34, 3.729, 73.88 ] + }, + { + "time": 3.8333, + "value": 73.42, + "curve": [ 4.152, 73.91, 4.46, 71.98 ] + }, + { + "time": 4.6333, + "value": 64.77, + "curve": [ 4.688, 62.5, 4.847, 26.42 ] + }, + { "time": 4.8667, "value": 10.94 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": -44.7, + "curve": [ 0.033, -44.7, 0.12, 54.89 ] + }, + { + "time": 0.1333, + "value": 64.62, + "curve": [ 0.154, 79.18, 0.214, 79.42 ] + }, + { + "time": 0.2667, + "value": 63.4, + "curve": [ 0.293, 55.19, 0.332, 30.13 ] + }, + { + "time": 0.3667, + "value": 30.13, + "curve": [ 0.4, 30.13, 0.441, 39.87 ] + }, + { + "time": 0.4667, + "value": 55.13, + "curve": [ 0.488, 68.18, 0.52, 100.72 ] + }, + { + "time": 0.5333, + "value": 111.96, + "curve": [ 0.551, 126.88, 0.627, 185.97 ] + }, + { + "time": 0.6667, + "value": 185.97, + "curve": [ 0.692, 185.97, 0.736, 162.43 ] + }, + { + "time": 0.8, + "value": 158.01, + "curve": [ 0.9, 151.12, 1.017, 144.01 ] + }, + { "time": 1.1, "value": 144.01, "curve": "stepped" }, + { + "time": 2.3667, + "value": 144.01, + "curve": [ 2.492, 144.01, 2.742, 138.63 ] + }, + { + "time": 2.8667, + "value": 138.63, + "curve": [ 3.067, 138.63, 3.467, 138.63 ] + }, + { + "time": 3.6667, + "value": 138.63, + "curve": [ 3.883, 138.63, 4.317, 135.18 ] + }, + { + "time": 4.5333, + "value": 135.18, + "curve": [ 4.575, 135.18, 4.692, 131.59 ] + }, + { + "time": 4.7333, + "value": 131.59, + "curve": [ 4.758, 131.59, 4.517, 144.01 ] + }, + { "time": 4.8333, "value": 144.01 } + ], + "translate": [ + { + "time": 0.4667, + "curve": [ 0.517, 0, 0.617, -34.96, 0.517, 0, 0.617, -16.59 ] + }, + { "time": 0.6667, "x": -35.02, "y": -16.62 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 21.88, + "curve": [ 0.033, 21.88, 0.099, 20.44 ] + }, + { + "time": 0.1333, + "value": 9.43, + "curve": [ 0.164, -0.29, 0.162, -38.26 ] + }, + { + "time": 0.2, + "value": -38.05, + "curve": [ 0.24, -37.96, 0.228, -17.82 ] + }, + { + "time": 0.3333, + "value": -9.73, + "curve": [ 0.372, -6.76, 0.431, -0.74 ] + }, + { + "time": 0.4667, + "value": 6.47, + "curve": [ 0.489, 11.05, 0.503, 19.09 ] + }, + { + "time": 0.5333, + "value": 19.09, + "curve": [ 0.571, 19.09, 0.554, -42.67 ] + }, + { + "time": 0.6, + "value": -42.67, + "curve": [ 0.653, -42.67, 0.691, -13.8 ] + }, + { + "time": 0.7, + "value": -3.54, + "curve": [ 0.707, 3.8, 0.719, 24.94 ] + }, + { + "time": 0.8, + "value": 25.31, + "curve": [ 0.902, 24.75, 0.992, -0.34 ] + }, + { "time": 1, "value": -32.16, "curve": "stepped" }, + { + "time": 2.2333, + "value": -32.16, + "curve": [ 2.6, -32.16, 2.638, -5.3 ] + }, + { + "time": 2.7, + "value": -1.96, + "curve": [ 2.707, -1.56, 2.775, 1.67 ] + }, + { + "time": 2.8, + "value": 1.67, + "curve": [ 2.825, 1.67, 2.875, -0.39 ] + }, + { + "time": 2.9, + "value": -0.39, + "curve": [ 2.925, -0.39, 2.975, 0.26 ] + }, + { + "time": 3, + "value": 0.26, + "curve": [ 3.025, 0.26, 3.075, -1.81 ] + }, + { + "time": 3.1, + "value": -1.81, + "curve": [ 3.125, -1.81, 3.175, -0.52 ] + }, + { + "time": 3.2, + "value": -0.52, + "curve": [ 3.225, -0.52, 3.275, -2.41 ] + }, + { + "time": 3.3, + "value": -2.41, + "curve": [ 3.333, -2.41, 3.4, -0.38 ] + }, + { + "time": 3.4333, + "value": -0.38, + "curve": [ 3.467, -0.38, 3.533, -2.25 ] + }, + { + "time": 3.5667, + "value": -2.25, + "curve": [ 3.592, -2.25, 3.642, -0.33 ] + }, + { + "time": 3.6667, + "value": -0.33, + "curve": [ 3.7, -0.33, 3.767, -1.34 ] + }, + { + "time": 3.8, + "value": -1.34, + "curve": [ 3.825, -1.34, 3.862, -0.77 ] + }, + { + "time": 3.9, + "value": -0.77, + "curve": [ 3.942, -0.77, 3.991, -1.48 ] + }, + { + "time": 4, + "value": -1.87, + "curve": [ 4.167, -1.87, 4.5, -1.96 ] + }, + { + "time": 4.6667, + "value": -1.96, + "curve": [ 4.709, 18.05, 4.767, 34.55 ] + }, + { + "time": 4.8, + "value": 34.55, + "curve": [ 4.84, 34.24, 4.902, 12.03 ] + }, + { "time": 4.9333, "value": -18.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -2.33, + "curve": [ 0.019, 4.43, 0.069, 10.82 ] + }, + { + "time": 0.1, + "value": 10.6, + "curve": [ 0.148, 10.6, 0.123, -15.24 ] + }, + { + "time": 0.2, + "value": -15.35, + "curve": [ 0.266, -15.44, 0.316, -6.48 ] + }, + { + "time": 0.3333, + "value": -3.9, + "curve": [ 0.362, 0.43, 0.479, 22.36 ] + }, + { + "time": 0.5667, + "value": 22.01, + "curve": [ 0.61, 21.84, 0.627, 12.85 ] + }, + { + "time": 0.6333, + "value": 9.05, + "curve": [ 0.643, 2.77, 0.622, -39.43 ] + }, + { + "time": 0.7, + "value": -39.5, + "curve": [ 0.773, -39.57, 0.814, 14.77 ] + }, + { + "time": 0.8667, + "value": 14.81, + "curve": [ 0.965, 14.88, 1.1, 5.64 ] + }, + { "time": 1.1, "value": -6.08, "curve": "stepped" }, + { + "time": 2.2333, + "value": -6.08, + "curve": [ 2.307, -6.08, 2.427, -25.89 ] + }, + { + "time": 2.5333, + "value": -22.42, + "curve": [ 2.598, -20.38, 2.657, 5.73 ] + }, + { + "time": 2.7, + "value": 5.73, + "curve": [ 2.77, 5.73, 2.851, -5.38 ] + }, + { + "time": 2.9333, + "value": -5.38, + "curve": [ 3.008, -5.38, 3.087, -4.54 ] + }, + { + "time": 3.1667, + "value": -4.17, + "curve": [ 3.223, -3.91, 4.486, 5.73 ] + }, + { + "time": 4.6667, + "value": 5.73, + "curve": [ 4.733, 5.73, 4.886, -2.47 ] + }, + { "time": 4.9333, "value": -6.52 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.36, + "curve": [ 0.033, 10.36, 0.1, -32.89 ] + }, + { + "time": 0.1333, + "value": -32.89, + "curve": [ 0.183, -32.89, 0.283, -4.45 ] + }, + { + "time": 0.3333, + "value": -4.45, + "curve": [ 0.367, -4.45, 0.438, -6.86 ] + }, + { + "time": 0.4667, + "value": -8.99, + "curve": [ 0.529, -13.62, 0.605, -20.58 ] + }, + { + "time": 0.6333, + "value": -23.2, + "curve": [ 0.708, -30.18, 0.758, -35.56 ] + }, + { + "time": 0.8, + "value": -35.56, + "curve": [ 0.875, -35.56, 1.025, -23.2 ] + }, + { "time": 1.1, "value": -23.2 } + ] + }, + "gun": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.033, -2.79, 0.12, -7.22 ] + }, + { + "time": 0.1333, + "value": -8.52, + "curve": [ 0.168, -11.87, 0.29, -23.71 ] + }, + { + "time": 0.3333, + "value": -26.24, + "curve": [ 0.369, -28.31, 0.436, -29.75 ] + }, + { + "time": 0.5, + "value": -29.66, + "curve": [ 0.552, -29.58, 0.611, -25.47 ] + }, + { + "time": 0.6333, + "value": -22.68, + "curve": [ 0.656, -19.76, 0.68, -10.02 ] + }, + { + "time": 0.7, + "value": -6.49, + "curve": [ 0.722, -2.6, 0.75, -1.22 ] + }, + { + "time": 0.7667, + "value": -1.35, + "curve": [ 0.792, -1.55, 0.842, -19.74 ] + }, + { "time": 0.8667, "value": -19.8 } + ] + }, + "hip": { + "translate": [ + { + "curve": [ 0.098, -42.62, 0.166, -79.85, 0.029, 84.97, 0.109, 155.93 ] + }, + { + "time": 0.2667, + "x": -133.79, + "y": 152.44, + "curve": [ 0.361, -184.63, 0.392, -203.69, 0.42, 149.12, 0.467, -15.7 ] + }, + { + "time": 0.4667, + "x": -230.02, + "y": -113.87, + "curve": [ 0.523, -249.86, 0.565, -261.7, 0.473, -133.1, 0.583, -203.43 ] + }, + { + "time": 0.6, + "x": -268.57, + "y": -203.43, + "curve": [ 0.663, -280.98, 0.816, -290.05, 0.708, -203.43, 0.892, -203.5 ] + }, + { "time": 1, "x": -290.42, "y": -203.5 } + ] + }, + "front-thigh": { + "rotate": [ + { + "curve": [ 0.06, 1.02, 0.151, 45.23 ] + }, + { + "time": 0.1667, + "value": 54.01, + "curve": [ 0.19, 66.85, 0.358, 169.85 ] + }, + { + "time": 0.5, + "value": 169.51, + "curve": [ 0.628, 169.85, 0.692, 108.85 ] + }, + { + "time": 0.7, + "value": 97.74, + "curve": [ 0.723, 102.6, 0.805, 111.6 ] + }, + { + "time": 0.8667, + "value": 111.69, + "curve": [ 0.899, 111.83, 1.015, 109.15 ] + }, + { "time": 1.0667, "value": 95.8 } + ] + }, + "front-shin": { + "rotate": [ + { + "curve": [ 0.086, -0.02, 0.191, -24.25 ] + }, + { + "time": 0.2, + "value": -26.5, + "curve": [ 0.214, -29.92, 0.249, -40.51 ] + }, + { + "time": 0.3333, + "value": -40.57, + "curve": [ 0.431, -40.7, 0.459, -11.34 ] + }, + { + "time": 0.4667, + "value": -8.71, + "curve": [ 0.477, -5.16, 0.524, 17.13 ] + }, + { + "time": 0.6, + "value": 16.98, + "curve": [ 0.632, 17.09, 0.625, 2.76 ] + }, + { + "time": 0.6333, + "value": 2.76, + "curve": [ 0.648, 2.76, 0.653, 2.75 ] + }, + { + "time": 0.6667, + "value": 2.59, + "curve": [ 0.678, 2.39, 0.733, 2.53 ] + }, + { + "time": 0.7333, + "value": -9.43, + "curve": [ 0.745, -2.48, 0.782, 3.12 ] + }, + { + "time": 0.8, + "value": 4.28, + "curve": [ 0.832, 6.32, 0.895, 8.46 ] + }, + { + "time": 0.9333, + "value": 8.49, + "curve": [ 0.986, 8.53, 1.051, 6.38 ] + }, + { + "time": 1.0667, + "value": 2.28, + "curve": [ 1.078, 4.17, 1.103, 5.86 ] + }, + { + "time": 1.1333, + "value": 5.88, + "curve": [ 1.191, 5.93, 1.209, 4.56 ] + }, + { "time": 1.2333, "value": 2.52 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.12, 50.26 ] + }, + { + "time": 0.1333, + "value": 57.3, + "curve": [ 0.164, 73.34, 0.274, 147.18 ] + }, + { + "time": 0.3333, + "value": 147.1, + "curve": [ 0.475, 146.45, 0.583, 95.72 ] + }, + { + "time": 0.6, + "value": 79.66, + "curve": [ 0.62, 94.74, 0.732, 103.15 ] + }, + { + "time": 0.7667, + "value": 103.02, + "curve": [ 0.812, 102.85, 0.897, 95.75 ] + }, + { "time": 0.9333, "value": 83.01 } + ] + }, + "rear-shin": { + "rotate": [ + { + "curve": [ 0.021, -16.65, 0.091, -54.82 ] + }, + { + "time": 0.1667, + "value": -55.29, + "curve": [ 0.187, -55.42, 0.213, -52.52 ] + }, + { + "time": 0.2333, + "value": -45.98, + "curve": [ 0.242, -43.1, 0.311, -12.73 ] + }, + { + "time": 0.3333, + "value": -6.32, + "curve": [ 0.356, 0.13, 0.467, 24.5 ] + }, + { + "time": 0.5, + "value": 24.5, + "curve": [ 0.543, 24.5, 0.56, 3.78 ] + }, + { + "time": 0.5667, + "value": -3.53, + "curve": [ 0.585, 3.86, 0.659, 16.63 ] + }, + { + "time": 0.7, + "value": 16.56, + "curve": [ 0.782, 16.43, 0.896, 8.44 ] + }, + { + "time": 0.9333, + "value": 4.04, + "curve": [ 0.956, 6.84, 1.008, 8.41 ] + }, + { + "time": 1.0333, + "value": 8.41, + "curve": [ 1.067, 8.41, 1.122, 8.14 ] + }, + { "time": 1.1667, "value": 5.8 } + ] + }, + "rear-foot": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.033, -0.28, 0.256, -66.71 ] + }, + { + "time": 0.3667, + "value": -66.84, + "curve": [ 0.418, -66.91, 0.499, -21.79 ] + }, + { + "time": 0.6, + "value": -21.52, + "curve": [ 0.652, -21.38, 0.665, -53.96 ] + }, + { + "time": 0.7, + "value": -54.26, + "curve": [ 0.757, -53.96, 0.843, -2.07 ] + }, + { + "time": 0.9333, + "value": -1.47, + "curve": [ 0.968, -2.07, 0.975, -19.96 ] + }, + { + "time": 1, + "value": -19.96, + "curve": [ 1.025, -19.96, 1.075, -12.42 ] + }, + { + "time": 1.1, + "value": -12.42, + "curve": [ 1.133, -12.42, 1.2, -18.34 ] + }, + { "time": 1.2333, "value": -18.34 } + ] + }, + "front-foot": { + "rotate": [ + { + "curve": [ 0.008, -11.33, 0.108, -57.71 ] + }, + { + "time": 0.1333, + "value": -57.71, + "curve": [ 0.175, -57.71, 0.229, 19.73 ] + }, + { + "time": 0.3, + "value": 19.34, + "curve": [ 0.354, 19.34, 0.4, -57.76 ] + }, + { + "time": 0.4333, + "value": -57.76, + "curve": [ 0.458, -57.76, 0.511, -3.56 ] + }, + { + "time": 0.5333, + "value": 3.7, + "curve": [ 0.563, 13.29, 0.633, 15.79 ] + }, + { + "time": 0.6667, + "value": 15.79, + "curve": [ 0.7, 15.79, 0.767, -48.75 ] + }, + { + "time": 0.8, + "value": -48.75, + "curve": [ 0.842, -48.75, 0.925, 4.7 ] + }, + { + "time": 0.9667, + "value": 4.7, + "curve": [ 1, 4.7, 1.067, -22.9 ] + }, + { + "time": 1.1, + "value": -22.9, + "curve": [ 1.142, -22.9, 1.225, -13.28 ] + }, + { "time": 1.2667, "value": -13.28 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": -0.28 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0.008, -0.28, 0.003, -66.62 ] + }, + { + "time": 0.0667, + "value": -65.75, + "curve": [ 0.166, -64.42, 0.234, 14.35 ] + }, + { + "time": 0.2667, + "value": 38.25, + "curve": [ 0.294, 57.91, 0.392, 89.79 ] + }, + { + "time": 0.4667, + "value": 90.73, + "curve": [ 0.483, 90.73, 0.55, 177.66 ] + }, + { + "time": 0.5667, + "value": 177.66, + "curve": [ 0.733, 176.24, 0.75, 11.35 ] + }, + { + "time": 0.8, + "value": 11.35, + "curve": [ 0.886, 12.29, 0.911, 47.88 ] + }, + { + "time": 0.9333, + "value": 56.77, + "curve": [ 0.967, 70.59, 1.05, 86.46 ] + }, + { + "time": 1.1, + "value": 86.46, + "curve": [ 1.187, 86.46, 1.214, 66.44 ] + }, + { "time": 1.3333, "value": 64.55 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -0.28, + "curve": [ 0, -7.97, 0.027, -18.69 ] + }, + { + "time": 0.0667, + "value": -19, + "curve": [ 0.166, -19.3, 0.208, 15.58 ] + }, + { + "time": 0.2667, + "value": 45.95, + "curve": [ 0.306, 66.24, 0.378, 99.08 ] + }, + { + "time": 0.4333, + "value": 99.08, + "curve": [ 0.497, 98.62, 0.488, -1.2 ] + }, + { + "time": 0.5667, + "value": -1.32, + "curve": [ 0.637, -0.84, 0.687, 94.41 ] + }, + { + "time": 0.7333, + "value": 94.33, + "curve": [ 0.832, 94.16, 0.895, 29.6 ] + }, + { + "time": 0.9667, + "value": 28.67, + "curve": [ 1.026, 28.67, 1.045, 53.14 ] + }, + { "time": 1.1, "value": 53.38 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.011, 4.5, 0.05, 11.42 ] + }, + { + "time": 0.0667, + "value": 11.42, + "curve": [ 0.1, 11.42, 0.136, -5.92 ] + }, + { + "time": 0.1667, + "value": -10.54, + "curve": [ 0.206, -16.51, 0.327, -22 ] + }, + { + "time": 0.3667, + "value": -24.47, + "curve": [ 0.413, -27.37, 0.467, -43.99 ] + }, + { + "time": 0.5, + "value": -43.99, + "curve": [ 0.533, -43.99, 0.552, 12.12 ] + }, + { + "time": 0.6333, + "value": 11.85, + "curve": [ 0.714, 11.59, 0.758, -34.13 ] + }, + { + "time": 0.8, + "value": -34.13, + "curve": [ 0.858, -34.13, 1.015, -12.47 ] + }, + { + "time": 1.0667, + "value": -8.85, + "curve": [ 1.121, -5.07, 1.219, -0.02 ] + }, + { + "time": 1.3333, + "value": 1.29, + "curve": [ 1.509, 3.3, 1.763, 2.75 ] + }, + { + "time": 1.8667, + "value": 2.78, + "curve": [ 1.974, 2.81, 2.108, 2.81 ] + }, + { + "time": 2.2, + "value": 2.78, + "curve": [ 2.315, 2.74, 2.374, 1.22 ] + }, + { + "time": 2.4667, + "value": 1.18, + "curve": [ 2.525, 1.18, 2.608, 10.79 ] + }, + { + "time": 2.6667, + "value": 10.79, + "curve": [ 2.725, 10.79, 2.893, 4.72 ] + }, + { + "time": 3.0333, + "value": 4.72, + "curve": [ 3.117, 4.72, 3.283, 7.93 ] + }, + { + "time": 3.3667, + "value": 7.93, + "curve": [ 3.492, 7.93, 3.775, 6.93 ] + }, + { + "time": 3.9, + "value": 6.93, + "curve": [ 3.981, 6.93, 4.094, 6.9 ] + }, + { + "time": 4.2, + "value": 8.44, + "curve": [ 4.267, 9.42, 4.401, 16.61 ] + }, + { + "time": 4.5, + "value": 16.33, + "curve": [ 4.582, 16.12, 4.709, 9.94 ] + }, + { + "time": 4.7333, + "value": 6.51, + "curve": [ 4.747, 4.57, 4.779, -1.76 ] + }, + { + "time": 4.8, + "value": -1.75, + "curve": [ 4.823, -1.73, 4.82, 4.47 ] + }, + { + "time": 4.8667, + "value": 6.04, + "curve": [ 4.899, 7.14, 4.913, 6.93 ] + }, + { "time": 4.9333, "value": 6.93 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 10.61, + "curve": [ 0.075, 10.61, 0.05, 12.67 ] + }, + { + "time": 0.0667, + "value": 12.67, + "curve": [ 0.123, 12.67, 0.194, -16.51 ] + }, + { + "time": 0.2, + "value": -19.87, + "curve": [ 0.207, -23.48, 0.236, -31.68 ] + }, + { + "time": 0.3, + "value": -31.8, + "curve": [ 0.356, -31.9, 0.437, -25.61 ] + }, + { + "time": 0.4667, + "value": -19.29, + "curve": [ 0.485, -15.33, 0.529, 6.48 ] + }, + { + "time": 0.5667, + "value": 6.67, + "curve": [ 0.628, 6.97, 0.65, -46.39 ] + }, + { + "time": 0.7333, + "value": -46.3, + "curve": [ 0.843, -46.17, 0.941, -33.37 ] + }, + { + "time": 0.9667, + "value": -23.17, + "curve": [ 0.972, -20.98, 1.047, 15.21 ] + }, + { + "time": 1.1, + "value": 15.21, + "curve": [ 1.142, 15.21, 1.183, 10.73 ] + }, + { + "time": 1.2667, + "value": 10.61, + "curve": [ 1.45, 10.34, 1.817, 10.61 ] + }, + { + "time": 2, + "value": 10.61, + "curve": [ 2.075, 10.61, 2.225, 16.9 ] + }, + { + "time": 2.3, + "value": 16.9, + "curve": [ 2.327, 16.9, 2.347, 6.81 ] + }, + { + "time": 2.4, + "value": 6.83, + "curve": [ 2.492, 6.87, 2.602, 17.39 ] + }, + { + "time": 2.6667, + "value": 17.39, + "curve": [ 2.742, 17.39, 2.892, 10.67 ] + }, + { + "time": 2.9667, + "value": 10.64, + "curve": [ 3.187, 10.57, 3.344, 10.73 ] + }, + { + "time": 3.6, + "value": 11.4, + "curve": [ 3.766, 11.83, 3.874, 14.87 ] + }, + { + "time": 3.9333, + "value": 14.83, + "curve": [ 4.022, 14.76, 4.208, 9.49 ] + }, + { + "time": 4.3, + "value": 9.54, + "curve": [ 4.391, 9.58, 4.441, 14.82 ] + }, + { + "time": 4.5333, + "value": 14.84, + "curve": [ 4.642, 14.88, 4.692, 1.17 ] + }, + { + "time": 4.7667, + "value": 1.24, + "curve": [ 4.823, 1.3, 4.818, 18.35 ] + }, + { + "time": 4.8667, + "value": 18.38, + "curve": [ 4.905, 18.41, 4.901, 10.61 ] + }, + { "time": 4.9333, "value": 10.61 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.048, 0, 0.129, -12.73 ] + }, + { + "time": 0.1667, + "value": -15.95, + "curve": [ 0.221, -20.66, 0.254, -21.62 ] + }, + { + "time": 0.3, + "value": -21.59, + "curve": [ 0.458, -21.46, 0.46, -1.67 ] + }, + { + "time": 0.6333, + "value": -1.71, + "curve": [ 0.71, -1.73, 0.715, -4 ] + }, + { + "time": 0.7667, + "value": -3.97, + "curve": [ 0.866, -3.92, 0.84, 0.02 ] + }, + { "time": 1, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.275, 0, 2.867, -5.8 ] + }, + { + "time": 3.1, + "value": -6.44, + "curve": [ 3.327, -7.06, 3.71, -6.23 ] + }, + { + "time": 3.9333, + "value": -5.41, + "curve": [ 4.168, -4.53, 4.488, -2.83 ] + }, + { "time": 4.8 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.09, -3.66 ] + }, + { + "time": 0.1, + "value": -4.55, + "curve": [ 0.143, -8.4, 0.223, -17.07 ] + }, + { + "time": 0.2333, + "value": -18.31, + "curve": [ 0.282, -24.44, 0.35, -29 ] + }, + { + "time": 0.3667, + "value": -30.07, + "curve": [ 0.405, -32.58, 0.442, -33.03 ] + }, + { + "time": 0.4667, + "value": -32.99, + "curve": [ 0.491, -33.04, 0.505, -23.56 ] + }, + { + "time": 0.5333, + "value": -23.55, + "curve": [ 0.571, -23.67, 0.599, -27.21 ] + }, + { + "time": 0.6333, + "value": -27.21, + "curve": [ 0.669, -27.2, 0.742, -10.43 ] + }, + { + "time": 0.7667, + "value": -7.79, + "curve": [ 0.788, -5.53, 0.796, -4.42 ] + }, + { + "time": 0.8333, + "value": -2.9, + "curve": [ 0.875, -1.21, 0.933, 0 ] + }, + { "time": 0.9667, "curve": "stepped" }, + { + "time": 2.4333, + "curve": [ 2.517, 0, 2.683, 4.63 ] + }, + { + "time": 2.7667, + "value": 4.66, + "curve": [ 3.084, 4.76, 3.248, 4.37 ] + }, + { + "time": 3.4, + "value": 3.74, + "curve": [ 3.596, 2.92, 3.755, 2.18 ] + }, + { + "time": 3.8667, + "value": 1.72, + "curve": [ 4.136, 0.59, 4.471, 0 ] + }, + { "time": 4.8 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0, 0, 0.041, 10.74 ] + }, + { + "time": 0.0667, + "value": 14.16, + "curve": [ 0.075, 15.22, 0.148, 18.04 ] + }, + { + "time": 0.2, + "value": 18.13, + "curve": [ 0.251, 18.23, 0.307, -4.75 ] + }, + { + "time": 0.3667, + "value": -5.06, + "curve": [ 0.412, -5.3, 0.47, -0.96 ] + }, + { + "time": 0.5, + "value": 2.21, + "curve": [ 0.512, 3.48, 0.595, 20.31 ] + }, + { + "time": 0.6333, + "value": 24.87, + "curve": [ 0.647, 26.53, 0.719, 29.33 ] + }, + { + "time": 0.8, + "value": 29.22, + "curve": [ 0.859, 29.14, 0.9, 28.48 ] + }, + { + "time": 0.9333, + "value": 26.11, + "curve": [ 0.981, 22.72, 0.998, 2.06 ] + }, + { "time": 1.1, "value": 2.21 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.047, -0.21, 0.048, 7.86 ] + }, + { + "time": 0.0667, + "value": 13.27, + "curve": [ 0.083, 18.05, 0.135, 24.44 ] + }, + { + "time": 0.2, + "value": 24.02, + "curve": [ 0.225, 24.02, 0.28, 6.32 ] + }, + { + "time": 0.3, + "value": 3.1, + "curve": [ 0.323, -0.58, 0.382, -7.12 ] + }, + { + "time": 0.4667, + "value": -7.45, + "curve": [ 0.512, -7.66, 0.538, 12.13 ] + }, + { + "time": 0.5667, + "value": 16.46, + "curve": [ 0.609, 22.72, 0.672, 27.4 ] + }, + { + "time": 0.7333, + "value": 27.55, + "curve": [ 0.827, 27.4, 0.933, 23.23 ] + }, + { + "time": 0.9667, + "value": 19.11, + "curve": [ 0.998, 15.27, 1.092, -2.53 ] + }, + { + "time": 1.1333, + "value": -2.53, + "curve": [ 1.158, -2.53, 1.208, 0 ] + }, + { "time": 1.2333, "curve": "stepped" }, + { + "time": 2, + "curve": [ 2.075, 0, 2.248, 0.35 ] + }, + { + "time": 2.3333, + "value": 0.78, + "curve": [ 2.585, 2.06, 2.805, 3.46 ] + }, + { + "time": 3.2, + "value": 3.5, + "curve": [ 3.593, 3.54, 3.979, 2.36 ] + }, + { + "time": 4.1667, + "value": 1.55, + "curve": [ 4.391, 0.59, 4.447, 0.04 ] + }, + { + "time": 4.6, + "value": 0.04, + "curve": [ 4.642, 0.04, 4.742, 0 ] + }, + { "time": 4.9333 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.025, 0, 0.09, 1.43, 0.025, 0, 0.075, -34.76 ] + }, + { + "time": 0.1, + "x": 1.59, + "y": -34.76, + "curve": [ 0.214, 3.33, 0.375, 5.34, 0.192, -34.76, 0.441, -21.17 ] + }, + { + "time": 0.4667, + "x": 5.34, + "y": -12.57, + "curve": [ 0.492, 5.34, 0.55, 5.24, 0.482, -7.36, 0.504, 4.03 ] + }, + { + "time": 0.5667, + "x": 5.11, + "y": 4.01, + "curve": [ 0.658, 4.45, 0.679, 3.19, 0.649, 3.98, 0.642, -16.84 ] + }, + { + "time": 0.7, + "x": 2.8, + "y": -16.74, + "curve": [ 0.787, 1.15, 0.881, -1.29, 0.772, -16.62, 0.82, 8.95 ] + }, + { + "time": 0.9, + "x": -1.72, + "y": 8.91, + "curve": [ 0.961, -3.06, 1.025, -3.58, 0.975, 8.87, 0.951, -1.37 ] + }, + { + "time": 1.1, + "x": -3.58, + "y": -1.45, + "curve": [ 1.292, -3.58, 2.002, -2.4, 1.292, -1.56, 1.975, -1.45 ] + }, + { + "time": 2.1667, + "x": -1.39, + "y": -1.45, + "curve": [ 2.25, -0.88, 2.503, 1.38, 2.283, -1.45, 2.603, -12.44 ] + }, + { + "time": 2.6667, + "x": 2.13, + "y": -14.45, + "curve": [ 2.766, 2.59, 2.999, 2.81, 2.835, -19.73, 3.003, -25.2 ] + }, + { + "time": 3.1333, + "x": 2.91, + "y": -26.08, + "curve": [ 3.392, 3.1, 4.199, 4.05, 3.483, -28.44, 4.129, -27.23 ] + }, + { + "time": 4.3667, + "x": 4.81, + "y": -19.59, + "curve": [ 4.429, 5.1, 4.594, 8.54, 4.538, -14.08, 4.583, -7.88 ] + }, + { + "time": 4.6667, + "x": 8.65, + "y": -4.56, + "curve": [ 4.794, 8.86, 4.806, 5.93, 4.691, -3.59, 4.8, -1.61 ] + }, + { "time": 4.9333, "x": 5.8, "y": -1.99 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { "mix": 0 } + ], + "front-leg-ik": [ + { "mix": 0, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0.005 } + ], + "rear-leg-ik": [ + { "mix": 0.005, "bendPositive": false } + ] + } + }, + "hoverboard": { + "slots": { + "exhaust1": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust2": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "exhaust3": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "hoverboard-board": { + "attachment": [ + { "name": "hoverboard-board" } + ] + }, + "hoverboard-thruster-front": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverboard-thruster-rear": { + "attachment": [ + { "name": "hoverboard-thruster" } + ] + }, + "hoverglow-front": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "hoverglow-rear": { + "attachment": [ + { "name": "hoverglow-small" } + ] + }, + "side-glow1": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + }, + "side-glow2": { + "attachment": [ + { "time": 0.0667, "name": "hoverglow-small" }, + { "time": 1 } + ] + }, + "side-glow3": { + "attachment": [ + { "name": "hoverglow-small" }, + { "time": 0.9667 } + ] + } + }, + "bones": { + "hoverboard-controller": { + "translate": [ + { + "x": 319.55, + "y": -1.59, + "curve": [ 0.064, 319.55, 0.2, 347.85, 0.058, -1.2, 0.2, 23.11 ] + }, + { + "time": 0.2667, + "x": 347.66, + "y": 39.62, + "curve": [ 0.35, 347.41, 0.476, 341.47, 0.323, 53.58, 0.44, 85.82 ] + }, + { + "time": 0.5333, + "x": 338.47, + "y": 85.72, + "curve": [ 0.603, 334.83, 0.913, 319.65, 0.621, 85.62, 0.88, -1.53 ] + }, + { "time": 1, "x": 319.55, "y": -1.59 } + ] + }, + "hip": { + "translate": [ + { + "x": -53.49, + "y": 32.14, + "curve": [ 0.061, -53.77, 0.093, -51.81, 0.044, 16.34, 0.063, 9.67 ] + }, + { + "time": 0.1333, + "x": -49.31, + "y": 7.01, + "curve": [ 0.3, -35.27, 0.461, -20.06, 0.314, 9.52, 0.408, 121.09 ] + }, + { + "time": 0.5667, + "x": -20.06, + "y": 122.72, + "curve": [ 0.716, -20.09, 0.912, -53.29, 0.753, 121.8, 0.946, 51.85 ] + }, + { "time": 1, "x": -53.49, "y": 32.14 } + ] + }, + "exhaust1": { + "scale": [ + { + "x": 1.593, + "y": 0.964, + "curve": [ 0.033, 1.593, 0.1, 1, 0.033, 0.964, 0.1, 0.713 ] + }, + { + "time": 0.1333, + "y": 0.713, + "curve": [ 0.15, 1, 0.183, 1.774, 0.15, 0.713, 0.183, 0.883 ] + }, + { + "time": 0.2, + "x": 1.774, + "y": 0.883, + "curve": [ 0.242, 1.774, 0.325, 1.181, 0.242, 0.883, 0.325, 0.649 ] + }, + { + "time": 0.3667, + "x": 1.181, + "y": 0.649, + "curve": [ 0.408, 1.181, 0.492, 1.893, 0.408, 0.649, 0.492, 0.819 ] + }, + { + "time": 0.5333, + "x": 1.893, + "y": 0.819, + "curve": [ 0.558, 1.893, 0.608, 1.18, 0.558, 0.819, 0.608, 0.686 ] + }, + { + "time": 0.6333, + "x": 1.18, + "y": 0.686, + "curve": [ 0.658, 1.18, 0.708, 1.903, 0.658, 0.686, 0.708, 0.855 ] + }, + { + "time": 0.7333, + "x": 1.903, + "y": 0.855, + "curve": [ 0.767, 1.903, 0.833, 1.311, 0.767, 0.855, 0.833, 0.622 ] + }, + { + "time": 0.8667, + "x": 1.311, + "y": 0.622, + "curve": [ 0.9, 1.311, 0.967, 1.593, 0.9, 0.622, 0.967, 0.964 ] + }, + { "time": 1, "x": 1.593, "y": 0.964 } + ] + }, + "exhaust2": { + "scale": [ + { + "x": 1.88, + "y": 0.832, + "curve": [ 0.025, 1.88, 0.075, 1.311, 0.025, 0.832, 0.075, 0.686 ] + }, + { + "time": 0.1, + "x": 1.311, + "y": 0.686, + "curve": [ 0.133, 1.311, 0.2, 2.01, 0.133, 0.686, 0.208, 0.736 ] + }, + { + "time": 0.2333, + "x": 2.01, + "y": 0.769, + "curve": [ 0.267, 2.01, 0.333, 1, 0.282, 0.831, 0.333, 0.91 ] + }, + { + "time": 0.3667, + "y": 0.91, + "curve": [ 0.4, 1, 0.467, 1.699, 0.4, 0.91, 0.474, 0.891 ] + }, + { + "time": 0.5, + "x": 1.699, + "y": 0.86, + "curve": [ 0.517, 1.699, 0.55, 1.181, 0.54, 0.813, 0.55, 0.713 ] + }, + { + "time": 0.5667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.617, 1.181, 0.717, 1.881, 0.617, 0.713, 0.717, 0.796 ] + }, + { + "time": 0.7667, + "x": 1.881, + "y": 0.796, + "curve": [ 0.8, 1.881, 0.867, 1.3, 0.8, 0.796, 0.867, 0.649 ] + }, + { + "time": 0.9, + "x": 1.3, + "y": 0.649, + "curve": [ 0.925, 1.3, 0.975, 1.88, 0.925, 0.649, 0.975, 0.832 ] + }, + { "time": 1, "x": 1.88, "y": 0.832 } + ] + }, + "hoverboard-thruster-front": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-front": { + "scale": [ + { + "x": 0.849, + "y": 1.764, + "curve": [ 0.017, 0.849, 0.05, 0.835, 0.017, 1.764, 0.05, 2.033 ] + }, + { + "time": 0.0667, + "x": 0.835, + "y": 2.033, + "curve": [ 0.092, 0.835, 0.142, 0.752, 0.092, 2.033, 0.142, 1.584 ] + }, + { + "time": 0.1667, + "x": 0.752, + "y": 1.584, + "curve": [ 0.183, 0.752, 0.217, 0.809, 0.183, 1.584, 0.217, 1.71 ] + }, + { + "time": 0.2333, + "x": 0.809, + "y": 1.71, + "curve": [ 0.25, 0.809, 0.283, 0.717, 0.25, 1.71, 0.283, 1.45 ] + }, + { + "time": 0.3, + "x": 0.717, + "y": 1.45, + "curve": [ 0.317, 0.717, 0.35, 0.777, 0.317, 1.45, 0.35, 1.698 ] + }, + { + "time": 0.3667, + "x": 0.777, + "y": 1.698, + "curve": [ 0.4, 0.781, 0.45, 0.685, 0.375, 1.698, 0.45, 1.173 ] + }, + { + "time": 0.4667, + "x": 0.685, + "y": 1.173, + "curve": [ 0.492, 0.685, 0.542, 0.825, 0.492, 1.173, 0.542, 1.572 ] + }, + { + "time": 0.5667, + "x": 0.825, + "y": 1.572, + "curve": [ 0.611, 0.816, 0.63, 0.727, 0.611, 1.577, 0.606, 1.255 ] + }, + { + "time": 0.6667, + "x": 0.725, + "y": 1.241, + "curve": [ 0.692, 0.725, 0.742, 0.895, 0.692, 1.241, 0.749, 1.799 ] + }, + { + "time": 0.7667, + "x": 0.895, + "y": 1.857, + "curve": [ 0.783, 0.895, 0.796, 0.892, 0.796, 1.955, 0.817, 1.962 ] + }, + { + "time": 0.8333, + "x": 0.845, + "y": 1.962, + "curve": [ 0.845, 0.831, 0.883, 0.802, 0.85, 1.962, 0.872, 1.704 ] + }, + { + "time": 0.9, + "x": 0.802, + "y": 1.491, + "curve": [ 0.917, 0.802, 0.95, 0.845, 0.907, 1.441, 0.936, 1.508 ] + }, + { + "time": 0.9667, + "x": 0.845, + "y": 1.627, + "curve": [ 0.975, 0.845, 0.992, 0.849, 0.973, 1.652, 0.992, 1.764 ] + }, + { "time": 1, "x": 0.849, "y": 1.764 } + ] + }, + "hoverboard-thruster-rear": { + "rotate": [ + { + "curve": [ 0.125, 0, 0.375, 24.06 ] + }, + { + "time": 0.5, + "value": 24.06, + "curve": [ 0.625, 24.06, 0.875, 0 ] + }, + { "time": 1 } + ] + }, + "hoverglow-rear": { + "scale": [ + { + "x": 0.845, + "y": 1.31, + "curve": [ 0.017, 0.845, 0.117, 0.899, 0.017, 1.31, 0.117, 2.033 ] + }, + { + "time": 0.1333, + "x": 0.899, + "y": 2.033, + "curve": [ 0.15, 0.899, 0.183, 0.752, 0.15, 2.033, 0.183, 1.574 ] + }, + { + "time": 0.2, + "x": 0.752, + "y": 1.574, + "curve": [ 0.225, 0.752, 0.275, 0.809, 0.225, 1.574, 0.275, 1.71 ] + }, + { + "time": 0.3, + "x": 0.809, + "y": 1.71, + "curve": [ 0.317, 0.809, 0.35, 0.717, 0.317, 1.71, 0.35, 1.397 ] + }, + { + "time": 0.3667, + "x": 0.717, + "y": 1.397, + "curve": [ 0.383, 0.717, 0.417, 0.777, 0.383, 1.397, 0.417, 1.45 ] + }, + { + "time": 0.4333, + "x": 0.777, + "y": 1.45, + "curve": [ 0.45, 0.777, 0.496, 0.689, 0.45, 1.45, 0.481, 1.168 ] + }, + { + "time": 0.5333, + "x": 0.685, + "y": 1.173, + "curve": [ 0.565, 0.682, 0.617, 0.758, 0.575, 1.177, 0.617, 1.297 ] + }, + { + "time": 0.6333, + "x": 0.758, + "y": 1.297, + "curve": [ 0.658, 0.758, 0.708, 0.725, 0.658, 1.297, 0.708, 1.241 ] + }, + { + "time": 0.7333, + "x": 0.725, + "y": 1.241, + "curve": [ 0.772, 0.732, 0.796, 0.893, 0.782, 1.238, 0.778, 1.854 ] + }, + { + "time": 0.8333, + "x": 0.895, + "y": 1.857, + "curve": [ 0.878, 0.9, 0.992, 0.845, 0.88, 1.86, 0.992, 1.31 ] + }, + { "time": 1, "x": 0.845, "y": 1.31 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -85.92, + "curve": [ 0.08, -85.59, 0.284, -62.7 ] + }, + { + "time": 0.3667, + "value": -55.14, + "curve": [ 0.438, -48.65, 0.551, -43.21 ] + }, + { + "time": 0.6333, + "value": -43.21, + "curve": [ 0.716, -43.22, 0.908, -85.92 ] + }, + { "time": 1, "value": -85.92 } + ], + "translate": [ + { + "x": -0.59, + "y": -2.94, + "curve": [ 0.1, -1.21, 0.275, -1.74, 0.092, -2.94, 0.275, -6.39 ] + }, + { + "time": 0.3667, + "x": -1.74, + "y": -6.39, + "curve": [ 0.433, -1.74, 0.567, 0.72, 0.433, -6.39, 0.587, -4.48 ] + }, + { + "time": 0.6333, + "x": 0.72, + "y": -4.21, + "curve": [ 0.725, 0.72, 0.908, -0.08, 0.743, -3.57, 0.908, -2.94 ] + }, + { "time": 1, "x": -0.59, "y": -2.94 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 7.61, + "curve": [ 0.143, 7.62, 0.247, -23.17 ] + }, + { + "time": 0.2667, + "value": -26.56, + "curve": [ 0.281, -29.08, 0.351, -37.36 ] + }, + { + "time": 0.4333, + "value": -37.2, + "curve": [ 0.513, -37.05, 0.562, -29.88 ] + }, + { + "time": 0.6, + "value": -25.18, + "curve": [ 0.621, -22.58, 0.694, -3.98 ] + }, + { + "time": 0.8, + "value": 3.63, + "curve": [ 0.861, 8.03, 0.946, 7.57 ] + }, + { "time": 1, "value": 7.61 } + ], + "translate": [ + { + "curve": [ 0.117, 0, 0.35, 0.52, 0.117, 0, 0.35, -3.27 ] + }, + { + "time": 0.4667, + "x": 0.52, + "y": -3.27, + "curve": [ 0.6, 0.52, 0.867, 0, 0.6, -3.27, 0.867, 0 ] + }, + { "time": 1 } + ], + "shear": [ + { + "y": 19.83, + "curve": [ 0.117, 0, 0.35, 15.28, 0.117, 19.83, 0.35, 28.31 ] + }, + { + "time": 0.4667, + "x": 15.28, + "y": 28.31, + "curve": [ 0.6, 15.28, 0.867, 0, 0.6, 28.31, 0.867, 19.83 ] + }, + { "time": 1, "y": 19.83 } + ] + }, + "board-ik": { + "translate": [ + { + "x": 393.62, + "curve": [ 0.083, 393.62, 0.25, 393.48, 0.083, 0, 0.25, 117.69 ] + }, + { + "time": 0.3333, + "x": 393.48, + "y": 117.69, + "curve": [ 0.375, 393.48, 0.458, 393.62, 0.375, 117.69, 0.458, 83.82 ] + }, + { "time": 0.5, "x": 393.62, "y": 83.82 }, + { "time": 0.6667, "x": 393.62, "y": 30.15 }, + { "time": 1, "x": 393.62 } + ] + }, + "front-thigh": { + "translate": [ + { "x": -7.49, "y": 8.51 } + ] + }, + "front-leg-target": { + "translate": [ + { + "time": 0.3667, + "curve": [ 0.428, 10.83, 0.567, 12.78, 0.414, 7.29, 0.567, 8.79 ] + }, + { + "time": 0.6, + "x": 12.78, + "y": 8.79, + "curve": [ 0.692, 12.78, 0.772, 11.27, 0.692, 8.79, 0.766, 8.62 ] + }, + { "time": 0.8667 } + ] + }, + "rear-leg-target": { + "translate": [ + { + "time": 0.4667, + "curve": [ 0.492, 0, 0.534, 4.47, 0.492, 0, 0.542, 1.63 ] + }, + { + "time": 0.5667, + "x": 4.53, + "y": 1.77, + "curve": [ 0.622, 4.64, 0.717, 3.31, 0.615, 2.06, 0.71, 2.1 ] + }, + { "time": 0.8 } + ] + }, + "exhaust3": { + "scale": [ + { + "x": 1.882, + "y": 0.81, + "curve": [ 0.017, 1.882, 0.167, 1.3, 0.017, 0.81, 0.167, 0.649 ] + }, + { + "time": 0.2, + "x": 1.3, + "y": 0.649, + "curve": [ 0.225, 1.3, 0.275, 2.051, 0.225, 0.649, 0.275, 0.984 ] + }, + { + "time": 0.3, + "x": 2.051, + "y": 0.984, + "curve": [ 0.325, 2.051, 0.375, 1.311, 0.325, 0.984, 0.384, 0.715 ] + }, + { + "time": 0.4, + "x": 1.311, + "y": 0.686, + "curve": [ 0.433, 1.311, 0.5, 1.86, 0.426, 0.638, 0.5, 0.537 ] + }, + { + "time": 0.5333, + "x": 1.86, + "y": 0.537, + "curve": [ 0.567, 1.86, 0.633, 1.187, 0.567, 0.537, 0.604, 0.854 ] + }, + { + "time": 0.6667, + "x": 1.187, + "y": 0.854, + "curve": [ 0.7, 1.187, 0.767, 1.549, 0.707, 0.854, 0.774, 0.775 ] + }, + { + "time": 0.8, + "x": 1.549, + "y": 0.746, + "curve": [ 0.817, 1.549, 0.85, 1.181, 0.815, 0.729, 0.85, 0.713 ] + }, + { + "time": 0.8667, + "x": 1.181, + "y": 0.713, + "curve": [ 0.9, 1.181, 0.967, 1.882, 0.9, 0.713, 0.967, 0.81 ] + }, + { "time": 1, "x": 1.882, "y": 0.81 } + ] + }, + "side-glow1": { + "rotate": [ + { "value": 51.12, "curve": "stepped" }, + { "time": 0.0667, "value": 43.82, "curve": "stepped" }, + { "time": 0.1, "value": 40.95, "curve": "stepped" }, + { "time": 0.1667, "value": 27.78, "curve": "stepped" }, + { "time": 0.2, "value": 10.24, "curve": "stepped" }, + { "time": 0.2667, "curve": "stepped" }, + { "time": 0.8, "value": -25.81 } + ], + "translate": [ + { "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.0667, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.1667, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.2667, "x": 248.16, "curve": "stepped" }, + { "time": 0.3, "x": 221.36, "curve": "stepped" }, + { "time": 0.3667, "x": 195.69, "curve": "stepped" }, + { "time": 0.4, "x": 171.08, "curve": "stepped" }, + { "time": 0.4667, "x": 144.84, "curve": "stepped" }, + { "time": 0.5, "x": 121.22, "curve": "stepped" }, + { "time": 0.5667, "x": 91.98, "curve": "stepped" }, + { "time": 0.6, "x": 62.63, "curve": "stepped" }, + { "time": 0.6667, "x": 30.78, "curve": "stepped" }, + { "time": 0.7, "curve": "stepped" }, + { "time": 0.7667, "x": -28.45, "curve": "stepped" }, + { "time": 0.8, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.8667, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "x": 0.535, "curve": "stepped" }, + { "time": 0.0667, "x": 0.594, "curve": "stepped" }, + { "time": 0.1, "x": 0.844, "curve": "stepped" }, + { "time": 0.1667, "curve": "stepped" }, + { "time": 0.8, "x": 0.534, "curve": "stepped" }, + { "time": 0.8667, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9, "x": 0.349, "y": 0.654 } + ] + }, + "side-glow2": { + "rotate": [ + { "time": 0.0667, "value": 51.12, "curve": "stepped" }, + { "time": 0.1, "value": 43.82, "curve": "stepped" }, + { "time": 0.1667, "value": 40.95, "curve": "stepped" }, + { "time": 0.2, "value": 27.78, "curve": "stepped" }, + { "time": 0.2667, "value": 10.24, "curve": "stepped" }, + { "time": 0.3, "curve": "stepped" }, + { "time": 0.8667, "value": -25.81 } + ], + "translate": [ + { "time": 0.0667, "x": 338.28, "y": 40.22, "curve": "stepped" }, + { "time": 0.1, "x": 331.2, "y": 30.39, "curve": "stepped" }, + { "time": 0.1667, "x": 318.63, "y": 20.59, "curve": "stepped" }, + { "time": 0.2, "x": 302.45, "y": 9.64, "curve": "stepped" }, + { "time": 0.2667, "x": 276.87, "y": 1.13, "curve": "stepped" }, + { "time": 0.3, "x": 248.16, "curve": "stepped" }, + { "time": 0.3667, "x": 221.36, "curve": "stepped" }, + { "time": 0.4, "x": 195.69, "curve": "stepped" }, + { "time": 0.4667, "x": 171.08, "curve": "stepped" }, + { "time": 0.5, "x": 144.84, "curve": "stepped" }, + { "time": 0.5667, "x": 121.22, "curve": "stepped" }, + { "time": 0.6, "x": 91.98, "curve": "stepped" }, + { "time": 0.6667, "x": 62.63, "curve": "stepped" }, + { "time": 0.7, "x": 30.78, "curve": "stepped" }, + { "time": 0.7667, "curve": "stepped" }, + { "time": 0.8, "x": -28.45, "curve": "stepped" }, + { "time": 0.8667, "x": -67.49, "y": 16.82, "curve": "stepped" }, + { "time": 0.9, "x": -83.07, "y": 24.36, "curve": "stepped" }, + { "time": 0.9667, "x": -93.81, "y": 29.55 } + ], + "scale": [ + { "time": 0.0667, "x": 0.535, "curve": "stepped" }, + { "time": 0.1, "x": 0.594, "curve": "stepped" }, + { "time": 0.1667, "x": 0.844, "curve": "stepped" }, + { "time": 0.2, "curve": "stepped" }, + { "time": 0.8667, "x": 0.534, "curve": "stepped" }, + { "time": 0.9, "x": 0.428, "y": 0.801, "curve": "stepped" }, + { "time": 0.9667, "x": 0.349, "y": 0.654 } + ] + }, + "torso": { + "rotate": [ + { + "value": -34.73, + "curve": [ 0.034, -36.31, 0.162, -39.33 ] + }, + { + "time": 0.2667, + "value": -39.37, + "curve": [ 0.384, -39.37, 0.491, -29.52 ] + }, + { + "time": 0.5, + "value": -28.86, + "curve": [ 0.525, -26.95, 0.571, -21.01 ] + }, + { + "time": 0.6333, + "value": -21.01, + "curve": [ 0.725, -21.01, 0.969, -33.35 ] + }, + { "time": 1, "value": -34.73 } + ] + }, + "neck": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.07, 12.09, 0.189, 16.03 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.333, 16.14, 0.449, 8.03 ] + }, + { + "time": 0.5, + "value": 5.83, + "curve": [ 0.542, 4.02, 0.6, 2.68 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.68, 0.943, 8.57 ] + }, + { "time": 1, "value": 10.2 } + ] + }, + "head": { + "rotate": [ + { + "value": 10.2, + "curve": [ 0.044, 11.52, 0.2, 16.12 ] + }, + { + "time": 0.2667, + "value": 16.14, + "curve": [ 0.375, 16.17, 0.492, 2.65 ] + }, + { + "time": 0.6333, + "value": 2.68, + "curve": [ 0.725, 2.7, 0.963, 9.26 ] + }, + { "time": 1, "value": 10.2 } + ], + "translate": [ + { + "curve": [ 0.03, -0.24, 0.2, -4.22, 0.051, -1.06, 0.2, -3.62 ] + }, + { + "time": 0.2667, + "x": -4.22, + "y": -3.62, + "curve": [ 0.358, -4.22, 0.542, 0.84, 0.358, -3.62, 0.542, 6.01 ] + }, + { + "time": 0.6333, + "x": 0.84, + "y": 6.01, + "curve": [ 0.725, 0.84, 0.939, 0.32, 0.725, 6.01, 0.945, 1.14 ] + }, + { "time": 1 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": -11.18, + "curve": [ 0.064, -14.82, 0.25, -20.01 ] + }, + { + "time": 0.3333, + "value": -20.01, + "curve": [ 0.429, -20.12, 0.58, 5.12 ] + }, + { + "time": 0.6, + "value": 8.67, + "curve": [ 0.617, 11.72, 0.687, 20.52 ] + }, + { + "time": 0.7667, + "value": 20.55, + "curve": [ 0.848, 20.7, 0.963, -9.43 ] + }, + { "time": 1, "value": -11.18 } + ] + }, + "hair3": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.014, 8.51, 0.075, 2.63 ] + }, + { + "time": 0.1, + "value": 2.63, + "curve": [ 0.15, 2.63, 0.25, 13.52 ] + }, + { + "time": 0.3, + "value": 13.52, + "curve": [ 0.35, 13.52, 0.45, 11.28 ] + }, + { + "time": 0.5, + "value": 11.28, + "curve": [ 0.575, 11.28, 0.725, 18.13 ] + }, + { + "time": 0.8, + "value": 18.13, + "curve": [ 0.85, 18.13, 0.978, 11.07 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -17.7, + "curve": [ 0.008, -17.7, 0.025, -23.73 ] + }, + { + "time": 0.0333, + "value": -23.73, + "curve": [ 0.067, -23.73, 0.154, -4.4 ] + }, + { + "time": 0.1667, + "value": -1.92, + "curve": [ 0.197, 4.09, 0.236, 12.91 ] + }, + { + "time": 0.2667, + "value": 17.56, + "curve": [ 0.301, 22.68, 0.342, 27.97 ] + }, + { + "time": 0.3667, + "value": 27.97, + "curve": [ 0.4, 27.97, 0.467, -1.45 ] + }, + { + "time": 0.5, + "value": -1.45, + "curve": [ 0.517, -1.45, 0.55, 3.16 ] + }, + { + "time": 0.5667, + "value": 3.16, + "curve": [ 0.583, 3.16, 0.617, -8.9 ] + }, + { + "time": 0.6333, + "value": -8.9, + "curve": [ 0.642, -8.9, 0.658, -5.4 ] + }, + { + "time": 0.6667, + "value": -5.4, + "curve": [ 0.683, -5.4, 0.717, -15.32 ] + }, + { + "time": 0.7333, + "value": -15.32, + "curve": [ 0.75, -15.32, 0.783, -9.19 ] + }, + { + "time": 0.8, + "value": -9.19, + "curve": [ 0.817, -9.19, 0.85, -23.6 ] + }, + { + "time": 0.8667, + "value": -23.6, + "curve": [ 0.883, -23.6, 0.917, -17.38 ] + }, + { + "time": 0.9333, + "value": -17.38, + "curve": [ 0.942, -17.38, 0.958, -20.46 ] + }, + { + "time": 0.9667, + "value": -20.46, + "curve": [ 0.975, -20.46, 0.992, -17.7 ] + }, + { "time": 1, "value": -17.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": 9.61, + "curve": [ 0.06, 9.04, 0.25, 8.9 ] + }, + { + "time": 0.3333, + "value": 8.9, + "curve": [ 0.392, 8.9, 0.508, 14.58 ] + }, + { + "time": 0.5667, + "value": 14.58, + "curve": [ 0.675, 14.58, 0.956, 10.28 ] + }, + { "time": 1, "value": 9.61 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -3.82, + "curve": [ 0.017, -3.82, 0.064, -9.16 ] + }, + { + "time": 0.1333, + "value": -9.09, + "curve": [ 0.178, -9.04, 0.234, 1.29 ] + }, + { + "time": 0.2667, + "value": 5.98, + "curve": [ 0.276, 7.27, 0.336, 17.1 ] + }, + { + "time": 0.3667, + "value": 17.1, + "curve": [ 0.413, 17.1, 0.467, 1.59 ] + }, + { + "time": 0.5, + "value": 1.59, + "curve": [ 0.533, 1.59, 0.567, 13.63 ] + }, + { + "time": 0.6, + "value": 13.63, + "curve": [ 0.617, 13.63, 0.683, 0.78 ] + }, + { + "time": 0.7, + "value": 0.78, + "curve": [ 0.717, 0.78, 0.75, 12.01 ] + }, + { + "time": 0.7667, + "value": 11.9, + "curve": [ 0.792, 11.73, 0.817, -0.85 ] + }, + { + "time": 0.8333, + "value": -0.85, + "curve": [ 0.85, -0.85, 0.88, 1.99 ] + }, + { + "time": 0.9, + "value": 1.82, + "curve": [ 0.916, 1.68, 0.95, -6.9 ] + }, + { + "time": 0.9667, + "value": -6.9, + "curve": [ 0.975, -6.9, 0.992, -3.82 ] + }, + { "time": 1, "value": -3.82 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 31.65, + "curve": [ 0.108, 31.65, 0.325, 13.01 ] + }, + { + "time": 0.4333, + "value": 13.01, + "curve": [ 0.71, 13.01, 0.917, 31.65 ] + }, + { "time": 1, "value": 31.65 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 31, + "curve": [ 0.108, 31, 0.325, 12.76 ] + }, + { + "time": 0.4333, + "value": 12.79, + "curve": [ 0.587, 12.82, 0.917, 31 ] + }, + { "time": 1, "value": 31 } + ] + }, + "gun": { + "rotate": [ + { + "value": 1.95, + "curve": [ 0.083, 1.95, 0.245, 36.73 ] + }, + { + "time": 0.3333, + "value": 36.71, + "curve": [ 0.439, 36.69, 0.589, 10.68 ] + }, + { + "time": 0.6333, + "value": 8.75, + "curve": [ 0.701, 5.81, 0.917, 1.95 ] + }, + { "time": 1, "value": 1.95 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 2.35 ] + }, + { + "time": 0.1333, + "value": 2.35, + "curve": [ 0.225, 2.35, 0.408, -2.4 ] + }, + { + "time": 0.5, + "value": -2.4, + "curve": [ 0.567, -2.4, 0.7, 1.44 ] + }, + { + "time": 0.7667, + "value": 1.44, + "curve": [ 0.825, 1.44, 0.942, 0 ] + }, + { "time": 1 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.063, 0.77, 0.106, 1.42 ] + }, + { + "time": 0.1667, + "value": 1.42, + "curve": [ 0.259, 1.42, 0.344, -1.25 ] + }, + { + "time": 0.4667, + "value": -1.26, + "curve": [ 0.656, -1.26, 0.917, -0.78 ] + }, + { "time": 1 } + ] + }, + "head-control": { + "translate": [ + { + "x": 0.37, + "y": -11.17, + "curve": [ 0.133, 0.37, 0.335, -10.23, 0.133, -11.17, 0.335, 3.15 ] + }, + { + "time": 0.5333, + "x": -10.23, + "y": 3.15, + "curve": [ 0.71, -10.23, 0.883, 0.37, 0.71, 3.15, 0.883, -11.17 ] + }, + { "time": 1, "x": 0.37, "y": -11.17 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 10.15, + "curve": [ 0.103, 1.46, 0.249, 1.36, 0.103, 10.15, 0.249, -4.39 ] + }, + { + "time": 0.4, + "x": 1.36, + "y": -4.39, + "curve": [ 0.621, 1.36, 0.85, 1.46, 0.621, -4.39, 0.85, 10.15 ] + }, + { "time": 1, "x": 1.46, "y": 10.15 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": 1.4, + "y": 0.44, + "curve": [ 0.088, 1.4, 0.208, -2.47, 0.088, 0.44, 0.208, 8.61 ] + }, + { + "time": 0.3333, + "x": -2.47, + "y": 8.61, + "curve": [ 0.572, -2.47, 0.833, 1.4, 0.572, 8.61, 0.833, 0.44 ] + }, + { "time": 1, "x": 1.4, "y": 0.44 } + ] + } + }, + "transform": { + "front-foot-board-transform": [ + { "mixRotate": 0.997 } + ], + "rear-foot-board-transform": [ + {} + ], + "toes-board": [ + { "mixX": 0, "mixScaleX": 0, "mixShearY": 0 } + ] + }, + "attachments": { + "default": { + "front-foot": { + "front-foot": { + "deform": [ + { + "offset": 26, + "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ] + } + ] + } + }, + "front-shin": { + "front-shin": { + "deform": [ + { + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -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.54892, -3.06021, 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.80437, -7.01817 ] + }, + { + "time": 0.3667, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ] + }, + { + "time": 0.5333, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -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.54892, -3.06021, 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.80437, -7.01817 ] + }, + { + "time": 1, + "offset": 14, + "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -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.54892, -3.06021, 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.80437, -7.01817 ] + } + ] + } + }, + "hoverboard-board": { + "hoverboard-board": { + "deform": [ + { + "curve": [ 0.067, 0, 0.2, 1 ] + }, + { + "time": 0.2667, + "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 ], + "curve": [ 0.45, 0, 0.817, 1 ] + }, + { "time": 1 } + ] + } + }, + "rear-foot": { + "rear-foot": { + "deform": [ + { + "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 ] + } + ] + } + } + } + } + }, + "idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { "x": -69.06 } + ] + }, + "hip": { + "rotate": [ + { + "curve": [ 0.073, 0.35, 0.303, 1.27 ] + }, + { + "time": 0.4, + "value": 1.28, + "curve": [ 0.615, 1.3, 0.847, -1.41 ] + }, + { + "time": 1.2, + "value": -1.38, + "curve": [ 1.344, -1.37, 1.602, -0.28 ] + }, + { "time": 1.6667 } + ], + "translate": [ + { + "x": -11.97, + "y": -23.15, + "curve": [ 0.059, -12.96, 0.258, -15.19, 0.142, -23.15, 0.341, -24.89 ] + }, + { + "time": 0.4667, + "x": -15.14, + "y": -26.74, + "curve": [ 0.62, -15.1, 0.788, -13.28, 0.597, -28.66, 0.75, -30.01 ] + }, + { + "time": 0.9, + "x": -12.02, + "y": -30.01, + "curve": [ 0.978, -11.13, 1.175, -9.05, 1.036, -29.94, 1.234, -28.08 ] + }, + { + "time": 1.3333, + "x": -9.06, + "y": -26.64, + "curve": [ 1.501, -9.06, 1.614, -10.95, 1.454, -24.89, 1.609, -23.15 ] + }, + { "time": 1.6667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -60.87, + "curve": [ 0.154, -60.85, 0.452, -68.65 ] + }, + { + "time": 0.8333, + "value": -68.65, + "curve": [ 1.221, -68.65, 1.542, -60.87 ] + }, + { "time": 1.6667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 42.46, + "curve": [ 0.029, 42.97, 0.134, 45.28 ] + }, + { + "time": 0.3333, + "value": 45.27, + "curve": [ 0.578, 45.26, 0.798, 40.07 ] + }, + { + "time": 0.8333, + "value": 39.74, + "curve": [ 0.878, 39.32, 1.019, 38.23 ] + }, + { + "time": 1.2, + "value": 38.22, + "curve": [ 1.377, 38.22, 1.619, 41.68 ] + }, + { "time": 1.6667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 39.2, + "curve": [ 0.185, 39.22, 0.5, 29.37 ] + }, + { + "time": 0.6667, + "value": 29.37, + "curve": [ 0.917, 29.37, 1.417, 39.2 ] + }, + { "time": 1.6667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "value": -6.75, + "curve": [ 0.176, -7.88, 0.349, -8.95 ] + }, + { + "time": 0.4667, + "value": -8.95, + "curve": [ 0.55, -8.95, 0.697, -6.77 ] + }, + { + "time": 0.8333, + "value": -5.44, + "curve": [ 0.88, -4.98, 1.05, -4.12 ] + }, + { + "time": 1.1333, + "value": -4.12, + "curve": [ 1.266, -4.12, 1.469, -5.48 ] + }, + { "time": 1.6667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "curve": [ 0.086, 0, 0.233, 2.48 ] + }, + { + "time": 0.3333, + "value": 4.13, + "curve": [ 0.429, 5.7, 0.711, 10.06 ] + }, + { + "time": 0.8333, + "value": 10.06, + "curve": [ 0.926, 10.06, 1.092, 4.21 ] + }, + { + "time": 1.2, + "value": 2.78, + "curve": [ 1.349, 0.8, 1.551, 0 ] + }, + { "time": 1.6667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "curve": [ 0.063, 0.54, 0.367, 3.39 ] + }, + { + "time": 0.5333, + "value": 3.39, + "curve": [ 0.696, 3.39, 0.939, -1.63 ] + }, + { + "time": 1.2, + "value": -1.61, + "curve": [ 1.42, -1.59, 1.574, -0.67 ] + }, + { "time": 1.6667 } + ] + }, + "gun": { + "rotate": [ + { + "curve": [ 0.099, 0.27, 0.367, 1.23 ] + }, + { + "time": 0.5333, + "value": 1.23, + "curve": [ 0.665, 1.23, 0.937, -0.56 ] + }, + { + "time": 1.1333, + "value": -0.55, + "curve": [ 1.316, -0.55, 1.582, -0.21 ] + }, + { "time": 1.6667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -22.88, + "curve": [ 0.099, -23.45, 0.363, -24.74 ] + }, + { + "time": 0.5333, + "value": -24.74, + "curve": [ 0.706, -24.74, 0.961, -20.97 ] + }, + { + "time": 1.1333, + "value": -20.97, + "curve": [ 1.355, -20.97, 1.567, -22.28 ] + }, + { "time": 1.6667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "value": 3.78, + "curve": [ 0.167, 3.78, 0.5, 5.45 ] + }, + { + "time": 0.6667, + "value": 5.45, + "curve": [ 0.917, 5.45, 1.417, 3.78 ] + }, + { "time": 1.6667, "value": 3.78 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.067, 0.33, 0.341, 2.54 ] + }, + { + "time": 0.5333, + "value": 2.54, + "curve": [ 0.734, 2.55, 0.982, -0.94 ] + }, + { + "time": 1.1333, + "value": -0.93, + "curve": [ 1.365, -0.91, 1.549, -0.56 ] + }, + { "time": 1.6667 } + ] + }, + "torso3": { + "rotate": [ + { + "value": -2.15, + "curve": [ 0.052, -1.9, 0.384, -0.15 ] + }, + { + "time": 0.5333, + "value": -0.14, + "curve": [ 0.762, -0.13, 0.895, -3.1 ] + }, + { + "time": 1.1333, + "value": -3.1, + "curve": [ 1.348, -3.1, 1.592, -2.46 ] + }, + { "time": 1.6667, "value": -2.15 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.213, 2.86 ] + }, + { + "time": 0.2667, + "value": 3.65, + "curve": [ 0.358, 4.99, 0.535, 7.92 ] + }, + { + "time": 0.6667, + "value": 7.92, + "curve": [ 0.809, 7.92, 1.067, 5.49 ] + }, + { + "time": 1.1333, + "value": 4.7, + "curve": [ 1.245, 3.34, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.225, -7.97 ] + }, + { + "time": 0.2667, + "value": -9.75, + "curve": [ 0.316, -11.84, 0.519, -16.66 ] + }, + { + "time": 0.6667, + "value": -16.66, + "curve": [ 0.817, -16.66, 1.029, -11.43 ] + }, + { + "time": 1.1333, + "value": -9.14, + "curve": [ 1.25, -6.56, 1.525, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.1, 0, 0.3, 1.32 ] + }, + { + "time": 0.4, + "value": 1.32, + "curve": [ 0.55, 1.32, 0.866, 0.93 ] + }, + { + "time": 1, + "value": 0.73, + "curve": [ 1.189, 0.46, 1.5, 0 ] + }, + { "time": 1.6667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.118, -0.44, 0.3, -8.52 ] + }, + { + "time": 0.4, + "value": -8.52, + "curve": [ 0.55, -8.52, 0.85, 1.96 ] + }, + { + "time": 1, + "value": 1.96, + "curve": [ 1.167, 1.96, 1.577, 0.38 ] + }, + { "time": 1.6667 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.098, 1.46, 0.3, 4.49, 0.17, 0.13, 0.316, -3.28 ] + }, + { + "time": 0.4, + "x": 4.55, + "y": -5.95, + "curve": [ 0.53, 4.64, 0.776, 2.59, 0.492, -8.89, 0.668, -14.21 ] + }, + { + "time": 0.8667, + "x": 1.42, + "y": -14.26, + "curve": [ 0.966, 0.15, 1.109, -2.91, 0.994, -14.26, 1.144, -10.58 ] + }, + { + "time": 1.2333, + "x": -3.02, + "y": -8.26, + "curve": [ 1.342, -3.02, 1.568, -1.48, 1.317, -6.1, 1.558, 0 ] + }, + { "time": 1.6667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.21, 0, 0.525, -1.72, 0.21, 0, 0.525, 4.08 ] + }, + { + "time": 0.8333, + "x": -1.72, + "y": 4.08, + "curve": [ 1.15, -1.72, 1.46, 0, 1.15, 4.08, 1.46, 0 ] + }, + { "time": 1.6667 } + ] + } + } + }, + "idle-turn": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-upper-arm": { + "rotate": [ + { + "value": -302.77, + "curve": [ 0, -406.9, 0.125, -420.87 ] + }, + { "time": 0.2667, "value": -420.87 } + ], + "translate": [ + { + "x": 2.24, + "y": -4.98, + "curve": [ 0.067, 2.24, 0.111, 0, 0.067, -4.98, 0.111, 0 ] + }, + { "time": 0.2667 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 248.56, + "curve": [ 0, 371.28, 0.062, 399.2 ] + }, + { "time": 0.1333, "value": 399.2 } + ], + "translate": [ + { + "x": -2.84, + "y": 37.28, + "curve": [ 0.033, -2.84, 0.069, 0, 0.033, 37.28, 0.069, 0 ] + }, + { "time": 0.1333 } + ] + }, + "gun": { + "rotate": [ + { + "value": -3.95, + "curve": [ 0, -10.4, 0.019, -20.43 ] + }, + { + "time": 0.0333, + "value": -20.45, + "curve": [ 0.044, -20.47, 0.125, 0 ] + }, + { "time": 0.2 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.2, + "curve": [ 0, 6.27, 0.125, 3.78 ] + }, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hip": { + "translate": [ + { + "x": -2.69, + "y": -6.79, + "curve": [ 0.067, -2.69, 0.2, -11.97, 0.067, -6.79, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -15.54, + "curve": [ 0, -3.08, 0.034, 18.44 ] + }, + { + "time": 0.0667, + "value": 19.02, + "curve": [ 0.108, 19.75, 0.169, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.94, + "curve": [ 0, 0.962, 0.024, 1.237, 0, 1, 0.026, 0.947 ] + }, + { + "time": 0.0667, + "x": 1.236, + "y": 0.947, + "curve": [ 0.117, 1.235, 0.189, 1, 0.117, 0.947, 0.189, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 11.75, + "curve": [ 0, -7.97, 0.017, -33.4 ] + }, + { + "time": 0.0333, + "value": -33.39, + "curve": [ 0.049, -33.37, 0.131, 0 ] + }, + { "time": 0.2 } + ] + }, + "torso": { + "rotate": [ + { + "value": -18.25, + "curve": [ 0, -10.59, 0.125, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.132, 1, 0.067, 1.03, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "head": { + "rotate": [ + { + "value": 5.12, + "curve": [ 0, -6.34, 0.125, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ], + "scale": [ + { + "y": 1.03, + "curve": [ 0.067, 1, 0.107, 1, 0.067, 1.03, 0.107, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": -58.39, + "y": 30.48, + "curve": [ 0, -7.15, 0.047, 16.62, 0, 12.71, 0.039, 0.22 ] + }, + { + "time": 0.1, + "x": 34.14, + "y": -0.19, + "curve": [ 0.136, 45.79, 0.163, 48.87, 0.133, -0.41, 0.163, 0 ] + }, + { "time": 0.2, "x": 48.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 6.69, + "curve": [ 0, 19.76, 0.039, 56.53 ] + }, + { + "time": 0.0667, + "value": 56.63, + "curve": [ 0.114, 56.79, 0.189, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -1.85, + "curve": [ 0.014, -8.91, 0.047, -28.4 ] + }, + { + "time": 0.1, + "value": -28.89, + "curve": [ 0.144, -29.29, 0.262, -21.77 ] + }, + { "time": 0.2667 } + ], + "translate": [ + { + "x": 9.97, + "y": 0.82, + "curve": [ 0, -54.41, 0.078, -69.06, 0, 0.15, 0.078, 0 ] + }, + { "time": 0.1667, "x": -69.06 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -9.01, + "curve": [ 0.044, -9.01, 0.072, 7.41 ] + }, + { + "time": 0.1333, + "value": 10.08, + "curve": [ 0.166, 11.47, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -16.49, + "curve": [ 0.044, -16.49, 0.101, -5.98 ] + }, + { + "time": 0.1333, + "value": -2.95, + "curve": [ 0.162, -0.34, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -3.85, + "curve": [ 0.044, -3.85, 0.072, 6.91 ] + }, + { + "time": 0.1333, + "value": 8.05, + "curve": [ 0.166, 8.65, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "value": 1.25, + "curve": [ 0.044, 1.25, 0.072, 8.97 ] + }, + { + "time": 0.1333, + "value": 8.6, + "curve": [ 0.166, 8.4, 0.208, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 12.21, + "y": 1.89, + "curve": [ 0.033, 12.21, 0.1, 0, 0.033, 1.89, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.11, + "y": -1.38, + "curve": [ 0.033, -16.11, 0.1, 0, 0.033, -1.38, 0.1, 0 ] + }, + { "time": 0.1333 } + ] + }, + "torso3": { + "rotate": [ + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "x": -13.72, + "y": -34.7, + "curve": [ 0.067, -13.72, 0.2, 0, 0.067, -34.7, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.13, + "y": -14.31, + "curve": [ 0.067, 1.13, 0.2, 0, 0.067, -14.31, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + } + } + }, + "jump": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" }, + { "time": 0.1, "name": "front-fist-closed" }, + { "time": 0.8333, "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-thigh": { + "rotate": [ + { + "value": 55.08, + "curve": [ 0.007, 46.66, 0.043, 26.3 ] + }, + { + "time": 0.0667, + "value": 22.84, + "curve": [ 0.1, 17.99, 0.165, 15.78 ] + }, + { + "time": 0.2333, + "value": 15.71, + "curve": [ 0.309, 15.63, 0.408, 46.67 ] + }, + { + "time": 0.5, + "value": 63.6, + "curve": [ 0.56, 74.72, 0.762, 91.48 ] + }, + { + "time": 0.9667, + "value": 91.81, + "curve": [ 1.068, 92.01, 1.096, 22.05 ] + }, + { + "time": 1.1667, + "value": 22.25, + "curve": [ 1.18, 22.29, 1.176, 56.17 ] + }, + { + "time": 1.2, + "value": 56.16, + "curve": [ 1.246, 56.15, 1.263, 54.94 ] + }, + { "time": 1.3333, "value": 55.08 } + ], + "translate": [ + { "x": -5.13, "y": 11.55 } + ] + }, + "torso": { + "rotate": [ + { + "value": -45.57, + "curve": [ 0.022, -44.61, 0.03, -39.06 ] + }, + { + "time": 0.0667, + "value": -35.29, + "curve": [ 0.12, -29.77, 0.28, -19.95 ] + }, + { + "time": 0.4333, + "value": -19.95, + "curve": [ 0.673, -19.95, 0.871, -22.38 ] + }, + { + "time": 0.9667, + "value": -27.08, + "curve": [ 1.094, -33.33, 1.176, -44.93 ] + }, + { "time": 1.3333, "value": -45.57 } + ], + "translate": [ + { "x": -3.79, "y": -0.77 } + ] + }, + "rear-thigh": { + "rotate": [ + { + "value": 12.81, + "curve": [ 0.067, 12.81, 0.242, 67.88 ] + }, + { + "time": 0.2667, + "value": 74.11, + "curve": [ 0.314, 86.02, 0.454, 92.23 ] + }, + { + "time": 0.5667, + "value": 92.24, + "curve": [ 0.753, 92.26, 0.966, 67.94 ] + }, + { + "time": 1, + "value": 61.32, + "curve": [ 1.039, 53.75, 1.218, 12.68 ] + }, + { "time": 1.3333, "value": 12.81 } + ] + }, + "rear-shin": { + "rotate": [ + { + "value": -115.64, + "curve": [ 0.067, -117.17, 0.125, -117.15 ] + }, + { + "time": 0.1667, + "value": -117.15, + "curve": [ 0.225, -117.15, 0.332, -108.76 ] + }, + { + "time": 0.4, + "value": -107.15, + "curve": [ 0.48, -105.26, 0.685, -103.49 ] + }, + { + "time": 0.7667, + "value": -101.97, + "curve": [ 0.826, -100.87, 0.919, -92.3 ] + }, + { + "time": 1, + "value": -92.28, + "curve": [ 1.113, -92.26, 1.297, -114.22 ] + }, + { "time": 1.3333, "value": -115.64 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -40.21, + "curve": [ 0.054, -35.46, 0.15, -31.12 ] + }, + { + "time": 0.2, + "value": -31.12, + "curve": [ 0.308, -31.12, 0.547, -80.12 ] + }, + { + "time": 0.6333, + "value": -96.56, + "curve": [ 0.697, -108.56, 0.797, -112.54 ] + }, + { + "time": 0.8667, + "value": -112.6, + "curve": [ 1.137, -112.84, 1.274, -49.19 ] + }, + { "time": 1.3333, "value": -40.21 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.054, 32.23, 0.192, 55.84 ] + }, + { + "time": 0.2333, + "value": 62.58, + "curve": [ 0.29, 71.87, 0.375, 79.28 ] + }, + { + "time": 0.4333, + "value": 79.18, + "curve": [ 0.555, 78.98, 0.684, 27.54 ] + }, + { + "time": 0.7333, + "value": 13.28, + "curve": [ 0.786, -1.85, 0.874, -24.76 ] + }, + { + "time": 1, + "value": -25.45, + "curve": [ 1.165, -26.36, 1.303, 9.1 ] + }, + { "time": 1.3333, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.114, -39.59, 0.3, -45.61 ] + }, + { + "time": 0.4, + "value": -45.61, + "curve": [ 0.442, -45.61, 0.537, -21.54 ] + }, + { + "time": 0.5667, + "value": -15.4, + "curve": [ 0.592, -10.23, 0.692, 11.89 ] + }, + { + "time": 0.7333, + "value": 11.73, + "curve": [ 0.783, 11.54, 0.831, 1.8 ] + }, + { + "time": 0.8667, + "value": -5.78, + "curve": [ 0.897, -12.22, 0.901, -14.22 ] + }, + { + "time": 0.9333, + "value": -14.51, + "curve": [ 0.974, -14.89, 0.976, 10.38 ] + }, + { + "time": 1, + "value": 10.55, + "curve": [ 1.027, 10.74, 1.023, -8.44 ] + }, + { + "time": 1.0333, + "value": -8.42, + "curve": [ 1.059, -8.36, 1.074, 10.12 ] + }, + { + "time": 1.1, + "value": 10.22, + "curve": [ 1.168, 10.48, 1.27, -36.07 ] + }, + { "time": 1.3333, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.048, 36.1, 0.168, 20.45 ] + }, + { + "time": 0.3, + "value": 20.45, + "curve": [ 0.476, 20.45, 0.571, 33.76 ] + }, + { + "time": 0.6, + "value": 38.67, + "curve": [ 0.642, 45.8, 0.681, 57.44 ] + }, + { + "time": 0.7333, + "value": 62.91, + "curve": [ 0.829, 72.8, 0.996, 77.61 ] + }, + { + "time": 1.0333, + "value": 80.37, + "curve": [ 1.082, 83.94, 1.148, 90.6 ] + }, + { + "time": 1.2, + "value": 90.6, + "curve": [ 1.248, 90.46, 1.317, 53.07 ] + }, + { "time": 1.3333, "value": 49.06 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.022, 25.12, 0.187, -0.89 ] + }, + { + "time": 0.2, + "value": -2.52, + "curve": [ 0.257, -9.92, 0.372, -17.38 ] + }, + { + "time": 0.4333, + "value": -17.41, + "curve": [ 0.54, -17.47, 0.659, -16.91 ] + }, + { + "time": 0.7667, + "value": -12.1, + "curve": [ 0.907, -5.79, 1.025, 14.58 ] + }, + { + "time": 1.1, + "value": 20.58, + "curve": [ 1.191, 27.85, 1.283, 29.67 ] + }, + { "time": 1.3333, "value": 29.67 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.104, 11.82, 0.179, 11.15 ] + }, + { + "time": 0.2, + "value": 10.08, + "curve": [ 0.255, 7.29, 0.405, -8.15 ] + }, + { + "time": 0.4333, + "value": -9.35, + "curve": [ 0.508, -12.48, 0.595, -13.14 ] + }, + { + "time": 0.6667, + "value": -12.61, + "curve": [ 0.714, -12.26, 0.815, -5.57 ] + }, + { + "time": 0.8333, + "value": -4.08, + "curve": [ 0.883, -0.07, 1.045, 12.77 ] + }, + { + "time": 1.1, + "value": 15.06, + "curve": [ 1.208, 19.6, 1.279, 20.64 ] + }, + { "time": 1.3333, "value": 20.73 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.008, 12.19, 0.197, -23.53 ] + }, + { + "time": 0.3333, + "value": -23.95, + "curve": [ 0.509, -23.95, 0.667, -2.66 ] + }, + { + "time": 0.7333, + "value": -2.66, + "curve": [ 0.792, -2.66, 0.908, -13.32 ] + }, + { + "time": 0.9667, + "value": -13.32, + "curve": [ 1.158, -13.11, 1.241, -1.58 ] + }, + { "time": 1.3333, "value": -1.58 } + ], + "scale": [ + { + "curve": [ 0.041, 1, 0.052, 0.962, 0.041, 1, 0.052, 1.137 ] + }, + { + "time": 0.1, + "x": 0.954, + "y": 1.137, + "curve": [ 0.202, 0.962, 0.318, 1, 0.202, 1.137, 0.252, 1.002 ] + }, + { "time": 0.4667 }, + { + "time": 1.0667, + "x": 1.002, + "curve": [ 1.092, 1.002, 1.126, 1.143, 1.092, 1, 1.128, 0.975 ] + }, + { + "time": 1.1667, + "x": 1.144, + "y": 0.973, + "curve": [ 1.204, 1.145, 1.233, 0.959, 1.206, 0.972, 1.227, 1.062 ] + }, + { + "time": 1.2667, + "x": 0.958, + "y": 1.063, + "curve": [ 1.284, 0.958, 1.292, 1.001, 1.288, 1.063, 1.288, 1.001 ] + }, + { "time": 1.3333 } + ] + }, + "hip": { + "translate": [ + { + "y": -45.46, + "curve": [ 0.042, -0.09, 0.15, 15.22, 0.031, 44.98, 0.123, 289.73 ] + }, + { + "time": 0.2, + "x": 15.22, + "y": 415.85, + "curve": [ 0.332, 15.22, 0.539, -34.52, 0.271, 532.93, 0.483, 720.5 ] + }, + { + "time": 0.7667, + "x": -34.52, + "y": 721.6, + "curve": [ 0.888, -34.52, 1.057, -21.95, 1.049, 721.17, 1.098, 379.84 ] + }, + { + "time": 1.1333, + "x": -15.67, + "y": 266.77, + "curve": [ 1.144, -14.77, 1.188, -10.53, 1.15, 213.72, 1.172, -61.32 ] + }, + { + "time": 1.2333, + "x": -6.53, + "y": -61.34, + "curve": [ 1.272, -3.22, 1.311, 0.05, 1.291, -61.36, 1.296, -44.8 ] + }, + { "time": 1.3333, "y": -45.46 } + ] + }, + "front-shin": { + "rotate": [ + { + "value": -74.19, + "curve": [ 0, -51.14, 0.042, -12.54 ] + }, + { + "time": 0.1667, + "value": -12.28, + "curve": [ 0.285, -12.32, 0.37, -74.44 ] + }, + { + "time": 0.4333, + "value": -92.92, + "curve": [ 0.498, -111.86, 0.617, -140.28 ] + }, + { + "time": 0.9, + "value": -140.84, + "curve": [ 1.004, -141.04, 1.09, -47.87 ] + }, + { + "time": 1.1, + "value": -37.44, + "curve": [ 1.108, -29.83, 1.14, -21.18 ] + }, + { + "time": 1.1667, + "value": -21.08, + "curve": [ 1.18, -21.03, 1.191, -50.65 ] + }, + { + "time": 1.2, + "value": -53.17, + "curve": [ 1.22, -58.53, 1.271, -73.38 ] + }, + { "time": 1.3333, "value": -74.19 } + ] + }, + "front-foot": { + "rotate": [ + { + "value": 7.35, + "curve": [ 0, 4.8, 0.05, -26.64 ] + }, + { + "time": 0.0667, + "value": -26.64, + "curve": [ 0.192, -26.64, 0.442, -11.77 ] + }, + { + "time": 0.5667, + "value": -11.77, + "curve": [ 0.692, -11.77, 0.942, -19.36 ] + }, + { + "time": 1.0667, + "value": -19.36, + "curve": [ 1.133, -19.36, 1.32, 3.82 ] + }, + { "time": 1.3333, "value": 7.35 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -7.14 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.15, 30.81 ] + }, + { + "time": 0.2, + "value": 30.81, + "curve": [ 0.258, 30.81, 0.375, 13.26 ] + }, + { + "time": 0.4333, + "value": 13.26, + "curve": [ 0.508, 13.26, 0.658, 15.05 ] + }, + { + "time": 0.7333, + "value": 14.98, + "curve": [ 0.789, 14.94, 0.828, 13.62 ] + }, + { + "time": 0.8667, + "value": 12.72, + "curve": [ 0.887, 12.25, 0.984, 9.83 ] + }, + { + "time": 1.0333, + "value": 8.6, + "curve": [ 1.045, 8.31, 1.083, 7.55 ] + }, + { + "time": 1.1333, + "value": 7.13, + "curve": [ 1.175, 6.78, 1.283, 6.18 ] + }, + { "time": 1.3333, "value": 6.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-leg-target": { + "rotate": [ + { "value": -38.43 } + ], + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "front-foot-target": { + "rotate": [ + { "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 } + ], + "translate": [ + { "x": -176.39, "y": 134.12 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -143.73, + "curve": [ 0.083, -144.24, 0.167, -74.26 ] + }, + { + "time": 0.2667, + "value": -52.76, + "curve": [ 0.342, -36.57, 0.513, -36.57 ] + }, + { + "time": 0.6333, + "value": -30.97, + "curve": [ 0.724, -26.78, 0.848, -17.06 ] + }, + { + "time": 0.9667, + "value": -16.74, + "curve": [ 1.167, -16.2, 1.272, -144.17 ] + }, + { "time": 1.3333, "value": -143.73 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -1.57, + "curve": [ 0, -24.71, 0.162, -60.88 ] + }, + { + "time": 0.2667, + "value": -60.83, + "curve": [ 0.342, -60.8, 0.582, -43.5 ] + }, + { + "time": 0.7, + "value": -39.45, + "curve": [ 0.773, -36.94, 0.832, -36.78 ] + }, + { + "time": 0.9667, + "value": -36.6, + "curve": [ 1.054, -36.49, 1.092, -37.37 ] + }, + { + "time": 1.1667, + "value": -33.26, + "curve": [ 1.237, -29.37, 1.147, -1.41 ] + }, + { "time": 1.2, "value": -1.57 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, 13.59, 0.117, 18.21 ] + }, + { + "time": 0.1333, + "value": 18.21, + "curve": [ 0.167, 18.21, 0.26, 12.95 ] + }, + { + "time": 0.3, + "value": 11.56, + "curve": [ 0.382, 8.7, 0.55, 9.43 ] + }, + { + "time": 0.6667, + "value": 9.32, + "curve": [ 0.843, 9.15, 0.918, -7.34 ] + }, + { "time": 1.3333, "value": -6.81 } + ], + "translate": [ + { + "time": 0.6667, + "curve": [ 0.781, 0, 0.972, 16.03, 0.781, 0, 0.972, 0.92 ] + }, + { + "time": 1.1333, + "x": 16.03, + "y": 0.92, + "curve": [ 1.211, 16.03, 1.281, 0, 1.211, 0.92, 1.281, 0 ] + }, + { "time": 1.3333 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.88, 0.063, 16.18 ] + }, + { + "time": 0.1667, + "value": 16.14, + "curve": [ 0.242, 16.1, 0.249, 16.07 ] + }, + { + "time": 0.3333, + "value": 13.46, + "curve": [ 0.442, 10.09, 0.573, -2.2 ] + }, + { + "time": 0.6, + "value": -6.04, + "curve": [ 0.614, -8.05, 0.717, -33.44 ] + }, + { + "time": 0.7667, + "value": -33.44, + "curve": [ 0.809, -33.44, 0.835, -31.32 ] + }, + { + "time": 0.8667, + "value": -27.36, + "curve": [ 0.874, -26.47, 0.903, -14.28 ] + }, + { + "time": 0.9333, + "value": -14.47, + "curve": [ 0.956, -14.62, 0.944, -25.91 ] + }, + { + "time": 1, + "value": -25.96, + "curve": [ 1.062, -26.02, 1.051, -1.87 ] + }, + { + "time": 1.0667, + "value": -1.87, + "curve": [ 1.096, -1.87, 1.096, -16.09 ] + }, + { + "time": 1.1333, + "value": -16.08, + "curve": [ 1.169, -16.08, 1.153, -3.38 ] + }, + { + "time": 1.2, + "value": -3.38, + "curve": [ 1.234, -3.38, 1.271, -6.07 ] + }, + { "time": 1.3333, "value": -6.07 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0, -3.17, 0.042, 16.33 ] + }, + { + "time": 0.0667, + "value": 16.33, + "curve": [ 0.21, 15.74, 0.208, -12.06 ] + }, + { + "time": 0.3333, + "value": -12.21, + "curve": [ 0.417, -12.3, 0.552, -3.98 ] + }, + { + "time": 0.6667, + "value": 1.52, + "curve": [ 0.726, 4.35, 0.817, 4.99 ] + }, + { + "time": 0.8667, + "value": 4.99, + "curve": [ 0.901, 4.99, 0.912, -29.05 ] + }, + { + "time": 0.9667, + "value": -27.45, + "curve": [ 0.987, -26.83, 1.018, -5.42 ] + }, + { + "time": 1.0667, + "value": -5.46, + "curve": [ 1.107, -5.22, 1.095, -33.51 ] + }, + { + "time": 1.1333, + "value": -33.28, + "curve": [ 1.162, -33.57, 1.192, 8.04 ] + }, + { + "time": 1.2667, + "value": 7.86, + "curve": [ 1.302, 7.77, 1.313, 2.7 ] + }, + { "time": 1.3333, "value": 2.7 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.001, -3.12, 0.074, 14.66 ] + }, + { + "time": 0.1333, + "value": 14.66, + "curve": [ 0.188, 14.8, 0.293, 9.56 ] + }, + { + "time": 0.3333, + "value": 5.99, + "curve": [ 0.381, 1.72, 0.55, -11.11 ] + }, + { + "time": 0.6667, + "value": -11.11, + "curve": [ 0.833, -11.11, 0.933, 22.54 ] + }, + { + "time": 1.1, + "value": 22.54, + "curve": [ 1.158, 22.54, 1.275, -6.81 ] + }, + { "time": 1.3333, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.013, 2.33, 0.092, -9.75 ] + }, + { + "time": 0.1333, + "value": -9.75, + "curve": [ 0.175, -9.75, 0.291, -1.26 ] + }, + { + "time": 0.3333, + "value": 0.96, + "curve": [ 0.359, 2.3, 0.543, 4.25 ] + }, + { + "time": 0.6, + "value": 4.68, + "curve": [ 0.683, 5.3, 0.771, 5.92 ] + }, + { + "time": 0.8333, + "value": 6.48, + "curve": [ 0.871, 6.82, 1.083, 11.37 ] + }, + { + "time": 1.1667, + "value": 11.37, + "curve": [ 1.208, 11.37, 1.317, 6.18 ] + }, + { "time": 1.3333, "value": 4.52 } + ], + "translate": [ + { + "curve": [ 0, 0, 0.082, -2.24, 0, 0, 0.082, -0.42 ] + }, + { + "time": 0.1667, + "x": -2.98, + "y": -0.56, + "curve": [ 0.232, -2.24, 0.298, 0, 0.232, -0.42, 0.298, 0 ] + }, + { "time": 0.3333, "curve": "stepped" }, + { + "time": 0.8667, + "curve": [ 0.889, 0, 0.912, 0.26, 0.889, 0, 0.912, 0.06 ] + }, + { + "time": 0.9333, + "x": 0.68, + "y": 0.23, + "curve": [ 1.016, 2.22, 1.095, 5.9, 1.023, 0.97, 1.095, 1.99 ] + }, + { + "time": 1.1667, + "x": 6.47, + "y": 2.18, + "curve": [ 1.23, 5.75, 1.286, 0, 1.23, 1.94, 1.286, 0 ] + }, + { "time": 1.3333 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.025, 4.52, 0.075, -6.17 ] + }, + { + "time": 0.1, + "value": -6.17, + "curve": [ 0.175, -6.17, 0.381, -0.71 ] + }, + { + "time": 0.4, + "value": -0.25, + "curve": [ 0.447, 0.87, 0.775, 4.84 ] + }, + { + "time": 0.9, + "value": 4.84, + "curve": [ 1.008, 4.84, 1.225, 4.52 ] + }, + { "time": 1.3333, "value": 4.52 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.138, -2.4, 0.227, -10.44, 0.123, 1.05, 0.227, 2.7 ] + }, + { + "time": 0.3667, + "x": -10.44, + "y": 2.7, + "curve": [ 0.484, -10.44, 0.585, -5.63, 0.484, 2.7, 0.629, -23.62 ] + }, + { + "time": 0.7333, + "x": -2.29, + "y": -26.61, + "curve": [ 0.818, -0.39, 0.962, 1.21, 0.858, -30.17, 0.972, -28.75 ] + }, + { + "time": 1.1, + "x": 1.25, + "y": -28.75, + "curve": [ 1.192, 1.28, 1.234, 0.98, 1.224, -28.75, 1.235, -2.15 ] + }, + { "time": 1.3333 } + ] + }, + "front-shoulder": { + "translate": [ + { + "curve": [ 0.031, -2.22, 0.065, -3.73, 0.02, -3.25, 0.065, -14.74 ] + }, + { + "time": 0.1, + "x": -3.73, + "y": -14.74, + "curve": [ 0.216, -3.73, 0.384, -0.17, 0.216, -14.74, 0.402, -12.51 ] + }, + { + "time": 0.5, + "x": 1.63, + "y": -9.51, + "curve": [ 0.632, 3.69, 0.935, 7.41, 0.585, -6.91, 0.909, 10.86 ] + }, + { + "time": 1.1, + "x": 7.45, + "y": 10.99, + "curve": [ 1.18, 7.46, 1.265, 2.86, 1.193, 11.05, 1.294, 3.38 ] + }, + { "time": 1.3333 } + ] + } + }, + "ik": { + "front-foot-ik": [ + { + "mix": 0, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2 } + ], + "front-leg-ik": [ + { + "mix": 0, + "bendPositive": false, + "curve": [ 0.3, 0, 0.9, 1, 0.3, 0, 0.9, 0 ] + }, + { "time": 1.2, "bendPositive": false } + ], + "rear-foot-ik": [ + { "mix": 0 } + ], + "rear-leg-ik": [ + { "mix": 0, "bendPositive": false } + ] + }, + "events": [ + { "time": 1.2, "name": "footstep" } + ] + }, + "portal": { + "slots": { + "clipping": { + "attachment": [ + { "name": "clipping" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0.9, "name": "mouth-grind" }, + { "time": 2.2667, "name": "mouth-smile" } + ] + }, + "portal-bg": { + "attachment": [ + { "name": "portal-bg" }, + { "time": 3 } + ] + }, + "portal-flare1": { + "attachment": [ + { "time": 1.1, "name": "portal-flare1" }, + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667, "name": "portal-flare3" }, + { "time": 1.2, "name": "portal-flare1" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare2": { + "attachment": [ + { "time": 1.1, "name": "portal-flare2" }, + { "time": 1.1333, "name": "portal-flare3" }, + { "time": 1.1667, "name": "portal-flare1" }, + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667 } + ] + }, + "portal-flare3": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare4": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare2" }, + { "time": 1.3333 } + ] + }, + "portal-flare5": { + "attachment": [ + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3333 } + ] + }, + "portal-flare6": { + "attachment": [ + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3333 } + ] + }, + "portal-flare7": { + "attachment": [ + { "time": 1.1333, "name": "portal-flare2" }, + { "time": 1.1667 } + ] + }, + "portal-flare8": { + "attachment": [ + { "time": 1.2, "name": "portal-flare3" }, + { "time": 1.2333, "name": "portal-flare2" }, + { "time": 1.2667 } + ] + }, + "portal-flare9": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare3" }, + { "time": 1.2667, "name": "portal-flare1" }, + { "time": 1.3 } + ] + }, + "portal-flare10": { + "attachment": [ + { "time": 1.2, "name": "portal-flare2" }, + { "time": 1.2333, "name": "portal-flare1" }, + { "time": 1.2667, "name": "portal-flare3" }, + { "time": 1.3 } + ] + }, + "portal-shade": { + "attachment": [ + { "name": "portal-shade" }, + { "time": 3 } + ] + }, + "portal-streaks1": { + "attachment": [ + { "name": "portal-streaks1" }, + { "time": 3 } + ] + }, + "portal-streaks2": { + "attachment": [ + { "name": "portal-streaks2" }, + { "time": 3 } + ] + } + }, + "bones": { + "portal-root": { + "translate": [ + { + "x": -458.35, + "y": 105.19, + "curve": [ 0.333, -458.22, 0.669, -457.86, 0.934, 105.19, 0.671, 105.19 ] + }, + { + "time": 1, + "x": -456.02, + "y": 105.19, + "curve": [ 1.339, -454.14, 2.208, -447.28, 1.35, 105.19, 2.05, 105.19 ] + }, + { + "time": 2.4, + "x": -439.12, + "y": 105.19, + "curve": [ 2.463, -436.44, 2.502, -432.92, 2.487, 105.19, 2.512, 105.09 ] + }, + { + "time": 2.6, + "x": -432.58, + "y": 105.09, + "curve": [ 2.784, -431.94, 2.978, -446.6, 2.772, 105.09, 2.933, 105.19 ] + }, + { "time": 3.0333, "x": -457.42, "y": 105.19 } + ], + "scale": [ + { + "x": 0.003, + "y": 0.006, + "curve": [ 0.329, 0.044, 0.347, 0.117, 0.329, 0.097, 0.37, 0.249 ] + }, + { + "time": 0.4, + "x": 0.175, + "y": 0.387, + "curve": [ 0.63, 0.619, 0.663, 0.723, 0.609, 1.338, 0.645, 1.524 ] + }, + { + "time": 0.7333, + "x": 0.724, + "y": 1.52, + "curve": [ 0.798, 0.725, 0.907, 0.647, 0.797, 1.517, 0.895, 1.424 ] + }, + { + "time": 1, + "x": 0.645, + "y": 1.426, + "curve": [ 1.095, 0.643, 1.139, 0.688, 1.089, 1.428, 1.115, 1.513 ] + }, + { + "time": 1.2333, + "x": 0.685, + "y": 1.516, + "curve": [ 1.325, 0.683, 1.508, 0.636, 1.343, 1.518, 1.467, 1.4 ] + }, + { + "time": 1.6, + "x": 0.634, + "y": 1.401, + "curve": [ 1.728, 0.631, 1.946, 0.687, 1.722, 1.402, 1.924, 1.522 ] + }, + { + "time": 2.0667, + "x": 0.688, + "y": 1.522, + "curve": [ 2.189, 0.69, 2.289, 0.649, 2.142, 1.522, 2.265, 1.417 ] + }, + { + "time": 2.4, + "x": 0.65, + "y": 1.426, + "curve": [ 2.494, 0.651, 2.504, 0.766, 2.508, 1.434, 2.543, 1.566 ] + }, + { + "time": 2.6, + "x": 0.766, + "y": 1.568, + "curve": [ 2.73, 0.765, 3.006, 0.098, 2.767, 1.564, 2.997, 0.1 ] + }, + { "time": 3.0333, "x": 0.007, "y": 0.015 } + ] + }, + "portal-streaks1": { + "rotate": [ + {}, + { "time": 3.1667, "value": 1200 } + ], + "translate": [ + { + "x": 15.15, + "curve": [ 0.162, 15.15, 0.432, 12.6, 0.162, 0, 0.432, -3.86 ] + }, + { + "time": 0.6667, + "x": 10.9, + "y": -6.44, + "curve": [ 0.794, 9.93, 0.912, 9.21, 0.794, -7.71, 0.912, -8.66 ] + }, + { + "time": 1, + "x": 9.21, + "y": -8.66, + "curve": [ 1.083, 9.21, 1.25, 21.53, 1.083, -8.66, 1.265, -4.9 ] + }, + { + "time": 1.3333, + "x": 21.53, + "y": -3.19, + "curve": [ 1.5, 21.53, 1.939, 12.3, 1.446, -0.37, 1.9, 6.26 ] + }, + { + "time": 2.0667, + "x": 11.26, + "y": 6.26, + "curve": [ 2.239, 9.85, 2.389, 9.68, 2.208, 6.26, 2.523, 0.51 ] + }, + { + "time": 2.5667, + "x": 9.39, + "y": -0.8, + "curve": [ 2.657, 9.24, 2.842, 9.21, 2.646, -3.2, 2.842, -8.91 ] + }, + { "time": 2.9333, "x": 9.21, "y": -8.91 } + ], + "scale": [ + { + "curve": [ 0.167, 1, 0.5, 1.053, 0.167, 1, 0.5, 1.053 ] + }, + { + "time": 0.6667, + "x": 1.053, + "y": 1.053, + "curve": [ 0.833, 1.053, 1.167, 0.986, 0.833, 1.053, 1.167, 0.986 ] + }, + { + "time": 1.3333, + "x": 0.986, + "y": 0.986, + "curve": [ 1.5, 0.986, 1.833, 1.053, 1.5, 0.986, 1.833, 1.053 ] + }, + { "time": 2, "x": 1.053, "y": 1.053 } + ] + }, + "portal-streaks2": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ], + "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, + "curve": [ 0.229, 0.909, 0.501, 0.755, 0.242, 0.892, 0.502, 0.768 ] + }, + { + "time": 0.8667, + "x": 0.745, + "y": 0.745, + "curve": [ 1.282, 0.733, 2.021, 0.699, 1.27, 0.719, 2.071, 0.709 ] + }, + { + "time": 2.2, + "x": 0.7, + "y": 0.704, + "curve": [ 2.315, 0.7, 2.421, 0.794, 2.311, 0.701, 2.485, 0.797 ] + }, + { + "time": 2.5667, + "x": 0.794, + "y": 0.794, + "curve": [ 2.734, 0.794, 2.99, 0.323, 2.714, 0.789, 3.019, 0.341 ] + }, + { "time": 3.1667, "x": 0, "y": 0 } + ] + }, + "portal-shade": { + "translate": [ + { "x": -29.68 } + ], + "scale": [ + { "x": 0.714, "y": 0.714 } + ] + }, + "portal": { + "rotate": [ + {}, + { "time": 3.1667, "value": 600 } + ] + }, + "clipping": { + "translate": [ + { "x": -476.55, "y": 2.27 } + ], + "scale": [ + { "x": 0.983, "y": 1.197 } + ] + }, + "hip": { + "rotate": [ + { + "time": 1.0667, + "value": 22.74, + "curve": [ 1.163, 18.84, 1.77, 8.77 ] + }, + { + "time": 1.9, + "value": 7.82, + "curve": [ 2.271, 5.1, 2.89, 0 ] + }, + { "time": 3.1667 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -694.16, + "y": 183.28, + "curve": [ 1.091, -602.08, 1.138, -427.59, 1.115, 185.6, 1.171, 133.18 ] + }, + { + "time": 1.2333, + "x": -316.97, + "y": 55.29, + "curve": [ 1.317, -220.27, 1.512, -123.21, 1.271, 8.68, 1.461, -83.18 ] + }, + { + "time": 1.6, + "x": -95.53, + "y": -112.23, + "curve": [ 1.718, -58.25, 2.037, -22.54, 1.858, -166.17, 2.109, -31.4 ] + }, + { + "time": 2.1667, + "x": -14.82, + "y": -31.12, + "curve": [ 2.294, -7.28, 2.442, -7.2, 2.274, -30.6, 2.393, -36.76 ] + }, + { + "time": 2.6, + "x": -7.2, + "y": -36.96, + "curve": [ 2.854, -7.2, 3.071, -11.87, 2.786, -36.27, 3.082, -22.98 ] + }, + { "time": 3.1667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "time": 1.0667, "value": 41.6, "curve": "stepped" }, + { + "time": 1.2333, + "value": 41.6, + "curve": [ 1.258, 41.6, 1.379, 35.46 ] + }, + { + "time": 1.4, + "value": 30.09, + "curve": [ 1.412, 27.04, 1.433, 10.65 ] + }, + { "time": 1.4333, "value": -0.28 }, + { "time": 1.6, "value": 2.44 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -591.13, + "y": 438.46, + "curve": [ 1.076, -539.77, 1.206, -268.1, 1.117, 418.44, 1.21, 333.18 ] + }, + { + "time": 1.2333, + "x": -225.28, + "y": 304.53, + "curve": [ 1.265, -175.22, 1.393, -74.21, 1.296, 226.52, 1.401, 49.61 ] + }, + { + "time": 1.4333, + "x": -52.32, + "y": 0.2, + "curve": [ 1.454, -40.85, 1.616, 40.87, 1.466, 0.17, 1.614, 0.04 ] + }, + { "time": 1.6667, "x": 45.87, "y": 0.01 }, + { "time": 1.9333, "x": 48.87 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "time": 1.0667, + "value": 32.08, + "curve": [ 1.108, 32.08, 1.192, 35.16 ] + }, + { + "time": 1.2333, + "value": 35.16, + "curve": [ 1.258, 35.16, 1.317, 2.23 ] + }, + { + "time": 1.3333, + "value": -4.74, + "curve": [ 1.351, -12.14, 1.429, -34.96 ] + }, + { + "time": 1.6, + "value": -34.77, + "curve": [ 1.765, -34.58, 1.897, -17.25 ] + }, + { "time": 1.9333 } + ], + "translate": [ + { "x": -899.41, "y": 4.47, "curve": "stepped" }, + { + "time": 1.0667, + "x": -533.93, + "y": 363.75, + "curve": [ 1.074, -480.85, 1.18, -261.31, 1.094, 362.3, 1.195, 267.77 ] + }, + { + "time": 1.2333, + "x": -201.23, + "y": 199.93, + "curve": [ 1.269, -161.38, 1.294, -140.32, 1.274, 126.67, 1.308, 77.12 ] + }, + { + "time": 1.3333, + "x": -124.08, + "y": 0.2, + "curve": [ 1.426, -85.6, 1.633, -69.06, 1.45, 0.48, 1.633, 0 ] + }, + { "time": 1.7333, "x": -69.06 } + ] + }, + "torso": { + "rotate": [ + { + "time": 1.0667, + "value": 27.02, + "curve": [ 1.187, 26.86, 1.291, 7.81 ] + }, + { + "time": 1.3333, + "value": -2.62, + "curve": [ 1.402, -19.72, 1.429, -48.64 ] + }, + { + "time": 1.4667, + "value": -56.31, + "curve": [ 1.509, -64.87, 1.62, -77.14 ] + }, + { + "time": 1.7333, + "value": -77.34, + "curve": [ 1.837, -76.89, 1.895, -71.32 ] + }, + { + "time": 2, + "value": -57.52, + "curve": [ 2.104, -43.83, 2.189, -28.59 ] + }, + { + "time": 2.3, + "value": -29.03, + "curve": [ 2.413, -29.48, 2.513, -36.79 ] + }, + { + "time": 2.6667, + "value": -36.79, + "curve": [ 2.814, -36.95, 2.947, -22.88 ] + }, + { "time": 3.1667, "value": -22.88 } + ] + }, + "neck": { + "rotate": [ + { + "time": 1.0667, + "value": -3.57, + "curve": [ 1.146, -3.66, 1.15, -13.5 ] + }, + { + "time": 1.2333, + "value": -13.5, + "curve": [ 1.428, -13.5, 1.443, 11.58 ] + }, + { + "time": 1.5667, + "value": 11.42, + "curve": [ 1.658, 11.3, 1.775, 3.78 ] + }, + { + "time": 1.8667, + "value": 3.78, + "curve": [ 1.92, 3.78, 2.036, 8.01 ] + }, + { + "time": 2.1, + "value": 7.93, + "curve": [ 2.266, 7.72, 2.42, 3.86 ] + }, + { + "time": 2.5333, + "value": 3.86, + "curve": [ 2.783, 3.86, 3.004, 3.78 ] + }, + { "time": 3.1667, "value": 3.78 } + ] + }, + "head": { + "rotate": [ + { + "time": 1.0667, + "value": 16.4, + "curve": [ 1.133, 9.9, 1.207, 1.87 ] + }, + { + "time": 1.3333, + "value": 1.67, + "curve": [ 1.46, 1.56, 1.547, 47.54 ] + }, + { + "time": 1.7333, + "value": 47.55, + "curve": [ 1.897, 47.56, 2.042, 5.68 ] + }, + { + "time": 2.0667, + "value": 0.86, + "curve": [ 2.074, -0.61, 2.086, -2.81 ] + }, + { + "time": 2.1, + "value": -5.31, + "curve": [ 2.145, -13.07, 2.216, -23.65 ] + }, + { + "time": 2.2667, + "value": -23.71, + "curve": [ 2.334, -23.79, 2.426, -13.43 ] + }, + { + "time": 2.4667, + "value": -9.18, + "curve": [ 2.498, -5.91, 2.604, 2.53 ] + }, + { + "time": 2.6667, + "value": 2.52, + "curve": [ 2.738, 2.24, 2.85, -8.76 ] + }, + { + "time": 2.9333, + "value": -8.67, + "curve": [ 3.036, -8.55, 3.09, -7.09 ] + }, + { "time": 3.1667, "value": -6.75 } + ], + "scale": [ + { + "time": 1.3333, + "curve": [ 1.392, 1, 1.526, 1, 1.392, 1, 1.508, 1.043 ] + }, + { + "time": 1.5667, + "x": 0.992, + "y": 1.043, + "curve": [ 1.598, 0.985, 1.676, 0.955, 1.584, 1.043, 1.672, 1.04 ] + }, + { + "time": 1.7333, + "x": 0.954, + "y": 1.029, + "curve": [ 1.843, 0.954, 1.933, 1, 1.825, 1.013, 1.933, 1 ] + }, + { "time": 2 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "time": 0.9, + "value": 39.24, + "curve": [ 0.968, 39.93, 1.267, 85.31 ] + }, + { + "time": 1.4667, + "value": 112.27, + "curve": [ 1.555, 124.24, 1.576, 126.44 ] + }, + { + "time": 1.6333, + "value": 126.44, + "curve": [ 1.782, 126.44, 1.992, 94.55 ] + }, + { + "time": 2.1, + "value": 79.96, + "curve": [ 2.216, 64.26, 2.407, 34.36 ] + }, + { + "time": 2.5667, + "value": 33.38, + "curve": [ 2.815, 31.87, 3.1, 39.2 ] + }, + { "time": 3.1667, "value": 39.2 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "time": 1.0667, + "value": 56.07, + "curve": [ 1.138, 59.21, 1.192, 59.65 ] + }, + { + "time": 1.2333, + "value": 59.46, + "curve": [ 1.295, 59.17, 1.45, 22.54 ] + }, + { "time": 1.4667, "value": -0.84 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "time": 1.0667, + "value": 118.03, + "curve": [ 1.075, 93.64, 1.358, -34.03 ] + }, + { + "time": 1.6667, + "value": -33.94, + "curve": [ 1.808, -33.89, 1.879, -25 ] + }, + { + "time": 1.9667, + "value": -25.19, + "curve": [ 2.09, -25.46, 2.312, -34.58 ] + }, + { + "time": 2.3667, + "value": -38.36, + "curve": [ 2.465, -45.18, 2.557, -60.1 ] + }, + { + "time": 2.8333, + "value": -61.1, + "curve": [ 2.843, -61.06, 3.16, -60.87 ] + }, + { "time": 3.1667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 0.66, + "curve": [ 1.108, 0.66, 1.221, 44.95 ] + }, + { + "time": 1.2333, + "value": 49.25, + "curve": [ 1.263, 59.42, 1.342, 68.06 ] + }, + { + "time": 1.3667, + "value": 68.34, + "curve": [ 1.409, 68.8, 1.476, 4.9 ] + }, + { + "time": 1.5, + "value": -2.05, + "curve": [ 1.529, -10.3, 1.695, -15.95 ] + }, + { + "time": 1.7333, + "value": -17.38, + "curve": [ 1.807, -20.1, 1.878, -21.19 ] + }, + { + "time": 1.9333, + "value": -21.08, + "curve": [ 2.073, -20.8, 2.146, -7.63 ] + }, + { + "time": 2.1667, + "value": -3.64, + "curve": [ 2.186, 0.12, 2.275, 15.28 ] + }, + { + "time": 2.3333, + "value": 21.78, + "curve": [ 2.392, 28.31, 2.575, 37.66 ] + }, + { + "time": 2.7, + "value": 39.43, + "curve": [ 2.947, 42.93, 3.02, 42.46 ] + }, + { "time": 3.1667, "value": 42.46 } + ] + }, + "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 } + ] + }, + "front-foot-tip": { + "rotate": [ + { "time": 1.0667, "value": 42.55, "curve": "stepped" }, + { "time": 1.1333, "value": 42.55 }, + { "time": 1.2333, "value": 17.71 }, + { "time": 1.3667, "value": 3.63 }, + { "time": 1.4333 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "time": 1.0667, + "value": 108.71, + "curve": [ 1.082, 108.29, 1.437, 50.73 ] + }, + { + "time": 1.5667, + "value": 24.87, + "curve": [ 1.62, 14.2, 1.66, -11.74 ] + }, + { + "time": 1.7333, + "value": -11.74, + "curve": [ 1.961, -11.73, 2.172, 1.66 ] + }, + { + "time": 2.2667, + "value": 7.88, + "curve": [ 2.331, 12.13, 2.439, 18.65 ] + }, + { + "time": 2.5333, + "value": 18.72, + "curve": [ 2.788, 18.91, 3.145, -0.3 ] + }, + { "time": 3.1667 } + ] + }, + "front-fist": { + "rotate": [ + { + "time": 1.1, + "value": 6.32, + "curve": [ 1.11, 3.31, 1.153, -5.07 ] + }, + { + "time": 1.2333, + "value": -5.13, + "curve": [ 1.311, -5.19, 1.364, 34.65 ] + }, + { + "time": 1.4667, + "value": 34.53, + "curve": [ 1.574, 34.41, 1.547, -55.78 ] + }, + { + "time": 1.8667, + "value": -54.7, + "curve": [ 1.947, -54.7, 2.03, -53.94 ] + }, + { + "time": 2.1333, + "value": -42.44, + "curve": [ 2.215, -33.42, 2.358, -4.43 ] + }, + { + "time": 2.4, + "value": 0.03, + "curve": [ 2.444, 4.66, 2.536, 8.2 ] + }, + { + "time": 2.6333, + "value": 8.2, + "curve": [ 2.733, 8.19, 2.804, -0.67 ] + }, + { + "time": 2.9, + "value": -0.82, + "curve": [ 3.127, -1.16, 3.093, 0 ] + }, + { "time": 3.1667 } + ] + }, + "gun": { + "rotate": [ + { + "time": 1.2667, + "curve": [ 1.35, 0, 1.549, 7.49 ] + }, + { + "time": 1.6, + "value": 9.5, + "curve": [ 1.663, 12.02, 1.846, 19.58 ] + }, + { + "time": 1.9333, + "value": 19.43, + "curve": [ 1.985, 19.4, 2.057, 2.98 ] + }, + { + "time": 2.2, + "value": 2.95, + "curve": [ 2.304, 3.55, 2.458, 10.8 ] + }, + { + "time": 2.5, + "value": 10.8, + "curve": [ 2.642, 10.8, 2.873, -2.54 ] + }, + { + "time": 2.9333, + "value": -2.55, + "curve": [ 3.09, -2.57, 3.08, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair2": { + "rotate": [ + { + "time": 1.0667, + "value": 26.19, + "curve": [ 1.158, 26.19, 1.368, 26 ] + }, + { + "time": 1.4333, + "value": 24.43, + "curve": [ 1.534, 22.03, 2, -29.14 ] + }, + { + "time": 2.2, + "value": -29.14, + "curve": [ 2.292, -29.14, 2.475, 6.71 ] + }, + { + "time": 2.5667, + "value": 6.71, + "curve": [ 2.675, 6.71, 2.814, -5.06 ] + }, + { + "time": 2.9, + "value": -5.06, + "curve": [ 2.973, -5.06, 3.123, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair4": { + "rotate": [ + { + "time": 1.0667, + "value": 5.21, + "curve": [ 1.108, 5.21, 1.192, 26.19 ] + }, + { + "time": 1.2333, + "value": 26.19, + "curve": [ 1.317, 26.19, 1.483, 10.63 ] + }, + { + "time": 1.5667, + "value": 10.63, + "curve": [ 1.627, 10.63, 1.642, 17.91 ] + }, + { + "time": 1.7, + "value": 17.94, + "curve": [ 1.761, 17.97, 1.774, 8.22 ] + }, + { + "time": 1.8, + "value": 3.33, + "curve": [ 1.839, -4.21, 1.95, -22.67 ] + }, + { + "time": 2, + "value": -22.67, + "curve": [ 2.025, -22.67, 2.123, -21.86 ] + }, + { + "time": 2.1667, + "value": -18.71, + "curve": [ 2.228, -14.31, 2.294, -0.3 ] + }, + { + "time": 2.3667, + "value": 6.36, + "curve": [ 2.433, 12.45, 2.494, 19.21 ] + }, + { + "time": 2.6, + "value": 19.21, + "curve": [ 2.729, 19.21, 2.854, 6.75 ] + }, + { + "time": 2.9333, + "value": 4.62, + "curve": [ 3.09, 0.45, 3.062, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair3": { + "rotate": [ + { + "time": 1.4333, + "curve": [ 1.45, 0, 1.452, 11.29 ] + }, + { + "time": 1.5, + "value": 11.21, + "curve": [ 1.596, 11.06, 1.573, -14.17 ] + }, + { + "time": 1.7333, + "value": -20.4, + "curve": [ 1.851, -24.98, 1.943, -28.45 ] + }, + { + "time": 2.2, + "value": -28.75, + "curve": [ 2.317, -28.75, 2.55, 7.04 ] + }, + { + "time": 2.6667, + "value": 7.04, + "curve": [ 2.792, 7.04, 2.885, -5.19 ] + }, + { + "time": 2.9667, + "value": -5.19, + "curve": [ 3.037, -5.19, 3.096, 0 ] + }, + { "time": 3.1667 } + ] + }, + "hair1": { + "rotate": [ + { + "time": 1.2333, + "curve": [ 1.283, 0, 1.349, 3.99 ] + }, + { + "time": 1.4333, + "value": 6.58, + "curve": [ 1.497, 8.54, 1.683, 9.35 ] + }, + { + "time": 1.7667, + "value": 9.35, + "curve": [ 1.825, 9.35, 1.945, -8.71 ] + }, + { + "time": 2, + "value": -11.15, + "curve": [ 2.058, -13.71, 2.2, -14.97 ] + }, + { + "time": 2.2667, + "value": -14.97, + "curve": [ 2.367, -14.97, 2.567, 18.77 ] + }, + { + "time": 2.6667, + "value": 18.77, + "curve": [ 2.733, 18.77, 2.817, 8.29 ] + }, + { + "time": 2.8667, + "value": 6.51, + "curve": [ 2.988, 2.17, 3.058, 0 ] + }, + { "time": 3.1667 } + ] + }, + "flare1": { + "rotate": [ + { "time": 1.1, "value": 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, + "curve": [ 1.119, 0.763, 1.16, 1.162, 1.117, 0.805, 1.15, 0.605 ] + }, + { + "time": 1.1667, + "x": 1.279, + "y": 0.605, + "curve": [ 1.177, 1.47, 1.192, 2.151, 1.175, 0.605, 1.192, 0.911 ] + }, + { + "time": 1.2, + "x": 2.151, + "y": 0.911, + "curve": [ 1.208, 2.151, 1.231, 1.668, 1.208, 0.911, 1.227, 0.844 ] + }, + { + "time": 1.2333, + "x": 1.608, + "y": 0.805, + "curve": [ 1.249, 1.205, 1.283, 0.547, 1.254, 0.685, 1.283, 0.416 ] + }, + { "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, "value": 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, "value": 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, "value": -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, "value": -5.36 }, + { "time": 1.2667, "value": -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, "value": 5.98 }, + { "time": 1.1333, "value": 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, "value": -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, "value": 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, "value": 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 } + ] + }, + "torso2": { + "rotate": [ + { + "time": 1, + "curve": [ 1.117, 0, 1.255, 24.94 ] + }, + { + "time": 1.4, + "value": 24.94, + "curve": [ 1.477, 24.94, 1.59, -17.62 ] + }, + { + "time": 1.6333, + "value": -19.48, + "curve": [ 1.717, -23.1, 1.784, -26.12 ] + }, + { + "time": 1.9333, + "value": -26.14, + "curve": [ 2.067, -26.15, 2.158, 4.3 ] + }, + { + "time": 2.3, + "value": 4.22, + "curve": [ 2.45, 4.13, 2.579, -1.76 ] + }, + { + "time": 2.7333, + "value": -1.8, + "curve": [ 2.816, -1.82, 2.857, -2.94 ] + }, + { + "time": 2.9333, + "value": -2.99, + "curve": [ 3.056, -3.08, 3.09, 0 ] + }, + { "time": 3.1667 } + ] + }, + "torso3": { + "rotate": [ + { + "time": 1.3, + "curve": [ 1.352, 0, 1.408, 6.47 ] + }, + { + "time": 1.4667, + "value": 6.43, + "curve": [ 1.55, 6.39, 1.723, -5.05 ] + }, + { + "time": 1.7333, + "value": -5.53, + "curve": [ 1.782, -7.72, 1.843, -16.94 ] + }, + { + "time": 1.9667, + "value": -16.86, + "curve": [ 2.111, -16.78, 2.259, -3.97 ] + }, + { + "time": 2.4, + "value": -2.43, + "curve": [ 2.525, -1.12, 2.639, -0.5 ] + }, + { + "time": 2.7333, + "value": -0.49, + "curve": [ 2.931, -0.47, 2.999, -2.15 ] + }, + { "time": 3.1667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { + "time": 1.2333, + "curve": [ 1.25, 0, 1.474, 6.89, 1.25, 0, 1.496, 0.98 ] + }, + { + "time": 1.6667, + "x": 11.99, + "y": -6.42, + "curve": [ 1.743, 14.01, 1.86, 14.33, 1.785, -11.55, 1.86, -27.1 ] + }, + { + "time": 1.9667, + "x": 13.91, + "y": -26.88, + "curve": [ 2.074, 13.49, 2.244, 8.13, 2.074, -26.65, 2.215, -21.78 ] + }, + { + "time": 2.3, + "x": 6.07, + "y": -16.64, + "curve": [ 2.416, 1.84, 2.497, -1.41, 2.417, -9.57, 2.526, -1.72 ] + }, + { + "time": 2.5667, + "x": -3.78, + "y": -1.71, + "curve": [ 2.661, -6.98, 2.76, -8.76, 2.692, -1.68, 2.821, -15.75 ] + }, + { + "time": 2.9, + "x": -8.32, + "y": -16.7, + "curve": [ 2.962, -8.12, 3.082, -0.04, 2.958, -17.39, 3.089, 0 ] + }, + { "time": 3.1667 } + ] + }, + "front-shoulder": { + "translate": [ + { + "time": 1.3333, + "curve": [ 1.488, 0, 1.717, 0.21, 1.488, 0, 1.688, -30.29 ] + }, + { + "time": 1.9, + "x": 0.83, + "y": -30.29, + "curve": [ 2.078, 1.43, 2.274, 2.88, 2.071, -30.29, 2.289, 4.48 ] + }, + { + "time": 2.4333, + "x": 2.89, + "y": 4.59, + "curve": [ 2.604, 2.89, 2.677, -0.68, 2.57, 4.7, 2.694, -2.43 ] + }, + { + "time": 2.7667, + "x": -0.67, + "y": -2.47, + "curve": [ 2.866, -0.67, 2.986, -0.07, 2.882, -2.47, 3.036, -0.06 ] + }, + { "time": 3.1667 } + ] + } + }, + "ik": { + "rear-leg-ik": [ + { "time": 3.1667, "softness": 10, "bendPositive": false } + ] + } + }, + "run": { + "slots": { + "mouth": { + "attachment": [ + { "name": "mouth-grind" } + ] + } + }, + "bones": { + "front-thigh": { + "translate": [ + { + "x": -5.14, + "y": 11.13, + "curve": [ 0.033, -7.77, 0.112, -9.03, 0.034, 11.13, 0.108, 9.74 ] + }, + { + "time": 0.1667, + "x": -9.03, + "y": 7.99, + "curve": [ 0.23, -9.05, 0.314, -1.34, 0.236, 5.93, 0.28, 3.22 ] + }, + { + "time": 0.3333, + "x": 0.41, + "y": 3.19, + "curve": [ 0.352, 2.09, 0.449, 11.16, 0.384, 3.16, 0.449, 4.98 ] + }, + { + "time": 0.5, + "x": 11.17, + "y": 6.76, + "curve": [ 0.571, 10.79, 0.621, -1.83, 0.542, 8.21, 0.625, 11.13 ] + }, + { "time": 0.6667, "x": -5.14, "y": 11.13 } + ] + }, + "torso": { + "rotate": [ + { + "value": -37.66, + "curve": [ 0.034, -37.14, 0.107, -36.21 ] + }, + { + "time": 0.1333, + "value": -36.21, + "curve": [ 0.158, -36.21, 0.209, -38.8 ] + }, + { + "time": 0.2333, + "value": -38.79, + "curve": [ 0.259, -38.78, 0.313, -38.03 ] + }, + { + "time": 0.3333, + "value": -37.66, + "curve": [ 0.357, -37.21, 0.4, -36.21 ] + }, + { + "time": 0.4333, + "value": -36.21, + "curve": [ 0.458, -36.21, 0.539, -38.8 ] + }, + { + "time": 0.5667, + "value": -38.8, + "curve": [ 0.592, -38.8, 0.645, -38 ] + }, + { "time": 0.6667, "value": -37.66 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -16.41, + "y": 1.55, + "curve": [ 0.013, -15.67, 0.183, -8.55, 0.03, 2.39, 0.183, 6.17 ] + }, + { + "time": 0.2333, + "x": -8.55, + "y": 6.17, + "curve": [ 0.308, -8.55, 0.492, -19.75, 0.308, 6.17, 0.492, 0.61 ] + }, + { + "time": 0.5667, + "x": -19.75, + "y": 0.61, + "curve": [ 0.592, -19.75, 0.641, -18.06, 0.592, 0.61, 0.632, 0.78 ] + }, + { "time": 0.6667, "x": -16.41, "y": 1.55 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -39.03, + "curve": [ 0.051, -0.1, 0.145, 88.36 ] + }, + { + "time": 0.2333, + "value": 88.36, + "curve": [ 0.28, 88.76, 0.324, 59.52 ] + }, + { + "time": 0.3333, + "value": 51.13, + "curve": [ 0.358, 30.2, 0.445, -74.91 ] + }, + { + "time": 0.5667, + "value": -75.82, + "curve": [ 0.599, -76.06, 0.642, -55.72 ] + }, + { "time": 0.6667, "value": -39.03 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 20.54, + "curve": [ 0.052, 11.42, 0.089, 0.13 ] + }, + { + "time": 0.1333, + "value": 0.15, + "curve": [ 0.186, 0.17, 0.221, 26.29 ] + }, + { + "time": 0.2333, + "value": 32.37, + "curve": [ 0.247, 39.19, 0.286, 61.45 ] + }, + { + "time": 0.3333, + "value": 61.58, + "curve": [ 0.371, 61.69, 0.42, 55.79 ] + }, + { "time": 0.4667, "value": 49.68 }, + { "time": 0.6667, "value": 20.54 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -36.16, + "curve": [ 0.014, -38.8, 0.036, -43.27 ] + }, + { + "time": 0.0667, + "value": -43.37, + "curve": [ 0.102, -43.49, 0.182, -28.46 ] + }, + { + "time": 0.2, + "value": -23.04, + "curve": [ 0.23, -13.87, 0.264, 3.86 ] + }, + { + "time": 0.3333, + "value": 3.7, + "curve": [ 0.38, 3.64, 0.535, -16.22 ] + }, + { "time": 0.5667, "value": -21.29 }, + { "time": 0.6667, "value": -36.16 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 40.5, + "curve": [ 0.028, 23.74, 0.128, -79.86 ] + }, + { + "time": 0.2333, + "value": -79.87, + "curve": [ 0.38, -79.88, 0.403, 63.25 ] + }, + { + "time": 0.5667, + "value": 64.13, + "curve": [ 0.607, 64.35, 0.644, 53.1 ] + }, + { "time": 0.6667, "value": 40.5 } + ], + "translate": [ + { + "x": -3.79, + "y": -0.77, + "curve": [ 0.044, -4.58, 0.169, -5.48, 0.044, 0.93, 0.169, 2.85 ] + }, + { + "time": 0.2333, + "x": -5.48, + "y": 2.85, + "curve": [ 0.346, -5.48, 0.475, -2.68, 0.346, 2.85, 0.475, -3.13 ] + }, + { + "time": 0.5667, + "x": -2.68, + "y": -3.13, + "curve": [ 0.611, -2.68, 0.642, -3.34, 0.611, -3.13, 0.642, -1.73 ] + }, + { "time": 0.6667, "x": -3.79, "y": -0.77 } + ] + }, + "rear-bracer": { + "rotate": [ + { "value": 28.28 }, + { + "time": 0.2333, + "value": -11.12, + "curve": [ 0.252, -14.12, 0.297, -19.37 ] + }, + { + "time": 0.3333, + "value": -19.38, + "curve": [ 0.435, -19.41, 0.522, 38.96 ] + }, + { + "time": 0.5667, + "value": 38.87, + "curve": [ 0.619, 38.76, 0.644, 32.01 ] + }, + { "time": 0.6667, "value": 28.28 } + ] + }, + "neck": { + "rotate": [ + { + "value": 11.88, + "curve": [ 0.024, 11.4, 0.075, 9.74 ] + }, + { + "time": 0.1, + "value": 9.74, + "curve": [ 0.125, 9.74, 0.208, 13.36 ] + }, + { + "time": 0.2333, + "value": 13.36, + "curve": [ 0.258, 13.36, 0.321, 12.2 ] + }, + { + "time": 0.3333, + "value": 11.88, + "curve": [ 0.365, 11.06, 0.408, 9.72 ] + }, + { + "time": 0.4333, + "value": 9.72, + "curve": [ 0.458, 9.72, 0.542, 13.36 ] + }, + { + "time": 0.5667, + "value": 13.36, + "curve": [ 0.592, 13.36, 0.636, 12.48 ] + }, + { "time": 0.6667, "value": 11.88 } + ] + }, + "head": { + "rotate": [ + { + "value": 13.14, + "curve": [ 0.02, 11.99, 0.039, 8.94 ] + }, + { + "time": 0.0667, + "value": 8.93, + "curve": [ 0.122, 8.9, 0.232, 15.8 ] + }, + { + "time": 0.2667, + "value": 15.81, + "curve": [ 0.325, 15.82, 0.357, 8.95 ] + }, + { + "time": 0.4, + "value": 8.93, + "curve": [ 0.444, 8.91, 0.568, 15.8 ] + }, + { + "time": 0.6, + "value": 15.77, + "curve": [ 0.632, 15.74, 0.649, 14.05 ] + }, + { "time": 0.6667, "value": 13.14 } + ], + "scale": [ + { + "curve": [ 0.014, 0.996, 0.068, 0.991, 0.027, 1.005, 0.083, 1.012 ] + }, + { + "time": 0.1, + "x": 0.991, + "y": 1.012, + "curve": [ 0.128, 0.991, 0.205, 1.018, 0.128, 1.012, 0.197, 0.988 ] + }, + { + "time": 0.2333, + "x": 1.018, + "y": 0.988, + "curve": [ 0.272, 1.018, 0.305, 1.008, 0.262, 0.988, 0.311, 0.995 ] + }, + { + "time": 0.3333, + "curve": [ 0.351, 0.995, 0.417, 0.987, 0.359, 1.006, 0.417, 1.013 ] + }, + { + "time": 0.4333, + "x": 0.987, + "y": 1.013, + "curve": [ 0.467, 0.987, 0.533, 1.02, 0.467, 1.013, 0.533, 0.989 ] + }, + { + "time": 0.5667, + "x": 1.02, + "y": 0.989, + "curve": [ 0.592, 1.02, 0.652, 1.004, 0.592, 0.989, 0.644, 0.996 ] + }, + { "time": 0.6667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 12.36, + "curve": [ 0.022, 16.28, 0.087, 20.25 ] + }, + { + "time": 0.1333, + "value": 20.19, + "curve": [ 0.168, 20.32, 0.254, -8.82 ] + }, + { + "time": 0.2667, + "value": -11.88, + "curve": [ 0.291, -17.91, 0.344, -24.11 ] + }, + { + "time": 0.4, + "value": -23.88, + "curve": [ 0.448, -23.69, 0.533, -15.47 ] + }, + { "time": 0.5667, "value": -8.69 }, + { "time": 0.6667, "value": 12.36 } + ] + }, + "hip": { + "rotate": [ + { "value": -8.24 } + ], + "translate": [ + { + "x": -3.6, + "y": -34.1, + "curve": [ 0.042, -3.84, 0.118, 7.62, 0.042, -33.74, 0.112, 20.55 ] + }, + { + "time": 0.1667, + "x": 7.61, + "y": 20.36, + "curve": [ 0.194, 7.6, 0.21, 5.06, 0.204, 20.65, 0.217, -8.69 ] + }, + { + "time": 0.2333, + "x": 1.68, + "y": -18.48, + "curve": [ 0.279, -4.99, 0.297, -5.64, 0.254, -31.08, 0.292, -34.55 ] + }, + { + "time": 0.3333, + "x": -5.76, + "y": -35, + "curve": [ 0.379, -5.9, 0.451, 6.8, 0.384, -35.56, 0.428, 17.6 ] + }, + { + "time": 0.5, + "x": 6.61, + "y": 17.01, + "curve": [ 0.536, 6.47, 0.545, 3.56, 0.533, 16.75, 0.548, -8.71 ] + }, + { + "time": 0.5667, + "x": 0.35, + "y": -18.81, + "curve": [ 0.597, -4.07, 0.642, -3.45, 0.584, -28.58, 0.642, -34.32 ] + }, + { "time": 0.6667, "x": -3.6, "y": -34.1 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": -62.54, + "curve": [ 0.015, -74.19, 0.056, -103.19 ] + }, + { + "time": 0.0667, + "value": -111.08, + "curve": [ 0.092, -129.44, 0.189, -146.55 ] + }, + { + "time": 0.2333, + "value": -146.32, + "curve": [ 0.285, -146.06, 0.32, -125.1 ] + }, + { "time": 0.3333, "value": -117.24 }, + { + "time": 0.5, + "value": -35.07, + "curve": [ 0.522, -28.64, 0.546, -24.84 ] + }, + { + "time": 0.5667, + "value": -24.9, + "curve": [ 0.595, -25, 0.623, -40.82 ] + }, + { "time": 0.6667, "value": -62.54 } + ], + "translate": [ + { "x": 16.34, "y": 0.18 }, + { + "time": 0.0667, + "x": -101.43, + "y": 8.04, + "curve": [ 0.085, -131.35, 0.129, -207.69, 0.08, 14.9, 0.124, 113.28 ] + }, + { + "time": 0.1667, + "x": -207.92, + "y": 145.81, + "curve": [ 0.196, -208.13, 0.21, -202.91, 0.186, 160.26, 0.206, 163.48 ] + }, + { + "time": 0.2333, + "x": -189.94, + "y": 163.85, + "curve": [ 0.27, -169.94, 0.31, -126.19, 0.269, 164.35, 0.316, 85.97 ] + }, + { + "time": 0.3333, + "x": -90.56, + "y": 78.57, + "curve": [ 0.355, -57.99, 0.376, -29.14, 0.35, 71.55, 0.376, 66.4 ] + }, + { + "time": 0.4, + "x": 2.87, + "y": 66.38, + "curve": [ 0.412, 19.24, 0.469, 90.73, 0.429, 66.37, 0.469, 70.66 ] + }, + { + "time": 0.5, + "x": 117.18, + "y": 70.46, + "curve": [ 0.522, 136.24, 0.542, 151.33, 0.539, 70.2, 0.555, 38.25 ] + }, + { + "time": 0.5667, + "x": 151.49, + "y": 25.29, + "curve": [ 0.578, 146.76, 0.586, 133.13, 0.572, 19.7, 0.582, 12.23 ] + }, + { "time": 0.6, "x": 115.02, "y": 0.1 }, + { "time": 0.6667, "x": 16.34, "y": 0.18 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -13.95, "y": -30.34 } + ] + }, + "rear-foot-target": { + "rotate": [ + { "value": 18.55 }, + { + "time": 0.2333, + "value": 167.84, + "curve": [ 0.246, 153.66, 0.256, 129.74 ] + }, + { + "time": 0.2667, + "value": 124.32, + "curve": [ 0.296, 124.43, 0.313, 129.93 ] + }, + { + "time": 0.3667, + "value": 129.87, + "curve": [ 0.421, 128.32, 0.519, 0.98 ] + }, + { + "time": 0.5667, + "curve": [ 0.6, 0.27, 0.642, 4.73 ] + }, + { "time": 0.6667, "value": 18.55 } + ], + "translate": [ + { + "x": -176.39, + "y": 134.12, + "curve": [ 0.018, -142.26, 0.054, -94.41, 0.01, 120.96, 0.044, 84.08 ] + }, + { + "time": 0.0667, + "x": -73.56, + "y": 76.68, + "curve": [ 0.086, -42.82, 0.194, 101.2, 0.098, 66.73, 0.198, 60.88 ] + }, + { "time": 0.2333, "x": 98.32, "y": 32.17 }, + { "time": 0.2667, "x": 49.13, "y": -0.63 }, + { + "time": 0.4, + "x": -147.9, + "y": 0.32, + "curve": [ 0.414, -168.78, 0.478, -284.76, 0.43, 30.09, 0.478, 129.14 ] + }, + { + "time": 0.5, + "x": -283.37, + "y": 167.12, + "curve": [ 0.526, -285.66, 0.548, -280.54, 0.516, 194.84, 0.55, 216.53 ] + }, + { + "time": 0.5667, + "x": -266.98, + "y": 216.12, + "curve": [ 0.581, -256.27, 0.643, -206.54, 0.61, 214.82, 0.65, 145.33 ] + }, + { "time": 0.6667, "x": -176.39, "y": 134.12 } + ] + }, + "rear-leg-target": { + "translate": [ + { "x": 85, "y": -33.59 } + ] + }, + "back-foot-tip": { + "rotate": [ + { + "value": -147.04, + "curve": [ 0.033, -113.4, 0.161, 44.34 ] + }, + { + "time": 0.2333, + "value": 43.48, + "curve": [ 0.24, 43.41, 0.282, 35.72 ] + }, + { + "time": 0.3, + "value": 0.29, + "curve": [ 0.347, 0.28, 0.396, 4.27 ] + }, + { + "time": 0.4, + "curve": [ 0.424, -23.8, 0.525, -181.39 ] + }, + { + "time": 0.5667, + "value": -181.39, + "curve": [ 0.592, -181.39, 0.642, -169.09 ] + }, + { "time": 0.6667, "value": -147.04 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": -0.25, + "curve": [ 0.008, -0.25, 0.056, 1.73 ] + }, + { + "time": 0.0667, + "value": -7.68, + "curve": [ 0.075, -43.13, 0.15, -130.44 ] + }, + { + "time": 0.2, + "value": -130.08, + "curve": [ 0.239, -129.79, 0.272, -126.8 ] + }, + { + "time": 0.3, + "value": -116.24, + "curve": [ 0.333, -103.91, 0.348, -86.1 ] + }, + { + "time": 0.3667, + "value": -71.08, + "curve": [ 0.386, -55.25, 0.415, -32.44 ] + }, + { + "time": 0.4333, + "value": -21.63, + "curve": [ 0.47, -0.01, 0.542, 33.42 ] + }, + { + "time": 0.5667, + "value": 33.2, + "curve": [ 0.622, 32.7, 0.569, 0.64 ] + }, + { "time": 0.6667, "value": -0.25 } + ] + }, + "hair1": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.087, -6.81, 0.143, -5.75 ] + }, + { + "time": 0.1667, + "value": -4.3, + "curve": [ 0.183, -3.28, 0.209, 2.79 ] + }, + { + "time": 0.2333, + "value": 2.78, + "curve": [ 0.262, 2.77, 0.305, -6.63 ] + }, + { + "time": 0.3333, + "value": -6.64, + "curve": [ 0.419, -6.68, 0.49, -4.84 ] + }, + { + "time": 0.5, + "value": -4.38, + "curve": [ 0.518, -3.56, 0.574, 2.32 ] + }, + { + "time": 0.6, + "value": 2.33, + "curve": [ 0.643, 2.35, 0.633, -6.81 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.014, -3.17, 0.109, 43.93 ] + }, + { + "time": 0.1333, + "value": 43.95, + "curve": [ 0.177, 43.97, 0.192, -13.76 ] + }, + { + "time": 0.2667, + "value": -13.83, + "curve": [ 0.302, -13.72, 0.322, -8.86 ] + }, + { + "time": 0.3333, + "value": -6.6, + "curve": [ 0.349, -3.5, 0.436, 41.1 ] + }, + { + "time": 0.4667, + "value": 41.05, + "curve": [ 0.51, 40.99, 0.549, -14.06 ] + }, + { + "time": 0.6, + "value": -14.18, + "curve": [ 0.63, -14.26, 0.656, -9.04 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "hair3": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.079, -6.83, 0.108, 0.3 ] + }, + { + "time": 0.1333, + "value": 1.96, + "curve": [ 0.177, 4.89, 0.208, 6.28 ] + }, + { + "time": 0.2333, + "value": 6.29, + "curve": [ 0.313, 6.31, 0.383, 3.49 ] + }, + { + "time": 0.4, + "value": 2.58, + "curve": [ 0.442, 0.28, 0.523, -6.81 ] + }, + { "time": 0.6, "value": -6.81 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.81, + "curve": [ 0.011, -4.06, 0.108, 24.92 ] + }, + { + "time": 0.1333, + "value": 24.92, + "curve": [ 0.158, 24.92, 0.208, -10.62 ] + }, + { + "time": 0.2333, + "value": -10.62, + "curve": [ 0.254, -10.62, 0.312, -9.73 ] + }, + { + "time": 0.3333, + "value": -6.4, + "curve": [ 0.356, -2.95, 0.438, 24.93 ] + }, + { + "time": 0.4667, + "value": 24.93, + "curve": [ 0.492, 24.93, 0.575, -9.78 ] + }, + { + "time": 0.6, + "value": -9.78, + "curve": [ 0.617, -9.78, 0.655, -8.63 ] + }, + { "time": 0.6667, "value": -6.81 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 3.5, + "curve": [ 0.07, 3.51, 0.075, 8.69 ] + }, + { + "time": 0.1, + "value": 8.69, + "curve": [ 0.139, 8.69, 0.214, 6.9 ] + }, + { + "time": 0.2333, + "value": 6.33, + "curve": [ 0.266, 5.34, 0.285, 3.48 ] + }, + { + "time": 0.3333, + "value": 3.48, + "curve": [ 0.398, 3.48, 0.408, 8.68 ] + }, + { + "time": 0.4333, + "value": 8.68, + "curve": [ 0.458, 8.68, 0.551, 6.8 ] + }, + { + "time": 0.5667, + "value": 6.26, + "curve": [ 0.598, 5.17, 0.642, 3.49 ] + }, + { "time": 0.6667, "value": 3.5 } + ] + }, + "torso3": { + "rotate": [ + { + "value": 4.52, + "curve": [ 0.067, 4.54, 0.075, -7.27 ] + }, + { + "time": 0.1, + "value": -7.27, + "curve": [ 0.125, -7.27, 0.227, 0.84 ] + }, + { + "time": 0.2333, + "value": 1.24, + "curve": [ 0.254, 2.5, 0.301, 4.51 ] + }, + { + "time": 0.3333, + "value": 4.52, + "curve": [ 0.386, 4.54, 0.408, -7.35 ] + }, + { + "time": 0.4333, + "value": -7.35, + "curve": [ 0.458, -7.35, 0.549, -0.14 ] + }, + { + "time": 0.5667, + "value": 0.95, + "curve": [ 0.586, 2.18, 0.632, 4.54 ] + }, + { "time": 0.6667, "value": 4.52 } + ] + }, + "aim-constraint-target": { + "rotate": [ + { "value": 30.57 } + ] + }, + "rear-foot": { + "rotate": [ + { "value": -6.5 } + ] + }, + "front-foot": { + "rotate": [ + { "value": 4.5 } + ] + }, + "head-control": { + "translate": [ + { + "y": -9.94, + "curve": [ 0.058, 0, 0.175, -15.32, 0.044, -4.19, 0.175, 5 ] + }, + { + "time": 0.2333, + "x": -15.32, + "y": 5, + "curve": [ 0.317, -15.32, 0.429, -9.74, 0.317, 5, 0.382, -31.71 ] + }, + { + "time": 0.4667, + "x": -7.81, + "y": -31.59, + "curve": [ 0.507, -5.76, 0.617, 0, 0.549, -31.47, 0.628, -13.33 ] + }, + { "time": 0.6667, "y": -9.94 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": -0.74, + "y": 11.22, + "curve": [ 0.061, -0.74, 0.144, 1.17, 0.061, 11.22, 0.143, -17.93 ] + }, + { + "time": 0.2333, + "x": 1.19, + "y": -17.9, + "curve": [ 0.54, 1.25, 0.558, -0.74, 0.545, -17.8, 0.558, 11.22 ] + }, + { "time": 0.6667, "x": -0.74, "y": 11.22 } + ] + }, + "back-shoulder": { + "translate": [ + { + "curve": [ 0.083, 0, 0.25, 0, 0.083, 0, 0.25, 8.93 ] + }, + { + "time": 0.3333, + "y": 8.93, + "curve": [ 0.417, 0, 0.583, 0, 0.417, 8.93, 0.583, 0 ] + }, + { "time": 0.6667 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 10, "bendPositive": false }, + { "time": 0.5667, "softness": 14.8, "bendPositive": false }, + { "time": 0.6, "softness": 48.2, "bendPositive": false }, + { "time": 0.6667, "softness": 10, "bendPositive": false } + ], + "rear-leg-ik": [ + { "bendPositive": false }, + { "time": 0.1667, "softness": 22.5, "bendPositive": false }, + { "time": 0.3, "softness": 61.4, "bendPositive": false }, + { "time": 0.6667, "bendPositive": false } + ] + }, + "events": [ + { "time": 0.2333, "name": "footstep" }, + { "time": 0.5667, "name": "footstep" } + ] + }, + "run-to-idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "front-foot-target": { + "translate": [ + { + "x": -16.5, + "y": 3.41, + "curve": [ 0.033, -16.5, 0.1, -69.06, 0.033, 3.41, 0.1, 0 ] + }, + { "time": 0.1333, "x": -69.06 } + ] + }, + "hip": { + "translate": [ + { + "x": -28.78, + "y": -72.96, + "curve": [ 0.036, -28.63, 0.2, -10.85, 0.135, -62.35, 0.2, -23.15 ] + }, + { "time": 0.2667, "x": -11.97, "y": -23.15 } + ] + }, + "rear-foot-target": { + "translate": [ + { + "x": 33.15, + "y": 31.61, + "curve": [ 0.017, 33.15, 0.05, 24.41, 0.017, 31.61, 0.041, 20.73 ] + }, + { + "time": 0.0667, + "x": 24.41, + "y": 0.19, + "curve": [ 0.117, 24.41, 0.217, 48.87, 0.117, 0.19, 0.217, 0 ] + }, + { "time": 0.2667, "x": 48.87 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -80.61, + "curve": [ 0.067, -80.61, 0.2, -60.87 ] + }, + { "time": 0.2667, "value": -60.87 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 8.79, + "curve": [ 0.041, 8.79, 0.115, 6.3 ] + }, + { + "time": 0.1667, + "value": 6.41, + "curve": [ 0.201, 6.48, 0.241, 42.46 ] + }, + { "time": 0.2667, "value": 42.46 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 55.3, + "curve": [ 0.067, 55.3, 0.2, 39.2 ] + }, + { "time": 0.2667, "value": 39.2 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.083, 2.67 ] + }, + { + "time": 0.1333, + "value": 2.67, + "curve": [ 0.15, 2.67, 0.25, -6.75 ] + }, + { "time": 0.2667, "value": -6.75 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": 38.26, + "curve": [ 0.041, 38.26, 0.127, -2.19 ] + }, + { + "time": 0.1667, + "value": -3, + "curve": [ 0.209, -3.84, 0.241, 0 ] + }, + { "time": 0.2667 } + ], + "scale": [ + { + "x": 0.844, + "curve": [ 0.067, 0.844, 0.2, 1, 0.067, 1, 0.2, 1 ] + }, + { "time": 0.2667 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 57.24, + "curve": [ 0.067, 57.24, 0.2, 0 ] + }, + { "time": 0.2667 } + ] + }, + "gun": { + "rotate": [ + { + "value": 2.28, + "curve": [ 0.041, 2.28, 0.105, 15.34 ] + }, + { + "time": 0.1667, + "value": 15.32, + "curve": [ 0.205, 15.31, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso": { + "rotate": [ + { + "value": -12.98, + "curve": [ 0.033, -12.98, 0.103, -14.81 ] + }, + { + "time": 0.1333, + "value": -16.63, + "curve": [ 0.168, -18.69, 0.233, -22.88 ] + }, + { "time": 0.2667, "value": -22.88 } + ], + "scale": [ + { + "x": 0.963, + "y": 1.074, + "curve": [ 0.067, 0.963, 0.132, 1, 0.067, 1.074, 0.132, 1 ] + }, + { "time": 0.2667 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.2667, "value": 3.78 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 0.88 ] + }, + { + "time": 0.1333, + "value": 0.88, + "curve": [ 0.167, 0.88, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair4": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 15.97 ] + }, + { + "time": 0.1333, + "value": 15.97, + "curve": [ 0.167, 15.97, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 10.76 ] + }, + { + "time": 0.1333, + "value": 10.76, + "curve": [ 0.167, 10.76, 0.233, 0 ] + }, + { "time": 0.2667 } + ] + }, + "hair2": { + "rotate": [ + { + "curve": [ 0.014, -2.28, 0.042, -7.84 ] + }, + { + "time": 0.0667, + "value": -7.82, + "curve": [ 0.108, -7.79, 0.166, 6.57 ] + }, + { + "time": 0.2, + "value": 6.67, + "curve": [ 0.222, 6.73, 0.255, 1.98 ] + }, + { "time": 0.2667 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.041, 0, 0.107, 3.03 ] + }, + { + "time": 0.1667, + "value": 3.03, + "curve": [ 0.205, 3.03, 0.241, 0 ] + }, + { "time": 0.2667 } + ] + }, + "torso3": { + "rotate": [ + { + "curve": [ 0.049, 0, 0.166, 0.66 ] + }, + { + "time": 0.2, + "value": 0.66, + "curve": [ 0.232, 0.65, 0.249, -2.15 ] + }, + { "time": 0.2667, "value": -2.15 } + ] + }, + "head-control": { + "translate": [ + { "x": -10.12, "y": 8.71 }, + { "time": 0.2667 } + ] + }, + "front-shoulder": { + "translate": [ + { "x": 4.91, "y": 11.54 }, + { "time": 0.2667 } + ] + } + } + }, + "shoot": { + "slots": { + "muzzle": { + "rgba": [ + { "time": 0.1333, "color": "ffffffff" }, + { "time": 0.2, "color": "ffffff62" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle01" }, + { "time": 0.0667, "name": "muzzle02" }, + { "time": 0.1, "name": "muzzle03" }, + { "time": 0.1333, "name": "muzzle04" }, + { "time": 0.1667, "name": "muzzle05" }, + { "time": 0.2 } + ] + }, + "muzzle-glow": { + "rgba": [ + { "color": "ff0c0c00" }, + { + "time": 0.0333, + "color": "ffc9adff", + "curve": [ 0.255, 1, 0.273, 1, 0.255, 0.76, 0.273, 0.4, 0.255, 0.65, 0.273, 0.22, 0.255, 1, 0.273, 1 ] + }, + { "time": 0.3, "color": "ff400cff" }, + { "time": 0.6333, "color": "ff0c0c00" } + ], + "attachment": [ + { "name": "muzzle-glow" } + ] + }, + "muzzle-ring": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.202, 0.85, 0.214, 0.84, 0.202, 0.73, 0.214, 0.73, 0.202, 1, 0.214, 1, 0.202, 1, 0.214, 0.21 ] + }, + { "time": 0.2333, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2333 } + ] + }, + "muzzle-ring2": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring3": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + }, + "muzzle-ring4": { + "rgba": [ + { + "time": 0.0333, + "color": "d8baffff", + "curve": [ 0.174, 0.85, 0.184, 0.84, 0.174, 0.73, 0.184, 0.73, 0.174, 1, 0.184, 1, 0.174, 1, 0.184, 0.21 ] + }, + { "time": 0.2, "color": "d7baff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle-ring" }, + { "time": 0.2 } + ] + } + }, + "bones": { + "gun": { + "rotate": [ + { + "time": 0.0667, + "curve": [ 0.094, 25.89, 0.112, 45.27 ] + }, + { + "time": 0.1333, + "value": 45.35, + "curve": [ 0.192, 45.28, 0.18, -0.09 ] + }, + { "time": 0.6333 } + ] + }, + "muzzle": { + "translate": [ + { "x": -11.02, "y": 25.16 } + ] + }, + "rear-upper-arm": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.045, 0.91, 0.083, 3.46, 0.044, 0.86, 0.083, 3.32 ] + }, + { + "time": 0.1, + "x": 3.46, + "y": 3.32, + "curve": [ 0.133, 3.46, 0.176, -0.1, 0.133, 3.32, 0.169, 0 ] + }, + { "time": 0.2333 } + ] + }, + "rear-bracer": { + "translate": [ + { + "time": 0.0333, + "curve": [ 0.075, -3.78, 0.083, -4.36, 0.08, -2.7, 0.083, -2.88 ] + }, + { + "time": 0.1, + "x": -4.36, + "y": -2.88, + "curve": [ 0.133, -4.36, 0.168, 0.18, 0.133, -2.88, 0.167, 0 ] + }, + { "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-target": { + "rotate": [ + { + "value": -32.82, + "curve": [ 0.035, -42.69, 0.057, -70.49 ] + }, + { + "time": 0.1, + "value": -70.59, + "curve": [ 0.236, -70.78, 0.335, -9.87 ] + }, + { + "time": 0.3667, + "value": -1.56, + "curve": [ 0.393, 5.5, 0.477, 13.96 ] + }, + { + "time": 0.5, + "value": 13.96, + "curve": [ 0.519, 13.96, 0.508, 0.13 ] + }, + { "time": 0.5667, "value": -0.28 }, + { + "time": 0.7333, + "value": -0.28, + "curve": [ 0.827, -0.06, 0.958, -21.07 ] + }, + { "time": 1, "value": -32.82 } + ], + "translate": [ + { + "x": -167.32, + "y": 0.58, + "curve": [ 0.022, -180.55, 0.075, -235.51, 0.045, 0.58, 0.075, 30.12 ] + }, + { + "time": 0.1, + "x": -235.51, + "y": 39.92, + "curve": [ 0.142, -235.51, 0.208, -201.73, 0.138, 54.94, 0.18, 60.78 ] + }, + { + "time": 0.2333, + "x": -176.33, + "y": 61.48, + "curve": [ 0.272, -136.61, 0.321, -45.18, 0.275, 62.02, 0.321, 56.6 ] + }, + { + "time": 0.3667, + "x": 8.44, + "y": 49.67, + "curve": [ 0.403, 51.03, 0.486, 66.86, 0.401, 44.37, 0.48, 23.11 ] + }, + { "time": 0.5, "x": 66.57, "y": 14.22 }, + { "time": 0.5333, "x": 52.58, "y": 0.6 }, + { "time": 1, "x": -167.32, "y": 0.58 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "value": 18.19, + "curve": [ 0.01, 11.17, 0.043, 1.37 ] + }, + { "time": 0.1, "value": 0.47 }, + { + "time": 0.2333, + "value": 0.55, + "curve": [ 0.364, 0.3, 0.515, -80.48 ] + }, + { + "time": 0.7333, + "value": -80.78, + "curve": [ 0.788, -80.38, 0.921, 17.42 ] + }, + { "time": 1, "value": 18.19 } + ], + "translate": [ + { + "x": 139.21, + "y": 22.94, + "curve": [ 0.025, 139.21, 0.069, 111.46, 0.031, 3.25, 0.075, 0.06 ] + }, + { "time": 0.1, "x": 96.69, "y": 0.06 }, + { + "time": 0.5, + "x": -94.87, + "y": -0.03, + "curve": [ 0.518, -106.82, 0.575, -152.56, 0.534, 5.42, 0.557, 38.46 ] + }, + { + "time": 0.6, + "x": -152.56, + "y": 57.05, + "curve": [ 0.633, -152.56, 0.688, -128.05, 0.643, 75.61, 0.7, 84.14 ] + }, + { + "time": 0.7333, + "x": -109.42, + "y": 84.14, + "curve": [ 0.771, -93.91, 0.832, -30.64, 0.787, 84.14, 0.799, 89.65 ] + }, + { + "time": 0.8667, + "x": 17, + "y": 75.25, + "curve": [ 0.903, 66.18, 0.967, 139.21, 0.932, 61.53, 0.967, 44.02 ] + }, + { "time": 1, "x": 139.21, "y": 22.94 } + ] + }, + "hip": { + "rotate": [ + { "value": -4.35 } + ], + "translate": [ + { + "x": -2.86, + "y": -13.86, + "curve": [ 0.025, -2.84, 0.067, -2.82, 0.028, -19.14, 0.054, -24.02 ] + }, + { + "time": 0.1, + "x": -2.61, + "y": -24.19, + "curve": [ 0.143, -2.34, 0.202, -1.79, 0.152, -23.98, 0.213, -14.81 ] + }, + { + "time": 0.2667, + "x": -1.21, + "y": -7.12, + "curve": [ 0.308, -0.86, 0.345, -0.51, 0.306, -1.63, 0.341, 3.15 ] + }, + { + "time": 0.3667, + "x": -0.33, + "y": 3.15, + "curve": [ 0.41, 0.02, 0.458, 0.26, 0.427, 3.3, 0.481, -6.75 ] + }, + { + "time": 0.5, + "x": 0.26, + "y": -10.59, + "curve": [ 0.553, 0.26, 0.559, 0.2, 0.519, -14.41, 0.548, -23.88 ] + }, + { + "time": 0.6, + "x": -0.17, + "y": -23.71, + "curve": [ 0.663, -0.72, 0.798, -2.09, 0.702, -23.36, 0.802, 3.53 ] + }, + { + "time": 0.8667, + "x": -2.46, + "y": 3.48, + "curve": [ 0.901, -2.63, 0.967, -2.87, 0.913, 3.45, 0.967, -7.64 ] + }, + { "time": 1, "x": -2.86, "y": -13.86 } + ] + }, + "front-foot-tip": { + "rotate": [ + { + "value": 28.96, + "curve": [ 0.056, 28.74, 0.049, 19.6 ] + }, + { "time": 0.0667, "value": 1.68 }, + { + "time": 0.5, + "value": -10, + "curve": [ 0.525, -10, 0.592, -54.69 ] + }, + { + "time": 0.6, + "value": -59.66, + "curve": [ 0.623, -74.54, 0.674, -101.78 ] + }, + { + "time": 0.7333, + "value": -101.78, + "curve": [ 0.812, -101.78, 0.855, -84.67 ] + }, + { + "time": 0.8667, + "value": -63.53, + "curve": [ 0.869, -58.38, 0.975, 28.96 ] + }, + { "time": 1, "value": 28.96 } + ] + }, + "torso": { + "rotate": [ + { + "value": -20.72, + "curve": [ 0.025, -20.57, 0.071, -20.04 ] + }, + { + "time": 0.1333, + "value": -20.04, + "curve": [ 0.187, -20.04, 0.285, -21.16 ] + }, + { + "time": 0.3667, + "value": -21.16, + "curve": [ 0.405, -21.16, 0.47, -20.9 ] + }, + { + "time": 0.5, + "value": -20.71, + "curve": [ 0.518, -20.6, 0.582, -20.03 ] + }, + { + "time": 0.6333, + "value": -20.04, + "curve": [ 0.709, -20.05, 0.815, -21.18 ] + }, + { + "time": 0.8667, + "value": -21.18, + "curve": [ 0.908, -21.18, 0.971, -20.93 ] + }, + { "time": 1, "value": -20.72 } + ] + }, + "neck": { + "rotate": [ + { + "value": 17.78, + "curve": [ 0.025, 17.93, 0.071, 18.46 ] + }, + { + "time": 0.1333, + "value": 18.46, + "curve": [ 0.187, 18.46, 0.285, 17.34 ] + }, + { + "time": 0.3667, + "value": 17.34, + "curve": [ 0.405, 17.34, 0.47, 17.6 ] + }, + { + "time": 0.5, + "value": 17.79, + "curve": [ 0.518, 17.9, 0.582, 18.47 ] + }, + { + "time": 0.6333, + "value": 18.46, + "curve": [ 0.709, 18.45, 0.815, 17.32 ] + }, + { + "time": 0.8667, + "value": 17.32, + "curve": [ 0.908, 17.32, 0.971, 17.57 ] + }, + { "time": 1, "value": 17.78 } + ] + }, + "head": { + "rotate": [ + { + "value": -12.23, + "curve": [ 0.061, -12.23, 0.191, -7.45 ] + }, + { + "time": 0.2667, + "value": -7.43, + "curve": [ 0.341, -7.42, 0.421, -12.23 ] + }, + { + "time": 0.5, + "value": -12.23, + "curve": [ 0.567, -12.26, 0.694, -7.46 ] + }, + { + "time": 0.7667, + "value": -7.47, + "curve": [ 0.853, -7.49, 0.943, -12.23 ] + }, + { "time": 1, "value": -12.23 } + ], + "scale": [ + { + "curve": [ 0.039, 1, 0.084, 0.991, 0.039, 1, 0.084, 1.019 ] + }, + { + "time": 0.1333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.205, 0.991, 0.318, 1.019, 0.205, 1.019, 0.337, 0.992 ] + }, + { + "time": 0.4, + "x": 1.019, + "y": 0.992, + "curve": [ 0.456, 1.019, 0.494, 1.001, 0.483, 0.991, 0.493, 0.999 ] + }, + { + "time": 0.5, + "curve": [ 0.508, 0.998, 0.584, 0.991, 0.51, 1.002, 0.584, 1.019 ] + }, + { + "time": 0.6333, + "x": 0.991, + "y": 1.019, + "curve": [ 0.705, 0.991, 0.818, 1.019, 0.705, 1.019, 0.837, 0.992 ] + }, + { + "time": 0.9, + "x": 1.019, + "y": 0.992, + "curve": [ 0.956, 1.019, 0.955, 1, 0.983, 0.991, 0.955, 1 ] + }, + { "time": 1 } + ] + }, + "back-foot-tip": { + "rotate": [ + { "value": 4.09 }, + { "time": 0.0333, "value": 3.05 }, + { + "time": 0.1, + "value": -59.01, + "curve": [ 0.124, -72.97, 0.169, -100.05 ] + }, + { + "time": 0.2333, + "value": -99.71, + "curve": [ 0.326, -99.21, 0.349, -37.4 ] + }, + { + "time": 0.3667, + "value": -17.85, + "curve": [ 0.388, 4.74, 0.451, 32.35 ] + }, + { + "time": 0.5, + "value": 32.4, + "curve": [ 0.537, 32.44, 0.566, 6.43 ] + }, + { "time": 0.5667, "value": 2 }, + { "time": 1, "value": 4.09 } + ] + }, + "front-thigh": { + "translate": [ + { + "x": 17.15, + "y": -0.09, + "curve": [ 0.178, 17.14, 0.295, -4.26, 0.009, -0.09, 0.475, 0.02 ] + }, + { + "time": 0.5, + "x": -4.26, + "y": 0.02, + "curve": [ 0.705, -4.27, 0.848, 17.15, 0.525, 0.02, 0.975, -0.09 ] + }, + { "time": 1, "x": 17.15, "y": -0.09 } + ] + }, + "rear-thigh": { + "translate": [ + { + "x": -17.71, + "y": -4.63, + "curve": [ 0.036, -19.81, 0.043, -20.86, 0.036, -4.63, 0.05, -7.03 ] + }, + { + "time": 0.1, + "x": -20.95, + "y": -7.06, + "curve": [ 0.162, -21.05, 0.4, 7.79, 0.2, -7.13, 0.4, -1.9 ] + }, + { + "time": 0.5, + "x": 7.79, + "y": -1.94, + "curve": [ 0.612, 7.69, 0.875, -10.49, 0.592, -1.97, 0.917, -3.25 ] + }, + { "time": 1, "x": -17.71, "y": -4.63 } + ] + }, + "torso2": { + "rotate": [ + { + "value": 1, + "curve": [ 0.006, 1.2, 0.084, 2.88 ] + }, + { + "time": 0.1333, + "value": 2.88, + "curve": [ 0.205, 2.88, 0.284, -1.17 ] + }, + { + "time": 0.3667, + "value": -1.17, + "curve": [ 0.411, -1.17, 0.481, 0.57 ] + }, + { + "time": 0.5, + "value": 1, + "curve": [ 0.515, 1.33, 0.59, 2.83 ] + }, + { + "time": 0.6333, + "value": 2.85, + "curve": [ 0.683, 2.86, 0.796, -1.2 ] + }, + { + "time": 0.8667, + "value": -1.2, + "curve": [ 0.916, -1.2, 0.984, 0.62 ] + }, + { "time": 1, "value": 1 } + ] + }, + "torso3": { + "rotate": [ + { "value": -1.81 } + ] + }, + "front-upper-arm": { + "rotate": [ + { + "value": -9.51, + "curve": [ 0.021, -13.32, 0.058, -19.4 ] + }, + { + "time": 0.1, + "value": -19.4, + "curve": [ 0.238, -19.69, 0.337, 7.78 ] + }, + { + "time": 0.3667, + "value": 16.2, + "curve": [ 0.399, 25.42, 0.497, 60.19 ] + }, + { + "time": 0.6, + "value": 60.26, + "curve": [ 0.719, 60.13, 0.845, 27.61 ] + }, + { + "time": 0.8667, + "value": 22.45, + "curve": [ 0.892, 16.38, 0.979, -3.27 ] + }, + { "time": 1, "value": -9.51 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 13.57, + "curve": [ 0.022, 9.71, 0.147, -3.78 ] + }, + { + "time": 0.3667, + "value": -3.69, + "curve": [ 0.457, -3.66, 0.479, 0.83 ] + }, + { + "time": 0.5, + "value": 4.05, + "curve": [ 0.513, 6.08, 0.635, 30.8 ] + }, + { + "time": 0.8, + "value": 30.92, + "curve": [ 0.974, 31, 0.98, 18.35 ] + }, + { "time": 1, "value": 13.57 } + ] + }, + "front-fist": { + "rotate": [ + { + "value": -28.72, + "curve": [ 0.024, -31.74, 0.176, -43.4 ] + }, + { + "time": 0.3667, + "value": -43.6, + "curve": [ 0.403, -43.65, 0.47, -40.15 ] + }, + { + "time": 0.5, + "value": -35.63, + "curve": [ 0.547, -28.59, 0.624, -4.57 ] + }, + { + "time": 0.7333, + "value": -4.59, + "curve": [ 0.891, -4.62, 0.954, -24.28 ] + }, + { "time": 1, "value": -28.48 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { + "value": 28.28, + "curve": [ 0.034, 30.94, 0.068, 32.05 ] + }, + { + "time": 0.1, + "value": 31.88, + "curve": [ 0.194, 31.01, 0.336, -0.11 ] + }, + { + "time": 0.3667, + "value": -7.11, + "curve": [ 0.421, -19.73, 0.53, -46.21 ] + }, + { + "time": 0.6, + "value": -45.75, + "curve": [ 0.708, -45.03, 0.844, -13.56 ] + }, + { + "time": 0.8667, + "value": -6.48, + "curve": [ 0.909, 6.59, 0.958, 24.21 ] + }, + { "time": 1, "value": 28.28 } + ] + }, + "hair2": { + "rotate": [ + { + "value": -2.79, + "curve": [ 0.074, -2.84, 0.121, 25.08 ] + }, + { + "time": 0.2333, + "value": 24.99, + "curve": [ 0.35, 24.89, 0.427, -2.86 ] + }, + { + "time": 0.5, + "value": -2.8, + "curve": [ 0.575, -2.73, 0.652, 24.5 ] + }, + { + "time": 0.7333, + "value": 24.55, + "curve": [ 0.828, 24.6, 0.932, -2.69 ] + }, + { "time": 1, "value": -2.79 } + ] + }, + "hair4": { + "rotate": [ + { + "value": -6.01, + "curve": [ 0.106, -5.97, 0.151, 18.62 ] + }, + { + "time": 0.2333, + "value": 18.72, + "curve": [ 0.336, 18.7, 0.405, -11.37 ] + }, + { + "time": 0.5, + "value": -11.45, + "curve": [ 0.626, -11.46, 0.629, 18.94 ] + }, + { + "time": 0.7333, + "value": 18.92, + "curve": [ 0.833, 18.92, 0.913, -6.06 ] + }, + { "time": 1, "value": -6.01 } + ], + "translate": [ + { "x": 0.03, "y": 1.35 } + ] + }, + "rear-bracer": { + "rotate": [ + { + "value": 10.06, + "curve": [ 0.044, 11.16, 0.063, 11.49 ] + }, + { + "time": 0.1, + "value": 11.49, + "curve": [ 0.215, 11.49, 0.336, 2.92 ] + }, + { + "time": 0.3667, + "value": 0.84, + "curve": [ 0.416, -2.52, 0.498, -10.84 ] + }, + { + "time": 0.6, + "value": -10.83, + "curve": [ 0.762, -10.71, 0.845, -3.05 ] + }, + { + "time": 0.8667, + "value": -1.34, + "curve": [ 0.917, 2.54, 0.977, 8.81 ] + }, + { "time": 1, "value": 10.06 } + ] + }, + "gun": { + "rotate": [ + { + "value": -14.67, + "curve": [ 0.086, -14.67, 0.202, 8.31 ] + }, + { + "time": 0.2333, + "value": 12.14, + "curve": [ 0.279, 17.71, 0.391, 25.79 ] + }, + { + "time": 0.5, + "value": 25.77, + "curve": [ 0.631, 25.74, 0.694, 4.53 ] + }, + { + "time": 0.7333, + "value": -0.65, + "curve": [ 0.768, -5.21, 0.902, -14.4 ] + }, + { "time": 1, "value": -14.67 } + ] + }, + "front-leg-target": { + "translate": [ + { + "x": -2.83, + "y": -8.48, + "curve": [ 0.008, -2.83, 0.058, 0.09, 0.001, 4.97, 0.058, 6.68 ] + }, + { + "time": 0.0667, + "x": 0.09, + "y": 6.68, + "curve": [ 0.3, 0.09, 0.767, -2.83, 0.3, 6.68, 0.767, -8.48 ] + }, + { "time": 1, "x": -2.83, "y": -8.48 } + ] + }, + "hair1": { + "rotate": [ + { + "curve": [ 0.028, 1.24, 0.016, 3.46 ] + }, + { + "time": 0.1, + "value": 3.45, + "curve": [ 0.159, 3.45, 0.189, 0.23 ] + }, + { + "time": 0.2333, + "value": -2.29, + "curve": [ 0.265, -4.32, 0.305, -5.92 ] + }, + { + "time": 0.3667, + "value": -5.94, + "curve": [ 0.446, -5.96, 0.52, 3.41 ] + }, + { + "time": 0.6, + "value": 3.42, + "curve": [ 0.717, 3.42, 0.772, -5.93 ] + }, + { + "time": 0.8667, + "value": -5.97, + "curve": [ 0.933, -5.99, 0.982, -0.94 ] + }, + { "time": 1 } + ] + }, + "hair3": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.159, -10.48 ] + }, + { + "time": 0.2333, + "value": -10.49, + "curve": [ 0.334, -10.5, 0.439, -0.09 ] + }, + { + "time": 0.5, + "value": -0.09, + "curve": [ 0.569, -0.09, 0.658, -10.75 ] + }, + { + "time": 0.7333, + "value": -10.7, + "curve": [ 0.833, -10.63, 0.947, 0 ] + }, + { "time": 1 } + ] + }, + "gun-tip": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring": { + "rotate": [ + { "time": 0.2333, "value": 0.11 } + ] + }, + "muzzle-ring2": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring3": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "muzzle-ring4": { + "rotate": [ + { "time": 0.2667, "value": 0.11 } + ] + }, + "back-shoulder": { + "translate": [ + { + "x": -0.18, + "y": -4.49, + "curve": [ 0.133, -0.18, 0.333, 7.69, 0.133, -4.49, 0.333, 2.77 ] + }, + { + "time": 0.4667, + "x": 7.69, + "y": 2.77, + "curve": [ 0.6, 7.69, 0.858, -0.18, 0.6, 2.77, 0.858, -4.49 ] + }, + { "time": 1, "x": -0.18, "y": -4.49 } + ] + }, + "front-shoulder": { + "translate": [ + { + "x": 1.46, + "y": 9.37, + "curve": [ 0.162, 1.41, 0.333, -1.66, 0.162, 9.37, 0.301, -7.23 ] + }, + { + "time": 0.5, + "x": -1.6, + "y": -7.27, + "curve": [ 0.735, -1.5, 0.847, 1.46, 0.723, -7.31, 0.838, 9.32 ] + }, + { "time": 1, "x": 1.46, "y": 9.37 } + ] + }, + "head-control": { + "translate": [ + { + "x": -6.46, + "y": -8.4, + "curve": [ 0.053, -5.31, 0.167, -3.64, 0.093, -8.4, 0.196, -3.81 ] + }, + { + "time": 0.2333, + "x": -3.64, + "y": -1.32, + "curve": [ 0.309, -3.64, 0.436, -5.84, 0.275, 1.43, 0.38, 10.3 ] + }, + { + "time": 0.5, + "x": -7.03, + "y": 10.29, + "curve": [ 0.538, -7.75, 0.66, -10.54, 0.598, 10.27, 0.694, 1.56 ] + }, + { + "time": 0.7333, + "x": -10.54, + "y": -1.26, + "curve": [ 0.797, -10.54, 0.933, -7.91, 0.768, -3.79, 0.875, -8.4 ] + }, + { "time": 1, "x": -6.46, "y": -8.4 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { + "softness": 25.7, + "bendPositive": false, + "curve": [ 0.008, 1, 0.025, 1, 0.008, 25.7, 0.025, 9.9 ] + }, + { + "time": 0.0333, + "softness": 9.9, + "bendPositive": false, + "curve": [ 0.15, 1, 0.383, 1, 0.15, 9.9, 0.383, 43.2 ] + }, + { + "time": 0.5, + "softness": 43.2, + "bendPositive": false, + "curve": [ 0.625, 1, 0.875, 1, 0.625, 43.2, 0.846, 45.57 ] + }, + { "time": 1, "softness": 25.7, "bendPositive": false } + ], + "rear-leg-ik": [ + { "softness": 5, "bendPositive": false }, + { "time": 0.4333, "softness": 4.9, "bendPositive": false }, + { "time": 0.5, "softness": 28.81, "bendPositive": false }, + { "time": 0.6, "softness": 43.8, "bendPositive": false }, + { "time": 1, "softness": 5, "bendPositive": false } + ] + }, + "events": [ + { "name": "footstep" }, + { "time": 0.5, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/spineboy-pro.skel b/spine-haxe/example/assets/spineboy-pro.skel new file mode 100644 index 000000000..c14f30405 Binary files /dev/null and b/spine-haxe/example/assets/spineboy-pro.skel differ diff --git a/spine-haxe/example/assets/spineboy.atlas b/spine-haxe/example/assets/spineboy.atlas new file mode 100644 index 000000000..b07ccc3bf --- /dev/null +++ b/spine-haxe/example/assets/spineboy.atlas @@ -0,0 +1,101 @@ +spineboy.png + size: 1024, 256 + filter: Linear, Linear + scale: 0.5 +crosshair + bounds: 813, 160, 45, 45 +eye-indifferent + bounds: 569, 2, 47, 45 +eye-surprised + bounds: 643, 7, 47, 45 + rotate: 90 +front-bracer + bounds: 811, 51, 29, 40 +front-fist-closed + bounds: 807, 93, 38, 41 +front-fist-open + bounds: 815, 210, 43, 44 +front-foot + bounds: 706, 64, 63, 35 + rotate: 90 +front-shin + bounds: 80, 11, 41, 92 +front-thigh + bounds: 754, 12, 23, 56 +front-upper-arm + bounds: 618, 5, 23, 49 +goggles + bounds: 214, 20, 131, 83 +gun + bounds: 347, 14, 105, 102 + rotate: 90 +head + bounds: 80, 105, 136, 149 +hoverboard-board + bounds: 2, 8, 246, 76 + rotate: 90 +hoverboard-thruster + bounds: 478, 2, 30, 32 +hoverglow-small + bounds: 218, 117, 137, 38 + rotate: 90 +mouth-grind + bounds: 775, 80, 47, 30 + rotate: 90 +mouth-oooo + bounds: 779, 31, 47, 30 + rotate: 90 +mouth-smile + bounds: 783, 207, 47, 30 + rotate: 90 +muzzle-glow + bounds: 779, 4, 25, 25 +muzzle-ring + bounds: 451, 14, 25, 105 +muzzle01 + bounds: 664, 60, 67, 40 + rotate: 90 +muzzle02 + bounds: 580, 56, 68, 42 + rotate: 90 +muzzle03 + bounds: 478, 36, 83, 53 + rotate: 90 +muzzle04 + bounds: 533, 49, 75, 45 + rotate: 90 +muzzle05 + bounds: 624, 56, 68, 38 + rotate: 90 +neck + bounds: 806, 8, 18, 21 +portal-bg + bounds: 258, 121, 133, 133 +portal-flare1 + bounds: 690, 2, 56, 30 + rotate: 90 +portal-flare2 + bounds: 510, 3, 57, 31 +portal-flare3 + bounds: 722, 4, 58, 30 + rotate: 90 +portal-shade + bounds: 393, 121, 133, 133 +portal-streaks1 + bounds: 528, 126, 126, 128 +portal-streaks2 + bounds: 656, 129, 125, 125 +rear-bracer + bounds: 826, 13, 28, 36 +rear-foot + bounds: 743, 70, 57, 30 + rotate: 90 +rear-shin + bounds: 174, 14, 38, 89 +rear-thigh + bounds: 783, 158, 28, 47 +rear-upper-arm + bounds: 783, 136, 20, 44 + rotate: 90 +torso + bounds: 123, 13, 49, 90 diff --git a/spine-haxe/example/assets/spineboy.png b/spine-haxe/example/assets/spineboy.png new file mode 100644 index 000000000..074f1e351 Binary files /dev/null and b/spine-haxe/example/assets/spineboy.png differ diff --git a/spine-ts/spine-phaser/example/assets/stretchyman-pro.json b/spine-haxe/example/assets/stretchyman-pro.json similarity index 96% rename from spine-ts/spine-phaser/example/assets/stretchyman-pro.json rename to spine-haxe/example/assets/stretchyman-pro.json index c2eec0096..a7825e2dc 100644 --- a/spine-ts/spine-phaser/example/assets/stretchyman-pro.json +++ b/spine-haxe/example/assets/stretchyman-pro.json @@ -1,7 +1,7 @@ { "skeleton": { - "hash": "QqiPXGOfONE", - "spine": "4.1.17", + "hash": "8oGZUTwZfVI", + "spine": "4.1.20", "x": -100.47, "y": -9.21, "width": 260.65, @@ -489,7 +489,7 @@ "back-arm": { "type": "mesh", "uvs": [ 0.74522, 0.00989, 0.64111, 0.05762, 0.56303, 0.1559, 0.42509, 0.25886, 0.28974, 0.359, 0.22988, 0.49565, 0.21166, 0.60797, 0.21166, 0.69782, 0.16481, 0.78674, 0.14139, 0.84757, 0.02427, 0.88501, 0.0529, 0.91871, 0.37824, 0.98797, 0.60468, 0.98235, 0.6307, 0.9056, 0.73481, 0.87752, 0.63591, 0.81762, 0.55262, 0.74181, 0.38084, 0.69876, 0.37824, 0.60797, 0.39906, 0.50876, 0.51358, 0.38521, 0.66194, 0.28881, 0.85454, 0.18398, 0.97687, 0.07541, 0.9144, 0.00989 ], - "triangles": [ 11, 9, 12, 9, 8, 12, 12, 8, 18, 13, 12, 14, 12, 18, 17, 18, 8, 7, 14, 12, 17, 11, 10, 9, 14, 16, 15, 14, 17, 16, 7, 19, 18, 7, 6, 19, 6, 5, 19, 19, 5, 20, 5, 4, 20, 20, 4, 21, 4, 3, 21, 21, 3, 22, 3, 2, 22, 22, 2, 23, 2, 1, 23, 23, 1, 24, 1, 0, 24, 0, 25, 24 ], + "triangles": [ 14, 17, 16, 14, 16, 15, 11, 10, 9, 14, 12, 17, 18, 8, 7, 12, 18, 17, 13, 12, 14, 12, 8, 18, 9, 8, 12, 11, 9, 12, 6, 5, 19, 7, 6, 19, 7, 19, 18, 20, 4, 21, 5, 4, 20, 19, 5, 20, 3, 2, 22, 21, 3, 22, 4, 3, 21, 0, 25, 24, 1, 0, 24, 23, 1, 24, 2, 1, 23, 22, 2, 23 ], "vertices": [ 1, 9, -7.68, -11.48, 1, 1, 9, 4.09, -13.63, 1, 1, 9, 23.49, -9.36, 1, 1, 10, 13.44, -9.23, 1, 2, 10, 35.2, -9.62, 0.50649, 11, -0.58, -9.66, 0.49351, 1, 11, 26.04, -6.39, 1, 1, 12, 14.15, -6.11, 1, 2, 12, 31.54, -5.57, 0.66493, 13, -3.33, -5.03, 0.33507, 1, 13, 13.08, -11.25, 1, 1, 13, 24.41, -14.89, 1, 1, 13, 30.15, -24.52, 1, 1, 13, 36.93, -23.54, 1, 1, 13, 54.08, -2.33, 1, 1, 13, 55.73, 14.15, 1, 1, 13, 41.39, 18.48, 1, 1, 13, 37.29, 26.87, 1, 1, 13, 24.66, 21.67, 1, 1, 13, 9.18, 18.1, 1, 2, 12, 31.33, 6.78, 0.47881, 13, -1.11, 7.12, 0.52119, 1, 12, 13.77, 6.04, 1, 2, 11, 24.98, 6.17, 0.89218, 12, -5.48, 6.96, 0.10782, 2, 10, 32.6, 7.29, 0.59842, 11, -0.32, 7.45, 0.40158, 1, 10, 11.08, 8.85, 1, 1, 9, 17.89, 11.88, 1, 1, 9, -4.82, 9.46, 1, 1, 9, -13.69, -0.69, 1 ], "hull": 26, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 0, 50, 2, 48, 4, 46, 6, 44, 8, 42, 10, 40, 12, 38, 14, 36 ], @@ -509,7 +509,7 @@ "back-leg": { "type": "mesh", "uvs": [ 0.502, 0.01179, 0.36076, 0.06379, 0.4057, 0.15046, 0.44743, 0.23916, 0.47953, 0.32991, 0.51163, 0.42269, 0.52127, 0.50629, 0.48274, 0.58888, 0.41212, 0.66025, 0.3126, 0.74182, 0.2163, 0.81625, 0.1232, 0.89272, 0.00763, 0.97429, 0.29655, 0.98958, 0.47407, 0.99222, 0.64004, 0.99468, 0.80989, 0.9896, 0.91291, 0.98652, 1, 0.95797, 0.8333, 0.94681, 0.71067, 0.9386, 0.57123, 0.92031, 0.41533, 0.89986, 0.3447, 0.89272, 0.36885, 0.87178, 0.42817, 0.82033, 0.502, 0.74794, 0.58226, 0.66943, 0.6593, 0.59092, 0.72993, 0.50528, 0.76524, 0.42167, 0.78129, 0.32481, 0.78771, 0.23406, 0.78771, 0.13924, 0.72351, 0.03728, 0.60152, 0.00567, 0.82117, 0.96898, 0.67873, 0.96396, 0.52111, 0.9574, 0.35936, 0.94214, 0.19388, 0.92922, 0.25375, 0.88159, 0.32792, 0.8184 ], - "triangles": [ 17, 36, 19, 17, 16, 36, 16, 37, 36, 17, 19, 18, 36, 20, 19, 15, 37, 16, 14, 38, 15, 15, 38, 37, 37, 20, 36, 38, 21, 37, 37, 21, 20, 38, 22, 21, 13, 39, 14, 14, 39, 38, 12, 40, 13, 13, 40, 39, 39, 22, 38, 40, 23, 39, 39, 23, 22, 12, 11, 40, 40, 41, 23, 40, 11, 41, 23, 41, 24, 11, 10, 41, 41, 42, 24, 41, 10, 42, 24, 42, 25, 26, 25, 9, 10, 9, 42, 25, 42, 9, 9, 8, 26, 26, 8, 27, 8, 7, 27, 27, 7, 28, 7, 6, 28, 28, 6, 29, 6, 5, 29, 29, 5, 30, 30, 5, 31, 31, 5, 4, 31, 4, 32, 32, 4, 3, 32, 3, 33, 3, 2, 33, 2, 34, 33, 2, 1, 34, 34, 0, 35, 34, 1, 0 ], + "triangles": [ 36, 20, 19, 17, 19, 18, 16, 37, 36, 17, 16, 36, 17, 36, 19, 38, 22, 21, 37, 21, 20, 38, 21, 37, 37, 20, 36, 15, 38, 37, 14, 38, 15, 15, 37, 16, 39, 23, 22, 40, 23, 39, 39, 22, 38, 13, 40, 39, 12, 40, 13, 14, 39, 38, 13, 39, 14, 9, 8, 26, 25, 42, 9, 10, 9, 42, 26, 25, 9, 24, 42, 25, 41, 10, 42, 41, 42, 24, 11, 10, 41, 23, 41, 24, 40, 11, 41, 40, 41, 23, 12, 11, 40, 26, 8, 27, 6, 5, 29, 28, 6, 29, 7, 6, 28, 27, 7, 28, 8, 7, 27, 29, 5, 30, 31, 5, 4, 30, 5, 31, 32, 4, 3, 31, 4, 32, 34, 1, 0, 34, 0, 35, 2, 1, 34, 2, 34, 33, 3, 2, 33, 32, 3, 33 ], "vertices": [ 1, 20, -19.79, -5.67, 1, 2, 20, -5.62, -22.28, 0.83363, 21, -41.07, -23.3, 0.16637, 2, 20, 22.31, -21.98, 0.65187, 21, -13.17, -21.89, 0.34813, 3, 20, 50.83, -22.11, 0.3172, 21, 15.33, -20.87, 0.43086, 22, -19.67, -21.09, 0.25193, 4, 20, 79.85, -23.29, 0.10792, 21, 44.37, -20.89, 0.35417, 22, 9.3, -19.2, 0.3192, 23, -25.22, -20.06, 0.21872, 4, 21, 74.06, -20.98, 0.16486, 22, 38.93, -17.34, 0.32776, 23, 4.09, -15.38, 0.29831, 24, -30.1, -17.16, 0.20907, 3, 22, 65.54, -17.61, 0.17523, 23, 30.6, -13.11, 0.39173, 24, -4.12, -11.42, 0.43304, 3, 23, 57.03, -15.71, 0.19718, 24, 22.43, -10.53, 0.52971, 25, -12.97, -9.81, 0.27311, 3, 24, 46.05, -13.47, 0.40991, 25, 10.84, -10.17, 0.34747, 26, -24.93, -10.51, 0.24261, 3, 24, 73.39, -18.69, 0.19432, 25, 38.58, -12.41, 0.37177, 26, 2.9, -10.99, 0.43391, 3, 25, 64.06, -14.98, 0.16664, 26, 28.49, -11.94, 0.56756, 27, -7.53, -11.48, 0.2658, 3, 26, 54.58, -12.37, 0.52114, 27, 18.56, -10.93, 0.36168, 14, -3.08, 24.95, 0.11718, 4, 26, 82.97, -14.36, 0.35144, 27, 47.01, -11.86, 0.29521, 14, -13.07, -1.67, 0.25118, 15, -46.3, 1.83, 0.10216, 1, 14, 16.37, -4.67, 1, 2, 14, 34.32, -4.37, 0.53487, 15, 0.74, -4.44, 0.46513, 3, 14, 51.1, -4.08, 0.14611, 15, 17.5, -5.42, 0.54314, 16, -15.51, -2.75, 0.31075, 2, 15, 34.67, -4.01, 0.40714, 16, 1.65, -4.36, 0.59286, 2, 15, 45.09, -3.16, 0.25726, 16, 12.05, -5.34, 0.74274, 2, 15, 53.99, 5.81, 0.25311, 16, 22.38, 1.94, 0.74689, 2, 15, 37.19, 9.56, 0.4029, 16, 6.5, 8.57, 0.5971, 3, 14, 57.07, 14.17, 0.13352, 15, 24.84, 12.33, 0.54644, 16, -5.18, 13.44, 0.32004, 4, 26, 47.09, 33.11, 0.13131, 14, 42.64, 19.08, 0.26349, 15, 10.82, 18.31, 0.49746, 16, -17.94, 21.78, 0.10773, 4, 26, 46.46, 16.09, 0.21159, 27, 9.37, 17.21, 0.1068, 14, 26.51, 24.57, 0.44951, 15, -4.85, 25.01, 0.23211, 3, 26, 46.8, 8.62, 0.40111, 27, 10, 9.75, 0.24543, 14, 19.24, 26.38, 0.35346, 3, 26, 39.71, 8.61, 0.5825, 27, 2.91, 9.47, 0.30792, 14, 21.25, 33.18, 0.10958, 3, 25, 59.17, 5.89, 0.21955, 26, 22.27, 8.58, 0.57946, 27, -14.51, 8.8, 0.20099, 3, 24, 71.84, 0.47, 0.21583, 25, 34.96, 6.47, 0.32263, 26, -1.92, 7.63, 0.46154, 3, 24, 45.81, 3.96, 0.40554, 25, 8.71, 7.12, 0.38602, 26, -28.17, 6.61, 0.20845, 3, 23, 56.79, 2.13, 0.25409, 24, 19.83, 7.12, 0.53006, 25, -17.46, 7.46, 0.21585, 3, 22, 66.18, 3.45, 0.22414, 23, 29.23, 7.92, 0.34135, 24, -8.25, 9.24, 0.43451, 4, 21, 76.6, 4.51, 0.19364, 22, 39.78, 8.26, 0.28887, 23, 2.49, 10.19, 0.33579, 24, -35.06, 7.97, 0.1817, 4, 20, 82.88, 7.08, 0.11658, 21, 46.18, 9.58, 0.35727, 22, 9.09, 11.32, 0.35745, 23, -28.36, 10.3, 0.16869, 3, 20, 54.46, 12.11, 0.35357, 21, 17.57, 13.46, 0.44494, 22, -19.71, 13.32, 0.20149, 2, 20, 24.65, 16.69, 0.65438, 21, -12.4, 16.85, 0.34562, 2, 20, -8.38, 15.21, 0.85331, 21, -45.34, 14.05, 0.14669, 1, 20, -20.19, 4.56, 1, 2, 15, 35.89, 2.53, 0.4051, 16, 3.99, 1.87, 0.5949, 3, 14, 54.38, 5.92, 0.13921, 15, 21.52, 4.3, 0.54495, 16, -9.85, 6.12, 0.31584, 2, 14, 37.79, 7.63, 0.44939, 15, 5.1, 7.27, 0.55061, 3, 26, 65.39, 20.7, 0.11858, 14, 20.6, 11.35, 0.75134, 15, -11.76, 12.27, 0.13008, 3, 26, 65.41, 1.81, 0.3968, 27, 24.3, 0.23, 0.28258, 14, 2.07, 14.98, 0.32063, 3, 26, 48.01, 0.08, 0.55395, 27, 6.94, -0.33, 0.33293, 14, 3.38, 30.47, 0.11312, 3, 25, 65.95, -2.97, 0.19447, 26, 24.96, -1.58, 0.57382, 27, -15.99, -0.43, 0.23171 ], "hull": 36, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 34, 36, 44, 46, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 0, 70, 4, 66, 2, 68, 40, 42, 42, 44, 26, 28, 28, 30, 46, 48, 48, 50, 36, 38, 38, 40, 30, 32, 32, 34, 18, 52, 16, 54, 14, 56, 12, 58, 10, 60, 8, 62, 6, 64, 32, 72, 72, 38, 30, 74, 74, 40, 72, 74, 28, 76, 76, 42, 74, 76, 26, 78, 78, 44, 76, 78, 24, 80, 80, 46, 78, 80, 22, 82, 82, 48, 80, 82, 20, 84, 84, 50, 82, 84 ], @@ -529,7 +529,7 @@ "body": { "type": "mesh", "uvs": [ 0.35966, 0.01351, 0.26864, 0.04108, 0.26204, 0.0954, 0.34119, 0.14478, 0.39792, 0.19457, 0.40451, 0.24272, 0.38077, 0.27893, 0.3597, 0.3004, 0.34119, 0.31926, 0.34989, 0.34326, 0.35834, 0.36658, 0.36552, 0.40164, 0.37234, 0.43499, 0.38397, 0.4944, 0.3956, 0.55971, 0.39884, 0.59858, 0.40142, 0.62955, 0.40216, 0.65662, 0.3461, 0.71564, 0.27077, 0.78176, 0.2201, 0.82128, 0.17618, 0.85553, 0.13115, 0.88833, 0.08238, 0.92385, 0.00342, 0.9796, 0.18836, 0.99127, 0.32172, 0.99284, 0.46266, 0.99451, 0.61643, 0.98608, 0.71618, 0.97182, 0.61851, 0.95821, 0.48967, 0.95043, 0.39458, 0.94083, 0.27772, 0.92904, 0.23408, 0.9232, 0.26692, 0.89774, 0.30681, 0.86681, 0.34203, 0.83415, 0.38369, 0.7955, 0.45642, 0.72874, 0.52708, 0.66845, 0.56032, 0.63345, 0.57541, 0.60109, 0.59357, 0.56214, 0.61643, 0.49732, 0.63513, 0.43963, 0.64345, 0.40462, 0.77081, 0.39011, 0.84585, 0.37025, 0.90983, 0.35331, 0.9674, 0.31915, 0.97302, 0.28585, 0.96448, 0.23351, 0.8952, 0.1681, 0.79346, 0.12643, 0.75179, 0.10879, 0.71799, 0.09448, 0.66817, 0.07237, 0.61343, 0.04807, 0.47868, 0.01411, 0.49846, 0.38826, 0.66315, 0.34728, 0.67333, 0.30664, 0.8188, 0.29655, 0.80971, 0.24505, 0.72829, 0.17902, 0.68147, 0.13902, 0.59191, 0.09711, 0.3904, 0.09012, 0.53695, 0.14981, 0.57563, 0.19616, 0.64483, 0.25077, 0.79855, 0.33476, 0.61751, 0.97167, 0.4773, 0.97061, 0.23795, 0.95673, 0.15272, 0.92355, 0.14158, 0.94886, 0.23861, 0.86092, 0.51732, 0.30354, 0.50696, 0.34527, 0.50634, 0.43735, 0.50334, 0.4959, 0.51086, 0.32558, 0.50355, 0.41057, 0.19543, 0.89241, 0.36492, 0.9641 ], - "triangles": [ 1, 0, 59, 58, 1, 59, 68, 1, 58, 2, 1, 68, 67, 68, 58, 67, 58, 57, 67, 57, 56, 66, 67, 56, 66, 56, 55, 3, 2, 68, 69, 68, 67, 3, 68, 69, 69, 67, 66, 66, 55, 54, 65, 66, 54, 65, 54, 53, 4, 3, 69, 70, 69, 66, 4, 69, 70, 70, 66, 65, 5, 4, 70, 71, 70, 65, 5, 70, 71, 6, 71, 62, 79, 6, 62, 7, 6, 79, 71, 6, 5, 83, 7, 79, 8, 7, 83, 83, 79, 62, 9, 8, 83, 80, 9, 83, 61, 83, 62, 61, 62, 72, 80, 83, 61, 46, 80, 61, 46, 61, 47, 62, 71, 64, 64, 65, 53, 64, 53, 52, 71, 65, 64, 63, 64, 52, 63, 52, 51, 62, 64, 63, 50, 63, 51, 72, 62, 63, 72, 63, 50, 49, 72, 50, 48, 72, 49, 47, 61, 72, 47, 72, 48, 74, 32, 31, 86, 32, 74, 73, 31, 30, 74, 31, 73, 73, 30, 29, 28, 74, 73, 28, 73, 29, 27, 86, 74, 27, 74, 28, 26, 86, 27, 75, 33, 86, 24, 23, 77, 25, 77, 75, 24, 77, 25, 26, 75, 86, 25, 75, 26, 22, 21, 85, 85, 78, 35, 34, 85, 35, 76, 22, 85, 76, 85, 34, 23, 22, 76, 77, 23, 76, 77, 76, 34, 77, 34, 33, 75, 77, 33, 86, 33, 32, 36, 78, 20, 21, 20, 78, 37, 36, 20, 85, 21, 78, 35, 78, 36, 38, 18, 39, 19, 18, 38, 37, 19, 38, 20, 19, 37, 40, 17, 16, 41, 40, 16, 39, 17, 40, 18, 17, 39, 42, 15, 14, 43, 42, 14, 41, 16, 15, 42, 41, 15, 14, 13, 82, 43, 82, 44, 14, 82, 43, 12, 11, 84, 45, 81, 84, 12, 84, 81, 46, 45, 84, 13, 12, 81, 82, 13, 81, 44, 81, 45, 82, 81, 44, 10, 9, 80, 60, 10, 80, 11, 10, 60, 60, 80, 46, 84, 60, 46, 11, 60, 84 ], + "triangles": [ 2, 1, 68, 68, 1, 58, 58, 1, 59, 1, 0, 59, 69, 67, 66, 3, 68, 69, 69, 68, 67, 3, 2, 68, 66, 56, 55, 66, 67, 56, 67, 57, 56, 67, 58, 57, 67, 68, 58, 5, 70, 71, 71, 70, 65, 5, 4, 70, 70, 66, 65, 4, 69, 70, 70, 69, 66, 4, 3, 69, 65, 54, 53, 65, 66, 54, 66, 55, 54, 46, 61, 47, 46, 80, 61, 80, 83, 61, 61, 62, 72, 61, 83, 62, 80, 9, 83, 9, 8, 83, 83, 79, 62, 8, 7, 83, 83, 7, 79, 71, 6, 5, 7, 6, 79, 79, 6, 62, 6, 71, 62, 47, 72, 48, 47, 61, 72, 48, 72, 49, 49, 72, 50, 72, 63, 50, 72, 62, 63, 50, 63, 51, 62, 64, 63, 63, 52, 51, 63, 64, 52, 71, 65, 64, 64, 53, 52, 64, 65, 53, 62, 71, 64, 26, 86, 27, 27, 74, 28, 27, 86, 74, 28, 73, 29, 28, 74, 73, 73, 30, 29, 74, 31, 73, 73, 31, 30, 86, 32, 74, 74, 32, 31, 25, 75, 26, 26, 75, 86, 24, 77, 25, 25, 77, 75, 24, 23, 77, 75, 33, 86, 86, 33, 32, 75, 77, 33, 77, 34, 33, 77, 76, 34, 77, 23, 76, 23, 22, 76, 76, 85, 34, 76, 22, 85, 34, 85, 35, 85, 78, 35, 22, 21, 85, 35, 78, 36, 85, 21, 78, 37, 36, 20, 21, 20, 78, 36, 78, 20, 20, 19, 37, 37, 19, 38, 19, 18, 38, 38, 18, 39, 18, 17, 39, 39, 17, 40, 41, 40, 16, 40, 17, 16, 42, 41, 15, 41, 16, 15, 43, 42, 14, 42, 15, 14, 14, 82, 43, 43, 82, 44, 14, 13, 82, 82, 81, 44, 44, 81, 45, 82, 13, 81, 13, 12, 81, 46, 45, 84, 12, 84, 81, 45, 81, 84, 12, 11, 84, 11, 60, 84, 84, 60, 46, 60, 80, 46, 11, 10, 60, 60, 10, 80, 10, 9, 80 ], "vertices": [ 1, 6, 30.85, 2.45, 1, 2, 5, 60.42, 12.42, 0.24859, 6, 22.32, 18.18, 0.75141, 2, 5, 39.47, 25.25, 0.44332, 6, -1.06, 25.72, 0.55668, 3, 4, 48.03, 29.46, 0.37431, 5, 14.55, 26.45, 0.47619, 6, -25.57, 21.02, 0.1495, 3, 3, 50.36, 32.58, 0.11243, 4, 24.29, 26.8, 0.64611, 5, -8.99, 30.5, 0.24146, 3, 44, -45.22, -8.81, 0.10611, 3, 28.69, 30.4, 0.49533, 4, 2.89, 30.85, 0.39856, 3, 44, -28.91, -12.45, 0.25802, 3, 12.15, 32.8, 0.60894, 4, -12.29, 37.84, 0.13304, 3, 44, -18.5, -14.05, 0.28714, 3, 2.34, 35.98, 0.51935, 29, -7.6, 18.95, 0.19351, 4, 44, -10.79, -18.35, 0.28478, 28, -42.03, 75.56, 0.10295, 3, -6.36, 37.32, 0.37494, 29, -10.2, 10.26, 0.23733, 3, 44, 0.92, -16.96, 0.34087, 3, -17.28, 35.45, 0.32141, 29, -8.2, -0.67, 0.33772, 4, 44, 10.64, -16.32, 0.32691, 45, -24.05, -14.9, 0.16082, 3, -27.58, 33.67, 0.14432, 29, -6.37, -11.05, 0.36794, 4, 44, 28.5, -15.63, 0.24237, 45, -9.55, -15.11, 0.27028, 46, -45.51, -19.12, 0.12132, 29, -3.65, -27.88, 0.36603, 4, 44, 41.59, -14.89, 0.21761, 45, 6.93, -15.35, 0.33285, 46, -26.85, -17.49, 0.20377, 29, -1.3, -43.28, 0.24577, 3, 45, 33.83, -15.81, 0.47179, 46, 0, -15.85, 0.42627, 47, -31.79, -17.82, 0.10194, 3, 45, 63.39, -16.48, 0.2126, 46, 29.52, -14.22, 0.42737, 47, -2.43, -14.39, 0.36002, 3, 46, 49.79, -15.51, 0.30179, 47, 14.85, -13.08, 0.47127, 48, -21.15, -15.64, 0.22695, 3, 46, 61.1, -13.41, 0.15443, 47, 29.03, -11.65, 0.50848, 48, -3.27, -12.45, 0.33708, 2, 47, 41.24, -10.8, 0.28079, 48, 8.41, -8.79, 0.71921, 2, 48, 36.24, -8.59, 0.56513, 49, -3.02, -8.84, 0.43487, 3, 48, 67.93, -10.06, 0.16322, 49, 28.69, -7.82, 0.53712, 50, -8.12, -7.7, 0.29966, 3, 49, 47.76, -8.47, 0.40201, 50, 10.97, -7.9, 0.45131, 51, -26.34, -6.21, 0.14668, 3, 49, 64.62, -8.06, 0.25017, 50, 27.8, -8.4, 0.46039, 51, -12.77, -8.82, 0.28944, 4, 49, 79.13, -10.24, 0.11858, 50, 42.33, -8.03, 0.26981, 51, 4.53, -8.38, 0.48104, 38, -1.56, 35.6, 0.13057, 2, 51, 20.84, -9.2, 0.728, 38, -5.38, 19.56, 0.272, 1, 38, -11.5, -7.3, 1, 4, 51, 43.23, 16.27, 0.2746, 38, 15.1, -7.51, 0.48158, 39, -12.29, -5.54, 0.12942, 40, -41.77, 0.94, 0.11439, 4, 51, 37, 33.94, 0.18804, 38, 33.71, -4.58, 0.34252, 39, 6.54, -5.76, 0.18297, 40, -23.2, -2.19, 0.28647, 3, 38, 53.35, -1.59, 0.21646, 39, 26.41, -6.09, 0.26516, 40, -3.62, -5.59, 0.51838, 2, 39, 47.99, -1.76, 0.15753, 40, 18.37, -4.66, 0.84247, 1, 40, 33.16, -0.12, 1, 2, 39, 47.98, 10.84, 0.17387, 40, 20.32, 7.79, 0.82613, 4, 51, 9.83, 48.43, 0.17572, 38, 53.29, 18.7, 0.17038, 39, 29.73, 13.92, 0.136, 40, 2.77, 13.66, 0.5179, 4, 51, 11.45, 34.58, 0.26313, 38, 39.26, 20.56, 0.23037, 39, 16.21, 18.1, 0.15679, 40, -9.94, 19.88, 0.3497, 4, 51, 12.41, 17.13, 0.37057, 38, 22.11, 22.5, 0.30409, 39, -0.38, 22.88, 0.18235, 40, -25.59, 27.17, 0.14299, 3, 51, 12.34, 10.44, 0.4464, 38, 15.56, 23.92, 0.2976, 39, -6.59, 25.37, 0.256, 4, 50, 38.15, 11.09, 0.28506, 51, 1.65, 10.97, 0.37544, 38, 17.99, 34.75, 0.18251, 39, -2.39, 35.65, 0.15699, 3, 49, 62.62, 10.94, 0.26064, 50, 26.05, 10.62, 0.49792, 51, -15.15, 10.14, 0.24144, 3, 49, 47.27, 9.67, 0.40348, 50, 9.53, 10.2, 0.4787, 51, -26.59, 11.94, 0.11781, 3, 48, 69.23, 6.98, 0.16044, 49, 28.64, 9.27, 0.53936, 50, -7.95, 9.39, 0.3002, 2, 48, 37.36, 8.01, 0.57649, 49, -3.21, 7.8, 0.42351, 2, 47, 45.49, 7.11, 0.2935, 48, 8.38, 9.61, 0.7065, 3, 46, 62.85, 9, 0.15446, 47, 29.41, 10.82, 0.49324, 48, -8.13, 9.49, 0.3523, 3, 46, 52.15, 9.28, 0.30575, 47, 12.84, 11.74, 0.46742, 48, -26.12, 8.77, 0.22683, 3, 45, 66.66, 11.26, 0.21798, 46, 30.62, 13.69, 0.42844, 47, -3.05, 13.54, 0.35358, 3, 45, 37.7, 16.76, 0.48246, 46, 1.32, 16.92, 0.41752, 47, -32.5, 14.97, 0.10002, 4, 44, 44.35, 22.12, 0.2346, 45, 11.91, 21.43, 0.43853, 46, -24.76, 19.57, 0.2068, 3, -58.29, -7.2, 0.12007, 4, 44, 28.55, 23.57, 0.31081, 45, -3.77, 23.84, 0.19158, 28, -76.76, 29.23, 0.21531, 3, -42.43, -7.46, 0.28231, 3, 44, 22.31, 41.64, 0.18196, 28, -69.84, 12.47, 0.43955, 3, -34.84, -25, 0.37848, 3, 44, 19.78, 51.42, 0.1392, 28, -59.84, 2.53, 0.47896, 3, -23.9, -35.17, 0.38184, 3, 44, 6.03, 61.54, 0.10543, 28, -52.71, -5.88, 0.51007, 3, -17.11, -43.61, 0.38449, 2, 28, -37.16, -13.14, 0.67427, 3, -1.22, -50.83, 0.32573, 1, 28, -22.09, -13.06, 1, 2, 28, 1.45, -10.49, 0.89019, 3, 37.4, -48.18, 0.10981, 3, 28, 30.41, 0.97, 0.4302, 3, 66.35, -36.73, 0.16237, 4, 19.98, -44.2, 0.40743, 2, 4, 41.58, -34.52, 0.68165, 5, -9.45, -33.21, 0.31835, 2, 4, 50.69, -30.62, 0.51066, 5, 0.38, -31.99, 0.48934, 3, 4, 58.07, -27.45, 0.26484, 5, 8.35, -31.01, 0.61475, 6, -18.05, -36.28, 0.12041, 3, 4, 69.4, -22.88, 0.17396, 5, 20.51, -29.78, 0.5644, 6, -6.53, -32.23, 0.26164, 2, 5, 33.86, -28.42, 0.29085, 6, 6.13, -27.77, 0.70915, 2, 5, 56.55, -19.38, 0.17381, 6, 26.05, -13.63, 0.82619, 4, 44, 20.79, 3.26, 0.43236, 45, -12.74, 4.03, 0.19687, 3, -36.22, 13.38, 0.21782, 29, 13.98, -19.25, 0.15294, 4, 44, 2.69, 26.81, 0.26409, 28, -50.86, 29.21, 0.2337, 3, -16.39, -8.73, 0.34628, 29, 35.79, -0.49, 0.15592, 3, 44, -15.65, 28.57, 0.15678, 28, -33.54, 28.78, 0.2916, 3, 2.03, -9.11, 0.55162, 1, 28, -28.18, 8.37, 1, 1, 28, -5.01, 11, 1, 3, 28, 24.12, 24.18, 0.12052, 3, 60.07, -13.52, 0.21384, 4, 20.53, -20.16, 0.66564, 2, 4, 39.64, -17.85, 0.59513, 5, -6.68, -16.66, 0.40487, 3, 4, 60.96, -9.87, 0.26252, 5, 16.02, -14.92, 0.55541, 6, -14.39, -18.85, 0.18206, 2, 5, 32.69, 8.3, 0.58729, 6, -3.66, 7.65, 0.41271, 2, 4, 39.53, 3.1, 0.47136, 5, -0.95, 3.5, 0.52864, 1, 4, 17.89, 2.56, 1, 2, 3, 27.01, -3.64, 0.67245, 4, -8.37, -1.32, 0.32755, 3, 44, -2.63, 46, 0.10033, 28, -45.42, 10.27, 0.52612, 3, -9.64, -27.47, 0.37356, 2, 39, 47.98, 4.75, 0.16598, 40, 19.38, 1.78, 0.83402, 4, 51, 19.56, 50.48, 0.12624, 38, 53.31, 9.51, 0.16908, 39, 28.22, 4.86, 0.24846, 40, -0.13, 4.94, 0.45621, 4, 51, 26.31, 16.82, 0.32786, 38, 18.97, 9.25, 0.38308, 39, -5.69, 10.34, 0.1588, 40, -32.78, 15.61, 0.13026, 2, 51, 16.97, -0.03, 0.66865, 38, 4.23, 21.71, 0.33135, 3, 51, 28.1, 2.86, 0.4826, 38, 4.92, 10.15, 0.31302, 39, -19.39, 13.57, 0.20437, 3, 49, 63.22, -0.58, 0.21069, 50, 25.96, 0.79, 0.49387, 51, -11.02, 1.48, 0.29545, 3, 44, -14.84, 8.09, 0.24448, 28, -33.35, 51.23, 0.16325, 3, 2.6, 13.54, 0.59227, 4, 44, 3.38, 4.96, 0.28616, 28, -51.81, 51.13, 0.16477, 3, -15.87, 13.44, 0.31892, 29, 13.85, -0.53, 0.23015, 4, 44, 46.09, 3.59, 0.2409, 45, 9.06, 3.1, 0.41152, 46, -28.46, 0.64, 0.21862, 29, 17.5, -43.07, 0.12896, 3, 45, 37.23, 1.25, 0.47745, 46, -0.08, 1.26, 0.42163, 47, -36.26, -5.26, 0.10093, 4, 44, -5.23, 6.3, 0.25594, 28, -43.11, 51.32, 0.15579, 3, -7.17, 13.63, 0.42092, 29, 14.17, 8.17, 0.16735, 4, 44, 33.04, 3.37, 0.36685, 45, -3.97, 3.61, 0.31093, 3, -45.33, 9.83, 0.17307, 29, 15.76, -30.15, 0.14915, 4, 49, 77.51, -1.16, 0.11479, 50, 40.24, 0.95, 0.26889, 51, 3.05, 0.72, 0.44973, 38, 7.66, 35.33, 0.16659, 4, 51, 22.73, 34.68, 0.22091, 38, 37.18, 9.39, 0.26956, 39, 12.3, 7.43, 0.20636, 40, -15.46, 9.95, 0.30317 ], "hull": 60, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 24, 26, 26, 28, 32, 34, 34, 36, 36, 38, 46, 48, 48, 50, 54, 56, 56, 58, 58, 60, 60, 62, 66, 68, 76, 78, 78, 80, 80, 82, 86, 88, 88, 90, 90, 92, 92, 94, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 116, 118, 0, 118, 92, 120, 120, 20, 28, 86, 82, 32, 34, 80, 78, 36, 76, 38, 12, 124, 102, 126, 126, 124, 126, 128, 128, 130, 130, 132, 132, 134, 112, 134, 134, 136, 136, 4, 2, 116, 6, 138, 138, 132, 8, 140, 140, 130, 10, 142, 142, 128, 128, 104, 130, 106, 132, 108, 122, 92, 100, 144, 144, 122, 126, 144, 144, 94, 112, 114, 114, 116, 108, 110, 110, 112, 16, 18, 18, 20, 20, 22, 22, 24, 12, 14, 14, 16, 122, 124, 94, 96, 96, 98, 56, 146, 146, 60, 54, 148, 148, 62, 146, 148, 50, 150, 150, 66, 46, 152, 152, 68, 154, 152, 154, 48, 42, 156, 156, 72, 14, 158, 158, 124, 18, 160, 160, 122, 160, 120, 24, 162, 162, 90, 26, 164, 164, 88, 162, 164, 16, 166, 160, 166, 166, 158, 166, 124, 162, 168, 168, 120, 168, 22, 168, 92, 38, 40, 40, 42, 72, 74, 74, 76, 40, 74, 42, 44, 44, 46, 152, 170, 170, 156, 44, 170, 68, 70, 70, 72, 170, 70, 62, 64, 64, 66, 148, 172, 172, 150, 64, 172, 50, 52, 52, 54, 172, 52, 154, 66, 150, 154, 28, 30, 30, 32, 82, 84, 84, 86, 30, 84 ], @@ -541,7 +541,7 @@ "front-arm": { "type": "mesh", "uvs": [ 0.71401, 0.00566, 0.67108, 0.08129, 0.60222, 0.15434, 0.53633, 0.21683, 0.44558, 0.28705, 0.34898, 0.35134, 0.29097, 0.38941, 0.25238, 0.41472, 0.22423, 0.44271, 0.19483, 0.47193, 0.15998, 0.50658, 0.09138, 0.59568, 0.05498, 0.70866, 0.02988, 0.81366, 0.01049, 0.94262, 0.10495, 0.98985, 0.25391, 0.97421, 0.31482, 0.88907, 0.28834, 0.82869, 0.13607, 0.74572, 0.14335, 0.71488, 0.18317, 0.62253, 0.25217, 0.54221, 0.29538, 0.50981, 0.33787, 0.47795, 0.38452, 0.45013, 0.43581, 0.41953, 0.54711, 0.3655, 0.68845, 0.29832, 0.74855, 0.35527, 0.85874, 0.38229, 0.99674, 0.37645, 0.95354, 0.33244, 0.91356, 0.29172, 0.87464, 0.25208, 0.83759, 0.21434, 0.78083, 0.12598, 0.78194, 0.0683, 0.6322, 0.23719, 0.66925, 0.15784, 0.75533, 0.20967, 0.7161, 0.11137 ], - "triangles": [ 30, 32, 31, 30, 29, 33, 30, 33, 32, 29, 28, 33, 28, 34, 33, 34, 40, 35, 34, 28, 40, 28, 38, 40, 38, 39, 40, 40, 36, 35, 39, 41, 40, 40, 41, 36, 39, 1, 41, 36, 41, 37, 37, 41, 0, 41, 1, 0, 39, 2, 1, 15, 18, 16, 15, 14, 13, 15, 13, 19, 16, 18, 17, 18, 15, 19, 13, 12, 19, 19, 12, 20, 12, 11, 20, 20, 11, 21, 11, 10, 21, 21, 10, 22, 10, 9, 22, 22, 9, 23, 9, 8, 23, 8, 7, 23, 23, 7, 24, 7, 6, 24, 24, 6, 25, 6, 5, 25, 25, 5, 26, 26, 5, 4, 26, 4, 27, 4, 3, 27, 27, 38, 28, 27, 3, 38, 3, 2, 38, 38, 2, 39 ], + "triangles": [ 30, 29, 33, 30, 32, 31, 40, 41, 36, 39, 41, 40, 40, 36, 35, 38, 39, 40, 28, 38, 40, 34, 28, 40, 34, 40, 35, 28, 34, 33, 29, 28, 33, 30, 33, 32, 41, 1, 0, 37, 41, 0, 36, 41, 37, 39, 1, 41, 39, 2, 1, 19, 12, 20, 13, 12, 19, 18, 15, 19, 16, 18, 17, 15, 13, 19, 15, 14, 13, 15, 18, 16, 21, 10, 22, 11, 10, 21, 20, 11, 21, 12, 11, 20, 9, 8, 23, 22, 9, 23, 10, 9, 22, 26, 5, 4, 25, 5, 26, 6, 5, 25, 24, 6, 25, 7, 6, 24, 23, 7, 24, 8, 7, 23, 38, 2, 39, 3, 2, 38, 27, 3, 38, 27, 38, 28, 4, 3, 27, 26, 4, 27 ], "vertices": [ 1, 53, 21.67, 6.08, 1, 2, 52, 18.13, 3.37, 0.16553, 53, 3.92, 4.24, 0.83447, 3, 33, -6.12, -15.24, 0.20965, 52, -0.05, 8.86, 0.53629, 6, 43.44, 6.81, 0.25406, 1, 33, 10.36, -12.02, 1, 2, 33, 30.62, -10.09, 0.88822, 34, -7.63, -10.15, 0.11178, 2, 33, 50.57, -9.69, 0.30996, 34, 12.31, -9.61, 0.69004, 2, 34, 24.21, -9.37, 0.86563, 35, -13.43, -6.2, 0.13437, 2, 34, 32.12, -9.22, 0.73143, 35, -5.73, -8.02, 0.26857, 2, 34, 39.35, -7.59, 0.54007, 35, 1.68, -8.25, 0.45993, 2, 34, 46.9, -5.88, 0.29037, 35, 9.42, -8.48, 0.70963, 2, 35, 18.59, -8.76, 0.66539, 36, -15.76, -5.13, 0.33461, 1, 36, 6.03, -8.58, 1, 2, 36, 31.42, -5.98, 0.39257, 37, 0.49, -6.36, 0.60743, 1, 37, 23.8, -9.31, 1, 1, 37, 52.37, -11.28, 1, 1, 37, 62.39, 2.72, 1, 1, 37, 58.29, 24.21, 1, 1, 37, 39.22, 32.48, 1, 1, 37, 26, 28.25, 1, 1, 37, 8.33, 5.63, 1, 2, 36, 28.81, 6.64, 0.48313, 37, 1.49, 6.49, 0.51687, 1, 36, 7.61, 5.9, 1, 3, 34, 51.67, 11.07, 0.10767, 35, 18.26, 6.75, 0.559, 36, -12.35, 10.01, 0.33333, 2, 34, 42.19, 10.25, 0.31464, 35, 8.88, 8.32, 0.68536, 2, 34, 32.87, 9.45, 0.59184, 35, -0.35, 9.86, 0.40816, 2, 34, 23.73, 9.7, 0.83036, 35, -9.14, 12.39, 0.16964, 2, 33, 52.08, 9.88, 0.29921, 34, 13.68, 9.98, 0.70079, 2, 33, 32.19, 12.6, 0.84687, 34, -6.24, 12.55, 0.15313, 1, 6, 9.42, 3.39, 1, 2, 6, -5.05, -1.59, 0.472, 5, 29.16, -0.35, 0.528, 1, 5, 16.13, -11.36, 1, 1, 5, 7.46, -29.44, 1, 2, 6, -8.23, -31.57, 0.5193, 5, 19, -28.74, 0.4807, 1, 6, 2, -28.43, 1, 1, 6, 11.96, -25.37, 1, 1, 6, 21.44, -22.45, 1, 3, 52, 12.7, -14.55, 0.25482, 53, 2.14, -14.4, 0.32231, 6, 42.47, -19.82, 0.42287, 1, 53, 13.64, -8.89, 1, 1, 33, 3.55, 0.91, 1, 2, 52, 1.72, -0.73, 0.5001, 6, 40.07, -2.34, 0.4999, 1, 6, 25.66, -11.25, 1, 3, 52, 13.4, -4.65, 0.33234, 53, 0.86, -4.56, 0.48165, 6, 48.12, -11.66, 0.18601 ], "hull": 38, "edges": [ 0, 2, 8, 10, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 70, 72, 72, 74, 0, 74, 56, 76, 6, 8, 76, 6, 4, 6, 4, 78, 78, 80, 80, 70, 2, 82, 82, 72, 82, 78, 78, 76, 2, 4, 56, 80, 56, 66, 62, 64, 64, 66, 66, 68, 68, 70, 44, 46, 46, 48, 18, 20, 46, 18, 10, 12, 12, 14, 48, 50, 50, 52, 12, 50, 14, 16, 16, 18 ], @@ -572,6 +572,17 @@ } ], "animations": { + "idle": { + "bones": { + "hip": { + "translate": [ + {}, + { "time": 1, "y": -1.98 }, + { "time": 2 } + ] + } + } + }, "sneak": { "bones": { "hip": { diff --git a/spine-haxe/example/assets/stretchyman-pro.skel b/spine-haxe/example/assets/stretchyman-pro.skel new file mode 100644 index 000000000..815094d5e Binary files /dev/null and b/spine-haxe/example/assets/stretchyman-pro.skel differ diff --git a/spine-haxe/example/assets/stretchyman.atlas b/spine-haxe/example/assets/stretchyman.atlas new file mode 100644 index 000000000..424bb868d --- /dev/null +++ b/spine-haxe/example/assets/stretchyman.atlas @@ -0,0 +1,18 @@ +stretchyman.png + size: 1024, 256 + filter: Linear, Linear +back-arm + bounds: 679, 173, 72, 202 + rotate: 90 +back-leg + bounds: 2, 2, 100, 318 + rotate: 90 +body + bounds: 2, 104, 141, 452 + rotate: 90 +front-arm + bounds: 456, 100, 145, 221 + rotate: 90 +head + bounds: 322, 15, 87, 102 + rotate: 90 diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png b/spine-haxe/example/assets/stretchyman.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png rename to spine-haxe/example/assets/stretchyman.png diff --git a/spine-haxe/example/assets/tank-pro.json b/spine-haxe/example/assets/tank-pro.json new file mode 100644 index 000000000..223e04572 --- /dev/null +++ b/spine-haxe/example/assets/tank-pro.json @@ -0,0 +1,5020 @@ +{ +"skeleton": { + "hash": "ulJOWXMG9PE", + "spine": "4.1.17", + "x": -5852.65, + "y": -348.5, + "width": 7202.61, + "height": 1298.88, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "tank-root", "parent": "root", "y": 146.79 }, + { "name": "tank-treads", "parent": "tank-root", "y": 48.35 }, + { "name": "tank-body", "parent": "tank-treads", "y": 10 }, + { "name": "guntower", "parent": "tank-body", "x": -21.72, "y": 245.48 }, + { "name": "antenna-root", "parent": "guntower", "x": 164.61, "y": 202.53 }, + { "name": "antenna1", "parent": "antenna-root", "length": 40, "rotation": 90, "y": 40, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannon-connector", "parent": "guntower", "x": -235.05, "y": 96.07 }, + { "name": "cannon-target", "parent": "tank-root", "x": -2276.67, "y": 400.17, "color": "0096ffff" }, + { "name": "cannon", "parent": "cannon-connector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.98, + "rotation": 90, + "x": -123.73, + "y": 218.33, + "color": "15ff00ff" + }, + { "name": "machinegun-target", "parent": "tank-root", "x": -2272.76, "y": 607.77, "color": "0096ffff" }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.95, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.43, "y": -12.21 }, + { "name": "rock", "parent": "root", "x": -1925.2, "y": 33.17 }, + { + "name": "smoke-root", + "parent": "tank-root", + "x": -1200.38, + "y": 405.76, + "scaleX": -6.5, + "scaleY": 6.5, + "color": "ff4000ff" + }, + { "name": "smoke-glow", "parent": "smoke-root", "x": 62.92, "y": -0.71, "color": "ff4000ff" }, + { + "name": "smoke1", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke10", + "parent": "smoke-root", + "rotation": -103.52, + "x": 25.45, + "y": 2.48, + "scaleX": 3.9011, + "scaleY": 2.8523, + "color": "ff4000ff" + }, + { + "name": "smoke11", + "parent": "smoke-root", + "rotation": -103.52, + "x": 25.45, + "y": 2.48, + "scaleX": 3.9011, + "scaleY": 2.8523, + "color": "ff4000ff" + }, + { + "name": "smoke12", + "parent": "smoke-root", + "rotation": -103.52, + "x": 25.45, + "y": 2.48, + "scaleX": 3.9011, + "scaleY": 2.8523, + "color": "ff4000ff" + }, + { + "name": "smoke13", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke14", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke15", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke16", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke17", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke18", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke2", + "parent": "smoke-root", + "rotation": -84.14, + "x": 45.06, + "y": 29.7, + "scaleX": 3.3345, + "scaleY": 3.3345, + "color": "ff4000ff" + }, + { + "name": "smoke20", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke21", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke22", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke23", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke24", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke25", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke26", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke27", + "parent": "smoke-root", + "rotation": -179.99, + "x": 14.75, + "y": -1.55, + "scaleX": 1.6484, + "scaleY": 1.6484, + "color": "ff4000ff" + }, + { + "name": "smoke3", + "parent": "smoke-root", + "rotation": -87.91, + "x": 55.15, + "y": -17.5, + "scaleX": 3.0415, + "scaleY": 4.157, + "color": "ff4000ff" + }, + { + "name": "smoke4", + "parent": "smoke-root", + "rotation": -87.91, + "x": 69.25, + "y": 8.01, + "scaleX": 2.1808, + "scaleY": 2.9807, + "color": "ff4000ff" + }, + { + "name": "smoke5", + "parent": "smoke-root", + "rotation": -87.91, + "x": 80.63, + "y": 59.88, + "scaleX": 4.5119, + "scaleY": 2.9725, + "color": "ff4000ff" + }, + { + "name": "smoke6", + "parent": "smoke-root", + "rotation": -87.91, + "x": 96.19, + "y": 25.65, + "scaleX": 3.7912, + "scaleY": 3.0552, + "color": "ff4000ff" + }, + { + "name": "smoke7", + "parent": "smoke-root", + "rotation": 153.68, + "x": 85.65, + "y": -50.47, + "scaleX": 4.8523, + "scaleY": 3.6528, + "color": "ff4000ff" + }, + { + "name": "smoke8", + "parent": "smoke-root", + "rotation": 67.58, + "x": 47.85, + "y": -42.55, + "scaleX": 4.0006, + "scaleY": 3.4796, + "color": "ff4000ff" + }, + { + "name": "smoke9", + "parent": "smoke-root", + "rotation": 150.05, + "x": 104.02, + "y": -8.73, + "scaleX": 4.2074, + "scaleY": 3.0762, + "color": "ff4000ff" + }, + { "name": "tank-glow", "parent": "tank-root", "x": -247.72, "y": 404.37, "scaleX": 1.0582, "scaleY": 0.6785 }, + { + "name": "tread", + "parent": "tank-root", + "length": 82, + "rotation": 180, + "x": -22.9, + "y": 213.86, + "scaleX": 0.9933, + "color": "e64344ff" + }, + { "name": "wheel-mid-center", "parent": "tank-root", "y": -66.21 }, + { "name": "tread-collider1", "parent": "wheel-mid-center", "x": -329.58, "y": -85.44, "color": "ff00fbff" }, + { "name": "tread-collider2", "parent": "wheel-mid-center", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "tread-collider3", "parent": "wheel-mid-center", "y": -85.44, "color": "ff00fbff" }, + { "name": "tread-collider4", "parent": "wheel-mid-center", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "tread-collider5", "parent": "wheel-mid-center", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "tread-gravity1", "parent": "tank-root", "rotation": 180, "x": -175.35, "y": 149.31, "color": "ff00fbff" }, + { "name": "tread-gravity2", "parent": "tank-root", "rotation": 180, "x": 177.89, "y": 144.78, "color": "ff00fbff" }, + { + "name": "tread10", + "parent": "tread", + "length": 82, + "rotation": 48.85, + "x": 662.9, + "y": -120.35, + "color": "e64344ff" + }, + { + "name": "tread11", + "parent": "tread", + "length": 82, + "rotation": 97.99, + "x": 651.5, + "y": -39.69, + "color": "e64344ff" + }, + { + "name": "tread12", + "parent": "tread", + "length": 82, + "rotation": 113.79, + "x": 618.43, + "y": 34.83, + "color": "e64344ff" + }, + { + "name": "tread13", + "parent": "tread", + "length": 82, + "rotation": 122.96, + "x": 573.82, + "y": 103.18, + "color": "e64344ff" + }, + { + "name": "tread14", + "parent": "tread", + "length": 82, + "rotation": 142.01, + "x": 509.19, + "y": 153.3, + "color": "e64344ff" + }, + { + "name": "tread15", + "parent": "tread", + "length": 82, + "rotation": 157.84, + "x": 433.25, + "y": 184.02, + "color": "e64344ff" + }, + { + "name": "tread16", + "parent": "tread", + "length": 82, + "rotation": 157.37, + "x": 357.56, + "y": 215.37, + "color": "e64344ff" + }, + { + "name": "tread17", + "parent": "tread", + "length": 82, + "rotation": 157.29, + "x": 281.92, + "y": 246.8, + "color": "e64344ff" + }, + { + "name": "tread18", + "parent": "tread", + "length": 82, + "rotation": 157.19, + "x": 206.33, + "y": 278.38, + "color": "e64344ff" + }, + { + "name": "tread19", + "parent": "tread", + "length": 82, + "rotation": 157.14, + "x": 130.77, + "y": 310.02, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { + "name": "tread20", + "parent": "tread", + "length": 82, + "rotation": 157.34, + "x": 55.1, + "y": 341.41, + "color": "e64344ff" + }, + { + "name": "tread21", + "parent": "tread", + "length": 82, + "rotation": 158.11, + "x": -20.99, + "y": 371.77, + "color": "e64344ff" + }, + { + "name": "tread22", + "parent": "tread", + "length": 82, + "rotation": 157.99, + "x": -97.02, + "y": 402.28, + "color": "e64344ff" + }, + { + "name": "tread23", + "parent": "tread", + "length": 82, + "rotation": 157.59, + "x": -172.83, + "y": 433.33, + "color": "e64344ff" + }, + { + "name": "tread24", + "parent": "tread", + "length": 82, + "rotation": 156.86, + "x": -248.23, + "y": 465.34, + "color": "e64344ff" + }, + { + "name": "tread25", + "parent": "tread", + "length": 82, + "rotation": 177.94, + "x": -330.17, + "y": 468.27, + "color": "e64344ff" + }, + { + "name": "tread26", + "parent": "tread", + "length": 82, + "rotation": -169.55, + "x": -410.81, + "y": 453.5, + "color": "e64344ff" + }, + { + "name": "tread27", + "parent": "tread", + "length": 82, + "rotation": -163.86, + "x": -489.58, + "y": 430.86, + "color": "e64344ff" + }, + { + "name": "tread28", + "parent": "tread", + "length": 82, + "rotation": -139.13, + "x": -551.59, + "y": 377.57, + "color": "e64344ff" + }, + { + "name": "tread29", + "parent": "tread", + "length": 82, + "rotation": -89.04, + "x": -550.21, + "y": 296.14, + "color": "e64344ff" + }, + { + "name": "tread3", + "parent": "tread", + "length": 82, + "rotation": -8.91, + "x": 163.01, + "y": -12.61, + "color": "e64344ff" + }, + { + "name": "tread30", + "parent": "tread", + "length": 82, + "rotation": -38.99, + "x": -486.48, + "y": 244.89, + "color": "e64344ff" + }, + { + "name": "tread31", + "parent": "tread", + "length": 82, + "rotation": -20.04, + "x": -409.45, + "y": 216.98, + "color": "e64344ff" + }, + { + "name": "tread32", + "parent": "tread", + "length": 82, + "rotation": -46.24, + "x": -352.74, + "y": 158.15, + "color": "e64344ff" + }, + { + "name": "tread33", + "parent": "tread", + "length": 82, + "rotation": -27.95, + "x": -280.3, + "y": 119.98, + "color": "e64344ff" + }, + { + "name": "tread34", + "parent": "tread", + "length": 82, + "rotation": 10.46, + "x": -199.66, + "y": 134.77, + "color": "e64344ff" + }, + { + "name": "tread35", + "parent": "tread", + "length": 82, + "rotation": -17.9, + "x": -121.63, + "y": 109.73, + "color": "e64344ff" + }, + { + "name": "tread36", + "parent": "tread", + "length": 82, + "rotation": -36.82, + "x": -55.99, + "y": 60.92, + "color": "fbff00ff" + }, + { + "name": "tread4", + "parent": "tread", + "length": 82, + "rotation": -29.27, + "x": 234.55, + "y": -52.43, + "color": "e64344ff" + }, + { + "name": "tread5", + "parent": "tread", + "length": 82, + "rotation": -45.26, + "x": 292.26, + "y": -110.28, + "color": "e64344ff" + }, + { + "name": "tread6", + "parent": "tread", + "length": 82, + "rotation": -15.29, + "x": 371.36, + "y": -131.76, + "color": "e64344ff" + }, + { + "name": "tread7", + "parent": "tread", + "length": 82, + "rotation": -5.49, + "x": 452.98, + "y": -139.55, + "color": "e64344ff" + }, + { + "name": "tread8", + "parent": "tread", + "length": 82, + "rotation": -24.99, + "x": 527.31, + "y": -173.95, + "color": "e64344ff" + }, + { + "name": "tread9", + "parent": "tread", + "length": 82, + "rotation": -5.44, + "x": 608.94, + "y": -181.68, + "color": "e64344ff" + }, + { "name": "wheel-big-root1", "parent": "tank-treads", "x": -549.6, "y": 14.4, "color": "abe323ff" }, + { "name": "wheel-big-root2", "parent": "tank-treads", "x": 547.34, "y": 14.4 }, + { "name": "wheel-big1", "parent": "wheel-big-root1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-big2", "parent": "wheel-big-root2" }, + { "name": "wheel-mid-root1", "parent": "wheel-mid-center", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid-root2", "parent": "wheel-mid-center", "x": -246.95 }, + { "name": "wheel-mid-root3", "parent": "wheel-mid-center", "x": -82.73 }, + { "name": "wheel-mid-root4", "parent": "wheel-mid-center", "x": 80.89 }, + { "name": "wheel-mid-root5", "parent": "wheel-mid-center", "x": 244.51 }, + { "name": "wheel-mid-root6", "parent": "wheel-mid-center", "x": 408.74 }, + { "name": "wheel-mid1", "parent": "wheel-mid-root1", "color": "abe323ff" }, + { "name": "wheel-mid2", "parent": "wheel-mid-root2" }, + { "name": "wheel-mid3", "parent": "wheel-mid-root3" }, + { "name": "wheel-mid4", "parent": "wheel-mid-root4" }, + { "name": "wheel-mid5", "parent": "wheel-mid-root5" }, + { "name": "wheel-mid6", "parent": "wheel-mid-root6" }, + { "name": "wheel-small-root1", "parent": "tank-treads", "x": -337.39, "y": 109.43 }, + { "name": "wheel-small-root2", "parent": "tank-treads", "x": 0.09, "y": 109.43 }, + { "name": "wheel-small-root3", "parent": "tank-treads", "x": 334.69, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-small-root1", "color": "abe323ff" }, + { "name": "wheel-small2", "parent": "wheel-small-root2" }, + { "name": "wheel-small3", "parent": "wheel-small-root3" } +], +"slots": [ + { "name": "rock", "bone": "rock", "attachment": "rock" }, + { "name": "ground", "bone": "root", "attachment": "ground" }, + { "name": "ground2", "bone": "root", "attachment": "ground" }, + { "name": "ground3", "bone": "root", "attachment": "ground" }, + { "name": "ground4", "bone": "root", "attachment": "ground" }, + { "name": "ground5", "bone": "root", "attachment": "ground" }, + { "name": "ground6", "bone": "root", "attachment": "ground" }, + { "name": "ground7", "bone": "root", "attachment": "ground" }, + { "name": "tank-body-shadow", "bone": "tank-body", "color": "ffffffb9", "attachment": "tank-bottom-shadow" }, + { "name": "bottom", "bone": "tank-body", "attachment": "tank-bottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "wheel-small" }, + { "name": "wheel-mid-overlay", "bone": "wheel-mid-root1", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-mid-overlay2", "bone": "wheel-mid-root2", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-mid-overlay3", "bone": "wheel-mid-root3", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-mid-overlay4", "bone": "wheel-mid-root4", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-mid-overlay5", "bone": "wheel-mid-root5", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-mid-overlay6", "bone": "wheel-mid-root6", "color": "ffffffec", "attachment": "wheel-mid-overlay", "blend": "multiply" }, + { "name": "wheel-big-overlay1", "bone": "wheel-big-root1", "color": "ffffffe9", "attachment": "wheel-big-overlay", "blend": "multiply" }, + { "name": "wheel-big-overlay2", "bone": "wheel-big-root2", "color": "ffffffe9", "attachment": "wheel-big-overlay", "blend": "multiply" }, + { "name": "treads-path", "bone": "tank-root", "attachment": "treads-path" }, + { "name": "tread", "bone": "tread", "attachment": "tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "tread" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "machinegun-mount" }, + { "name": "tank-top", "bone": "tank-body", "attachment": "tank-top" }, + { "name": "guntower", "bone": "guntower", "attachment": "guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "cannon" }, + { "name": "cannon-connector", "bone": "cannon-connector", "attachment": "cannon-connector" }, + { "name": "antenna", "bone": "antenna-root", "attachment": "antenna" }, + { "name": "smoke-puff1-bg", "bone": "smoke1", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg13", "bone": "smoke13", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg14", "bone": "smoke14", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg15", "bone": "smoke15", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg16", "bone": "smoke16", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg17", "bone": "smoke17", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg18", "bone": "smoke18", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg20", "bone": "smoke20", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg21", "bone": "smoke21", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg22", "bone": "smoke22", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg23", "bone": "smoke23", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg24", "bone": "smoke24", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg25", "bone": "smoke25", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg26", "bone": "smoke26", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg27", "bone": "smoke27", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg2", "bone": "smoke2", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg5", "bone": "smoke5", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg6", "bone": "smoke6", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg7", "bone": "smoke7", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg10", "bone": "smoke10", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg11", "bone": "smoke11", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg12", "bone": "smoke12", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg8", "bone": "smoke8", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg9", "bone": "smoke9", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg4", "bone": "smoke4", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-bg3", "bone": "smoke3", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg", "bone": "smoke1", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg13", "bone": "smoke13", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg14", "bone": "smoke14", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg15", "bone": "smoke15", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg16", "bone": "smoke16", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg17", "bone": "smoke17", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg18", "bone": "smoke18", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg20", "bone": "smoke20", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg21", "bone": "smoke21", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg22", "bone": "smoke22", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg23", "bone": "smoke23", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg24", "bone": "smoke24", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg25", "bone": "smoke25", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg26", "bone": "smoke26", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg27", "bone": "smoke27", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg2", "bone": "smoke2", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg5", "bone": "smoke5", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg6", "bone": "smoke6", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg7", "bone": "smoke7", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg10", "bone": "smoke10", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg11", "bone": "smoke11", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg12", "bone": "smoke12", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg8", "bone": "smoke8", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg9", "bone": "smoke9", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg4", "bone": "smoke4", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-puff1-fg3", "bone": "smoke3", "color": "ecececff", "dark": "000000" }, + { "name": "smoke-glow", "bone": "smoke-glow", "blend": "additive" }, + { "name": "clipping", "bone": "tank-body", "attachment": "clipping" }, + { "name": "tank-glow", "bone": "tank-glow", "color": "fcdc6da7", "blend": "additive" } +], +"ik": [ + { + "name": "cannon-ik", + "bones": [ "cannon" ], + "target": "cannon-target" + }, + { + "name": "machinegun-ik", + "order": 1, + "bones": [ "machinegun" ], + "target": "machinegun-target", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big-transform", + "order": 8, + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "wheel-mid1-transform", + "order": 3, + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "wheel-mid2-transform", + "order": 4, + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "wheel-mid3-transform", + "order": 5, + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "wheel-small1-transform", + "order": 6, + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "wheel-small2-transform", + "order": 7, + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + } +], +"path": [ + { + "name": "treads-path", + "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-path", + "rotateMode": "chain" + } +], +"skins": [ + { + "name": "default", + "attachments": { + "antenna": { + "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, 10, 65.38, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 2, 10, 42.73, -3.38, 0.66667, 11, 0.73, -3.38, 0.33333, 2, 9, 64.17, -3.59, 0.33333, 10, 22.17, -3.59, 0.66667, 2, 9, 42.06, -3.82, 0.66667, 10, 0.06, -3.82, 0.33333, 2, 8, 62.52, -4.04, 0.33333, 9, 20.52, -4.04, 0.66667, 2, 8, 41.82, -4.26, 0.66667, 9, -0.18, -4.26, 0.33333, 2, 7, 63.65, -4.47, 0.33333, 8, 21.65, -4.47, 0.66667, 2, 7, 42.44, -4.69, 0.66667, 8, 0.44, -4.69, 0.33333, 2, 6, 62.9, -4.91, 0.33333, 7, 20.9, -4.91, 0.66667, 2, 6, 40.03, -5.15, 0.66667, 7, -1.97, -5.15, 0.33333, 2, 5, 5.38, 58.09, 0.4, 6, 18.09, -5.38, 0.6, 1, 5, 5.64, 33.21, 1, 1, 5, 5.92, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 11, -5.76, 1, 1, 5, -11, -5.76, 1, 1, 5, -11, 11.48, 1, 1, 5, -6.58, 11.48, 1, 1, 5, -6.58, 33.35, 1, 2, 5, -6.28, 58.34, 0.4, 6, 18.34, 6.28, 0.6, 2, 6, 40.27, 6.02, 0.66667, 7, -1.73, 6.02, 0.33333, 2, 6, 63.03, 5.75, 0.33333, 7, 21.03, 5.75, 0.66667, 2, 7, 42.22, 5.49, 0.66667, 8, 0.22, 5.49, 0.33333, 2, 7, 63.8, 5.23, 0.33333, 8, 21.8, 5.23, 0.66667, 2, 8, 42.07, 4.99, 0.66667, 9, 0.07, 4.99, 0.33333, 2, 8, 62.79, 4.75, 0.33333, 9, 20.79, 4.75, 0.66667, 2, 9, 42.22, 4.49, 0.66667, 10, 0.22, 4.49, 0.33333, 2, 9, 64.47, 4.22, 0.33333, 10, 22.47, 4.22, 0.66667, 2, 10, 42.75, 3.98, 0.66667, 11, 0.75, 3.98, 0.33333, 2, 10, 65.62, 3.71, 0.3125, 11, 23.62, 3.71, 0.6875, 1, 11, 47.24, 3.43, 1, 1, 11, 47.24, -2.9, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "tank-bottom": { "x": -16.67, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "cannon": { "x": 481.95, "y": -0.03, "rotation": 180, "width": 931, "height": 58 } + }, + "cannon-connector": { + "cannon-connector": { + "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": [ 7, 18, 6, 6, 18, 15, 7, 8, 18, 8, 9, 18, 18, 16, 15, 15, 16, 19, 9, 10, 18, 18, 10, 16, 16, 21, 19, 19, 21, 20, 10, 22, 16, 10, 11, 22, 16, 22, 21, 21, 17, 20, 21, 12, 13, 17, 13, 14, 17, 21, 13, 11, 12, 22, 21, 22, 12, 6, 15, 5, 5, 15, 4, 15, 19, 4, 4, 19, 3, 19, 20, 3, 3, 20, 2, 20, 17, 2, 2, 17, 1, 17, 14, 1, 14, 0, 1 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.14, 1, 1, 12, 25.82, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.05, 1, 2, 12, -28.87, -61.05, 0.33333, 14, 28.87, 61.03, 0.66667, 1, 14, 53.28, 61.02, 1, 1, 14, 76.09, 41.84, 1, 1, 14, 71.17, 21.63, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.38, -29.12, 1, 1, 14, 50.67, -56.14, 1, 2, 12, -28.43, 74.38, 0.41, 14, 28.43, -74.4, 0.59, 2, 12, -4.92, 72.95, 0.52, 14, 4.92, -72.95, 0.48, 2, 12, -21.87, -30.58, 0.49, 14, 21.87, 30.57, 0.51, 1, 14, 40.81, -2.6, 1, 2, 12, -4.26, 46.93, 0.49, 14, 4.26, -46.93, 0.51, 1, 14, 51.99, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.78, 0.51, 2, 12, 0.57, 19.25, 0.49, 14, -0.57, -19.25, 0.51, 1, 14, 23.72, -23.99, 1, 1, 14, 43.68, -26.76, 1 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "clipping": { + "clipping": { + "type": "clipping", + "end": "tank-glow", + "vertexCount": 32, + "vertices": [ 1, 3, 165.84, 455.67, 1, 1, 3, 114.21, 493.01, 1, 1, 3, -38.53, 492.23, 1, 1, 3, -193.4, 464.18, 1, 2, 3, -280.85, 415.48, 0.752, 14, 24.09, -73.93, 0.248, 1, 14, 70.34, -27.32, 1, 1, 14, 412.56, -22.02, 1, 1, 14, 412.82, -29.21, 1, 1, 14, 539.26, -29.34, 1, 1, 14, 539.52, -17.09, 1, 1, 14, 894.02, -16.8, 1, 1, 14, 902.99, -28.89, 1, 1, 14, 942.06, -28.58, 1, 1, 14, 948.14, -16.64, 1, 1, 14, 947.9, 14.29, 1, 1, 14, 539.3, 14.55, 1, 1, 14, 539, 29.22, 1, 1, 14, 412.51, 29.88, 1, 1, 14, 412.51, 21.73, 1, 1, 14, 74.24, 27.28, 1, 1, 3, -296.64, 281.2, 1, 1, 3, -316.06, 225.71, 1, 1, 3, -521.69, 190.74, 1, 1, 3, -610.03, 141.02, 1, 1, 3, -671.84, 87.13, 1, 1, 3, -652.23, -11.24, 1, 1, 3, -618.53, -71.36, 1, 1, 3, -478.77, -114.21, 1, 1, 3, -274.11, -116.26, 1, 1, 3, 1.38, -45.75, 1, 1, 3, 189.67, 148.78, 1, 1, 3, 215.75, 276.59, 1 ], + "color": "ce3a3aff" + } + }, + "ground": { + "ground": { "x": 837.96, "y": -172, "width": 1024, "height": 353 } + }, + "ground2": { + "ground": { "x": -179.89, "y": -172, "width": 1024, "height": 353 } + }, + "ground3": { + "ground": { "x": -1213.48, "y": -172, "scaleX": 1.035, "width": 1024, "height": 353 } + }, + "ground4": { + "ground": { "x": -2268.51, "y": -172, "scaleX": 1.04, "width": 1024, "height": 353 } + }, + "ground5": { + "ground": { "x": -3306.54, "y": -172, "width": 1024, "height": 353 } + }, + "ground6": { + "ground": { "x": -4322.71, "y": -172, "width": 1024, "height": 353 } + }, + "ground7": { + "ground": { "x": -5340.65, "y": -172, "width": 1024, "height": 353 } + }, + "guntower": { + "guntower": { "x": 77.22, "y": 122.59, "width": 730, "height": 289 } + }, + "machinegun": { + "machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "machinegun-mount": { "x": 47.42, "y": -1.54, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "rock": { "x": 25.24, "y": 27.35, "width": 580, "height": 127 } + }, + "smoke-glow": { + "smoke-glow": { + "type": "mesh", + "uvs": [ 1, 0.24906, 1, 0.51991, 1, 0.73165, 0.70776, 1, 0.49012, 1, 0.24373, 1, 0, 0.71158, 0, 0.50308, 0, 0.26235, 0.28107, 0, 0.47435, 0, 0.73345, 0, 0.48858, 0.51759 ], + "triangles": [ 12, 7, 8, 12, 10, 11, 12, 11, 0, 9, 10, 12, 12, 8, 9, 12, 0, 1, 6, 7, 12, 12, 1, 2, 5, 6, 12, 3, 4, 12, 5, 12, 4, 2, 3, 12 ], + "vertices": [ 49.99, 25.1, 50, -1.98, 50.01, -23.15, 20.79, -50, -0.98, -50, -25.62, -50.01, -50, -21.17, -50, -0.32, -50.01, 23.75, -21.9, 50, -2.58, 50, 23.33, 50.01, -1.14, -1.76 ], + "hull": 12, + "edges": [ 2, 24, 24, 14, 20, 24, 24, 8, 2, 0, 20, 22, 0, 22, 18, 20, 14, 16, 18, 16, 12, 14, 8, 10, 12, 10, 6, 8, 2, 4, 6, 4 ], + "width": 100, + "height": 100 + } + }, + "smoke-puff1-bg": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg2": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg3": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg4": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg5": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg6": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg7": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg8": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg9": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg10": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg11": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg12": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg13": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg14": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg15": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg16": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg17": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg18": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg20": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg21": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg22": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg23": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg24": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg25": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg26": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-bg27": { + "smoke-puff01-bg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + } + }, + "smoke-puff1-fg": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg2": { + "smoke-puff01-fg": { + "x": -1.01, + "y": -0.07, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.82, + "y": -0.39, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.82, + "y": -0.39, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.82, + "y": -0.39, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg3": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.02, + "y": -0.25, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1145, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.03, + "y": -0.43, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg4": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.63, + "y": -0.09, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.63, + "y": -0.09, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.63, + "y": -0.09, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg5": { + "smoke-puff01-fg": { + "x": -1.21, + "y": -0.08, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.89, + "y": -0.04, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.89, + "y": -0.04, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.89, + "y": -0.04, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg6": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.48, + "y": -0.07, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.48, + "y": -0.07, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.48, + "y": -0.07, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg7": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -0.7, + "y": -0.36, + "scaleX": 0.1216, + "scaleY": 0.1214, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -0.56, + "y": -0.15, + "scaleX": 0.1224, + "scaleY": 0.1224, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -0.56, + "y": -0.15, + "scaleX": 0.1224, + "scaleY": 0.1224, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg8": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -0.65, + "y": 0.01, + "scaleX": 0.1226, + "scaleY": 0.1226, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -0.75, + "y": -0.15, + "scaleX": 0.1211, + "scaleY": 0.1211, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -0.75, + "y": -0.15, + "scaleX": 0.1211, + "scaleY": 0.1211, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg9": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.99, + "y": -0.09, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.99, + "y": -0.09, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -0.95, + "y": -0.48, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg10": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.27, + "y": -0.37, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.27, + "y": -0.37, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.27, + "y": -0.37, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg11": { + "smoke-puff04-fg": { + "x": -1.27, + "y": -0.37, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg12": { + "smoke-puff04-fg": { + "x": -1.27, + "y": -0.37, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg13": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg14": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg15": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg16": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg17": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg18": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg20": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg21": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg22": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg23": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg24": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg25": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg26": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "smoke-puff1-fg27": { + "smoke-puff01-fg": { + "x": -0.5, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 175, + "height": 118 + }, + "smoke-puff02-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff03-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 184, + "height": 123 + }, + "smoke-puff04-fg": { + "x": -1.38, + "y": -0.12, + "scaleX": 0.1106, + "scaleY": 0.1106, + "rotation": 88.58, + "width": 155, + "height": 96 + } + }, + "tank-body-shadow": { + "tank-bottom-shadow": { "x": -11.44, "y": -42.89, "width": 1291, "height": 341 } + }, + "tank-glow": { + "smoke-glow": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 1, 0 ], + "triangles": [ 1, 2, 0 ], + "vertices": [ 469.64, -738.08, -1660.32, -738.08, 469.64, 1391.88 ], + "hull": 3, + "edges": [ 0, 2, 0, 4, 2, 4 ], + "width": 100, + "height": 100 + } + }, + "tank-top": { + "tank-top": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread-inside1": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread2": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread3": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread4": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread5": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread6": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread7": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread8": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread9": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread10": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread11": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread12": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread13": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread14": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread15": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread16": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread17": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread18": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread19": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread20": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread21": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread22": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread23": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread24": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread25": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread26": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread27": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread28": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread29": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread30": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread31": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread32": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread33": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread34": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread35": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "tread36": { + "tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 } + }, + "treads-path": { + "treads-path": { + "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, 2940.62 ], + "vertexCount": 66, + "vertices": [ 1, 110, 11.23, 41.87, 1, 1, 110, 0.79, 41.95, 1, 1, 110, -34.72, 42.24, 1, 1, 56, -104.22, 0.41, 1, 1, 56, 0.07, 0.55, 1, 1, 56, 68.8, 0.65, 1, 1, 109, 20.5, 43.47, 1, 1, 109, 1.14, 40.82, 1, 1, 109, -27.38, 36.85, 1, 1, 93, 147.07, 105.01, 1, 1, 93, 96.21, 96.63, 1, 1, 93, 43.87, 87.72, 1, 1, 93, 16.18, 103.35, 1, 1, 93, -33.67, 94.21, 1, 1, 93, -99.36, 81.25, 1, 1, 93, -122.05, -1.7, 1, 1, 93, -83.58, -47.93, 1, 1, 93, -33.53, -109.37, 1, 1, 97, -83.57, -66.1, 1, 1, 97, -2.17, -67.9, 1, 2, 97, 56.68, -41.49, 0.68, 51, -24.31, -41.49, 0.32, 1, 51, -26.59, 16.7, 1, 1, 51, -2.69, 16.7, 1, 1, 51, 13.52, 16.7, 1, 2, 98, -52.42, -46.51, 0.744, 51, 30.21, -46.52, 0.256, 1, 98, -0.32, -68.92, 1, 2, 98, 52.09, -44.73, 0.712, 52, -28.91, -44.73, 0.288, 1, 52, -22.81, 16.24, 1, 1, 52, -1.42, 16.24, 1, 1, 52, 20.48, 16.24, 1, 2, 99, -47.21, -47.46, 0.744, 52, 36.01, -47.46, 0.256, 1, 99, -0.29, -69.66, 1, 2, 99, 45.24, -47.26, 0.736, 53, -37.49, -47.26, 0.264, 1, 53, -23.76, 15.28, 1, 1, 53, -0.14, 15.28, 1, 1, 53, 24.45, 15.28, 1, 2, 100, -47.37, -48.7, 0.744, 53, 33.53, -48.7, 0.256, 1, 100, -0.5, -70.4, 1, 2, 100, 49.09, -48.34, 0.744, 54, -33.58, -48.34, 0.256, 1, 54, -20.89, 15.84, 1, 1, 54, -1.26, 15.84, 1, 1, 54, 15.78, 15.84, 1, 2, 101, -52.5, -48.21, 0.76, 54, 28.45, -48.22, 0.24, 1, 101, -2.5, -68.92, 1, 2, 101, 55.72, -47.82, 0.752, 55, -28.88, -47.83, 0.248, 1, 55, -21.64, 16.7, 1, 1, 55, -0.48, 16.7, 1, 1, 55, 20.74, 16.7, 1, 2, 102, -53.65, -48.9, 0.76, 55, 25.97, -48.9, 0.24, 1, 102, 2.28, -69.66, 1, 1, 102, 44.95, -69.74, 1, 1, 94, 76.03, -85.61, 1, 1, 94, 93.58, -42.24, 1, 1, 94, 118.67, 19.75, 1, 1, 94, 78.59, 76.62, 1, 1, 94, 37.27, 95.07, 1, 1, 94, 31.45, 97.67, 1, 1, 94, -15.16, 87.48, 1, 1, 94, -79.8, 92.52, 1, 1, 94, -119.06, 95.58, 1, 1, 111, 47.07, 42.29, 1, 1, 111, 0.25, 42.75, 1, 1, 111, -29.64, 43.29, 1, 1, 57, -86.65, 1.35, 1, 1, 57, 0.49, 0.26, 1, 1, 57, 92.42, -0.9, 1 ], + "color": "ff8819ff" + } + }, + "wheel-big": { + "wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "wheel-small": { "width": 71, "height": 71 } + } + } + } +], +"animations": { + "drive": { + "bones": { + "tank-root": { + "rotate": [ + { "time": 2 }, + { "time": 2.0667, "value": 1.99 }, + { "time": 2.5, "value": -15.63 }, + { + "time": 2.6667, + "value": -10.37, + "curve": [ 2.718, -10.37, 2.78, -8.34 ] + }, + { + "time": 2.8333, + "value": -6.13, + "curve": [ 2.909, -2.8, 2.974, 0.8 ] + }, + { "time": 3, "value": 1.84 }, + { "time": 3.0667, "value": 5.32 }, + { "time": 3.1667, "value": 10.99 }, + { "time": 3.2333, "value": 9.73 }, + { + "time": 3.4333, + "value": -4.52, + "curve": [ 3.474, -3.99, 3.608, 0.01 ] + }, + { "time": 3.6667, "value": 0.01 } + ], + "translate": [ + { + "curve": [ 1.019, 0, 1.608, -582.83, 1.019, 0, 1.608, 0 ] + }, + { "time": 2, "x": -1209.75 }, + { "time": 2.3333, "x": -1652.84, "y": 26.05 }, + { "time": 2.5, "x": -1877.69, "y": 71.5 }, + { "time": 2.6667, "x": -2053.37, "y": 100.44 }, + { "time": 2.8333, "x": -2183.86, "y": 97.42 }, + { "time": 3, "x": -2312.32, "y": 74.12 }, + { "time": 3.0667, "x": -2340.68, "y": 45.94 }, + { "time": 3.1333, "x": -2403.04, "y": 17.04 }, + { "time": 3.1667, "x": -2439.84, "y": 5.45 }, + { "time": 3.2333, "x": -2523.34, "y": -3.31 }, + { "time": 3.4333, "x": -2728.27, "y": -12.73 }, + { + "time": 3.5, + "x": -2795.65, + "y": -6.14, + "curve": [ 3.538, -2829.89, 3.583, -2878.59, 3.538, -4.93, 3.583, -3.21 ] + }, + { + "time": 3.6333, + "x": -2938.53, + "y": -1.09, + "curve": [ 3.89, -3218.84, 4.404, -3972.02, 3.89, -0.79, 4.404, 0 ] + }, + { "time": 4.8333, "x": -3972.02 }, + { "time": 5, "x": -3991.31 }, + { "time": 5.3667, "x": -3973.94 } + ] + }, + "tread-collider1": { + "translate": [ + { "time": 2 }, + { "time": 2.0667, "y": 9.99 }, + { "time": 2.1667, "y": 37.69 }, + { "time": 2.3333, "y": 53.45 }, + { "time": 2.5, "y": 30.97 }, + { "time": 2.6667, "y": -2.89 }, + { "time": 2.8333, "y": -0.71 }, + { "time": 3.0667, "y": -13.64 }, + { "time": 3.1667, "y": 59.3 }, + { "time": 3.2333, "y": 48.2 }, + { "time": 3.4333, "y": -11.27 }, + { "time": 3.6333, "y": 4.15 } + ] + }, + "tread-collider2": { + "translate": [ + { "time": 2 }, + { "time": 2.0667, "y": -2.83 }, + { "time": 2.1667, "y": -17.44 }, + { "time": 2.3333, "y": 46.07 }, + { "time": 2.5, "y": 19.45 }, + { "time": 2.6667, "y": 13.46 }, + { "time": 2.8333, "y": -1.92, "curve": "stepped" }, + { "time": 2.9667, "y": -1.92 }, + { "time": 3, "y": -13.17 }, + { "time": 3.0667, "y": -23.25 }, + { "time": 3.1667, "y": 28.13 }, + { "time": 3.2333, "y": 25.63 }, + { "time": 3.4333, "y": -1.52 }, + { "time": 3.6333, "y": 1.15 } + ] + }, + "tread-collider3": { + "translate": [ + { "time": 2 }, + { "time": 2.0667, "y": -7.76 }, + { "time": 2.1667, "y": -16.61 }, + { "time": 2.5, "y": 29.05 }, + { "time": 2.6667, "y": 30.12 }, + { "time": 2.8333, "y": 5.3 }, + { "time": 3, "y": -0.38 }, + { "time": 3.1667, "y": 2.6 }, + { "time": 3.4333, "y": 15.41 }, + { "time": 3.6333, "y": 1.44 } + ] + }, + "tread-collider4": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": -6.72 }, + { "time": 2.3333, "y": -0.92 }, + { "time": 2.5, "y": 18.37 }, + { "time": 2.6667, "y": 38.77 }, + { "time": 2.8333, "y": 30.6 }, + { "time": 3.1667, "y": 12.61 }, + { "time": 3.2333, "y": -16 }, + { "time": 3.4333, "y": 25.62 }, + { "time": 3.6333, "y": -0.68 } + ] + }, + "tread-collider5": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": 3.35 }, + { "time": 2.3333, "y": 22.17 }, + { "time": 2.6667, "y": 13.35 }, + { "time": 2.8333, "y": 39 }, + { "time": 3, "y": 39.88 }, + { "time": 3.1667, "y": 26.57 }, + { "time": 3.2333, "y": -10.15 }, + { "time": 3.4333, "y": 35.98 }, + { "time": 3.6333, "y": -1.36 } + ] + }, + "wheel-mid-root6": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": 5.61 }, + { "time": 2.3333, "y": 27.21 }, + { "time": 2.5, "y": 30.28 }, + { "time": 2.6667, "y": -2.81 }, + { "time": 2.8333, "y": 19.59 }, + { "time": 3, "y": 29.11 }, + { "time": 3.1667, "y": 32.55 }, + { "time": 3.2333, "y": 3.55 }, + { "time": 3.4333, "y": 40.54 }, + { "time": 3.6333 } + ] + }, + "wheel-mid-root5": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": -7.46 }, + { "time": 2.3333, "y": 9.53 }, + { "time": 2.6667, "y": 36.78 }, + { "time": 2.8333, "y": 46.11 }, + { "time": 3.1667, "y": 7.55 }, + { "time": 3.2333, "y": -16.28 }, + { "time": 3.4333, "y": 26.21 }, + { "time": 3.6333 } + ] + }, + "wheel-mid-root4": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": -13.98 }, + { "time": 2.3333, "y": -8.26 }, + { "time": 2.5, "y": 24.27 }, + { "time": 2.6667, "y": 34.42 }, + { "time": 2.8333, "y": 8.88 }, + { "time": 3.1667, "y": 10.32 }, + { "time": 3.2333, "y": -7.63 }, + { "time": 3.4333, "y": 19.69 }, + { "time": 3.6333 } + ] + }, + "wheel-mid-root3": { + "translate": [ + { "time": 2 }, + { "time": 2.1667, "y": -21.14 }, + { "time": 2.3333, "y": 22.83 }, + { "time": 2.5, "y": 23.34 }, + { "time": 2.6667, "y": 18.07 }, + { "time": 2.8333, "y": 1.2 }, + { "time": 3.0667, "y": -13.36 }, + { "time": 3.1667, "y": 15.48 }, + { "time": 3.2333, "y": 13.34 }, + { "time": 3.4333, "y": 6.4 }, + { "time": 3.6333 } + ] + }, + "wheel-mid-root2": { + "translate": [ + { "time": 2 }, + { "time": 2.0667, "y": -4.39 }, + { "time": 2.1667, "y": 3.13 }, + { "time": 2.3333, "y": 53.56 }, + { "time": 2.5, "y": 16.65 }, + { "time": 2.6667, "y": 8.39 }, + { "time": 3.0667, "y": -19.16 }, + { "time": 3.1667, "y": 43.25 }, + { "time": 3.2333, "y": 39.04 }, + { "time": 3.4333, "y": -8.61 }, + { "time": 3.6333 } + ] + }, + "wheel-mid-root1": { + "translate": [ + { "time": 2 }, + { "time": 2.0333, "y": 22.64 }, + { "time": 2.0667, "y": 53.65 }, + { "time": 2.1667, "y": 71.18 }, + { "time": 2.5, "y": 46.83 }, + { "time": 2.6667, "y": 8.38 }, + { "time": 3.0667, "y": -10.03 }, + { "time": 3.1667, "y": 72.71 }, + { "time": 3.2333, "y": 64.74 }, + { "time": 3.4333, "y": -17.65 }, + { "time": 3.6333 } + ] + }, + "tank-body": { + "rotate": [ + { + "curve": [ 0.208, 0, 0.625, -4.39 ] + }, + { "time": 0.8333, "value": -4.39 }, + { "time": 2 }, + { "time": 2.1667, "value": -1.34 }, + { "time": 2.3333, "value": -6.23 }, + { "time": 2.5, "value": -5.45 }, + { "time": 2.9667, "value": -5.07 }, + { "time": 3.0667, "value": -2.39 }, + { "time": 3.1667, "value": -0.98 }, + { "time": 3.2333, "value": -1.1 }, + { + "time": 3.4, + "value": 0.43, + "curve": [ 3.433, 0.43, 3.483, -1.56 ] + }, + { + "time": 3.5333, + "value": -3.55, + "curve": [ 3.675, -3.47, 3.754, 1.49 ] + }, + { "time": 3.8333, "value": 1.93 }, + { "time": 4, "value": 0.48 }, + { + "time": 4.3333, + "curve": [ 4.476, 0.59, 4.833, 3.8 ] + }, + { + "time": 5, + "value": 3.8, + "curve": [ 5.286, 3.8, 5.35, -2.17 ] + }, + { "time": 5.4667, "value": -2.17 }, + { "time": 5.6, "value": -0.61 } + ] + }, + "wheel-big-root1": { + "translate": [ + { "time": 2 }, + { "time": 2.0667, "y": 20.07 }, + { "time": 2.3333, "y": 67.24 }, + { "time": 2.6667, "y": 21.04 }, + { "time": 3, "y": 10.28 }, + { "time": 3.1, "y": 11.28 }, + { "time": 3.1667, "y": 29.43 }, + { "time": 3.2333, "y": 35.31 }, + { "time": 3.4333, "y": 18.38 }, + { "time": 3.5 } + ] + }, + "tank-treads": { + "rotate": [ + {}, + { "time": 0.8333, "value": -2.4 }, + { "time": 2 }, + { "time": 2.0667, "value": 1.72 }, + { "time": 2.4333, "value": -0.37 }, + { "time": 2.8 }, + { "time": 3, "value": -1.41 }, + { "time": 3.1667, "value": 0.54 }, + { + "time": 3.2667, + "value": 2.22, + "curve": [ 3.348, 2.22, 3.392, -1.31 ] + }, + { "time": 3.4333, "value": -1.31 }, + { "time": 3.7333, "value": -1.14 }, + { + "time": 4.3333, + "curve": [ 4.476, 0.35, 4.833, 2.24 ] + }, + { + "time": 5, + "value": 2.24, + "curve": [ 5.286, 2.24, 5.35, 0 ] + }, + { "time": 5.4667 } + ] + }, + "cannon-target": { + "translate": [ + {}, + { "time": 0.8333, "y": 121.95 }, + { "time": 2, "y": 45.73 } + ] + }, + "wheel-big-root2": { + "translate": [ + { "time": 3.4333, "y": 13.01 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "curve": [ 0.51, 0, 0.804, 57.81 ] + }, + { "time": 1, "value": 120 }, + { "time": 1.2667, "value": 240 }, + { "time": 1.5333, "value": 360 }, + { "time": 1.7667, "value": 480 }, + { "time": 2.0333, "value": 600 }, + { "time": 2.2, "value": 720 }, + { "time": 2.4, "value": 840 }, + { "time": 2.5667, "value": 960 }, + { "time": 2.7333, "value": 1080 }, + { "time": 2.9333, "value": 1200 }, + { "time": 3.1333, "value": 1320 }, + { "time": 3.3333, "value": 1440 }, + { "time": 3.5, "value": 1560 }, + { "time": 3.6667, "value": 1680 }, + { "time": 3.8667, "value": 1800 }, + { "time": 4.0667, "value": 1920 }, + { "time": 4.2667, "value": 2040 }, + { + "time": 4.5, + "value": 2160, + "curve": [ 4.563, 2194.34, 4.695, 2225.3 ] + }, + { "time": 4.8333, "value": 2247.67 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "curve": [ 0.459, 0, 0.724, 57.81 ] + }, + { "time": 0.9, "value": 120 }, + { "time": 1.1667, "value": 240 }, + { "time": 1.4333, "value": 360 }, + { "time": 1.6333, "value": 480 }, + { "time": 1.8333, "value": 600 }, + { "time": 2, "value": 720 }, + { "time": 2.1333, "value": 840 }, + { "time": 2.2667, "value": 960 }, + { "time": 2.4, "value": 1080 }, + { "time": 2.5333, "value": 1200 }, + { "time": 2.6667, "value": 1320 }, + { "time": 2.8333, "value": 1440 }, + { "time": 2.9667, "value": 1560 }, + { "time": 3.1, "value": 1680 }, + { "time": 3.2333, "value": 1800 }, + { "time": 3.3667, "value": 1920 }, + { "time": 3.5, "value": 2040 }, + { "time": 3.6333, "value": 2160 }, + { "time": 3.7667, "value": 2280 }, + { "time": 3.9, "value": 2400 }, + { "time": 4.0333, "value": 2520 }, + { "time": 4.1667, "value": 2640 }, + { "time": 4.3, "value": 2760 }, + { + "time": 4.4667, + "value": 2880, + "curve": [ 4.538, 2949.2, 4.742, 3000 ] + }, + { "time": 4.8333, "value": 3000 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "curve": [ 0.34, 0, 0.536, 57.81 ] + }, + { "time": 0.6667, "value": 120 }, + { "time": 0.8667, "value": 240 }, + { "time": 1.0333, "value": 360 }, + { "time": 1.1667, "value": 480 }, + { "time": 1.3, "value": 600 }, + { "time": 1.4333, "value": 720 }, + { "time": 1.5333, "value": 840 }, + { "time": 1.6333, "value": 960 }, + { "time": 1.7333, "value": 1080 }, + { "time": 1.8333, "value": 1200 }, + { "time": 1.9333, "value": 1320 }, + { "time": 2.0333, "value": 1440 }, + { "time": 2.1333, "value": 1560 }, + { "time": 2.2333, "value": 1680 }, + { "time": 2.3333, "value": 1800 }, + { "time": 2.4333, "value": 1920 }, + { "time": 2.5333, "value": 2040 }, + { "time": 2.6333, "value": 2160 }, + { "time": 2.7333, "value": 2280 }, + { "time": 2.8333, "value": 2400 }, + { "time": 2.9333, "value": 2520 }, + { "time": 3.0333, "value": 2640 }, + { "time": 3.1333, "value": 2760 }, + { "time": 3.2333, "value": 2880 }, + { "time": 3.3333, "value": 3000 }, + { "time": 3.4333, "value": 3120 }, + { "time": 3.5333, "value": 3240 }, + { "time": 3.6333, "value": 3360 }, + { "time": 3.7333, "value": 3480 }, + { "time": 3.8333, "value": 3600 }, + { "time": 3.9333, "value": 3720 }, + { "time": 4.0333, "value": 3840 }, + { "time": 4.1333, "value": 3960 }, + { "time": 4.2333, "value": 4080 }, + { "time": 4.3333, "value": 4200 }, + { "time": 4.4333, "value": 4320 }, + { "time": 4.6667, "value": 4440 }, + { "time": 4.9, "value": 4490 } + ] + }, + "wheel-small-root1": { + "translate": [ + { "time": 2 }, + { "time": 2.1333, "y": 12.37 }, + { "time": 2.4667, "y": 32.37 }, + { "time": 2.7333, "y": -5.27 }, + { "time": 2.9667, "y": 14.31 }, + { "time": 3.1667, "y": 19.54 }, + { "time": 3.4667, "y": 7.5 }, + { "time": 4.3667, "y": -2.4 } + ] + }, + "wheel-small-root2": { + "translate": [ + { "time": 2 }, + { "time": 2.9, "y": 5.26 }, + { "time": 3.1667, "y": 10.67 }, + { "time": 3.4667, "y": -4.71 } + ] + }, + "wheel-small-root3": { + "translate": [ + { "time": 2 }, + { "time": 2.4667, "y": -10.56 }, + { "time": 2.9, "y": -16.08 }, + { "time": 3.1667, "y": 10.12 }, + { "time": 3.4667, "y": 4.1 }, + { "time": 4.3667, "y": -0.03 } + ] + }, + "antenna1": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "antenna2": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "antenna3": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "antenna4": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "antenna5": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "antenna6": { + "rotate": [ + {}, + { + "time": 0.3333, + "value": 1.05, + "curve": [ 0.731, 1.05, 1.008, -4.55 ] + }, + { + "time": 1.2333, + "value": -4.55, + "curve": [ 1.35, -4.55, 1.583, 0.53 ] + }, + { "time": 1.7, "value": 0.53 }, + { "time": 2, "value": -2.13 }, + { "time": 2.2, "value": 4.71 }, + { "time": 2.3667, "value": -7.26 }, + { "time": 2.5667, "value": 2.26 }, + { "time": 2.7333, "value": -3.39 }, + { "time": 3.0667, "value": -5.53 }, + { "time": 3.2333, "value": 7.78 }, + { "time": 3.4667, "value": -5.99 }, + { "time": 3.7, "value": 3.11 }, + { "time": 3.9, "value": -3.05 }, + { "time": 4.1, "value": 0.31 }, + { "time": 4.3, "value": -3.06 }, + { "time": 4.5333, "value": 0.36 }, + { + "time": 4.8667, + "value": 4.94, + "curve": [ 4.925, 4.94, 5.042, -2.38 ] + }, + { "time": 5.1, "value": -2.38 }, + { "time": 5.2667, "value": 3.65 }, + { "time": 5.4, "value": -3.04 }, + { "time": 5.5, "value": 1.49 }, + { "time": 5.6, "value": -1.86 }, + { "time": 5.7, "value": 0.42 } + ] + }, + "machinegun": { + "rotate": [ + { "value": 8.07, "curve": "stepped" }, + { "time": 2.0667, "value": 8.07 }, + { "time": 2.1667, "value": 3.11 }, + { "time": 2.5667, "value": -10.99, "curve": "stepped" }, + { "time": 3.1333, "value": -10.99 }, + { "time": 3.2667, "value": 18.18 }, + { "time": 3.4333, "value": 2.75, "curve": "stepped" }, + { "time": 4.7, "value": 2.75 }, + { "time": 4.9, "value": 8.07 } + ] + } + }, + "path": { + "treads-path": { + "position": [ + { + "curve": [ 0.984, 0, 1.588, 0.1788 ] + }, + { + "time": 2, + "value": 0.385, + "curve": [ 2.023, 0.3916, 2.045, 0.3983 ] + }, + { "time": 2.0667, "value": 0.405 }, + { "time": 2.3333, "value": 0.555 }, + { "time": 2.5, "value": 0.605 }, + { "time": 2.6667, "value": 0.685 }, + { "time": 2.8333, "value": 0.745 }, + { "time": 3, "value": 0.785 }, + { "time": 3.0667, "value": 0.8 }, + { "time": 3.1333, "value": 0.825 }, + { "time": 3.1667, "value": 0.835 }, + { "time": 3.2333, "value": 0.87 }, + { + "time": 3.5, + "value": 0.98, + "curve": [ 3.726, 1.0474, 4.335, 1.4 ] + }, + { "time": 4.8333, "value": 1.4 } + ] + } + } + }, + "shoot": { + "slots": { + "rock": { + "attachment": [ + {} + ] + }, + "smoke-glow": { + "rgba": [ + { "time": 0.1333, "color": "ffffffff" }, + { "time": 0.1667, "color": "ffbc8af4" }, + { "time": 0.2, "color": "fc8e8e90" }, + { "time": 0.2667, "color": "fa3e3e1e" } + ], + "attachment": [ + { "time": 0.0667, "name": "smoke-glow" }, + { "time": 0.3 } + ] + }, + "smoke-puff1-bg": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 1.0333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.0667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg2": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg3": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg4": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.9, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg5": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.9, "light": "ffd50c00", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg6": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg7": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg8": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4333, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.9333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg9": { + "rgba2": [ + { "time": 0.1333, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.5333, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg10": { + "rgba2": [ + { "time": 0.1333, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.5333, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg11": { + "rgba2": [ + { "time": 0.1333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7667, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg12": { + "rgba2": [ + { "time": 0.3333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8667, "light": "ffd50c00", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg13": { + "rgba2": [ + { "time": 0.3667, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 1, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg14": { + "rgba2": [ + { "time": 0.4333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 1.0667, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.4333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg15": { + "rgba2": [ + { "time": 0.4, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.4, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg16": { + "rgba2": [ + { "time": 0.4, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.4, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg17": { + "rgba2": [ + { "time": 0.2333, "light": "ffd50cff", "dark": "534035" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.6667, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.2333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg18": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.5, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.2333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg20": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.8, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3333, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg21": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7, "light": "ffd50c00", "dark": "604b3f" } + ] + }, + "smoke-puff1-bg22": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7, "light": "ffd50c00", "dark": "604b3f" } + ] + }, + "smoke-puff1-bg23": { + "rgba2": [ + { "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" }, + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.5, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7667, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg24": { + "rgba2": [ + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg25": { + "rgba2": [ + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 1, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg26": { + "rgba2": [ + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.6, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.9333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-bg27": { + "rgba2": [ + { "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" }, + { "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" }, + { "time": 0.7333, "light": "ffd50c00", "dark": "604b3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff01-bg" } + ] + }, + "smoke-puff1-fg": { + "rgba2": [ + { "time": 0.0667, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1333, "light": "fde252ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 1.0333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.0667, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg2": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg3": { + "rgba2": [ + { "time": 0.1333, "light": "ffe457ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg4": { + "rgba2": [ + { "time": 0.1333, "light": "fae781ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.9, "light": "ac8c7500", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg5": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.9, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg6": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg7": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ac8c7500", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg8": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4333, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.9333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg9": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.5333, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg10": { + "rgba2": [ + { "time": 0.1333, "light": "fce35dff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.5333, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ac8c7500", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.1333, "name": "smoke-puff01-fg" }, + { "time": 0.1667, "name": "smoke-puff02-fg" }, + { "time": 0.2, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg11": { + "rgba2": [ + { "time": 0.3333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg12": { + "rgba2": [ + { "time": 0.3667, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8667, "light": "ac8c7500", "dark": "604a3f" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg13": { + "rgba2": [ + { "time": 0.3667, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 1, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg14": { + "rgba2": [ + { "time": 0.4333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 1.0667, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.4333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg15": { + "rgba2": [ + { "time": 0.4, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.4, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg16": { + "rgba2": [ + { "time": 0.4, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.4, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg17": { + "rgba2": [ + { "time": 0.2333, "light": "e3c05eff", "dark": "ab7e59" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.6667, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.2333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg18": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.5, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.2333, "name": "smoke-puff03-fg" }, + { "time": 0.2667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg20": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.8, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3333, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg21": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7, "light": "ab764c00", "dark": "ac8d75" } + ] + }, + "smoke-puff1-fg22": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7, "light": "ab764c00", "dark": "ac8d75" } + ] + }, + "smoke-puff1-fg23": { + "rgba2": [ + { "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" }, + { "time": 0.1667, "light": "ffe568ff", "dark": "e26425" }, + { "time": 0.2, "light": "ffe568ff", "dark": "ab774c" }, + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.5, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg24": { + "rgba2": [ + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg25": { + "rgba2": [ + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 1, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg26": { + "rgba2": [ + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.6, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.9333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff04-fg" } + ] + }, + "smoke-puff1-fg27": { + "rgba2": [ + { "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" }, + { "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" }, + { "time": 0.7333, "light": "ab764c00", "dark": "ac8d75" } + ], + "attachment": [ + { "time": 0.3667, "name": "smoke-puff04-fg" } + ] + }, + "tank-glow": { + "rgba": [ + { "time": 0.0667, "color": "fc994d84" }, + { + "time": 0.1333, + "color": "f5b16bc8", + "curve": [ 0.221, 0.96, 0.252, 0.98, 0.221, 0.69, 0.252, 0.62, 0.221, 0.42, 0.252, 0.33, 0.221, 0.78, 0.252, 0.32 ] + }, + { "time": 0.2667, "color": "fc994c30" } + ], + "attachment": [ + { "time": 0.0667, "name": "smoke-glow" }, + { "time": 0.2667 } + ] + } + }, + "bones": { + "cannon": { + "translate": [ + { "time": 0.0667 }, + { "time": 0.1667, "x": 34.77, "y": 0.9 }, + { "time": 0.2667, "x": 1.3 } + ] + }, + "tank-body": { + "rotate": [ + { "time": 0.0667 }, + { + "time": 0.1667, + "value": -4.29, + "curve": [ 0.2, -4.29, 0.267, 2.37 ] + }, + { + "time": 0.3, + "value": 2.37, + "curve": [ 0.333, 2.37, 0.4, 0 ] + }, + { "time": 0.4333 } + ], + "translate": [ + { "time": 0.0667 }, + { + "time": 0.1667, + "x": 31.04, + "y": 1.67, + "curve": [ 0.2, 31.04, 0.267, -12.05, 0.2, 1.67, 0.267, -0.23 ] + }, + { "time": 0.3, "x": -12.05, "y": -0.23 }, + { "time": 0.3667 } + ] + }, + "tank-treads": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.1667, "value": -3.08 }, + { "time": 0.3, "value": -0.42 } + ] + }, + "smoke1": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.1333, "value": 2.88 }, + { "time": 0.1667, "value": 2.34 }, + { "time": 0.2, "value": 124.36 }, + { "time": 0.2667, "value": 142.26 }, + { "time": 0.3333, "value": 86.78 }, + { "time": 0.4667, "value": 128.79 }, + { "time": 0.6333, "value": 146.22 }, + { "time": 1.0333, "value": 210.7 } + ], + "translate": [ + { "time": 0.0667, "x": -9.69, "y": 1.05 }, + { "time": 0.1333, "x": 7.53, "y": 1.21 }, + { "time": 0.1667, "x": 3.26, "y": 4.07 }, + { "time": 0.2, "x": 29.64, "y": -17.46 }, + { "time": 0.2667, "x": 86.97, "y": 17.83 }, + { "time": 0.3333, "x": 193.74, "y": -38.98 }, + { "time": 0.4, "x": 341.67, "y": -39.52 }, + { "time": 0.6333, "x": 393.24, "y": -4.01 }, + { "time": 1.0333, "x": 410.76, "y": 6.35 } + ], + "scale": [ + { "time": 0.0667 }, + { "time": 0.1333, "x": 3.171, "y": 0.756 }, + { "time": 0.1667, "x": 3.488, "y": 1.279 }, + { "time": 0.2, "x": 5.151, "y": 2.369 }, + { "time": 0.2667, "x": 4.735, "y": 3.622 }, + { "time": 0.3, "x": 4.735, "y": 4.019 }, + { "time": 0.3333, "x": 4.613, "y": 3.339 }, + { "time": 0.3667, "x": 4.918, "y": 3.561 }, + { "time": 0.4, "x": 4.6, "y": 4.263 }, + { "time": 0.6333, "x": 4.449, "y": 2.62 }, + { "time": 1.0333, "x": 3.09, "y": 1.447 } + ] + }, + "smoke2": { + "rotate": [ + { "time": 0.1667, "value": 31.55 }, + { "time": 0.3, "value": -22.63 }, + { "time": 0.4667, "value": 142.89 }, + { "time": 0.6, "value": 253.78 }, + { "time": 0.8333, "value": 299.28 } + ], + "translate": [ + { "time": 0.1667, "x": 17.26, "y": 4.86 }, + { "time": 0.2333, "x": 141.22, "y": 27.27 }, + { "time": 0.3, "x": 178.86, "y": 56.63 }, + { "time": 0.3667, "x": 200.46, "y": 71.05 }, + { "time": 0.4333, "x": 213.12, "y": 78.39 }, + { "time": 0.6333, "x": 221.44, "y": 73.1 }, + { "time": 0.8333, "x": 223.32, "y": 73.74 } + ], + "scale": [ + { "time": 0.1667, "x": 1.34, "y": 1.34 }, + { "time": 0.2333, "x": 2.81, "y": 1.317 }, + { "time": 0.3, "x": 2.932, "y": 1.374 }, + { "time": 0.4667, "x": 1.247, "y": 0.639 }, + { "time": 0.8333, "x": 0.778, "y": 0.515 } + ] + }, + "smoke3": { + "rotate": [ + { "time": 0.1667, "value": -5.54 }, + { "time": 0.2333, "value": 0.2 }, + { "time": 0.3333, "value": 20.27 }, + { "time": 0.4, "value": 31.36 }, + { "time": 0.4667, "value": 68.52 }, + { "time": 0.5333, "value": 99.74 }, + { "time": 0.6333, "value": 145.8 }, + { "time": 0.8333, "value": 193.28 } + ], + "translate": [ + { "time": 0.1333, "x": 1.17, "y": 8.53 }, + { "time": 0.1667, "x": 37.53, "y": 4.84 }, + { "time": 0.2, "x": 67.99, "y": 9.85 }, + { "time": 0.2333, "x": 134.14, "y": -13.5 }, + { "time": 0.2667, "x": 181.31, "y": -19.93 }, + { "time": 0.3, "x": 238.28, "y": -8.82 }, + { "time": 0.3333, "x": 268.51, "y": -25.75 }, + { "time": 0.3667, "x": 359.06, "y": -28.49 }, + { "time": 0.4, "x": 432.96, "y": -24.11 }, + { "time": 0.4667, "x": 452.16, "y": -16.73 }, + { "time": 0.6333, "x": 456.28, "y": -0.41 }, + { "time": 0.8333, "x": 454.14, "y": 16.41 } + ], + "scale": [ + { "time": 0.1333, "x": 2.258, "y": 1.366 }, + { "time": 0.1667, "x": 2.656, "y": 1.47 }, + { "time": 0.2, "x": 3.202, "y": 1.772 }, + { "time": 0.2333, "x": 3.202, "y": 1.93 }, + { "time": 0.2667, "x": 3.124, "y": 1.896 }, + { "time": 0.3, "x": 3.593, "y": 1.896 }, + { "time": 0.3333, "x": 2.363, "y": 1.247 }, + { "time": 0.3667, "x": 1.845, "y": 0.973 }, + { "time": 0.4, "x": 1.754, "y": 0.926 }, + { "time": 0.4333, "x": 1.448, "y": 0.695 }, + { "time": 0.4667, "x": 1.441, "y": 0.688 }, + { "time": 0.5333, "x": 0.865, "y": 0.456 }, + { "time": 0.7, "x": 0.86, "y": 0.454 }, + { "time": 0.8333, "x": 0.211, "y": 0.111 } + ] + }, + "smoke4": { + "rotate": [ + { "time": 0.1667, "value": -20.35 }, + { "time": 0.2333, "value": 18.5 }, + { "time": 0.3, "value": 57.77 }, + { "time": 0.4, "value": 105.85 }, + { "time": 0.6, "value": 161.28 }, + { "time": 0.9, "value": 208.43 } + ], + "translate": [ + { "time": 0.1667, "x": 35.95, "y": 25.54 }, + { "time": 0.2333, "x": 34.17, "y": 1.87 }, + { "time": 0.3, "x": 136.7, "y": 21.5 }, + { "time": 0.4, "x": 138.61, "y": 34.8 }, + { "time": 0.6, "x": 160.38, "y": 37.13 }, + { "time": 0.9, "x": 196.41, "y": 30.36 } + ], + "scale": [ + { "time": 0.1667, "x": 2.751, "y": 1.754 }, + { "time": 0.2333, "x": 3.486, "y": 2.224 }, + { "time": 0.2667, "x": 3.486, "y": 2.586 }, + { "time": 0.3, "x": 3.847, "y": 2.109 }, + { "time": 0.4, "x": 1.96, "y": 1.074 }, + { "time": 0.9, "x": 0.825, "y": 0.452 } + ] + }, + "smoke5": { + "rotate": [ + { "time": 0.2, "value": 23.09 }, + { "time": 0.2667, "value": 12.24 }, + { "time": 0.3333, "value": 36.92 }, + { "time": 0.4333, "value": -37.33 }, + { "time": 0.5333, "value": -0.66 }, + { "time": 0.9, "value": 64.02 } + ], + "translate": [ + { "time": 0.1333 }, + { "time": 0.2333, "x": 123.76, "y": 19.44 }, + { "time": 0.3, "x": 239.08, "y": -49.72 }, + { "time": 0.3667, "x": 280.23, "y": -51.46 }, + { "time": 0.7, "x": 340.62, "y": -20.09 }, + { "time": 0.9, "x": 349.18, "y": -5.25 } + ], + "scale": [ + { "time": 0.1333 }, + { "time": 0.1667, "x": 1.718, "y": 1.718 }, + { "time": 0.2, "x": 2.109, "y": 2.109 }, + { "time": 0.2333, "x": 1.781, "y": 2.183 }, + { "time": 0.2667, "x": 2.148, "y": 2.633 }, + { "time": 0.3333, "x": 2.234, "y": 2.738 }, + { "time": 0.3667, "x": 1.366, "y": 2.148 }, + { "time": 0.4, "x": 0.97, "y": 1.524 }, + { "time": 0.4333, "x": 1.078, "y": 1.157 }, + { "time": 0.4667, "x": 1.126, "y": 1.005 }, + { "time": 0.7, "x": 1.241, "y": 1.301 }, + { "time": 0.9, "x": 0.709, "y": 0.893 } + ] + }, + "smoke6": { + "rotate": [ + { "time": 0.1667, "value": -37.43 }, + { "time": 0.2333, "value": -18.36 }, + { "time": 0.3333, "value": 28.58 }, + { "time": 0.4, "value": 150.54 }, + { "time": 0.7, "value": 301.59 } + ], + "translate": [ + { "time": 0.1333 }, + { "time": 0.2, "x": 68.04, "y": 16.15 }, + { "time": 0.2667, "x": 214.52, "y": 13.25 }, + { "time": 0.3333, "x": 285.4, "y": 17.95 }, + { "time": 0.4, "x": 202.91, "y": 101.43 }, + { "time": 0.4667, "x": 189.25, "y": 116.39 }, + { "time": 0.7, "x": 182.77, "y": 137.4 } + ], + "scale": [ + { "time": 0.1333 }, + { "time": 0.1667, "x": 1.152, "y": 1.288 }, + { "time": 0.2, "x": 1.939, "y": 2.168 }, + { "time": 0.2333, "x": 2.278, "y": 2.223 }, + { "time": 0.2667, "x": 2.023, "y": 1.974 }, + { "time": 0.3, "x": 2.644, "y": 1.974 }, + { "time": 0.4, "x": 1.539, "y": 1.425 }, + { "time": 0.4667, "x": 1.14, "y": 0.939 }, + { "time": 0.7, "x": 0.215, "y": 0.161 } + ] + }, + "smoke7": { + "rotate": [ + { "time": 0.1667, "value": -243.11 }, + { "time": 0.4, "value": -182.02 }, + { "time": 0.8333, "value": -83.02 } + ], + "translate": [ + { "time": 0.1333, "x": 3.19, "y": -6.53 }, + { "time": 0.1667, "x": 44.54, "y": 1.12 }, + { "time": 0.2, "x": 65.84, "y": 6.02 }, + { "time": 0.2333, "x": 173.84, "y": 97.51 }, + { "time": 0.4, "x": 167.39, "y": 74.58 }, + { "time": 0.8333, "x": 227.77, "y": 84.64 } + ], + "scale": [ + { "time": 0.1333, "x": 0.878, "y": 0.878 }, + { "time": 0.1667, "x": 1.235, "y": 1.235 }, + { "time": 0.2, "x": 1.461, "y": 1.461 }, + { "time": 0.2333, "x": 1.114, "y": 1.114 }, + { "time": 0.3333, "x": 1.067, "y": 1.067 }, + { "time": 0.4667, "x": 0.81, "y": 0.753 }, + { "time": 0.8333, "x": 0.52, "y": 0.484 } + ] + }, + "smoke8": { + "rotate": [ + { "time": 0.1667, "value": -156.52 }, + { "time": 0.2667, "value": -154.05 }, + { "time": 0.3333, "value": -108.35 }, + { "time": 0.6, "value": -93.14 }, + { "time": 0.9333, "value": -70.89 } + ], + "translate": [ + { "time": 0.1667, "x": 20.72, "y": 0.25 }, + { "time": 0.2333, "x": 46.1, "y": -10.06 }, + { "time": 0.3, "x": 149.77, "y": 0.92 }, + { "time": 0.3667, "x": 241.21, "y": 49.01 }, + { "time": 0.5333, "x": 276, "y": 58.76 }, + { "time": 0.7, "x": 292.02, "y": 65.91 }, + { "time": 0.9333, "x": 308.7, "y": 69.51 } + ], + "scale": [ + { "time": 0.1333, "y": 1.174 }, + { "time": 0.1667, "x": 1.813, "y": 1.438 }, + { "time": 0.2, "x": 1.813, "y": 1.878 }, + { "time": 0.2333, "x": 1.211, "y": 1.878 }, + { "time": 0.2667, "x": 1.584, "y": 1.596 }, + { "time": 0.3, "x": 1.958, "y": 1.878 }, + { "time": 0.4667, "x": 1.139, "y": 0.958 }, + { "time": 0.9333, "x": 0.839, "y": 0.591 } + ] + }, + "smoke9": { + "rotate": [ + { "time": 0.1333, "value": -44.34 }, + { "time": 0.1667, "value": 14.73 }, + { "time": 0.2333, "value": 116.07 }, + { "time": 0.2667, "value": 118.29 }, + { "time": 0.3333, "value": 148.13 }, + { "time": 0.3667, "value": 172.74 }, + { "time": 0.4, "value": 235.69 }, + { "time": 0.4333, "value": 283.36 }, + { "time": 0.7667, "value": 358.76 } + ], + "translate": [ + { "time": 0.1333, "x": -3.49, "y": 0.04 }, + { "time": 0.2, "x": 87.4, "y": -7.97 }, + { "time": 0.2667, "x": 233.69, "y": -33.86 }, + { "time": 0.3333, "x": 296.44, "y": -30.87 }, + { "time": 0.4, "x": 390.8, "y": 4 }, + { "time": 0.4667, "x": 391.42, "y": 13.17 }, + { "time": 0.6333, "x": 413.3, "y": 36.13 }, + { "time": 0.7667, "x": 408.59, "y": 40.75 } + ], + "scale": [ + { "time": 0.1333, "x": 1.289, "y": 1.501 }, + { "time": 0.2, "x": 1.751, "y": 2.039 }, + { "time": 0.2667, "x": 2.064, "y": 2.347 }, + { "time": 0.3333, "x": 1.822, "y": 2.072 }, + { "time": 0.4, "x": 1.296, "y": 1.045 }, + { "time": 0.4667, "x": 1.872, "y": 1.526 }, + { "time": 0.6333, "x": 1.181, "y": 1.037 }, + { "time": 0.7667, "x": 0.716, "y": 0.615 } + ] + }, + "smoke10": { + "rotate": [ + { "time": 0.1333, "value": 12.16 }, + { "time": 0.2, "value": 49.19 }, + { "time": 0.2667, "value": 33.17 }, + { "time": 0.3333, "value": 42.23 }, + { "time": 0.4, "value": 11.69 }, + { "time": 0.4667, "value": 41.83 }, + { "time": 0.5333, "value": 54.86 }, + { "time": 0.6333, "value": 75.25 }, + { "time": 0.8333, "value": 126.4 } + ], + "translate": [ + { "time": 0.1333, "x": 7.74, "y": 10.25 }, + { "time": 0.2, "x": 42.9, "y": 72.89 }, + { "time": 0.2667, "x": 221.58, "y": 82.27 }, + { "time": 0.3333, "x": 297.31, "y": 85.39 }, + { "time": 0.4, "x": 322.91, "y": 81.04 }, + { "time": 0.4667, "x": 346.62, "y": 76.68 }, + { "time": 0.6667, "x": 377.46, "y": 81.85 }, + { "time": 0.8333, "x": 402.18, "y": 101.03 } + ], + "scale": [ + { "time": 0.1333, "x": 0.537, "y": 1.062 }, + { "time": 0.1667, "x": 1.042, "y": 0.841 }, + { "time": 0.2, "x": 1.937, "y": 1.563 }, + { "time": 0.2333, "x": 1.937, "y": 2.176 }, + { "time": 0.2667, "x": 2.254, "y": 2.532 }, + { "time": 0.3, "x": 2.24, "y": 2.516 }, + { "time": 0.5333, "x": 1.731, "y": 1.882 }, + { "time": 0.8333, "x": 0.855, "y": 0.867 } + ] + }, + "smoke-glow": { + "translate": [ + { "time": 0.0667, "x": -57.08, "y": 0.01 }, + { "time": 0.1, "x": -49.68, "y": -1.46 }, + { "time": 0.1333, "x": 6.3, "y": -2.92 }, + { "time": 0.1667, "x": 31.57, "y": 0.44 }, + { "time": 0.2, "x": 34.04, "y": 0.27 }, + { "time": 0.2333, "x": 109.29, "y": 1.02 }, + { "time": 0.4, "x": 119.89, "y": 1.01 }, + { "time": 0.4333, "x": 135.2, "y": 1.03 }, + { "time": 0.4667, "x": 152.86, "y": 1.06 }, + { "time": 0.5333, "x": 164.64, "y": 1.07 }, + { "time": 0.6, "x": 179.94, "y": 1.09 }, + { "time": 0.6333, "x": 190.54, "y": 1.1 } + ], + "scale": [ + { "time": 0.0667, "x": 0.233, "y": 0.233 }, + { "time": 0.1, "x": 0.42, "y": 0.288 }, + { "time": 0.1333, "x": 1.669, "y": 1.072 }, + { "time": 0.1667, "x": 1.669, "y": 1.785, "curve": "stepped" }, + { "time": 0.2, "x": 1.669, "y": 1.785 }, + { "time": 0.2333, "x": 2.544, "y": 1.785 }, + { "time": 0.4333, "x": 3.48, "y": 2.22 }, + { "time": 0.4667, "x": 4.337, "y": 2.655 } + ] + }, + "smoke11": { + "rotate": [ + { "time": 0.4, "value": 47.07 }, + { "time": 0.4333, "value": 109.71 }, + { "time": 0.4667, "value": 164.62 }, + { "time": 0.8333, "value": 276.93 } + ], + "translate": [ + { "time": 0.3333, "x": 280.31, "y": 126.85 }, + { "time": 0.4, "x": 296.27, "y": 125.62 }, + { "time": 0.4667, "x": 312.45, "y": 131.57 }, + { "time": 0.6667, "x": 310.5, "y": 149.67 }, + { "time": 0.8333, "x": 307.08, "y": 153.94 } + ], + "scale": [ + { "time": 0.3333, "x": 1.491, "y": 1.491 }, + { "time": 0.4667, "x": 1.144, "y": 0.948 }, + { "time": 0.5667, "x": 0.491, "y": 0.491 }, + { "time": 0.8333, "x": 0.985, "y": 0.91 } + ] + }, + "smoke12": { + "rotate": [ + { "time": 0.3667, "value": -37.96 }, + { "time": 0.4333, "value": 28.55 }, + { "time": 0.5333, "value": 108.53 }, + { "time": 0.8667, "value": 191.85 } + ], + "translate": [ + { "time": 0.3667, "x": 390.22, "y": -1.06 }, + { "time": 0.4333, "x": 411.78, "y": 26.39 }, + { "time": 0.5333, "x": 428.12, "y": 56.28 }, + { "time": 0.8667, "x": 444.34, "y": 68.06 } + ], + "scale": [ + { "time": 0.3667, "x": 2.006, "y": 1.821 }, + { "time": 0.5333, "x": 1.719, "y": 1.293 }, + { "time": 0.7333, "x": 1.562, "y": 1.304 }, + { "time": 0.8667, "x": 0.727, "y": 0.637 } + ] + }, + "smoke13": { + "rotate": [ + { "time": 0.3667, "value": 305.8 }, + { "time": 0.4, "value": 478.49 }, + { "time": 0.4333, "value": 537.45 }, + { "time": 0.4667, "value": 573.84 }, + { "time": 0.5333, "value": 596.4 }, + { "time": 0.7, "value": 622.3 }, + { "time": 1, "value": 657.95 } + ], + "translate": [ + { "time": 0.3667, "x": 331.84, "y": -25.82 }, + { "time": 0.4, "x": 417.88, "y": -42.62 }, + { "time": 0.4667, "x": 451.61, "y": -42.21 }, + { "time": 0.5333, "x": 453.81, "y": -37.03 }, + { "time": 0.6, "x": 451.86, "y": -31.89 }, + { "time": 0.7, "x": 453.37, "y": -27.28 }, + { "time": 1, "x": 454.04, "y": -17.89 } + ], + "scale": [ + { "time": 0.3667, "x": 4.509, "y": 3.114 }, + { "time": 0.4, "x": 3.673, "y": 2.537 }, + { "time": 0.4333, "x": 4.201, "y": 2.638 }, + { "time": 0.4667, "x": 4.27, "y": 2.399 }, + { "time": 0.6, "x": 2.798, "y": 1.932 }, + { "time": 0.8333, "x": 2.316, "y": 1.599 }, + { "time": 1, "x": 1.081, "y": 0.746 } + ] + }, + "smoke14": { + "rotate": [ + { "time": 0.4333, "value": 271.03 }, + { "time": 0.7, "value": 299.97 }, + { "time": 1.0667, "value": 331.16 } + ], + "translate": [ + { "time": 0.4333, "x": 371.68, "y": -29.8 }, + { "time": 0.7667, "x": 400.59, "y": -44.36 }, + { "time": 1.0667, "x": 432.26, "y": -44.79 } + ], + "scale": [ + { "time": 0.4333, "x": 4.011, "y": 3.366 }, + { "time": 0.7667, "x": 2.071, "y": 1.624 }, + { "time": 1.0667, "x": 1.798, "y": 1.111 } + ] + }, + "smoke15": { + "rotate": [ + { "time": 0.4, "value": 111.75 }, + { "time": 0.4667, "value": 171.93 }, + { "time": 0.6, "value": 256.95 }, + { "time": 0.8333, "value": 299.15 } + ], + "translate": [ + { "time": 0.4, "x": 266.71, "y": -53.04 }, + { "time": 0.4333, "x": 290.84, "y": -51.43 }, + { "time": 0.5333, "x": 305.65, "y": -44.32 }, + { "time": 0.6667, "x": 318.96, "y": -38.95 }, + { "time": 0.8333, "x": 342.65, "y": -27.33 } + ], + "scale": [ + { "time": 0.4, "x": 2.749, "y": 2.095 }, + { "time": 0.4333, "x": 3.302, "y": 2.289 }, + { "time": 0.4667, "x": 2.591, "y": 1.895 }, + { "time": 0.5333, "x": 1.777, "y": 1.354 }, + { "time": 0.7, "x": 1.932, "y": 1.267 }, + { "time": 0.8333, "x": 1.002, "y": 1.546 } + ] + }, + "smoke16": { + "rotate": [ + { "time": 0.4, "value": 89.78 }, + { "time": 0.4667, "value": 137.83 }, + { "time": 0.5333, "value": 193.49 }, + { "time": 0.6, "value": 235.26 }, + { "time": 0.6333, "value": 286.8 } + ], + "translate": [ + { "time": 0.4, "x": 217.23, "y": -21.45 }, + { "time": 0.4667, "x": 249.95, "y": -13.73 }, + { "time": 0.5333, "x": 264.96, "y": -9.87 }, + { "time": 0.6, "x": 278.95, "y": 6.37 }, + { "time": 0.6333, "x": 245.65, "y": 11.77 } + ], + "scale": [ + { "time": 0.4, "x": 2.265, "y": 1.859 }, + { "time": 0.4333, "x": 2.621, "y": 1.955 }, + { "time": 0.4667, "x": 1.953, "y": 1.538 }, + { "time": 0.6, "x": 1.005, "y": 0.825 }, + { "time": 0.6333, "x": 0.387, "y": 0.318 } + ] + }, + "smoke17": { + "rotate": [ + { "time": 0.2333, "value": 99.02 }, + { "time": 0.3, "value": 58.06 }, + { "time": 0.3333, "value": 34.05 }, + { "time": 0.3667, "value": -17.34 }, + { "time": 0.6667, "value": -62.36 } + ], + "translate": [ + { "time": 0.2333, "x": 18.91, "y": -62.91 }, + { "time": 0.3, "x": 2.43, "y": -61.54 }, + { "time": 0.3333, "x": 1.89, "y": -36.55 }, + { "time": 0.3667, "x": 6.97, "y": -29.52 }, + { "time": 0.4333, "x": 10.78, "y": -20.55 }, + { "time": 0.6667, "x": 18.65, "y": -13.19 } + ], + "scale": [ + { "time": 0.2333, "x": 1.915, "y": 1.915 }, + { "time": 0.3, "x": 1.509, "y": 1.509 }, + { "time": 0.3333, "x": 1.01, "y": 1.01 }, + { "time": 0.3667, "x": 0.715, "y": 0.715 }, + { "time": 0.4333, "x": 0.949, "y": 0.721 }, + { "time": 0.5667, "x": 0.785, "y": 0.74 } + ] + }, + "smoke18": { + "rotate": [ + { "time": 0.2333, "value": 141.75 }, + { "time": 0.2667, "value": 134.51 }, + { "time": 0.3333, "value": 249.12 }, + { "time": 0.5, "value": 363.82 }, + { "time": 0.7333, "value": 450.54 } + ], + "translate": [ + { "time": 0.2333, "x": 60.81, "y": 56.17 }, + { "time": 0.2667, "x": 68.74, "y": 69.4 }, + { "time": 0.3333, "x": 76.85, "y": 69.07 }, + { "time": 0.5, "x": 101.49, "y": 89.87 }, + { "time": 0.7333, "x": 118.58, "y": 101.16 } + ], + "scale": [ + { "time": 0.2333, "x": 2.288, "y": 2.288 }, + { "time": 0.2667, "x": 2.288, "y": 1.628 }, + { "time": 0.3, "x": 1.524, "y": 1.308 }, + { "time": 0.5, "x": 1.757, "y": 1.385 }, + { "time": 0.5333, "x": 2.08, "y": 1.51 }, + { "time": 0.7333, "x": 1.405, "y": 0.896 } + ] + }, + "smoke20": { + "rotate": [ + { "time": 0.3333, "value": 95.16 }, + { "time": 0.3667, "value": 130.42 }, + { "time": 0.4, "value": 170.7 }, + { "time": 0.4333, "value": 266.75 }, + { "time": 0.4667, "value": 299.82 }, + { "time": 0.5333, "value": 326.88 }, + { "time": 0.6, "value": 350.8 }, + { "time": 0.9, "value": 403.14 } + ], + "translate": [ + { "time": 0.3333, "x": 124.61, "y": -46.55 }, + { "time": 0.5333, "x": 173.8, "y": -36.62 }, + { "time": 0.7, "x": 186.5, "y": -35.41 }, + { "time": 0.9, "x": 188.56, "y": -37.75 } + ], + "scale": [ + { "time": 0.3333, "x": 3.346, "y": 2.654 }, + { "time": 0.3667, "x": 2.661, "y": 2.111 }, + { "time": 0.4333, "x": 2.751, "y": 1.984 }, + { "time": 0.4667, "x": 3.059, "y": 2.21 }, + { "time": 0.5333, "x": 2.159, "y": 1.712 }, + { "time": 0.7, "x": 1.601, "y": 1.27 }, + { "time": 0.9, "x": 1.679, "y": 0.856 } + ] + }, + "smoke23": { + "rotate": [ + { "time": 0.3, "value": 115.12 }, + { "time": 0.3667, "value": 79.01 }, + { "time": 0.7667, "value": 6.96 } + ], + "translate": [ + { "time": 0.3, "x": 75.15, "y": -50.92 }, + { "time": 0.3667, "x": 59.33, "y": -53.52 }, + { "time": 0.7667, "x": 39.68, "y": -48.64 } + ], + "scale": [ + { "time": 0.3, "x": 3.331, "y": 2.096 }, + { "time": 0.4333, "x": 2.4, "y": 2.006 }, + { "time": 0.5, "x": 2.555, "y": 2.094 }, + { "time": 0.7667, "x": 1.35, "y": 1.241 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0.0667 }, + { "time": 0.2, "value": 11.78 }, + { "time": 0.3, "value": -9.52 }, + { "time": 0.4, "value": 8.07 }, + { "time": 0.5, "value": -4.45 }, + { "time": 0.6, "value": 1.54 }, + { "time": 0.7, "value": -0.34 } + ] + }, + "smoke24": { + "rotate": [ + { "time": 0.3, "value": 71.32 }, + { "time": 0.3667, "value": 112.39 }, + { "time": 0.4667, "value": 159.56 }, + { "time": 0.7, "value": 224.21 } + ], + "translate": [ + { "time": 0.3, "x": 90.72, "y": -18.79 }, + { "time": 0.3667, "x": 149.69, "y": -7.78 }, + { "time": 0.4667, "x": 176.26, "y": 12.31 }, + { "time": 0.7, "x": 184.07, "y": 31.75 } + ], + "scale": [ + { "time": 0.3, "x": 2.906, "y": 2.311 }, + { "time": 0.4333, "x": 3.567, "y": 2.58 }, + { "time": 0.4667, "x": 3.157, "y": 2.41 }, + { "time": 0.7, "x": 1.705, "y": 1.356 } + ] + }, + "smoke25": { + "rotate": [ + { "time": 0.3667, "value": 91.25 }, + { "time": 0.4333, "value": 117.56 }, + { "time": 0.6333, "value": 150.9 }, + { "time": 1, "value": 189.47 } + ], + "translate": [ + { "time": 0.3667, "x": 187.21, "y": -51.18 }, + { "time": 0.5333, "x": 245.48, "y": -46.28 }, + { "time": 0.6667, "x": 277.36, "y": -43.12 }, + { "time": 1, "x": 313.27, "y": -38.14 } + ], + "scale": [ + { "time": 0.3667, "x": 3.606, "y": 2.657 }, + { "time": 0.4333, "x": 4.166, "y": 2.792 }, + { "time": 0.5333, "x": 3.09, "y": 2.091 }, + { "time": 1, "x": 3.062, "y": 1.801 } + ] + }, + "smoke26": { + "rotate": [ + { "time": 0.3667, "value": 10.64 }, + { "time": 0.4, "value": 60.85 }, + { "time": 0.4667, "value": 89.45 }, + { "time": 0.7, "value": 125.01 }, + { "time": 0.9333, "value": 155.24 } + ], + "translate": [ + { "time": 0.3667, "x": 442.07, "y": -13.19 }, + { "time": 0.4, "x": 453.7, "y": 0.81 }, + { "time": 0.4667, "x": 443.57, "y": -6.95 }, + { "time": 0.7, "x": 460.97, "y": 15.79 }, + { "time": 0.9333, "x": 465.22, "y": 20.92 } + ], + "scale": [ + { "time": 0.3667, "x": 2.726, "y": 2.726 }, + { "time": 0.4333, "x": 3.729, "y": 2.822 }, + { "time": 0.4667, "x": 3.398, "y": 2.441 }, + { "time": 0.7, "x": 4.324, "y": 3.159 }, + { "time": 0.9, "x": 1.977, "y": 1.48 } + ] + }, + "smoke27": { + "rotate": [ + { "time": 0.3667, "value": 24.75 }, + { "time": 0.4333, "value": -5.43 }, + { "time": 0.5333, "value": -39.76 }, + { "time": 0.8333, "value": -56.25 } + ], + "translate": [ + { "time": 0.3667, "x": 92.98, "y": -49.06 }, + { "time": 0.5333, "x": 129.81, "y": -33.09 }, + { "time": 0.8333, "x": 143.68, "y": -25.27 } + ], + "scale": [ + { "time": 0.3667, "x": 3.633, "y": 2.223 }, + { "time": 0.4333, "x": 2.745, "y": 2.283 }, + { "time": 0.4667, "x": 2.962, "y": 2.122 }, + { "time": 0.5333, "x": 2.007, "y": 1.266 } + ] + }, + "cannon-target": { + "translate": [ + { "time": 0.1333 }, + { + "time": 0.2, + "y": 128.38, + "curve": [ 0.4, 0, 0.8, 0, 0.4, 128.38, 0.8, 0 ] + }, + { "time": 1 } + ], + "scale": [ + { "time": 0.4333, "x": 0.632, "y": 1.244 }, + { "time": 0.4667, "x": 0.477, "y": 1.487 } + ] + }, + "machinegun-target": { + "scale": [ + { "time": 0.4333, "x": 0.632, "y": 1.244 }, + { "time": 0.4667, "x": 0.477, "y": 1.487 } + ] + }, + "machinegun": { + "rotate": [ + { "value": 8.07, "curve": "stepped" }, + { "time": 0.0667, "value": 8.07 }, + { + "time": 0.2333, + "value": -18.67, + "curve": [ 0.894, -18.44, 0.832, 7.5 ] + }, + { "time": 0.9, "value": 8.07 } + ] + }, + "tank-root": { + "translate": [ + { "time": 0.0667 }, + { + "time": 0.1667, + "x": 46.59, + "curve": [ 0.192, 46.59, 0.242, 0, 0.192, 0, 0.242, 0 ] + }, + { "time": 0.2667 } + ] + }, + "tank-glow": { + "translate": [ + { + "time": 0.1333, + "x": 198.14, + "curve": [ 0.199, 190.76, 0.222, -255.89, 0.199, 0, 0.222, 0 ] + }, + { "time": 0.2333, "x": -390 } + ], + "scale": [ + { "time": 0.0667 }, + { + "time": 0.1333, + "x": 1.185, + "y": 0.945, + "curve": [ 0.199, 1.182, 0.222, 1.048, 0.199, 0.939, 0.222, 0.579 ] + }, + { "time": 0.2333, "x": 1.008, "y": 0.471 } + ] + } + }, + "attachments": { + "default": { + "clipping": { + "clipping": { + "deform": [ + { + "time": 0.0667, + "offset": 54, + "vertices": [ 4.59198, -4.59192 ] + }, + { + "time": 0.1333, + "offset": 8, + "vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ] + }, + { + "time": 0.1667, + "offset": 8, + "vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ] + }, + { + "time": 0.2, + "offset": 8, + "vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.59198, -4.59192 ] + }, + { + "time": 0.2333, + "offset": 8, + "vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ] + }, + { + "time": 0.2667, + "offset": 54, + "vertices": [ 4.59198, -4.59192 ] + } + ] + } + }, + "smoke-glow": { + "smoke-glow": { + "deform": [ + { + "time": 0.1333, + "vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ] + }, + { + "time": 0.1667, + "vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ] + }, + { + "time": 0.2, + "vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ] + }, + { + "time": 0.2333, + "vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ] + }, + { + "time": 0.2667, + "vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ] + } + ] + } + } + } + }, + "drawOrder": [ + { + "time": 0.3, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 24 }, + { "slot": "smoke-puff1-bg8", "offset": 19 }, + { "slot": "smoke-puff1-bg9", "offset": 22 }, + { "slot": "smoke-puff1-bg3", "offset": 17 }, + { "slot": "smoke-puff1-fg17", "offset": 13 }, + { "slot": "smoke-puff1-fg2", "offset": 2 }, + { "slot": "smoke-puff1-fg5", "offset": 8 }, + { "slot": "smoke-puff1-fg6", "offset": 4 }, + { "slot": "smoke-puff1-fg7", "offset": -4 }, + { "slot": "smoke-puff1-fg4", "offset": -4 } + ] + }, + { + "time": 0.3333, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 8 }, + { "slot": "smoke-puff1-bg8", "offset": 5 }, + { "slot": "smoke-puff1-bg9", "offset": 3 }, + { "slot": "smoke-puff1-fg", "offset": 24 }, + { "slot": "smoke-puff1-fg5", "offset": -14 }, + { "slot": "smoke-puff1-fg6", "offset": -21 }, + { "slot": "smoke-puff1-fg7", "offset": -19 }, + { "slot": "smoke-puff1-fg10", "offset": -21 } + ] + }, + { + "time": 0.3667, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 7 }, + { "slot": "smoke-puff1-bg9", "offset": 4 }, + { "slot": "smoke-puff1-fg", "offset": 24 }, + { "slot": "smoke-puff1-fg2", "offset": 5 }, + { "slot": "smoke-puff1-fg6", "offset": -22 }, + { "slot": "smoke-puff1-fg7", "offset": -18 }, + { "slot": "smoke-puff1-fg10", "offset": -20 } + ] + }, + { + "time": 0.4, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 5 }, + { "slot": "smoke-puff1-bg4", "offset": 0 }, + { "slot": "smoke-puff1-fg", "offset": 24 }, + { "slot": "smoke-puff1-fg2", "offset": 5 }, + { "slot": "smoke-puff1-fg6", "offset": -21 }, + { "slot": "smoke-puff1-fg7", "offset": -18 }, + { "slot": "smoke-puff1-fg10", "offset": -22 } + ] + }, + { + "time": 0.4333, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 4 }, + { "slot": "smoke-puff1-bg9", "offset": 4 }, + { "slot": "smoke-puff1-fg", "offset": 24 }, + { "slot": "smoke-puff1-fg2", "offset": 5 }, + { "slot": "smoke-puff1-fg6", "offset": -17 }, + { "slot": "smoke-puff1-fg7", "offset": -19 }, + { "slot": "smoke-puff1-fg10", "offset": -23 } + ] + }, + { + "time": 0.5333, + "offsets": [ + { "slot": "smoke-puff1-bg2", "offset": 9 }, + { "slot": "smoke-puff1-bg12", "offset": 0 }, + { "slot": "smoke-puff1-fg", "offset": 24 }, + { "slot": "smoke-puff1-fg2", "offset": 6 }, + { "slot": "smoke-puff1-fg6", "offset": -20 }, + { "slot": "smoke-puff1-fg7", "offset": -19 }, + { "slot": "smoke-puff1-fg10", "offset": -23 }, + { "slot": "smoke-puff1-fg4", "offset": -5 } + ] + } + ] + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/tank-pro.skel b/spine-haxe/example/assets/tank-pro.skel new file mode 100644 index 000000000..7b1f71bf2 Binary files /dev/null and b/spine-haxe/example/assets/tank-pro.skel differ diff --git a/spine-haxe/example/assets/tank.atlas b/spine-haxe/example/assets/tank.atlas new file mode 100644 index 000000000..295fb0d22 --- /dev/null +++ b/spine-haxe/example/assets/tank.atlas @@ -0,0 +1,56 @@ +tank.png + size: 1024, 1024 + filter: Linear, Linear + scale: 0.5 +antenna + bounds: 2, 712, 11, 152 + rotate: 90 +cannon + bounds: 222, 694, 466, 29 +cannon-connector + bounds: 82, 654, 56, 68 + rotate: 90 +ground + bounds: 2, 175, 512, 177 +guntower + bounds: 647, 347, 365, 145 +machinegun + bounds: 690, 694, 166, 29 +machinegun-mount + bounds: 858, 687, 36, 48 + rotate: 90 +rock + bounds: 664, 607, 290, 64 +smoke-glow + bounds: 946, 673, 50, 50 +smoke-puff01-bg + bounds: 312, 630, 92, 62 +smoke-puff01-fg + bounds: 222, 633, 88, 59 +smoke-puff02-fg + bounds: 406, 630, 92, 62 +smoke-puff03-fg + bounds: 500, 630, 92, 62 +smoke-puff04-fg + bounds: 2, 662, 78, 48 +tank-bottom + bounds: 2, 354, 643, 138 +tank-bottom-shadow + bounds: 2, 2, 646, 171 +tank-top + bounds: 195, 494, 704, 111 +tread + bounds: 172, 708, 48, 15 +tread-inside + bounds: 156, 710, 13, 14 + rotate: 90 +wheel-big + bounds: 97, 540, 96, 96 +wheel-big-overlay + bounds: 2, 559, 93, 93 +wheel-mid + bounds: 594, 624, 68, 68 +wheel-mid-overlay + bounds: 152, 638, 68, 68 +wheel-small + bounds: 908, 687, 36, 36 diff --git a/spine-haxe/example/assets/tank.png b/spine-haxe/example/assets/tank.png new file mode 100644 index 000000000..a50ffc8e4 Binary files /dev/null and b/spine-haxe/example/assets/tank.png differ diff --git a/spine-haxe/example/assets/vine-pro.json b/spine-haxe/example/assets/vine-pro.json new file mode 100644 index 000000000..d0930c9ca --- /dev/null +++ b/spine-haxe/example/assets/vine-pro.json @@ -0,0 +1,357 @@ +{ +"skeleton": { + "hash": "J/Kz2d3OlD0", + "spine": "4.1.17", + "x": -87.7, + "y": -1.71, + "width": 227.65, + "height": 841.09, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { + "name": "vine-control1", + "parent": "root", + "length": 296.68, + "rotation": 88.65, + "x": -2.51, + "y": 2.55, + "color": "ff0004ff" + }, + { "name": "vine-control2", "parent": "vine-control1", "length": 292.6, "rotation": 0.96, "x": 296.68, "color": "ff0004ff" }, + { "name": "vine-control3", "parent": "vine-control2", "length": 247.5, "rotation": 0.16, "x": 292.6, "color": "ff0004ff" }, + { "name": "vine-control4", "parent": "vine-control3", "length": 212.43, "rotation": 0.5, "x": 247.5, "color": "ff0004ff" }, + { + "name": "vine1", + "parent": "root", + "length": 74, + "rotation": 90, + "x": 339.1, + "y": -467.15, + "color": "f700ffff" + }, + { + "name": "vine10", + "parent": "vine1", + "length": 74, + "rotation": 48, + "x": 608.63, + "y": 19.06, + "color": "f700ffff" + }, + { + "name": "vine11", + "parent": "vine1", + "length": 74, + "rotation": 39.71, + "x": 670.66, + "y": 66.4, + "color": "f700ffff" + }, + { + "name": "vine12", + "parent": "vine1", + "length": 74, + "rotation": 10.73, + "x": 750.1, + "y": 80.23, + "color": "f700ffff" + }, + { + "name": "vine13", + "parent": "vine1", + "length": 74, + "rotation": -18.44, + "x": 826.07, + "y": 56.95, + "color": "f700ffff" + }, + { "name": "vine2", "parent": "vine1", "length": 74, "x": 74, "color": "f700ffff" }, + { + "name": "vine3", + "parent": "vine1", + "length": 74, + "rotation": 38.95, + "x": 137.97, + "y": 47.51, + "color": "f700ffff" + }, + { + "name": "vine4", + "parent": "vine1", + "length": 74, + "rotation": 16.68, + "x": 214.29, + "y": 68.52, + "color": "f700ffff" + }, + { + "name": "vine5", + "parent": "vine1", + "length": 74, + "rotation": -21.74, + "x": 289.61, + "y": 40.93, + "color": "f700ffff" + }, + { + "name": "vine6", + "parent": "vine1", + "length": 74, + "rotation": -50.04, + "x": 341.13, + "y": -15.58, + "color": "f700ffff" + }, + { + "name": "vine7", + "parent": "vine1", + "length": 74, + "rotation": -39.26, + "x": 402.7, + "y": -61.82, + "color": "f700ffff" + }, + { + "name": "vine8", + "parent": "vine1", + "length": 74, + "rotation": -6.18, + "x": 483.27, + "y": -69.84, + "color": "f700ffff" + }, + { + "name": "vine9", + "parent": "vine1", + "length": 74, + "rotation": 27.11, + "x": 554.26, + "y": -36.44, + "color": "f700ffff" + } +], +"slots": [ + { "name": "vine-path", "bone": "root", "attachment": "vine-path" }, + { "name": "vine", "bone": "vine1", "attachment": "vine" } +], +"path": [ + { + "name": "vine-path", + "bones": [ "vine1", "vine2", "vine3", "vine4", "vine5", "vine6", "vine7", "vine8", "vine9", "vine10", "vine11", "vine12", "vine13" ], + "target": "vine-path", + "rotateMode": "chainScale" + } +], +"skins": [ + { + "name": "default", + "attachments": { + "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": [ 57, 56, 3, 54, 55, 56, 56, 2, 3, 55, 1, 56, 56, 1, 2, 55, 0, 1, 54, 56, 57, 59, 58, 5, 52, 53, 58, 58, 4, 5, 53, 57, 58, 58, 57, 4, 53, 54, 57, 57, 3, 4, 61, 60, 7, 50, 51, 60, 60, 6, 7, 51, 59, 60, 60, 59, 6, 51, 52, 59, 59, 5, 6, 52, 58, 59, 62, 61, 8, 49, 50, 61, 61, 7, 8, 50, 60, 61, 63, 62, 9, 48, 49, 62, 62, 8, 9, 49, 61, 62, 63, 9, 10, 65, 64, 11, 46, 47, 64, 64, 10, 11, 47, 63, 64, 64, 63, 10, 47, 48, 63, 48, 62, 63, 67, 66, 13, 44, 45, 66, 66, 12, 13, 45, 65, 66, 66, 65, 12, 45, 46, 65, 46, 64, 65, 65, 11, 12, 69, 68, 15, 42, 43, 68, 68, 14, 15, 43, 67, 68, 68, 67, 14, 43, 44, 67, 67, 13, 14, 44, 66, 67, 71, 70, 17, 40, 41, 70, 70, 16, 17, 41, 69, 70, 70, 69, 16, 41, 42, 69, 69, 15, 16, 42, 68, 69, 73, 72, 19, 38, 39, 72, 72, 18, 19, 39, 71, 72, 72, 71, 18, 39, 40, 71, 71, 17, 18, 40, 70, 71, 75, 74, 21, 36, 37, 74, 74, 20, 21, 37, 73, 74, 74, 73, 20, 37, 38, 73, 73, 19, 20, 38, 72, 73, 77, 76, 23, 34, 35, 76, 76, 22, 23, 35, 75, 76, 76, 75, 22, 35, 36, 75, 75, 21, 22, 36, 74, 75, 78, 77, 24, 33, 34, 77, 32, 78, 79, 79, 78, 25, 32, 33, 78, 78, 24, 25, 33, 77, 78, 77, 23, 24, 34, 76, 77, 79, 25, 26, 29, 27, 28, 30, 80, 29, 29, 80, 27, 30, 31, 80, 80, 26, 27, 31, 79, 80, 80, 79, 26, 31, 32, 79 ], + "vertices": [ 3, 7, 220, 33.89, 0.0165, 8, 146, 33.89, 0.21533, 9, 72, 33.89, 0.76817, 2, 8, 146, -0.11, 0.16997, 9, 72, -0.11, 0.83003, 3, 7, 220, -34.11, 0.0165, 8, 146, -34.11, 0.21533, 9, 72, -34.11, 0.76817, 3, 7, 183, -34.11, 0.04748, 8, 109, -34.11, 0.33417, 9, 35, -34.11, 0.61835, 4, 6, 220, -34.11, 0.01164, 7, 146, -34.11, 0.14113, 8, 72, -34.11, 0.49183, 9, -2, -34.11, 0.3554, 4, 6, 183, -34.11, 0.04672, 7, 109, -34.11, 0.31228, 8, 35, -34.11, 0.48857, 9, -39, -34.11, 0.15243, 4, 6, 146, -34.11, 0.14271, 7, 72, -34.11, 0.49271, 8, -2, -34.11, 0.3155, 9, -76, -34.11, 0.04909, 4, 6, 109, -34.11, 0.32758, 7, 35, -34.11, 0.51172, 8, -39, -34.11, 0.14821, 9, -113, -34.11, 0.01249, 4, 6, 72, -34.11, 0.57473, 7, -2, -34.11, 0.36792, 8, -76, -34.11, 0.05505, 9, -150, -34.11, 0.00231, 4, 17, 109, -34.11, 0.32766, 6, 35, -34.11, 0.51185, 7, -39, -34.11, 0.14825, 8, -113, -34.11, 0.01223, 4, 16, 146, -34.11, 0.14299, 17, 72, -34.11, 0.49369, 6, -2, -34.11, 0.31604, 7, -76, -34.11, 0.04729, 4, 15, 183, -34.11, 0.04729, 16, 109, -34.11, 0.31604, 17, 35, -34.11, 0.49369, 6, -39, -34.11, 0.14299, 4, 15, 146, -34.11, 0.14299, 16, 72, -34.11, 0.49369, 17, -2, -34.11, 0.31604, 6, -76, -34.11, 0.04729, 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.04752, 11, 109, -34.11, 0.31596, 12, 35, -34.11, 0.49356, 13, -39, -34.11, 0.14296, 4, 10, 146, -34.11, 0.14433, 11, 72, -34.11, 0.49291, 12, -2, -34.11, 0.31554, 13, -76, -34.11, 0.04721, 4, 5, 183, -34.11, 0.04107, 10, 109, -34.11, 0.32351, 11, 35, -34.11, 0.49271, 12, -39, -34.11, 0.14271, 4, 5, 146, -34.11, 0.12766, 10, 72, -34.11, 0.51334, 11, -2, -34.11, 0.31227, 12, -76, -34.11, 0.04672, 4, 5, 109, -34.11, 0.30124, 10, 35, -34.11, 0.54607, 11, -39, -34.11, 0.14105, 12, -113, -34.11, 0.01164, 3, 5, 72, -34.11, 0.55512, 10, -2, -34.11, 0.39816, 11, -76, -34.11, 0.04672, 3, 5, 35, -34.11, 0.77997, 10, -39, -34.11, 0.20831, 11, -113, -34.11, 0.01172, 2, 5, -2, -34.11, 0.89275, 10, -76, -34.11, 0.10725, 2, 5, -2, -0.11, 0.92721, 10, -76, -0.11, 0.07279, 2, 5, -2, 33.89, 0.89275, 10, -76, 33.89, 0.10725, 3, 5, 35, 33.89, 0.77997, 10, -39, 33.89, 0.20831, 11, -113, 33.89, 0.01172, 3, 5, 72, 33.89, 0.55512, 10, -2, 33.89, 0.39816, 11, -76, 33.89, 0.04672, 4, 5, 109, 33.89, 0.30124, 10, 35, 33.89, 0.54607, 11, -39, 33.89, 0.14105, 12, -113, 33.89, 0.01164, 4, 5, 146, 33.89, 0.12766, 10, 72, 33.89, 0.51334, 11, -2, 33.89, 0.31227, 12, -76, 33.89, 0.04672, 4, 5, 183, 33.89, 0.04107, 10, 109, 33.89, 0.32351, 11, 35, 33.89, 0.49271, 12, -39, 33.89, 0.14271, 4, 10, 146, 33.89, 0.14433, 11, 72, 33.89, 0.49291, 12, -2, 33.89, 0.31554, 13, -76, 33.89, 0.04721, 4, 10, 183, 33.89, 0.04752, 11, 109, 33.89, 0.31596, 12, 35, 33.89, 0.49356, 13, -39, 33.89, 0.14296, 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.14299, 16, 72, 33.89, 0.49369, 17, -2, 33.89, 0.31604, 6, -76, 33.89, 0.04729, 4, 15, 183, 33.89, 0.04729, 16, 109, 33.89, 0.31604, 17, 35, 33.89, 0.49369, 6, -39, 33.89, 0.14299, 4, 16, 146, 33.89, 0.14299, 17, 72, 33.89, 0.49369, 6, -2, 33.89, 0.31604, 7, -76, 33.89, 0.04729, 4, 17, 109, 33.89, 0.32766, 6, 35, 33.89, 0.51185, 7, -39, 33.89, 0.14825, 8, -113, 33.89, 0.01223, 4, 6, 72, 33.89, 0.57473, 7, -2, 33.89, 0.36792, 8, -76, 33.89, 0.05505, 9, -150, 33.89, 0.00231, 4, 6, 109, 33.89, 0.32758, 7, 35, 33.89, 0.51172, 8, -39, 33.89, 0.14821, 9, -113, 33.89, 0.01249, 4, 6, 146, 33.89, 0.14271, 7, 72, 33.89, 0.49271, 8, -2, 33.89, 0.3155, 9, -76, 33.89, 0.04909, 4, 6, 183, 33.89, 0.04672, 7, 109, 33.89, 0.31228, 8, 35, 33.89, 0.48857, 9, -39, 33.89, 0.15243, 4, 6, 220, 33.89, 0.01164, 7, 146, 33.89, 0.14113, 8, 72, 33.89, 0.49183, 9, -2, 33.89, 0.3554, 3, 7, 183, 33.89, 0.04748, 8, 109, 33.89, 0.33417, 9, 35, 33.89, 0.61835, 3, 7, 183, -0.11, 0.03069, 8, 109, -0.11, 0.31679, 9, 35, -0.11, 0.65252, 3, 7, 146, -0.11, 0.11465, 8, 72, -0.11, 0.5508, 9, -2, -0.11, 0.33455, 4, 6, 183, -0.11, 0.03047, 7, 109, -0.11, 0.30393, 8, 35, -0.11, 0.54628, 9, -39, -0.11, 0.11931, 4, 6, 146, -0.11, 0.11465, 7, 72, -0.11, 0.54869, 8, -2, -0.11, 0.30539, 9, -76, -0.11, 0.03128, 4, 6, 109, -0.11, 0.31348, 7, 35, -0.11, 0.56323, 8, -39, -0.11, 0.11769, 9, -113, -0.11, 0.0056, 4, 17, 146, -0.11, 0.11473, 6, 72, -0.11, 0.54905, 7, -2, -0.11, 0.30559, 8, -76, -0.11, 0.03064, 4, 16, 183, -0.11, 0.03064, 17, 109, -0.11, 0.30559, 6, 35, -0.11, 0.54905, 7, -39, -0.11, 0.11473, 4, 16, 146, -0.11, 0.11473, 17, 72, -0.11, 0.54905, 6, -2, -0.11, 0.30559, 7, -76, -0.11, 0.03064, 4, 15, 183, -0.11, 0.03064, 16, 109, -0.11, 0.30559, 17, 35, -0.11, 0.54905, 6, -39, -0.11, 0.11473, 4, 15, 146, -0.11, 0.11473, 16, 72, -0.11, 0.54905, 17, -2, -0.11, 0.30559, 6, -76, -0.11, 0.03064, 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.11531, 11, 72, -0.11, 0.54869, 12, -2, -0.11, 0.30539, 13, -76, -0.11, 0.03062, 4, 5, 183, -0.11, 0.02691, 10, 109, -0.11, 0.30975, 11, 35, -0.11, 0.54869, 12, -39, -0.11, 0.11465, 4, 5, 146, -0.11, 0.09912, 10, 72, -0.11, 0.56648, 11, -2, -0.11, 0.30393, 12, -76, -0.11, 0.03047, 3, 5, 109, -0.11, 0.27809, 10, 35, -0.11, 0.60726, 11, -39, -0.11, 0.11465, 3, 5, 72, -0.11, 0.55966, 10, -2, -0.11, 0.40987, 11, -76, -0.11, 0.03047, 2, 5, 35, -0.11, 0.82292, 10, -39, -0.11, 0.17708 ], + "hull": 56, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 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, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 110, 110, 0, 0, 2, 58, 60, 2, 4, 56, 58, 62, 160, 160, 54, 64, 158, 158, 52, 66, 156, 156, 50, 68, 154, 154, 48, 46, 152, 152, 70, 72, 150, 150, 44, 42, 148, 148, 74, 76, 146, 146, 40, 38, 144, 144, 78, 80, 142, 142, 36, 34, 140, 140, 82, 84, 138, 138, 32, 30, 136, 136, 86, 88, 134, 134, 28, 26, 132, 132, 90, 92, 130, 130, 24, 22, 128, 128, 94, 96, 126, 126, 20, 18, 124, 124, 98, 100, 122, 122, 16, 14, 120, 120, 102, 12, 118, 118, 104, 106, 116, 116, 10, 8, 114, 114, 108, 110, 112, 112, 6 ], + "width": 68, + "height": 962 + } + }, + "vine-path": { + "vine-path": { + "type": "path", + "lengths": [ 223.68, 474.79, 780.32, 992.69, 1196.43, 2249.39 ], + "vertexCount": 18, + "vertices": [ 1, 1, -31.65, 22.5, 1, 1, 1, -2.74, -6.56, 1, 1, 1, 56.89, -69.01, 1, 1, 1, 115.58, 75.02, 1, 1, 1, 198.6, 53.37, 1, 2, 1, 332.77, 19.75, 0.8, 2, 36.41, 19.14, 0.2, 2, 1, 276.73, -68.37, 0.232, 2, -21.1, -68.03, 0.768, 1, 2, 96.09, -93.89, 1, 2, 2, 229.75, -122.63, 0.664, 3, -63.19, -122.45, 0.336, 2, 2, 242.54, 29.31, 0.52, 3, -49.98, 29.45, 0.48, 1, 3, 66.72, 38.65, 1, 2, 3, 183.42, 47.85, 0.808, 4, -63.66, 48.41, 0.192, 2, 3, 177.29, -41.23, 0.776, 4, -70.57, -40.61, 0.224, 2, 3, 265.51, -16.19, 0.488, 4, 17.87, -16.34, 0.512, 2, 3, 343.26, 7.26, 0.216, 4, 95.82, 6.42, 0.784, 1, 4, 138.78, 45.73, 1, 1, 4, 212.87, 5.44, 1, 1, 1, 1094.34, -1.03, 1 ] + } + } + } + } +], +"animations": { + "grow": { + "slots": { + "vine": { + "rgba": [ + { + "color": "ffcb73ff", + "curve": [ 2.592, 1, 7.775, 1, 2.592, 0.8, 7.775, 0.98, 2.592, 0.45, 7.775, 1, 2.592, 1, 7.775, 1 ] + }, + { "time": 10.3667, "color": "fefaffff" } + ] + } + }, + "bones": { + "vine1": { + "scale": [ + { + "x": 0, + "y": 0.183, + "curve": [ 0.978, 0.698, 1.776, 1.011, 0.978, 0.708, 1.776, 0.944 ] + }, + { + "time": 3.2333, + "x": 1.218, + "y": 1.1, + "curve": [ 7.182, 1.164, 9.04, 1.116, 7.182, 1.184, 9.04, 1.259 ] + }, + { "time": 11.4333, "y": 1.439 } + ] + }, + "vine-control1": { + "rotate": [ + { + "value": 39.69, + "curve": [ 0.3, 39.69, 0.9, 0.89 ] + }, + { + "time": 1.2, + "value": 0.89, + "curve": [ 1.442, 0.89, 1.925, 5.57 ] + }, + { + "time": 2.1667, + "value": 5.57, + "curve": [ 2.475, 5.57, 3.092, 5.65 ] + }, + { + "time": 3.4, + "value": 5.65, + "curve": [ 4.45, 5.65, 6.55, 1.35 ] + }, + { "time": 7.6, "value": 1.35 } + ], + "scale": [ + { + "curve": [ 1.083, 1, 3.25, 1, 1.083, 1, 3.25, 0.792 ] + }, + { + "time": 4.3333, + "y": 0.792, + "curve": [ 5.15, 1, 6.783, 1, 5.15, 0.792, 6.783, 1 ] + }, + { + "time": 7.6, + "curve": [ 8.558, 1, 9.781, 1, 8.558, 1, 9.781, 0.638 ] + }, + { "time": 11.4333, "y": 0.636 } + ] + }, + "vine-control2": { + "rotate": [ + { + "value": -39.69, + "curve": [ 0.3, -39.69, 0.9, -20.6 ] + }, + { + "time": 1.2, + "value": -20.6, + "curve": [ 1.75, -20.6, 2.85, -8.19 ] + }, + { + "time": 3.4, + "value": -8.19, + "curve": [ 4.45, -8.19, 6.55, -0.96 ] + }, + { "time": 7.6, "value": -0.96 } + ], + "scale": [ + { + "curve": [ 1.083, 1, 3.25, 1, 1.083, 1, 3.25, 0.792 ] + }, + { + "time": 4.3333, + "y": 0.792, + "curve": [ 5.15, 1, 6.783, 1, 5.15, 0.792, 6.783, 1 ] + }, + { + "time": 7.6, + "curve": [ 8.558, 1, 10.475, 1, 8.558, 1, 10.475, 0.924 ] + }, + { "time": 11.4333, "y": 0.924 } + ] + }, + "vine-control3": { + "rotate": [ + { + "curve": [ 0.3, 0, 0.9, 27.37 ] + }, + { + "time": 1.2, + "value": 27.37, + "curve": [ 1.442, 27.37, 1.925, 14.83 ] + }, + { + "time": 2.1667, + "value": 14.83, + "curve": [ 2.475, 14.83, 3.092, -15.24 ] + }, + { + "time": 3.4, + "value": -15.24, + "curve": [ 4.45, -15.24, 6.55, -0.16 ] + }, + { "time": 7.6, "value": -0.16 } + ], + "scale": [ + { + "curve": [ 1.083, 1, 3.25, 1, 1.083, 1, 3.25, 0.792 ] + }, + { + "time": 4.3333, + "y": 0.792, + "curve": [ 5.15, 1, 6.783, 1, 5.15, 0.792, 6.783, 1 ] + }, + { + "time": 7.6, + "curve": [ 8.558, 1, 10.475, 1, 8.558, 1, 10.475, 0.924 ] + }, + { "time": 11.4333, "y": 0.924 } + ] + }, + "vine-control4": { + "rotate": [ + { + "curve": [ 0.542, 0, 1.625, -11.88 ] + }, + { + "time": 2.1667, + "value": -11.88, + "curve": [ 2.475, -11.88, 3.092, 7.57 ] + }, + { + "time": 3.4, + "value": 7.57, + "curve": [ 4.15, 7.57, 5.65, 15.02 ] + }, + { + "time": 6.4, + "value": 15.02, + "curve": [ 6.7, 15.02, 7.3, -0.5 ] + }, + { "time": 7.6, "value": -0.5 } + ], + "scale": [ + { + "curve": [ 1.083, 1, 3.25, 1, 1.083, 1, 3.25, 0.792 ] + }, + { + "time": 4.3333, + "y": 0.792, + "curve": [ 5.15, 1, 6.783, 1, 5.15, 0.792, 6.783, 1 ] + }, + { + "time": 7.6, + "curve": [ 8.558, 1, 10.475, 1, 8.558, 1, 10.475, 0.924 ] + }, + { "time": 11.4333, "y": 0.924 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-haxe/example/assets/vine-pro.skel b/spine-haxe/example/assets/vine-pro.skel new file mode 100644 index 000000000..0cb9578f7 Binary files /dev/null and b/spine-haxe/example/assets/vine-pro.skel differ diff --git a/spine-haxe/example/assets/vine.atlas b/spine-haxe/example/assets/vine.atlas new file mode 100644 index 000000000..12a1d3f90 --- /dev/null +++ b/spine-haxe/example/assets/vine.atlas @@ -0,0 +1,5 @@ +vine.png + size: 128, 1024 + filter: Linear, Linear +vine + bounds: 2, 2, 68, 962 diff --git a/spine-haxe/example/assets/vine.png b/spine-haxe/example/assets/vine.png new file mode 100644 index 000000000..d077af53d Binary files /dev/null and b/spine-haxe/example/assets/vine.png differ diff --git a/spine-haxe/example/src/BasicExample.hx b/spine-haxe/example/src/BasicExample.hx new file mode 100644 index 000000000..b59a7034d --- /dev/null +++ b/spine-haxe/example/src/BasicExample.hx @@ -0,0 +1,69 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +import openfl.utils.Assets; +import spine.SkeletonData; +import spine.animation.AnimationStateData; +import spine.atlas.TextureAtlas; +import spine.starling.SkeletonSprite; +import spine.starling.StarlingTextureLoader; +import starling.core.Starling; +import starling.events.TouchEvent; +import starling.events.TouchPhase; + +class BasicExample extends Scene { + var loadBinary = true; + + public function load():Void { + var atlas = new TextureAtlas(Assets.getText("assets/raptor.atlas"), new StarlingTextureLoader("assets/raptor-pro.atlas")); + var skeletondata = SkeletonData.from(loadBinary ? Assets.getBytes("assets/raptor-pro.skel") : Assets.getText("assets/raptor-pro.json"), atlas); + var animationStateData = new AnimationStateData(skeletondata); + animationStateData.defaultMix = 0.25; + + var skeletonSprite = new SkeletonSprite(skeletondata, animationStateData); + var bounds = skeletonSprite.skeleton.getBounds(); + skeletonSprite.scale = Starling.current.stage.stageWidth / bounds.width * 0.5; + skeletonSprite.x = Starling.current.stage.stageWidth / 2; + skeletonSprite.y = Starling.current.stage.stageHeight * 0.9; + + skeletonSprite.state.setAnimationByName(0, "walk", true); + + addChild(skeletonSprite); + juggler.add(skeletonSprite); + + addEventListener(TouchEvent.TOUCH, onTouch); + } + + public function onTouch(e:TouchEvent) { + var touch = e.getTouch(this); + if (touch != null && touch.phase == TouchPhase.ENDED) { + trace("Mouse clicked"); + } + } +} diff --git a/spine-haxe/example/src/Main.hx b/spine-haxe/example/src/Main.hx new file mode 100644 index 000000000..63712f6ab --- /dev/null +++ b/spine-haxe/example/src/Main.hx @@ -0,0 +1,54 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +import Scene.SceneManager; +import openfl.display.Sprite; +import openfl.geom.Rectangle; +import starling.core.Starling; +import starling.events.Event; + +class Main extends Sprite { + private var starlingSingleton:Starling; + + public function new() { + super(); + + starlingSingleton = new Starling(starling.display.Sprite, stage, new Rectangle(0, 0, 800, 600)); + starlingSingleton.supportHighResolutions = true; + starlingSingleton.addEventListener(Event.ROOT_CREATED, onStarlingRootCreated); + } + + private function onStarlingRootCreated(event:Event):Void { + starlingSingleton.removeEventListener(Event.ROOT_CREATED, onStarlingRootCreated); + starlingSingleton.start(); + Starling.current.stage.color = 0x000000; + + SceneManager.getInstance().switchScene(new BasicExample()); + } +} diff --git a/spine-haxe/example/src/Scene.hx b/spine-haxe/example/src/Scene.hx new file mode 100644 index 000000000..bd6d7148b --- /dev/null +++ b/spine-haxe/example/src/Scene.hx @@ -0,0 +1,75 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +import starling.core.Starling; +import starling.display.Sprite; + +class SceneManager { + private static var instance:SceneManager; + + private var currentScene:Sprite; + + private function new() { + // Singleton pattern to ensure only one instance of SceneManager + } + + public static function getInstance():SceneManager { + if (instance == null) { + instance = new SceneManager(); + } + return instance; + } + + public function switchScene(newScene:Scene):Void { + if (currentScene != null) { + currentScene.dispose(); + currentScene.removeFromParent(true); + } + currentScene = newScene; + starling.core.Starling.current.stage.addChild(currentScene); + newScene.load(); + } +} + +abstract class Scene extends Sprite { + var juggler = new starling.animation.Juggler(); + + public function new() { + super(); + Starling.current.juggler.add(juggler); + } + + abstract public function load():Void; + + public override function dispose():Void { + juggler.purge(); + Starling.current.juggler.remove(juggler); + super.dispose(); + } +} diff --git a/spine-haxe/example/src/SequenceExample.hx b/spine-haxe/example/src/SequenceExample.hx new file mode 100644 index 000000000..721d044fc --- /dev/null +++ b/spine-haxe/example/src/SequenceExample.hx @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +import openfl.utils.Assets; +import spine.SkeletonData; +import spine.animation.AnimationStateData; +import spine.atlas.TextureAtlas; +import spine.starling.SkeletonSprite; +import spine.starling.StarlingTextureLoader; +import starling.core.Starling; +import starling.events.TouchEvent; +import starling.events.TouchPhase; + +class SequenceExample extends Scene { + var loadBinary = false; + + public function load():Void { + var atlas = new TextureAtlas(Assets.getText("assets/dragon.atlas"), new StarlingTextureLoader("assets/dragon.atlas")); + var skeletondata = SkeletonData.from(loadBinary ? Assets.getBytes("assets/dragon-ess.skel") : Assets.getText("assets/dragon-ess.json"), atlas); + var animationStateData = new AnimationStateData(skeletondata); + animationStateData.defaultMix = 0.25; + + var skeletonSprite = new SkeletonSprite(skeletondata, animationStateData); + var bounds = skeletonSprite.skeleton.getBounds(); + skeletonSprite.scale = Starling.current.stage.stageWidth / bounds.width * 0.5; + skeletonSprite.x = Starling.current.stage.stageWidth / 2; + skeletonSprite.y = Starling.current.stage.stageHeight * 0.9; + skeletonSprite.state.setAnimationByName(0, "flying", true); + + addChild(skeletonSprite); + juggler.add(skeletonSprite); + + addEventListener(TouchEvent.TOUCH, onTouch); + } + + public function onTouch(e:TouchEvent) { + var touch = e.getTouch(this); + if (touch != null && touch.phase == TouchPhase.ENDED) { + trace("Mouse clicked"); + } + } +} diff --git a/spine-haxe/haxelib.json b/spine-haxe/haxelib.json new file mode 100644 index 000000000..debac7468 --- /dev/null +++ b/spine-haxe/haxelib.json @@ -0,0 +1,27 @@ +{ + "name": "spine-haxe", + "url": "https://github.com/esotericsoftware/spine-runtimes", + "license": "Spine Runtime License", + "tags": [ + "spine", + "2d-animation", + "skeletal-animation", + "starling", + "2d", + "gpu", + "openfl", + "flash", + "air", + "js", + "web", + "cpp" + ], + "description": "The official Spine Runtime for Haxe", + "version": "4.1.0", + "releasenote": "Initial release", + "contributors": [ + "esotericsoftware" + ], + "dependencies": {}, + "classPath": "spine-haxe" +} \ No newline at end of file diff --git a/spine-haxe/project.xml b/spine-haxe/project.xml new file mode 100644 index 000000000..ceeafb6fb --- /dev/null +++ b/spine-haxe/project.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spine-haxe/spine-haxe/spine/BinaryInput.hx b/spine-haxe/spine-haxe/spine/BinaryInput.hx new file mode 100644 index 000000000..dab9e5552 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/BinaryInput.hx @@ -0,0 +1,138 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import haxe.io.FPHelper; +import haxe.io.Bytes; + +class BinaryInput { + private var bytes:Bytes; + private var index:Int = 0; + + public var strings:Array = new Array(); + + public function new(bytes:Bytes) { + this.bytes = bytes; + } + + public function readByte():Int { + var result = bytes.get(index++); + if ((result & 0x80) != 0) { + result |= 0xffffff00; + } + return result; + } + + public function readUnsignedByte():Int { + return bytes.get(index++); + } + + public function readShort():Int { + var ch1 = readUnsignedByte(); + var ch2 = readUnsignedByte(); + var result = ((ch1 << 8) | ch2); + if ((result & 0x8000) != 0) { + result |= 0xFFFF0000; + } + return result; + } + + public function readInt32():Int { + var ch1 = readUnsignedByte(); + var ch2 = readUnsignedByte(); + var ch3 = readUnsignedByte(); + var ch4 = readUnsignedByte(); + var result = (ch1 << 24) | (ch2 << 16) | (ch3 << 8) | ch4; + return result; + } + + public function readInt(optimizePositive:Bool):Int { + var b:Int = readByte(); + var result:Int = b & 0x7F; + if ((b & 0x80) != 0) { + b = readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + } + + public function readStringRef():String { + var idx:Int = readInt(true); + return idx == 0 ? null : strings[idx - 1]; + } + + public function readString():String { + var byteCount:Int = readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars:String = ""; + var i:Int = 0; + while (i < byteCount) { + var b:Int = readByte(); + switch (b >> 4) { + case 12, 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | readByte() & 0x3F)); + i += 2; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (readByte() & 0x3F) << 6 | readByte() & 0x3F)); + i += 3; + default: + chars += String.fromCharCode(b & 0xff); + i++; + } + } + return chars; + } + + public function readFloat():Float { + return FPHelper.i32ToFloat(readInt32()); + } + + public function readBoolean():Bool { + return this.readByte() != 0; + } +} diff --git a/spine-haxe/spine-haxe/spine/BlendMode.hx b/spine-haxe/spine-haxe/spine/BlendMode.hx new file mode 100644 index 000000000..9293ae753 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/BlendMode.hx @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class BlendMode { + public static var normal(default, never):BlendMode = new BlendMode(0, "normal"); + public static var additive(default, never):BlendMode = new BlendMode(1, "additive"); + public static var multiply(default, never):BlendMode = new BlendMode(2, "multiply"); + public static var screen(default, never):BlendMode = new BlendMode(3, "screen"); + + public static var values(default, never):Array = [normal, additive, multiply, screen]; + + public var ordinal(default, null):Int; + public var name(default, null):String; + + public function new(ordinal:Int, name:String) { + this.ordinal = ordinal; + this.name = name; + } + + public static function fromName(name:String):BlendMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/Bone.hx b/spine-haxe/spine-haxe/spine/Bone.hx new file mode 100644 index 000000000..b6461e587 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Bone.hx @@ -0,0 +1,352 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Bone implements Updatable { + static public var yDown:Bool = false; + + private var _data:BoneData; + private var _skeleton:Skeleton; + private var _parent:Bone; + private var _children:Array = new Array(); + + public var x:Float = 0; + public var y:Float = 0; + public var rotation:Float = 0; + public var scaleX:Float = 0; + public var scaleY:Float = 0; + public var shearX:Float = 0; + public var shearY:Float = 0; + public var ax:Float = 0; + public var ay:Float = 0; + public var arotation:Float = 0; + public var ascaleX:Float = 0; + public var ascaleY:Float = 0; + public var ashearX:Float = 0; + public var ashearY:Float = 0; + public var a:Float = 0; + public var b:Float = 0; + public var c:Float = 0; + public var d:Float = 0; + public var worldX:Float = 0; + public var worldY:Float = 0; + public var sorted:Bool = false; + public var active:Bool = false; + + /** @param parent May be null. */ + public function new(data:BoneData, skeleton:Skeleton, parent:Bone) { + if (data == null) + throw new SpineException("data cannot be null."); + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + _data = data; + _skeleton = skeleton; + _parent = parent; + setToSetupPose(); + } + + public function isActive():Bool { + return active; + } + + /** Same as updateWorldTransform(). This method exists for Bone to implement Updatable. */ + public function update():Void { + updateWorldTransformWith(ax, ay, arotation, ascaleX, ascaleY, ashearX, ashearY); + } + + /** Computes the world SRT using the parent bone and this bone's local SRT. */ + public function updateWorldTransform():Void { + updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY); + } + + /** Computes the world SRT using the parent bone and the specified local SRT. */ + public function updateWorldTransformWith(x:Float, y:Float, rotation:Float, scaleX:Float, scaleY:Float, shearX:Float, shearY:Float):Void { + ax = x; + ay = y; + arotation = rotation; + ascaleX = scaleX; + ascaleY = scaleY; + ashearX = shearX; + ashearY = shearY; + + var rotationY:Float = 0; + var la:Float = 0; + var lb:Float = 0; + var lc:Float = 0; + var ld:Float = 0; + var sin:Float = 0; + var cos:Float = 0; + var s:Float = 0; + var sx:Float = skeleton.scaleX; + var sy:Float = skeleton.scaleY * (yDown ? -1 : 1); + + var parent:Bone = _parent; + if (parent == null) { + // Root bone. + rotationY = rotation + 90 + shearY; + a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + b = MathUtils.cosDeg(rotationY) * scaleY * sx; + c = MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + d = MathUtils.sinDeg(rotationY) * scaleY * sy; + worldX = x * sx + skeleton.x; + worldY = y * sy + skeleton.y; + return; + } + + var pa:Float = parent.a, + pb:Float = parent.b, + pc:Float = parent.c, + pd:Float = parent.d; + worldX = pa * x + pb * y + parent.worldX; + worldY = pc * x + pd * y + parent.worldY; + + switch (data.transformMode) { + case TransformMode.normal: + rotationY = rotation + 90 + shearY; + la = MathUtils.cosDeg(rotation + shearX) * scaleX; + lb = MathUtils.cosDeg(rotationY) * scaleY; + lc = MathUtils.sinDeg(rotation + shearX) * scaleX; + ld = MathUtils.sinDeg(rotationY) * scaleY; + a = pa * la + pb * lc; + b = pa * lb + pb * ld; + c = pc * la + pd * lc; + d = pc * lb + pd * ld; + return; + case TransformMode.onlyTranslation: + rotationY = rotation + 90 + shearY; + a = MathUtils.cosDeg(rotation + shearX) * scaleX; + b = MathUtils.cosDeg(rotationY) * scaleY; + c = MathUtils.sinDeg(rotation + shearX) * scaleX; + d = MathUtils.sinDeg(rotationY) * scaleY; + case TransformMode.noRotationOrReflection: + s = pa * pa + pc * pc; + var prx:Float = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + 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; + } + var rx:Float = rotation + shearX - prx; + var ry:Float = rotation + shearY - prx + 90; + la = MathUtils.cosDeg(rx) * scaleX; + lb = MathUtils.cosDeg(ry) * scaleY; + lc = MathUtils.sinDeg(rx) * scaleX; + ld = MathUtils.sinDeg(ry) * scaleY; + a = pa * la - pb * lc; + b = pa * lb - pb * ld; + c = pc * la + pd * lc; + d = pc * lb + pd * ld; + case TransformMode.noScale, TransformMode.noScaleOrReflection: + cos = MathUtils.cosDeg(rotation); + sin = MathUtils.sinDeg(rotation); + var za:Float = (pa * cos + pb * sin) / sx; + var zc:Float = (pc * cos + pd * sin) / sy; + 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 (data.transformMode == TransformMode.noScale && ((pa * pd - pb * pc < 0) != ((sx < 0) != (sy < 0)))) { + s = -s; + } + var r:Float = Math.PI / 2 + Math.atan2(zc, za); + var zb:Float = Math.cos(r) * s; + var zd:Float = Math.sin(r) * s; + la = MathUtils.cosDeg(shearX) * scaleX; + lb = MathUtils.cosDeg(90 + shearY) * scaleY; + lc = MathUtils.sinDeg(shearX) * scaleX; + ld = MathUtils.sinDeg(90 + shearY) * scaleY; + a = za * la + zb * lc; + b = za * lb + zb * ld; + c = zc * la + zd * lc; + d = zc * lb + zd * ld; + } + a *= sx; + b *= sx; + c *= sy; + d *= sy; + } + + public function setToSetupPose():Void { + x = data.x; + y = data.y; + rotation = data.rotation; + scaleX = data.scaleX; + scaleY = data.scaleY; + shearX = data.shearX; + shearY = data.shearY; + } + + public var data(get, never):BoneData; + + private function get_data():BoneData { + return _data; + } + + public var skeleton(get, never):Skeleton; + + private function get_skeleton():Skeleton { + return _skeleton; + } + + public var parent(get, never):Bone; + + private function get_parent():Bone { + return _parent; + } + + public var children(get, never):Array; + + private function get_children():Array { + return _children; + } + + public var worldRotationX(get, never):Float; + + private function get_worldRotationX():Float { + return Math.atan2(c, a) * MathUtils.radDeg; + } + + public var worldRotationY(get, never):Float; + + private function get_worldRotationY():Float { + return Math.atan2(d, b) * MathUtils.radDeg; + } + + public var worldScaleX(get, never):Float; + + private function get_worldScaleX():Float { + return Math.sqrt(a * a + c * c); + } + + public var worldScaleY(get, never):Float; + + private function get_worldScaleY():Float { + return Math.sqrt(b * b + d * d); + } + + /** Computes the individual applied transform values from the world transform. This can be useful to perform processing using + * the applied transform after the world transform has been modified directly (eg, by a constraint). + *

+ * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. */ + public function updateAppliedTransform():Void { + var parent:Bone = parent; + if (parent == null) { + ax = worldX - skeleton.x; + ay = worldY - skeleton.y; + arotation = Math.atan2(c, a) * MathUtils.radDeg; + ascaleX = Math.sqrt(a * a + c * c); + ascaleY = Math.sqrt(b * b + d * d); + ashearX = 0; + ashearY = Math.atan2(a * b + c * d, a * d - b * c) * MathUtils.radDeg; + return; + } + var pa:Float = parent.a, + pb:Float = parent.b, + pc:Float = parent.c, + pd:Float = parent.d; + var pid:Float = 1 / (pa * pd - pb * pc); + var dx:Float = worldX - parent.worldX, + dy:Float = worldY - parent.worldY; + ax = (dx * pd * pid - dy * pb * pid); + ay = (dy * pa * pid - dx * pc * pid); + var ia:Float = pid * pd; + var id:Float = pid * pa; + var ib:Float = pid * pb; + var ic:Float = pid * pc; + var ra:Float = ia * a - ib * c; + var rb:Float = ia * b - ib * d; + var rc:Float = id * c - ic * a; + var rd:Float = id * d - ic * b; + ashearX = 0; + ascaleX = Math.sqrt(ra * ra + rc * rc); + if (scaleX > 0.0001) { + var det:Float = ra * rd - rb * rc; + ascaleY = det / ascaleX; + ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg; + arotation = Math.atan2(rc, ra) * MathUtils.radDeg; + } else { + ascaleX = 0; + ascaleY = Math.sqrt(rb * rb + rd * rd); + ashearY = 0; + arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg; + } + } + + public function worldToLocal(world:Array):Void { + var a:Float = a, b:Float = b, c:Float = c, d:Float = d; + var invDet:Float = 1 / (a * d - b * c); + var x:Float = world[0] - worldX, y:Float = world[1] - worldY; + world[0] = (x * d * invDet - y * b * invDet); + world[1] = (y * a * invDet - x * c * invDet); + } + + public function localToWorld(local:Array):Void { + var localX:Float = local[0], localY:Float = local[1]; + local[0] = localX * a + localY * b + worldX; + local[1] = localX * c + localY * d + worldY; + } + + public function worldToLocalRotation(worldRotation:Float):Float { + var sin:Float = MathUtils.sinDeg(worldRotation), + cos:Float = MathUtils.cosDeg(worldRotation); + return Math.atan2(a * sin - c * cos, d * cos - b * sin) * MathUtils.radDeg + rotation - shearX; + } + + public function localToWorldRotation(localRotation:Float):Float { + localRotation -= rotation - shearX; + var sin:Float = MathUtils.sinDeg(localRotation), + cos:Float = MathUtils.cosDeg(localRotation); + return Math.atan2(cos * c + sin * d, cos * a + sin * b) * MathUtils.radDeg; + } + + public function rotateWorld(degrees:Float):Void { + var a:Float = this.a, + b:Float = this.b, + c:Float = this.c, + d:Float = this.d; + var cos:Float = MathUtils.cosDeg(degrees), + sin:Float = 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; + } + + public function toString():String { + return data.name; + } +} diff --git a/spine-haxe/spine-haxe/spine/BoneData.hx b/spine-haxe/spine-haxe/spine/BoneData.hx new file mode 100644 index 000000000..4c032e66c --- /dev/null +++ b/spine-haxe/spine-haxe/spine/BoneData.hx @@ -0,0 +1,82 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class BoneData { + private var _index:Int; + private var _name:String; + private var _parent:BoneData; + + public var length:Float = 0; + public var x:Float = 0; + public var y:Float = 0; + public var rotation:Float = 0; + public var scaleX:Float = 1; + public var scaleY:Float = 1; + public var shearX:Float = 0; + public var shearY:Float = 0; + public var transformMode:TransformMode = TransformMode.normal; + public var skinRequired:Bool = false; + public var color:Color = new Color(0, 0, 0, 0); + + /** @param parent May be null. */ + public function new(index:Int, name:String, parent:BoneData) { + if (index < 0) + throw new SpineException("index must be >= 0"); + if (name == null) + throw new SpineException("name cannot be null."); + _index = index; + _name = name; + _parent = parent; + } + + public var index(get, never):Int; + + private function get_index():Int { + return _index; + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + /** @return May be null. */ + public var parent(get, never):BoneData; + + private function get_parent():BoneData { + return _parent; + } + + public function toString():String { + return _name; + } +} diff --git a/spine-haxe/spine-haxe/spine/Color.hx b/spine-haxe/spine-haxe/spine/Color.hx new file mode 100644 index 000000000..e9cb7ee01 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Color.hx @@ -0,0 +1,130 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Color { + public static var WHITE:Color = new Color(1, 1, 1, 1); + public static var RED:Color = new Color(1, 0, 0, 1); + public static var GREEN:Color = new Color(0, 1, 0, 1); + public static var BLUE:Color = new Color(0, 0, 1, 1); + public static var MAGENTA:Color = new Color(1, 0, 1, 1); + + public var r:Float = 0; + public var g:Float = 0; + public var b:Float = 0; + public var a:Float = 0; + + public function new(r:Float, g:Float, b:Float, a:Float = 0) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + clamp(); + } + + public function setFromColor(c:Color):Color { + r = c.r; + g = c.g; + b = c.b; + a = c.a; + clamp(); + return this; + } + + public function setFromString(hex:String):Color { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + r = Std.parseInt("0x" + hex.substr(0, 2)) / 255.0; + g = Std.parseInt("0x" + hex.substr(2, 2)) / 255.0; + b = Std.parseInt("0x" + hex.substr(4, 2)) / 255.0; + a = (hex.length != 8 ? 255 : Std.parseInt("0x" + hex.substr(6, 2))) / 255.0; + clamp(); + return this; + } + + public function set(r:Float, g:Float, b:Float, a:Float):Color { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + clamp(); + return this; + } + + public function add(r:Float, g:Float, b:Float, a:Float):Color { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + clamp(); + return this; + } + + public function setFromRgba8888(value:Int):Void { + r = ((value & 0xff000000) >>> 24) / 255; + g = ((value & 0x00ff0000) >>> 16) / 255; + b = ((value & 0x0000ff00) >>> 8) / 255; + a = ((value & 0x000000ff)) / 255; + clamp(); + } + + public function setFromRgb888(value:Int):Void { + r = ((value & 0x00ff0000) >>> 16) / 255; + g = ((value & 0x0000ff00) >>> 8) / 255; + b = ((value & 0x000000ff)) / 255; + clamp(); + } + + private function clamp():Color { + if (r < 0) + r = 0; + else if (r > 1) + r = 1; + + if (g < 0) + g = 0; + else if (g > 1) + g = 1; + + if (b < 0) + b = 0; + else if (b > 1) + b = 1; + + if (a < 0) + a = 0; + else if (a > 1) + a = 1; + return this; + } + + static public function fromString(hex:String):Color { + return new Color(0, 0, 0, 0).setFromString(hex); + } +} diff --git a/spine-haxe/spine-haxe/spine/ConstraintData.hx b/spine-haxe/spine-haxe/spine/ConstraintData.hx new file mode 100644 index 000000000..6bdde8587 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/ConstraintData.hx @@ -0,0 +1,46 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class ConstraintData { + public var name:String; + public var order:Int = 0; + public var skinRequired:Bool = false; + + function new(name:String, order:Int, skinRequired:Bool) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + + public function toString():String { + return name; + } +} diff --git a/spine-haxe/spine-haxe/spine/Event.hx b/spine-haxe/spine-haxe/spine/Event.hx new file mode 100644 index 000000000..ef7856c8f --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Event.hx @@ -0,0 +1,58 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Event { + private var _data:EventData; + + public var time:Float = 0; + public var intValue:Int = 0; + public var floatValue:Float = 0; + public var stringValue:String; + public var volume:Float = 1; + public var balance:Float = 0; + + public function new(time:Float, data:EventData) { + if (data == null) + throw new SpineException("data cannot be null."); + this.time = time; + _data = data; + } + + public var data(get, never):EventData; + + private function get_data():EventData { + return _data; + } + + public function toString():String { + return _data.name != null ? _data.name : "Event?"; + } +} diff --git a/spine-haxe/spine-haxe/spine/EventData.hx b/spine-haxe/spine-haxe/spine/EventData.hx new file mode 100644 index 000000000..75f003db0 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/EventData.hx @@ -0,0 +1,57 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class EventData { + private var _name:String; + + public var intValue:Int = 0; + public var floatValue:Float = 0; + public var stringValue:String; + public var audioPath:String; + public var volume:Float = 1; + public var balance:Float = 0; + + public function new(name:String) { + if (name == null) + throw new SpineException("name cannot be null."); + _name = name; + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + public function toString():String { + return _name; + } +} diff --git a/spine-haxe/spine-haxe/spine/HasTextureRegion.hx b/spine-haxe/spine-haxe/spine/HasTextureRegion.hx new file mode 100644 index 000000000..be37e57c0 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/HasTextureRegion.hx @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +interface HasTextureRegion { + public var path:String; + public var region:TextureRegion; + public var color:Color; + public var sequence:Sequence; + public function updateRegion():Void; +} diff --git a/spine-haxe/spine-haxe/spine/IkConstraint.hx b/spine-haxe/spine-haxe/spine/IkConstraint.hx new file mode 100644 index 000000000..937d0a416 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/IkConstraint.hx @@ -0,0 +1,337 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class IkConstraint implements Updatable { + private var _data:IkConstraintData; + + public var bones:Array; + public var target:Bone; + public var bendDirection:Int = 0; + public var compress:Bool = false; + public var stretch:Bool = false; + public var mix:Float = 0; + public var softness:Float = 0; + public var active:Bool = false; + + public function new(data:IkConstraintData, skeleton:Skeleton) { + if (data == null) + throw new SpineException("data cannot be null."); + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + _data = data; + mix = data.mix; + softness = data.softness; + bendDirection = data.bendDirection; + compress = data.compress; + stretch = data.stretch; + + bones = new Array(); + for (boneData in data.bones) { + bones.push(skeleton.findBone(boneData.name)); + } + target = skeleton.findBone(data.target.name); + } + + public function isActive():Bool { + return active; + } + + public function update():Void { + if (mix == 0) + return; + switch (bones.length) { + case 1: + apply1(bones[0], target.worldX, target.worldY, compress, stretch, _data.uniform, mix); + case 2: + apply2(bones[0], bones[1], target.worldX, target.worldY, bendDirection, stretch, _data.uniform, softness, mix); + } + } + + public var data(get, never):IkConstraintData; + + private function get_data():IkConstraintData { + return _data; + } + + public function toString():String { + return _data.name != null ? _data.name : "IkContstraint?"; + } + + /** Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified in the world + * coordinate system. */ + static public function apply1(bone:Bone, targetX:Float, targetY:Float, compress:Bool, stretch:Bool, uniform:Bool, alpha:Float):Void { + var p:Bone = bone.parent; + var pa:Float = p.a, pb:Float = p.b, pc:Float = p.c, pd:Float = p.d; + var rotationIK:Float = -bone.ashearX - bone.arotation, + tx:Float = 0, + ty:Float = 0; + switch (bone.data.transformMode) { + case TransformMode.onlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + case TransformMode.noRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, pa * pa + pc * pc); + var sa:Float = pa / bone.skeleton.scaleX; + var sc:Float = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg; + var x:Float = targetX - p.worldX, y:Float = targetY - p.worldY; + var d:Float = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + default: + var x:Float = targetX - p.worldX, y:Float = targetY - p.worldY; + var d:Float = pa * pd - pb * pc; + if (Math.abs(d) <= 0.0001) { + tx = 0; + ty = 0; + } else { + 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; + var sx:Float = bone.ascaleX; + var sy:Float = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case TransformMode.noScale, TransformMode.noScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b:Float = bone.data.length * sx, + dd:Float = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var ss:Float = (dd / b - 1) * alpha + 1; + sx *= ss; + if (uniform) + sy *= ss; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + } + + /** Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as possible. The + * target is specified in the world coordinate system. + * @param child Any descendant bone of the parent. */ + static public function apply2(parent:Bone, child:Bone, targetX:Float, targetY:Float, bendDir:Int, stretch:Bool, uniform:Bool, softness:Float, + alpha:Float):Void { + var px:Float = parent.ax; + var py:Float = parent.ay; + var psx:Float = parent.ascaleX; + var sx:Float = psx; + var psy:Float = parent.ascaleY; + var sy:Float = psy; + var csx:Float = child.ascaleX; + var os1:Int; + var os2:Int; + var s2:Int; + 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:Float = child.ax; + var cy:Float; + var cwx:Float; + var cwy:Float; + var a:Float = parent.a; + var b:Float = parent.b; + var c:Float = parent.c; + var d:Float = parent.d; + var u:Bool = Math.abs(psx - psy) <= 0.0001; + if (!u || stretch) { + 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:Bone = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.abs(id) <= 0.0001 ? 0 : 1 / id; + var dx:Float = (x * d - y * b) * id - px, + dy:Float = (y * a - x * c) * id - py; + var l1:Float = Math.sqrt(dx * dx + dy * dy); + var l2:Float = child.data.length * csx; + var a1:Float = 0; + var a2:Float = 0; + if (l1 < 0.0001) { + 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:Float = (x * d - y * b) * id - px; + var ty:Float = (y * a - x * c) * id - py; + var dd:Float = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td:Float = Math.sqrt(dd); + var sd:Float = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p:Float = 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; + } + } + + var breakOuter:Bool = false; + if (u) { + l2 *= psx; + var cos:Float = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) { + cos = -1; + } else if (cos > 1) { + cos = 1; + if (stretch) { + a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + sx *= a; + if (uniform) + sy *= a; + } + } + 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:Float = a * a; + var bb:Float = b * b; + var ta:Float = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1:Float = -2 * bb * l1; + var c2:Float = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q:Float = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0:Float = q / c2, r1:Float = c / q; + var r:Float = 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); + breakOuter = true; + } + } + + if (!breakOuter) { + var minAngle:Float = Math.PI; + var minX:Float = l1 - a; + var minDist:Float = minX * minX; + var minY:Float = 0; + var maxAngle:Float = 0; + var maxX:Float = l1 + a; + var maxDist:Float = maxX * maxX; + var maxY:Float = 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:Float = Math.atan2(cy, cx) * s2; + var rotation:Float = 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, sy, 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/spine-haxe/spine-haxe/spine/IkConstraintData.hx b/spine-haxe/spine-haxe/spine/IkConstraintData.hx new file mode 100644 index 000000000..aa06812bd --- /dev/null +++ b/spine-haxe/spine-haxe/spine/IkConstraintData.hx @@ -0,0 +1,45 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class IkConstraintData extends ConstraintData { + public var bones:Array = new Array(); + public var target:BoneData; + public var mix:Float = 1; + public var bendDirection:Int = 1; + public var compress:Bool = false; + public var stretch:Bool = false; + public var uniform:Bool = false; + public var softness:Float = 0; + + public function new(name:String) { + super(name, 0, false); + } +} diff --git a/spine-haxe/spine-haxe/spine/MathUtils.hx b/spine-haxe/spine-haxe/spine/MathUtils.hx new file mode 100644 index 000000000..e68b03fcf --- /dev/null +++ b/spine-haxe/spine-haxe/spine/MathUtils.hx @@ -0,0 +1,69 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class MathUtils { + static public var PI:Float = Math.PI; + static public var PI2:Float = Math.PI * 2; + static public var radDeg:Float = 180 / Math.PI; + static public var degRad:Float = Math.PI / 180; + + static public function cosDeg(degrees:Float):Float { + return Math.cos(degrees * degRad); + } + + static public function sinDeg(degrees:Float):Float { + return Math.sin(degrees * degRad); + } + + static public function clamp(value:Float, min:Float, max:Float):Float { + if (value < min) + return min; + if (value > max) + return max; + return value; + } + + static public function signum(value:Float):Float { + return value > 0 ? 1 : value < 0 ? -1 : 0; + } + + static public function randomTriangular(min:Float, max:Float):Float { + return randomTriangularWith(min, max, (min + max) * 0.5); + } + + static public function randomTriangularWith(min:Float, max:Float, mode:Float):Float { + var u:Float = Math.random(); + var d:Float = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + } +} diff --git a/spine-haxe/spine-haxe/spine/PathConstraint.hx b/spine-haxe/spine-haxe/spine/PathConstraint.hx new file mode 100644 index 000000000..163fbefd5 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/PathConstraint.hx @@ -0,0 +1,598 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import spine.attachments.PathAttachment; + +class PathConstraint implements Updatable { + private static inline var NONE:Int = -1; + private static inline var BEFORE:Int = -2; + private static inline var AFTER:Int = -3; + private static inline var epsilon:Float = 0.00001; + + private var _data:PathConstraintData; + private var _bones:Array; + + public var target:Slot; + public var position:Float = 0; + public var spacing:Float = 0; + public var mixRotate:Float = 0; + public var mixX:Float = 0; + public var mixY:Float = 0; + + private var _spaces(default, never):Array = new Array(); + private var _positions(default, never):Array = new Array(); + private var _world(default, never):Array = new Array(); + private var _curves(default, never):Array = new Array(); + private var _lengths(default, never):Array = new Array(); + private var _segments(default, never):Array = new Array(); + + public var active:Bool = false; + + public function new(data:PathConstraintData, skeleton:Skeleton) { + if (data == null) + throw new SpineException("data cannot be null."); + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + _data = data; + _bones = new Array(); + for (boneData in data.bones) { + _bones.push(skeleton.findBone(boneData.name)); + } + target = skeleton.findSlot(data.target.name); + position = data.position; + spacing = data.spacing; + mixRotate = data.mixRotate; + mixX = data.mixX; + mixY = data.mixY; + } + + public function isActive():Bool { + return active; + } + + public function update():Void { + var attachment:PathAttachment = cast(target.attachment, PathAttachment); + if (attachment == null) + return; + if (mixRotate == 0 && mixX == 0 && mixY == 0) + return; + + var data:PathConstraintData = _data; + var percentSpacing:Bool = data.spacingMode == SpacingMode.percent; + var rotateMode:RotateMode = data.rotateMode; + var fTangents:Bool = rotateMode == RotateMode.tangent, + fScale:Bool = rotateMode == RotateMode.chainScale; + + var boneCount:Int = _bones.length; + var spacesCount:Int = fTangents ? boneCount : boneCount + 1; + var bones:Array = _bones; + _spaces.resize(spacesCount); + + if (fScale) + _lengths.resize(boneCount); + + var i:Int, + n:Int, + bone:Bone, + setupLength:Float, + x:Float, + y:Float, + length:Float; + switch (data.spacingMode) { + case SpacingMode.percent: + if (fScale) { + n = spacesCount - 1; + for (i in 0...n) { + bone = bones[i]; + setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + _lengths[i] = 0; + } else { + x = setupLength * bone.a; + y = setupLength * bone.c; + _lengths[i] = Math.sqrt(x * x + y * y); + } + } + } + for (i in 1...spacesCount) { + _spaces[i] = spacing; + } + case SpacingMode.proportional: + var sum:Float = 0; + i = 0; + n = spacesCount - 1; + while (i < n) { + bone = bones[i]; + setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (fScale) + _lengths[i] = 0; + _spaces[++i] = spacing; + } else { + x = setupLength * bone.a; + y = setupLength * bone.c; + length = Math.sqrt(x * x + y * y); + if (fScale) + _lengths[i] = length; + _spaces[++i] = length; + sum += length; + } + } + if (sum > 0) { + sum = spacesCount / sum * spacing; + for (i in 1...spacesCount) { + _spaces[i] *= sum; + } + } + default: + var lengthSpacing:Bool = data.spacingMode == SpacingMode.length; + i = 0; + n = spacesCount - 1; + while (i < n) { + bone = bones[i]; + setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (fScale) + _lengths[i] = 0; + _spaces[++i] = spacing; + } else { + x = setupLength * bone.a; + y = setupLength * bone.c; + length = Math.sqrt(x * x + y * y); + if (fScale) + _lengths[i] = length; + _spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; + } + } + } + + var positions:Array = computeWorldPositions(attachment, spacesCount, fTangents); + var boneX:Float = positions[0]; + var boneY:Float = positions[1]; + var offsetRotation:Float = data.offsetRotation; + var tip:Bool = false; + if (offsetRotation == 0) { + tip = data.rotateMode == RotateMode.chain; + } else { + tip = false; + var pa:Bone = target.bone; + offsetRotation *= pa.a * pa.d - pa.b * pa.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } + + i = 0; + var p:Int = 3; + while (i < boneCount) { + var bone:Bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * mixX; + bone.worldY += (boneY - bone.worldY) * mixY; + var x:Float = positions[p]; + var y:Float = positions[p + 1]; + var dx:Float = x - boneX; + var dy:Float = y - boneY; + if (fScale) { + var length = _lengths[i]; + if (length != 0) { + var s:Float = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (mixRotate > 0) { + var a:Float = bone.a, + b:Float = bone.b, + c:Float = bone.c, + d:Float = bone.d, + r:Float, + cos:Float, + sin:Float; + if (fTangents) { + 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:Float = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * mixRotate; + boneY += (length * (sin * a + cos * c) - dy) * mixRotate; + } else { + r += offsetRotation; + } + if (r > Math.PI) { + r -= (Math.PI * 2); + } else if (r < -Math.PI) { + r += (Math.PI * 2); + } + r *= mixRotate; + 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.updateAppliedTransform(); + + i++; + p += 3; + } + } + + private function computeWorldPositions(path:PathAttachment, spacesCount:Int, tangents:Bool):Array { + var position:Float = this.position; + _positions.resize(spacesCount * 3 + 2); + var out:Array = _positions, world:Array; + var closed:Bool = path.closed; + var verticesLength:Int = path.worldVerticesLength; + var curveCount:Int = Std.int(verticesLength / 6); + var prevCurve:Int = NONE; + var multiplier:Float, i:Int; + + if (!path.constantSpeed) { + var lengths:Array = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength:Float = lengths[curveCount]; + if (data.positionMode == PositionMode.percent) + position *= pathLength; + switch (data.spacingMode) { + case SpacingMode.percent: + multiplier = pathLength; + case SpacingMode.proportional: + multiplier = pathLength / spacesCount; + default: + multiplier = 1; + } + + _world.resize(8); + world = _world; + var i:Int = 0; + var o:Int = 0; + var curve:Int = 0; + while (i < spacesCount) { + var space:Float = _spaces[i] * multiplier; + position += space; + var p:Float = position; + + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } else if (p < 0) { + if (prevCurve != BEFORE) { + prevCurve = BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + if (prevCurve != AFTER) { + prevCurve = AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + addAfterPosition(p - pathLength, world, 0, out, o); + continue; + } + + // Determine curve containing position. + while (true) { + var length:Float = lengths[curve]; + if (p > length) { + curve++; + continue; + } + if (curve == 0) { + p /= length; + } else { + var prev:Float = 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); + } + } + 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)); + + i++; + o += 3; + } + return out; + } + + // World vertices. + if (closed) { + verticesLength += 2; + _world.resize(verticesLength); + world = _world; + 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.resize(verticesLength); + world = _world; + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + + // Curve lengths. + _curves.resize(curveCount); + var curves:Array = _curves; + var pathLength:Float = 0; + var x1:Float = world[0], + y1:Float = world[1], + cx1:Float = 0, + cy1:Float = 0, + cx2:Float = 0, + cy2:Float = 0, + x2:Float = 0, + y2:Float = 0; + var tmpx:Float, tmpy:Float, dddfx:Float, dddfy:Float, ddfx:Float, ddfy:Float, dfx:Float, dfy:Float; + var i:Int = 0; + var w:Int = 2; + while (i < curveCount) { + 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; + + i++; + w += 6; + } + + if (data.positionMode == PositionMode.percent) + position *= pathLength; + + switch (data.spacingMode) { + case SpacingMode.percent: + multiplier = pathLength; + case SpacingMode.proportional: + multiplier = pathLength / spacesCount; + default: + multiplier = 1; + } + + var segments:Array = _segments; + var curveLength:Float = 0; + var segment:Int; + i = 0; + var o:Int = 0; + var segment:Int = 0; + while (i < spacesCount) { + var space = _spaces[i] * multiplier; + position += space; + var p = position; + + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + } else if (p < 0) { + addBeforePosition(p, world, 0, out, o); + i++; + o += 3; + continue; + } else if (p > pathLength) { + addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + i++; + o += 3; + continue; + } + + // Determine curve containing position. + var curve = 0; + while (true) { + var length = curves[curve]; + if (p > length) { + curve++; + continue; + } + if (curve == 0) { + p /= length; + } else { + var prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + + // Curve segment lengths. + if (curve != prevCurve) { + prevCurve = curve; + var ii:Int = 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 in 1...8) { + 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; + while (true) { + var length = segments[segment]; + if (p > length) { + segment++; + continue; + } + if (segment == 0) { + p /= length; + } else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + + i++; + o += 3; + } + return out; + } + + private function addBeforePosition(p:Float, temp:Array, i:Int, out:Array, o:Int):Void { + var x1:Float = temp[i]; + var y1:Float = temp[i + 1]; + var dx:Float = temp[i + 2] - x1; + var dy:Float = temp[i + 3] - y1; + var r:Float = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + private function addAfterPosition(p:Float, temp:Array, i:Int, out:Array, o:Int):Void { + var x1:Float = temp[i + 2]; + var y1:Float = temp[i + 3]; + var dx:Float = x1 - temp[i]; + var dy:Float = y1 - temp[i + 1]; + var r:Float = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + private function addCurvePosition(p:Float, x1:Float, y1:Float, cx1:Float, cy1:Float, cx2:Float, cy2:Float, x2:Float, y2:Float, out:Array, o:Int, + tangents:Bool):Void { + if (p == 0 || Math.isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt:Float = p * p; + var ttt:Float = tt * p; + var u:Float = 1 - p; + var uu:Float = u * u; + var uuu:Float = uu * u; + var ut:Float = u * p; + var ut3:Float = ut * 3; + var uut3:Float = u * ut3; + var utt3:Float = ut3 * p; + var x:Float = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, + y:Float = 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)); + } + } + } + + public var bones(get, never):Array; + + private function get_bones():Array { + return _bones; + } + + public var data(get, never):PathConstraintData; + + private function get_data():PathConstraintData { + return _data; + } + + public function toString():String { + return _data.name != null ? _data.name : "PathConstraint?"; + } +} diff --git a/spine-haxe/spine-haxe/spine/PathConstraintData.hx b/spine-haxe/spine-haxe/spine/PathConstraintData.hx new file mode 100644 index 000000000..95e800f38 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/PathConstraintData.hx @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class PathConstraintData extends ConstraintData { + private var _bones:Array = new Array(); + + public var target:SlotData; + public var positionMode:PositionMode = PositionMode.fixed; + public var spacingMode:SpacingMode = SpacingMode.fixed; + public var rotateMode:RotateMode = RotateMode.chain; + public var offsetRotation:Float = 0; + public var position:Float = 0; + public var spacing:Float = 0; + public var mixRotate:Float = 0; + public var mixX:Float = 0; + public var mixY:Float = 0; + + public function new(name:String) { + super(name, 0, false); + } + + public var bones(get, never):Array; + + private function get_bones():Array { + return _bones; + } +} diff --git a/spine-haxe/spine-haxe/spine/Polygon.hx b/spine-haxe/spine-haxe/spine/Polygon.hx new file mode 100644 index 000000000..9fc51d08c --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Polygon.hx @@ -0,0 +1,87 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Polygon { + public var vertices:Array = new Array(); + + public function new() {} + + /** Returns true if the polygon contains the point. */ + public function containsPoint(x:Float, y:Float):Bool { + var nn:Int = vertices.length; + + var prevIndex:Int = nn - 2; + var inside:Bool = false; + var ii:Int = 0; + while (ii < nn) { + var vertexY:Float = vertices[ii + 1]; + var prevY:Float = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX:Float = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + + ii += 2; + } + + return inside; + } + + /** Returns true if the polygon contains the line segment. */ + public function intersectsSegment(x1:Float, y1:Float, x2:Float, y2:Float):Bool { + var nn:Int = vertices.length; + + var width12:Float = x1 - x2, height12:Float = y1 - y2; + var det1:Float = x1 * y2 - y1 * x2; + var x3:Float = vertices[nn - 2]; + var y3:Float = vertices[nn - 1]; + var ii:Int = 0; + while (ii < nn) { + var x4:Float = vertices[ii], y4:Float = vertices[ii + 1]; + var det2:Float = x3 * y4 - y3 * x4; + var width34:Float = x3 - x4, height34:Float = y3 - y4; + var det3:Float = width12 * height34 - height12 * width34; + var x:Float = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y:Float = (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; + + ii += 2; + } + return false; + } +} diff --git a/spine-haxe/spine-haxe/spine/Pool.hx b/spine-haxe/spine-haxe/spine/Pool.hx new file mode 100644 index 000000000..bd80fa9a0 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Pool.hx @@ -0,0 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +#if flash +typedef Function = Dynamic; +#else +typedef Function = haxe.Constraints.Function; +#end + +@:generic class Pool { + private var items:Array; + private var instantiator:Function; + + public function new(instantiator:Void->T) { + this.items = new Array(); + this.instantiator = instantiator; + } + + public function obtain():T { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + } + + public function free(item:T):Void { + if (Std.isOfType(item, Poolable)) + cast(item, Poolable).reset(); + items.push(item); + } + + public function freeAll(items:Array):Void { + for (item in items) { + free(item); + } + } + + public function clear():Void { + items.resize(0); + } +} diff --git a/spine-haxe/spine-haxe/spine/Poolable.hx b/spine-haxe/spine-haxe/spine/Poolable.hx new file mode 100644 index 000000000..8f6524ce5 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Poolable.hx @@ -0,0 +1,34 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +interface Poolable { + function reset():Void; +} diff --git a/spine-haxe/spine-haxe/spine/PositionMode.hx b/spine-haxe/spine-haxe/spine/PositionMode.hx new file mode 100644 index 000000000..9fd0cef97 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/PositionMode.hx @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class PositionMode { + public static var fixed(default, never):PositionMode = new PositionMode("fixed"); + public static var percent(default, never):PositionMode = new PositionMode("percent"); + + public static var values(default, never):Array = [fixed, percent]; + + public var name(default, null):String; + + public function new(name:String) { + this.name = name; + } + + public static function fromName(name:String):PositionMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/Rectangle.hx b/spine-haxe/spine-haxe/spine/Rectangle.hx new file mode 100644 index 000000000..bf0fe00ca --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Rectangle.hx @@ -0,0 +1,15 @@ +package spine; + +class Rectangle { + public var x:Float; + public var y:Float; + public var width:Float; + public var height:Float; + + public function new() { + x = 0; + y = 0; + width = 0; + height = 0; + } +} diff --git a/spine-haxe/spine-haxe/spine/RotateMode.hx b/spine-haxe/spine-haxe/spine/RotateMode.hx new file mode 100644 index 000000000..758a94635 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/RotateMode.hx @@ -0,0 +1,52 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class RotateMode { + public static var tangent(default, never):RotateMode = new RotateMode("tangent"); + public static var chain(default, never):RotateMode = new RotateMode("chain"); + public static var chainScale(default, never):RotateMode = new RotateMode("chainScale"); + + public static var values(default, never):Array = [tangent, chain, chainScale]; + + public var name(default, null):String; + + public function new(name:String) { + this.name = name; + } + + public static function fromName(name:String):RotateMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/Sequence.hx b/spine-haxe/spine-haxe/spine/Sequence.hx new file mode 100644 index 000000000..40b28a1f1 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Sequence.hx @@ -0,0 +1,82 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Sequence { + private static var _nextID = 0; + + public var id = _nextID++; + public var regions:Array; + public var start = 0; + public var digits = 0; + + /** The index of the region to show for the setup pose. */ + public var setupIndex = 0; + + public function new(count:Int) { + this.regions = new Array(); + this.regions.resize(count); + } + + public function copy():Sequence { + var copy = new Sequence(this.regions.length); + for (i in 0...this.regions.length) { + copy.regions[i] = this.regions[i]; + } + copy.start = this.start; + copy.digits = this.digits; + copy.setupIndex = this.setupIndex; + return copy; + } + + public function apply(slot:Slot, attachment:HasTextureRegion) { + var index:Int = slot.sequenceIndex; + if (index == -1) + index = this.setupIndex; + if (index >= this.regions.length) + index = this.regions.length - 1; + var region = this.regions[index]; + if (attachment.region != region) { + attachment.region = region; + attachment.updateRegion(); + } + } + + public function getPath(basePath:String, index:Int):String { + var result = basePath; + var frame = Std.string(this.start + index); + + for (i in 0...(this.digits - frame.length)) { + result += "0"; + } + result += frame; + return result; + } +} diff --git a/spine-haxe/spine-haxe/spine/SequenceMode.hx b/spine-haxe/spine-haxe/spine/SequenceMode.hx new file mode 100644 index 000000000..f20c22b41 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SequenceMode.hx @@ -0,0 +1,58 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class SequenceMode { + public static var hold(default, never):SequenceMode = new SequenceMode("hold", 0); + public static var once(default, never):SequenceMode = new SequenceMode("once", 1); + public static var loop(default, never):SequenceMode = new SequenceMode("loop", 2); + public static var pingpong(default, never):SequenceMode = new SequenceMode("pingpong", 3); + public static var onceReverse(default, never):SequenceMode = new SequenceMode("onceReverse", 4); + public static var loopReverse(default, never):SequenceMode = new SequenceMode("loopReverse", 5); + public static var pingpongReverse(default, never):SequenceMode = new SequenceMode("pingpongReverse", 6); + + public static var values(default, never):Array = [hold, once, loop, pingpong, onceReverse, loopReverse, pingpongReverse]; + + public var name(default, null):String; + public var value:Int; + + public function new(name:String, value:Int) { + this.name = name; + this.value = value; + } + + public static function fromName(name:String):SequenceMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/Skeleton.hx b/spine-haxe/spine-haxe/spine/Skeleton.hx new file mode 100644 index 000000000..8db4a32b8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Skeleton.hx @@ -0,0 +1,635 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import lime.math.Rectangle; +import haxe.ds.StringMap; +import spine.attachments.Attachment; +import spine.attachments.MeshAttachment; +import spine.attachments.PathAttachment; +import spine.attachments.RegionAttachment; + +class Skeleton { + private var _data:SkeletonData; + + public var bones:Array; + public var slots:Array; + public var drawOrder:Array; + public var ikConstraints:Array; + public var transformConstraints:Array; + public var pathConstraints:Array; + + private var _updateCache:Array = new Array(); + private var _skin:Skin; + + public var color:Color = new Color(1, 1, 1, 1); + public var scaleX:Float = 1; + public var scaleY:Float = 1; + public var x:Float = 0; + public var y:Float = 0; + + public function new(data:SkeletonData) { + if (data == null) { + throw new SpineException("data cannot be null."); + } + _data = data; + + bones = new Array(); + for (boneData in data.bones) { + var bone:Bone; + if (boneData.parent == null) { + bone = new Bone(boneData, this, null); + } else { + var parent:Bone = bones[boneData.parent.index]; + bone = new Bone(boneData, this, parent); + parent.children.push(bone); + } + bones.push(bone); + } + + slots = new Array(); + drawOrder = new Array(); + for (slotData in data.slots) { + var bone = bones[slotData.boneData.index]; + var slot:Slot = new Slot(slotData, bone); + slots.push(slot); + drawOrder.push(slot); + } + + ikConstraints = new Array(); + for (ikConstraintData in data.ikConstraints) { + ikConstraints.push(new IkConstraint(ikConstraintData, this)); + } + + transformConstraints = new Array(); + for (transformConstraintData in data.transformConstraints) { + transformConstraints.push(new TransformConstraint(transformConstraintData, this)); + } + + pathConstraints = new Array(); + for (pathConstraintData in data.pathConstraints) { + pathConstraints.push(new PathConstraint(pathConstraintData, this)); + } + + updateCache(); + } + + /** Caches information about bones and constraints. Must be called if bones, constraints, or weighted path attachments are + * added or removed. */ + public function updateCache():Void { + _updateCache.resize(0); + + for (bone in bones) { + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + + if (skin != null) { + var skinBones:Array = skin.bones; + for (i in 0...skin.bones.length) { + var bone:Bone = bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + + // IK first, lowest hierarchy depth first. + var ikCount:Int = ikConstraints.length; + var transformCount:Int = transformConstraints.length; + var pathCount:Int = pathConstraints.length; + var constraintCount:Int = ikCount + transformCount + pathCount; + + var continueOuter:Bool; + for (i in 0...constraintCount) { + continueOuter = false; + for (ikConstraint in ikConstraints) { + if (ikConstraint.data.order == i) { + sortIkConstraint(ikConstraint); + continueOuter = true; + break; + } + } + if (continueOuter) + continue; + for (transformConstraint in transformConstraints) { + if (transformConstraint.data.order == i) { + sortTransformConstraint(transformConstraint); + continueOuter = true; + break; + } + } + if (continueOuter) + continue; + for (pathConstraint in pathConstraints) { + if (pathConstraint.data.order == i) { + sortPathConstraint(pathConstraint); + break; + } + } + } + + for (bone in bones) { + sortBone(bone); + } + } + + private static function contains(list:Array, element:ConstraintData):Bool { + return list.indexOf(element) != -1; + } + + private function sortIkConstraint(constraint:IkConstraint):Void { + constraint.active = constraint.target.isActive() + && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data))); + if (!constraint.active) + return; + + var target:Bone = constraint.target; + sortBone(target); + + var constrained:Array = constraint.bones; + var parent:Bone = constrained[0]; + sortBone(parent); + + if (constrained.length == 1) { + _updateCache.push(constraint); + sortReset(parent.children); + } else { + var child:Bone = constrained[constrained.length - 1]; + sortBone(child); + + _updateCache.push(constraint); + + sortReset(parent.children); + child.sorted = true; + } + + _updateCache.push(constraint); + + sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + } + + private function sortPathConstraint(constraint:PathConstraint):Void { + constraint.active = constraint.target.bone.isActive() + && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data))); + if (!constraint.active) + return; + + var slot:Slot = constraint.target; + var slotIndex:Int = slot.data.index; + var slotBone:Bone = slot.bone; + if (skin != null) + sortPathConstraintAttachment(skin, slotIndex, slotBone); + if (data.defaultSkin != null && data.defaultSkin != skin) { + sortPathConstraintAttachment(data.defaultSkin, slotIndex, slotBone); + } + for (i in 0...data.skins.length) { + sortPathConstraintAttachment(data.skins[i], slotIndex, slotBone); + } + + var attachment:Attachment = slot.attachment; + if (Std.isOfType(attachment, PathAttachment)) + sortPathConstraintAttachment2(attachment, slotBone); + + var constrainedBones:Array = constraint.bones; + for (bone in constrainedBones) { + sortBone(bone); + } + + _updateCache.push(constraint); + + for (bone in constrainedBones) { + sortReset(bone.children); + } + for (bone in constrainedBones) { + bone.sorted = true; + } + } + + private function sortTransformConstraint(constraint:TransformConstraint):Void { + constraint.active = constraint.target.isActive() + && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data))); + if (!constraint.active) + return; + + sortBone(constraint.target); + + var constrainedBones:Array = constraint.bones; + if (constraint.data.local) { + for (bone in constrainedBones) { + sortBone(bone.parent); + sortBone(bone); + } + } else { + for (bone in constrainedBones) { + sortBone(bone); + } + } + + _updateCache.push(constraint); + for (bone in constrainedBones) { + sortReset(bone.children); + } + for (bone in constrainedBones) { + bone.sorted = true; + } + } + + private function sortPathConstraintAttachment(skin:Skin, slotIndex:Int, slotBone:Bone):Void { + var dict:StringMap = skin.attachments[slotIndex]; + if (dict != null) { + for (attachment in dict.keyValueIterator()) { + sortPathConstraintAttachment2(attachment.value, slotBone); + } + } + } + + private function sortPathConstraintAttachment2(attachment:Attachment, slotBone:Bone):Void { + var pathAttachment:PathAttachment = cast(attachment, PathAttachment); + if (pathAttachment == null) + return; + var pathBones:Array = pathAttachment.bones; + if (pathBones == null) { + sortBone(slotBone); + } else { + var i:Int = 0; + var n:Int = pathBones.length; + while (i < n) { + var nn:Int = pathBones[i++]; + nn += i; + while (i < nn) { + sortBone(bones[pathBones[i++]]); + } + } + } + } + + private function sortBone(bone:Bone):Void { + if (bone.sorted) + return; + var parent:Bone = bone.parent; + if (parent != null) + sortBone(parent); + bone.sorted = true; + _updateCache.push(bone); + } + + private function sortReset(bones:Array):Void { + for (bone in bones) { + if (!bone.active) + continue; + if (bone.sorted) + sortReset(bone.children); + bone.sorted = false; + } + } + + /** Updates the world transform for each bone and applies constraints. */ + public function updateWorldTransform():Void { + for (bone in bones) { + 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; + } + + for (updatable in _updateCache) { + updatable.update(); + } + } + + public function updateWorldTransformWith(parent:Bone):Void { + // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection. + var rootBone:Bone = rootBone; + var pa:Float = parent.a, + pb:Float = parent.b, + pc:Float = parent.c, + pd:Float = parent.d; + rootBone.worldX = pa * x + pb * y + parent.worldX; + rootBone.worldY = pc * x + pd * y + parent.worldY; + + var rotationY:Float = rootBone.rotation + 90 + rootBone.shearY; + var la:Float = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX; + var lb:Float = MathUtils.cosDeg(rotationY) * rootBone.scaleY; + var lc:Float = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX; + var ld:Float = MathUtils.sinDeg(rotationY) * rootBone.scaleY; + rootBone.a = (pa * la + pb * lc) * scaleX; + rootBone.b = (pa * lb + pb * ld) * scaleX; + rootBone.c = (pc * la + pd * lc) * scaleY; + rootBone.d = (pc * lb + pd * ld) * scaleY; + + // Update everything except root bone. + for (updatable in _updateCache) { + if (updatable != rootBone) + updatable.update(); + } + } + + /** Sets the bones, constraints, and slots to their setup pose values. */ + public function setToSetupPose():Void { + setBonesToSetupPose(); + setSlotsToSetupPose(); + } + + /** Sets the bones and constraints to their setup pose values. */ + public function setBonesToSetupPose():Void { + for (bone in bones) { + bone.setToSetupPose(); + } + + for (ikConstraint in ikConstraints) { + ikConstraint.mix = ikConstraint.data.mix; + ikConstraint.softness = ikConstraint.data.softness; + ikConstraint.bendDirection = ikConstraint.data.bendDirection; + ikConstraint.compress = ikConstraint.data.compress; + ikConstraint.stretch = ikConstraint.data.stretch; + } + + for (transformConstraint in transformConstraints) { + transformConstraint.mixRotate = transformConstraint.data.mixRotate; + transformConstraint.mixX = transformConstraint.data.mixX; + transformConstraint.mixY = transformConstraint.data.mixY; + transformConstraint.mixScaleX = transformConstraint.data.mixScaleX; + transformConstraint.mixScaleY = transformConstraint.data.mixScaleY; + transformConstraint.mixShearY = transformConstraint.data.mixShearY; + } + + for (pathConstraint in pathConstraints) { + pathConstraint.position = pathConstraint.data.position; + pathConstraint.spacing = pathConstraint.data.spacing; + pathConstraint.mixRotate = pathConstraint.data.mixRotate; + pathConstraint.mixX = pathConstraint.data.mixX; + pathConstraint.mixY = pathConstraint.data.mixY; + } + } + + public function setSlotsToSetupPose():Void { + var i:Int = 0; + for (slot in slots) { + drawOrder[i++] = slot; + slot.setToSetupPose(); + } + } + + public var data(get, never):SkeletonData; + + private function get_data():SkeletonData { + return _data; + } + + public var getUpdateCache(get, never):Array; + + private function get_getUpdateCache():Array { + return _updateCache; + } + + public var rootBone(get, never):Bone; + + private function get_rootBone():Bone { + if (bones.length == 0) + return null; + return bones[0]; + } + + /** @return May be null. */ + public function findBone(boneName:String):Bone { + if (boneName == null) { + throw new SpineException("boneName cannot be null."); + } + for (bone in bones) { + if (bone.data.name == boneName) + return bone; + } + return null; + } + + /** @return -1 if the bone was not found. */ + public function findBoneIndex(boneName:String):Int { + if (boneName == null) { + throw new SpineException("boneName cannot be null."); + } + var i:Int = 0; + for (bone in bones) { + if (bone.data.name == boneName) + return i; + i++; + } + return -1; + } + + /** @return May be null. */ + public function findSlot(slotName:String):Slot { + if (slotName == null) { + throw new SpineException("slotName cannot be null."); + } + for (slot in slots) { + if (slot.data.name == slotName) + return slot; + } + return null; + } + + public var skinName(get, set):String; + + private function set_skinName(skinName:String):String { + var skin:Skin = data.findSkin(skinName); + if (skin == null) + throw new SpineException("Skin not found: " + skinName); + this.skin = skin; + return skinName; + } + + /** @return May be null. */ + private function get_skinName():String { + return _skin == null ? null : _skin.name; + } + + public var skin(get, set):Skin; + + private function get_skin():Skin { + return _skin; + } + + /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#getDefaultSkin() default skin}. + * 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. + * @param newSkin May be null. */ + private function set_skin(newSkin:Skin):Skin { + if (newSkin == _skin) + return null; + if (newSkin != null) { + if (skin != null) { + newSkin.attachAll(this, skin); + } else { + var i:Int = 0; + for (slot in slots) { + var name:String = slot.data.attachmentName; + if (name != null) { + var attachment:Attachment = newSkin.getAttachment(i, name); + if (attachment != null) + slot.attachment = attachment; + } + i++; + } + } + } + _skin = newSkin; + updateCache(); + return _skin; + } + + /** @return May be null. */ + public function getAttachmentForSlotName(slotName:String, attachmentName:String):Attachment { + return getAttachmentForSlotIndex(data.findSlot(slotName).index, attachmentName); + } + + /** @return May be null. */ + public function getAttachmentForSlotIndex(slotIndex:Int, attachmentName:String):Attachment { + if (attachmentName == null) + throw new SpineException("attachmentName cannot be null."); + if (skin != null) { + var attachment:Attachment = skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (data.defaultSkin != null) + return data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + } + + /** @param attachmentName May be null. */ + public function setAttachment(slotName:String, attachmentName:String):Void { + if (slotName == null) + throw new SpineException("slotName cannot be null."); + var i:Int = 0; + for (slot in slots) { + if (slot.data.name == slotName) { + var attachment:Attachment = null; + if (attachmentName != null) { + attachment = getAttachmentForSlotIndex(i, attachmentName); + if (attachment == null) { + throw new SpineException("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + } + slot.attachment = attachment; + return; + } + i++; + } + throw new SpineException("Slot not found: " + slotName); + } + + /** @return May be null. */ + public function findIkConstraint(constraintName:String):IkConstraint { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (ikConstraint in ikConstraints) { + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + } + + /** @return May be null. */ + public function findTransformConstraint(constraintName:String):TransformConstraint { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (transformConstraint in transformConstraints) { + if (transformConstraint.data.name == constraintName) + return transformConstraint; + } + return null; + } + + /** @return May be null. */ + public function findPathConstraint(constraintName:String):PathConstraint { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (pathConstraint in pathConstraints) { + if (pathConstraint.data.name == constraintName) + return pathConstraint; + } + return null; + } + + public function toString():String { + return _data.name != null ? _data.name : "Skeleton?"; + } + + private var _tempVertices = new Array(); + private var _bounds = new Rectangle(); + + public function getBounds():Rectangle { + var minX:Float = Math.POSITIVE_INFINITY; + var minY:Float = Math.POSITIVE_INFINITY; + var maxX:Float = Math.NEGATIVE_INFINITY; + var maxY:Float = Math.NEGATIVE_INFINITY; + for (slot in drawOrder) { + var verticesLength:Int = 0; + var vertices:Array = null; + var attachment:Attachment = slot.attachment; + if (Std.isOfType(attachment, RegionAttachment)) { + verticesLength = 8; + _tempVertices.resize(verticesLength); + vertices = _tempVertices; + cast(attachment, RegionAttachment).computeWorldVertices(slot, vertices, 0, 2); + } else if (Std.isOfType(attachment, MeshAttachment)) { + var mesh:MeshAttachment = cast(attachment, MeshAttachment); + verticesLength = mesh.worldVerticesLength; + _tempVertices.resize(verticesLength); + vertices = _tempVertices; + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + var ii:Int = 0; + var nn:Int = vertices.length; + while (ii < nn) { + var x:Float = vertices[ii], y:Float = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + ii += 2; + } + } + } + _bounds.x = minX; + _bounds.y = minY; + _bounds.width = maxX - minX; + _bounds.height = maxY - minY; + return _bounds; + } +} diff --git a/spine-haxe/spine-haxe/spine/SkeletonBinary.hx b/spine-haxe/spine-haxe/spine/SkeletonBinary.hx new file mode 100644 index 000000000..7a6d97994 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SkeletonBinary.hx @@ -0,0 +1,1270 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import haxe.io.Bytes; +import StringTools; +import spine.animation.AlphaTimeline; +import spine.animation.Animation; +import spine.animation.AttachmentTimeline; +import spine.animation.CurveTimeline1; +import spine.animation.CurveTimeline2; +import spine.animation.CurveTimeline; +import spine.animation.DeformTimeline; +import spine.animation.DrawOrderTimeline; +import spine.animation.EventTimeline; +import spine.animation.IkConstraintTimeline; +import spine.animation.PathConstraintMixTimeline; +import spine.animation.PathConstraintPositionTimeline; +import spine.animation.PathConstraintSpacingTimeline; +import spine.animation.RGB2Timeline; +import spine.animation.RGBA2Timeline; +import spine.animation.RGBATimeline; +import spine.animation.RGBTimeline; +import spine.animation.RotateTimeline; +import spine.animation.ScaleTimeline; +import spine.animation.ScaleXTimeline; +import spine.animation.ScaleYTimeline; +import spine.animation.SequenceTimeline; +import spine.animation.ShearTimeline; +import spine.animation.ShearXTimeline; +import spine.animation.ShearYTimeline; +import spine.animation.Timeline; +import spine.animation.TransformConstraintTimeline; +import spine.animation.TranslateTimeline; +import spine.animation.TranslateXTimeline; +import spine.animation.TranslateYTimeline; +import spine.attachments.Attachment; +import spine.attachments.AttachmentLoader; +import spine.attachments.AttachmentType; +import spine.attachments.BoundingBoxAttachment; +import spine.attachments.ClippingAttachment; +import spine.attachments.MeshAttachment; +import spine.attachments.PathAttachment; +import spine.attachments.PointAttachment; +import spine.attachments.RegionAttachment; +import spine.attachments.VertexAttachment; + +class SkeletonBinary { + public var attachmentLoader:AttachmentLoader; + public var scale:Float = 1; + + private var linkedMeshes:Array = new Array(); + + private static inline var BONE_ROTATE:Int = 0; + private static inline var BONE_TRANSLATE:Int = 1; + private static inline var BONE_TRANSLATEX:Int = 2; + private static inline var BONE_TRANSLATEY:Int = 3; + private static inline var BONE_SCALE:Int = 4; + private static inline var BONE_SCALEX:Int = 5; + private static inline var BONE_SCALEY:Int = 6; + private static inline var BONE_SHEAR:Int = 7; + private static inline var BONE_SHEARX:Int = 8; + private static inline var BONE_SHEARY:Int = 9; + + private static inline var SLOT_ATTACHMENT:Int = 0; + private static inline var SLOT_RGBA:Int = 1; + private static inline var SLOT_RGB:Int = 2; + private static inline var SLOT_RGBA2:Int = 3; + private static inline var SLOT_RGB2:Int = 4; + private static inline var SLOT_ALPHA:Int = 5; + + private static inline var ATTACHMENT_DEFORM = 0; + private static inline var ATTACHMENT_SEQUENCE = 1; + + private static inline var PATH_POSITION:Int = 0; + private static inline var PATH_SPACING:Int = 1; + private static inline var PATH_MIX:Int = 2; + + private static inline var CURVE_LINEAR:Int = 0; + private static inline var CURVE_STEPPED:Int = 1; + private static inline var CURVE_BEZIER:Int = 2; + + public function new(attachmentLoader:AttachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + + public function readSkeletonData(bytes:Bytes):SkeletonData { + // bytes.getData(). = Endian.BIG_ENDIAN; + + var skeletonData:SkeletonData = new SkeletonData(); + skeletonData.name = null; + + var input:BinaryInput = new BinaryInput(bytes); + + var lowHash:Int = input.readInt32(); + var highHash:Int = input.readInt32(); + skeletonData.hash = highHash == 0 && lowHash == 0 ? null : StringTools.hex(highHash) + StringTools.hex(lowHash); + skeletonData.version = input.readString(); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + + var nonessential:Bool = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + + var n:Int = 0; + var nn:Int = 0; + + // Strings. + n = input.readInt(true); + for (i in 0...n) { + input.strings.push(input.readString()); + } + + // Bones. + n = input.readInt(true); + for (i in 0...n) { + var boneName:String = input.readString(); + var boneParent:BoneData = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var boneData:BoneData = new BoneData(i, boneName, boneParent); + boneData.rotation = input.readFloat(); + boneData.x = input.readFloat() * scale; + boneData.y = input.readFloat() * scale; + boneData.scaleX = input.readFloat(); + boneData.scaleY = input.readFloat(); + boneData.shearX = input.readFloat(); + boneData.shearY = input.readFloat(); + boneData.length = input.readFloat() * scale; + boneData.transformMode = TransformMode.values[input.readInt(true)]; + boneData.skinRequired = input.readBoolean(); + if (nonessential) + boneData.color.setFromRgba8888(input.readInt32()); + skeletonData.bones.push(boneData); + } + + // Slots. + n = input.readInt(true); + for (i in 0...n) { + var slotName:String = input.readString(); + var slotBoneData:BoneData = skeletonData.bones[input.readInt(true)]; + var slotData:SlotData = new SlotData(i, slotName, slotBoneData); + slotData.color.setFromRgba8888(input.readInt32()); + + var darkColor:Int = input.readInt32(); + if (darkColor != -1) { + slotData.darkColor = new Color(0, 0, 0); + slotData.darkColor.setFromRgb888(darkColor); + } + + slotData.attachmentName = input.readStringRef(); + slotData.blendMode = BlendMode.values[input.readInt(true)]; + skeletonData.slots.push(slotData); + } + + // IK constraints. + n = input.readInt(true); + for (i in 0...n) { + var ikData:IkConstraintData = new IkConstraintData(input.readString()); + ikData.order = input.readInt(true); + ikData.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (ii in 0...nn) { + ikData.bones.push(skeletonData.bones[input.readInt(true)]); + } + ikData.target = skeletonData.bones[input.readInt(true)]; + ikData.mix = input.readFloat(); + ikData.softness = input.readFloat() * scale; + ikData.bendDirection = input.readByte(); + ikData.compress = input.readBoolean(); + ikData.stretch = input.readBoolean(); + ikData.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(ikData); + } + + // Transform constraints. + n = input.readInt(true); + for (i in 0...n) { + var transformData:TransformConstraintData = new TransformConstraintData(input.readString()); + transformData.order = input.readInt(true); + transformData.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (ii in 0...nn) { + transformData.bones.push(skeletonData.bones[input.readInt(true)]); + } + transformData.target = skeletonData.bones[input.readInt(true)]; + transformData.local = input.readBoolean(); + transformData.relative = input.readBoolean(); + transformData.offsetRotation = input.readFloat(); + transformData.offsetX = input.readFloat() * scale; + transformData.offsetY = input.readFloat() * scale; + transformData.offsetScaleX = input.readFloat(); + transformData.offsetScaleY = input.readFloat(); + transformData.offsetShearY = input.readFloat(); + transformData.mixRotate = input.readFloat(); + transformData.mixX = input.readFloat(); + transformData.mixY = input.readFloat(); + transformData.mixScaleX = input.readFloat(); + transformData.mixScaleY = input.readFloat(); + transformData.mixShearY = input.readFloat(); + skeletonData.transformConstraints.push(transformData); + } + + // Path constraints. + n = input.readInt(true); + for (i in 0...n) { + var pathData:PathConstraintData = new PathConstraintData(input.readString()); + pathData.order = input.readInt(true); + pathData.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (ii in 0...nn) { + pathData.bones.push(skeletonData.bones[input.readInt(true)]); + } + pathData.target = skeletonData.slots[input.readInt(true)]; + pathData.positionMode = PositionMode.values[input.readInt(true)]; + pathData.spacingMode = SpacingMode.values[input.readInt(true)]; + pathData.rotateMode = RotateMode.values[input.readInt(true)]; + pathData.offsetRotation = input.readFloat(); + pathData.position = input.readFloat(); + if (pathData.positionMode == PositionMode.fixed) + pathData.position *= scale; + pathData.spacing = input.readFloat(); + if (pathData.spacingMode == SpacingMode.length || pathData.spacingMode == SpacingMode.fixed) + pathData.spacing *= scale; + pathData.mixRotate = input.readFloat(); + pathData.mixX = input.readFloat(); + pathData.mixY = input.readFloat(); + skeletonData.pathConstraints.push(pathData); + } + + // Default skin. + var defaultSkin:Skin = readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + + // Skins. + { + var i:Int = skeletonData.skins.length; + n = i + input.readInt(true); + while (i < n) { + skeletonData.skins.push(readSkin(input, skeletonData, false, nonessential)); + i++; + } + } + + // Linked meshes. + for (linkedMesh in linkedMeshes) { + var skin:Skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new SpineException("Skin not found: " + linkedMesh.skin); + var parent:Attachment = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent == null) + throw new SpineException("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? cast(parent, VertexAttachment) : linkedMesh.mesh; + linkedMesh.mesh.parentMesh = cast(parent, MeshAttachment); + if (linkedMesh.mesh.region != null) + linkedMesh.mesh.updateRegion(); + } + linkedMeshes.resize(0); + + // Events. + n = input.readInt(true); + for (i in 0...n) { + var data:EventData = 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 (i in 0...n) { + skeletonData.animations.push(readAnimation(input, input.readString(), skeletonData)); + } + return skeletonData; + } + + private function readSkin(input:BinaryInput, skeletonData:SkeletonData, defaultSkin:Bool, nonessential:Bool):Skin { + var skin:Skin = null; + var slotCount:Int = 0; + + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new Skin("default"); + } else { + skin = new Skin(input.readStringRef()); + skin.bones.resize(input.readInt(true)); + for (i in 0...skin.bones.length) { + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + } + + for (i in 0...input.readInt(true)) { + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + } + for (i in 0...input.readInt(true)) { + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + } + for (i in 0...input.readInt(true)) { + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + } + + slotCount = input.readInt(true); + } + + for (i in 0...slotCount) { + var slotIndex:Int = input.readInt(true); + for (ii in 0...input.readInt(true)) { + var name:String = input.readStringRef(); + var attachment:Attachment = readAttachment(input, skeletonData, skin, slotIndex, name, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name, attachment); + } + } + return skin; + } + + private function readSequence(input:BinaryInput):Sequence { + if (!input.readBoolean()) + return null; + var sequence = new Sequence(input.readInt(true)); + sequence.start = input.readInt(true); + sequence.digits = input.readInt(true); + sequence.setupIndex = input.readInt(true); + return sequence; + } + + private function readAttachment(input:BinaryInput, skeletonData:SkeletonData, skin:Skin, slotIndex:Int, attachmentName:String, + nonessential:Bool):Attachment { + var vertexCount:Int; + var vertices:Vertices; + var path:String; + var rotation:Float; + var x:Float; + var y:Float; + var scaleX:Float; + var scaleY:Float; + var width:Float = 0; + var height:Float = 0; + var color:Int; + var mesh:MeshAttachment; + + var name:String = input.readStringRef(); + if (name == null) + name = attachmentName; + + switch (AttachmentType.values[input.readByte()]) { + case AttachmentType.region: + path = input.readStringRef(); + rotation = input.readFloat(); + x = input.readFloat(); + y = input.readFloat(); + scaleX = input.readFloat(); + scaleY = input.readFloat(); + width = input.readFloat(); + height = input.readFloat(); + color = input.readInt32(); + var sequence = readSequence(input); + + if (path == null) + path = name; + var region:RegionAttachment = attachmentLoader.newRegionAttachment(skin, name, path, sequence); + 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; + region.color.setFromRgba8888(color); + region.sequence = sequence; + if (sequence == null) + region.updateRegion(); + return region; + case AttachmentType.boundingbox: + vertexCount = input.readInt(true); + vertices = readVertices(input, vertexCount); + color = nonessential ? input.readInt32() : 0; + + var box:BoundingBoxAttachment = attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + if (vertices.bones.length > 0) + box.bones = vertices.bones; + if (nonessential) + box.color.setFromRgba8888(color); + return box; + case AttachmentType.mesh: + path = input.readStringRef(); + color = input.readInt32(); + vertexCount = input.readInt(true); + var uvs:Array = readFloatArray(input, vertexCount << 1, 1); + var triangles:Array = readShortArray(input); + vertices = readVertices(input, vertexCount); + var hullLength:Int = input.readInt(true); + var sequence = readSequence(input); + var edges:Array = null; + if (nonessential) { + edges = readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + + if (path == null) + path = name; + mesh = attachmentLoader.newMeshAttachment(skin, name, path, sequence); + if (mesh == null) + return null; + mesh.path = path; + mesh.color.setFromRgba8888(color); + if (vertices.bones.length > 0) + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + if (sequence == null) + mesh.updateRegion(); + mesh.hullLength = hullLength << 1; + mesh.sequence = sequence; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + case AttachmentType.linkedmesh: + path = input.readStringRef(); + color = input.readInt32(); + var skinName:String = input.readStringRef(); + var parent:String = input.readStringRef(); + var inheritTimelines:Bool = input.readBoolean(); + var sequence = readSequence(input); + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + + if (path == null) + path = name; + mesh = attachmentLoader.newMeshAttachment(skin, name, path, sequence); + if (mesh == null) + return null; + mesh.path = path; + mesh.color.setFromRgba8888(color); + mesh.sequence = sequence; + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMeshBinary(mesh, skinName, slotIndex, parent, inheritTimelines)); + return mesh; + case AttachmentType.path: + var closed:Bool = input.readBoolean(); + var constantSpeed:Bool = input.readBoolean(); + vertexCount = input.readInt(true); + vertices = readVertices(input, vertexCount); + var lengths:Array = new Array(); + lengths.resize(Std.int(vertexCount / 3)); + for (i in 0...lengths.length) { + lengths[i] = input.readFloat() * scale; + } + color = nonessential ? input.readInt32() : 0; + + var pathAttachment:PathAttachment = attachmentLoader.newPathAttachment(skin, name); + if (pathAttachment == null) + return null; + pathAttachment.closed = closed; + pathAttachment.constantSpeed = constantSpeed; + pathAttachment.worldVerticesLength = vertexCount << 1; + pathAttachment.vertices = vertices.vertices; + if (vertices.bones.length > 0) + pathAttachment.bones = vertices.bones; + pathAttachment.lengths = lengths; + if (nonessential) + pathAttachment.color.setFromRgba8888(color); + return pathAttachment; + case AttachmentType.point: + rotation = input.readFloat(); + x = input.readFloat(); + y = input.readFloat(); + color = nonessential ? input.readInt32() : 0; + + var point:PointAttachment = attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + point.color.setFromRgba8888(color); + return point; + case AttachmentType.clipping: + var endSlotIndex:Int = input.readInt(true); + vertexCount = input.readInt(true); + vertices = readVertices(input, vertexCount); + color = nonessential ? input.readInt32() : 0; + + var clip:ClippingAttachment = attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + if (vertices.bones.length > 0) + clip.bones = vertices.bones; + if (nonessential) + clip.color.setFromRgba8888(color); + return clip; + } + return null; + } + + private function readVertices(input:BinaryInput, vertexCount:Int):Vertices { + var verticesLength:Int = vertexCount << 1; + var vertices:Vertices = new Vertices(); + + var isWeighted:Bool = input.readBoolean(); + if (!isWeighted) { + vertices.vertices = readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights:Array = new Array(); + var bonesArray:Array = new Array(); + for (i in 0...vertexCount) { + var boneCount:Int = input.readInt(true); + bonesArray.push(boneCount); + for (ii in 0...boneCount) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = weights; + vertices.bones = bonesArray; + return vertices; + } + + private function readFloatArray(input:BinaryInput, n:Int, scale:Float):Array { + var array:Array = new Array(); + if (scale == 1) { + for (i in 0...n) { + array.push(input.readFloat()); + } + } else { + for (i in 0...n) { + array.push(input.readFloat() * scale); + } + } + return array; + } + + private function readShortArray(input:BinaryInput):Array { + var n:Int = input.readInt(true); + var array:Array = new Array(); + for (i in 0...n) { + array.push(input.readShort()); + } + return array; + } + + private function readAnimation(input:BinaryInput, name:String, skeletonData:SkeletonData):Animation { + input.readInt(true); // Count of timelines. + var timelines:Array = new Array(); + var i:Int = 0, n:Int = 0, ii:Int = 0, nn:Int = 0; + + var index:Int, slotIndex:Int, timelineType:Int, timelineScale:Float; + var frameCount:Int, + frameLast:Int, + frame:Int, + bezierCount:Int, + bezier:Int; + var time:Float, time2:Float; + + // Slot timelines. + var r:Float, g:Float, b:Float, a:Float; + var r2:Float, g2:Float, b2:Float, a2:Float; + var nr:Float, ng:Float, nb:Float, na:Float; + var nr2:Float, ng2:Float, nb2:Float, na2:Float; + for (i in 0...input.readInt(true)) { + slotIndex = input.readInt(true); + for (ii in 0...input.readInt(true)) { + timelineType = input.readByte(); + frameCount = input.readInt(true); + frameLast = frameCount - 1; + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: + var attachmentTimeline:AttachmentTimeline = new AttachmentTimeline(frameCount, slotIndex); + attachmentTimeline.slotIndex = slotIndex; + for (frame in 0...frameCount) { + attachmentTimeline.setFrame(frame, input.readFloat(), input.readStringRef()); + } + timelines.push(attachmentTimeline); + case SLOT_RGBA: + bezierCount = input.readInt(true); + var rgbaTimeline:RGBATimeline = new RGBATimeline(frameCount, bezierCount, slotIndex); + + time = input.readFloat(); + r = input.readUnsignedByte() / 255.0; + g = input.readUnsignedByte() / 255.0; + b = input.readUnsignedByte() / 255.0; + a = input.readUnsignedByte() / 255.0; + + frame = 0; + bezier = 0; + while (true) { + rgbaTimeline.setFrame(frame, time, r, g, b, a); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + r2 = input.readUnsignedByte() / 255.0; + g2 = input.readUnsignedByte() / 255.0; + b2 = input.readUnsignedByte() / 255.0; + a2 = input.readUnsignedByte() / 255.0; + + switch (input.readByte()) { + case CURVE_STEPPED: + rgbaTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, rgbaTimeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, rgbaTimeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, rgbaTimeline, bezier++, frame, 2, time, time2, b, b2, 1); + setBezier(input, rgbaTimeline, bezier++, frame, 3, time, time2, a, a2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + a = a2; + + frame++; + } + timelines.push(rgbaTimeline); + case SLOT_RGB: + bezierCount = input.readInt(true); + var rgbTimeline:RGBTimeline = new RGBTimeline(frameCount, bezierCount, slotIndex); + + time = input.readFloat(); + r = input.readUnsignedByte() / 255.0; + g = input.readUnsignedByte() / 255.0; + b = input.readUnsignedByte() / 255.0; + + frame = 0; + bezier = 0; + while (true) { + rgbTimeline.setFrame(frame, time, r, g, b); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + r2 = input.readUnsignedByte() / 255.0; + g2 = input.readUnsignedByte() / 255.0; + b2 = input.readUnsignedByte() / 255.0; + + switch (input.readByte()) { + case CURVE_STEPPED: + rgbTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, rgbTimeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, rgbTimeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, rgbTimeline, bezier++, frame, 2, time, time2, b, b2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + + frame++; + } + timelines.push(rgbTimeline); + case SLOT_RGBA2: + bezierCount = input.readInt(true); + var rgba2Timeline:RGBA2Timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex); + + time = input.readFloat(); + r = input.readUnsignedByte() / 255.0; + g = input.readUnsignedByte() / 255.0; + b = input.readUnsignedByte() / 255.0; + a = input.readUnsignedByte() / 255.0; + r2 = input.readUnsignedByte() / 255.0; + g2 = input.readUnsignedByte() / 255.0; + b2 = input.readUnsignedByte() / 255.0; + + frame = 0; + bezier = 0; + while (true) { + rgba2Timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + nr = input.readUnsignedByte() / 255.0; + ng = input.readUnsignedByte() / 255.0; + nb = input.readUnsignedByte() / 255.0; + na = input.readUnsignedByte() / 255.0; + nr2 = input.readUnsignedByte() / 255.0; + ng2 = input.readUnsignedByte() / 255.0; + nb2 = input.readUnsignedByte() / 255.0; + + switch (input.readByte()) { + case CURVE_STEPPED: + rgba2Timeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, rgba2Timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 3, time, time2, a, na, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 4, time, time2, r2, nr2, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 5, time, time2, g2, ng2, 1); + setBezier(input, rgba2Timeline, bezier++, frame, 6, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + a = na; + r2 = nr2; + g2 = ng2; + b2 = nb2; + + frame++; + } + timelines.push(rgba2Timeline); + case SLOT_RGB2: + bezierCount = input.readInt(true); + var rgb2Timeline:RGB2Timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex); + + time = input.readFloat(); + r = input.readUnsignedByte() / 255.0; + g = input.readUnsignedByte() / 255.0; + b = input.readUnsignedByte() / 255.0; + r2 = input.readUnsignedByte() / 255.0; + g2 = input.readUnsignedByte() / 255.0; + b2 = input.readUnsignedByte() / 255.0; + + frame = 0; + bezier = 0; + while (true) { + rgb2Timeline.setFrame(frame, time, r, g, b, r2, g2, b2); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + nr = input.readUnsignedByte() / 255.0; + ng = input.readUnsignedByte() / 255.0; + nb = input.readUnsignedByte() / 255.0; + nr2 = input.readUnsignedByte() / 255.0; + ng2 = input.readUnsignedByte() / 255.0; + nb2 = input.readUnsignedByte() / 255.0; + + switch (input.readByte()) { + case CURVE_STEPPED: + rgb2Timeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, rgb2Timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, rgb2Timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, rgb2Timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, rgb2Timeline, bezier++, frame, 3, time, time2, r2, nr2, 1); + setBezier(input, rgb2Timeline, bezier++, frame, 4, time, time2, g2, ng2, 1); + setBezier(input, rgb2Timeline, bezier++, frame, 5, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + r2 = nr2; + g2 = ng2; + b2 = nb2; + + frame++; + } + timelines.push(rgb2Timeline); + case SLOT_ALPHA: + var alphaTimeline:AlphaTimeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex); + time = input.readFloat(); + a = input.readUnsignedByte() / 255; + + frame = 0; + bezier = 0; + while (true) { + alphaTimeline.setFrame(frame, time, a); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + a2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + alphaTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, alphaTimeline, bezier++, frame, 0, time, time2, a, a2, 1); + } + time = time2; + a = a2; + + frame++; + } + timelines.push(alphaTimeline); + } + } + } + + // Bone timelines. + for (i in 0...input.readInt(true)) { + var boneIndex:Int = input.readInt(true); + for (ii in 0...input.readInt(true)) { + timelineType = input.readByte(); + frameCount = input.readInt(true); + bezierCount = input.readInt(true); + switch (timelineType) { + case BONE_ROTATE: + timelines.push(readTimeline(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_TRANSLATE: + timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale)); + case BONE_TRANSLATEX: + timelines.push(readTimeline(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale)); + case BONE_TRANSLATEY: + timelines.push(readTimeline(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale)); + case BONE_SCALE: + timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_SCALEX: + timelines.push(readTimeline(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_SCALEY: + timelines.push(readTimeline(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_SHEAR: + timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_SHEARX: + timelines.push(readTimeline(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1)); + case BONE_SHEARY: + timelines.push(readTimeline(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1)); + } + } + } + + // IK constraint timelines. + for (i in 0...input.readInt(true)) { + index = input.readInt(true); + frameCount = input.readInt(true); + frameLast = frameCount - 1; + var ikTimeline:IkConstraintTimeline = new IkConstraintTimeline(frameCount, input.readInt(true), index); + time = input.readFloat(); + var mix:Float = input.readFloat(), + softness:Float = input.readFloat() * scale; + + frame = 0; + bezier = 0; + while (true) { + ikTimeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + var mix2:Float = input.readFloat(), + softness2:Float = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + ikTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, ikTimeline, bezier++, frame, 0, time, time2, mix, mix2, 1); + setBezier(input, ikTimeline, bezier++, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + + frame++; + } + timelines.push(ikTimeline); + } + + // Transform constraint timelines. + var mixRotate:Float, mixRotate2:Float; + var mixX:Float, mixX2:Float; + var mixY:Float, mixY2:Float; + for (i in 0...input.readInt(true)) { + index = input.readInt(true); + frameCount = input.readInt(true); + + frameLast = frameCount - 1; + var transformTimeline:TransformConstraintTimeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index); + time = input.readFloat(); + mixRotate = input.readFloat(); + mixX = input.readFloat(); + mixY = input.readFloat(); + var mixScaleX:Float = input.readFloat(), + mixScaleY:Float = input.readFloat(), + mixShearY:Float = input.readFloat(); + frame = 0; + bezier = 0; + while (true) { + transformTimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + if (frame == frameLast) + break; + + time2 = input.readFloat(); + mixRotate2 = input.readFloat(); + mixX2 = input.readFloat(); + mixY2 = input.readFloat(); + var mixScaleX2:Float = input.readFloat(), + mixScaleY2:Float = input.readFloat(), + mixShearY2:Float = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + transformTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, transformTimeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, transformTimeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, transformTimeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + setBezier(input, transformTimeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + setBezier(input, transformTimeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + setBezier(input, transformTimeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixShearY = mixShearY2; + + frame++; + } + + timelines.push(transformTimeline); + } + + // Path constraint timelines. + for (i in 0...input.readInt(true)) { + index = input.readInt(true); + var data:PathConstraintData = skeletonData.pathConstraints[index]; + for (ii in 0...input.readInt(true)) { + switch (input.readByte()) { + case PATH_POSITION: + timelines.push(readTimeline(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), + data.positionMode == PositionMode.fixed ? scale : 1)); + case PATH_SPACING: + timelines.push(readTimeline(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), + data.spacingMode == SpacingMode.length + || data.spacingMode == SpacingMode.fixed ? scale : 1)); + case PATH_MIX: + var mixTimeline:PathConstraintMixTimeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index); + time = input.readFloat(); + mixRotate = input.readFloat(); + mixX = input.readFloat(); + mixY = input.readFloat(); + + frame = 0; + bezier = 0; + frameLast = mixTimeline.getFrameCount() - 1; + while (true) { + mixTimeline.setFrame(frame, time, mixRotate, mixX, mixY); + if (frame == frameLast) + break; + time2 = input.readFloat(); + mixRotate2 = input.readFloat(); + mixX2 = input.readFloat(); + mixY2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + mixTimeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, mixTimeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, mixTimeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, mixTimeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + + frame++; + } + timelines.push(mixTimeline); + } + } + } + + // Deform timelines. + for (i in 0...input.readInt(true)) { + var skin:Skin = skeletonData.skins[input.readInt(true)]; + for (ii in 0...input.readInt(true)) { + slotIndex = input.readInt(true); + for (iii in 0...input.readInt(true)) { + var attachmentName:String = input.readStringRef(); + var attachment = skin.getAttachment(slotIndex, attachmentName); + if (attachment == null) + throw new SpineException("Vertex attachment not found: " + attachmentName); + var timelineType = input.readByte(); + frameCount = input.readInt(true); + frameLast = frameCount - 1; + + switch (timelineType) { + case ATTACHMENT_DEFORM: + var vertexAttachment = cast(attachment, VertexAttachment); + var weighted:Bool = vertexAttachment.bones != null; + var vertices:Array = vertexAttachment.vertices; + var deformLength:Int = weighted ? Std.int(vertices.length / 3 * 2) : vertices.length; + + bezierCount = input.readInt(true); + var deformTimeline:DeformTimeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment); + + time = input.readFloat(); + frame = 0; + bezier = 0; + while (true) { + var deform:Array; + var end:Int = input.readInt(true); + if (end == 0) { + if (weighted) { + deform = new Array(); + deform.resize(deformLength); + } else { + deform = vertices; + } + } else { + var v:Int, vn:Int; + deform = new Array(); + deform.resize(deformLength); + var start:Int = input.readInt(true); + end += start; + if (scale == 1) { + for (v in start...end) { + deform[v] = input.readFloat(); + } + } else { + for (v in start...end) { + deform[v] = input.readFloat() * scale; + } + } + if (!weighted) { + for (v in 0...deform.length) { + deform[v] += vertices[v]; + } + } + } + + deformTimeline.setFrame(frame, time, deform); + if (frame == frameLast) + break; + time2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + deformTimeline.setStepped(frame); + case CURVE_BEZIER: + SkeletonBinary.setBezier(input, deformTimeline, bezier++, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + + frame++; + } + timelines.push(deformTimeline); + case ATTACHMENT_SEQUENCE: + var timeline = new SequenceTimeline(frameCount, slotIndex, cast(attachment, HasTextureRegion)); + for (frame in 0...frameCount) { + var time = input.readFloat(); + var modeAndIndex = input.readInt32(); + timeline.setFrame(frame, time, SequenceMode.values[modeAndIndex & 0xf], modeAndIndex >> 4, input.readFloat()); + } + timelines.push(timeline); + break; + } + } + } + } + + // Draw order timelines. + var drawOrderCount:Int = input.readInt(true); + if (drawOrderCount > 0) { + var drawOrderTimeline:DrawOrderTimeline = new DrawOrderTimeline(drawOrderCount); + var slotCount:Int = skeletonData.slots.length; + for (i in 0...drawOrderCount) { + time = input.readFloat(); + var offsetCount:Int = input.readInt(true); + var drawOrder:Array = new Array(); + drawOrder.resize(slotCount); + var ii:Int = slotCount - 1; + while (ii >= 0) { + drawOrder[ii--] = -1; + } + var unchanged:Array = new Array(); + unchanged.resize(slotCount - offsetCount); + var originalIndex:Int = 0, unchangedIndex:Int = 0; + for (ii in 0...offsetCount) { + 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. + ii = slotCount - 1; + while (ii >= 0) { + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + ii--; + } + drawOrderTimeline.setFrame(i, time, drawOrder); + } + timelines.push(drawOrderTimeline); + } + + // Event timelines. + var eventCount:Int = input.readInt(true); + if (eventCount > 0) { + var eventTimeline:EventTimeline = new EventTimeline(eventCount); + for (i in 0...eventCount) { + time = input.readFloat(); + var eventData:EventData = skeletonData.events[input.readInt(true)]; + var event: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(); + } + eventTimeline.setFrame(i, event); + } + timelines.push(eventTimeline); + } + + var duration:Float = 0; + for (i in 0...timelines.length) { + duration = Math.max(duration, timelines[i].getDuration()); + } + return new Animation(name, timelines, duration); + } + + static private function readTimeline(input:BinaryInput, timeline:CurveTimeline1, scale:Float):CurveTimeline1 { + var time:Float = input.readFloat(), + value:Float = input.readFloat() * scale; + + var frame:Int = 0, + bezier:Int = 0, + frameLast:Int = timeline.getFrameCount() - 1; + while (true) { + timeline.setFrame(frame, time, value); + if (frame == frameLast) + break; + + var time2:Float = input.readFloat(), + value2:Float = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale); + } + time = time2; + value = value2; + + frame++; + } + return timeline; + } + + static private function readTimeline2(input:BinaryInput, timeline:CurveTimeline2, scale:Float):CurveTimeline2 { + var time:Float = input.readFloat(), + value1:Float = input.readFloat() * scale, + value2:Float = input.readFloat() * scale; + + var frame:Int = 0, + bezier:Int = 0, + frameLast:Int = timeline.getFrameCount() - 1; + while (true) { + timeline.setFrame(frame, time, value1, value2); + if (frame == frameLast) + break; + + var time2:Float = input.readFloat(), + nvalue1:Float = input.readFloat() * scale, + nvalue2:Float = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale); + setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + + frame++; + } + return timeline; + } + + static private function setBezier(input:BinaryInput, timeline:CurveTimeline, bezier:Int, frame:Int, value:Float, time1:Float, time2:Float, value1:Float, + value2:Float, scale:Float):Void { + timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, + time2, value2); + } +} + +class Vertices { + public var vertices:Array = new Array(); + public var bones:Array = new Array(); + + public function new() {} +} + +class LinkedMeshBinary { + public var parent(default, null):String; + public var skin(default, null):String; + public var slotIndex(default, null):Int; + public var mesh(default, null):MeshAttachment; + public var inheritTimeline(default, null):Bool; + + public function new(mesh:MeshAttachment, skin:String, slotIndex:Int, parent:String, inheritTimeline:Bool) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritTimeline = inheritTimeline; + } +} diff --git a/spine-haxe/spine-haxe/spine/SkeletonClipping.hx b/spine-haxe/spine-haxe/spine/SkeletonClipping.hx new file mode 100644 index 000000000..6289220ef --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SkeletonClipping.hx @@ -0,0 +1,347 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import spine.attachments.ClippingAttachment; + +class SkeletonClipping { + private var triangulator:Triangulator = new Triangulator(); + private var clippingPolygon:Array = new Array(); + private var clipOutput:Array = new Array(); + + public var clippedVertices:Array = new Array(); + public var clippedUvs:Array = new Array(); + public var clippedTriangles:Array = new Array(); + + private var scratch:Array = new Array(); + + private var clipAttachment:ClippingAttachment; + private var clippingPolygons:Array>; + + public function new() {} + + public function clipStart(slot:Slot, clip:ClippingAttachment):Int { + if (clipAttachment != null) + return 0; + clipAttachment = clip; + clippingPolygon.resize(clip.worldVerticesLength); + clip.computeWorldVertices(slot, 0, clippingPolygon.length, clippingPolygon, 0, 2); + SkeletonClipping.makeClockwise(clippingPolygon); + clippingPolygons = triangulator.decompose(clippingPolygon, triangulator.triangulate(clippingPolygon)); + for (polygon in clippingPolygons) { + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + } + + public function clipEndWithSlot(slot:Slot):Void { + if (clipAttachment != null && clipAttachment.endSlot == slot.data) + clipEnd(); + } + + public function clipEnd():Void { + if (clipAttachment == null) + return; + clipAttachment = null; + clippingPolygons = null; + clippedVertices.resize(0); + clippedUvs.resize(0); + clippedTriangles.resize(0); + clippingPolygon.resize(0); + clipOutput.resize(0); + } + + public function isClipping():Bool { + return clipAttachment != null; + } + + public function clipTriangles(vertices:Array, triangles:Array, trianglesLength:Float, uvs:Array):Void { + var polygonsCount:Int = clippingPolygons.length; + var index:Int = 0; + clippedVertices.resize(0); + clippedUvs.resize(0); + clippedTriangles.resize(0); + var i:Int = 0; + while (i < trianglesLength) { + var vertexOffset:Int = triangles[i] << 1; + var x1:Float = vertices[vertexOffset], + y1:Float = vertices[vertexOffset + 1]; + var u1:Float = uvs[vertexOffset], v1:Float = uvs[vertexOffset + 1]; + + vertexOffset = triangles[i + 1] << 1; + var x2:Float = vertices[vertexOffset], + y2:Float = vertices[vertexOffset + 1]; + var u2:Float = uvs[vertexOffset], v2:Float = uvs[vertexOffset + 1]; + + vertexOffset = triangles[i + 2] << 1; + var x3:Float = vertices[vertexOffset], + y3:Float = vertices[vertexOffset + 1]; + var u3:Float = uvs[vertexOffset], v3:Float = uvs[vertexOffset + 1]; + + for (p in 0...polygonsCount) { + var s:Int = clippedVertices.length; + var clippedVerticesItems:Array; + var clippedUvsItems:Array; + var clippedTrianglesItems:Array; + if (this.clip(x1, y1, x2, y2, x3, y3, clippingPolygons[p], clipOutput)) { + var clipOutputLength:Int = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0:Float = y2 - y3, + d1:Float = x3 - x2, + d2:Float = x1 - x3, + d4:Float = y3 - y1; + var d:Float = 1 / (d0 * d2 + d1 * (y1 - y3)); + + var clipOutputCount:Int = clipOutputLength >> 1; + var clipOutputItems:Array = clipOutput; + clippedVerticesItems = clippedVertices; + clippedVerticesItems.resize(s + clipOutputLength); + clippedUvsItems = clippedUvs; + clippedUvsItems.resize(s + clipOutputLength); + + var ii:Int = 0; + while (ii < clipOutputLength) { + var x:Float = clipOutputItems[ii], + y:Float = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + var c0:Float = x - x3, c1:Float = y - y3; + var a:Float = (d0 * c0 + d1 * c1) * d; + var b:Float = (d4 * c0 + d2 * c1) * d; + var c:Float = 1 - a - b; + clippedUvsItems[s] = u1 * a + u2 * b + u3 * c; + clippedUvsItems[s + 1] = v1 * a + v2 * b + v3 * c; + s += 2; + + ii += 2; + } + + s = clippedTriangles.length; + clippedTrianglesItems = clippedTriangles; + clippedTrianglesItems.resize(s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (ii in 1...clipOutputCount) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } else { + clippedVerticesItems = clippedVertices; + clippedVerticesItems.resize(s + 3 * 2); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = x2; + clippedVerticesItems[s + 3] = y2; + clippedVerticesItems[s + 4] = x3; + clippedVerticesItems[s + 5] = y3; + + clippedUvsItems = clippedUvs; + clippedUvsItems.resize(s + 3 * 2); + clippedUvsItems[s] = u1; + clippedUvsItems[s + 1] = v1; + clippedUvsItems[s + 2] = u2; + clippedUvsItems[s + 3] = v2; + clippedUvsItems[s + 4] = u3; + clippedUvsItems[s + 5] = v3; + + s = clippedTriangles.length; + clippedTrianglesItems = clippedTriangles; + clippedTrianglesItems.resize(s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + break; + } + } + + i += 3; + } + } + + /** 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. */ + public function clip(x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, y3:Float, clippingArea:Array, output:Array):Bool { + var originalOutput:Array = output; + var clipped:Bool = false; + + // Avoid copy at the end. + var input:Array = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = scratch; + } else { + input = scratch; + } + + input.resize(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.resize(0); + + var clippingVertices:Array = clippingArea; + var clippingVerticesLast:Int = clippingArea.length - 4; + var c0:Float, c2:Float, s:Float, ua:Float; + var i:Int = 0; + var n:Int = 0; + while (true) { + var edgeX:Float = clippingVertices[i], + edgeY:Float = clippingVertices[i + 1]; + var edgeX2:Float = clippingVertices[i + 2], + edgeY2:Float = clippingVertices[i + 3]; + var deltaX:Float = edgeX - edgeX2, deltaY:Float = edgeY - edgeY2; + + var inputVertices:Array = input; + var inputVerticesLength:Int = input.length - 2, + outputStart:Int = output.length; + var ii:Int = 0; + while (ii < inputVerticesLength) { + var inputX:Float = inputVertices[ii], + inputY:Float = inputVertices[ii + 1]; + var inputX2:Float = inputVertices[ii + 2], + inputY2:Float = inputVertices[ii + 3]; + var side2:Bool = 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); + ii += 2; + continue; + } + // v1 inside, v2 outside + c0 = inputY2 - inputY; + c2 = inputX2 - inputX; + s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + 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 + c0 = inputY2 - inputY; + c2 = inputX2 - inputX; + s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + 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; + + ii += 2; + } + + if (outputStart == output.length) { + // All edges outside. + originalOutput.resize(0); + return true; + } + + output.push(output[0]); + output.push(output[1]); + + if (i == clippingVerticesLast) + break; + var temp:Array = output; + output = input; + output.resize(0); + input = temp; + + i += 2; + } + + if (originalOutput != output) { + originalOutput.resize(0); + n = output.length - 2; + for (i in 0...n) { + originalOutput[i] = output[i]; + } + } else { + originalOutput.resize(originalOutput.length - 2); + } + + return clipped; + } + + public static function makeClockwise(polygon:Array):Void { + var vertices:Array = polygon; + var verticeslength:Int = polygon.length; + + var area:Float = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1]; + var p1x:Float = 0, p1y:Float = 0, p2x:Float = 0, p2y:Float = 0; + var i:Int = 0; + var n:Int = verticeslength - 3; + while (i < n) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + i += 2; + } + if (area < 0) + return; + + i = 0; + n = verticeslength >> 1; + var lastX:Int = verticeslength - 2; + while (i < n) { + var x:Float = vertices[i], y:Float = vertices[i + 1]; + var other:Int = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + i += 2; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/SkeletonData.hx b/spine-haxe/spine-haxe/spine/SkeletonData.hx new file mode 100644 index 000000000..7bb0ed4d8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SkeletonData.hx @@ -0,0 +1,220 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import haxe.io.Bytes; +import openfl.utils.Assets; +import spine.animation.Animation; +import spine.atlas.TextureAtlas; +import spine.attachments.AtlasAttachmentLoader; + +class SkeletonData { + /** May be null. */ + public var name:String; + + public var bones:Array = new Array(); // Ordered parents first. + public var slots:Array = new Array(); // Setup pose draw order. + public var skins:Array = new Array(); + public var defaultSkin:Skin; + public var events:Array = new Array(); + public var animations:Array = new Array(); + public var ikConstraints:Array = new Array(); + public var transformConstraints:Array = new Array(); + public var pathConstraints:Array = new Array(); + public var x:Float = 0; + public var y:Float = 0; + public var width:Float = 0; + public var height:Float = 0; + public var version:String; + public var hash:String; + public var fps:Float = 0; + public var imagesPath:String; + public var audioPath:String; + + public static function from(data:Dynamic, atlas:TextureAtlas, scale:Float = 1.0):SkeletonData { + if (Std.isOfType(data, Bytes)) { + var loader = new SkeletonBinary(new AtlasAttachmentLoader(atlas)); + loader.scale = scale; + return loader.readSkeletonData(cast(data, Bytes)); + } else if (Std.isOfType(data, String)) { + var loader = new SkeletonJson(new AtlasAttachmentLoader(atlas)); + loader.scale = scale; + return loader.readSkeletonData(cast(data, String)); + } else { + throw new SpineException("Data must either be a String (.json) or Bytes (.skel) instance."); + } + } + + public function new() {} + + // --- Bones. + + /** @return May be null. */ + public function findBone(boneName:String):BoneData { + if (boneName == null) + throw new SpineException("boneName cannot be null."); + for (i in 0...bones.length) { + var bone:BoneData = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + } + + /** @return -1 if the bone was not found. */ + public function findBoneIndex(boneName:String):Int { + if (boneName == null) + throw new SpineException("boneName cannot be null."); + for (i in 0...bones.length) { + if (bones[i].name == boneName) + return i; + } + return -1; + } + + // --- Slots. + + /** @return May be null. */ + public function findSlot(slotName:String):SlotData { + if (slotName == null) + throw new SpineException("slotName cannot be null."); + for (i in 0...slots.length) { + var slot:SlotData = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + } + + // --- Skins. + + /** @return May be null. */ + public function findSkin(skinName:String):Skin { + if (skinName == null) + throw new SpineException("skinName cannot be null."); + for (skin in skins) { + if (skin.name == skinName) + return skin; + } + return null; + } + + // --- Events. + + /** @return May be null. */ + public function findEvent(eventName:String):EventData { + if (eventName == null) + throw new SpineException("eventName cannot be null."); + for (eventData in events) { + if (eventData.name == eventName) + return eventData; + } + return null; + } + + // --- Animations. + + /** @return May be null. */ + public function findAnimation(animationName:String):Animation { + if (animationName == null) + throw new SpineException("animationName cannot be null."); + for (animation in animations) { + if (animation.name == animationName) + return animation; + } + return null; + } + + // --- IK constraints. + + /** @return May be null. */ + public function findIkConstraint(constraintName:String):IkConstraintData { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (ikConstraintData in ikConstraints) { + if (ikConstraintData.name == constraintName) + return ikConstraintData; + } + return null; + } + + // --- Transform constraints. + + /** @return May be null. */ + public function findTransformConstraint(constraintName:String):TransformConstraintData { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (transformConstraintData in transformConstraints) { + if (transformConstraintData.name == constraintName) + return transformConstraintData; + } + return null; + } + + /** @return -1 if the transform constraint was not found. */ + public function findTransformConstraintIndex(transformConstraintName:String):Int { + if (transformConstraintName == null) + throw new SpineException("transformConstraintName cannot be null."); + for (i in 0...transformConstraints.length) { + if (transformConstraints[i].name == transformConstraintName) + return i; + } + return -1; + } + + // --- Path constraints. + + /** @return May be null. */ + public function findPathConstraint(constraintName:String):PathConstraintData { + if (constraintName == null) + throw new SpineException("constraintName cannot be null."); + for (i in 0...pathConstraints.length) { + var constraint:PathConstraintData = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + } + + /** @return -1 if the path constraint was not found. */ + public function findPathConstraintIndex(pathConstraintName:String):Int { + if (pathConstraintName == null) + throw new SpineException("pathConstraintName cannot be null."); + for (i in 0...pathConstraints.length) { + if (pathConstraints[i].name == pathConstraintName) + return i; + } + return -1; + } + + public function toString():String { + return name; + } +} diff --git a/spine-haxe/spine-haxe/spine/SkeletonJson.hx b/spine-haxe/spine-haxe/spine/SkeletonJson.hx new file mode 100644 index 000000000..28de8ca3d --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SkeletonJson.hx @@ -0,0 +1,1264 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import Reflect; +import haxe.Json; +import spine.animation.AlphaTimeline; +import spine.animation.Animation; +import spine.animation.AttachmentTimeline; +import spine.animation.CurveTimeline1; +import spine.animation.CurveTimeline2; +import spine.animation.CurveTimeline; +import spine.animation.DeformTimeline; +import spine.animation.DrawOrderTimeline; +import spine.animation.EventTimeline; +import spine.animation.IkConstraintTimeline; +import spine.animation.PathConstraintMixTimeline; +import spine.animation.PathConstraintPositionTimeline; +import spine.animation.PathConstraintSpacingTimeline; +import spine.animation.RGB2Timeline; +import spine.animation.RGBA2Timeline; +import spine.animation.RGBATimeline; +import spine.animation.RGBTimeline; +import spine.animation.RotateTimeline; +import spine.animation.ScaleTimeline; +import spine.animation.ScaleXTimeline; +import spine.animation.ScaleYTimeline; +import spine.animation.SequenceTimeline; +import spine.animation.ShearTimeline; +import spine.animation.ShearXTimeline; +import spine.animation.ShearYTimeline; +import spine.animation.Timeline; +import spine.animation.TransformConstraintTimeline; +import spine.animation.TranslateTimeline; +import spine.animation.TranslateXTimeline; +import spine.animation.TranslateYTimeline; +import spine.attachments.Attachment; +import spine.attachments.AttachmentLoader; +import spine.attachments.AttachmentType; +import spine.attachments.BoundingBoxAttachment; +import spine.attachments.ClippingAttachment; +import spine.attachments.MeshAttachment; +import spine.attachments.PathAttachment; +import spine.attachments.PointAttachment; +import spine.attachments.RegionAttachment; +import spine.attachments.VertexAttachment; + +class SkeletonJson { + public var attachmentLoader:AttachmentLoader; + public var scale:Float = 1; + + private var linkedMeshes:Array = new Array(); + + public function new(attachmentLoader:AttachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + + public function readSkeletonData(json:String):SkeletonData { + if (json == null) + throw new SpineException("object cannot be null."); + + var root = Json.parse(json); + + var skeletonData:SkeletonData = new SkeletonData(); + + // Skeleton. + var skeletonMap = getString(root, "skeleton", ""); + if (skeletonMap != null) { + skeletonData.hash = getString(skeletonMap, "hash", ""); + skeletonData.version = getString(skeletonMap, "spine", ""); + skeletonData.x = getFloat(skeletonMap, "x"); + skeletonData.y = getFloat(skeletonMap, "y"); + skeletonData.width = getFloat(skeletonMap, "width"); + skeletonData.height = getFloat(skeletonMap, "height"); + skeletonData.fps = getFloat(skeletonMap, "fps"); + skeletonData.imagesPath = getString(skeletonMap, "images", ""); + } + + // Bones. + var boneData:BoneData; + for (boneMap in cast(Reflect.getProperty(root, "bones"), Array)) { + var parent:BoneData = null; + var parentName:String = Reflect.getProperty(boneMap, "parent"); + if (parentName != null) { + parent = skeletonData.findBone(parentName); + if (parent == null) + throw new SpineException("Parent bone not found: " + parentName); + } + boneData = new BoneData(skeletonData.bones.length, Reflect.getProperty(boneMap, "name"), parent); + boneData.length = getFloat(boneMap, "length") * scale; + boneData.x = getFloat(boneMap, "x") * scale; + boneData.y = getFloat(boneMap, "y") * scale; + boneData.rotation = getFloat(boneMap, "rotation"); + boneData.scaleX = getFloat(boneMap, "scaleX", 1); + boneData.scaleY = getFloat(boneMap, "scaleY", 1); + boneData.shearX = getFloat(boneMap, "shearX"); + boneData.shearY = getFloat(boneMap, "shearY"); + boneData.transformMode = Reflect.hasField(boneMap, + "transform") ? TransformMode.fromName(Reflect.getProperty(boneMap, "transform")) : TransformMode.normal; + boneData.skinRequired = Reflect.hasField(boneMap, "skin") ? cast(Reflect.getProperty(boneMap, "skin"), Bool) : false; + + var color:String = Reflect.getProperty(boneMap, "color"); + if (color != null) { + boneData.color.setFromString(color); + } + + skeletonData.bones.push(boneData); + } + + // Slots. + for (slotMap in cast(Reflect.getProperty(root, "slots"), Array)) { + var slotName:String = Reflect.getProperty(slotMap, "name"); + var boneName:String = Reflect.getProperty(slotMap, "bone"); + boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new SpineException("Slot bone not found: " + boneName); + var slotData:SlotData = new SlotData(skeletonData.slots.length, slotName, boneData); + + var color:String = Reflect.getProperty(slotMap, "color"); + if (color != null) { + slotData.color.setFromString(color); + } + + var dark:String = Reflect.getProperty(slotMap, "dark"); + if (dark != null) { + slotData.darkColor = new Color(0, 0, 0); + slotData.darkColor.setFromString(dark); + } + + slotData.attachmentName = Reflect.getProperty(slotMap, "attachment"); + slotData.blendMode = Reflect.hasField(slotMap, "blend") ? BlendMode.fromName(Reflect.getProperty(slotMap, "blend")) : BlendMode.normal; + skeletonData.slots.push(slotData); + } + + // IK constraints. + if (Reflect.hasField(root, "ik")) { + for (constraintMap in cast(Reflect.getProperty(root, "ik"), Array)) { + var ikData:IkConstraintData = new IkConstraintData(Reflect.getProperty(constraintMap, "name")); + ikData.order = getInt(constraintMap, "order"); + ikData.skinRequired = Reflect.hasField(constraintMap, "skin") ? cast(Reflect.getProperty(constraintMap, "skin"), Bool) : false; + + for (boneName in cast(Reflect.getProperty(constraintMap, "bones"), Array)) { + var bone:BoneData = skeletonData.findBone(boneName); + if (bone == null) + throw new SpineException("IK constraint bone not found: " + boneName); + ikData.bones.push(bone); + } + + ikData.target = skeletonData.findBone(Reflect.getProperty(constraintMap, "target")); + if (ikData.target == null) + throw new SpineException("Target bone not found: " + Reflect.getProperty(constraintMap, "target")); + + ikData.mix = getFloat(constraintMap, "mix", 1); + ikData.softness = getFloat(constraintMap, "softness", 0) * scale; + ikData.bendDirection = (!Reflect.hasField(constraintMap, "bendPositive") + || cast(Reflect.getProperty(constraintMap, "bendPositive"), Bool)) ? 1 : -1; + ikData.compress = (Reflect.hasField(constraintMap, "compress") + && cast(Reflect.getProperty(constraintMap, "compress"), Bool)); + ikData.stretch = (Reflect.hasField(constraintMap, "stretch") && cast(Reflect.getProperty(constraintMap, "stretch"), Bool)); + ikData.uniform = (Reflect.hasField(constraintMap, "uniform") && cast(Reflect.getProperty(constraintMap, "uniform"), Bool)); + + skeletonData.ikConstraints.push(ikData); + } + } + + // Transform constraints. + if (Reflect.hasField(root, "transform")) { + for (constraintMap in cast(Reflect.getProperty(root, "transform"), Array)) { + var transformData:TransformConstraintData = new TransformConstraintData(Reflect.getProperty(constraintMap, "name")); + transformData.order = getInt(constraintMap, "order"); + transformData.skinRequired = Reflect.hasField(constraintMap, "skin") ? cast(Reflect.getProperty(constraintMap, "skin"), Bool) : false; + + for (boneName in cast(Reflect.getProperty(constraintMap, "bones"), Array)) { + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new SpineException("Transform constraint bone not found: " + boneName); + transformData.bones.push(bone); + } + + transformData.target = skeletonData.findBone(Reflect.getProperty(constraintMap, "target")); + if (transformData.target == null) + throw new SpineException("Target bone not found: " + Reflect.getProperty(constraintMap, "target")); + + transformData.local = Reflect.hasField(constraintMap, "local") ? cast(Reflect.getProperty(constraintMap, "local"), Bool) : false; + transformData.relative = Reflect.hasField(constraintMap, "relative") ? cast(Reflect.getProperty(constraintMap, "relative"), Bool) : false; + + transformData.offsetRotation = getFloat(constraintMap, "rotation"); + transformData.offsetX = getFloat(constraintMap, "x") * scale; + + transformData.offsetY = getFloat(constraintMap, "y") * scale; + + transformData.offsetScaleX = getFloat(constraintMap, "scaleX"); + transformData.offsetScaleY = getFloat(constraintMap, "scaleY"); + transformData.offsetShearY = getFloat(constraintMap, "shearY"); + + transformData.mixRotate = getFloat(constraintMap, "mixRotate", 1); + transformData.mixX = getFloat(constraintMap, "mixX", 1); + transformData.mixY = getFloat(constraintMap, "mixY", transformData.mixX); + transformData.mixScaleX = getFloat(constraintMap, "mixScaleX", 1); + transformData.mixScaleY = getFloat(constraintMap, "mixScaleY", transformData.mixScaleX); + transformData.mixShearY = getFloat(constraintMap, "mixShearY", 1); + + skeletonData.transformConstraints.push(transformData); + } + } + + // Path constraints. + if (Reflect.hasField(root, "path")) { + for (constraintMap in cast(Reflect.getProperty(root, "path"), Array)) { + var pathData:PathConstraintData = new PathConstraintData(Reflect.getProperty(constraintMap, "name")); + pathData.order = getInt(constraintMap, "order"); + pathData.skinRequired = Reflect.hasField(constraintMap, "skin") ? cast(Reflect.getProperty(constraintMap, "skin"), Bool) : false; + + for (boneName in cast(Reflect.getProperty(constraintMap, "bones"), Array)) { + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new SpineException("Path constraint bone not found: " + boneName); + pathData.bones.push(bone); + } + + pathData.target = skeletonData.findSlot(Reflect.getProperty(constraintMap, "target")); + if (pathData.target == null) + throw new SpineException("Path target slot not found: " + Reflect.getProperty(constraintMap, "target")); + + pathData.positionMode = Reflect.hasField(constraintMap, + "positionMode") ? PositionMode.fromName(Reflect.getProperty(constraintMap, "positionMode")) : PositionMode.percent; + pathData.spacingMode = Reflect.hasField(constraintMap, + "spacingMode") ? SpacingMode.fromName(Reflect.getProperty(constraintMap, "spacingMode")) : SpacingMode.length; + pathData.rotateMode = Reflect.hasField(constraintMap, + "rotateMode") ? RotateMode.fromName(Reflect.getProperty(constraintMap, "rotateMode")) : RotateMode.tangent; + pathData.offsetRotation = getFloat(constraintMap, "rotation"); + pathData.position = getFloat(constraintMap, "position"); + if (pathData.positionMode == PositionMode.fixed) + pathData.position *= scale; + pathData.spacing = getFloat(constraintMap, "spacing"); + if (pathData.spacingMode == SpacingMode.length || pathData.spacingMode == SpacingMode.fixed) + pathData.spacing *= scale; + pathData.mixRotate = getFloat(constraintMap, "mixRotate", 1); + pathData.mixX = getFloat(constraintMap, "mixX", 1); + pathData.mixY = getFloat(constraintMap, "mixY", 1); + + skeletonData.pathConstraints.push(pathData); + } + } + + // Skins. + if (Reflect.hasField(root, "skins")) { + for (skinMap in cast(Reflect.getProperty(root, "skins"), Array)) { + var skin:Skin = new Skin(Reflect.getProperty(skinMap, "name")); + + if (Reflect.hasField(skinMap, "bones")) { + var bones:Array = cast(Reflect.getProperty(skinMap, "bones"), Array); + for (ii in 0...bones.length) { + var boneData:BoneData = skeletonData.findBone(bones[ii]); + if (boneData == null) + throw new SpineException("Skin bone not found: " + bones[ii]); + skin.bones.push(boneData); + } + } + + if (Reflect.hasField(skinMap, "ik")) { + var ik:Array = cast(Reflect.getProperty(skinMap, "ik"), Array); + for (ii in 0...ik.length) { + var constraint:ConstraintData = skeletonData.findIkConstraint(ik[ii]); + if (constraint == null) + throw new SpineException("Skin IK constraint not found: " + ik[ii]); + skin.constraints.push(constraint); + } + } + + if (Reflect.hasField(skinMap, "transform")) { + var transform:Array = cast(Reflect.getProperty(skinMap, "transform"), Array); + for (ii in 0...transform.length) { + var constraint:ConstraintData = skeletonData.findTransformConstraint(transform[ii]); + if (constraint == null) + throw new SpineException("Skin transform constraint not found: " + transform[ii]); + skin.constraints.push(constraint); + } + } + + if (Reflect.hasField(skinMap, "path")) { + var path:Array = cast(Reflect.getProperty(skinMap, "path"), Array); + for (ii in 0...path.length) { + var constraint:ConstraintData = skeletonData.findPathConstraint(path[ii]); + if (constraint == null) + throw new SpineException("Skin path constraint not found: " + path[ii]); + skin.constraints.push(constraint); + } + } + + if (Reflect.hasField(skinMap, "attachments")) { + var attachments:Dynamic = Reflect.getProperty(skinMap, "attachments"); + for (slotName in Reflect.fields(attachments)) { + var slot:SlotData = skeletonData.findSlot(slotName); + var slotEntry:Dynamic = Reflect.getProperty(attachments, slotName); + for (attachmentName in Reflect.fields(slotEntry)) { + var attachment:Attachment = readAttachment(Reflect.getProperty(slotEntry, attachmentName), skin, slot.index, attachmentName, + skeletonData); + if (attachment != null) { + skin.setAttachment(slot.index, attachmentName, attachment); + } + } + } + } + + skeletonData.skins.push(skin); + if (skin.name == "default") { + skeletonData.defaultSkin = skin; + } + } + } + + // Linked meshes. + for (linkedMesh in linkedMeshes) { + var parentSkin:Skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (parentSkin == null) + throw new SpineException("Skin not found: " + linkedMesh.skin); + var parentMesh:Attachment = parentSkin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parentMesh == null) + throw new SpineException("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? cast(parentMesh, VertexAttachment) : linkedMesh.mesh; + linkedMesh.mesh.parentMesh = cast(parentMesh, MeshAttachment); + if (linkedMesh.mesh.region != null) + linkedMesh.mesh.updateRegion(); + } + linkedMeshes.resize(0); + + // Events. + var events:Dynamic = Reflect.getProperty(root, "events"); + for (eventName in Reflect.fields(events)) { + var eventMap:Map = Reflect.field(events, eventName); + var eventData:EventData = new EventData(eventName); + eventData.intValue = getInt(eventMap, "int"); + eventData.floatValue = getFloat(eventMap, "float"); + eventData.stringValue = getString(eventMap, "string", ""); + eventData.audioPath = getString(eventMap, "audio", ""); + if (eventData.audioPath != null) { + eventData.volume = getFloat(eventMap, "volume", 1); + eventData.balance = getFloat(eventMap, "balance"); + } + skeletonData.events.push(eventData); + } + + // Animations. + var animations:Dynamic = Reflect.getProperty(root, "animations"); + for (animationName in Reflect.fields(animations)) { + readAnimation(Reflect.field(animations, animationName), animationName, skeletonData); + } + return skeletonData; + } + + private function readSequence(map:Dynamic) { + if (map == null) + return null; + var sequence = new Sequence(getInt(map, "count", 0)); + sequence.start = getInt(map, "start", 1); + sequence.digits = getInt(map, "digits", 0); + sequence.setupIndex = getInt(map, "setup", 0); + return sequence; + } + + private function readAttachment(map:Dynamic, skin:Skin, slotIndex:Int, name:String, skeletonData:SkeletonData):Attachment { + if (Reflect.field(map, "name") != null) + name = Reflect.field(map, "name"); + + var color:String; + switch (AttachmentType.fromName(Reflect.hasField(map, "type") ? Reflect.getProperty(map, "type") : "region")) { + case AttachmentType.region: + var path = getString(map, "path", name); + var sequence = readSequence(Reflect.field(map, "sequence")); + var region:RegionAttachment = attachmentLoader.newRegionAttachment(skin, name, path, sequence); + if (region == null) + return null; + region.path = path; + region.x = getFloat(map, "x") * scale; + region.y = getFloat(map, "y") * scale; + region.scaleX = getFloat(map, "scaleX", 1); + region.scaleY = getFloat(map, "scaleY", 1); + region.rotation = getFloat(map, "rotation"); + region.width = getFloat(map, "width") * scale; + region.height = getFloat(map, "height") * scale; + region.sequence = sequence; + + color = Reflect.getProperty(map, "color"); + if (color != null) { + region.color.setFromString(color); + } + if (region.region != null) + region.updateRegion(); + return region; + case AttachmentType.mesh, AttachmentType.linkedmesh: + var path = getString(map, "path", name); + var sequence = readSequence(Reflect.field(map, "sequence")); + var mesh:MeshAttachment = attachmentLoader.newMeshAttachment(skin, name, path, sequence); + if (mesh == null) + return null; + mesh.path = path; + + color = Reflect.getProperty(map, "color"); + if (color != null) { + mesh.color.setFromString(color); + } + + mesh.width = getFloat(map, "width") * scale; + mesh.height = getFloat(map, "height") * scale; + mesh.sequence = sequence; + + if (Reflect.field(map, "parent") != null) { + var inheritTimelines:Bool = map.hasOwnProperty("timelines") ? cast(Reflect.field(map, "timelines"), Bool) : true; + linkedMeshes.push(new LinkedMesh(mesh, Reflect.field(map, "skin"), slotIndex, Reflect.field(map, "parent"), inheritTimelines)); + return mesh; + } + + var uvs:Array = getFloatArray(map, "uvs"); + readVertices(map, mesh, uvs.length); + mesh.triangles = getIntArray(map, "triangles"); + mesh.regionUVs = uvs; + if (mesh.region != null) + mesh.updateRegion(); + + if (Reflect.field(map, "edges") != null) + mesh.edges = getIntArray(map, "edges"); + mesh.hullLength = getInt(map, "hull") * 2; + return mesh; + case AttachmentType.boundingbox: + var box:BoundingBoxAttachment = attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + readVertices(map, box, Std.parseInt(Reflect.field(map, "vertexCount")) << 1); + return box; + case AttachmentType.path: + var path:PathAttachment = attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = map.hasOwnProperty("closed") ? cast(Reflect.field(map, "closed"), Bool) : false; + path.constantSpeed = map.hasOwnProperty("constantSpeed") ? cast(Reflect.field(map, "constantSpeed"), Bool) : true; + var vertexCount:Int = Std.parseInt(Reflect.field(map, "vertexCount")); + readVertices(map, path, vertexCount << 1); + var lengths:Array = new Array(); + for (curves in cast(Reflect.field(map, "lengths"), Array)) { + lengths.push(Std.parseFloat(curves) * scale); + } + path.lengths = lengths; + return path; + case AttachmentType.point: + var point:PointAttachment = attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = getFloat(map, "x", 0) * scale; + point.y = getFloat(map, "y", 0) * scale; + point.rotation = getFloat(map, "rotation", 0); + color = Reflect.getProperty(map, "color"); + if (color != null) { + point.color.setFromString(color); + } + return point; + case AttachmentType.clipping: + var clip:ClippingAttachment = attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end:String = getString(map, "end", null); + if (end != null) { + var slot:SlotData = skeletonData.findSlot(end); + if (slot == null) + throw new SpineException("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount:Int = getInt(map, "vertexCount", 0); + readVertices(map, clip, vertexCount << 1); + color = Reflect.getProperty(map, "color"); + if (color != null) { + clip.color.setFromString(color); + } + return clip; + } + return null; + } + + private function readVertices(map:Dynamic, attachment:VertexAttachment, verticesLength:Int):Void { + attachment.worldVerticesLength = verticesLength; + var vertices:Array = getFloatArray(map, "vertices"); + if (verticesLength == vertices.length) { + if (scale != 1) { + for (i in 0...vertices.length) { + vertices[i] *= scale; + } + } + attachment.vertices = vertices; + return; + } + + var weights:Array = new Array(); + var bones:Array = new Array(); + var i:Int = 0; + var n:Int = vertices.length; + while (i < n) { + var boneCount:Int = Std.int(vertices[i++]); + bones.push(boneCount); + var nn:Int = i + boneCount * 4; + while (i < nn) { + bones.push(Std.int(vertices[i])); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + + i += 4; + } + } + attachment.bones = bones; + attachment.vertices = weights; + } + + private function readAnimation(map:Dynamic, name:String, skeletonData:SkeletonData):Void { + var timelines:Array = new Array(); + + var slotMap:Dynamic; + var slotIndex:Int; + var slotName:String; + + var timelineMap:Array; + var keyMap:Dynamic; + var nextMap:Dynamic; + var frame:Int, bezier:Int; + var time:Float, time2:Float; + var curve:Dynamic; + var timelineName:String; + + // Slot timelines. + var slots:Dynamic = Reflect.getProperty(map, "slots"); + for (slotName in Reflect.fields(slots)) { + slotMap = Reflect.field(slots, slotName); + slotIndex = skeletonData.findSlot(slotName).index; + for (timelineName in Reflect.fields(slotMap)) { + timelineMap = Reflect.field(slotMap, timelineName); + if (timelineMap == null) + continue; + if (timelineName == "attachment") { + var attachmentTimeline:AttachmentTimeline = new AttachmentTimeline(timelineMap.length, slotIndex); + for (frame in 0...timelineMap.length) { + keyMap = timelineMap[frame]; + attachmentTimeline.setFrame(frame, getFloat(keyMap, "time"), getString(keyMap, "name", null)); + } + timelines.push(attachmentTimeline); + } else if (timelineName == "rgba") { + var rgbaTimeline:RGBATimeline = new RGBATimeline(timelineMap.length, timelineMap.length << 2, slotIndex); + keyMap = timelineMap[0]; + time = getFloat(keyMap, "time"); + var rgba:Color = Color.fromString(keyMap.color); + + frame = 0; + bezier = 0; + while (true) { + rgbaTimeline.setFrame(frame, time, rgba.r, rgba.g, rgba.b, rgba.a); + if (timelineMap.length == frame + 1) + break; + + nextMap = timelineMap[frame + 1]; + time2 = getFloat(nextMap, "time"); + var newRgba:Color = Color.fromString(nextMap.color); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, rgbaTimeline, bezier, frame, 0, time, time2, rgba.r, newRgba.r, 1); + bezier = readCurve(curve, rgbaTimeline, bezier, frame, 1, time, time2, rgba.g, newRgba.g, 1); + bezier = readCurve(curve, rgbaTimeline, bezier, frame, 2, time, time2, rgba.b, newRgba.b, 1); + bezier = readCurve(curve, rgbaTimeline, bezier, frame, 3, time, time2, rgba.a, newRgba.a, 1); + } + time = time2; + rgba = newRgba; + keyMap = nextMap; + + frame++; + } + + timelines.push(rgbaTimeline); + } else if (timelineName == "rgb") { + var rgbTimeline:RGBTimeline = new RGBTimeline(timelineMap.length, timelineMap.length * 3, slotIndex); + keyMap = timelineMap[0]; + time = getFloat(keyMap, "time"); + var rgb:Color = Color.fromString(keyMap.color); + + frame = 0; + bezier = 0; + while (true) { + rgbTimeline.setFrame(frame, time, rgb.r, rgb.g, rgb.b); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + rgbTimeline.shrink(bezier); + break; + } + + time2 = getFloat(nextMap, "time"); + var newRgb:Color = Color.fromString(nextMap.color); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, rgbTimeline, bezier, frame, 0, time, time2, rgb.r, newRgb.r, 1); + bezier = readCurve(curve, rgbTimeline, bezier, frame, 1, time, time2, rgb.g, newRgb.g, 1); + bezier = readCurve(curve, rgbTimeline, bezier, frame, 2, time, time2, rgb.b, newRgb.b, 1); + } + time = time2; + rgb = newRgb; + keyMap = nextMap; + + frame++; + } + + timelines.push(rgbTimeline); + } else if (timelineName == "alpha") { + timelines.push(readTimeline(timelineMap, new AlphaTimeline(timelineMap.length, timelineMap.length, slotIndex), 0, 1)); + } else if (timelineName == "rgba2") { + var rgba2Timeline:RGBA2Timeline = new RGBA2Timeline(timelineMap.length, timelineMap.length * 7, slotIndex); + + keyMap = timelineMap[0]; + time = getFloat(keyMap, "time"); + var lighta:Color = Color.fromString(keyMap.light); + var darka:Color = Color.fromString(keyMap.dark); + + frame = 0; + bezier = 0; + while (true) { + rgba2Timeline.setFrame(frame, time, lighta.r, lighta.g, lighta.b, lighta.a, darka.r, darka.g, darka.b); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + rgba2Timeline.shrink(bezier); + break; + } + + time2 = getFloat(nextMap, "time"); + var newLighta:Color = Color.fromString(nextMap.light); + var newDarka:Color = Color.fromString(nextMap.dark); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 0, time, time2, lighta.r, newLighta.r, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 1, time, time2, lighta.g, newLighta.g, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 2, time, time2, lighta.b, newLighta.b, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 3, time, time2, lighta.a, newLighta.a, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 4, time, time2, darka.r, newDarka.r, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 5, time, time2, darka.g, newDarka.g, 1); + bezier = readCurve(curve, rgba2Timeline, bezier, frame, 6, time, time2, darka.b, newDarka.b, 1); + } + time = time2; + lighta = newLighta; + darka = newDarka; + keyMap = nextMap; + + frame++; + } + + timelines.push(rgba2Timeline); + } else if (timelineName == "rgb2") { + var rgb2Timeline:RGB2Timeline = new RGB2Timeline(timelineMap.length, timelineMap.length * 6, slotIndex); + + keyMap = timelineMap[0]; + time = getFloat(keyMap, "time"); + var light:Color = Color.fromString(keyMap.light); + var dark:Color = Color.fromString(keyMap.dark); + + frame = 0; + bezier = 0; + while (true) { + rgb2Timeline.setFrame(frame, time, light.r, light.g, light.b, dark.r, dark.g, dark.b); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + rgb2Timeline.shrink(bezier); + break; + } + + time2 = getFloat(nextMap, "time"); + var newLight:Color = Color.fromString(nextMap.light); + var newDark:Color = Color.fromString(nextMap.dark); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 0, time, time2, light.r, newLight.r, 1); + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 1, time, time2, light.g, newLight.g, 1); + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 2, time, time2, light.b, newLight.b, 1); + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 3, time, time2, dark.r, newDark.r, 1); + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 4, time, time2, dark.g, newDark.g, 1); + bezier = readCurve(curve, rgb2Timeline, bezier, frame, 5, time, time2, dark.b, newDark.b, 1); + } + time = time2; + light = newLight; + dark = newDark; + keyMap = nextMap; + + frame++; + } + + timelines.push(rgb2Timeline); + } else { + throw new SpineException("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + + // Bone timelines. + var bones:Dynamic = Reflect.getProperty(map, "bones"); + for (boneName in Reflect.fields(bones)) { + var boneIndex:Int = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new SpineException("Bone not found: " + boneName); + var boneMap:Dynamic = Reflect.field(bones, boneName); + for (timelineName in Reflect.fields(boneMap)) { + timelineMap = Reflect.field(boneMap, timelineName); + if (timelineMap.length == 0) + continue; + + if (timelineName == "rotate") { + timelines.push(readTimeline(timelineMap, new RotateTimeline(timelineMap.length, timelineMap.length, boneIndex), 0, 1)); + } else if (timelineName == "translate") { + var translateTimeline:TranslateTimeline = new TranslateTimeline(timelineMap.length, timelineMap.length << 1, boneIndex); + timelines.push(readTimeline2(timelineMap, translateTimeline, "x", "y", 0, scale)); + } else if (timelineName == "translatex") { + var translateXTimeline:TranslateXTimeline = new TranslateXTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, translateXTimeline, 0, scale)); + } else if (timelineName == "translatey") { + var translateYTimeline:TranslateYTimeline = new TranslateYTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, translateYTimeline, 0, scale)); + } else if (timelineName == "scale") { + var scaleTimeline:ScaleTimeline = new ScaleTimeline(timelineMap.length, timelineMap.length << 1, boneIndex); + timelines.push(readTimeline2(timelineMap, scaleTimeline, "x", "y", 1, 1)); + } else if (timelineName == "scalex") { + var scaleXTimeline:ScaleXTimeline = new ScaleXTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, scaleXTimeline, 1, 1)); + } else if (timelineName == "scaley") { + var scaleYTimeline:ScaleYTimeline = new ScaleYTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, scaleYTimeline, 1, 1)); + } else if (timelineName == "shear") { + var shearTimeline:ShearTimeline = new ShearTimeline(timelineMap.length, timelineMap.length << 1, boneIndex); + timelines.push(readTimeline2(timelineMap, shearTimeline, "x", "y", 0, 1)); + } else if (timelineName == "shearx") { + var shearXTimeline:ShearXTimeline = new ShearXTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, shearXTimeline, 0, 1)); + } else if (timelineName == "sheary") { + var shearYTimeline:ShearYTimeline = new ShearYTimeline(timelineMap.length, timelineMap.length, boneIndex); + timelines.push(readTimeline(timelineMap, shearYTimeline, 0, 1)); + } else { + throw new SpineException("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + + // IK constraint timelines. + var iks:Dynamic = Reflect.getProperty(map, "ik"); + for (ikConstraintName in Reflect.fields(iks)) { + timelineMap = Reflect.field(iks, ikConstraintName); + keyMap = timelineMap[0]; + if (keyMap == null) + continue; + + var ikIndex:Int = skeletonData.ikConstraints.indexOf(skeletonData.findIkConstraint(ikConstraintName)); + var ikTimeline:IkConstraintTimeline = new IkConstraintTimeline(timelineMap.length, timelineMap.length << 1, ikIndex); + + time = getFloat(keyMap, "time"); + var mix:Float = getFloat(keyMap, "mix", 1); + var softness:Float = getFloat(keyMap, "softness") * scale; + + frame = 0; + bezier = 0; + while (true) { + ikTimeline.setFrame(frame, time, mix, softness, + Reflect.hasField(keyMap, "bendPositive") ? (cast(Reflect.getProperty(keyMap, "bendPositive"), Bool) ? 1 : -1) : 1, + Reflect.hasField(keyMap, "compress") ? cast(Reflect.getProperty(keyMap, "compress"), Bool) : false, + Reflect.hasField(keyMap, "stretch") ? cast(Reflect.getProperty(keyMap, "stretch"), Bool) : false); + + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + ikTimeline.shrink(bezier); + break; + } + + time2 = getFloat(nextMap, "time"); + var mix2:Float = getFloat(nextMap, "mix", 1); + var softness2:Float = getFloat(nextMap, "softness") * scale; + + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, ikTimeline, bezier, frame, 0, time, time2, mix, mix2, 1); + bezier = readCurve(curve, ikTimeline, bezier, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + keyMap = nextMap; + + frame++; + } + timelines.push(ikTimeline); + } + + // Transform constraint timelines. + var mixRotate:Float, mixRotate2:Float; + var mixX:Float, mixX2:Float; + var mixY:Float, mixY2:Float; + var transforms:Dynamic = Reflect.getProperty(map, "transform"); + for (transformName in Reflect.fields(transforms)) { + timelineMap = Reflect.field(transforms, transformName); + keyMap = timelineMap[0]; + if (keyMap == null) + continue; + + var transformIndex:Int = skeletonData.transformConstraints.indexOf(skeletonData.findTransformConstraint(transformName)); + var transformTimeline:TransformConstraintTimeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length << 2, transformIndex); + + time = getFloat(keyMap, "time"); + mixRotate = getFloat(keyMap, "mixRotate", 1); + var mixShearY:Float = getFloat(keyMap, "mixShearY", 1); + mixX = getFloat(keyMap, "mixX", 1); + mixY = getFloat(keyMap, "mixY", mixX); + var mixScaleX:Float = getFloat(keyMap, "mixScaleX", 1); + var mixScaleY:Float = getFloat(keyMap, "mixScaleY", mixScaleX); + + frame = 0; + bezier = 0; + while (true) { + transformTimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + transformTimeline.shrink(bezier); + break; + } + + time2 = getFloat(nextMap, "time"); + mixRotate2 = getFloat(nextMap, "mixRotate", 1); + var mixShearY2:Float = getFloat(nextMap, "mixShearY", 1); + mixX2 = getFloat(nextMap, "mixX", 1); + mixY2 = getFloat(nextMap, "mixY", mixX2); + var mixScaleX2:Float = getFloat(nextMap, "mixScaleX", 1); + var mixScaleY2:Float = getFloat(nextMap, "mixScaleY", mixScaleX2); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, transformTimeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, transformTimeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, transformTimeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + bezier = readCurve(curve, transformTimeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + bezier = readCurve(curve, transformTimeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + bezier = readCurve(curve, transformTimeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixScaleX = mixScaleX2; + keyMap = nextMap; + + frame++; + } + + timelines.push(transformTimeline); + } + + // Path constraint timelines. + var paths:Dynamic = Reflect.getProperty(map, "path"); + for (pathName in Reflect.fields(paths)) { + var index:Int = skeletonData.findPathConstraintIndex(pathName); + if (index == -1) + throw new SpineException("Path constraint not found: " + pathName); + var pathData:PathConstraintData = skeletonData.pathConstraints[index]; + + var pathMap:Dynamic = Reflect.field(paths, pathName); + for (timelineName in Reflect.fields(pathMap)) { + timelineMap = Reflect.field(pathMap, timelineName); + keyMap = timelineMap[0]; + if (keyMap == null) + continue; + + if (timelineName == "position") { + var positionTimeline:PathConstraintPositionTimeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, index); + timelines.push(readTimeline(timelineMap, positionTimeline, 0, pathData.positionMode == PositionMode.fixed ? scale : 1)); + } else if (timelineName == "spacing") { + var spacingTimeline:PathConstraintSpacingTimeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, index); + timelines.push(readTimeline(timelineMap, spacingTimeline, + 0, pathData.spacingMode == SpacingMode.length || pathData.spacingMode == SpacingMode.fixed ? scale : 1)); + } else if (timelineName == "mix") { + var mixTimeline:PathConstraintMixTimeline = new PathConstraintMixTimeline(timelineMap.length, timelineMap.length * 3, index); + time = getFloat(keyMap, "time"); + mixRotate = getFloat(keyMap, "mixRotate", 1); + mixX = getFloat(keyMap, "mixX", 1); + mixY = getFloat(keyMap, "mixY", mixX); + + frame = 0; + bezier = 0; + while (true) { + mixTimeline.setFrame(frame, time, mixRotate, mixX, mixY); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + mixTimeline.shrink(bezier); + break; + } + time2 = getFloat(nextMap, "time"); + mixRotate2 = getFloat(nextMap, "mixRotate", 1); + mixX2 = getFloat(nextMap, "mixX", 1); + mixY2 = getFloat(nextMap, "mixY", mixX2); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, mixTimeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, mixTimeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, mixTimeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + keyMap = nextMap; + + frame++; + } + + timelines.push(mixTimeline); + } + } + } + + // Attachment timelines. + var attachments:Dynamic = Reflect.getProperty(map, "attachments"); + for (attachmentsName in Reflect.fields(attachments)) { + var attachmentsMap:Dynamic = Reflect.field(attachments, attachmentsName); + var skin:Skin = skeletonData.findSkin(attachmentsName); + if (skin == null) + throw new SpineException("Skin not found: " + attachmentsName); + + for (slotMapName in Reflect.fields(attachmentsMap)) { + slotMap = Reflect.field(attachmentsMap, slotMapName); + slotIndex = skeletonData.findSlot(slotMapName).index; + if (slotIndex == -1) + throw new SpineException("Slot not found: " + slotMapName); + for (attachmentMapName in Reflect.fields(slotMap)) { + var attachmentMap = Reflect.field(slotMap, attachmentMapName); + var attachment:Attachment = skin.getAttachment(slotIndex, attachmentMapName); + if (attachment == null) + throw new SpineException("Timeline attachment not found: " + attachmentMapName); + + for (timelineMapName in Reflect.fields(attachmentMap)) { + var timelineMap = Reflect.field(attachmentMap, timelineMapName); + var keyMap = timelineMap[0]; + if (keyMap == null) + continue; + + if (timelineMapName == "deform") { + var vertexAttachment = cast(attachment, VertexAttachment); + var weighted:Bool = vertexAttachment.bones != null; + var vertices:Array = vertexAttachment.vertices; + var deformLength:Int = weighted ? Std.int(vertices.length / 3 * 2) : vertices.length; + + var deformTimeline:DeformTimeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, vertexAttachment); + time = getFloat(keyMap, "time"); + frame = 0; + bezier = 0; + while (true) { + var deform:Array; + var verticesValue:Array = Reflect.getProperty(keyMap, "vertices"); + if (verticesValue == null) { + if (weighted) { + deform = new Array(); + deform.resize(deformLength); + } else { + deform = vertices; + } + } else { + deform = new Array(); + deform.resize(deformLength); + var start:Int = getInt(keyMap, "offset"); + var temp:Array = getFloatArray(keyMap, "vertices"); + for (i in 0...temp.length) { + deform[start + i] = temp[i]; + } + if (scale != 1) { + for (i in start...start + temp.length) { + deform[i] *= scale; + } + } + if (!weighted) { + for (i in 0...deformLength) { + deform[i] += vertices[i]; + } + } + } + + deformTimeline.setFrame(frame, time, deform); + nextMap = timelineMap[frame + 1]; + if (nextMap == null) { + deformTimeline.shrink(bezier); + break; + } + time2 = getFloat(nextMap, "time"); + curve = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, deformTimeline, bezier, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + keyMap = nextMap; + + frame++; + } + + timelines.push(deformTimeline); + } else if (timelineMapName == "sequence") { + var timeline = new SequenceTimeline(timelineMap.length, slotIndex, cast(attachment, HasTextureRegion)); + var lastDelay:Float = 0; + var frame:Int = 0; + while (frame < timelineMap.length) { + var delay = getFloat(keyMap, "delay", lastDelay); + var time = getFloat(keyMap, "time", 0); + var mode = SequenceMode.fromName(getString(keyMap, "mode", "hold")); + var index = getInt(keyMap, "index", 0); + timeline.setFrame(frame, time, mode, index, delay); + lastDelay = delay; + keyMap = timelineMap[frame + 1]; + frame++; + } + timelines.push(timeline); + } + } + } + } + } + + // Draw order timelines. + if (Reflect.hasField(map, "drawOrder")) { + var drawOrders:Array = cast(Reflect.field(map, "drawOrder"), Array); + if (drawOrders != null) { + var drawOrderTimeline:DrawOrderTimeline = new DrawOrderTimeline(drawOrders.length); + var slotCount:Int = skeletonData.slots.length; + frame = 0; + for (drawOrderMap in drawOrders) { + var drawOrder:Array = null; + var offsets:Array = Reflect.getProperty(drawOrderMap, "offsets"); + if (offsets != null) { + drawOrder = new Array(); + drawOrder.resize(slotCount); + var i = slotCount - 1; + while (i >= 0) { + drawOrder[i--] = -1; + } + var unchanged:Array = new Array(); + unchanged.resize(slotCount - offsets.length); + var originalIndex:Int = 0, unchangedIndex:Int = 0; + for (offsetMap in offsets) { + slotIndex = skeletonData.findSlot(Reflect.getProperty(offsetMap, "slot")).index; + if (slotIndex == -1) + throw new SpineException("Slot not found: " + Reflect.getProperty(offsetMap, "slot")); + // Collect unchanged items. + while (originalIndex != slotIndex) { + unchanged[unchangedIndex++] = originalIndex++; + } + // Set changed items. + drawOrder[originalIndex + Reflect.getProperty(offsetMap, "offset")] = originalIndex++; + } + // Collect remaining unchanged items. + while (originalIndex < slotCount) { + unchanged[unchangedIndex++] = originalIndex++; + } + // Fill in unchanged items. + i = slotCount - 1; + while (i >= 0) { + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + i--; + } + } + drawOrderTimeline.setFrame(frame++, getFloat(drawOrderMap, "time"), drawOrder); + } + timelines.push(drawOrderTimeline); + } + } + + // Event timelines. + if (Reflect.hasField(map, "events")) { + var eventsMap:Array = cast(Reflect.field(map, "events"), Array); + if (eventsMap != null) { + var eventTimeline:EventTimeline = new EventTimeline(eventsMap.length); + frame = 0; + for (eventMap in eventsMap) { + var eventData:EventData = skeletonData.findEvent(Reflect.getProperty(eventMap, "name")); + if (eventData == null) + throw new SpineException("Event not found: " + Reflect.getProperty(eventMap, "name")); + var event:Event = new Event(getFloat(eventMap, "time"), eventData); + event.intValue = Reflect.hasField(eventMap, "int") ? getInt(eventMap, "int") : eventData.intValue; + + event.floatValue = Reflect.hasField(eventMap, "float") ? getFloat(eventMap, "float") : eventData.floatValue; + + event.stringValue = Reflect.hasField(eventMap, "string") ? Reflect.getProperty(eventMap, "string") : eventData.stringValue; + if (eventData.audioPath != null) { + event.volume = getFloat(eventMap, "volume", 1); + event.balance = getFloat(eventMap, "balance"); + } + eventTimeline.setFrame(frame++, event); + } + timelines.push(eventTimeline); + } + } + + var duration:Float = 0; + for (i in 0...timelines.length) { + duration = Math.max(duration, timelines[i].getDuration()); + } + + skeletonData.animations.push(new Animation(name, timelines, duration)); + } + + static private function readTimeline(keys:Array, timeline:CurveTimeline1, defaultValue:Float, scale:Float):CurveTimeline1 { + var keyMap:Dynamic = keys[0]; + var time:Float = getFloat(keyMap, "time"); + var value:Float = getFloat(keyMap, "value", defaultValue) * scale; + var bezier:Int = 0; + var frame:Int = 0; + while (true) { + timeline.setFrame(frame, time, value); + var nextMap:Dynamic = keys[frame + 1]; + if (nextMap == null) { + timeline.shrink(bezier); + break; + } + var time2:Float = getFloat(nextMap, "time"); + var value2:Float = getFloat(nextMap, "value", defaultValue) * scale; + var curve:Dynamic = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); + } + time = time2; + value = value2; + keyMap = nextMap; + + frame++; + } + return timeline; + } + + static private function readTimeline2(keys:Array, timeline:CurveTimeline2, name1:String, name2:String, defaultValue:Float, + scale:Float):CurveTimeline2 { + var keyMap:Dynamic = keys[0]; + var time:Float = getFloat(keyMap, "time"); + var value1:Float = getFloat(keyMap, name1, defaultValue) * scale; + var value2:Float = getFloat(keyMap, name2, defaultValue) * scale; + var bezier:Int = 0; + var frame:Int = 0; + while (true) { + timeline.setFrame(frame, time, value1, value2); + var nextMap:Dynamic = keys[frame + 1]; + if (nextMap == null) { + timeline.shrink(bezier); + break; + } + var time2:Float = getFloat(nextMap, "time"); + var nvalue1:Float = getFloat(nextMap, name1, defaultValue) * scale; + var nvalue2:Float = getFloat(nextMap, name2, defaultValue) * scale; + var curve:Dynamic = keyMap.curve; + if (curve != null) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + keyMap = nextMap; + + frame++; + } + return timeline; + } + + static private function readCurve(curve:Dynamic, timeline:CurveTimeline, bezier:Int, frame:Int, value:Int, time1:Float, time2:Float, value1:Float, + value2:Float, scale:Float):Int { + if (curve == "stepped") { + timeline.setStepped(frame); + return bezier; + } + + var i:Int = value << 2; + var cx1:Float = curve[i]; + var cy1:Float = curve[i + 1] * scale; + var cx2:Float = curve[i + 2]; + var cy2:Float = curve[i + 3] * scale; + timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; + } + + static private function getValue(map:Dynamic, name:String, defaultValue:Dynamic):Dynamic { + if (map.hasOwnProperty(name)) + return Reflect.field(map, name); + return defaultValue; + } + + static private function getString(value:Dynamic, name:String, defaultValue:String):String { + if (Std.isOfType(Reflect.field(value, name), String)) + return cast(Reflect.field(value, name), String); + return defaultValue; + } + + static private function getFloat(value:Dynamic, name:String, defaultValue:Float = 0):Float { + if (Std.isOfType(Reflect.field(value, name), Float)) + return cast(Reflect.field(value, name), Float); + return defaultValue; + } + + static private function getFloatArray(map:Dynamic, name:String):Array { + var list:Array = cast(Reflect.field(map, name), Array); + var values:Array = new Array(); + values.resize(list.length); + for (i in 0...list.length) { + values[i] = cast(list[i], Float); + } + return values; + } + + static private function getInt(value:Dynamic, name:String, defaultValue:Int = 0):Int { + if (Std.isOfType(Reflect.field(value, name), Int)) + return cast(Reflect.field(value, name), Int); + return defaultValue; + } + + static private function getIntArray(map:Dynamic, name:String):Array { + var list:Array = cast(Reflect.field(map, name), Array); + var values:Array = new Array(); + values.resize(list.length); + for (i in 0...list.length) { + values[i] = Std.int(list[i]); + } + return values; + } +} + +class LinkedMesh { + public var parent(default, null):String; + public var skin(default, null):String; + public var slotIndex(default, null):Int; + public var mesh(default, null):MeshAttachment; + public var inheritTimeline(default, null):Bool; + + public function new(mesh:MeshAttachment, skin:String, slotIndex:Int, parent:String, inheritTimeline:Bool) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritTimeline = inheritTimeline; + } +} diff --git a/spine-haxe/spine-haxe/spine/Skin.hx b/spine-haxe/spine-haxe/spine/Skin.hx new file mode 100644 index 000000000..74613f6cc --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Skin.hx @@ -0,0 +1,237 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import haxe.ds.StringMap; +import spine.attachments.Attachment; +import spine.attachments.MeshAttachment; + +/** Stores attachments by slot index and attachment name. */ +class Skin { + private var _name:String; + private var _attachments:Array> = new Array>(); + private var _bones:Array = new Array(); + private var _constraints:Array = new Array(); + + public function new(name:String) { + if (name == null) + throw new SpineException("name cannot be null."); + _name = name; + } + + public function setAttachment(slotIndex:Int, name:String, attachment:Attachment):Void { + if (attachment == null) + throw new SpineException("attachment cannot be null."); + if (slotIndex >= _attachments.length) + _attachments.resize(slotIndex + 1); + if (_attachments[slotIndex] == null) + _attachments[slotIndex] = new StringMap(); + _attachments[slotIndex].set(name, attachment); + } + + public function addSkin(skin:Skin):Void { + var contained:Bool = false; + for (i in 0...skin.bones.length) { + var bone:BoneData = skin.bones[i]; + contained = false; + for (j in 0...bones.length) { + if (_bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + _bones.push(bone); + } + + for (i in 0...skin.constraints.length) { + var constraint:ConstraintData = skin.constraints[i]; + contained = false; + for (j in 0..._constraints.length) { + if (_constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + _constraints.push(constraint); + } + + var attachments:Array = skin.getAttachments(); + for (i in 0...attachments.length) { + var attachment:SkinEntry = attachments[i]; + setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + + public function copySkin(skin:Skin):Void { + var contained:Bool = false; + var attachment:SkinEntry; + + for (i in 0...skin.bones.length) { + var bone:BoneData = skin.bones[i]; + contained = false; + for (j in 0..._bones.length) { + if (_bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + _bones.push(bone); + } + + for (i in 0...skin.constraints.length) { + var constraint:ConstraintData = skin.constraints[i]; + contained = false; + for (j in 0..._constraints.length) { + if (_constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + _constraints.push(constraint); + } + + var attachments:Array = skin.getAttachments(); + for (i in 0...attachments.length) { + attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (Std.isOfType(attachment.attachment, MeshAttachment)) { + var mesh = cast(attachment.attachment, MeshAttachment); + attachment.attachment = new MeshAttachment(mesh.name, mesh.path).newLinkedMesh(); + setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + } + + public function getAttachment(slotIndex:Int, name:String):Attachment { + if (slotIndex >= _attachments.length) + return null; + var dictionary:StringMap = _attachments[slotIndex]; + return dictionary != null ? dictionary.get(name) : null; + } + + public function removeAttachment(slotIndex:Int, name:String):Void { + var dictionary:StringMap = _attachments[slotIndex]; + if (dictionary != null) + dictionary.remove(name); + } + + public function getAttachments():Array { + var entries:Array = new Array(); + for (slotIndex in 0..._attachments.length) { + var attachments:StringMap = _attachments[slotIndex]; + if (attachments != null) { + for (name in attachments.keys()) { + var attachment:Attachment = attachments.get(name); + if (attachment != null) + entries.push(new SkinEntry(slotIndex, name, attachment)); + } + } + } + return entries; + } + + public function getAttachmentsForSlot(slotIndex:Int):Array { + var entries:Array = new Array(); + var attachments:StringMap = _attachments[slotIndex]; + if (attachments != null) { + for (name in attachments.keys()) { + var attachment:Attachment = attachments.get(name); + if (attachment != null) + entries.push(new SkinEntry(slotIndex, name, attachment)); + } + } + return entries; + } + + public function clear():Void { + _attachments.resize(0); + _bones.resize(0); + _constraints.resize(0); + } + + public var attachments(get, never):Array>; + + private function get_attachments():Array> { + return _attachments; + } + + public var bones(get, never):Array; + + private function get_bones():Array { + return _bones; + } + + public var constraints(get, never):Array; + + private function get_constraints():Array { + return _constraints; + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + /* + public function toString():String + { + return _name; + } + */ + /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */ + public function attachAll(skeleton:Skeleton, oldSkin:Skin):Void { + var slotIndex:Int = 0; + for (slot in skeleton.slots) { + var slotAttachment:Attachment = slot.attachment; + if (slotAttachment != null && slotIndex < oldSkin.attachments.length) { + var dictionary:StringMap = oldSkin.attachments[slotIndex]; + for (name in dictionary.keys()) { + var skinAttachment:Attachment = dictionary.get(name); + if (slotAttachment == skinAttachment) { + var attachment:Attachment = getAttachment(slotIndex, name); + if (attachment != null) + slot.attachment = attachment; + break; + } + } + } + slotIndex++; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/SkinEntry.hx b/spine-haxe/spine-haxe/spine/SkinEntry.hx new file mode 100644 index 000000000..47057e66e --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SkinEntry.hx @@ -0,0 +1,44 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import spine.attachments.Attachment; + +class SkinEntry { + public var slotIndex:Int = 0; + public var name:String; + public var attachment:Attachment; + + public function new(slotIndex:Int, name:String, attachment:Attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } +} diff --git a/spine-haxe/spine-haxe/spine/Slot.hx b/spine-haxe/spine-haxe/spine/Slot.hx new file mode 100644 index 000000000..55ed96968 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Slot.hx @@ -0,0 +1,117 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +import spine.attachments.Attachment; +import spine.attachments.VertexAttachment; + +class Slot { + private var _data:SlotData; + private var _bone:Bone; + + public var color:Color; + public var darkColor:Color; + + private var _attachment:Attachment; + + public var sequenceIndex = -1; + + public var attachmentState:Int = 0; + public var deform:Array = new Array(); + + public function new(data:SlotData, bone:Bone) { + if (data == null) + throw new SpineException("data cannot be null."); + if (bone == null) + throw new SpineException("bone cannot be null."); + _data = data; + _bone = bone; + this.color = new Color(1, 1, 1, 1); + this.darkColor = data.darkColor == null ? null : new Color(1, 1, 1, 1); + setToSetupPose(); + } + + public var data(get, never):SlotData; + + private function get_data():SlotData { + return _data; + } + + public var bone(get, never):Bone; + + private function get_bone():Bone { + return _bone; + } + + public var skeleton(get, never):Skeleton; + + private function get_skeleton():Skeleton { + return _bone.skeleton; + } + + /** @return May be null. */ + public var attachment(get, set):Attachment; + + private function get_attachment():Attachment { + return _attachment; + } + + /** Sets the slot's attachment and, if the attachment changed, resets {@link #attachmentTime} and clears the {@link #deform}. + * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getDeformAttachment()} as the specified attachment. + * @param attachment May be null. */ + public function set_attachment(attachmentNew:Attachment):Attachment { + if (attachment == attachmentNew) + return attachmentNew; + if (!Std.isOfType(attachmentNew, VertexAttachment) + || !Std.isOfType(attachment, VertexAttachment) + || cast(attachmentNew, VertexAttachment).timelineAttachment != cast(attachment, VertexAttachment).timelineAttachment) { + deform = new Array(); + } + _attachment = attachmentNew; + sequenceIndex = -1; + return attachmentNew; + } + + public function setToSetupPose():Void { + color.setFromColor(data.color); + if (darkColor != null) + darkColor.setFromColor(data.darkColor); + if (_data.attachmentName == null) { + attachment = null; + } else { + _attachment = null; + attachment = skeleton.getAttachmentForSlotIndex(data.index, data.attachmentName); + } + } + + public function toString():String { + return _data.name != null ? _data.name : "Slot?"; + } +} diff --git a/spine-haxe/spine-haxe/spine/SlotData.hx b/spine-haxe/spine-haxe/spine/SlotData.hx new file mode 100644 index 000000000..86717b4d9 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SlotData.hx @@ -0,0 +1,75 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class SlotData { + private var _index:Int; + private var _name:String; + private var _boneData:BoneData; + + public var color:Color = new Color(1, 1, 1, 1); + public var darkColor:Color = null; + public var attachmentName:String; + public var blendMode:BlendMode = BlendMode.normal; + + public function new(index:Int, name:String, boneData:BoneData) { + if (index < 0) + throw new SpineException("index must be >= 0."); + if (name == null) + throw new SpineException("name cannot be null."); + if (boneData == null) + throw new SpineException("boneData cannot be null."); + _index = index; + _name = name; + _boneData = boneData; + } + + public var index(get, never):Int; + + private function get_index():Int { + return _index; + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + public var boneData(get, never):BoneData; + + private function get_boneData():BoneData { + return _boneData; + } + + public function toString():String { + return _name; + } +} diff --git a/spine-haxe/spine-haxe/spine/SpacingMode.hx b/spine-haxe/spine-haxe/spine/SpacingMode.hx new file mode 100644 index 000000000..2fa38a1d8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SpacingMode.hx @@ -0,0 +1,53 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class SpacingMode { + public static var length(default, never):SpacingMode = new SpacingMode("length"); + public static var fixed(default, never):SpacingMode = new SpacingMode("fixed"); + public static var percent(default, never):SpacingMode = new SpacingMode("percent"); + public static var proportional(default, never):SpacingMode = new SpacingMode("proportional"); + + public static var values(default, never):Array = [length, fixed, percent, proportional]; + + public var name(default, null):String; + + public function new(name:String) { + this.name = name; + } + + public static function fromName(name:String):SpacingMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/SpineException.hx b/spine-haxe/spine-haxe/spine/SpineException.hx new file mode 100644 index 000000000..0ee3827f2 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/SpineException.hx @@ -0,0 +1,36 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class SpineException extends haxe.Exception { + public function new(message:String) { + super(message); + } +} diff --git a/spine-haxe/spine-haxe/spine/TextureRegion.hx b/spine-haxe/spine-haxe/spine/TextureRegion.hx new file mode 100644 index 000000000..cb001b678 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/TextureRegion.hx @@ -0,0 +1,47 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class TextureRegion { + public var width:Int = 0; + public var height:Int = 0; + public var u:Float = 0; + public var v:Float = 0; + public var u2:Float = 0; + public var v2:Float = 0; + public var degrees:Int = 0; + public var offsetX:Float = 0; + public var offsetY:Float = 0; + public var originalWidth:Int = 0; + public var originalHeight:Int = 0; + public var texture:Dynamic; + + public function new() {} +} diff --git a/spine-haxe/spine-haxe/spine/TransformConstraint.hx b/spine-haxe/spine-haxe/spine/TransformConstraint.hx new file mode 100644 index 000000000..0ecb794ab --- /dev/null +++ b/spine-haxe/spine-haxe/spine/TransformConstraint.hx @@ -0,0 +1,285 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class TransformConstraint implements Updatable { + private var _data:TransformConstraintData; + private var _bones:Array; + + public var target:Bone; + public var mixRotate:Float = 0; + public var mixX:Float = 0; + public var mixY:Float = 0; + public var mixScaleX:Float = 0; + public var mixScaleY:Float = 0; + public var mixShearY:Float = 0; + + private var _temp:Array = new Array(); + + public var active:Bool = false; + + public function new(data:TransformConstraintData, skeleton:Skeleton) { + if (data == null) + throw new SpineException("data cannot be null."); + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + _data = data; + mixRotate = data.mixRotate; + mixX = data.mixX; + mixY = data.mixY; + mixScaleX = data.mixScaleX; + mixScaleY = data.mixScaleY; + mixShearY = data.mixShearY; + _bones = new Array(); + for (boneData in data.bones) { + _bones.push(skeleton.findBone(boneData.name)); + } + target = skeleton.findBone(data.target.name); + } + + public function isActive():Bool { + return active; + } + + public function update():Void { + if (mixRotate == 0 && mixX == 0 && mixY == 0 && mixScaleX == 0 && mixScaleY == 0 && mixShearY == 0) + return; + + if (data.local) { + if (data.relative) { + applyRelativeLocal(); + } else { + applyAbsoluteLocal(); + } + } else { + if (data.relative) { + applyRelativeWorld(); + } else { + applyAbsoluteWorld(); + } + } + } + + private function applyAbsoluteWorld():Void { + var translate:Bool = mixX != 0 || mixY != 0; + var ta:Float = target.a, + tb:Float = target.b, + tc:Float = target.c, + td:Float = target.d; + var degRadReflect:Float = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + var offsetRotation:Float = data.offsetRotation * degRadReflect; + var offsetShearY:Float = data.offsetShearY * degRadReflect; + for (bone in bones) { + if (mixRotate != 0) { + var a:Float = bone.a, + b:Float = bone.b, + c:Float = bone.c, + d:Float = bone.d; + var r:Float = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > Math.PI) + r -= Math.PI * 2; + else if (r < -Math.PI) + r += Math.PI * 2; + r *= mixRotate; + var cos:Float = Math.cos(r), sin:Float = 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; + } + + if (translate) { + _temp[0] = data.offsetX; + _temp[1] = data.offsetY; + target.localToWorld(_temp); + bone.worldX += (_temp[0] - bone.worldX) * mixX; + bone.worldY += (_temp[1] - bone.worldY) * mixY; + } + + if (mixScaleX != 0) { + var s:Float = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + if (s != 0) + s = (s + (Math.sqrt(ta * ta + tc * tc) - s + _data.offsetScaleX) * mixScaleX) / s; + bone.a *= s; + bone.c *= s; + } + + if (mixScaleY != 0) { + var s:Float = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + if (s != 0) + s = (s + (Math.sqrt(tb * tb + td * td) - s + _data.offsetScaleY) * mixScaleY) / s; + bone.b *= s; + bone.d *= s; + } + + if (mixShearY > 0) { + var by:Float = Math.atan2(bone.d, bone.b); + var r:Float = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > Math.PI) + r -= Math.PI * 2; + else if (r < -Math.PI) + r += Math.PI * 2; + r = by + (r + offsetShearY) * mixShearY; + var s:Float = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + + bone.updateAppliedTransform(); + } + } + + public function applyRelativeWorld():Void { + var translate:Bool = mixX != 0 || mixY != 0; + var ta:Float = target.a, + tb:Float = target.b, + tc:Float = target.c, + td:Float = target.d; + var degRadReflect:Float = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + var offsetRotation:Float = _data.offsetRotation * degRadReflect, + offsetShearY:Float = _data.offsetShearY * degRadReflect; + for (bone in bones) { + if (mixRotate != 0) { + var a:Float = bone.a, + b:Float = bone.b, + c:Float = bone.c, + d:Float = bone.d; + var r:Float = Math.atan2(tc, ta) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + var cos:Float = Math.cos(r), sin:Float = 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; + } + + if (translate) { + var temp:Array = _temp; + temp[0] = _data.offsetX; + temp[1] = _data.offsetY; + target.localToWorld(temp); + bone.worldX += temp[0] * mixX; + bone.worldY += temp[1] * mixY; + } + + if (mixScaleX != 0) { + var s:Float = (Math.sqrt(ta * ta + tc * tc) - 1 + _data.offsetScaleX) * mixScaleX + 1; + bone.a *= s; + bone.c *= s; + } + + if (mixScaleY != 0) { + var s:Float = (Math.sqrt(tb * tb + td * td) - 1 + _data.offsetScaleY) * mixScaleY + 1; + bone.b *= s; + bone.d *= s; + } + + if (mixShearY > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + var b = bone.b; + var d = bone.d; + r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + + bone.updateAppliedTransform(); + } + } + + public function applyAbsoluteLocal():Void { + for (bone in bones) { + var rotation:Float = bone.arotation; + if (mixRotate != 0) { + var r:Float = target.arotation - rotation + _data.offsetRotation; + r -= (16384 - (Std.int(16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * mixRotate; + } + + var x:Float = bone.ax, y:Float = bone.ay; + x += (target.ax - x + _data.offsetX) * mixX; + y += (target.ay - y + _data.offsetY) * mixY; + + var scaleX:Float = bone.ascaleX, scaleY:Float = bone.ascaleY; + if (mixScaleX != 0 && scaleX != 0) { + scaleX = (scaleX + (target.ascaleX - scaleX + _data.offsetScaleX) * mixScaleX) / scaleX; + } + if (mixScaleY != 0 && scaleY != 0) { + scaleY = (scaleY + (target.ascaleY - scaleY + _data.offsetScaleY) * mixScaleX) / scaleY; + } + + var shearY:Float = bone.ashearY; + if (mixShearY != 0) { + var r:Float = target.ashearY - shearY + _data.offsetShearY; + r -= (16384 - (Std.int(16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * mixShearY; + } + + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + + public function applyRelativeLocal():Void { + for (bone in bones) { + var rotation:Float = bone.arotation + (target.arotation + _data.offsetRotation) * mixRotate; + var x:Float = bone.ax + (target.ax + _data.offsetX) * mixX; + var y:Float = bone.ay + (target.ay + _data.offsetY) * mixY; + var scaleX:Float = bone.ascaleX * (((target.ascaleX - 1 + _data.offsetScaleX) * mixScaleX) + 1); + var scaleY:Float = bone.ascaleY * (((target.ascaleY - 1 + _data.offsetScaleY) * mixScaleY) + 1); + var shearY:Float = bone.ashearY + (target.ashearY + _data.offsetShearY) * mixShearY; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + + public var data(get, never):TransformConstraintData; + + private function get_data():TransformConstraintData { + return _data; + } + + public var bones(get, never):Array; + + private function get_bones():Array { + return _bones; + } + + public function toString():String { + return _data.name != null ? _data.name : "TransformConstraint?"; + } +} diff --git a/spine-haxe/spine-haxe/spine/TransformConstraintData.hx b/spine-haxe/spine-haxe/spine/TransformConstraintData.hx new file mode 100644 index 000000000..086374492 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/TransformConstraintData.hx @@ -0,0 +1,60 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class TransformConstraintData extends ConstraintData { + private var _bones:Array = new Array(); + + public var target:BoneData; + public var mixRotate:Float = 0; + public var mixX:Float = 0; + public var mixY:Float = 0; + public var mixScaleX:Float = 0; + public var mixScaleY:Float = 0; + public var mixShearY:Float = 0; + public var offsetRotation:Float = 0; + public var offsetX:Float = 0; + public var offsetY:Float = 0; + public var offsetScaleX:Float = 0; + public var offsetScaleY:Float = 0; + public var offsetShearY:Float = 0; + public var relative:Bool = false; + public var local:Bool = false; + + public function new(name:String) { + super(name, 0, false); + } + + public var bones(get, never):Array; + + private function get_bones():Array { + return _bones; + } +} diff --git a/spine-haxe/spine-haxe/spine/TransformMode.hx b/spine-haxe/spine-haxe/spine/TransformMode.hx new file mode 100644 index 000000000..b0bd340de --- /dev/null +++ b/spine-haxe/spine-haxe/spine/TransformMode.hx @@ -0,0 +1,54 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class TransformMode { + public static var normal(default, never):TransformMode = new TransformMode("normal"); + public static var onlyTranslation(default, never):TransformMode = new TransformMode("onlyTranslation"); + public static var noRotationOrReflection(default, never):TransformMode = new TransformMode("noRotationOrReflection"); + public static var noScale(default, never):TransformMode = new TransformMode("noScale"); + public static var noScaleOrReflection(default, never):TransformMode = new TransformMode("noScaleOrReflection"); + + public static var values:Array = [normal, onlyTranslation, noRotationOrReflection, noScale, noScaleOrReflection]; + + public var name(default, null):String; + + public function new(name:String) { + this.name = name; + } + + public static function fromName(name:String):TransformMode { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/Triangulator.hx b/spine-haxe/spine-haxe/spine/Triangulator.hx new file mode 100644 index 000000000..abdc908af --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Triangulator.hx @@ -0,0 +1,310 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +class Triangulator { + private var convexPolygons:Array> = new Array>(); + private var convexPolygonsIndices:Array> = new Array>(); + private var indicesArray:Array = new Array(); + private var isConcaveArray:Array = new Array(); + private var triangles:Array = new Array(); + private var polygonPool:Pool> = new Pool(function():Dynamic { + return new Array(); + }); + private var polygonIndicesPool:Pool> = new Pool(function():Dynamic { + return new Array(); + }); + + public function new() {} + + public function triangulate(vertices:Array):Array { + var vertexCount:Int = vertices.length >> 1; + + indicesArray.resize(0); + for (i in 0...vertexCount) { + indicesArray.push(i); + } + + isConcaveArray.resize(0); + for (i in 0...vertexCount) { + isConcaveArray.push(isConcave(i, vertexCount, vertices, indicesArray)); + } + + triangles.resize(0); + + while (vertexCount > 3) { + // Find ear tip. + var previous:Int = vertexCount - 1, next:Int = 1; + var i:Int = 0; + while (true) { + if (!isConcaveArray[i]) { + var p1:Int = indicesArray[previous] << 1, + p2:Int = indicesArray[i] << 1, + p3:Int = indicesArray[next] << 1; + var p1x:Float = vertices[p1], p1y:Float = vertices[p1 + 1]; + var p2x:Float = vertices[p2], p2y:Float = vertices[p2 + 1]; + var p3x:Float = vertices[p3], p3y:Float = vertices[p3 + 1]; + var ii:Int = (next + 1) % vertexCount; + while (ii != previous) { + if (!isConcaveArray[ii]) { + ii = (ii + 1) % vertexCount; + continue; + } + var v:Int = indicesArray[ii] << 1; + var vx:Float = vertices[v]; + var vy:Float = vertices[v + 1]; + if (positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (positiveArea(p2x, p2y, p3x, p3y, vx, vy)) { + break; + } + } + } + ii = (ii + 1) % vertexCount; + } + break; + } + + if (next == 0) { + do { + if (!isConcaveArray[i]) + break; + i--; + } while (i > 0); + break; + } + + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + + // Cut ear tip. + triangles.push(indicesArray[(vertexCount + i - 1) % vertexCount]); + triangles.push(indicesArray[i]); + triangles.push(indicesArray[(i + 1) % vertexCount]); + indicesArray.splice(i, 1); + isConcaveArray.splice(i, 1); + vertexCount--; + + var previousIndex:Int = (vertexCount + i - 1) % vertexCount; + var nextIndex:Int = i == vertexCount ? 0 : i; + isConcaveArray[previousIndex] = isConcave(previousIndex, vertexCount, vertices, indicesArray); + isConcaveArray[nextIndex] = isConcave(nextIndex, vertexCount, vertices, indicesArray); + } + + if (vertexCount == 3) { + triangles.push(indicesArray[2]); + triangles.push(indicesArray[0]); + triangles.push(indicesArray[1]); + } + + return triangles; + } + + public function decompose(vertices:Array, triangles:Array):Array> { + for (i in 0...convexPolygons.length) { + this.polygonPool.free(convexPolygons[i]); + } + convexPolygons.resize(0); + + for (i in 0...convexPolygonsIndices.length) { + this.polygonIndicesPool.free(convexPolygonsIndices[i]); + } + convexPolygonsIndices.resize(0); + + var polygonIndices:Array = polygonIndicesPool.obtain(); + polygonIndices.resize(0); + + var polygon:Array = polygonPool.obtain(); + polygon.resize(0); + + // Merge subsequent triangles if they form a triangle fan. + var fanBaseIndex:Int = -1, lastWinding:Int = 0; + var x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, y3:Float; + var winding1:Int, winding2:Int, o:Int; + var i:Int = 0; + while (i < triangles.length) { + var t1:Int = triangles[i] << 1, + t2:Int = triangles[i + 1] << 1, + t3:Int = triangles[i + 2] << 1; + x1 = vertices[t1]; + y1 = vertices[t1 + 1]; + x2 = vertices[t2]; + y2 = vertices[t2 + 1]; + 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). + var merged:Bool = false; + if (fanBaseIndex == t1) { + o = polygon.length - 4; + winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + 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 { + polygonPool.free(polygon); + polygonIndicesPool.free(polygonIndices); + } + polygon = polygonPool.obtain(); + polygon.resize(0); + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = polygonIndicesPool.obtain(); + polygonIndices.resize(0); + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + + i += 3; + } + + 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. + i = 0; + var n:Int = convexPolygons.length; + while (i < n) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) { + i++; + continue; + } + var firstIndex:Int = polygonIndices[0]; + var lastIndex:Int = polygonIndices[polygonIndices.length - 1]; + + polygon = convexPolygons[i]; + o = polygon.length - 4; + var prevPrevX:Float = polygon[o], prevPrevY:Float = polygon[o + 1]; + var prevX:Float = polygon[o + 2], prevY:Float = polygon[o + 3]; + var firstX:Float = polygon[0], firstY:Float = polygon[1]; + var secondX:Float = polygon[2], secondY:Float = polygon[3]; + var currWinding:Int = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + + var ii:Int = 0; + while (ii < n) { + if (ii == i) { + ii++; + continue; + } + var otherIndices:Array = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) { + ii++; + continue; + } + var otherFirstIndex:Int = otherIndices[0]; + var otherSecondIndex:Int = otherIndices[1]; + var otherLastIndex:Int = otherIndices[2]; + + var otherPoly:Array = convexPolygons[ii]; + x3 = otherPoly[otherPoly.length - 2]; + y3 = otherPoly[otherPoly.length - 1]; + + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) { + ii++; + continue; + } + winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == currWinding && winding2 == currWinding) { + otherPoly.resize(0); + otherIndices.resize(0); + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + + ii++; + } + + i++; + } + + // Remove empty polygons that resulted from the merge step above. + i = convexPolygons.length - 1; + while (i >= 0) { + 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); + } + + i--; + } + + return convexPolygons; + } + + private static function isConcave(index:Int, vertexCount:Int, vertices:Array, indices:Array):Bool { + var previous:Int = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current:Int = indices[index] << 1; + var next:Int = indices[(index + 1) % vertexCount] << 1; + return !positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + } + + private static function positiveArea(p1x:Float, p1y:Float, p2x:Float, p2y:Float, p3x:Float, p3y:Float):Bool { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + } + + private static function winding(p1x:Float, p1y:Float, p2x:Float, p2y:Float, p3x:Float, p3y:Float):Int { + var px:Float = p2x - p1x, py:Float = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + } +} diff --git a/spine-haxe/spine-haxe/spine/Updatable.hx b/spine-haxe/spine-haxe/spine/Updatable.hx new file mode 100644 index 000000000..37c6aa78e --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Updatable.hx @@ -0,0 +1,36 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +interface Updatable { + function update():Void; + + function isActive():Bool; +} diff --git a/spine-haxe/spine-haxe/spine/Vertex.hx b/spine-haxe/spine-haxe/spine/Vertex.hx new file mode 100644 index 000000000..385893342 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/Vertex.hx @@ -0,0 +1,44 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine; + +/** + * @author badlogic + */ +class Vertex { + public var x:Float = 0; + public var y:Float = 0; + public var u:Float = 0; + public var v:Float = 0; + public var light:Color = new spine.Color(0, 0, 0); + public var dark:Color = new spine.Color(0, 0, 0); + + public function new() {} +} diff --git a/spine-haxe/spine-haxe/spine/animation/AlphaTimeline.hx b/spine-haxe/spine-haxe/spine/animation/AlphaTimeline.hx new file mode 100644 index 000000000..3090d54d3 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/AlphaTimeline.hx @@ -0,0 +1,85 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.Skeleton; +import spine.Slot; + +class AlphaTimeline extends CurveTimeline1 implements SlotTimeline { + private static inline var ENTRIES:Int = 4; + private static inline var R:Float = 1; + private static inline var G:Float = 2; + private static inline var B:Float = 3; + + private var slotIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int) { + super(frameCount, bezierCount, [Property.alpha + "|" + slotIndex]); + this.slotIndex = slotIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + var color:Color = slot.color; + if (time < frames[0]) // Time is before first frame. + { + var setup:Color = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.a = setup.a; + case MixBlend.first: + color.a += (setup.a - color.a) * alpha; + } + return; + } + + var a:Float = getCurveValue(time); + if (alpha == 1) { + color.a = a; + } else { + if (blend == MixBlend.setup) + color.a = slot.data.color.a; + color.a += (a - color.a) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/Animation.hx b/spine-haxe/spine-haxe/spine/animation/Animation.hx new file mode 100644 index 000000000..c636b61b9 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/Animation.hx @@ -0,0 +1,104 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import haxe.ds.StringMap; +import spine.Event; +import spine.Skeleton; + +class Animation { + private var _name:String; + private var _timelines:Array; + private var _timelineIds:StringMap = new StringMap(); + + public var duration:Float = 0; + + public function new(name:String, timelines:Array, duration:Float) { + if (name == null) + throw new SpineException("name cannot be null."); + _name = name; + setTimelines(timelines); + this.duration = duration; + } + + public function setTimelines(timelines:Array) { + if (timelines == null) + throw new SpineException("timelines cannot be null."); + _timelines = timelines; + _timelineIds = new StringMap(); + for (timeline in timelines) { + var ids:Array = timeline.propertyIds; + for (id in ids) { + _timelineIds.set(id, true); + } + } + } + + public function hasTimeline(ids:Array):Bool { + for (id in ids) { + if (_timelineIds.exists(id)) + return true; + } + return false; + } + + /** Poses the skeleton at the specified time for this animation. */ + public function apply(skeleton:Skeleton, lastTime:Float, time:Float, loop:Bool, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + + if (loop && duration != 0) { + time %= duration; + if (lastTime > 0) + lastTime %= duration; + } + + for (timeline in timelines) { + timeline.apply(skeleton, lastTime, time, events, alpha, blend, direction); + } + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + public function toString():String { + return _name; + } + + public var timelines(get, never):Array; + + private function get_timelines():Array { + return _timelines; + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/AnimationState.hx b/spine-haxe/spine-haxe/spine/animation/AnimationState.hx new file mode 100644 index 000000000..94d128793 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/AnimationState.hx @@ -0,0 +1,808 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import haxe.ds.StringMap; +import spine.animation.Listeners.EventListeners; +import spine.Event; +import spine.Pool; +import spine.Skeleton; + +class AnimationState { + public static inline var SUBSEQUENT:Int = 0; + public static inline var FIRST:Int = 1; + public static inline var HOLD_SUBSEQUENT:Int = 2; + public static inline var HOLD_FIRST:Int = 3; + public static inline var HOLD_MIX:Int = 4; + public static inline var SETUP:Int = 1; + public static inline var CURRENT:Int = 2; + + private static var emptyAnimation:Animation = new Animation("", new Array(), 0); + + public var data:AnimationStateData; + public var tracks:Array = new Array(); + + private var events:Array = new Array(); + + public var onStart:Listeners = new Listeners(); + public var onInterrupt:Listeners = new Listeners(); + public var onEnd:Listeners = new Listeners(); + public var onDispose:Listeners = new Listeners(); + public var onComplete:Listeners = new Listeners(); + public var onEvent:EventListeners = new EventListeners(); + + private var queue:EventQueue; + private var propertyIDs:StringSet = new StringSet(); + + public var animationsChanged:Bool = false; + public var timeScale:Float = 1; + public var trackEntryPool:Pool; + + private var unkeyedState:Int = 0; + + public function new(data:AnimationStateData) { + if (data == null) + throw new SpineException("data can not be null"); + this.data = data; + this.queue = new EventQueue(this); + this.trackEntryPool = new Pool(function():Dynamic { + return new TrackEntry(); + }); + } + + public function update(delta:Float):Void { + delta *= timeScale; + for (i in 0...tracks.length) { + var current:TrackEntry = tracks[i]; + if (current == null) + continue; + + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + + var currentDelta:Float = delta * current.timeScale; + + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + + var next:TrackEntry = current.next; + if (next != null) { + // When the next entry's delay is passed, change to the next entry, preserving leftover time. + var nextTime:Float = 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; + setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += currentDelta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + // Clear the track when there is no next entry, the track end time is reached, and there is no mixingFrom. + tracks[i] = null; + queue.end(current); + clearNext(current); + continue; + } + + if (current.mixingFrom != null && updateMixingFrom(current, delta)) { + // End mixing from entries once all have completed. + var from:TrackEntry = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + queue.end(from); + from = from.mixingFrom; + } + } + + current.trackTime += currentDelta; + } + + queue.drain(); + } + + private function updateMixingFrom(to:TrackEntry, delta:Float):Bool { + var from:TrackEntry = to.mixingFrom; + if (from == null) + return true; + + var finished:Bool = 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; + queue.end(from); + } + return finished; + } + + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + } + + public function apply(skeleton:Skeleton):Bool { + if (skeleton == null) + throw new SpineException("skeleton cannot be null."); + if (animationsChanged) + _animationsChanged(); + var applied:Bool = false; + + for (i in 0...tracks.length) { + var current:TrackEntry = tracks[i]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend:MixBlend = i == 0 ? MixBlend.first : current.mixBlend; + + // Apply mixing from entries first. + var mix:Float = current.alpha; + if (current.mixingFrom != null) { + mix *= applyMixingFrom(current, skeleton, blend); + } else if (current.trackTime >= current.trackEnd && current.next == null) { + mix = 0; + } + + // Apply current entry. + var animationLast:Float = current.animationLast, + animationTime:Float = current.getAnimationTime(), + applyTime:Float = animationTime; + var applyEvents:Array = events; + if (current.reverse) { + applyTime = current.animation.duration - applyTime; + applyEvents = null; + } + var timelines:Array = current.animation.timelines; + var timelineCount:Int = timelines.length; + var timeline:Timeline; + if ((i == 0 && mix == 1) || blend == MixBlend.add) { + for (timeline in timelines) { + timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, MixDirection.mixIn); + } + } else { + var timelineMode:Array = current.timelineMode; + + var shortestRotation = current.shortestRotation; + var firstFrame:Bool = !shortestRotation && current.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + current.timelinesRotation.resize(timelineCount << 1); + + for (ii in 0...timelineCount) { + var timeline:Timeline = timelines[ii]; + var timelineBlend:MixBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; + if (!shortestRotation && Std.isOfType(timeline, RotateTimeline)) { + this.applyRotateTimeline(cast(timeline, RotateTimeline), skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, + firstFrame); + } else if (Std.isOfType(timeline, AttachmentTimeline)) { + this.applyAttachmentTimeline(cast(timeline, AttachmentTimeline), skeleton, applyTime, blend, true); + } else { + timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn); + } + } + } + queueEvents(current, animationTime); + events.resize(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:Int = unkeyedState + SETUP; + for (slot in skeleton.slots) { + if (slot.attachmentState == setupState) { + var attachmentName:String = slot.data.attachmentName; + slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slot.data.index, attachmentName); + } + } + unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot. + + queue.drain(); + return applied; + } + + private function applyMixingFrom(to:TrackEntry, skeleton:Skeleton, blend:MixBlend):Float { + var from:TrackEntry = to.mixingFrom; + if (from.mixingFrom != null) + applyMixingFrom(from, skeleton, blend); + + var mix:Float = 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; + } + + var attachments:Bool = mix < from.attachmentThreshold, + drawOrder:Bool = mix < from.drawOrderThreshold; + var timelineCount:Int = from.animation.timelines.length; + var timelines:Array = from.animation.timelines; + var alphaHold:Float = from.alpha * to.interruptAlpha, + alphaMix:Float = alphaHold * (1 - mix); + var animationLast:Float = from.animationLast, + animationTime:Float = from.getAnimationTime(), + applyTime:Float = animationTime; + var applyEvents:Array = null; + if (from.reverse) { + applyTime = from.animation.duration - applyTime; + } else if (mix < from.eventThreshold) { + applyEvents = events; + } + + if (blend == MixBlend.add) { + for (timeline in timelines) { + timeline.apply(skeleton, animationLast, applyTime, applyEvents, alphaMix, blend, MixDirection.mixOut); + } + } else { + var timelineMode:Array = from.timelineMode; + var timelineHoldMix:Array = from.timelineHoldMix; + var shortestRotation = from.shortestRotation; + + var firstFrame:Bool = !shortestRotation && from.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + from.timelinesRotation.resize(timelineCount << 1); + var timelinesRotation:Array = from.timelinesRotation; + + from.totalAlpha = 0; + for (i in 0...timelineCount) { + var timeline:Timeline = timelines[i]; + var direction:MixDirection = MixDirection.mixOut; + var timelineBlend:MixBlend; + var alpha:Float = 0; + switch (timelineMode[i]) { + case SUBSEQUENT: + if (!drawOrder && Std.isOfType(timeline, DrawOrderTimeline)) + continue; + timelineBlend = blend; + alpha = alphaMix; + case FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaMix; + case HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + case HOLD_FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaHold; + default: + timelineBlend = MixBlend.setup; + var holdMix:TrackEntry = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + } + + from.totalAlpha += alpha; + + if (!shortestRotation && Std.isOfType(timeline, RotateTimeline)) { + applyRotateTimeline(cast(timeline, RotateTimeline), skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame); + } else if (Std.isOfType(timeline, AttachmentTimeline)) { + applyAttachmentTimeline(cast(timeline, AttachmentTimeline), skeleton, applyTime, timelineBlend, attachments); + } else { + if (drawOrder && Std.isOfType(timeline, DrawOrderTimeline) && timelineBlend == MixBlend.setup) + direction = MixDirection.mixIn; + timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); + } + } + } + + if (to.mixDuration > 0) + queueEvents(from, animationTime); + events.resize(0); + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + + return mix; + } + + public function applyAttachmentTimeline(timeline:AttachmentTimeline, skeleton:Skeleton, time:Float, blend:MixBlend, attachments:Bool) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + + if (time < timeline.frames[0]) { // Time is before first frame. + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } else + this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], 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 + SETUP; + } + + public function applyRotateTimeline(timeline:RotateTimeline, skeleton:Skeleton, time:Float, alpha:Float, blend:MixBlend, timelinesRotation:Array, + i:Int, firstFrame:Bool) { + if (firstFrame) + timelinesRotation[i] = 0; + + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn); + return; + } + + var bone = skeleton.bones[timeline.boneIndex]; + if (!bone.active) + return; + var frames = timeline.frames; + var r1:Float = 0, r2:Float = 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; + r2 = bone.data.rotation + timeline.getCurveValue(time); + } + + // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. + var total:Float = 0, diff:Float = r2 - r1; + diff -= (16384.0 - Std.int((16384.499999999996 - diff / 360.0))) * 360.0; + if (diff == 0) { + total = timelinesRotation[i]; + } else { + var lastTotal:Float = 0, lastDiff:Float = 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. + } + var 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; + bone.rotation = r1 + total * alpha; + } + + private function setAttachment(skeleton:Skeleton, slot:Slot, attachmentName:String, attachments:Bool):Void { + slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slot.data.index, attachmentName); + if (attachments) + slot.attachmentState = unkeyedState + CURRENT; + } + + private function queueEvents(entry:TrackEntry, animationTime:Float):Void { + var animationStart:Float = entry.animationStart, + animationEnd:Float = entry.animationEnd; + var duration:Float = animationEnd - animationStart; + var trackLastWrapped:Float = entry.trackLast % duration; + + // Queue events before complete. + var event:Event; + var i:Int = 0; + var n:Int = events.length; + while (i < n) { + event = events[i++]; + if (event == null) + continue; + if (event.time < trackLastWrapped) + break; + if (event.time > animationEnd) + continue; // Discard events outside animation start/end. + queue.event(entry, event); + } + + // Queue complete if completed a loop iteration or the animation. + var complete:Bool; + if (entry.loop) { + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + } else { + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + } + if (complete) + queue.complete(entry); + + // Queue events after complete. + while (i < n) { + event = events[i++]; + if (event == null) + continue; + if (event.time < animationStart) + continue; // Discard events outside animation start/end. + queue.event(entry, event); + } + } + + public function clearTracks():Void { + var oldTrainDisabled:Bool = queue.drainDisabled; + queue.drainDisabled = true; + for (i in 0...tracks.length) { + clearTrack(i); + } + tracks.resize(0); + queue.drainDisabled = oldTrainDisabled; + queue.drain(); + } + + public function clearTrack(trackIndex:Int):Void { + if (trackIndex >= tracks.length) + return; + var current:TrackEntry = tracks[trackIndex]; + if (current == null) + return; + + queue.end(current); + clearNext(current); + + var entry:TrackEntry = current; + while (true) { + var from:TrackEntry = entry.mixingFrom; + if (from == null) + break; + queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + + tracks[current.trackIndex] = null; + + queue.drain(); + } + + private function setCurrent(index:Int, current:TrackEntry, interrupt:Bool):Void { + var from:TrackEntry = expandToIndex(index); + tracks[index] = current; + + if (from != null) { + if (interrupt) + 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.resize(0); // Reset rotation for mixing out, in case entry was mixed in. + } + + queue.start(current); + } + + public function setAnimationByName(trackIndex:Int, animationName:String, loop:Bool):TrackEntry { + var animation:Animation = data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new SpineException("Animation not found: " + animationName); + return setAnimation(trackIndex, animation, loop); + } + + public function setAnimation(trackIndex:Int, animation:Animation, loop:Bool):TrackEntry { + if (animation == null) + throw new SpineException("animation cannot be null."); + var interrupt:Bool = true; + var current:TrackEntry = expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + // Don't mix from an entry that was never applied. + tracks[trackIndex] = current.mixingFrom; + queue.interrupt(current); + queue.end(current); + clearNext(current); + current = current.mixingFrom; + interrupt = false; + } else { + clearNext(current); + } + } + var entry:TrackEntry = trackEntry(trackIndex, animation, loop, current); + setCurrent(trackIndex, entry, interrupt); + queue.drain(); + return entry; + } + + public function addAnimationByName(trackIndex:Int, animationName:String, loop:Bool, delay:Float):TrackEntry { + var animation:Animation = data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new SpineException("Animation not found: " + animationName); + return addAnimation(trackIndex, animation, loop, delay); + } + + public function addAnimation(trackIndex:Int, animation:Animation, loop:Bool, delay:Float):TrackEntry { + if (animation == null) + throw new SpineException("animation cannot be null."); + + var last:TrackEntry = expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) { + last = last.next; + } + } + + var entry:TrackEntry = trackEntry(trackIndex, animation, loop, last); + + if (last == null) { + setCurrent(trackIndex, entry, true); + queue.drain(); + } else { + last.next = entry; + entry.previous = last; + if (delay <= 0) + delay += last.getTrackComplete() - entry.mixDuration; + } + + entry.delay = delay; + return entry; + } + + public function setEmptyAnimation(trackIndex:Int, mixDuration:Float):TrackEntry { + var entry:TrackEntry = setAnimation(trackIndex, emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + + public function addEmptyAnimation(trackIndex:Int, mixDuration:Float, delay:Float):TrackEntry { + var entry:TrackEntry = addAnimation(trackIndex, emptyAnimation, false, delay); + if (delay <= 0) + entry.delay += entry.mixDuration - mixDuration; + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + + public function setEmptyAnimations(mixDuration:Float):Void { + var oldDrainDisabled:Bool = queue.drainDisabled; + queue.drainDisabled = true; + for (i in 0...tracks.length) { + var current:TrackEntry = tracks[i]; + if (current != null) + setEmptyAnimation(current.trackIndex, mixDuration); + } + queue.drainDisabled = oldDrainDisabled; + queue.drain(); + } + + private function expandToIndex(index:Int):TrackEntry { + if (index < tracks.length) + return tracks[index]; + tracks.resize(index + 1); + return null; + } + + private function trackEntry(trackIndex:Int, animation:Animation, loop:Bool, last:TrackEntry):TrackEntry { + var entry:TrackEntry = cast(trackEntryPool.obtain(), TrackEntry); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + + entry.reverse = false; + entry.shortestRotation = 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 = 2147483647; + entry.timeScale = 1; + + entry.alpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : data.getMix(last.animation, animation); + entry.interruptAlpha = 1; + entry.totalAlpha = 0; + entry.mixBlend = MixBlend.replace; + return entry; + } + + /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */ + public function clearNext(entry:TrackEntry):Void { + var next:TrackEntry = entry.next; + while (next != null) { + queue.dispose(next); + next = next.next; + } + entry.next = null; + } + + private function _animationsChanged():Void { + animationsChanged = false; + + propertyIDs.clear(); + var entry:TrackEntry = null; + for (i in 0...tracks.length) { + entry = tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) { + entry = entry.mixingFrom; + } + do { + if (entry.mixingTo == null || entry.mixBlend != MixBlend.add) + computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + } + + private function computeHold(entry:TrackEntry):Void { + var to:TrackEntry = entry.mixingTo; + var timelines:Array = entry.animation.timelines; + var timelinesCount:Int = entry.animation.timelines.length; + var timelineMode:Array = entry.timelineMode; + timelineMode.resize(timelinesCount); + entry.timelineHoldMix.resize(0); + var timelineHoldMix:Array = entry.timelineHoldMix; + timelineHoldMix.resize(timelinesCount); + + if (to != null && to.holdPrevious) { + for (i in 0...timelinesCount) { + timelineMode[i] = propertyIDs.addAll(timelines[i].propertyIds) ? HOLD_FIRST : HOLD_SUBSEQUENT; + } + return; + } + + var continueOuter:Bool; + for (i in 0...timelinesCount) { + continueOuter = false; + var timeline:Timeline = timelines[i]; + var ids:Array = timeline.propertyIds; + if (!propertyIDs.addAll(ids)) { + timelineMode[i] = SUBSEQUENT; + } else if (to == null + || Std.isOfType(timeline, AttachmentTimeline) + || Std.isOfType(timeline, DrawOrderTimeline) + || Std.isOfType(timeline, EventTimeline) + || !to.animation.hasTimeline(ids)) { + timelineMode[i] = FIRST; + } else { + var next:TrackEntry = to.mixingTo; + while (next != null) { + if (next.animation.hasTimeline(ids)) { + next = next.mixingTo; + continue; + } + if (entry.mixDuration > 0) { + timelineMode[i] = HOLD_MIX; + timelineHoldMix[i] = next; + continueOuter = true; + break; + } + break; + } + if (continueOuter) + continue; + timelineMode[i] = HOLD_FIRST; + } + } + } + + public function getCurrent(trackIndex:Int):TrackEntry { + if (trackIndex >= tracks.length) + return null; + return tracks[trackIndex]; + } + + public var fHasEndListener(get, never):Bool; + + private function get_fHasEndListener():Bool { + return onComplete.listeners.length > 0 || onEnd.listeners.length > 0; + } + + public function clearListeners():Void { + onStart.listeners.resize(0); + onInterrupt.listeners.resize(0); + onEnd.listeners.resize(0); + onDispose.listeners.resize(0); + onComplete.listeners.resize(0); + onEvent.listeners.resize(0); + } + + public function clearListenerNotifications():Void { + queue.clear(); + } +} + +class StringSet { + private var entries:StringMap = new StringMap(); + private var size:Int = 0; + + public function new() {} + + public function add(value:String):Bool { + var contains:Bool = entries.exists(value); + entries.set(value, true); + if (!contains) { + size++; + return true; + } + return false; + } + + public function addAll(values:Array):Bool { + var oldSize:Int = size; + for (i in 0...values.length) { + add(values[i]); + } + return oldSize != size; + } + + public function contains(value:String):Bool { + return entries.exists(value); + } + + public function clear():Void { + entries = new StringMap(); + size = 0; + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/AnimationStateData.hx b/spine-haxe/spine-haxe/spine/animation/AnimationStateData.hx new file mode 100644 index 000000000..0bf626ba9 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/AnimationStateData.hx @@ -0,0 +1,75 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import haxe.ds.StringMap; +import spine.SkeletonData; + +class AnimationStateData { + private var _skeletonData:SkeletonData; + private var animationToMixTime:StringMap = new StringMap(); + + public var defaultMix:Float = 0; + + public function new(skeletonData:SkeletonData) { + _skeletonData = skeletonData; + } + + public var skeletonData(get, never):SkeletonData; + + private function get_skeletonData():SkeletonData { + return _skeletonData; + } + + public function setMixByName(fromName:String, toName:String, duration:Float):Void { + var from:Animation = _skeletonData.findAnimation(fromName); + if (from == null) + throw new SpineException("Animation not found: " + fromName); + var to:Animation = _skeletonData.findAnimation(toName); + if (to == null) + throw new SpineException("Animation not found: " + toName); + setMix(from, to, duration); + } + + public function setMix(from:Animation, to:Animation, duration:Float):Void { + if (from == null) + throw new SpineException("from cannot be null."); + if (to == null) + throw new SpineException("to cannot be null."); + animationToMixTime.set(from.name + ":" + to.name, duration); + } + + public function getMix(from:Animation, to:Animation):Float { + if (animationToMixTime.exists(from.name + ":" + to.name)) + return animationToMixTime.get(from.name + ":" + to.name); + else + return defaultMix; + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/AttachmentTimeline.hx b/spine-haxe/spine-haxe/spine/animation/AttachmentTimeline.hx new file mode 100644 index 000000000..b6d7b1290 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/AttachmentTimeline.hx @@ -0,0 +1,89 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.Skeleton; +import spine.Slot; + +class AttachmentTimeline extends Timeline implements SlotTimeline { + public var slotIndex:Int = 0; + + /** The attachment name for each key frame. May contain null values to clear the attachment. */ + public var attachmentNames:Array; + + public function new(frameCount:Int, slotIndex:Int) { + super(frameCount, [Property.attachment + "|" + slotIndex]); + this.slotIndex = slotIndex; + attachmentNames = new Array(); + attachmentNames.resize(frameCount); + } + + public override function getFrameCount():Int { + return frames.length; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + /** Sets the time in seconds and the attachment name for the specified key frame. */ + public function setFrame(frame:Int, time:Float, attachmentName:String):Void { + frames[frame] = time; + attachmentNames[frame] = attachmentName; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) { + setAttachment(skeleton, slot, slot.data.attachmentName); + } + return; + } + + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) { + setAttachment(skeleton, slot, slot.data.attachmentName); + } + return; + } + + setAttachment(skeleton, slot, attachmentNames[Timeline.search1(frames, time)]); + } + + private function setAttachment(skeleton:Skeleton, slot:Slot, attachmentName:String):Void { + slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slotIndex, attachmentName); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/BoneTimeline.hx b/spine-haxe/spine-haxe/spine/animation/BoneTimeline.hx new file mode 100644 index 000000000..fd229ea4d --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/BoneTimeline.hx @@ -0,0 +1,34 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +interface BoneTimeline { + function getBoneIndex():Int; +} diff --git a/spine-haxe/spine-haxe/spine/animation/CurveTimeline.hx b/spine-haxe/spine-haxe/spine/animation/CurveTimeline.hx new file mode 100644 index 000000000..50e39c11d --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/CurveTimeline.hx @@ -0,0 +1,132 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +/** Base class for frames that use an interpolation bezier curve. */ +class CurveTimeline extends Timeline { + private static inline var LINEAR:Int = 0; + private static inline var STEPPED:Int = 1; + private static inline var BEZIER:Int = 2; + private static inline var BEZIER_SIZE:Int = 18; + + private var curves:Array; // type, x, y, ... + + public function new(frameCount:Int, bezierCount:Int, propertyIds:Array) { + super(frameCount, propertyIds); + curves = new Array(); + curves.resize(frameCount + bezierCount * BEZIER_SIZE); + curves[frameCount - 1] = STEPPED; + } + + public function setLinear(frame:Int):Void { + curves[frame] = LINEAR; + } + + public function setStepped(frame:Int):Void { + curves[frame] = STEPPED; + } + + /** Shrinks the storage for Bezier curves, for use when bezierCount (specified in the constructor) was larger + * than the actual number of Bezier curves. */ + public function shrink(bezierCount:Int):Void { + var size:Int = getFrameCount() + bezierCount * BEZIER_SIZE; + curves.resize(size); + } + + /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than + * one curve per frame. + * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and bezierCount - 1 (specified + * in the constructor), inclusive. + * @param frame Between 0 and frameCount - 1, inclusive. + * @param value The index of the value for this frame that this curve is used for. + * @param time1 The time for the first key. + * @param value1 The value for the first key. + * @param cx1 The time for the first Bezier handle. + * @param cy1 The value for the first Bezier handle. + * @param cx2 The time of the second Bezier handle. + * @param cy2 The value for the second Bezier handle. + * @param time2 The time for the second key. + * @param value2 The value for the second key. */ + public function setBezier(bezier:Int, frame:Int, value:Float, time1:Float, value1:Float, cx1:Float, cy1:Float, cx2:Float, cy2:Float, time2:Float, + value2:Float):Void { + var i:Int = getFrameCount() + bezier * BEZIER_SIZE; + if (value == 0) + curves[frame] = BEZIER + i; + var tmpx:Float = (time1 - cx1 * 2 + cx2) * 0.03, + tmpy:Float = (value1 - cy1 * 2 + cy2) * 0.03; + var dddx:Float = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, + dddy:Float = ((cy1 - cy2) * 3 - value1 + value2) * 0.006; + var ddx:Float = tmpx * 2 + dddx, ddy:Float = tmpy * 2 + dddy; + var dx:Float = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, + dy:Float = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667; + var x:Float = time1 + dx, y:Float = value1 + dy; + var n:Int = i + BEZIER_SIZE; + while (i < n) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + + i += 2; + } + } + + /** Returns the Bezier interpolated value for the specified time. + * @param frameIndex The index into {@link #getFrames()} for the values of the frame before time. + * @param valueOffset The offset from frameIndex to the value this curve is used for. + * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */ + public function getBezierValue(time:Float, frameIndex:Int, valueOffset:Int, i:Int):Float { + var x:Float, y:Float; + if (curves[i] > time) { + x = frames[frameIndex]; + y = frames[frameIndex + valueOffset]; + return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); + } + var n:Int = i + BEZIER_SIZE; + i += 2; + while (i < n) { + if (curves[i] >= time) { + x = curves[i - 2]; + y = curves[i - 1]; + return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); + } + + i += 2; + } + frameIndex += getFrameEntries(); + x = curves[n - 2]; + y = curves[n - 1]; + return y + (time - x) / (frames[frameIndex] - x) * (frames[frameIndex + valueOffset] - y); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/CurveTimeline1.hx b/spine-haxe/spine-haxe/spine/animation/CurveTimeline1.hx new file mode 100644 index 000000000..4dfc54122 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/CurveTimeline1.hx @@ -0,0 +1,78 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +/** The base class for a {@link CurveTimeline} that sets one property. */ +class CurveTimeline1 extends CurveTimeline { + private static inline var ENTRIES:Int = 2; + private static inline var VALUE:Int = 1; + + /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(Int)}. + * @param propertyIds Unique identifiers for the properties the timeline modifies. */ + public function new(frameCount:Int, bezierCount:Int, propertyIds:Array) { + super(frameCount, bezierCount, propertyIds); + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + /** Sets the time and values for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time The frame time in seconds. */ + public function setFrame(frame:Int, time:Float, value1:Float):Void { + frame <<= 1; + frames[frame] = time; + frames[frame + VALUE] = value1; + } + + /** Returns the interpolated value for the specified time. */ + public function getCurveValue(time:Float):Float { + var i:Int = frames.length - 2; + var ii:Int = 2; + while (ii <= i) { + if (frames[ii] > time) { + i = ii - 2; + break; + } + ii += 2; + } + + var curveType:Int = Std.int(curves[i >> 1]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i], value:Float = frames[i + VALUE]; + return value + (time - before) / (frames[i + ENTRIES] - before) * (frames[i + ENTRIES + VALUE] - value); + case CurveTimeline.STEPPED: + return frames[i + VALUE]; + } + return getBezierValue(time, i, VALUE, curveType - CurveTimeline.BEZIER); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/CurveTimeline2.hx b/spine-haxe/spine-haxe/spine/animation/CurveTimeline2.hx new file mode 100644 index 000000000..fc8cb1cd4 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/CurveTimeline2.hx @@ -0,0 +1,57 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +/** The base class for a {@link CurveTimeline} which sets two properties. */ +class CurveTimeline2 extends CurveTimeline { + private static inline var ENTRIES:Int = 3; + private static inline var VALUE1:Int = 1; + private static inline var VALUE2:Int = 2; + + /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(Int)}. + * @param propertyIds Unique identifiers for the properties the timeline modifies. */ + public function new(frameCount:Int, bezierCount:Int, propertyIds:Array) { + super(frameCount, bezierCount, propertyIds); + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + /** Sets the time and values for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time The frame time in seconds. */ + public function setFrame(frame:Int, time:Float, value1:Float, value2:Float):Void { + frame *= ENTRIES; + frames[frame] = time; + frames[frame + VALUE1] = value1; + frames[frame + VALUE2] = value2; + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx b/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx new file mode 100644 index 000000000..fafdd54cd --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx @@ -0,0 +1,315 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.animation.Timeline; +import spine.attachments.Attachment; +import spine.attachments.VertexAttachment; +import spine.Event; +import spine.Skeleton; +import spine.Slot; + +class DeformTimeline extends CurveTimeline implements SlotTimeline { + public var slotIndex:Int = 0; + + /** The attachment that will be deformed. */ + public var attachment:VertexAttachment; + + /** The vertices for each key frame. */ + public var vertices:Array>; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int, attachment:VertexAttachment) { + super(frameCount, bezierCount, [Property.deform + "|" + slotIndex + "|" + attachment.id]); + this.slotIndex = slotIndex; + this.attachment = attachment; + vertices = new Array>(); + vertices.resize(frameCount); + } + + public override function getFrameCount():Int { + return frames.length; + } + + public function getSlotIndex():Int { + return 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. */ + public function setFrame(frame:Int, time:Float, verticesOrDeform:Array):Void { + frames[frame] = time; + vertices[frame] = verticesOrDeform; + } + + /** @param value1 Ignored (0 is used for a deform timeline). + * @param value2 Ignored (1 is used for a deform timeline). */ + public override function setBezier(bezier:Int, frame:Int, value:Float, time1:Float, value1:Float, cx1:Float, cy1:Float, cx2:Float, cy2:Float, time2:Float, + value2:Float):Void { + var i:Int = getFrameCount() + bezier * CurveTimeline.BEZIER_SIZE; + if (value == 0) + curves[frame] = CurveTimeline.BEZIER + i; + var tmpx:Float = (time1 - cx1 * 2 + cx2) * 0.03, + tmpy:Float = cy2 * 0.03 - cy1 * 0.06; + var dddx:Float = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, + dddy:Float = (cy1 - cy2 + 0.33333333) * 0.018; + var ddx:Float = tmpx * 2 + dddx, ddy:Float = tmpy * 2 + dddy; + var dx:Float = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, + dy:Float = cy1 * 0.3 + tmpy + dddy * 0.16666667; + var x:Float = time1 + dx, y:Float = dy; + var n:Int = i + CurveTimeline.BEZIER_SIZE; + while (i < n) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + + i += 2; + } + } + + private function getCurvePercent(time:Float, frame:Int):Float { + var i:Int = Std.int(curves[frame]); + var x:Float; + switch (i) { + case CurveTimeline.LINEAR: + x = frames[frame]; + return (time - x) / (frames[frame + getFrameEntries()] - x); + case CurveTimeline.STEPPED: + return 0; + } + i -= CurveTimeline.BEZIER; + if (curves[i] > time) { + x = frames[frame]; + return curves[i + 1] * (time - x) / (curves[i] - x); + } + var n:Int = i + CurveTimeline.BEZIER_SIZE, y:Float; + i += 2; + while (i < n) { + if (curves[i] >= time) { + x = curves[i - 2]; + y = curves[i - 1]; + return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); + } + + i += 2; + } + x = curves[n - 2]; + y = curves[n - 1]; + return y + (1 - y) * (time - x) / (frames[frame + getFrameEntries()] - x); + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment:Attachment = slot.attachment; + if (slotAttachment == null) + return; + if (!Std.isOfType(slotAttachment, VertexAttachment) || cast(slotAttachment, VertexAttachment).timelineAttachment != attachment) + return; + + var deform:Array = slot.deform; + if (deform.length == 0) + blend = MixBlend.setup; + + var vertexCount:Int = vertices[0].length; + var i:Int, setupVertices:Array; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + deform.resize(0); + case MixBlend.first: + if (alpha == 1) { + deform.resize(0); + return; + } + deform.resize(vertexCount); + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + deform[i] += (setupVertices[i] - deform[i]) * alpha; + } + } else { + // Weighted deform offsets. + alpha = 1 - alpha; + for (i in 0...vertexCount) { + deform[i] *= alpha; + } + } + } + return; + } + + deform.resize(vertexCount); + var setup:Float; + if (time >= frames[frames.length - 1]) // Time is after last frame. + { + var lastVertices:Array = vertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + deform[i] += lastVertices[i] - setupVertices[i]; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + deform[i] += lastVertices[i]; + } + } + } else { + for (i in 0...vertexCount) { + deform[i] = lastVertices[i]; + } + } + } else { + switch (blend) { + case MixBlend.setup: + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + setup = setupVertices[i]; + deform[i] = setup + (lastVertices[i] - setup) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + deform[i] = lastVertices[i] * alpha; + } + } + case MixBlend.first, MixBlend.replace: + for (i in 0...vertexCount) { + deform[i] += (lastVertices[i] - deform[i]) * alpha; + } + case MixBlend.add: + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + deform[i] += (lastVertices[i] - setupVertices[i]) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + deform[i] += lastVertices[i] * alpha; + } + } + } + } + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:Int = Timeline.search1(frames, time); + var percent:Float = getCurvePercent(time, frame); + var prevVertices:Array = vertices[frame], prev:Float; + var nextVertices:Array = vertices[frame + 1]; + + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i]; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] += prev + (nextVertices[i] - prev) * percent; + } + } + } else { + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] = prev + (nextVertices[i] - prev) * percent; + } + } + } else { + switch (blend) { + case MixBlend.setup: + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + prev = prevVertices[i]; + setup = setupVertices[i]; + deform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha; + } + } + case MixBlend.first, MixBlend.replace: + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha; + } + case MixBlend.add: + var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + setupVertices = vertexAttachment.vertices; + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (i in 0...vertexCount) { + prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha; + } + } + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/DrawOrderTimeline.hx b/spine-haxe/spine-haxe/spine/animation/DrawOrderTimeline.hx new file mode 100644 index 000000000..bc301a96f --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/DrawOrderTimeline.hx @@ -0,0 +1,92 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.Skeleton; +import spine.Slot; + +class DrawOrderTimeline extends Timeline { + public var drawOrders:Array>; + + public function new(frameCount:Int) { + super(frameCount, [Std.string(Property.drawOrder)]); + drawOrders = new Array>(); + drawOrders.resize(frameCount); + } + + public var frameCount(get, never):Int; + + private function get_frameCount():Int { + return frames.length; + } + + /** Sets the time and value of the specified keyframe. */ + public function setFrame(frame:Int, time:Float, drawOrder:Array):Void { + frames[frame] = time; + drawOrders[frame] = drawOrder; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var drawOrder:Array = skeleton.drawOrder; + var slots:Array = skeleton.slots; + var i:Int = 0, n:Int = slots.length; + + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) { + for (i in 0...n) { + drawOrder[i] = slots[i]; + } + } + return; + } + + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) { + for (i in 0...n) { + drawOrder[i] = slots[i]; + } + } + return; + } + + var drawOrderToSetupIndex:Array = drawOrders[Timeline.search1(frames, time)]; + if (drawOrderToSetupIndex == null) { + for (i in 0...n) { + drawOrder[i] = slots[i]; + } + } else { + for (i in 0...n) { + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/EventQueue.hx b/spine-haxe/spine-haxe/spine/animation/EventQueue.hx new file mode 100644 index 000000000..eed6ff6b8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/EventQueue.hx @@ -0,0 +1,122 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; + +class EventQueue { + private var objects:Array; + private var animationState:AnimationState; + + public var drainDisabled:Bool = false; + + public function new(animationState:AnimationState) { + this.animationState = animationState; + objects = new Array(); + } + + public function start(entry:TrackEntry):Void { + objects.push(EventType.start); + objects.push(entry); + animationState.animationsChanged = true; + } + + public function interrupt(entry:TrackEntry):Void { + objects.push(EventType.interrupt); + objects.push(entry); + } + + public function end(entry:TrackEntry):Void { + objects.push(EventType.end); + objects.push(entry); + animationState.animationsChanged = true; + } + + public function dispose(entry:TrackEntry):Void { + objects.push(EventType.dispose); + objects.push(entry); + } + + public function complete(entry:TrackEntry):Void { + objects.push(EventType.complete); + objects.push(entry); + } + + public function event(entry:TrackEntry, event:Event):Void { + objects.push(EventType.event); + objects.push(entry); + objects.push(event); + } + + public function drain():Void { + if (drainDisabled) + return; // Not reentrant. + drainDisabled = true; + + var i:Int = 0; + while (i < objects.length) { + var type:EventType = cast(objects[i], EventType); + var entry:TrackEntry = cast(objects[i + 1], TrackEntry); + switch (type) { + case EventType.start: + entry.onStart.invoke(entry); + animationState.onStart.invoke(entry); + case EventType.interrupt: + entry.onInterrupt.invoke(entry); + animationState.onInterrupt.invoke(entry); + case EventType.end: + entry.onEnd.invoke(entry); + animationState.onEnd.invoke(entry); + entry.onDispose.invoke(entry); + animationState.onDispose.invoke(entry); + animationState.trackEntryPool.free(entry); + case EventType.dispose: + entry.onDispose.invoke(entry); + animationState.onDispose.invoke(entry); + animationState.trackEntryPool.free(entry); + case EventType.complete: + entry.onComplete.invoke(entry); + animationState.onComplete.invoke(entry); + case EventType.event: + var event:Event = cast(objects[i++ + 2], Event); + entry.onEvent.invoke(entry, event); + animationState.onEvent.invoke(entry, event); + } + i += 2; + } + clear(); + + drainDisabled = false; + } + + public function clear():Void { + objects.resize(0); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/EventTimeline.hx b/spine-haxe/spine-haxe/spine/animation/EventTimeline.hx new file mode 100644 index 000000000..c5268b001 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/EventTimeline.hx @@ -0,0 +1,94 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.animation.Timeline; +import spine.Event; +import spine.Skeleton; + +class EventTimeline extends Timeline { + public var events:Array; + + public function new(frameCount:Int) { + super(frameCount, [Std.string(Property.event)]); + events = new Array(); + events.resize(frameCount); + } + + public override function getFrameCount():Int { + return frames.length; + } + + /** Sets the time in seconds and the event for the specified key frame. */ + public function setFrame(frame:Int, event:Event):Void { + frames[frame] = event.time; + events[frame] = event; + } + + /** Fires events for frames > `lastTime` and <= `time`. */ + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + if (events == null) + return; + + var frameCount:Int = frames.length; + + if (lastTime > time) // Fire events after last time for looped animations. + { + apply(skeleton, lastTime, 2147483647, events, alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame. + { + return; + } + + if (time < frames[0]) // Time is before first frame. + { + return; + } + + var frame:Int; + var i:Int = 0; + if (lastTime >= frames[0]) { + i = Timeline.search1(frames, lastTime) + 1; + var frameTime:Float = frames[i]; + while (i > 0) // Fire multiple events with the same frame. + { + if (frames[i - 1] != frameTime) + break; + i--; + } + } + while (i < frameCount && time >= frames[i]) { + events.push(this.events[i]); + i++; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/EventType.hx b/spine-haxe/spine-haxe/spine/animation/EventType.hx new file mode 100644 index 000000000..5629860db --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/EventType.hx @@ -0,0 +1,41 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class EventType { + public static var start(default, never):EventType = new EventType(); + public static var interrupt(default, never):EventType = new EventType(); + public static var end(default, never):EventType = new EventType(); + public static var dispose(default, never):EventType = new EventType(); + public static var complete(default, never):EventType = new EventType(); + public static var event(default, never):EventType = new EventType(); + + private function new() {} +} diff --git a/spine-haxe/spine-haxe/spine/animation/IkConstraintTimeline.hx b/spine-haxe/spine-haxe/spine/animation/IkConstraintTimeline.hx new file mode 100644 index 000000000..6b95cfb1f --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/IkConstraintTimeline.hx @@ -0,0 +1,132 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.IkConstraint; +import spine.Skeleton; + +class IkConstraintTimeline extends CurveTimeline { + private static inline var ENTRIES:Int = 6; + private static inline var MIX:Int = 1; + private static inline var SOFTNESS:Int = 2; + private static inline var BEND_DIRECTION:Int = 3; + private static inline var COMPRESS:Int = 4; + private static inline var STRETCH:Int = 5; + + /** The index of the IK constraint slot in {@link Skeleton#ikConstraints} that will be changed. */ + public var ikConstraintIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, ikConstraintIndex:Int) { + super(frameCount, bezierCount, [Property.ikConstraint + "|" + ikConstraintIndex]); + this.ikConstraintIndex = ikConstraintIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */ + public function setFrame(frame:Int, time:Float, mix:Float, softness:Float, bendDirection:Int, compress:Bool, stretch:Bool):Void { + frame *= ENTRIES; + frames[frame] = time; + frames[frame + MIX] = mix; + frames[frame + SOFTNESS] = softness; + frames[frame + BEND_DIRECTION] = bendDirection; + frames[frame + COMPRESS] = compress ? 1 : 0; + frames[frame + STRETCH] = stretch ? 1 : 0; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var constraint:IkConstraint = skeleton.ikConstraints[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; + 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; + } + + var mix:Float = 0, softness:Float = 0; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + mix = frames[i + MIX]; + softness = frames[i + SOFTNESS]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + mix += (frames[i + ENTRIES + MIX] - mix) * t; + softness += (frames[i + ENTRIES + SOFTNESS] - softness) * t; + case CurveTimeline.STEPPED: + mix = frames[i + MIX]; + softness = frames[i + SOFTNESS]; + default: + mix = getBezierValue(time, i, MIX, curveType - CurveTimeline.BEZIER); + softness = getBezierValue(time, i, SOFTNESS, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + } + + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (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 = Std.int(frames[i + BEND_DIRECTION]); + constraint.compress = frames[i + COMPRESS] != 0; + constraint.stretch = frames[i + STRETCH] != 0; + } + } else { + constraint.mix += (mix - constraint.mix) * alpha; + constraint.softness += (softness - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = Std.int(frames[i + BEND_DIRECTION]); + constraint.compress = frames[i + COMPRESS] != 0; + constraint.stretch = frames[i + STRETCH] != 0; + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/Listeners.hx b/spine-haxe/spine-haxe/spine/animation/Listeners.hx new file mode 100644 index 000000000..de422b538 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/Listeners.hx @@ -0,0 +1,102 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class Listeners { + private var _listeners:ArrayVoid>; + + public var listeners(get, never):ArrayVoid>; + + private function get_listeners():ArrayVoid> { + return _listeners; + } + + public function new() { + _listeners = new ArrayVoid>(); + } + + public function invoke(entry:TrackEntry) { + for (listener in _listeners) { + listener(entry); + } + } + + public function add(listener:TrackEntry->Void):Void { + if (listener == null) + throw new SpineException("listener cannot be null."); + var indexOf:Int = _listeners.indexOf(listener); + if (indexOf == -1) + _listeners.push(listener); + } + + public function remove(listener:TrackEntry->Void):Void { + if (listener == null) + throw new SpineException("listener cannot be null."); + var indexOf:Int = _listeners.indexOf(listener); + if (indexOf != -1) + _listeners.splice(indexOf, 1); + } +} + +class EventListeners { + private var _listeners:ArrayEvent->Void>; + + public var listeners(get, never):ArrayEvent->Void>; + + private function get_listeners():ArrayEvent->Void> { + return _listeners; + } + + public function new() { + _listeners = new ArrayEvent->Void>(); + } + + public function invoke(entry:TrackEntry, event:Event) { + for (listener in _listeners) { + listener(entry, event); + } + } + + public function add(listener:TrackEntry->Event->Void):Void { + if (listener == null) + throw new SpineException("listener cannot be null."); + var indexOf:Int = _listeners.indexOf(listener); + if (indexOf == -1) + _listeners.push(listener); + } + + public function remove(listener:TrackEntry->Event->Void):Void { + if (listener == null) + throw new SpineException("listener cannot be null."); + var indexOf:Int = _listeners.indexOf(listener); + if (indexOf != -1) + _listeners.splice(indexOf, 1); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/MixBlend.hx b/spine-haxe/spine-haxe/spine/animation/MixBlend.hx new file mode 100644 index 000000000..0640c7ee1 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/MixBlend.hx @@ -0,0 +1,43 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class MixBlend { + public var ordinal:Int = 0; + + public function new(ordinal:Int) { + this.ordinal = ordinal; + } + + public static var setup(default, never):MixBlend = new MixBlend(0); + public static var first(default, never):MixBlend = new MixBlend(1); + public static var replace(default, never):MixBlend = new MixBlend(2); + public static var add(default, never):MixBlend = new MixBlend(3); +} diff --git a/spine-haxe/spine-haxe/spine/animation/MixDirection.hx b/spine-haxe/spine-haxe/spine/animation/MixDirection.hx new file mode 100644 index 000000000..b379802ff --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/MixDirection.hx @@ -0,0 +1,41 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class MixDirection { + public var ordinal:Int = 0; + + public function new(ordinal:Int) { + this.ordinal = ordinal; + } + + public static var mixIn(default, never):MixDirection = new MixDirection(0); + public static var mixOut(default, never):MixDirection = new MixDirection(1); +} diff --git a/spine-haxe/spine-haxe/spine/animation/PathConstraintMixTimeline.hx b/spine-haxe/spine-haxe/spine/animation/PathConstraintMixTimeline.hx new file mode 100644 index 000000000..e993c6eba --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/PathConstraintMixTimeline.hx @@ -0,0 +1,118 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.PathConstraint; +import spine.Skeleton; + +class PathConstraintMixTimeline extends CurveTimeline { + private static inline var ENTRIES:Int = 4; + private static inline var ROTATE:Int = 1; + private static inline var X:Int = 2; + private static inline var Y:Int = 3; + + /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */ + public var pathConstraintIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, pathConstraintIndex:Int) { + super(frameCount, bezierCount, [Property.pathConstraintMix + "|" + pathConstraintIndex]); + this.pathConstraintIndex = pathConstraintIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function setFrame(frame:Int, time:Float, mixRotate:Float, mixX:Float, mixY:Float):Void { + frame <<= 2; + frames[frame] = time; + frames[frame + ROTATE] = mixRotate; + frames[frame + X] = mixX; + frames[frame + Y] = mixY; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + if (!constraint.active) + return; + + var data:PathConstraintData; + if (time < frames[0]) { + data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.mixRotate = data.mixRotate; + constraint.mixX = data.mixX; + constraint.mixY = data.mixY; + case MixBlend.first: + constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha; + constraint.mixX += (data.mixX - constraint.mixX) * alpha; + constraint.mixY += (data.mixY - constraint.mixY) * alpha; + } + return; + } + + var rotate:Float, x:Float, y:Float; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[i >> 2]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + rotate = frames[i + ROTATE]; + x = frames[i + X]; + y = frames[i + Y]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + rotate += (frames[i + ENTRIES + ROTATE] - rotate) * t; + x += (frames[i + ENTRIES + X] - x) * t; + y += (frames[i + ENTRIES + Y] - y) * t; + case CurveTimeline.STEPPED: + rotate = frames[i + ROTATE]; + x = frames[i + X]; + y = frames[i + Y]; + default: + rotate = getBezierValue(time, i, ROTATE, curveType - CurveTimeline.BEZIER); + x = getBezierValue(time, i, X, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + y = getBezierValue(time, i, Y, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + } + + if (blend == MixBlend.setup) { + data = constraint.data; + constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha; + constraint.mixX = data.mixX + (x - data.mixX) * alpha; + constraint.mixY = data.mixY + (y - data.mixY) * alpha; + } else { + constraint.mixRotate += (rotate - constraint.mixRotate) * alpha; + constraint.mixX += (x - constraint.mixX) * alpha; + constraint.mixY += (y - constraint.mixY) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/PathConstraintPositionTimeline.hx b/spine-haxe/spine-haxe/spine/animation/PathConstraintPositionTimeline.hx new file mode 100644 index 000000000..0d3bd789b --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/PathConstraintPositionTimeline.hx @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.PathConstraint; +import spine.Skeleton; + +class PathConstraintPositionTimeline extends CurveTimeline1 { + /** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */ + public var pathConstraintIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, pathConstraintIndex:Int) { + super(frameCount, bezierCount, [Property.pathConstraintPosition + "|" + pathConstraintIndex]); + this.pathConstraintIndex = pathConstraintIndex; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + if (!constraint.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + + var position:Float = getCurveValue(time); + if (blend == MixBlend.setup) { + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + } else { + constraint.position += (position - constraint.position) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/PathConstraintSpacingTimeline.hx b/spine-haxe/spine-haxe/spine/animation/PathConstraintSpacingTimeline.hx new file mode 100644 index 000000000..8a298b67b --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/PathConstraintSpacingTimeline.hx @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.PathConstraint; +import spine.Skeleton; + +class PathConstraintSpacingTimeline extends CurveTimeline1 { + /** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */ + public var pathConstraintIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, pathConstraintIndex:Int) { + super(frameCount, bezierCount, [Property.pathConstraintSpacing + "|" + pathConstraintIndex]); + this.pathConstraintIndex = pathConstraintIndex; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + if (!constraint.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + + var spacing:Float = getCurveValue(time); + if (blend == MixBlend.setup) { + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + } else { + constraint.spacing += (spacing - constraint.spacing) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/Property.hx b/spine-haxe/spine-haxe/spine/animation/Property.hx new file mode 100644 index 000000000..e93293f6a --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/Property.hx @@ -0,0 +1,61 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class Property { + public static inline var rotate:Int = 0; + public static inline var x:Int = 1; + public static inline var y:Int = 2; + public static inline var scaleX:Int = 3; + public static inline var scaleY:Int = 4; + public static inline var shearX:Int = 5; + public static inline var shearY:Int = 6; + + public static inline var rgb:Int = 7; + public static inline var alpha:Int = 8; + public static inline var rgb2:Int = 9; + + public static inline var attachment:Int = 10; + public static inline var deform:Int = 11; + + public static inline var event:Int = 12; + public static inline var drawOrder:Int = 13; + + public static inline var ikConstraint:Int = 14; + public static inline var transformConstraint:Int = 15; + + public static inline var pathConstraintPosition:Int = 16; + public static inline var pathConstraintSpacing:Int = 17; + public static inline var pathConstraintMix:Int = 18; + + public static inline var sequence:Int = 19; + + public function new() {} +} diff --git a/spine-haxe/spine-haxe/spine/animation/RGB2Timeline.hx b/spine-haxe/spine-haxe/spine/animation/RGB2Timeline.hx new file mode 100644 index 000000000..474686c86 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/RGB2Timeline.hx @@ -0,0 +1,159 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class RGB2Timeline extends CurveTimeline implements SlotTimeline { + private static inline var ENTRIES:Int = 7; + private static inline var R:Int = 1; + private static inline var G:Int = 2; + private static inline var B:Int = 3; + private static inline var R2:Int = 4; + private static inline var G2:Int = 5; + private static inline var B2:Int = 6; + + private var slotIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int) { + super(frameCount, bezierCount, [Property.rgb + "|" + slotIndex, Property.rgb2 + "|" + slotIndex]); + this.slotIndex = slotIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + public function setFrame(frame:Int, time:Float, r:Float, g:Float, b:Float, r2:Float, g2:Float, b2:Float):Void { + frame *= ENTRIES; + frames[frame] = time; + frames[frame + R] = r; + frames[frame + G] = g; + frames[frame + B] = b; + frames[frame + R2] = r2; + frames[frame + G2] = g2; + frames[frame + B2] = b2; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + var light:Color = slot.color, dark:Color = slot.darkColor; + var setupLight:Color, setupDark:Color; + if (time < frames[0]) { + setupLight = slot.data.color; + setupDark = slot.data.darkColor; + switch (blend) { + case MixBlend.setup: + light.r = setupLight.r; + light.g = setupLight.g; + light.b = setupLight.b; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + case MixBlend.first: + light.r += (setupLight.r - light.r) * alpha; + light.g += (setupLight.g - light.g) * alpha; + light.b += (setupLight.b - light.b) * alpha; + dark.r += (setupDark.r - dark.r) * alpha; + dark.g += (setupDark.g - dark.g) * alpha; + dark.b += (setupDark.b - dark.b) * alpha; + } + return; + } + + var r:Float = 0, g:Float = 0, b:Float = 0, a:Float = 0, r2:Float = 0, g2:Float = 0, b2:Float = 0; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + r2 = frames[i + R2]; + g2 = frames[i + G2]; + b2 = frames[i + B2]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + r += (frames[i + ENTRIES + R] - r) * t; + g += (frames[i + ENTRIES + G] - g) * t; + b += (frames[i + ENTRIES + B] - b) * t; + r2 += (frames[i + ENTRIES + R2] - r2) * t; + g2 += (frames[i + ENTRIES + G2] - g2) * t; + b2 += (frames[i + ENTRIES + B2] - b2) * t; + case CurveTimeline.STEPPED: + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + r2 = frames[i + R2]; + g2 = frames[i + G2]; + b2 = frames[i + B2]; + default: + r = getBezierValue(time, i, R, curveType - CurveTimeline.BEZIER); + g = getBezierValue(time, i, G, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + b = getBezierValue(time, i, B, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + r2 = getBezierValue(time, i, R2, curveType + CurveTimeline.BEZIER_SIZE * 3 - CurveTimeline.BEZIER); + g2 = getBezierValue(time, i, G2, curveType + CurveTimeline.BEZIER_SIZE * 4 - CurveTimeline.BEZIER); + b2 = getBezierValue(time, i, B2, curveType + CurveTimeline.BEZIER_SIZE * 5 - CurveTimeline.BEZIER); + } + + if (alpha == 1) { + light.r = r; + light.g = g; + light.b = b; + dark.r = r2; + dark.g = g2; + dark.b = b2; + } else { + if (blend == MixBlend.setup) { + setupLight = slot.data.color; + setupDark = slot.data.darkColor; + light.r = setupLight.r; + light.g = setupLight.g; + light.b = setupLight.b; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + } + light.r += (r - light.r) * alpha; + light.g += (g - light.g) * alpha; + light.b += (b - light.b) * alpha; + dark.r += (r2 - dark.r) * alpha; + dark.g += (g2 - dark.g) * alpha; + dark.b += (b2 - dark.b) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/RGBA2Timeline.hx b/spine-haxe/spine-haxe/spine/animation/RGBA2Timeline.hx new file mode 100644 index 000000000..ae63d5014 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/RGBA2Timeline.hx @@ -0,0 +1,155 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class RGBA2Timeline extends CurveTimeline implements SlotTimeline { + private static inline var ENTRIES:Int = 8; + private static inline var R:Int = 1; + private static inline var G:Int = 2; + private static inline var B:Int = 3; + private static inline var A:Int = 4; + private static inline var R2:Int = 5; + private static inline var G2:Int = 6; + private static inline var B2:Int = 7; + + private var slotIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int) { + super(frameCount, bezierCount, [ + Property.rgb + "|" + slotIndex, + Property.alpha + "|" + slotIndex, + Property.rgb2 + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + public function setFrame(frame:Int, time:Float, r:Float, g:Float, b:Float, a:Float, r2:Float, g2:Float, b2:Float):Void { + frame <<= 3; + frames[frame] = time; + frames[frame + R] = r; + frames[frame + G] = g; + frames[frame + B] = b; + frames[frame + A] = a; + frames[frame + R2] = r2; + frames[frame + G2] = g2; + frames[frame + B2] = b2; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + var light:Color = slot.color, dark:Color = slot.darkColor; + if (time < frames[0]) { + var setupLight:Color = slot.data.color, + setupDark:Color = slot.data.darkColor; + switch (blend) { + case MixBlend.setup: + light.setFromColor(setupLight); + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + case MixBlend.first: + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, + (setupLight.a - light.a) * alpha); + dark.r += (setupDark.r - dark.r) * alpha; + dark.g += (setupDark.g - dark.g) * alpha; + dark.b += (setupDark.b - dark.b) * alpha; + } + return; + } + + var r:Float = 0, g:Float = 0, b:Float = 0, a:Float = 0, r2:Float = 0, g2:Float = 0, b2:Float = 0; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[i >> 3]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + a = frames[i + A]; + r2 = frames[i + R2]; + g2 = frames[i + G2]; + b2 = frames[i + B2]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + r += (frames[i + ENTRIES + R] - r) * t; + g += (frames[i + ENTRIES + G] - g) * t; + b += (frames[i + ENTRIES + B] - b) * t; + a += (frames[i + ENTRIES + A] - a) * t; + r2 += (frames[i + ENTRIES + R2] - r2) * t; + g2 += (frames[i + ENTRIES + G2] - g2) * t; + b2 += (frames[i + ENTRIES + B2] - b2) * t; + case CurveTimeline.STEPPED: + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + a = frames[i + A]; + r2 = frames[i + R2]; + g2 = frames[i + G2]; + b2 = frames[i + B2]; + default: + r = getBezierValue(time, i, R, curveType - CurveTimeline.BEZIER); + g = getBezierValue(time, i, G, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + b = getBezierValue(time, i, B, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + a = getBezierValue(time, i, A, curveType + CurveTimeline.BEZIER_SIZE * 3 - CurveTimeline.BEZIER); + r2 = getBezierValue(time, i, R2, curveType + CurveTimeline.BEZIER_SIZE * 4 - CurveTimeline.BEZIER); + g2 = getBezierValue(time, i, G2, curveType + CurveTimeline.BEZIER_SIZE * 5 - CurveTimeline.BEZIER); + b2 = getBezierValue(time, i, B2, curveType + CurveTimeline.BEZIER_SIZE * 6 - CurveTimeline.BEZIER); + } + + if (alpha == 1) { + light.set(r, g, b, a); + dark.r = r2; + dark.g = g2; + dark.b = b2; + } else { + 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.r += (r2 - dark.r) * alpha; + dark.g += (g2 - dark.g) * alpha; + dark.b += (b2 - dark.b) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/RGBATimeline.hx b/spine-haxe/spine-haxe/spine/animation/RGBATimeline.hx new file mode 100644 index 000000000..b9983b0e8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/RGBATimeline.hx @@ -0,0 +1,117 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class RGBATimeline extends CurveTimeline implements SlotTimeline { + private static inline var ENTRIES:Int = 5; + private static inline var R:Int = 1; + private static inline var G:Int = 2; + private static inline var B:Int = 3; + private static inline var A:Int = 4; + + private var slotIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int) { + super(frameCount, bezierCount, [Property.rgb + "|" + slotIndex, Property.alpha + "|" + slotIndex]); + this.slotIndex = slotIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + public function setFrame(frame:Int, time:Float, r:Float, g:Float, b:Float, a:Float):Void { + frame *= ENTRIES; + frames[frame] = time; + frames[frame + R] = r; + frames[frame + G] = g; + frames[frame + B] = b; + frames[frame + A] = a; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + var color:Color = slot.color; + if (time < frames[0]) { + var setup:Color = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.setFromColor(setup); + case MixBlend.first: + 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:Float = 0, g:Float = 0, b:Float = 0, a:Float = 0; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + a = frames[i + A]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + r += (frames[i + ENTRIES + R] - r) * t; + g += (frames[i + ENTRIES + G] - g) * t; + b += (frames[i + ENTRIES + B] - b) * t; + a += (frames[i + ENTRIES + A] - a) * t; + case CurveTimeline.STEPPED: + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + a = frames[i + A]; + default: + r = getBezierValue(time, i, R, curveType - CurveTimeline.BEZIER); + g = getBezierValue(time, i, G, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + b = getBezierValue(time, i, B, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + a = getBezierValue(time, i, A, curveType + CurveTimeline.BEZIER_SIZE * 3 - CurveTimeline.BEZIER); + } + + if (alpha == 1) { + color.set(r, g, b, a); + } else { + 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); + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/RGBTimeline.hx b/spine-haxe/spine-haxe/spine/animation/RGBTimeline.hx new file mode 100644 index 000000000..161748998 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/RGBTimeline.hx @@ -0,0 +1,122 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +class RGBTimeline extends CurveTimeline implements SlotTimeline { + private static inline var ENTRIES:Int = 4; + private static inline var R:Int = 1; + private static inline var G:Int = 2; + private static inline var B:Int = 3; + + private var slotIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, slotIndex:Int) { + super(frameCount, bezierCount, [Property.rgb + "|" + slotIndex]); + this.slotIndex = slotIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + public function getSlotIndex():Int { + return slotIndex; + } + + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + public function setFrame(frame:Int, time:Float, r:Float, g:Float, b:Float):Void { + frame <<= 2; + frames[frame] = time; + frames[frame + R] = r; + frames[frame + G] = g; + frames[frame + B] = b; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot:Slot = skeleton.slots[slotIndex]; + if (!slot.bone.active) + return; + + var color:Color = slot.color, setup:Color; + if (time < frames[0]) { + setup = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.r = setup.r; + color.g = setup.g; + color.b = setup.b; + case MixBlend.first: + color.r += (setup.r - color.r) * alpha; + color.g += (setup.g - color.g) * alpha; + color.b += (setup.b - color.b) * alpha; + } + return; + } + + var r:Float = 0, g:Float = 0, b:Float = 0; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + r += (frames[i + ENTRIES + R] - r) * t; + g += (frames[i + ENTRIES + G] - g) * t; + b += (frames[i + ENTRIES + B] - b) * t; + case CurveTimeline.STEPPED: + r = frames[i + R]; + g = frames[i + G]; + b = frames[i + B]; + default: + r = getBezierValue(time, i, R, curveType - CurveTimeline.BEZIER); + g = getBezierValue(time, i, G, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + b = getBezierValue(time, i, B, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + } + if (alpha == 1) { + color.r = r; + color.g = g; + color.b = b; + } else { + if (blend == MixBlend.setup) { + setup = slot.data.color; + color.r = setup.r; + color.g = setup.g; + color.b = setup.b; + } + color.r += (r - color.r) * alpha; + color.g += (g - color.g) * alpha; + color.b += (b - color.b) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/RotateTimeline.hx b/spine-haxe/spine-haxe/spine/animation/RotateTimeline.hx new file mode 100644 index 000000000..e3088ad9b --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/RotateTimeline.hx @@ -0,0 +1,76 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class RotateTimeline extends CurveTimeline1 implements BoneTimeline { + public var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.rotate + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + case MixBlend.first: + bone.rotation += (bone.data.rotation - bone.rotation) * alpha; + } + return; + } + + var r:Float = getCurveValue(time); + if (Math.abs(r) == 360) + r = 0; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r * alpha; + case MixBlend.first, MixBlend.replace: + r += bone.data.rotation - bone.rotation; + bone.rotation += r * alpha; + case MixBlend.add: + bone.rotation += r * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ScaleTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ScaleTimeline.hx new file mode 100644 index 000000000..8c725aad4 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ScaleTimeline.hx @@ -0,0 +1,132 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.MathUtils; +import spine.Skeleton; + +class ScaleTimeline extends CurveTimeline2 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.scaleX + "|" + boneIndex, Property.scaleY + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + + var x:Float = 0, y:Float = 0; + var i:Int = Timeline.search(frames, time, CurveTimeline2.ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / CurveTimeline2.ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + var t:Float = (time - before) / (frames[i + CurveTimeline2.ENTRIES] - before); + x += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE1] - x) * t; + y += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE2] - y) * t; + case CurveTimeline.STEPPED: + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + default: + x = getBezierValue(time, i, CurveTimeline2.VALUE1, curveType - CurveTimeline.BEZIER); + y = getBezierValue(time, i, CurveTimeline2.VALUE2, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + } + x *= bone.data.scaleX; + y *= 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:Float = 0, by:Float = 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; + case MixBlend.first, 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; + case MixBlend.add: + bone.scaleX = (x - bone.data.scaleX) * alpha; + bone.scaleY = (y - 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; + case MixBlend.first, 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; + case MixBlend.add: + bone.scaleX += (x - bone.data.scaleX) * alpha; + bone.scaleY += (y - bone.data.scaleY) * alpha; + } + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ScaleXTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ScaleXTimeline.hx new file mode 100644 index 000000000..76f856d73 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ScaleXTimeline.hx @@ -0,0 +1,99 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.MathUtils; +import spine.Skeleton; + +class ScaleXTimeline extends CurveTimeline1 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.scaleX + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + } + return; + } + + var x:Float = getCurveValue(time) * bone.data.scaleX; + if (alpha == 1) { + if (blend == MixBlend.add) + bone.scaleX += x - bone.data.scaleX; + else + bone.scaleX = x; + } else { + // Mixing out uses sign of setup or current pose, else use sign of key. + var bx:Float = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + case MixBlend.first, MixBlend.replace: + bx = bone.scaleX; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + case MixBlend.add: + bone.scaleX = (x - bone.data.scaleX) * alpha; + } + } else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x); + bone.scaleX = bx + (x - bx) * alpha; + case MixBlend.first, MixBlend.replace: + bx = Math.abs(bone.scaleX) * MathUtils.signum(x); + bone.scaleX = bx + (x - bx) * alpha; + case MixBlend.add: + bone.scaleX += (x - bone.data.scaleX) * alpha; + } + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ScaleYTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ScaleYTimeline.hx new file mode 100644 index 000000000..2d64737e7 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ScaleYTimeline.hx @@ -0,0 +1,99 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.MathUtils; +import spine.Skeleton; + +class ScaleYTimeline extends CurveTimeline1 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.scaleY + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleY = bone.data.scaleY; + case MixBlend.first: + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + + var y:Float = getCurveValue(time) * bone.data.scaleY; + if (alpha == 1) { + if (blend == MixBlend.add) + bone.scaleY += y - bone.data.scaleY; + else + bone.scaleY = y; + } else { + // Mixing out uses sign of setup or current pose, else use sign of key. + var by:Float = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + by = bone.data.scaleY; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + case MixBlend.first, MixBlend.replace: + by = bone.scaleY; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + case MixBlend.add: + bone.scaleY = (y - bone.data.scaleY) * alpha; + } + } else { + switch (blend) { + case MixBlend.setup: + by = Math.abs(bone.data.scaleY) * MathUtils.signum(y); + bone.scaleY = by + (y - by) * alpha; + case MixBlend.first, MixBlend.replace: + by = Math.abs(bone.scaleY) * MathUtils.signum(y); + bone.scaleY = by + (y - by) * alpha; + case MixBlend.add: + bone.scaleY += (y - bone.data.scaleY) * alpha; + } + } + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/SequenceTimeline.hx b/spine-haxe/spine-haxe/spine/animation/SequenceTimeline.hx new file mode 100644 index 000000000..0d043b89c --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/SequenceTimeline.hx @@ -0,0 +1,126 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.attachments.VertexAttachment; +import spine.attachments.Attachment; + +class SequenceTimeline extends Timeline implements SlotTimeline { + static var ENTRIES = 3; + static var MODE = 1; + static var DELAY = 2; + + var slotIndex:Int; + var attachment:HasTextureRegion; + + public function new(frameCount:Int, slotIndex:Int, attachment:HasTextureRegion) { + super(frameCount, [ + Std.string(Property.sequence) + "|" + Std.string(slotIndex) + "|" + Std.string(attachment.sequence.id) + ]); + this.slotIndex = slotIndex; + this.attachment = attachment; + } + + public override function getFrameEntries():Int { + return SequenceTimeline.ENTRIES; + } + + public function getSlotIndex():Int { + return this.slotIndex; + } + + public function getAttachment():Attachment { + return cast(attachment, Attachment); + } + + /** Sets the time, mode, index, and frame time for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time Seconds between frames. */ + public function setFrame(frame:Int, time:Float, mode:SequenceMode, index:Int, delay:Float) { + frame *= SequenceTimeline.ENTRIES; + frames[frame] = time; + frames[frame + SequenceTimeline.MODE] = mode.value | (index << 4); + frames[frame + SequenceTimeline.DELAY] = delay; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.attachment; + var attachment = cast(this.attachment, Attachment); + if (slotAttachment != attachment) { + if (!Std.isOfType(slotAttachment, VertexAttachment) || cast(slotAttachment, VertexAttachment).timelineAttachment != attachment) + return; + } + + if (time < frames[0]) { // Time is before first frame. + if (blend == MixBlend.setup || blend == MixBlend.first) + slot.sequenceIndex = -1; + return; + } + + var i = Timeline.search(frames, time, SequenceTimeline.ENTRIES); + var before = frames[i]; + var modeAndIndex = Std.int(frames[i + SequenceTimeline.MODE]); + var delay = frames[i + SequenceTimeline.DELAY]; + + if (this.attachment.sequence == null) + return; + var index = modeAndIndex >> 4, + count = this.attachment.sequence.regions.length; + var mode = SequenceMode.values[modeAndIndex & 0xf]; + if (mode != SequenceMode.hold) { + index += Std.int(((time - before) / delay + 0.00001)); + switch (mode) { + case SequenceMode.once: + index = Std.int(Math.min(count - 1, index)); + case SequenceMode.loop: + index %= count; + case SequenceMode.pingpong: + var n = (count << 1) - 2; + index = n == 0 ? 0 : index % n; + if (index >= count) + index = n - index; + case SequenceMode.onceReverse: + index = Std.int(Math.max(count - 1 - index, 0)); + case SequenceMode.loopReverse: + index = count - 1 - (index % count); + case SequenceMode.pingpongReverse: + var n = (count << 1) - 2; + index = n == 0 ? 0 : (index + count - 1) % n; + if (index >= count) + index = n - index; + } + } + slot.sequenceIndex = index; + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ShearTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ShearTimeline.hx new file mode 100644 index 000000000..8970c3d70 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ShearTimeline.hx @@ -0,0 +1,97 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class ShearTimeline extends CurveTimeline2 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.shearX + "|" + boneIndex, Property.shearY + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + + var x:Float = 0, y:Float = 0; + var i:Int = Timeline.search(frames, time, CurveTimeline2.ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / CurveTimeline2.ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + var t:Float = (time - before) / (frames[i + CurveTimeline2.ENTRIES] - before); + x += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE1] - x) * t; + y += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE2] - y) * t; + case CurveTimeline.STEPPED: + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + default: + x = getBezierValue(time, i, CurveTimeline2.VALUE1, curveType - CurveTimeline.BEZIER); + y = getBezierValue(time, i, CurveTimeline2.VALUE2, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + } + + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + case MixBlend.first, MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ShearXTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ShearXTimeline.hx new file mode 100644 index 000000000..842137abf --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ShearXTimeline.hx @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class ShearXTimeline extends CurveTimeline1 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.shearX + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + } + return; + } + + var x:Float = getCurveValue(time); + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + case MixBlend.first, MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + case MixBlend.add: + bone.shearX += x * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/ShearYTimeline.hx b/spine-haxe/spine-haxe/spine/animation/ShearYTimeline.hx new file mode 100644 index 000000000..483fc5285 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/ShearYTimeline.hx @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class ShearYTimeline extends CurveTimeline1 implements BoneTimeline { + private var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.shearY + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearY = bone.data.shearY; + case MixBlend.first: + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + + var y:Float = getCurveValue(time); + switch (blend) { + case MixBlend.setup: + bone.shearY = bone.data.shearY + y * alpha; + case MixBlend.first, MixBlend.replace: + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + case MixBlend.add: + bone.shearY += y * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/SlotTimeline.hx b/spine-haxe/spine-haxe/spine/animation/SlotTimeline.hx new file mode 100644 index 000000000..1d2f73b51 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/SlotTimeline.hx @@ -0,0 +1,34 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +interface SlotTimeline { + function getSlotIndex():Int; +} diff --git a/spine-haxe/spine-haxe/spine/animation/Timeline.hx b/spine-haxe/spine-haxe/spine/animation/Timeline.hx new file mode 100644 index 000000000..59273c1d4 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/Timeline.hx @@ -0,0 +1,84 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.Skeleton; + +class Timeline { + public var propertyIds:Array; + public var frames:Array; + + public function new(frameCount:Int, propertyIds:Array) { + this.propertyIds = propertyIds; + frames = new Array(); + frames.resize(frameCount * getFrameEntries()); + } + + public function getFrameEntries():Int { + return 1; + } + + public function getFrameCount():Int { + return Std.int(frames.length / getFrameEntries()); + } + + public function getDuration():Float { + return frames[frames.length - getFrameEntries()]; + } + + public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, direction:MixDirection):Void { + throw new SpineException("Timeline implementations must override apply()"); + } + + public static function search1(frames:Array, time:Float):Int { + var n:Int = frames.length; + for (i in 1...n) { + if (frames[i] > time) + return i - 1; + } + return n - 1; + } + + public static function search(values:Array, time:Float, step:Int):Int { + var n:Int = values.length; + var i:Int = step; + while (i < n) { + if (values[i] > time) + return i - step; + i += step; + } + return n - step; + } + + public function toString():String { + return "Timeline " + Type.getClassName(Type.getClass(this)); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/TrackEntry.hx b/spine-haxe/spine-haxe/spine/animation/TrackEntry.hx new file mode 100644 index 000000000..ac3833308 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/TrackEntry.hx @@ -0,0 +1,121 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.animation.Listeners.EventListeners; +import spine.Poolable; + +class TrackEntry implements Poolable { + public var animation:Animation; + public var next:TrackEntry; + public var previous:TrackEntry; + public var mixingFrom:TrackEntry; + public var mixingTo:TrackEntry; + public var onStart:Listeners = new Listeners(); + public var onInterrupt:Listeners = new Listeners(); + public var onEnd:Listeners = new Listeners(); + public var onDispose:Listeners = new Listeners(); + public var onComplete:Listeners = new Listeners(); + public var onEvent:EventListeners = new EventListeners(); + public var trackIndex:Int = 0; + public var loop:Bool = false; + public var reverse:Bool = false; + public var holdPrevious:Bool = false; + public var eventThreshold:Float = 0; + public var attachmentThreshold:Float = 0; + public var drawOrderThreshold:Float = 0; + public var animationStart:Float = 0; + public var animationEnd:Float = 0; + public var animationLast:Float = 0; + public var nextAnimationLast:Float = 0; + public var delay:Float = 0; + public var trackTime:Float = 0; + public var trackLast:Float = 0; + public var nextTrackLast:Float = 0; + public var trackEnd:Float = 0; + public var timeScale:Float = 0; + public var alpha:Float = 0; + public var mixTime:Float = 0; + public var mixDuration:Float = 0; + public var interruptAlpha:Float = 0; + public var totalAlpha:Float = 0; + public var mixBlend:MixBlend = MixBlend.replace; + public var timelineMode:Array = new Array(); + public var timelineHoldMix:Array = new Array(); + public var timelinesRotation:Array = new Array(); + public var shortestRotation = false; + + public function new() {} + + public function getAnimationTime():Float { + if (loop) { + var duration:Float = animationEnd - animationStart; + if (duration == 0) + return animationStart; + return (trackTime % duration) + animationStart; + } + return Math.min(trackTime + animationStart, animationEnd); + } + + /** If this track entry is non-looping, the track time in seconds when {@link #getAnimationEnd()} is reached, or the current + * {@link #getTrackTime()} if it has already been reached. If this track entry is looping, the track time when this + * animation will reach its next {@link #getAnimationEnd()} (the next loop completion). */ + public function getTrackComplete():Float { + var duration:Float = animationEnd - animationStart; + if (duration != 0) { + if (loop) + return duration * (1 + Std.int(trackTime / duration)); // Completion of next loop. + if (trackTime < duration) + return duration; // Before duration. + } + return trackTime; // Next update. + } + + public function reset():Void { + next = null; + previous = null; + mixingFrom = null; + mixingTo = null; + animation = null; + onStart.listeners.resize(0); + onInterrupt.listeners.resize(0); + onEnd.listeners.resize(0); + onDispose.listeners.resize(0); + onComplete.listeners.resize(0); + onEvent.listeners.resize(0); + timelineMode.resize(0); + timelineHoldMix.resize(0); + timelinesRotation.resize(0); + } + + public function resetRotationDirection():Void { + timelinesRotation.resize(0); + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/TransformConstraintTimeline.hx b/spine-haxe/spine-haxe/spine/animation/TransformConstraintTimeline.hx new file mode 100644 index 000000000..c5f5ae4cc --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/TransformConstraintTimeline.hx @@ -0,0 +1,150 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Event; +import spine.Skeleton; +import spine.TransformConstraint; +import spine.TransformConstraintData; + +class TransformConstraintTimeline extends CurveTimeline { + static public inline var ENTRIES:Int = 7; + private static inline var ROTATE:Int = 1; + private static inline var X:Int = 2; + private static inline var Y:Int = 3; + private static inline var SCALEX:Int = 4; + private static inline var SCALEY:Int = 5; + private static inline var SHEARY:Int = 6; + + /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */ + public var transformConstraintIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, transformConstraintIndex:Int) { + super(frameCount, bezierCount, [Property.transformConstraint + "|" + transformConstraintIndex]); + this.transformConstraintIndex = transformConstraintIndex; + } + + public override function getFrameEntries():Int { + return ENTRIES; + } + + /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */ + public function setFrame(frame:Int, time:Float, mixRotate:Float, mixX:Float, mixY:Float, mixScaleX:Float, mixScaleY:Float, mixShearY:Float):Void { + frame *= ENTRIES; + frames[frame] = time; + frames[frame + ROTATE] = mixRotate; + frames[frame + X] = mixX; + frames[frame + Y] = mixY; + frames[frame + SCALEX] = mixScaleX; + frames[frame + SCALEY] = mixScaleY; + frames[frame + SHEARY] = mixShearY; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var constraint:TransformConstraint = skeleton.transformConstraints[transformConstraintIndex]; + if (!constraint.active) + return; + + var data:TransformConstraintData; + if (time < frames[0]) { + data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.mixRotate = data.mixRotate; + constraint.mixX = data.mixX; + constraint.mixY = data.mixY; + constraint.mixScaleX = data.mixScaleX; + constraint.mixScaleY = data.mixScaleY; + constraint.mixShearY = data.mixShearY; + case MixBlend.first: + constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha; + constraint.mixX += (data.mixX - constraint.mixX) * alpha; + constraint.mixY += (data.mixY - constraint.mixY) * alpha; + constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha; + constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha; + constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha; + } + return; + } + + var rotate:Float, x:Float, y:Float, scaleX:Float, scaleY:Float, shearY:Float; + var i:Int = Timeline.search(frames, time, ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / ENTRIES)]); + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + rotate = frames[i + ROTATE]; + x = frames[i + X]; + y = frames[i + Y]; + scaleX = frames[i + SCALEX]; + scaleY = frames[i + SCALEY]; + shearY = frames[i + SHEARY]; + var t:Float = (time - before) / (frames[i + ENTRIES] - before); + rotate += (frames[i + ENTRIES + ROTATE] - rotate) * t; + x += (frames[i + ENTRIES + X] - x) * t; + y += (frames[i + ENTRIES + Y] - y) * t; + scaleX += (frames[i + ENTRIES + SCALEX] - scaleX) * t; + scaleY += (frames[i + ENTRIES + SCALEY] - scaleY) * t; + shearY += (frames[i + ENTRIES + SHEARY] - shearY) * t; + case CurveTimeline.STEPPED: + rotate = frames[i + ROTATE]; + x = frames[i + X]; + y = frames[i + Y]; + scaleX = frames[i + SCALEX]; + scaleY = frames[i + SCALEY]; + shearY = frames[i + SHEARY]; + default: + rotate = getBezierValue(time, i, ROTATE, curveType - CurveTimeline.BEZIER); + x = getBezierValue(time, i, X, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + y = getBezierValue(time, i, Y, curveType + CurveTimeline.BEZIER_SIZE * 2 - CurveTimeline.BEZIER); + scaleX = getBezierValue(time, i, SCALEX, curveType + CurveTimeline.BEZIER_SIZE * 3 - CurveTimeline.BEZIER); + scaleY = getBezierValue(time, i, SCALEY, curveType + CurveTimeline.BEZIER_SIZE * 4 - CurveTimeline.BEZIER); + shearY = getBezierValue(time, i, SHEARY, curveType + CurveTimeline.BEZIER_SIZE * 5 - CurveTimeline.BEZIER); + } + + if (blend == MixBlend.setup) { + data = constraint.data; + constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha; + constraint.mixX = data.mixX + (x - data.mixX) * alpha; + constraint.mixY = data.mixY + (y - data.mixY) * alpha; + constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha; + constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha; + constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha; + } else { + constraint.mixRotate += (rotate - constraint.mixRotate) * alpha; + constraint.mixX += (x - constraint.mixX) * alpha; + constraint.mixY += (y - constraint.mixY) * alpha; + constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha; + constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha; + constraint.mixShearY += (shearY - constraint.mixShearY) * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/TranslateTimeline.hx b/spine-haxe/spine-haxe/spine/animation/TranslateTimeline.hx new file mode 100644 index 000000000..b7ce20ec0 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/TranslateTimeline.hx @@ -0,0 +1,98 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class TranslateTimeline extends CurveTimeline2 implements BoneTimeline { + public var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.x + "|" + boneIndex, Property.y + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + override public function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + + var x:Float = 0, y:Float = 0; + var i:Int = Timeline.search(frames, time, CurveTimeline2.ENTRIES); + var curveType:Int = Std.int(curves[Std.int(i / CurveTimeline2.ENTRIES)]); + + switch (curveType) { + case CurveTimeline.LINEAR: + var before:Float = frames[i]; + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + var t:Float = (time - before) / (frames[i + CurveTimeline2.ENTRIES] - before); + x += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE1] - x) * t; + y += (frames[i + CurveTimeline2.ENTRIES + CurveTimeline2.VALUE2] - y) * t; + case CurveTimeline.STEPPED: + x = frames[i + CurveTimeline2.VALUE1]; + y = frames[i + CurveTimeline2.VALUE2]; + default: + x = getBezierValue(time, i, CurveTimeline2.VALUE1, curveType - CurveTimeline.BEZIER); + y = getBezierValue(time, i, CurveTimeline2.VALUE2, curveType + CurveTimeline.BEZIER_SIZE - CurveTimeline.BEZIER); + } + + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + case MixBlend.first, MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/TranslateXTimeline.hx b/spine-haxe/spine-haxe/spine/animation/TranslateXTimeline.hx new file mode 100644 index 000000000..f40a571b5 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/TranslateXTimeline.hx @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class TranslateXTimeline extends CurveTimeline1 implements BoneTimeline { + public var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.x + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + } + return; + } + + var x:Float = getCurveValue(time); + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + case MixBlend.first, MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + case MixBlend.add: + bone.x += x * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/animation/TranslateYTimeline.hx b/spine-haxe/spine-haxe/spine/animation/TranslateYTimeline.hx new file mode 100644 index 000000000..4adcd5b17 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/animation/TranslateYTimeline.hx @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.animation; + +import spine.Bone; +import spine.Event; +import spine.Skeleton; + +class TranslateYTimeline extends CurveTimeline1 implements BoneTimeline { + public var boneIndex:Int = 0; + + public function new(frameCount:Int, bezierCount:Int, boneIndex:Int) { + super(frameCount, bezierCount, [Property.y + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + + public function getBoneIndex():Int { + return boneIndex; + } + + public override function apply(skeleton:Skeleton, lastTime:Float, time:Float, events:Array, alpha:Float, blend:MixBlend, + direction:MixDirection):Void { + var bone:Bone = skeleton.bones[boneIndex]; + if (!bone.active) + return; + + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.y = bone.data.y; + case MixBlend.first: + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + + var y:Float = getCurveValue(time); + switch (blend) { + case MixBlend.setup: + bone.y = bone.data.y + y * alpha; + case MixBlend.first, MixBlend.replace: + bone.y += (bone.data.y + y - bone.y) * alpha; + case MixBlend.add: + bone.y += y * alpha; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/Format.hx b/spine-haxe/spine-haxe/spine/atlas/Format.hx new file mode 100644 index 000000000..5e3a176cf --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/Format.hx @@ -0,0 +1,58 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +class Format { + public static var alpha(default, never):Format = new Format(0, "alpha"); + public static var intensity(default, never):Format = new Format(1, "intensity"); + public static var luminanceAlpha(default, never):Format = new Format(2, "luminanceAlpha"); + public static var rgb565(default, never):Format = new Format(3, "rgb565"); + public static var rgba4444(default, never):Format = new Format(4, "rgba4444"); + public static var rgb888(default, never):Format = new Format(5, "rgb888"); + public static var rgba8888(default, never):Format = new Format(6, "rgba8888"); + + public static var values(default, never):Array = [alpha, intensity, luminanceAlpha, rgb565, rgba4444, rgb888, rgba8888]; + + public var ordinal(default, null):Int; + public var name(default, null):String; + + public function new(ordinal:Int, name:String) { + this.ordinal = ordinal; + this.name = name; + } + + public static function fromName(name:String):Format { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureAtlas.hx b/spine-haxe/spine-haxe/spine/atlas/TextureAtlas.hx new file mode 100644 index 000000000..d60bd3204 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureAtlas.hx @@ -0,0 +1,276 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +import haxe.ds.StringMap; +import openfl.utils.Assets; + +class TextureAtlas { + private var pages = new Array(); + private var regions = new Array(); + private var textureLoader:TextureLoader; + + /** @param object A String or ByteArray. */ + public function new(atlasText:String, textureLoader:TextureLoader) { + if (atlasText == null) { + throw new SpineException("atlasText must not be null"); + } + if (textureLoader == null) { + throw new SpineException("textureLoader must not be null"); + } + load(atlasText, textureLoader); + } + + private function load(atlasText:String, textureLoader:TextureLoader):Void { + if (textureLoader == null) { + throw new SpineException("textureLoader cannot be null."); + } + this.textureLoader = textureLoader; + + var reader:Reader = new Reader(atlasText); + var entry:Array = new Array(); + entry.resize(5); + var page:TextureAtlasPage = null; + var region:TextureAtlasRegion = null; + + var pageFields:StringMapVoid> = new StringMapVoid>(); + pageFields.set("size", function():Void { + page.width = Std.parseInt(entry[1]); + page.height = Std.parseInt(entry[2]); + }); + pageFields.set("format", function():Void { + page.format = Format.fromName(entry[0]); + }); + pageFields.set("filter", function():Void { + page.minFilter = TextureFilter.fromName(entry[1]); + page.magFilter = TextureFilter.fromName(entry[2]); + }); + pageFields.set("repeat", function():Void { + if (entry[1].indexOf('x') != -1) + page.uWrap = TextureWrap.repeat; + if (entry[1].indexOf('y') != -1) + page.vWrap = TextureWrap.repeat; + }); + pageFields.set("pma", function():Void { + page.pma = entry[1] == "true"; + }); + + var regionFields:StringMapVoid> = new StringMapVoid>(); + regionFields.set("xy", function():Void { + region.x = Std.parseInt(entry[1]); + region.y = Std.parseInt(entry[2]); + }); + regionFields.set("size", function():Void { + region.width = Std.parseInt(entry[1]); + region.height = Std.parseInt(entry[2]); + }); + regionFields.set("bounds", function():Void { + region.x = Std.parseInt(entry[1]); + region.y = Std.parseInt(entry[2]); + region.width = Std.parseInt(entry[3]); + region.height = Std.parseInt(entry[4]); + }); + regionFields.set("offset", function():Void { + region.offsetX = Std.parseInt(entry[1]); + region.offsetY = Std.parseInt(entry[2]); + }); + regionFields.set("orig", function():Void { + region.originalWidth = Std.parseInt(entry[1]); + region.originalHeight = Std.parseInt(entry[2]); + }); + regionFields.set("offsets", function():Void { + region.offsetX = Std.parseInt(entry[1]); + region.offsetY = Std.parseInt(entry[2]); + region.originalWidth = Std.parseInt(entry[3]); + region.originalHeight = Std.parseInt(entry[4]); + }); + regionFields.set("rotate", function():Void { + var value:String = entry[1]; + if (value == "true") + region.degrees = 90; + else if (value != "false") + region.degrees = Std.parseInt(value); + }); + regionFields.set("index", function():Void { + region.index = Std.parseInt(entry[1]); + }); + + var line:String = reader.readLine(); + // Ignore empty lines before first entry. + while (line != null && line.length == 0) { + line = reader.readLine(); + } + + // Header entries. + while (true) { + if (line == null || line.length == 0) + break; + if (reader.readEntry(entry, line) == 0) + break; // Silently ignore all header fields. + line = reader.readLine(); + } + + // Page and region entries. + var names:Array = null; + var values:Array> = null; + var field:Void->Void; + while (true) { + if (line == null) + break; + if (line.length == 0) { + page = null; + line = reader.readLine(); + } else if (page == null) { + page = new TextureAtlasPage(line); + while (true) { + if (reader.readEntry(entry, line = reader.readLine()) == 0) + break; + field = pageFields.get(entry[0]); + if (field != null) { + field(); + } + } + textureLoader.loadPage(page, page.name); + pages.push(page); + } else { + region = new TextureAtlasRegion(page, line); + while (true) { + var count:Int = reader.readEntry(entry, line = reader.readLine()); + if (count == 0) + break; + field = regionFields.get(entry[0]); + if (field != null) { + field(); + } else { + if (names == null) { + names = new Array(); + values = new Array>(); + } + names.push(entry[0]); + var entryValues:Array = new Array(); + entryValues.resize(count); + for (i in 0...count) { + entryValues[i] = Std.parseInt(entry[i + 1]); + } + values.push(entryValues); + } + } + + if (region.originalWidth == 0 && region.originalHeight == 0) { + region.originalWidth = region.width; + region.originalHeight = region.height; + } + + if (names != null && names.length > 0 && values != null && values.length > 0) { + region.names = names; + region.values = values; + names = null; + values = null; + } + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.degrees == 90) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + + textureLoader.loadRegion(region); + regions.push(region); + } + } + } + + /** Returns the first region found with the specified name. This method uses string comparison to find the region, so the result + * should be cached rather than calling this method multiple times. + * @return The region, or null. */ + public function findRegion(name:String):TextureAtlasRegion { + for (region in regions) { + if (region.name == name) { + return region; + } + } + return null; + } + + public function dispose():Void { + for (page in pages) { + textureLoader.unloadPage(page); + } + } +} + +class Reader { + private static var trimRegex:EReg = new EReg("^\\s+|\\s+$", "g"); + + private var lines:Array; + private var index:Int = 0; + + public function new(text:String) { + var regex:EReg = new EReg("[ \t]*(?:\r\n|\r|\n)[ \t]*", "g"); + lines = regex.split(text); + } + + private function trim(value:String):String { + return trimRegex.replace(value, ""); + } + + public function readLine():String { + return index >= lines.length ? null : lines[index++]; + } + + public function readEntry(entry:Array, line:String):Int { + if (line == null) + return 0; + if (line.length == 0) + return 0; + var colon:Int = line.indexOf(':'); + if (colon == -1) + return 0; + entry[0] = trim(line.substr(0, colon)); + var i:Int = 1; + var lastMatch:Int = colon + 1; + while (true) { + var comma:Int = line.indexOf(',', lastMatch); + if (comma == -1) { + entry[i] = trim(line.substr(lastMatch)); + return i; + } + entry[i] = trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + if (i == 4) + return 4; + + i++; + } + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureAtlasPage.hx b/spine-haxe/spine-haxe/spine/atlas/TextureAtlasPage.hx new file mode 100644 index 000000000..ba7533a16 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureAtlasPage.hx @@ -0,0 +1,48 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +class TextureAtlasPage { + public var name:String; + public var format:Format; + public var minFilter:TextureFilter = TextureFilter.nearest; + public var magFilter:TextureFilter = TextureFilter.nearest; + public var uWrap:TextureWrap = TextureWrap.clampToEdge; + public var vWrap:TextureWrap = TextureWrap.clampToEdge; + public var width = 0; + public var height = 0; + public var pma = false; + public var texture:Dynamic; + public var regions = new Array(); + + public function new(name:String) { + this.name = name; + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureAtlasRegion.hx b/spine-haxe/spine-haxe/spine/atlas/TextureAtlasRegion.hx new file mode 100644 index 000000000..dfa29c0c3 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureAtlasRegion.hx @@ -0,0 +1,49 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +class TextureAtlasRegion extends TextureRegion { + public var page:TextureAtlasPage; + public var name:String; + public var x:Int = 0; + public var y:Int = 0; + public var index:Int = 0; + public var splits:Array; + public var pads:Array; + public var names:Array; + public var values:Array>; + + public function new(page:TextureAtlasPage, name:String) { + super(); + this.page = page; + this.name = name; + page.regions.push(this); + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureFilter.hx b/spine-haxe/spine-haxe/spine/atlas/TextureFilter.hx new file mode 100644 index 000000000..86741c564 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureFilter.hx @@ -0,0 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +class TextureFilter { + public static var nearest(default, never):TextureFilter = new TextureFilter(0, "nearest"); + public static var linear(default, never):TextureFilter = new TextureFilter(1, "linear"); + public static var mipMap(default, never):TextureFilter = new TextureFilter(2, "mipMap"); + public static var mipMapNearestNearest(default, never):TextureFilter = new TextureFilter(3, "mipMapNearestNearest"); + public static var mipMapLinearNearest(default, never):TextureFilter = new TextureFilter(4, "mipMapLinearNearest"); + public static var mipMapNearestLinear(default, never):TextureFilter = new TextureFilter(5, "mipMapNearestLinear"); + public static var mipMapLinearLinear(default, never):TextureFilter = new TextureFilter(6, "mipMapLinearLinear"); + + public static var values(default, never):Array = [ + nearest, + linear, + mipMap, + mipMapNearestNearest, + mipMapLinearNearest, + mipMapNearestLinear, + mipMapLinearLinear + ]; + + public var ordinal(default, null):Int; + public var name(default, null):String; + + public function new(ordinal:Int, name:String) { + this.ordinal = ordinal; + this.name = name; + } + + public static function fromName(name:String):TextureFilter { + for (value in values) { + if (value.name == name.toLowerCase()) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureLoader.hx b/spine-haxe/spine-haxe/spine/atlas/TextureLoader.hx new file mode 100644 index 000000000..37df62cd6 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureLoader.hx @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +interface TextureLoader { + function loadPage(page:TextureAtlasPage, path:String):Void; + + function loadRegion(region:TextureAtlasRegion):Void; + + function unloadPage(page:TextureAtlasPage):Void; +} diff --git a/spine-haxe/spine-haxe/spine/atlas/TextureWrap.hx b/spine-haxe/spine-haxe/spine/atlas/TextureWrap.hx new file mode 100644 index 000000000..0554e6330 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/atlas/TextureWrap.hx @@ -0,0 +1,54 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.atlas; + +class TextureWrap { + public static var mirroredRepeat(default, never):TextureWrap = new TextureWrap(0, "mirroredRepeat"); + public static var clampToEdge(default, never):TextureWrap = new TextureWrap(1, "clampToEdge"); + public static var repeat(default, never):TextureWrap = new TextureWrap(2, "repeat"); + + public static var values(default, never):Array = [mirroredRepeat, clampToEdge, repeat]; + + public var ordinal(default, null):Int; + public var name(default, null):String; + + public function new(ordinal:Int, name:String) { + this.ordinal = ordinal; + this.name = name; + } + + public static function fromName(name:String):TextureWrap { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/AtlasAttachmentLoader.hx b/spine-haxe/spine-haxe/spine/attachments/AtlasAttachmentLoader.hx new file mode 100644 index 000000000..05b3595a9 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/AtlasAttachmentLoader.hx @@ -0,0 +1,97 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.atlas.TextureAtlas; +import spine.Skin; + +class AtlasAttachmentLoader implements AttachmentLoader { + private var atlas:TextureAtlas; + + public function new(atlas:TextureAtlas) { + if (atlas == null) { + throw new SpineException("atlas cannot be null."); + } + this.atlas = atlas; + } + + private function loadSequence(name:String, basePath:String, sequence:Sequence) { + var regions = sequence.regions; + for (i in 0...regions.length) { + var path = sequence.getPath(basePath, i); + var region = this.atlas.findRegion(path); + if (region == null) + throw new SpineException("Region not found in atlas: " + path + " (sequence: " + name + ")"); + regions[i] = region; + } + } + + public function newRegionAttachment(skin:Skin, name:String, path:String, sequence:Sequence):RegionAttachment { + var attachment = new RegionAttachment(name, path); + if (sequence != null) { + this.loadSequence(name, path, sequence); + } else { + var region = this.atlas.findRegion(path); + if (region == null) + throw new SpineException("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + attachment.region = region; + } + return attachment; + } + + public function newMeshAttachment(skin:Skin, name:String, path:String, sequence:Sequence):MeshAttachment { + var attachment = new MeshAttachment(name, path); + if (sequence != null) { + this.loadSequence(name, path, sequence); + } else { + var region = atlas.findRegion(path); + if (region == null) + throw new SpineException("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + attachment.region = region; + } + return attachment; + } + + public function newBoundingBoxAttachment(skin:Skin, name:String):BoundingBoxAttachment { + return new BoundingBoxAttachment(name); + } + + public function newPathAttachment(skin:Skin, name:String):PathAttachment { + return new PathAttachment(name); + } + + public function newPointAttachment(skin:Skin, name:String):PointAttachment { + return new PointAttachment(name); + } + + public function newClippingAttachment(skin:Skin, name:String):ClippingAttachment { + return new ClippingAttachment(name); + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/Attachment.hx b/spine-haxe/spine-haxe/spine/attachments/Attachment.hx new file mode 100644 index 000000000..e54335ff7 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/Attachment.hx @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +class Attachment { + private var _name:String; + + public function new(name:String) { + if (name == null) { + throw new SpineException("name cannot be null."); + } + _name = name; + } + + public var name(get, never):String; + + private function get_name():String { + return _name; + } + + public function toString():String { + return name; + } + + public function copy():Attachment { + throw new SpineException("Not implemented"); + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/AttachmentLoader.hx b/spine-haxe/spine-haxe/spine/attachments/AttachmentLoader.hx new file mode 100644 index 000000000..612e53d6e --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/AttachmentLoader.hx @@ -0,0 +1,52 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Skin; + +interface AttachmentLoader { + /** @return May be null to not load an attachment. */ + function newRegionAttachment(skin:Skin, name:String, path:String, sequence:Sequence):RegionAttachment; + + /** @return May be null to not load an attachment. */ + function newMeshAttachment(skin:Skin, name:String, path:String, sequence:Sequence):MeshAttachment; + + /** @return May be null to not load an attachment. */ + function newBoundingBoxAttachment(skin:Skin, name:String):BoundingBoxAttachment; + + /** @return May be null to not load an attachment */ + function newPathAttachment(skin:Skin, name:String):PathAttachment; + + /** @return May be null to not load an attachment */ + function newPointAttachment(skin:Skin, name:String):PointAttachment; + + /** @return May be null to not load an attachment */ + function newClippingAttachment(skin:Skin, name:String):ClippingAttachment; +} diff --git a/spine-haxe/spine-haxe/spine/attachments/AttachmentType.hx b/spine-haxe/spine-haxe/spine/attachments/AttachmentType.hx new file mode 100644 index 000000000..cb4465812 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/AttachmentType.hx @@ -0,0 +1,58 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +class AttachmentType { + public static var region(default, never):AttachmentType = new AttachmentType(0, "region"); + public static var boundingbox(default, never):AttachmentType = new AttachmentType(1, "boundingbox"); + public static var mesh(default, never):AttachmentType = new AttachmentType(2, "mesh"); + public static var linkedmesh(default, never):AttachmentType = new AttachmentType(3, "linkedmesh"); + public static var path(default, never):AttachmentType = new AttachmentType(4, "path"); + public static var point(default, never):AttachmentType = new AttachmentType(5, "point"); + public static var clipping(default, never):AttachmentType = new AttachmentType(6, "clipping"); + + public static var values(default, never):Array = [region, boundingbox, mesh, linkedmesh, path, point, clipping]; + + public var ordinal(default, null):Int; + public var name(default, null):String; + + public function new(ordinal:Int, name:String) { + this.ordinal = ordinal; + this.name = name; + } + + public static function fromName(name:String):AttachmentType { + for (value in values) { + if (value.name == name) + return value; + } + return null; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/BoundingBoxAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/BoundingBoxAttachment.hx new file mode 100644 index 000000000..14459d9e9 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/BoundingBoxAttachment.hx @@ -0,0 +1,46 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Color; + +class BoundingBoxAttachment extends VertexAttachment { + public var color:Color = new Color(0, 0, 0, 0); + + public function new(name:String) { + super(name); + } + + override public function copy():Attachment { + var copy:BoundingBoxAttachment = new BoundingBoxAttachment(name); + copyTo(copy); + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/ClippingAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/ClippingAttachment.hx new file mode 100644 index 000000000..20dc3d4aa --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/ClippingAttachment.hx @@ -0,0 +1,50 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Color; +import spine.SlotData; + +class ClippingAttachment extends VertexAttachment { + public var endSlot:SlotData; + public var color:Color = new Color(0.2275, 0.2275, 0.2275, 1); + + public function new(name:String) { + super(name); + } + + override public function copy():Attachment { + var copy:ClippingAttachment = new ClippingAttachment(name); + copyTo(copy); + copy.endSlot = endSlot; + copy.color.setFromColor(color); + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/MeshAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/MeshAttachment.hx new file mode 100644 index 000000000..d712f457d --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/MeshAttachment.hx @@ -0,0 +1,193 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Color; +import spine.atlas.TextureAtlasRegion; + +class MeshAttachment extends VertexAttachment implements HasTextureRegion { + public var region:TextureRegion; + public var path:String; + public var regionUVs = new Array(); + public var uvs = new Array(); + public var triangles = new Array(); + public var color:Color = new Color(1, 1, 1, 1); + public var width:Float = 0; + public var height:Float = 0; + public var hullLength:Int = 0; + public var edges = new Array(); + public var rendererObject:Dynamic; + public var sequence:Sequence; + + private var _parentMesh:MeshAttachment; + + public function new(name:String, path:String) { + super(name); + this.path = path; + } + + public function updateRegion():Void { + if (region == null) { + throw new SpineException("Region not set."); + return; + } + var regionUVs = this.regionUVs; + if (uvs.length != regionUVs.length) { + uvs = new Array(); + uvs.resize(regionUVs.length); + } + var n = uvs.length; + var u = region.u, v = region.v, width:Float = 0, height:Float = 0; + if (Std.isOfType(region, TextureAtlasRegion)) { + var atlasRegion:TextureAtlasRegion = cast(region, TextureAtlasRegion); + var textureWidth = atlasRegion.page.width, + textureHeight = atlasRegion.page.height; + switch (atlasRegion.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; + var i = 0; + while (i < n) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + i += 2; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + var i = 0; + while (i < n) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + i += 2; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + var i = 0; + while (i < n) { + 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 (region == null) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + var i = 0; + while (i < n) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + i += 2; + } + } + + public var parentMesh(get, set):MeshAttachment; + + private function get_parentMesh():MeshAttachment { + return _parentMesh; + } + + private function set_parentMesh(parentMesh:MeshAttachment):MeshAttachment { + _parentMesh = parentMesh; + if (parentMesh != null) { + bones = parentMesh.bones; + vertices = parentMesh.vertices; + worldVerticesLength = parentMesh.worldVerticesLength; + regionUVs = parentMesh.regionUVs; + triangles = parentMesh.triangles; + hullLength = parentMesh.hullLength; + edges = parentMesh.edges; + width = parentMesh.width; + height = parentMesh.height; + } + return _parentMesh; + } + + override public function copy():Attachment { + if (parentMesh != null) + return newLinkedMesh(); + + var copy:MeshAttachment = new MeshAttachment(name, this.path); + copy.region = region; + copy.color.setFromColor(color); + copy.rendererObject = rendererObject; + + this.copyTo(copy); + copy.regionUVs = regionUVs.copy(); + copy.uvs = uvs.copy(); + copy.triangles = triangles.copy(); + copy.hullLength = hullLength; + + copy.sequence = sequence != null ? sequence.copy() : null; + + if (edges != null) { + copy.edges = edges.copy(); + } + copy.width = width; + copy.height = height; + + return copy; + } + + public override function computeWorldVertices(slot:Slot, start:Int, count:Int, worldVertices:Array, offset:Int, stride:Int):Void { + if (sequence != null) + sequence.apply(slot, this); + super.computeWorldVertices(slot, start, count, worldVertices, offset, stride); + } + + public function newLinkedMesh():MeshAttachment { + var copy:MeshAttachment = new MeshAttachment(name, path); + copy.rendererObject = rendererObject; + copy.region = region; + copy.color.setFromColor(color); + copy.timelineAttachment = timelineAttachment; + copy.parentMesh = this.parentMesh != null ? this.parentMesh : this; + if (copy.region != null) + copy.updateRegion(); + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/PathAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/PathAttachment.hx new file mode 100644 index 000000000..51976d107 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/PathAttachment.hx @@ -0,0 +1,52 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Color; + +class PathAttachment extends VertexAttachment { + public var lengths:Array; + public var closed:Bool = false; + public var constantSpeed:Bool = false; + public var color:Color = new Color(0, 0, 0, 0); + + public function new(name:String) { + super(name); + } + + override public function copy():Attachment { + var copy:PathAttachment = new PathAttachment(name); + copyTo(copy); + copy.lengths = lengths.copy(); + copy.closed = closed; + copy.constantSpeed = constantSpeed; + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/PointAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/PointAttachment.hx new file mode 100644 index 000000000..ec01ac494 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/PointAttachment.hx @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Bone; +import spine.Color; +import spine.MathUtils; + +class PointAttachment extends VertexAttachment { + public var x:Float = 0; + public var y:Float = 0; + public var rotation:Float = 0; + public var color:Color = new Color(0.38, 0.94, 0, 1); + + public function new(name:String) { + super(name); + } + + public function computeWorldPosition(bone:Bone, point:Array):Array { + point[0] = x * bone.a + y * bone.b + bone.worldX; + point[1] = x * bone.c + y * bone.d + bone.worldY; + return point; + } + + public function computeWorldRotation(bone:Bone):Float { + var cos:Float = MathUtils.cosDeg(this.rotation), + sin:Float = MathUtils.sinDeg(this.rotation); + var x:Float = cos * bone.a + sin * bone.b; + var y:Float = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * MathUtils.radDeg; + } + + override public function copy():Attachment { + var copy:PointAttachment = new PointAttachment(name); + copy.x = x; + copy.y = y; + copy.rotation = rotation; + copy.color.setFromColor(color); + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/RegionAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/RegionAttachment.hx new file mode 100644 index 000000000..aec47acfb --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/RegionAttachment.hx @@ -0,0 +1,180 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Color; + +class RegionAttachment extends Attachment implements HasTextureRegion { + public static inline var BLX:Int = 0; + public static inline var BLY:Int = 1; + public static inline var ULX:Int = 2; + public static inline var ULY:Int = 3; + public static inline var URX:Int = 4; + public static inline var URY:Int = 5; + public static inline var BRX:Int = 6; + public static inline var BRY:Int = 7; + + public var x:Float = 0; + public var y:Float = 0; + public var scaleX:Float = 1; + public var scaleY:Float = 1; + public var rotation:Float = 0; + public var width:Float = 0; + public var height:Float = 0; + public var color:Color = new Color(1, 1, 1, 1); + public var path:String; + public var rendererObject:Dynamic; + public var region:TextureRegion; + public var sequence:Sequence; + + private var offsets:Array = new Array(); + + public var uvs:Array = new Array(); + + public function new(name:String, path:String) { + super(name); + this.path = path; + } + + public function updateRegion():Void { + if (region == null) { + throw new SpineException("Region not set."); + uvs[0] = 0; + uvs[1] = 0; + uvs[2] = 0; + uvs[3] = 1; + uvs[4] = 1; + uvs[5] = 1; + uvs[6] = 1; + uvs[7] = 0; + return; + } + + var regionScaleX = width / region.originalWidth * scaleX; + var regionScaleY = height / region.originalHeight * scaleY; + var localX = -width / 2 * scaleX + region.offsetX * regionScaleX; + var localY = -height / 2 * scaleY + region.offsetY * regionScaleY; + var localX2 = localX + region.width * regionScaleX; + var localY2 = localY + region.height * regionScaleY; + var radians = rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var x = this.x, y = this.y; + var localXCos = localX * cos + x; + var localXSin = localX * sin; + var localYCos = localY * cos + y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + y; + var localY2Sin = localY2 * sin; + + offsets[0] = localXCos - localYSin; + offsets[1] = localYCos + localXSin; + offsets[2] = localXCos - localY2Sin; + offsets[3] = localY2Cos + localXSin; + offsets[4] = localX2Cos - localY2Sin; + offsets[5] = localY2Cos + localX2Sin; + offsets[6] = localX2Cos - localYSin; + offsets[7] = localYCos + localX2Sin; + + if (region.degrees == 90) { + uvs[0] = region.u2; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + } 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; + } + } + + public function computeWorldVertices(slot:Slot, worldVertices:Array, offset:Int, stride:Int):Void { + if (sequence != null) + sequence.apply(slot, this); + + var bone = slot.bone; + var vertexOffset = this.offsets; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX:Float = 0, offsetY:Float = 0; + + offsetX = vertexOffset[0]; + offsetY = vertexOffset[1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // br + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[2]; + offsetY = vertexOffset[3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // bl + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[4]; + offsetY = vertexOffset[5]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // ul + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[6]; + offsetY = vertexOffset[7]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // ur + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + } + + override public function copy():Attachment { + var copy:RegionAttachment = new RegionAttachment(name, path); + copy.region = region; + copy.rendererObject = rendererObject; + copy.x = x; + copy.y = y; + copy.scaleX = scaleX; + copy.scaleY = scaleY; + copy.rotation = rotation; + copy.width = width; + copy.height = height; + copy.uvs = uvs.copy(); + copy.offsets = offsets.copy(); + copy.color.setFromColor(color); + copy.sequence = sequence != null ? sequence.copy() : null; + return copy; + } +} diff --git a/spine-haxe/spine-haxe/spine/attachments/VertexAttachment.hx b/spine-haxe/spine-haxe/spine/attachments/VertexAttachment.hx new file mode 100644 index 000000000..ad12506d3 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/attachments/VertexAttachment.hx @@ -0,0 +1,166 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.attachments; + +import spine.Bone; +import spine.Skeleton; +import spine.Slot; + +class VertexAttachment extends Attachment { + private static var nextID:Int = 0; + + public var bones:Array; + public var vertices = new Array(); + public var worldVerticesLength:Int = 0; + public var id:Int = nextID++; + public var timelineAttachment:VertexAttachment; + + public function new(name:String) { + super(name); + timelineAttachment = this; + } + + /** 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. */ + public function computeWorldVertices(slot:Slot, start:Int, count:Int, worldVertices:Array, offset:Int, stride:Int):Void { + count = offset + (count >> 1) * stride; + var skeleton:Skeleton = slot.skeleton; + var deform:Array = slot.deform; + + var v:Int, w:Int, n:Int, i:Int, skip:Int, b:Int, f:Int; + var vx:Float, vy:Float; + var wx:Float, wy:Float; + var bone:Bone; + + if (bones == null) { + if (deform.length > 0) + vertices = deform; + bone = slot.bone; + var x:Float = bone.worldX; + var y:Float = bone.worldY; + var a:Float = bone.a, + bb:Float = bone.b, + c:Float = bone.c, + d:Float = bone.d; + v = start; + w = offset; + while (w < count) { + vx = vertices[v]; + vy = vertices[v + 1]; + worldVertices[w] = vx * a + vy * bb + x; + worldVertices[w + 1] = vx * c + vy * d + y; + v += 2; + w += stride; + } + return; + } + v = 0; + skip = 0; + i = 0; + while (i < start) { + n = bones[v]; + v += n + 1; + skip += n; + i += 2; + } + var skeletonBones:Array = skeleton.bones; + if (deform.length == 0) { + w = offset; + b = skip * 3; + while (w < count) { + wx = 0; + wy = 0; + n = bones[v++]; + n += v; + while (v < n) { + bone = skeletonBones[bones[v]]; + vx = vertices[b]; + vy = vertices[b + 1]; + var weight:Float = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + v++; + b += 3; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + w += stride; + } + } else { + w = offset; + b = skip * 3; + f = skip << 1; + while (w < count) { + wx = 0; + wy = 0; + n = bones[v++]; + n += v; + while (v < n) { + bone = skeletonBones[bones[v]]; + vx = vertices[b] + deform[f]; + vy = vertices[b + 1] + deform[f + 1]; + var weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + v++; + b += 3; + f += 2; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + w += stride; + } + } + } + + public function copyTo(attachment:VertexAttachment):Void { + if (bones != null) { + attachment.bones = bones.copy(); + } else { + attachment.bones = null; + } + + if (this.vertices != null) { + attachment.vertices = vertices.copy(); + } + + attachment.worldVerticesLength = worldVerticesLength; + attachment.timelineAttachment = timelineAttachment; + } +} diff --git a/spine-haxe/spine-haxe/spine/starling/SkeletonMesh.hx b/spine-haxe/spine-haxe/spine/starling/SkeletonMesh.hx new file mode 100644 index 000000000..ba5f89ac8 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/starling/SkeletonMesh.hx @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.starling; + +import starling.display.Mesh; +import starling.rendering.IndexData; +import starling.rendering.VertexData; +import starling.styles.MeshStyle; +import starling.textures.Texture; + +class SkeletonMesh extends Mesh { + public function new(texture:Texture, vertexData:VertexData = null, indexData:IndexData = null, style:MeshStyle = null) { + super(vertexData == null ? new VertexData() : vertexData, indexData == null ? new IndexData() : indexData, style); + this.texture = texture; + } + + public function getVertexData():VertexData { + return this.vertexData; + } + + public function getIndexData():IndexData { + return this.indexData; + } +} diff --git a/spine-haxe/spine-haxe/spine/starling/SkeletonSprite.hx b/spine-haxe/spine-haxe/spine/starling/SkeletonSprite.hx new file mode 100644 index 000000000..54fc057b7 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/starling/SkeletonSprite.hx @@ -0,0 +1,346 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.starling; + +import starling.animation.IAnimatable; +import openfl.geom.Matrix; +import openfl.geom.Point; +import openfl.geom.Rectangle; +import spine.Bone; +import spine.Skeleton; +import spine.SkeletonClipping; +import spine.SkeletonData; +import spine.Slot; +import spine.animation.AnimationState; +import spine.animation.AnimationStateData; +import spine.attachments.Attachment; +import spine.attachments.ClippingAttachment; +import spine.attachments.MeshAttachment; +import spine.attachments.RegionAttachment; +import starling.display.BlendMode; +import starling.display.DisplayObject; +import starling.rendering.IndexData; +import starling.rendering.Painter; +import starling.rendering.VertexData; +import starling.textures.Texture; +import starling.utils.Color; +import starling.utils.MatrixUtil; +import starling.utils.Max; + +class SkeletonSprite extends DisplayObject implements IAnimatable { + static private var _tempPoint:Point = new Point(); + static private var _tempMatrix:Matrix = new Matrix(); + static private var _tempVertices:Array = new Array(); + static private var blendModes:Array = [BlendMode.NORMAL, BlendMode.ADD, BlendMode.MULTIPLY, BlendMode.SCREEN]; + + private var _skeleton:Skeleton; + + public var _state:AnimationState; + + private var _smoothing:String = "bilinear"; + + private static var clipper:SkeletonClipping = new SkeletonClipping(); + private static var QUAD_INDICES:Array = [0, 1, 2, 2, 3, 0]; + + private var tempLight:spine.Color = new spine.Color(0, 0, 0); + private var tempDark:spine.Color = new spine.Color(0, 0, 0); + + public function new(skeletonData:SkeletonData, animationStateData:AnimationStateData = null) { + super(); + Bone.yDown = true; + _skeleton = new Skeleton(skeletonData); + _skeleton.updateWorldTransform(); + _state = new AnimationState(animationStateData != null ? animationStateData : new AnimationStateData(skeletonData)); + } + + override public function render(painter:Painter):Void { + var clipper:SkeletonClipping = SkeletonSprite.clipper; + painter.state.alpha *= skeleton.color.a; + var originalBlendMode:String = painter.state.blendMode; + var r:Float = skeleton.color.r * 255; + var g:Float = skeleton.color.g * 255; + var b:Float = skeleton.color.b * 255; + var drawOrder:Array = skeleton.drawOrder; + var attachmentColor:spine.Color; + var rgb:Int; + var a:Float; + var dark:Int; + var mesh:SkeletonMesh = null; + var verticesLength:Int; + var verticesCount:Int; + var indicesLength:Int; + var indexData:IndexData; + var indices:Array = null; + var vertexData:VertexData; + var uvs:Array; + + for (slot in drawOrder) { + if (!slot.bone.active) { + clipper.clipEndWithSlot(slot); + continue; + } + + var worldVertices:Array = _tempVertices; + if (Std.isOfType(slot.attachment, RegionAttachment)) { + var region:RegionAttachment = cast(slot.attachment, RegionAttachment); + verticesLength = 8; + verticesCount = verticesLength >> 1; + if (worldVertices.length < verticesLength) + worldVertices.resize(verticesLength); + region.computeWorldVertices(slot, worldVertices, 0, 2); + + mesh = null; + if (Std.isOfType(region.rendererObject, SkeletonMesh)) { + mesh = cast(region.rendererObject, SkeletonMesh); + mesh.texture = region.region.texture; + indices = QUAD_INDICES; + } else { + mesh = region.rendererObject = new SkeletonMesh(cast(region.region.texture, Texture)); + + indexData = mesh.getIndexData(); + indices = QUAD_INDICES; + for (i in 0...indices.length) { + indexData.setIndex(i, indices[i]); + } + indexData.numIndices = indices.length; + indexData.trim(); + } + + indexData = mesh.getIndexData(); + attachmentColor = region.color; + uvs = region.uvs; + } else if (Std.isOfType(slot.attachment, MeshAttachment)) { + var meshAttachment:MeshAttachment = cast(slot.attachment, MeshAttachment); + verticesLength = meshAttachment.worldVerticesLength; + verticesCount = verticesLength >> 1; + if (worldVertices.length < verticesLength) + worldVertices.resize(verticesLength); + meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, worldVertices, 0, 2); + + mesh = null; + if (Std.isOfType(meshAttachment.rendererObject, SkeletonMesh)) { + mesh = cast(meshAttachment.rendererObject, SkeletonMesh); + mesh.texture = meshAttachment.region.texture; + indices = meshAttachment.triangles; + } else { + mesh = meshAttachment.rendererObject = new SkeletonMesh(cast(meshAttachment.region.texture, Texture)); + + indexData = mesh.getIndexData(); + indices = meshAttachment.triangles; + indicesLength = indices.length; + for (i in 0...indicesLength) { + indexData.setIndex(i, indices[i]); + } + indexData.numIndices = indicesLength; + indexData.trim(); + } + + indexData = mesh.getIndexData(); + attachmentColor = meshAttachment.color; + uvs = meshAttachment.uvs; + } else if (Std.isOfType(slot.attachment, ClippingAttachment)) { + var clip:ClippingAttachment = cast(slot.attachment, ClippingAttachment); + clipper.clipStart(slot, clip); + continue; + } else { + clipper.clipEndWithSlot(slot); + continue; + } + + a = slot.color.a * attachmentColor.a; + if (a == 0) { + clipper.clipEndWithSlot(slot); + continue; + } + rgb = Color.rgb(Std.int(r * slot.color.r * attachmentColor.r), Std.int(g * slot.color.g * attachmentColor.g), + Std.int(b * slot.color.b * attachmentColor.b)); + if (slot.darkColor == null) { + dark = Color.rgb(0, 0, 0); + } else { + dark = Color.rgb(Std.int(slot.darkColor.r * 255), Std.int(slot.darkColor.g * 255), Std.int(slot.darkColor.b * 255)); + } + + if (clipper.isClipping()) { + clipper.clipTriangles(worldVertices, indices, indices.length, uvs); + + // Need to create a new mesh here, see https://github.com/EsotericSoftware/spine-runtimes/issues/1125 + mesh = new SkeletonMesh(mesh.texture); + indexData = mesh.getIndexData(); + + verticesCount = clipper.clippedVertices.length >> 1; + worldVertices = clipper.clippedVertices; + uvs = clipper.clippedUvs; + + indices = clipper.clippedTriangles; + indicesLength = indices.length; + indexData.numIndices = indicesLength; + indexData.trim(); + for (i in 0...indicesLength) { + indexData.setIndex(i, indices[i]); + } + } + + vertexData = mesh.getVertexData(); + vertexData.numVertices = verticesCount; + vertexData.colorize("color", rgb, a); + var ii:Int = 0; + for (i in 0...verticesCount) { + mesh.setVertexPosition(i, worldVertices[ii], worldVertices[ii + 1]); + mesh.setTexCoords(i, uvs[ii], uvs[ii + 1]); + ii += 2; + } + + if (indexData.numIndices > 0 && vertexData.numVertices > 0) { + painter.state.blendMode = blendModes[slot.data.blendMode.ordinal]; + painter.batchMesh(mesh); + } + + clipper.clipEndWithSlot(slot); + } + painter.state.blendMode = originalBlendMode; + clipper.clipEnd(); + } + + override public function hitTest(localPoint:Point):DisplayObject { + if (!this.visible || !this.touchable) + return null; + + var minX:Float = Max.MAX_VALUE; + var minY:Float = Max.MAX_VALUE; + var maxX:Float = -Max.MAX_VALUE; + var maxY:Float = -Max.MAX_VALUE; + var slots:Array = skeleton.slots; + var worldVertices:Array = _tempVertices; + var empty:Bool = true; + for (i in 0...slots.length) { + var slot:Slot = slots[i]; + var attachment:Attachment = slot.attachment; + if (attachment == null) + continue; + var verticesLength:Int; + if (Std.isOfType(attachment, RegionAttachment)) { + var region:RegionAttachment = cast(slot.attachment, RegionAttachment); + verticesLength = 8; + region.computeWorldVertices(slot, worldVertices, 0, 2); + } else if (Std.isOfType(attachment, MeshAttachment)) { + var mesh:MeshAttachment = cast(attachment, MeshAttachment); + verticesLength = mesh.worldVerticesLength; + if (worldVertices.length < verticesLength) + worldVertices.resize(verticesLength); + mesh.computeWorldVertices(slot, 0, verticesLength, worldVertices, 0, 2); + } else { + continue; + } + + if (verticesLength != 0) { + empty = false; + } + + var ii:Int = 0; + while (ii < verticesLength) { + var x:Float = worldVertices[ii], + y:Float = worldVertices[ii + 1]; + minX = minX < x ? minX : x; + minY = minY < y ? minY : y; + maxX = maxX > x ? maxX : x; + maxY = maxY > y ? maxY : y; + ii += 2; + } + } + + if (empty) { + return null; + } + + var temp:Float; + if (maxX < minX) { + temp = maxX; + maxX = minX; + minX = temp; + } + if (maxY < minY) { + temp = maxY; + maxY = minY; + minY = temp; + } + + if (localPoint.x >= minX && localPoint.x < maxX && localPoint.y >= minY && localPoint.y < maxY) { + return this; + } + + return null; + } + + override public function getBounds(targetSpace:DisplayObject, resultRect:Rectangle = null):Rectangle { + if (resultRect == null) { + resultRect = new Rectangle(); + } + if (targetSpace == this) { + resultRect.setTo(0, 0, 0, 0); + } else if (targetSpace == parent) { + resultRect.setTo(x, y, 0, 0); + } else { + getTransformationMatrix(targetSpace, _tempMatrix); + MatrixUtil.transformCoords(_tempMatrix, 0, 0, _tempPoint); + resultRect.setTo(_tempPoint.x, _tempPoint.y, 0, 0); + } + return resultRect; + } + + public var skeleton(get, never):Skeleton; + + private function get_skeleton():Skeleton { + return _skeleton; + } + + public var state(get, never):AnimationState; + + private function get_state():AnimationState { + return _state; + } + + public var smoothing(get, set):String; + + private function get_smoothing():String { + return _smoothing; + } + + private function set_smoothing(smoothing:String):String { + _smoothing = smoothing; + return _smoothing; + } + + public function advanceTime(time:Float):Void { + _state.update(time); + _state.apply(skeleton); + skeleton.updateWorldTransform(); + this.setRequiresRedraw(); + } +} diff --git a/spine-haxe/spine-haxe/spine/starling/StarlingTextureLoader.hx b/spine-haxe/spine-haxe/spine/starling/StarlingTextureLoader.hx new file mode 100644 index 000000000..44e91c559 --- /dev/null +++ b/spine-haxe/spine-haxe/spine/starling/StarlingTextureLoader.hx @@ -0,0 +1,63 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. +*****************************************************************************/ + +package spine.starling; + +import starling.textures.Texture; +import spine.atlas.TextureAtlasRegion; +import spine.atlas.TextureAtlasPage; +import spine.atlas.TextureLoader; + +class StarlingTextureLoader implements TextureLoader { + private var basePath:String; + + public function new(atlasPath:String) { + basePath = ""; + var slashIndex = atlasPath.lastIndexOf("/"); + if (slashIndex != -1) { + basePath = atlasPath.substring(0, slashIndex); + } + } + + public function loadPage(page:TextureAtlasPage, path:String) { + var bitmapData = openfl.utils.Assets.getBitmapData(basePath + "/" + path); + if (bitmapData == null) { + throw new SpineException("Could not load atlas page texture " + basePath + "/" + path); + } + page.texture = Texture.fromBitmapData(bitmapData); + } + + public function loadRegion(region:TextureAtlasRegion):Void { + region.texture = region.page.texture; + } + + public function unloadPage(page:TextureAtlasPage):Void { + cast(page.texture, Texture).dispose(); + } +} diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java index 3b2014498..24c154751 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java index 7f4261175..ce9b597fd 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/BonePlotting.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/BonePlotting.java index 475b6460f..fbd35dee4 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/BonePlotting.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/BonePlotting.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java index 1f57b4143..a27a9b27c 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java index 4a992376c..b473655e4 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FboTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FboTest.java index 53d07b4a6..cabac8715 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FboTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FboTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FrameByFrameTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FrameByFrameTest.java index 3b292c688..ea5a3f932 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FrameByFrameTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/FrameByFrameTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IKTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IKTest.java index 8ab2e50ad..c42577b60 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IKTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IKTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixAndMatchTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixAndMatchTest.java index bbfce39f1..24d143c8c 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixAndMatchTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixAndMatchTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java index 7a404ad57..119a632bb 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/PngExportTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/PngExportTest.java index dabab7b15..648e7532a 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/PngExportTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/PngExportTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java index 46ca59ba8..e1f613e83 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java index 3580b9209..94fa8f0df 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java index bc3094a09..b91541ceb 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAssetManagerTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAssetManagerTest.java index 64d49f031..1c8d490e4 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAssetManagerTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAssetManagerTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java index 38e138812..30318727b 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TestHarness.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TestHarness.java index a5c10ab57..3a67882b4 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TestHarness.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TestHarness.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TimelineApiTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TimelineApiTest.java index 5c233c797..0ccfed366 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TimelineApiTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/TimelineApiTest.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java index 3bd8bf011..cefdedf42 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index 217602428..bdea98c71 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java index ff025b037..c52eb2aca 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BlendMode.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BlendMode.java index bf8943278..bb05b0275 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BlendMode.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BlendMode.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java index 9cc61ac80..a350262a0 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java index 43a4daea2..52b70a628 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/ConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/ConstraintData.java index 778cdcb2f..b17535c62 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/ConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/ConstraintData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java index a0780f2ee..67d9cb8af 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java index 1d0747764..5a47b3f23 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index f4f1987eb..864716224 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; @@ -186,7 +186,7 @@ public class IkConstraint implements Updatable { ty = targetY - bone.worldY; break; case noRotationOrReflection: - float s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + float s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001f, pa * pa + pc * pc); float sa = pa / bone.skeleton.scaleX; float sc = pc / bone.skeleton.scaleY; pb = -sc * s * bone.skeleton.scaleX; @@ -196,8 +196,13 @@ public class IkConstraint implements Updatable { default: float x = targetX - p.worldX, y = targetY - p.worldY; float d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone.ax; - ty = (y * pa - x * pc) / d - bone.ay; + if (Math.abs(d) <= 0.0001f) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } } rotationIK += atan2(ty, tx) * radDeg; if (bone.ascaleX < 0) rotationIK += 180; @@ -264,7 +269,8 @@ public class IkConstraint implements Updatable { b = pp.b; c = pp.c; d = pp.d; - float id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + float id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.abs(id) <= 0.0001f ? 0 : 1 / id; float dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; float l1 = (float)Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (l1 < 0.0001f) { diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java index 4150c252e..ffa110214 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java index 0a80cf54b..56df17b96 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraintData.java index 77a842062..81d4ffa2c 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraintData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index b564e2daa..bec635481 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index de09803a9..7b9908bb1 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java index 13c88e6a5..f63278e0f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java index 24427e3ca..9a59c52fa 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index b4d32bb85..5c1cbe790 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonLoader.java index 036e59dfb..46a61deba 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonLoader.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonLoader.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java index 31d7c9125..d8baba1ec 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java index f50e89c02..2c14189e2 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java index dd859e9f4..0dfbc0ce5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java index 13c75c2fd..afc1d159e 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java index aae673c28..7f751157b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java index 9679b204f..f206c2b25 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraintData.java index a6f859ae1..98b454290 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraintData.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Updatable.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Updatable.java index 02be3a3c1..6c75f4ac9 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Updatable.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Updatable.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java index 384baabd4..3ab5cd48a 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java index b76fc6bbc..2c976ac40 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java index cbe0bd55e..0f5909d62 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java index edf320a44..a9ad6c23f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java index 10d85c99f..fb61736d6 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/ClippingAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/ClippingAttachment.java index a3d9a62d4..d9ec58c58 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/ClippingAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/ClippingAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/HasTextureRegion.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/HasTextureRegion.java index 6c37b6f48..23f279583 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/HasTextureRegion.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/HasTextureRegion.java @@ -1,3 +1,31 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java index 6efc7e482..65fae258b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PathAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PathAttachment.java index 2f75df7ba..bb06fe8ed 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PathAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PathAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PointAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PointAttachment.java index 4a3e5a14a..6254a434b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PointAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/PointAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java index 2ea4d4a90..015028a73 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Sequence.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Sequence.java index 000611254..ac09ecff2 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Sequence.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Sequence.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java index 5fc6b7797..df0589ba8 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java index 03c41bdcf..1c400815b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.attachments; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActor.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActor.java index d209d038a..06d3d27c6 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActor.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActor.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActorPool.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActorPool.java index d7320f838..5b49ade5e 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActorPool.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonActorPool.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java index 5f4347602..2c9ad1afb 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.java index 23b6ad08b..9b430cc17 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDataLoader.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDrawable.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDrawable.java index d2b6d0ba1..64aa0d516 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDrawable.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonDrawable.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonPool.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonPool.java index c816db0e0..89511a96f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonPool.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonPool.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SpineUtils.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SpineUtils.java index f5acfae18..f34dcf4b7 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SpineUtils.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SpineUtils.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java index d53938d94..366244a2d 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java index f13984436..7d9ebf26b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine.utils; diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java index 1ab7f1a9a..6552a6b8e 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java index 1e26cb6f3..8a276534f 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerAtlas.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerAtlas.java index c5082977b..ee578ecc2 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerAtlas.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerAtlas.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerUI.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerUI.java index ef9572574..db28746c9 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerUI.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewerUI.java @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ package com.esotericsoftware.spine; diff --git a/spine-monogame/spine-monogame-example/ExampleGame.cs b/spine-monogame/spine-monogame-example/ExampleGame.cs index 68e927faf..8a48428f5 100644 --- a/spine-monogame/spine-monogame-example/ExampleGame.cs +++ b/spine-monogame/spine-monogame-example/ExampleGame.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame-example/ExampleProgram.cs b/spine-monogame/spine-monogame-example/ExampleProgram.cs index 6f6e6b71b..4953d0445 100644 --- a/spine-monogame/spine-monogame-example/ExampleProgram.cs +++ b/spine-monogame/spine-monogame-example/ExampleProgram.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-monogame/spine-monogame/spine-monogame.csproj b/spine-monogame/spine-monogame/spine-monogame.csproj index e5a3a0b48..6bab1904a 100644 --- a/spine-monogame/spine-monogame/spine-monogame.csproj +++ b/spine-monogame/spine-monogame/spine-monogame.csproj @@ -102,12 +102,6 @@ spine-csharp\SlotData.cs - - spine-csharp\SpringConstraint.cs - - - spine-csharp\SpringConstraintData.cs - spine-csharp\TextureRegion.cs @@ -260,12 +254,6 @@ spine-csharp\spine-csharp.asmdef.meta - - spine-csharp\SpringConstraint.cs.meta - - - spine-csharp\SpringConstraintData.cs.meta - spine-csharp\TransformConstraint.cs.meta diff --git a/spine-monogame/spine-monogame/src/MeshBatcher.cs b/spine-monogame/spine-monogame/src/MeshBatcher.cs index 8608d5e3a..598e91b10 100644 --- a/spine-monogame/spine-monogame/src/MeshBatcher.cs +++ b/spine-monogame/spine-monogame/src/MeshBatcher.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame/src/ShapeRenderer.cs b/spine-monogame/spine-monogame/src/ShapeRenderer.cs index 2f2832d20..aa84d64e7 100644 --- a/spine-monogame/spine-monogame/src/ShapeRenderer.cs +++ b/spine-monogame/spine-monogame/src/ShapeRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame/src/SkeletonDebugRenderer.cs b/spine-monogame/spine-monogame/src/SkeletonDebugRenderer.cs index 41af1dc2e..85d3815cb 100644 --- a/spine-monogame/spine-monogame/src/SkeletonDebugRenderer.cs +++ b/spine-monogame/spine-monogame/src/SkeletonDebugRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame/src/SkeletonRenderer.cs b/spine-monogame/spine-monogame/src/SkeletonRenderer.cs index 8389ca710..17b337322 100644 --- a/spine-monogame/spine-monogame/src/SkeletonRenderer.cs +++ b/spine-monogame/spine-monogame/src/SkeletonRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame/src/Util.cs b/spine-monogame/spine-monogame/src/Util.cs index cd51dedf1..2a396e5e7 100644 --- a/spine-monogame/spine-monogame/src/Util.cs +++ b/spine-monogame/spine-monogame/src/Util.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-monogame/spine-monogame/src/VertexEffect.cs b/spine-monogame/spine-monogame/src/VertexEffect.cs index 722cc73a2..f3dd42425 100644 --- a/spine-monogame/spine-monogame/src/VertexEffect.cs +++ b/spine-monogame/spine-monogame/src/VertexEffect.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-monogame/spine-monogame/src/XnaTextureLoader.cs b/spine-monogame/spine-monogame/src/XnaTextureLoader.cs index ed4c9be85..826f6303d 100644 --- a/spine-monogame/spine-monogame/src/XnaTextureLoader.cs +++ b/spine-monogame/spine-monogame/src/XnaTextureLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Microsoft.Xna.Framework; diff --git a/spine-sdl/example/main.c b/spine-sdl/example/main.c index deaaf7238..77b4a883c 100644 --- a/spine-sdl/example/main.c +++ b/spine-sdl/example/main.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-sdl/example/main.cpp b/spine-sdl/example/main.cpp index af8f08ec6..4172aaf39 100644 --- a/spine-sdl/example/main.cpp +++ b/spine-sdl/example/main.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -88,4 +88,4 @@ int main(int argc, char **argv) { SDL_DestroyWindow(window); SDL_Quit(); return 0; -} \ No newline at end of file +} diff --git a/spine-sdl/src/spine-sdl-c.c b/spine-sdl/src/spine-sdl-c.c index 83555998a..878c3da6f 100644 --- a/spine-sdl/src/spine-sdl-c.c +++ b/spine-sdl/src/spine-sdl-c.c @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "spine-sdl-c.h" diff --git a/spine-sdl/src/spine-sdl-c.h b/spine-sdl/src/spine-sdl-c.h index 7d48cca66..f99ee2691 100644 --- a/spine-sdl/src/spine-sdl-c.h +++ b/spine-sdl/src/spine-sdl-c.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SDL @@ -52,7 +52,7 @@ typedef struct spSkeletonDrawable { SP_API spSkeletonDrawable *spSkeletonDrawable_create(spSkeletonData *skeletonData, spAnimationStateData *animationStateData); -SP_API void spSkeletonDrawable_destroy(spSkeletonDrawable *self); +SP_API void spSkeletonDrawable_dispose(spSkeletonDrawable *self); SP_API void spSkeletonDrawable_update(spSkeletonDrawable *self, float delta); diff --git a/spine-sdl/src/spine-sdl-cpp.cpp b/spine-sdl/src/spine-sdl-cpp.cpp index 353a8b3ef..40b52cc99 100644 --- a/spine-sdl/src/spine-sdl-cpp.cpp +++ b/spine-sdl/src/spine-sdl-cpp.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "spine-sdl-cpp.h" @@ -101,7 +101,7 @@ void SkeletonDrawable::draw(SDL_Renderer *renderer) { uvs = ®ionAttachment->getUVs(); indices = &quadIndices; indicesCount = 6; - texture = (SDL_Texture *) ((AtlasRegion *) regionAttachment->getRendererObject())->page->getRendererObject(); + texture = (SDL_Texture *) regionAttachment->getRegion()->rendererObject; } else if (attachment->getRTTI().isExactly(MeshAttachment::rtti)) { MeshAttachment *mesh = (MeshAttachment *) attachment; @@ -115,7 +115,7 @@ void SkeletonDrawable::draw(SDL_Renderer *renderer) { worldVertices.setSize(mesh->getWorldVerticesLength(), 0); mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices.buffer(), 0, 2); - texture = (SDL_Texture *) ((AtlasRegion *) mesh->getRendererObject())->page->getRendererObject(); + texture = (SDL_Texture *) mesh->getRegion()->rendererObject; verticesCount = mesh->getWorldVerticesLength() >> 1; uvs = &mesh->getUVs(); indices = &mesh->getTriangles(); @@ -201,7 +201,7 @@ SDL_Texture *loadTexture(SDL_Renderer *renderer, const String &path) { void SDLTextureLoader::load(AtlasPage &page, const String &path) { SDL_Texture *texture = loadTexture(renderer, path); if (!texture) return; - page.setRendererObject(texture); + page.texture = texture; SDL_QueryTexture(texture, nullptr, nullptr, &page.width, &page.height); switch (page.magFilter) { case TextureFilter_Nearest: @@ -221,4 +221,4 @@ void SDLTextureLoader::unload(void *texture) { SpineExtension *spine::getDefaultExtension() { return new DefaultSpineExtension(); -} \ No newline at end of file +} diff --git a/spine-sdl/src/spine-sdl-cpp.h b/spine-sdl/src/spine-sdl-cpp.h index c47b6bc61..c33a0c83f 100644 --- a/spine-sdl/src/spine-sdl-cpp.h +++ b/spine-sdl/src/spine-sdl-cpp.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SDL @@ -68,4 +68,4 @@ namespace spine { }; }// namespace spine -#endif \ No newline at end of file +#endif diff --git a/spine-sfml/c/example/main.cpp b/spine-sfml/c/example/main.cpp index d3f17bb34..9419ad044 100644 --- a/spine-sfml/c/example/main.cpp +++ b/spine-sfml/c/example/main.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-sfml/c/src/spine/spine-sfml.cpp b/spine-sfml/c/src/spine/spine-sfml.cpp index 56d79fe14..539894774 100644 --- a/spine-sfml/c/src/spine/spine-sfml.cpp +++ b/spine-sfml/c/src/spine/spine-sfml.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-sfml/c/src/spine/spine-sfml.h b/spine-sfml/c/src/spine/spine-sfml.h index b1de165b3..181fa3750 100644 --- a/spine-sfml/c/src/spine/spine-sfml.h +++ b/spine-sfml/c/src/spine/spine-sfml.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SFML_H_ diff --git a/spine-sfml/cpp/example/main.cpp b/spine-sfml/cpp/example/main.cpp index 7733c5790..8437e864e 100644 --- a/spine-sfml/cpp/example/main.cpp +++ b/spine-sfml/cpp/example/main.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-sfml/cpp/example/testbed.cpp b/spine-sfml/cpp/example/testbed.cpp index 3bf47baaf..080e509d2 100644 --- a/spine-sfml/cpp/example/testbed.cpp +++ b/spine-sfml/cpp/example/testbed.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2020, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include @@ -72,4 +72,4 @@ int main(void) { } return 0; -} \ No newline at end of file +} diff --git a/spine-sfml/cpp/src/spine/spine-sfml.cpp b/spine-sfml/cpp/src/spine/spine-sfml.cpp index 755f0bed6..ef3e40074 100644 --- a/spine-sfml/cpp/src/spine/spine-sfml.cpp +++ b/spine-sfml/cpp/src/spine/spine-sfml.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include diff --git a/spine-sfml/cpp/src/spine/spine-sfml.h b/spine-sfml/cpp/src/spine/spine-sfml.h index 829f91215..c5e6ddb3b 100644 --- a/spine-sfml/cpp/src/spine/spine-sfml.h +++ b/spine-sfml/cpp/src/spine/spine-sfml.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #ifndef SPINE_SFML_H_ diff --git a/spine-ts/build.sh b/spine-ts/build.sh index c25718a6c..f0fae5b50 100755 --- a/spine-ts/build.sh +++ b/spine-ts/build.sh @@ -20,6 +20,8 @@ then spine-webgl/dist/iife/* \ spine-player/dist/iife/* \ spine-threejs/dist/iife/* \ + spine-pixi/dist/iife/* \ + spine-phaser/dist/iife/* \ spine-player/css/spine-player.css curl -f -F "file=@spine-ts.zip" "$TS_UPDATE_URL$BRANCH" else diff --git a/spine-ts/index.html b/spine-ts/index.html index 02607684a..c3951a1e3 100644 --- a/spine-ts/index.html +++ b/spine-ts/index.html @@ -1,58 +1,169 @@ + + + + spine-ts Examples + + - - - - spine-ts Examples - - - - -

spine-ts Examples

- - - - \ No newline at end of file + +

spine-ts Examples

+ + + diff --git a/spine-ts/package-lock.json b/spine-ts/package-lock.json index 37d5c58c2..5543ddad8 100644 --- a/spine-ts/package-lock.json +++ b/spine-ts/package-lock.json @@ -1,12 +1,12 @@ { "name": "@esotericsoftware/spine-ts", - "version": "4.1.26", + "version": "4.1.42", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@esotericsoftware/spine-ts", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "workspaces": [ "spine-core", @@ -14,18 +14,34 @@ "spine-phaser", "spine-player", "spine-threejs", + "spine-pixi", "spine-webgl" ], "devDependencies": { "@types/offscreencanvas": "^2019.6.4", + "@types/three": "^0.146.0", "concurrently": "^7.6.0", "copyfiles": "^2.4.1", "esbuild": "^0.16.4", "live-server": "^1.2.2", + "phaser": "^3.60.0", "rimraf": "^3.0.2", + "three": "^0.146.0", "typescript": "^4.9.4" } }, + "node_modules/@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", @@ -390,6 +406,10 @@ "resolved": "spine-phaser", "link": true }, + "node_modules/@esotericsoftware/spine-pixi": { + "resolved": "spine-pixi", + "link": true + }, "node_modules/@esotericsoftware/spine-player": { "resolved": "spine-player", "link": true @@ -402,24 +422,197 @@ "resolved": "spine-webgl", "link": true }, + "node_modules/@pixi/assets": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/assets/-/assets-7.3.0.tgz", + "integrity": "sha512-eIbvOMFwWKRUuOrFwTy9UDVrAY95o5OlwOHnxAmeYhn6VTchua/oAeeaAYJyJqjyw+ONFsLWE1cFX6uEKHM2Sw==", + "peer": true, + "dependencies": { + "@types/css-font-loading-module": "^0.0.7" + }, + "peerDependencies": { + "@pixi/core": "7.3.0", + "@pixi/utils": "7.3.0" + } + }, + "node_modules/@pixi/color": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/color/-/color-7.3.0.tgz", + "integrity": "sha512-qwgsP+cQhw0QjvouvAslpJ3g7DUMwKLUrXF6Nv+G4GhgVC2Z03CsCfWgUxLxKPD3WadB6FacdRIGx6o2TywB+A==", + "peer": true, + "dependencies": { + "colord": "^2.9.3" + } + }, + "node_modules/@pixi/constants": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-7.3.0.tgz", + "integrity": "sha512-zRBX5RAxm14zs7/sse/eXSrFzbv2XPEJwj2fQga+4hI7tAsXazYgGFl3CMlDET5mW9rXUSxROE0dvnLe9DcYRQ==", + "peer": true + }, + "node_modules/@pixi/core": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-7.3.0.tgz", + "integrity": "sha512-ZgFdlqOZfijfgvWMi6ZuQey2m3U+ik8GUD7MsLn96Gtg7UQGwmcEsEB2MZ7f7TUoLkMAOlxb0aXEHzdV/+v1zg==", + "peer": true, + "dependencies": { + "@pixi/color": "7.3.0", + "@pixi/constants": "7.3.0", + "@pixi/extensions": "7.3.0", + "@pixi/math": "7.3.0", + "@pixi/runner": "7.3.0", + "@pixi/settings": "7.3.0", + "@pixi/ticker": "7.3.0", + "@pixi/utils": "7.3.0", + "@types/offscreencanvas": "^2019.6.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/display": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-7.3.0.tgz", + "integrity": "sha512-YQJZEcQo/0BIhvAaKrG68w01HYhPMwyPLj0Rvw30J4sW4uer/vf50IEAkM80rdQIUowqjUvatUYRW/r+owomXg==", + "peer": true, + "peerDependencies": { + "@pixi/core": "7.3.0" + } + }, + "node_modules/@pixi/extensions": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-7.3.0.tgz", + "integrity": "sha512-kr0nia7yvPLIXqBeOKLUXcOoxRG5yCxIPUtXvsFSrrmJvqsXsyg4l9cH0CS/I9yTb67/ks5wjzieUdwNf8pfTg==", + "peer": true + }, + "node_modules/@pixi/graphics": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-7.3.0.tgz", + "integrity": "sha512-+5yyv8z4sZDxvdyYbGn/DeR1EdSD+ieXf9N3BS2puoxmrM5blMUzZCoY4vFCeF+r59VpB0ildYl3APzwMdRCLw==", + "peer": true, + "peerDependencies": { + "@pixi/core": "7.3.0", + "@pixi/display": "7.3.0", + "@pixi/sprite": "7.3.0" + } + }, + "node_modules/@pixi/math": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-7.3.0.tgz", + "integrity": "sha512-3gM1MffXlDM8bFNl+D1ndq4W1Gn7quRvxbAZ9RUp7Zvoqcud/0c/VcxngM2st+IXeFf8htlKxytkotMKk5gQxA==", + "peer": true + }, + "node_modules/@pixi/mesh": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-7.3.0.tgz", + "integrity": "sha512-TZqYmWiONuIIFzt+XL1+lnUFMHhiyJUyT5pNcW/mB1Kfg9vGIebgNbml+Ut6Rghe6B1ntereRyCyEpr+hLbbWg==", + "peer": true, + "peerDependencies": { + "@pixi/core": "7.3.0", + "@pixi/display": "7.3.0" + } + }, + "node_modules/@pixi/runner": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-7.3.0.tgz", + "integrity": "sha512-U0qQk5yhZcCYQVm444IO604aoe1TivQjKeaAYaEpxNyEbSJ2/rEIQEttrnw6JXnm6a0ycI8iBtweDthnpyatqA==", + "peer": true + }, + "node_modules/@pixi/settings": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-7.3.0.tgz", + "integrity": "sha512-x8Tms/DBnedbJBjkP4VHqyBckqXqJnoAfoayqEcFrqNDQa+1qkr1UnyPj3l4eiEPhY8cEUBz1wSZnhM7R4XcDw==", + "peer": true, + "dependencies": { + "@pixi/constants": "7.3.0", + "@types/css-font-loading-module": "^0.0.7", + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-7.3.0.tgz", + "integrity": "sha512-3hJveyaxJ9jmZiyOo/Wfmh0Lje7eElF0FoqPl9mfNCXz1TKHSmWqHste+1LimqnThTiUhruJqwUq8h5o1DKLuw==", + "peer": true, + "peerDependencies": { + "@pixi/core": "7.3.0", + "@pixi/display": "7.3.0" + } + }, + "node_modules/@pixi/text": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/text/-/text-7.3.0.tgz", + "integrity": "sha512-oShmP5CvATLJecK54i2YqwzKAkx8VRgpPqXk3m/gWvF+cs9i9AqCMV3sO5J6xdcCnc+Zb61hjX07J39+QxDqWg==", + "peer": true, + "peerDependencies": { + "@pixi/core": "7.3.0", + "@pixi/sprite": "7.3.0" + } + }, + "node_modules/@pixi/ticker": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-7.3.0.tgz", + "integrity": "sha512-F77FpONHOn5JkZRMHUM8bXLLIG+Czve7zxOqb1Mk57QHLADhcHP88Kj2eYu9E7zJu4Flx51nyTdmVWQgQXW96g==", + "peer": true, + "dependencies": { + "@pixi/extensions": "7.3.0", + "@pixi/settings": "7.3.0", + "@pixi/utils": "7.3.0" + } + }, + "node_modules/@pixi/utils": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-7.3.0.tgz", + "integrity": "sha512-syUi0UuJslUAs3PkZKycliND1Fs0cX3c+s2YyVTiRRRvuM81LvjrG/1AqKFhNaav7oYapBOQBWjgzBGv3wmM/A==", + "peer": true, + "dependencies": { + "@pixi/color": "7.3.0", + "@pixi/constants": "7.3.0", + "@pixi/settings": "7.3.0", + "@types/earcut": "^2.1.0", + "earcut": "^2.2.4", + "eventemitter3": "^4.0.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/utils/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "peer": true + }, + "node_modules/@types/css-font-loading-module": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz", + "integrity": "sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==", + "peer": true + }, + "node_modules/@types/earcut": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz", + "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ==", + "peer": true + }, "node_modules/@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==", - "dev": true + "version": "2019.7.1", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.1.tgz", + "integrity": "sha512-+HSrJgjBW77ALieQdMJvXhRZUIRN1597L+BKvsyeiIlHHERnqjcuOLyodK3auJ3Y3zRezNKtKAhuQWYJfEgFHQ==" }, "node_modules/@types/three": { "version": "0.146.0", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.146.0.tgz", "integrity": "sha512-75AgysUrIvTCB054eQa2pDVFurfeFW8CrMQjpzjt3yHBfuuknoSvvsESd/3EhQxPrz9si3+P0wiDUVsWUlljfA==", + "dev": true, "dependencies": { "@types/webxr": "*" } }, "node_modules/@types/webxr": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.1.tgz", - "integrity": "sha512-xlFXPfgJR5vIuDefhaHuUM9uUgvPaXB6GKdXy2gdEh8gBWQZ2ul24AJz3foUd8NNKlSTQuWYJpCb1/pL81m1KQ==" + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.4.tgz", + "integrity": "sha512-41gfGLTtqXZhcmoDlLDHqMJDuwAMwhHwXf9Q2job3TUBsvkNfPNI/3IWVEtLH4tyY1ElWtfwIaoNeqeEX238/Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", @@ -547,10 +740,16 @@ } }, "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, "node_modules/atob": { "version": "2.1.2", @@ -694,6 +893,19 @@ "node": ">=0.10.0" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -864,6 +1076,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "peer": true + }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -1013,10 +1231,13 @@ } }, "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { "node": ">=0.11" }, @@ -1081,6 +1302,12 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "peer": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1179,9 +1406,10 @@ } }, "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true }, "node_modules/expand-brackets": { "version": "2.1.4", @@ -1401,7 +1629,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, "hasInstallScript": true, "optional": true, @@ -1416,6 +1644,12 @@ "node": ">= 4.0" } }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "peer": true + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1425,6 +1659,21 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -1477,11 +1726,23 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1491,6 +1752,30 @@ "node": ">=8" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -1762,6 +2047,12 @@ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "peer": true + }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -2006,9 +2297,9 @@ "dev": true }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "dev": true, "optional": true }, @@ -2178,6 +2469,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -2263,15 +2563,6 @@ "node": ">=0.10.0" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -2297,12 +2588,12 @@ } }, "node_modules/phaser": { - "version": "3.55.2", - "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.55.2.tgz", - "integrity": "sha512-amKXsbb2Ht29dGPKvt1edq3yGGYKtq8373GpJYGKPNPnneYY6MtVTOgjHDuZwtmUyK4v86FugkT3hzW/N4tjxQ==", + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dev": true, "dependencies": { - "eventemitter3": "^4.0.7", - "path": "^0.12.7" + "eventemitter3": "^5.0.0" } }, "node_modules/posix-character-classes": { @@ -2314,14 +2605,6 @@ "node": ">=0.10.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2337,6 +2620,27 @@ "node": ">=0.8.0" } }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "peer": true + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "peer": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2379,9 +2683,9 @@ "dev": true }, "node_modules/readdirp/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2402,6 +2706,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -2505,9 +2815,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -2655,14 +2965,28 @@ "dev": true }, "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -3004,7 +3328,8 @@ "node_modules/three": { "version": "0.146.0", "resolved": "https://registry.npmjs.org/three/-/three-0.146.0.tgz", - "integrity": "sha512-1lvNfLezN6OJ9NaFAhfX4sm5e9YCzHtaRgZ1+B4C+Hv6TibRMsuBAM5/wVKzxjpYIlMymvgsHEFrrigEfXnb2A==" + "integrity": "sha512-1lvNfLezN6OJ9NaFAhfX4sm5e9YCzHtaRgZ1+B4C+Hv6TibRMsuBAM5/wVKzxjpYIlMymvgsHEFrrigEfXnb2A==", + "dev": true }, "node_modules/through": { "version": "2.3.8", @@ -3029,9 +3354,9 @@ "dev": true }, "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -3136,15 +3461,15 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3264,6 +3589,16 @@ "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "peer": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -3273,25 +3608,12 @@ "node": ">=0.10.0" } }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3385,9 +3707,9 @@ } }, "node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -3413,70 +3735,65 @@ }, "spine-canvas": { "name": "@esotericsoftware/spine-canvas", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-core": "^4.1.26" + "@esotericsoftware/spine-core": "4.1.42" } }, "spine-core": { "name": "@esotericsoftware/spine-core", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE" }, "spine-phaser": { "name": "@esotericsoftware/spine-phaser", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-canvas": "^4.2.10", - "@esotericsoftware/spine-core": "^4.2.10", - "@esotericsoftware/spine-webgl": "^4.2.10", - "phaser": "^3.55.2" + "@esotericsoftware/spine-canvas": "4.1.42", + "@esotericsoftware/spine-core": "4.1.42", + "@esotericsoftware/spine-webgl": "4.1.42" } }, - "spine-phaser/node_modules/@esotericsoftware/spine-canvas": { - "version": "4.2.10", + "spine-pixi": { + "name": "@esotericsoftware/spine-pixi", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-core": "^4.2.10" - } - }, - "spine-phaser/node_modules/@esotericsoftware/spine-core": { - "version": "4.2.10", - "license": "LicenseRef-LICENSE" - }, - "spine-phaser/node_modules/@esotericsoftware/spine-webgl": { - "version": "4.2.10", - "license": "LicenseRef-LICENSE", - "dependencies": { - "@esotericsoftware/spine-core": "^4.2.10" + "@esotericsoftware/spine-core": "4.1.42" + }, + "peerDependencies": { + "@pixi/assets": "^7.2.4", + "@pixi/core": "^7.2.4", + "@pixi/display": "^7.2.4", + "@pixi/graphics": "^7.2.4", + "@pixi/mesh": "^7.2.4", + "@pixi/text": "^7.2.4" } }, "spine-player": { "name": "@esotericsoftware/spine-player", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-webgl": "^4.1.26" + "@esotericsoftware/spine-webgl": "4.1.42" } }, "spine-threejs": { "name": "@esotericsoftware/spine-threejs", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-core": "^4.1.26", - "@types/three": "^0.146.0", - "three": "^0.146.0" + "@esotericsoftware/spine-core": "4.1.42" } }, "spine-webgl": { "name": "@esotericsoftware/spine-webgl", - "version": "4.1.26", + "version": "4.1.42", "license": "LicenseRef-LICENSE", "dependencies": { - "@esotericsoftware/spine-core": "^4.1.26" + "@esotericsoftware/spine-core": "4.1.42" } } } diff --git a/spine-ts/package.json b/spine-ts/package.json index 6489a1a67..43e18eb1d 100644 --- a/spine-ts/package.json +++ b/spine-ts/package.json @@ -1,14 +1,14 @@ { "name": "@esotericsoftware/spine-ts", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "files": [ "README.md" ], "scripts": { "prepublish": "npm run clean && npm run build", - "clean": "npx rimraf spine-core/dist spine-canvas/dist spine-webgl/dist spine-phaser/dist spine-player/dist spine-threejs/dist", - "build": "npm run clean && npm run build:modules && concurrently \"npm run build:core\" \"npm run build:canvas\" \"npm run build:webgl\" \"npm run build:phaser\" \"npm run build:player\" \"npm run build:threejs\"", + "clean": "npx rimraf spine-core/dist spine-canvas/dist spine-webgl/dist spine-phaser/dist spine-player/dist spine-threejs/dist spine-pixi/dist", + "build": "npm run clean && npm run build:modules && concurrently \"npm run build:core\" \"npm run build:canvas\" \"npm run build:webgl\" \"npm run build:phaser\" \"npm run build:player\" \"npm run build:threejs\" \"npm run build:pixi\"", "postbuild": "npm run minify", "build:modules": "npx tsc -b -clean && npx tsc -b", "build:core": "npx esbuild --bundle spine-core/src/index.ts --tsconfig=spine-core/tsconfig.json --sourcemap --outfile=spine-core/dist/iife/spine-core.js --format=iife --global-name=spine", @@ -17,14 +17,16 @@ "build:player": "npx copyfiles -f spine-player/css/spine-player.css spine-player/dist/ && npx npx esbuild --bundle spine-player/src/index.ts --tsconfig=spine-player/tsconfig.json --sourcemap --outfile=spine-player/dist/iife/spine-player.js --format=iife --global-name=spine", "build:phaser": "npx esbuild --bundle spine-phaser/src/index.ts --tsconfig=spine-phaser/tsconfig.json --sourcemap --outfile=spine-phaser/dist/iife/spine-phaser.js --external:Phaser --alias:phaser=Phaser --format=iife --global-name=spine", "build:threejs": "npx esbuild --bundle spine-threejs/src/index.ts --tsconfig=spine-threejs/tsconfig.json --sourcemap --outfile=spine-threejs/dist/iife/spine-threejs.js --external:three --format=iife --global-name=spine", - "minify": "npx esbuild --minify spine-core/dist/iife/spine-core.js --outfile=spine-core/dist/iife/spine-core.min.js && npx esbuild --minify spine-canvas/dist/iife/spine-canvas.js --outfile=spine-canvas/dist/iife/spine-canvas.min.js && npx esbuild --minify spine-player/dist/iife/spine-player.js --outfile=spine-player/dist/iife/spine-player.min.js && npx esbuild --minify spine-phaser/dist/iife/spine-phaser.js --outfile=spine-phaser/dist/iife/spine-phaser.min.js && npx esbuild --minify spine-webgl/dist/iife/spine-webgl.js --outfile=spine-webgl/dist/iife/spine-webgl.min.js && npx esbuild --minify spine-threejs/dist/iife/spine-threejs.js --outfile=spine-threejs/dist/iife/spine-threejs.min.js", - "dev": "concurrently \"npx live-server --no-browser\" \"npm run dev:canvas\" \"npm run dev:webgl\" \"npm run dev:phaser\" \"npm run dev:player\" \"npm run dev:threejs\"", + "build:pixi": "npx esbuild --bundle spine-pixi/src/index.ts --tsconfig=spine-pixi/tsconfig.json --sourcemap --outfile=spine-pixi/dist/iife/spine-pixi.js --external:@pixi/* --format=iife --global-name=spine", + "minify": "npx esbuild --minify spine-core/dist/iife/spine-core.js --outfile=spine-core/dist/iife/spine-core.min.js && npx esbuild --minify spine-canvas/dist/iife/spine-canvas.js --outfile=spine-canvas/dist/iife/spine-canvas.min.js && npx esbuild --minify spine-player/dist/iife/spine-player.js --outfile=spine-player/dist/iife/spine-player.min.js && npx esbuild --minify spine-phaser/dist/iife/spine-phaser.js --outfile=spine-phaser/dist/iife/spine-phaser.min.js && npx esbuild --minify spine-webgl/dist/iife/spine-webgl.js --outfile=spine-webgl/dist/iife/spine-webgl.min.js && npx esbuild --minify spine-threejs/dist/iife/spine-threejs.js --outfile=spine-threejs/dist/iife/spine-threejs.min.js && npx esbuild --minify spine-pixi/dist/iife/spine-pixi.js --outfile=spine-pixi/dist/iife/spine-pixi.min.js", + "dev": "concurrently \"npx live-server\" \"npm run dev:canvas\" \"npm run dev:webgl\" \"npm run dev:phaser\" \"npm run dev:player\" \"npm run dev:threejs\" \"npm run dev:pixi\"", "dev:modules": "npm run build:modules -- --watch", "dev:canvas": "npm run build:canvas -- --watch", "dev:webgl": "npm run build:webgl -- --watch", "dev:phaser": "npm run build:phaser -- --watch", "dev:player": "npm run build:player -- --watch", - "dev:threejs": "npm run build:threejs -- --watch" + "dev:threejs": "npm run build:threejs -- --watch", + "dev:pixi": "npm run build:pixi -- --watch" }, "repository": { "type": "git", @@ -51,6 +53,7 @@ "spine-phaser", "spine-player", "spine-threejs", + "spine-pixi", "spine-webgl" ], "devDependencies": { @@ -60,6 +63,9 @@ "esbuild": "^0.16.4", "live-server": "^1.2.2", "rimraf": "^3.0.2", - "typescript": "^4.9.4" + "typescript": "^4.9.4", + "@types/three": "^0.146.0", + "three": "^0.146.0", + "phaser": "^3.60.0" } } diff --git a/spine-ts/publish.sh b/spine-ts/publish.sh index ccca585eb..338bec373 100755 --- a/spine-ts/publish.sh +++ b/spine-ts/publish.sh @@ -15,11 +15,12 @@ sed -i '' "s/$lastVersion/$newVersion/" package.json sed -i '' "s/$lastVersion/$newVersion/" spine-canvas/package.json sed -i '' "s/$lastVersion/$newVersion/" spine-core/package.json sed -i '' "s/$lastVersion/$newVersion/" spine-phaser/package.json +sed -i '' "s/$lastVersion/$newVersion/" spine-pixi/package.json sed -i '' "s/$lastVersion/$newVersion/" spine-player/package.json sed -i '' "s/$lastVersion/$newVersion/" spine-threejs/package.json sed -i '' "s/$lastVersion/$newVersion/" spine-webgl/package.json rm -rf node_modules -rm package-lock.json +rm -rf package-lock.json npm install npm publish --access public --workspaces \ No newline at end of file diff --git a/spine-ts/spine-canvas/example/index.html b/spine-ts/spine-canvas/example/index.html index eac1ddce3..af596e37a 100644 --- a/spine-ts/spine-canvas/example/index.html +++ b/spine-ts/spine-canvas/example/index.html @@ -21,6 +21,7 @@ canvas = document.getElementById("canvas"); context = canvas.getContext("2d"); skeletonRenderer = new spine.SkeletonRenderer(context); + // skeletonRenderer.triangleRendering = true; // Load the assets. assetManager = new spine.AssetManager("https://esotericsoftware.com/files/examples/4.0/spineboy/export/"); diff --git a/spine-ts/spine-canvas/package.json b/spine-ts/spine-canvas/package.json index 67a8a599e..3b41ec41a 100644 --- a/spine-ts/spine-canvas/package.json +++ b/spine-ts/spine-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-canvas", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -30,6 +30,6 @@ }, "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", "dependencies": { - "@esotericsoftware/spine-core": "^4.1.26" + "@esotericsoftware/spine-core": "4.1.42" } } \ No newline at end of file diff --git a/spine-ts/spine-canvas/src/AssetManager.ts b/spine-ts/spine-canvas/src/AssetManager.ts index b7c42b28b..2f7b6a562 100644 --- a/spine-ts/spine-canvas/src/AssetManager.ts +++ b/spine-ts/spine-canvas/src/AssetManager.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { AssetManagerBase, Downloader } from "@esotericsoftware/spine-core" diff --git a/spine-ts/spine-canvas/src/CanvasTexture.ts b/spine-ts/spine-canvas/src/CanvasTexture.ts index 510c45ccb..a057aa75f 100644 --- a/spine-ts/spine-canvas/src/CanvasTexture.ts +++ b/spine-ts/spine-canvas/src/CanvasTexture.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Texture, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-canvas/src/SkeletonRenderer.ts b/spine-ts/spine-canvas/src/SkeletonRenderer.ts index 55b73bbbd..598873233 100644 --- a/spine-ts/spine-canvas/src/SkeletonRenderer.ts +++ b/spine-ts/spine-canvas/src/SkeletonRenderer.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,11 +23,11 @@ * (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. + * (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. *****************************************************************************/ -import { Utils, Color, Skeleton, RegionAttachment, TextureAtlasRegion, BlendMode, MeshAttachment, Slot } from "@esotericsoftware/spine-core"; +import { Utils, Color, Skeleton, RegionAttachment, BlendMode, MeshAttachment, Slot, TextureRegion, TextureAtlasRegion } from "@esotericsoftware/spine-core"; import { CanvasTexture } from "./CanvasTexture"; const worldVertices = Utils.newFloatArray(8); @@ -68,8 +68,9 @@ export class SkeletonRenderer { let attachment = slot.getAttachment(); if (!(attachment instanceof RegionAttachment)) continue; attachment.computeWorldVertices(slot, worldVertices, 0, 2); - let region: TextureAtlasRegion = attachment.region; - let image: HTMLImageElement = (region.page.texture).getImage() as HTMLImageElement; + let region: TextureRegion = attachment.region; + + let image: HTMLImageElement = (region.texture).getImage() as HTMLImageElement; let slotColor = slot.color; let regionColor = attachment.color; @@ -98,7 +99,7 @@ export class SkeletonRenderer { ctx.translate(-w / 2, -h / 2); ctx.globalAlpha = color.a; - ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h); + ctx.drawImage(image, image.width * region.u, image.height * region.v, w, h, 0, 0, w, h); if (this.debugRendering) ctx.strokeRect(0, 0, w, h); ctx.restore(); } @@ -124,14 +125,12 @@ export class SkeletonRenderer { let regionAttachment = attachment; vertices = this.computeRegionVertices(slot, regionAttachment, false); triangles = SkeletonRenderer.QUAD_TRIANGLES; - region = regionAttachment.region; - texture = (region.page.texture).getImage() as HTMLImageElement; + texture = (regionAttachment.region!.texture).getImage() as HTMLImageElement; } else if (attachment instanceof MeshAttachment) { let mesh = attachment; vertices = this.computeMeshVertices(slot, mesh, false); triangles = mesh.triangles; - let region = (mesh.region!.renderObject); - texture = region.page.texture!.getImage() as HTMLImageElement; + texture = (mesh.region!.texture).getImage() as HTMLImageElement; } else continue; diff --git a/spine-ts/spine-core/package.json b/spine-ts/spine-core/package.json index cf711dbf4..6956245a8 100644 --- a/spine-ts/spine-core/package.json +++ b/spine-ts/spine-core/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-core", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/spine-ts/spine-core/src/Animation.ts b/spine-ts/spine-core/src/Animation.ts index 75d8af09c..ae4eba9fe 100644 --- a/spine-ts/spine-core/src/Animation.ts +++ b/spine-ts/spine-core/src/Animation.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { VertexAttachment, Attachment } from "./attachments/Attachment"; @@ -2242,4 +2242,4 @@ export class SequenceTimeline extends Timeline implements SlotTimeline { } slot.sequenceIndex = index; } -} \ No newline at end of file +} diff --git a/spine-ts/spine-core/src/AnimationState.ts b/spine-ts/spine-core/src/AnimationState.ts index 1435960ee..155cf5654 100644 --- a/spine-ts/spine-core/src/AnimationState.ts +++ b/spine-ts/spine-core/src/AnimationState.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation, MixBlend, AttachmentTimeline, MixDirection, RotateTimeline, DrawOrderTimeline, Timeline, EventTimeline } from "./Animation"; @@ -1192,4 +1192,4 @@ export const HOLD_FIRST = 3; export const HOLD_MIX = 4; export const SETUP = 1; -export const CURRENT = 2; \ No newline at end of file +export const CURRENT = 2; diff --git a/spine-ts/spine-core/src/AnimationStateData.ts b/spine-ts/spine-core/src/AnimationStateData.ts index 41a60b747..aee162a49 100644 --- a/spine-ts/spine-core/src/AnimationStateData.ts +++ b/spine-ts/spine-core/src/AnimationStateData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation } from "./Animation"; diff --git a/spine-ts/spine-core/src/AssetManagerBase.ts b/spine-ts/spine-core/src/AssetManagerBase.ts index 64eeb3aba..651f3f646 100644 --- a/spine-ts/spine-core/src/AssetManagerBase.ts +++ b/spine-ts/spine-core/src/AssetManagerBase.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Texture } from "./Texture"; diff --git a/spine-ts/spine-core/src/AtlasAttachmentLoader.ts b/spine-ts/spine-core/src/AtlasAttachmentLoader.ts index a5a044108..5890ba9aa 100644 --- a/spine-ts/spine-core/src/AtlasAttachmentLoader.ts +++ b/spine-ts/spine-core/src/AtlasAttachmentLoader.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { AttachmentLoader } from "./attachments/AttachmentLoader"; @@ -56,7 +56,6 @@ export class AtlasAttachmentLoader implements AttachmentLoader { let region = this.atlas.findRegion(path); if (region == null) throw new Error("Region not found in atlas: " + path + " (sequence: " + name + ")"); regions[i] = region; - regions[i].renderObject = regions[i]; } } @@ -67,7 +66,6 @@ export class AtlasAttachmentLoader implements AttachmentLoader { } else { let region = this.atlas.findRegion(path); if (!region) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); - region.renderObject = region; attachment.region = region; } return attachment; @@ -80,7 +78,6 @@ export class AtlasAttachmentLoader implements AttachmentLoader { } else { let region = this.atlas.findRegion(path); if (!region) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); - region.renderObject = region; attachment.region = region; } return attachment; diff --git a/spine-ts/spine-core/src/Bone.ts b/spine-ts/spine-core/src/Bone.ts index 05d821b74..ad650bb48 100644 --- a/spine-ts/spine-core/src/Bone.ts +++ b/spine-ts/spine-core/src/Bone.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BoneData, TransformMode } from "./BoneData"; diff --git a/spine-ts/spine-core/src/BoneData.ts b/spine-ts/spine-core/src/BoneData.ts index 0e9fa142f..e2b48aea4 100644 --- a/spine-ts/spine-core/src/BoneData.ts +++ b/spine-ts/spine-core/src/BoneData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Color } from "./Utils"; diff --git a/spine-ts/spine-core/src/ConstraintData.ts b/spine-ts/spine-core/src/ConstraintData.ts index 289a939b2..731dafed7 100644 --- a/spine-ts/spine-core/src/ConstraintData.ts +++ b/spine-ts/spine-core/src/ConstraintData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ /** The base class for all constraint datas. */ diff --git a/spine-ts/spine-core/src/Event.ts b/spine-ts/spine-core/src/Event.ts index 50e59ade9..2c7d5a308 100644 --- a/spine-ts/spine-core/src/Event.ts +++ b/spine-ts/spine-core/src/Event.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { EventData } from "./EventData"; diff --git a/spine-ts/spine-core/src/EventData.ts b/spine-ts/spine-core/src/EventData.ts index 3337468ea..b334fe6c0 100644 --- a/spine-ts/spine-core/src/EventData.ts +++ b/spine-ts/spine-core/src/EventData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ /** Stores the setup pose values for an {@link Event}. diff --git a/spine-ts/spine-core/src/IkConstraint.ts b/spine-ts/spine-core/src/IkConstraint.ts index c17cfe0fe..80458ffa1 100644 --- a/spine-ts/spine-core/src/IkConstraint.ts +++ b/spine-ts/spine-core/src/IkConstraint.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Bone } from "./Bone"; @@ -117,7 +117,7 @@ export class IkConstraint implements Updatable { ty = targetY - bone.worldY; break; case TransformMode.NoRotationOrReflection: - let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + let s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, pa * pa + pc * pc); let sa = pa / bone.skeleton.scaleX; let sc = pc / bone.skeleton.scaleY; pb = -sc * s * bone.skeleton.scaleX; @@ -127,8 +127,13 @@ export class IkConstraint implements Updatable { 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; + if (Math.abs(d) <= 0.0001) { + tx = 0; + ty = 0; + } else { + 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; @@ -194,7 +199,8 @@ export class IkConstraint implements Updatable { 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 id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.abs(id) <= 0.0001 ? 0 : 1 / id; 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) { diff --git a/spine-ts/spine-core/src/IkConstraintData.ts b/spine-ts/spine-core/src/IkConstraintData.ts index 3271750ad..90e1d59c5 100644 --- a/spine-ts/spine-core/src/IkConstraintData.ts +++ b/spine-ts/spine-core/src/IkConstraintData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BoneData } from "./BoneData"; diff --git a/spine-ts/spine-core/src/PathConstraint.ts b/spine-ts/spine-core/src/PathConstraint.ts index 197527c12..765daf279 100644 --- a/spine-ts/spine-core/src/PathConstraint.ts +++ b/spine-ts/spine-core/src/PathConstraint.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { PathAttachment } from "./attachments/PathAttachment"; diff --git a/spine-ts/spine-core/src/PathConstraintData.ts b/spine-ts/spine-core/src/PathConstraintData.ts index b7c63c1a7..7b3c7307d 100644 --- a/spine-ts/spine-core/src/PathConstraintData.ts +++ b/spine-ts/spine-core/src/PathConstraintData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BoneData } from "./BoneData"; diff --git a/spine-ts/spine-core/src/Skeleton.ts b/spine-ts/spine-core/src/Skeleton.ts index 00de9e011..5fd2da112 100644 --- a/spine-ts/spine-core/src/Skeleton.ts +++ b/spine-ts/spine-core/src/Skeleton.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Attachment } from "./attachments/Attachment"; diff --git a/spine-ts/spine-core/src/SkeletonBinary.ts b/spine-ts/spine-core/src/SkeletonBinary.ts index 75ed1f589..1c9d0d54a 100644 --- a/spine-ts/spine-core/src/SkeletonBinary.ts +++ b/spine-ts/spine-core/src/SkeletonBinary.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline, SequenceTimeline } from "./Animation"; diff --git a/spine-ts/spine-core/src/SkeletonBounds.ts b/spine-ts/spine-core/src/SkeletonBounds.ts index 0d387ab74..dc29b41c9 100644 --- a/spine-ts/spine-core/src/SkeletonBounds.ts +++ b/spine-ts/spine-core/src/SkeletonBounds.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment"; diff --git a/spine-ts/spine-core/src/SkeletonClipping.ts b/spine-ts/spine-core/src/SkeletonClipping.ts index 88c94d636..d9022eb2a 100644 --- a/spine-ts/spine-core/src/SkeletonClipping.ts +++ b/spine-ts/spine-core/src/SkeletonClipping.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { ClippingAttachment } from "./attachments/ClippingAttachment"; diff --git a/spine-ts/spine-core/src/SkeletonData.ts b/spine-ts/spine-core/src/SkeletonData.ts index dea832089..19e95b492 100644 --- a/spine-ts/spine-core/src/SkeletonData.ts +++ b/spine-ts/spine-core/src/SkeletonData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation } from "./Animation" diff --git a/spine-ts/spine-core/src/SkeletonJson.ts b/spine-ts/spine-core/src/SkeletonJson.ts index 0a47d3d16..818157679 100644 --- a/spine-ts/spine-core/src/SkeletonJson.ts +++ b/spine-ts/spine-core/src/SkeletonJson.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, AlphaTimeline, RGBA2Timeline, RGB2Timeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline } from "./Animation"; diff --git a/spine-ts/spine-core/src/Skin.ts b/spine-ts/spine-core/src/Skin.ts index 1712a50bf..6457d43a6 100644 --- a/spine-ts/spine-core/src/Skin.ts +++ b/spine-ts/spine-core/src/Skin.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Attachment } from "./attachments/Attachment"; diff --git a/spine-ts/spine-core/src/Slot.ts b/spine-ts/spine-core/src/Slot.ts index aea60cf63..0a354da60 100644 --- a/spine-ts/spine-core/src/Slot.ts +++ b/spine-ts/spine-core/src/Slot.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Attachment, VertexAttachment } from "./attachments/Attachment"; diff --git a/spine-ts/spine-core/src/SlotData.ts b/spine-ts/spine-core/src/SlotData.ts index da088ef5e..bab2d9011 100644 --- a/spine-ts/spine-core/src/SlotData.ts +++ b/spine-ts/spine-core/src/SlotData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BoneData } from "./BoneData"; diff --git a/spine-ts/spine-core/src/Texture.ts b/spine-ts/spine-core/src/Texture.ts index 877b5a6ed..7d57aefd4 100644 --- a/spine-ts/spine-core/src/Texture.ts +++ b/spine-ts/spine-core/src/Texture.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ export abstract class Texture { @@ -60,7 +60,7 @@ export enum TextureWrap { } export class TextureRegion { - renderObject: any; + texture: any; u = 0; v = 0; u2 = 0; v2 = 0; width = 0; height = 0; diff --git a/spine-ts/spine-core/src/TextureAtlas.ts b/spine-ts/spine-core/src/TextureAtlas.ts index 4bcf50c8b..4aaf6ce1c 100644 --- a/spine-ts/spine-core/src/TextureAtlas.ts +++ b/spine-ts/spine-core/src/TextureAtlas.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { AssetManagerBase } from "./AssetManagerBase"; @@ -236,6 +236,7 @@ export class TextureAtlasPage { width: number = 0; height: number = 0; pma: boolean = false; + regions = new Array(); constructor (name: string) { this.name = name; @@ -245,6 +246,8 @@ export class TextureAtlasPage { this.texture = texture; texture.setFilters(this.minFilter, this.magFilter); texture.setWraps(this.uWrap, this.vWrap); + for (let region of this.regions) + region.texture = texture; } } @@ -266,5 +269,6 @@ export class TextureAtlasRegion extends TextureRegion { super(); this.page = page; this.name = name; + page.regions.push(this); } } diff --git a/spine-ts/spine-core/src/TransformConstraint.ts b/spine-ts/spine-core/src/TransformConstraint.ts index b742c9a41..7284a9ac3 100644 --- a/spine-ts/spine-core/src/TransformConstraint.ts +++ b/spine-ts/spine-core/src/TransformConstraint.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Bone } from "./Bone"; diff --git a/spine-ts/spine-core/src/TransformConstraintData.ts b/spine-ts/spine-core/src/TransformConstraintData.ts index d28e45822..af051517a 100644 --- a/spine-ts/spine-core/src/TransformConstraintData.ts +++ b/spine-ts/spine-core/src/TransformConstraintData.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { ConstraintData } from "./ConstraintData"; diff --git a/spine-ts/spine-core/src/Triangulator.ts b/spine-ts/spine-core/src/Triangulator.ts index 49890da61..a391af981 100644 --- a/spine-ts/spine-core/src/Triangulator.ts +++ b/spine-ts/spine-core/src/Triangulator.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { NumberArrayLike, Pool } from "./Utils"; diff --git a/spine-ts/spine-core/src/Updatable.ts b/spine-ts/spine-core/src/Updatable.ts index 618b30ee8..7143c88ae 100644 --- a/spine-ts/spine-core/src/Updatable.ts +++ b/spine-ts/spine-core/src/Updatable.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ /** The interface for items updated by {@link Skeleton#updateWorldTransform()}. */ diff --git a/spine-ts/spine-core/src/Utils.ts b/spine-ts/spine-core/src/Utils.ts index e03902e4b..44e298249 100644 --- a/spine-ts/spine-core/src/Utils.ts +++ b/spine-ts/spine-core/src/Utils.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Skeleton } from "./Skeleton"; diff --git a/spine-ts/spine-core/src/attachments/Attachment.ts b/spine-ts/spine-core/src/attachments/Attachment.ts index c05713416..a46a2baa4 100644 --- a/spine-ts/spine-core/src/attachments/Attachment.ts +++ b/spine-ts/spine-core/src/attachments/Attachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Slot } from "../Slot"; diff --git a/spine-ts/spine-core/src/attachments/AttachmentLoader.ts b/spine-ts/spine-core/src/attachments/AttachmentLoader.ts index b33e704c7..04c73948e 100644 --- a/spine-ts/spine-core/src/attachments/AttachmentLoader.ts +++ b/spine-ts/spine-core/src/attachments/AttachmentLoader.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Skin } from "../Skin"; diff --git a/spine-ts/spine-core/src/attachments/BoundingBoxAttachment.ts b/spine-ts/spine-core/src/attachments/BoundingBoxAttachment.ts index 763ae6e8f..9733d7301 100644 --- a/spine-ts/spine-core/src/attachments/BoundingBoxAttachment.ts +++ b/spine-ts/spine-core/src/attachments/BoundingBoxAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Color } from "../Utils"; diff --git a/spine-ts/spine-core/src/attachments/ClippingAttachment.ts b/spine-ts/spine-core/src/attachments/ClippingAttachment.ts index f60ae0186..00bf68fe3 100644 --- a/spine-ts/spine-core/src/attachments/ClippingAttachment.ts +++ b/spine-ts/spine-core/src/attachments/ClippingAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { SlotData } from "../SlotData"; diff --git a/spine-ts/spine-core/src/attachments/HasTextureRegion.ts b/spine-ts/spine-core/src/attachments/HasTextureRegion.ts index f117db703..05261d885 100644 --- a/spine-ts/spine-core/src/attachments/HasTextureRegion.ts +++ b/spine-ts/spine-core/src/attachments/HasTextureRegion.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { TextureRegion } from "../Texture" @@ -47,4 +47,4 @@ export interface HasTextureRegion { color: Color; sequence: Sequence | null; -} \ No newline at end of file +} diff --git a/spine-ts/spine-core/src/attachments/MeshAttachment.ts b/spine-ts/spine-core/src/attachments/MeshAttachment.ts index e5b84e4c3..2d959e208 100644 --- a/spine-ts/spine-core/src/attachments/MeshAttachment.ts +++ b/spine-ts/spine-core/src/attachments/MeshAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { TextureRegion } from "../Texture"; diff --git a/spine-ts/spine-core/src/attachments/PathAttachment.ts b/spine-ts/spine-core/src/attachments/PathAttachment.ts index 7d4ba31f3..c6bd9875c 100644 --- a/spine-ts/spine-core/src/attachments/PathAttachment.ts +++ b/spine-ts/spine-core/src/attachments/PathAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Color, Utils } from "../Utils"; diff --git a/spine-ts/spine-core/src/attachments/PointAttachment.ts b/spine-ts/spine-core/src/attachments/PointAttachment.ts index 5924582aa..8cd8cf889 100644 --- a/spine-ts/spine-core/src/attachments/PointAttachment.ts +++ b/spine-ts/spine-core/src/attachments/PointAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Bone } from "../Bone"; diff --git a/spine-ts/spine-core/src/attachments/RegionAttachment.ts b/spine-ts/spine-core/src/attachments/RegionAttachment.ts index 6c46306a2..74f1d35d7 100644 --- a/spine-ts/spine-core/src/attachments/RegionAttachment.ts +++ b/spine-ts/spine-core/src/attachments/RegionAttachment.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Bone } from "../Bone"; @@ -65,8 +65,7 @@ export class RegionAttachment extends Attachment implements HasTextureRegion { /** The name of the texture region for this attachment. */ path: string; - - private rendererObject: any = null; + region: TextureRegion | null = null; sequence: Sequence | null = null; @@ -195,8 +194,7 @@ export class RegionAttachment extends Attachment implements HasTextureRegion { copy (): Attachment { let copy = new RegionAttachment(this.name, this.path); - copy.region = this.region; - copy.rendererObject = this.rendererObject; + copy.region = this.region; copy.x = this.x; copy.y = this.y; copy.scaleX = this.scaleX; diff --git a/spine-ts/spine-core/src/attachments/Sequence.ts b/spine-ts/spine-core/src/attachments/Sequence.ts index a63c923ca..555f34780 100644 --- a/spine-ts/spine-core/src/attachments/Sequence.ts +++ b/spine-ts/spine-core/src/attachments/Sequence.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { TextureRegion } from "../Texture"; @@ -99,4 +99,4 @@ export const SequenceModeValues = [ SequenceMode.onceReverse, SequenceMode.loopReverse, SequenceMode.pingpongReverse -]; \ No newline at end of file +]; diff --git a/spine-ts/spine-core/src/polyfills.ts b/spine-ts/spine-core/src/polyfills.ts index 0fec5a15d..aa526f439 100644 --- a/spine-ts/spine-core/src/polyfills.ts +++ b/spine-ts/spine-core/src/polyfills.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ (() => { diff --git a/spine-ts/spine-phaser/example/add-existing.html b/spine-ts/spine-phaser/example/add-existing.html new file mode 100644 index 000000000..5b115d6b9 --- /dev/null +++ b/spine-ts/spine-phaser/example/add-existing.html @@ -0,0 +1,43 @@ + + + + + + + + + + Spine Phaser Example + + + +

Add existing object

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/arcade-physics-example.html b/spine-ts/spine-phaser/example/arcade-physics-example.html new file mode 100644 index 000000000..4187dbfdb --- /dev/null +++ b/spine-ts/spine-phaser/example/arcade-physics-example.html @@ -0,0 +1,61 @@ + + + + + + + + + + Spine Phaser Example + + + +

Arcade Physics example

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/arcade-physics-test.html b/spine-ts/spine-phaser/example/arcade-physics-test.html deleted file mode 100644 index bb585db0f..000000000 --- a/spine-ts/spine-phaser/example/arcade-physics-test.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - Spine Phaser Example - - -

Arcade Physics example

- - - \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/assets/stretchyman-pma.atlas b/spine-ts/spine-phaser/example/assets/stretchyman-pma.atlas index a14dabf35..d8b4a4077 100644 --- a/spine-ts/spine-phaser/example/assets/stretchyman-pma.atlas +++ b/spine-ts/spine-phaser/example/assets/stretchyman-pma.atlas @@ -3,14 +3,17 @@ stretchyman-pma.png filter: Linear, Linear pma: true back-arm - bounds: 149, 45, 72, 202 + bounds: 679, 173, 72, 202 + rotate: 90 back-leg - bounds: 312, 4, 100, 318 + bounds: 2, 2, 100, 318 rotate: 90 body - bounds: 223, 106, 141, 452 + bounds: 2, 104, 141, 452 rotate: 90 front-arm - bounds: 2, 26, 145, 221 + bounds: 456, 100, 145, 221 + rotate: 90 head - bounds: 223, 2, 87, 102 + bounds: 322, 15, 87, 102 + rotate: 90 diff --git a/spine-ts/spine-phaser/example/assets/stretchyman-pma.png b/spine-ts/spine-phaser/example/assets/stretchyman-pma.png index acd0a5ab5..78e8b4503 100644 Binary files a/spine-ts/spine-phaser/example/assets/stretchyman-pma.png and b/spine-ts/spine-phaser/example/assets/stretchyman-pma.png differ diff --git a/spine-ts/spine-phaser/example/assets/stretchyman-pro.skel b/spine-ts/spine-phaser/example/assets/stretchyman-pro.skel index c839c37e9..f1d26fca6 100644 Binary files a/spine-ts/spine-phaser/example/assets/stretchyman-pro.skel and b/spine-ts/spine-phaser/example/assets/stretchyman-pro.skel differ diff --git a/spine-ts/spine-phaser/example/basic-example.html b/spine-ts/spine-phaser/example/basic-example.html index 0e3b7a75c..4a1de398f 100644 --- a/spine-ts/spine-phaser/example/basic-example.html +++ b/spine-ts/spine-phaser/example/basic-example.html @@ -1,44 +1,47 @@ + - + Spine Phaser Example +

Basic example

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/basic-vanilla-js-example.html b/spine-ts/spine-phaser/example/basic-vanilla-js-example.html new file mode 100644 index 000000000..8834eb835 --- /dev/null +++ b/spine-ts/spine-phaser/example/basic-vanilla-js-example.html @@ -0,0 +1,46 @@ + + + + + + + + + + Spine Phaser Example + + + +

Basic example

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/batching-test.html b/spine-ts/spine-phaser/example/batching-test.html index 8626d4cd6..11aff8a09 100644 --- a/spine-ts/spine-phaser/example/batching-test.html +++ b/spine-ts/spine-phaser/example/batching-test.html @@ -1,63 +1,65 @@ + - - + Spine Phaser Example +

Batching test

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/blend-test.html b/spine-ts/spine-phaser/example/blend-test.html index 903b8e950..dc7e97be1 100644 --- a/spine-ts/spine-phaser/example/blend-test.html +++ b/spine-ts/spine-phaser/example/blend-test.html @@ -1,70 +1,72 @@ + - - + Spine Phaser Example +

Blend test

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/bounds-test.html b/spine-ts/spine-phaser/example/bounds-test.html index 9989adab0..2a7eaef6f 100644 --- a/spine-ts/spine-phaser/example/bounds-test.html +++ b/spine-ts/spine-phaser/example/bounds-test.html @@ -1,56 +1,58 @@ + - - + Spine Phaser Example +

Bounds test

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/camera-pipeline-test.html b/spine-ts/spine-phaser/example/camera-pipeline-test.html index c2fc4cb4a..f19d6710e 100644 --- a/spine-ts/spine-phaser/example/camera-pipeline-test.html +++ b/spine-ts/spine-phaser/example/camera-pipeline-test.html @@ -5,15 +5,14 @@ - - + Spine Phaser Example

Camera pipeline test

+ Spine Phaser Example + + + +

Canvas test

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/control-bones-example.html b/spine-ts/spine-phaser/example/control-bones-example.html new file mode 100644 index 000000000..d4772cc27 --- /dev/null +++ b/spine-ts/spine-phaser/example/control-bones-example.html @@ -0,0 +1,72 @@ + + + + + + + + + + Spine Phaser Example + + + +

Control bones

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/control-bones-test.html b/spine-ts/spine-phaser/example/control-bones-test.html deleted file mode 100644 index 2b9682873..000000000 --- a/spine-ts/spine-phaser/example/control-bones-test.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - Spine Phaser Example - - -

Control bones

- - - \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/custom-spine-object-type.html b/spine-ts/spine-phaser/example/custom-spine-object-type.html new file mode 100644 index 000000000..feccee4f8 --- /dev/null +++ b/spine-ts/spine-phaser/example/custom-spine-object-type.html @@ -0,0 +1,49 @@ + + + + + + + + + + Spine Phaser Example + + + +

Custom object factor name

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/depth-test.html b/spine-ts/spine-phaser/example/depth-test.html new file mode 100644 index 000000000..91d18bdf6 --- /dev/null +++ b/spine-ts/spine-phaser/example/depth-test.html @@ -0,0 +1,50 @@ + + + + + + + + + Spine Phaser Example + + + +

Depth test

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/events-example.html b/spine-ts/spine-phaser/example/events-example.html new file mode 100644 index 000000000..5894e3d95 --- /dev/null +++ b/spine-ts/spine-phaser/example/events-example.html @@ -0,0 +1,70 @@ + + + + + + + + + + Spine Phaser Example + + + +

Events example

+
+ + +
+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/extended-class-test.html b/spine-ts/spine-phaser/example/extended-class-test.html new file mode 100644 index 000000000..5f2a30042 --- /dev/null +++ b/spine-ts/spine-phaser/example/extended-class-test.html @@ -0,0 +1,103 @@ + + + + + + + + + + Spine Phaser Example + + + +

Extended class

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/index.html b/spine-ts/spine-phaser/example/index.html deleted file mode 100644 index 99bbf7a67..000000000 --- a/spine-ts/spine-phaser/example/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - Spine Phaser Example - - -

Spine Phaser

- - - \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/mix-and-match-example.html b/spine-ts/spine-phaser/example/mix-and-match-example.html new file mode 100644 index 000000000..35533bcaa --- /dev/null +++ b/spine-ts/spine-phaser/example/mix-and-match-example.html @@ -0,0 +1,60 @@ + + + + + + + + + Spine Phaser Example + + + +

Mix and match

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/multi-scene-test.html b/spine-ts/spine-phaser/example/multi-scene-test.html index 7c1f74c13..c22d2355e 100644 --- a/spine-ts/spine-phaser/example/multi-scene-test.html +++ b/spine-ts/spine-phaser/example/multi-scene-test.html @@ -1,65 +1,68 @@ + - + Spine Phaser Example +

Multi-scene test

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/nyan.png b/spine-ts/spine-phaser/example/nyan.png deleted file mode 100644 index 506cafe21..000000000 Binary files a/spine-ts/spine-phaser/example/nyan.png and /dev/null differ diff --git a/spine-ts/spine-phaser/example/phaser.png b/spine-ts/spine-phaser/example/phaser.png new file mode 100644 index 000000000..c824db910 Binary files /dev/null and b/spine-ts/spine-phaser/example/phaser.png differ diff --git a/spine-ts/spine-phaser/example/render-to-texture-test.html b/spine-ts/spine-phaser/example/render-to-texture-test.html new file mode 100644 index 000000000..3867e0a15 --- /dev/null +++ b/spine-ts/spine-phaser/example/render-to-texture-test.html @@ -0,0 +1,57 @@ + + + + + + + + + Spine Phaser Example + + + +

Render to texture

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/typescript/README.md b/spine-ts/spine-phaser/example/typescript/README.md new file mode 100644 index 000000000..78a50614b --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/README.md @@ -0,0 +1,6 @@ +# spine-phaser TypeScript +Minimal example project using Phaser, spine-phaser, and TypeScript via NPM and [esbuild](https://esbuild.github.io/). + +1. Install dependencies: `npm install` +2. Build bundle: `npm run build` +3. Development (run server and recompile in watch mode): `npm run dev` \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.atlas b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.atlas new file mode 100644 index 000000000..9c8bd8e81 --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.atlas @@ -0,0 +1,102 @@ +spineboy-pma.png + size: 1024, 256 + filter: Linear, Linear + pma: true + scale: 0.5 +crosshair + bounds: 813, 160, 45, 45 +eye-indifferent + bounds: 569, 2, 47, 45 +eye-surprised + bounds: 643, 7, 47, 45 + rotate: 90 +front-bracer + bounds: 811, 51, 29, 40 +front-fist-closed + bounds: 807, 93, 38, 41 +front-fist-open + bounds: 815, 210, 43, 44 +front-foot + bounds: 706, 64, 63, 35 + rotate: 90 +front-shin + bounds: 80, 11, 41, 92 +front-thigh + bounds: 754, 12, 23, 56 +front-upper-arm + bounds: 618, 5, 23, 49 +goggles + bounds: 214, 20, 131, 83 +gun + bounds: 347, 14, 105, 102 + rotate: 90 +head + bounds: 80, 105, 136, 149 +hoverboard-board + bounds: 2, 8, 246, 76 + rotate: 90 +hoverboard-thruster + bounds: 478, 2, 30, 32 +hoverglow-small + bounds: 218, 117, 137, 38 + rotate: 90 +mouth-grind + bounds: 775, 80, 47, 30 + rotate: 90 +mouth-oooo + bounds: 779, 31, 47, 30 + rotate: 90 +mouth-smile + bounds: 783, 207, 47, 30 + rotate: 90 +muzzle-glow + bounds: 779, 4, 25, 25 +muzzle-ring + bounds: 451, 14, 25, 105 +muzzle01 + bounds: 664, 60, 67, 40 + rotate: 90 +muzzle02 + bounds: 580, 56, 68, 42 + rotate: 90 +muzzle03 + bounds: 478, 36, 83, 53 + rotate: 90 +muzzle04 + bounds: 533, 49, 75, 45 + rotate: 90 +muzzle05 + bounds: 624, 56, 68, 38 + rotate: 90 +neck + bounds: 806, 8, 18, 21 +portal-bg + bounds: 258, 121, 133, 133 +portal-flare1 + bounds: 690, 2, 56, 30 + rotate: 90 +portal-flare2 + bounds: 510, 3, 57, 31 +portal-flare3 + bounds: 722, 4, 58, 30 + rotate: 90 +portal-shade + bounds: 393, 121, 133, 133 +portal-streaks1 + bounds: 528, 126, 126, 128 +portal-streaks2 + bounds: 656, 129, 125, 125 +rear-bracer + bounds: 826, 13, 28, 36 +rear-foot + bounds: 743, 70, 57, 30 + rotate: 90 +rear-shin + bounds: 174, 14, 38, 89 +rear-thigh + bounds: 783, 158, 28, 47 +rear-upper-arm + bounds: 783, 136, 20, 44 + rotate: 90 +torso + bounds: 123, 13, 49, 90 diff --git a/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.png b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.png new file mode 100644 index 000000000..1f322d0bd Binary files /dev/null and b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pma.png differ diff --git a/spine-ts/spine-phaser/example/typescript/assets/spineboy-pro.skel b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pro.skel new file mode 100644 index 000000000..c14f30405 Binary files /dev/null and b/spine-ts/spine-phaser/example/typescript/assets/spineboy-pro.skel differ diff --git a/spine-ts/spine-phaser/example/typescript/index.html b/spine-ts/spine-phaser/example/typescript/index.html new file mode 100644 index 000000000..94340f2ec --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/index.html @@ -0,0 +1,13 @@ + + + + + + Page Title + + + + + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/typescript/index.ts b/spine-ts/spine-phaser/example/typescript/index.ts new file mode 100644 index 000000000..eb614e1d4 --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/index.ts @@ -0,0 +1,29 @@ +import * as Phaser from "phaser" +import * as spine from "@esotericsoftware/spine-phaser" + +class SpineDemo extends Phaser.Scene { + preload() { + this.load.spineBinary("spineboy-data", "assets/spineboy-pro.skel"); + this.load.spineAtlas("spineboy-atlas", "assets/spineboy-pma.atlas"); + } + + create() { + const spineboy = this.add.spine(400, 500, 'spineboy-data', "spineboy-atlas"); + spineboy.scale = 0.5; + spineboy.animationState.setAnimation(0, "walk", true); + } +} + +const config = { + width: 800, + height: 600, + type: Phaser.WEBGL, + scene: [SpineDemo], + plugins: { + scene: [ + { key: "spine.SpinePlugin", plugin: spine.SpinePlugin, mapping: "spine" } + ] + } +}; + +new Phaser.Game(config); \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/typescript/package-lock.json b/spine-ts/spine-phaser/example/typescript/package-lock.json new file mode 100644 index 000000000..9850efa46 --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/package-lock.json @@ -0,0 +1,3084 @@ +{ + "name": "name", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "name", + "version": "1.0.0", + "dependencies": { + "@esotericsoftware/spine-phaser": "~4.1.31", + "phaser": "3.60.0" + }, + "devDependencies": { + "concurrently": "^7.6.0", + "esbuild": "0.17.17", + "live-server": "^1.2.2" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.17.tgz", + "integrity": "sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz", + "integrity": "sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.17.tgz", + "integrity": "sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz", + "integrity": "sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz", + "integrity": "sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz", + "integrity": "sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz", + "integrity": "sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz", + "integrity": "sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz", + "integrity": "sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz", + "integrity": "sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz", + "integrity": "sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz", + "integrity": "sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz", + "integrity": "sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz", + "integrity": "sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz", + "integrity": "sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz", + "integrity": "sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz", + "integrity": "sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz", + "integrity": "sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz", + "integrity": "sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz", + "integrity": "sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esotericsoftware/spine-canvas": { + "version": "4.1.31", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-canvas/-/spine-canvas-4.1.31.tgz", + "integrity": "sha512-ll9XWNtLCDjzF3fu2Qh0XhzH8wEUQDKy43i2Hq6v5gI5ThpsI3b5UlabfNGQnI7hfrBvW5Iuf1zo6T4poxw9LQ==", + "dependencies": { + "@esotericsoftware/spine-core": "4.1.31" + } + }, + "node_modules/@esotericsoftware/spine-core": { + "version": "4.1.31", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-core/-/spine-core-4.1.31.tgz", + "integrity": "sha512-Sqd3ID6JpVX1fEa++kcP2ieqXVIMBeEzSabyJKscawyh6+lxz/dbGBQoo6aU//l/vnwnP4ctsOEY0r6OuguLPA==" + }, + "node_modules/@esotericsoftware/spine-phaser": { + "version": "4.1.31", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-phaser/-/spine-phaser-4.1.31.tgz", + "integrity": "sha512-o0AZkalGd5ehmaOfHcmhLhYpK9u4yzGpgj7/77nvjdkwKX+oiwTjahrYLLFuL0LxdMsiIvTZ846/hNmv8k+8zQ==", + "dependencies": { + "@esotericsoftware/spine-canvas": "4.1.31", + "@esotericsoftware/spine-core": "4.1.31", + "@esotericsoftware/spine-webgl": "4.1.31" + } + }, + "node_modules/@esotericsoftware/spine-webgl": { + "version": "4.1.31", + "resolved": "https://registry.npmjs.org/@esotericsoftware/spine-webgl/-/spine-webgl-4.1.31.tgz", + "integrity": "sha512-EVfMScesrlB7qdZSIELIQ+yscTj/FCZPQnZG9pbp8lejuYLnAdsd1WXj6bLdJnpPVOxbPDNXggovprFDCkFHEg==", + "dependencies": { + "@esotericsoftware/spine-core": "4.1.31" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/esbuild": { + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", + "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-auth": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", + "integrity": "sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">=4.6.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/live-server": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.2.tgz", + "integrity": "sha512-t28HXLjITRGoMSrCOv4eZ88viHaBVIjKjdI5PO92Vxlu+twbk6aE0t7dVIaz6ZWkjPilYFV6OSdMYl9ybN2B4w==", + "dev": true, + "dependencies": { + "chokidar": "^2.0.4", + "colors": "1.4.0", + "connect": "^3.6.6", + "cors": "latest", + "event-stream": "3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.9.1", + "object-assign": "latest", + "opn": "latest", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/opn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", + "deprecated": "The package has been renamed to `open`", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/phaser": { + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dependencies": { + "eventemitter3": "^5.0.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/spine-ts/spine-phaser/example/typescript/package.json b/spine-ts/spine-phaser/example/typescript/package.json new file mode 100644 index 000000000..e92943b98 --- /dev/null +++ b/spine-ts/spine-phaser/example/typescript/package.json @@ -0,0 +1,19 @@ +{ + "name": "name", + "description": "description", + "authors": "author", + "version": "1.0.0", + "scripts": { + "build":"npx esbuild index.ts --bundle --sourcemap --outfile=build/index.js", + "dev": "npx concurrently \"npx live-server --no-browser\" \"npm run build -- --watch\"" + }, + "dependencies": { + "@esotericsoftware/spine-phaser": "~4.1.31", + "phaser": "3.60.0" + }, + "devDependencies": { + "esbuild": "0.17.17", + "concurrently": "^7.6.0", + "live-server": "^1.2.2" + } +} \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/visibility-test-container.html b/spine-ts/spine-phaser/example/visibility-test-container.html new file mode 100644 index 000000000..0132f0850 --- /dev/null +++ b/spine-ts/spine-phaser/example/visibility-test-container.html @@ -0,0 +1,66 @@ + + + + + + + + + + Spine Phaser Example + + + +

Visibility Test 2

+ + + + \ No newline at end of file diff --git a/spine-ts/spine-phaser/example/visibility-test.html b/spine-ts/spine-phaser/example/visibility-test.html index 463b3bd3b..9b3eedd9e 100644 --- a/spine-ts/spine-phaser/example/visibility-test.html +++ b/spine-ts/spine-phaser/example/visibility-test.html @@ -1,50 +1,53 @@ + - + Spine Phaser Example +

Basic example

+ \ No newline at end of file diff --git a/spine-ts/spine-phaser/package.json b/spine-ts/spine-phaser/package.json index c1839b86b..1ca0252b2 100644 --- a/spine-ts/spine-phaser/package.json +++ b/spine-ts/spine-phaser/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-phaser", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the Phaser.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -30,9 +30,8 @@ }, "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", "dependencies": { - "@esotericsoftware/spine-core": "^4.2.10", - "@esotericsoftware/spine-webgl": "^4.2.10", - "@esotericsoftware/spine-canvas": "^4.2.10", - "phaser": "^3.55.2" + "@esotericsoftware/spine-core": "4.1.42", + "@esotericsoftware/spine-webgl": "4.1.42", + "@esotericsoftware/spine-canvas": "4.1.42" } } \ No newline at end of file diff --git a/spine-ts/spine-phaser/src/SpineGameObject.ts b/spine-ts/spine-phaser/src/SpineGameObject.ts index d034922b1..c2bd4c787 100644 --- a/spine-ts/spine-phaser/src/SpineGameObject.ts +++ b/spine-ts/spine-phaser/src/SpineGameObject.ts @@ -1,8 +1,53 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + import { SPINE_GAME_OBJECT_TYPE } from "./keys"; import { SpinePlugin } from "./SpinePlugin"; -import { ComputedSizeMixin, DepthMixin, FlipMixin, ScrollFactorMixin, TransformMixin, VisibleMixin } from "./mixins"; -import { AnimationState, AnimationStateData, Bone, MathUtils, Skeleton, Skin, Vector2 } from "@esotericsoftware/spine-core"; -import { Vector3 } from "@esotericsoftware/spine-webgl"; +import { + ComputedSizeMixin, + DepthMixin, + FlipMixin, + ScrollFactorMixin, + TransformMixin, + VisibleMixin, + AlphaMixin, + OriginMixin, +} from "./mixins"; +import { + AnimationState, + AnimationStateData, + Bone, + MathUtils, + Skeleton, + Skin, + Vector2, +} from "@esotericsoftware/spine-core"; class BaseSpineGameObject extends Phaser.GameObjects.GameObject { constructor (scene: Phaser.Scene, type: string) { @@ -10,10 +55,18 @@ class BaseSpineGameObject extends Phaser.GameObjects.GameObject { } } +/** A bounds provider calculates the bounding box for a skeleton, which is then assigned as the size of the SpineGameObject. */ export interface SpineGameObjectBoundsProvider { - calculateBounds (gameObject: SpineGameObject): { x: number, y: number, width: number, height: number }; + // Returns the bounding box for the skeleton, in skeleton space. + calculateBounds (gameObject: SpineGameObject): { + x: number; + y: number; + width: number; + height: number; + }; } +/** A bounds provider that calculates the bounding box from the setup pose. */ export class SetupPoseBoundsProvider implements SpineGameObjectBoundsProvider { calculateBounds (gameObject: SpineGameObject) { if (!gameObject.skeleton) return { x: 0, y: 0, width: 0, height: 0 }; @@ -23,17 +76,35 @@ export class SetupPoseBoundsProvider implements SpineGameObjectBoundsProvider { const skeleton = new Skeleton(gameObject.skeleton.data); skeleton.setToSetupPose(); skeleton.updateWorldTransform(); - return skeleton.getBoundsRect(); + const bounds = skeleton.getBoundsRect(); + return bounds.width == Number.NEGATIVE_INFINITY + ? { x: 0, y: 0, width: 0, height: 0 } + : bounds; } } -export class SkinsAndAnimationBoundsProvider implements SpineGameObjectBoundsProvider { - constructor (private animation: string, private skins: string[] = [], private timeStep: number = 0.05) { +/** A bounds provider that calculates the bounding box by taking the maximumg bounding box for a combination of skins and specific animation. */ +export class SkinsAndAnimationBoundsProvider + implements SpineGameObjectBoundsProvider { + /** + * @param animation The animation to use for calculating the bounds. If null, the setup pose is used. + * @param skins The skins to use for calculating the bounds. If empty, the default skin is used. + * @param timeStep The time step to use for calculating the bounds. A smaller time step means more precision, but slower calculation. + */ + constructor ( + private animation: string | null, + private skins: string[] = [], + private timeStep: number = 0.05 + ) { } - } - - calculateBounds (gameObject: SpineGameObject): { x: number; y: number; width: number; height: number; } { - if (!gameObject.skeleton || !gameObject.animationState) return { x: 0, y: 0, width: 0, height: 0 }; + calculateBounds (gameObject: SpineGameObject): { + x: number; + y: number; + width: number; + height: number; + } { + if (!gameObject.skeleton || !gameObject.animationState) + return { x: 0, y: 0, width: 0, height: 0 }; // Make a copy of animation state and skeleton as this might be called while // the skeleton in the GameObject has already been heavily modified. We can not // reconstruct that state. @@ -51,12 +122,19 @@ export class SkinsAndAnimationBoundsProvider implements SpineGameObjectBoundsPro } skeleton.setToSetupPose(); - const animation = this.animation != null ? data.findAnimation(this.animation!) : null; + const animation = + this.animation != null ? data.findAnimation(this.animation!) : null; if (animation == null) { skeleton.updateWorldTransform(); - return skeleton.getBoundsRect(); + const bounds = skeleton.getBoundsRect(); + return bounds.width == Number.NEGATIVE_INFINITY + ? { x: 0, y: 0, width: 0, height: 0 } + : bounds; } else { - let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + let minX = Number.POSITIVE_INFINITY, + minY = Number.POSITIVE_INFINITY, + maxX = Number.NEGATIVE_INFINITY, + maxY = Number.NEGATIVE_INFINITY; animationState.clearTracks(); animationState.setAnimationWith(0, animation, false); const steps = Math.max(animation.duration / this.timeStep, 1.0); @@ -71,80 +149,84 @@ export class SkinsAndAnimationBoundsProvider implements SpineGameObjectBoundsPro maxX = Math.max(maxX, minX + bounds.width); maxY = Math.max(maxY, minY + bounds.height); } - return { x: minX, y: minY, width: maxX - minX, height: maxY - minY }; + const bounds = { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY, + }; + return bounds.width == Number.NEGATIVE_INFINITY + ? { x: 0, y: 0, width: 0, height: 0 } + : bounds; } } } -export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(ScrollFactorMixin(TransformMixin(VisibleMixin(BaseSpineGameObject)))))) { +/** + * A SpineGameObject is a Phaser {@link GameObject} that can be added to a Phaser Scene and render a Spine skeleton. + * + * The Spine GameObject is a thin wrapper around a Spine {@link Skeleton}, {@link AnimationState} and {@link AnimationStateData}. It is responsible for: + * - updating the animation state + * - applying the animation state to the skeleton's bones, slots, attachments, and draw order. + * - updating the skeleton's bone world transforms + * - rendering the skeleton + * + * See the {@link SpinePlugin} class for more information on how to create a `SpineGameObject`. + * + * The skeleton, animation state, and animation state data can be accessed via the repsective fields. They can be manually updated via {@link updatePose}. + * + * To modify the bone hierarchy before the world transforms are computed, a callback can be set via the {@link beforeUpdateWorldTransforms} field. + * + * To modify the bone hierarchy after the world transforms are computed, a callback can be set via the {@link afterUpdateWorldTransforms} field. + * + * The class also features methods to convert between the skeleton coordinate system and the Phaser coordinate system. + * + * See {@link skeletonToPhaserWorldCoordinates}, {@link phaserWorldCoordinatesToSkeleton}, and {@link phaserWorldCoordinatesToBoneLocal.} + */ +export class SpineGameObject extends DepthMixin( + OriginMixin( + ComputedSizeMixin( + FlipMixin( + ScrollFactorMixin( + TransformMixin(VisibleMixin(AlphaMixin(BaseSpineGameObject))) + ) + ) + ) + ) +) { blendMode = -1; - skeleton: Skeleton | null = null; - animationStateData: AnimationStateData | null = null; - animationState: AnimationState | null = null; + skeleton: Skeleton; + animationStateData: AnimationStateData; + animationState: AnimationState; + beforeUpdateWorldTransforms: (object: SpineGameObject) => void = () => { }; + afterUpdateWorldTransforms: (object: SpineGameObject) => void = () => { }; private premultipliedAlpha = false; - private _displayOriginX = 0; - private _displayOriginY = 0; - private _scaleX = 1; - private _scaleY = 1; - constructor (scene: Phaser.Scene, private plugin: SpinePlugin, x: number, y: number, dataKey: string, atlasKey: string, public boundsProvider: SpineGameObjectBoundsProvider = new SetupPoseBoundsProvider()) { - super(scene, SPINE_GAME_OBJECT_TYPE); - this.setPosition(x, y); x - this.setSkeleton(dataKey, atlasKey); - } + constructor ( + scene: Phaser.Scene, + private plugin: SpinePlugin, + x: number, + y: number, + dataKey: string, + atlasKey: string, + public boundsProvider: SpineGameObjectBoundsProvider = new SetupPoseBoundsProvider() + ) { + super(scene, (window as any).SPINE_GAME_OBJECT_TYPE ? (window as any).SPINE_GAME_OBJECT_TYPE : SPINE_GAME_OBJECT_TYPE); + this.setPosition(x, y); - setSkeleton (dataKey: string, atlasKey: string) { - if (dataKey && atlasKey) { - this.premultipliedAlpha = this.plugin.isAtlasPremultiplied(atlasKey); - this.skeleton = this.plugin.createSkeleton(dataKey, atlasKey); - this.animationStateData = new AnimationStateData(this.skeleton.data); - this.animationState = new AnimationState(this.animationStateData); - this.updateSize(); - } else { - this.skeleton = null; - this.animationStateData = null; - this.animationState = null; - } - } - - public get displayOriginX () { - return this._displayOriginX; - } - - public set displayOriginX (value: number) { - this._displayOriginX = value; - } - - public get displayOriginY () { - return this._displayOriginY; - } - - public set displayOriginY (value: number) { - this._displayOriginY = value; - } - - public get scaleX () { - return this._scaleX; - } - - public set scaleX (value: number) { - this._scaleX = value; - this.updateSize(); - } - - public get scaleY () { - return this._scaleY; - } - - public set scaleY (value: number) { - this._scaleY = value; + this.premultipliedAlpha = this.plugin.isAtlasPremultiplied(atlasKey); + this.skeleton = this.plugin.createSkeleton(dataKey, atlasKey); + this.animationStateData = new AnimationStateData(this.skeleton.data); + this.animationState = new AnimationState(this.animationStateData); + this.skeleton.updateWorldTransform(); this.updateSize(); } updateSize () { if (!this.skeleton) return; let bounds = this.boundsProvider.calculateBounds(this); - // For some reason the TS compiler and the ComputedSize mixin don't work well together... + // For some reason the TS compiler and the ComputedSize mixin don't work well together and we have + // to cast to any. let self = this as any; self.width = bounds.width; self.height = bounds.height; @@ -152,26 +234,39 @@ export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(Scro this.displayOriginY = -bounds.y; } - skeletonToPhaserWorldCoordinates (point: { x: number, y: number }) { + /** Converts a point from the skeleton coordinate system to the Phaser world coordinate system. */ + skeletonToPhaserWorldCoordinates (point: { x: number; y: number }) { let transform = this.getWorldTransformMatrix(); - let a = transform.a, b = transform.b, c = transform.c, d = transform.d, tx = transform.tx, ty = transform.ty; - let x = point.x - let y = point.y + let a = transform.a, + b = transform.b, + c = transform.c, + d = transform.d, + tx = transform.tx, + ty = transform.ty; + let x = point.x; + let y = point.y; point.x = x * a + y * c + tx; point.y = x * b + y * d + ty; } - phaserWorldCoordinatesToSkeleton (point: { x: number, y: number }) { + /** Converts a point from the Phaser world coordinate system to the skeleton coordinate system. */ + phaserWorldCoordinatesToSkeleton (point: { x: number; y: number }) { let transform = this.getWorldTransformMatrix(); transform = transform.invert(); - let a = transform.a, b = transform.b, c = transform.c, d = transform.d, tx = transform.tx, ty = transform.ty; - let x = point.x - let y = point.y + let a = transform.a, + b = transform.b, + c = transform.c, + d = transform.d, + tx = transform.tx, + ty = transform.ty; + let x = point.x; + let y = point.y; point.x = x * a + y * c + tx; point.y = x * b + y * d + ty; } - phaserWorldCoordinatesToBone (point: { x: number, y: number }, bone: Bone) { + /** Converts a point from the Phaser world coordinate system to the bone's local coordinate system. */ + phaserWorldCoordinatesToBone (point: { x: number; y: number }, bone: Bone) { this.phaserWorldCoordinatesToSkeleton(point); if (bone.parent) { bone.parent.worldToLocal(point as Vector2); @@ -180,31 +275,52 @@ export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(Scro } } - preUpdate (time: number, delta: number) { - if (!this.skeleton || !this.animationState) return; - + /** + * Updates the {@link AnimationState}, applies it to the {@link Skeleton}, then updates the world transforms of all bones. + * @param delta The time delta in milliseconds + */ + updatePose (delta: number) { this.animationState.update(delta / 1000); this.animationState.apply(this.skeleton); + this.beforeUpdateWorldTransforms(this); this.skeleton.updateWorldTransform(); + this.afterUpdateWorldTransforms(this); + } + + preUpdate (time: number, delta: number) { + if (!this.skeleton || !this.animationState) return; + this.updatePose(delta); } preDestroy () { - this.skeleton = null; - this.animationState = null; // FIXME tear down any event emitters } willRender (camera: Phaser.Cameras.Scene2D.Camera) { - if (!this.visible) return false; - var GameObjectRenderMask = 0xf; - var result = (!this.skeleton || !(GameObjectRenderMask !== this.renderFlags || (this.cameraFilter !== 0 && (this.cameraFilter & camera.id)))); + var result = !this.skeleton || !(GameObjectRenderMask !== this.renderFlags || (this.cameraFilter !== 0 && this.cameraFilter & camera.id)); + if (!this.visible) result = false; + + if (!result && this.parentContainer && this.plugin.webGLRenderer) { + var sceneRenderer = this.plugin.webGLRenderer; + + if (this.plugin.gl && this.plugin.phaserRenderer instanceof Phaser.Renderer.WebGL.WebGLRenderer && sceneRenderer.batcher.isDrawing) { + sceneRenderer.end(); + this.plugin.phaserRenderer.pipelines.rebind(); + } + } return result; } - renderWebGL (renderer: Phaser.Renderer.WebGL.WebGLRenderer, src: SpineGameObject, camera: Phaser.Cameras.Scene2D.Camera, parentMatrix: Phaser.GameObjects.Components.TransformMatrix) { - if (!this.skeleton || !this.animationState || !this.plugin.webGLRenderer) return; + renderWebGL ( + renderer: Phaser.Renderer.WebGL.WebGLRenderer, + src: SpineGameObject, + camera: Phaser.Cameras.Scene2D.Camera, + parentMatrix: Phaser.GameObjects.Components.TransformMatrix + ) { + if (!this.skeleton || !this.animationState || !this.plugin.webGLRenderer) + return; let sceneRenderer = this.plugin.webGLRenderer; if (renderer.newType) { @@ -213,16 +329,31 @@ export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(Scro } camera.addToRenderList(src); - let transform = Phaser.GameObjects.GetCalcMatrix(src, camera, parentMatrix).calc; - let a = transform.a, b = transform.b, c = transform.c, d = transform.d, tx = transform.tx, ty = transform.ty; - sceneRenderer.drawSkeleton(this.skeleton, this.premultipliedAlpha, -1, -1, (vertices, numVertices, stride) => { - for (let i = 0; i < numVertices; i += stride) { - let vx = vertices[i]; - let vy = vertices[i + 1]; - vertices[i] = vx * a + vy * c + tx; - vertices[i + 1] = vx * b + vy * d + ty; + let transform = Phaser.GameObjects.GetCalcMatrix( + src, + camera, + parentMatrix + ).calc; + let a = transform.a, + b = transform.b, + c = transform.c, + d = transform.d, + tx = transform.tx, + ty = transform.ty; + sceneRenderer.drawSkeleton( + this.skeleton, + this.premultipliedAlpha, + -1, + -1, + (vertices, numVertices, stride) => { + for (let i = 0; i < numVertices; i += stride) { + let vx = vertices[i]; + let vy = vertices[i + 1]; + vertices[i] = vx * a + vy * c + tx; + vertices[i + 1] = vx * b + vy * d + ty; + } } - }); + ); if (!renderer.nextTypeMatch) { sceneRenderer.end(); @@ -230,15 +361,25 @@ export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(Scro } } - renderCanvas (renderer: Phaser.Renderer.Canvas.CanvasRenderer, src: SpineGameObject, camera: Phaser.Cameras.Scene2D.Camera, parentMatrix: Phaser.GameObjects.Components.TransformMatrix) { - if (!this.skeleton || !this.animationState || !this.plugin.canvasRenderer) return; + renderCanvas ( + renderer: Phaser.Renderer.Canvas.CanvasRenderer, + src: SpineGameObject, + camera: Phaser.Cameras.Scene2D.Camera, + parentMatrix: Phaser.GameObjects.Components.TransformMatrix + ) { + if (!this.skeleton || !this.animationState || !this.plugin.canvasRenderer) + return; let context = renderer.currentContext; let skeletonRenderer = this.plugin.canvasRenderer; (skeletonRenderer as any).ctx = context; camera.addToRenderList(src); - let transform = Phaser.GameObjects.GetCalcMatrix(src, camera, parentMatrix).calc; + let transform = Phaser.GameObjects.GetCalcMatrix( + src, + camera, + parentMatrix + ).calc; let skeleton = this.skeleton; skeleton.x = transform.tx; skeleton.y = transform.ty; @@ -252,4 +393,4 @@ export class SpineGameObject extends ComputedSizeMixin(DepthMixin(FlipMixin(Scro skeletonRenderer.draw(skeleton); context.restore(); } -} \ No newline at end of file +} diff --git a/spine-ts/spine-phaser/src/SpinePlugin.ts b/spine-ts/spine-phaser/src/SpinePlugin.ts index e9520d7eb..951bc2021 100644 --- a/spine-ts/spine-phaser/src/SpinePlugin.ts +++ b/spine-ts/spine-phaser/src/SpinePlugin.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,50 +23,77 @@ * (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. + * (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. *****************************************************************************/ import Phaser from "phaser"; -import { SPINE_ATLAS_CACHE_KEY, SPINE_CONTAINER_TYPE, SPINE_GAME_OBJECT_TYPE, SPINE_ATLAS_TEXTURE_CACHE_KEY, SPINE_SKELETON_DATA_FILE_TYPE, SPINE_ATLAS_FILE_TYPE, SPINE_SKELETON_FILE_CACHE_KEY as SPINE_SKELETON_DATA_CACHE_KEY } from "./keys"; -import { AtlasAttachmentLoader, Bone, GLTexture, SceneRenderer, Skeleton, SkeletonBinary, SkeletonData, SkeletonJson, TextureAtlas } from "@esotericsoftware/spine-webgl" +import { SPINE_ATLAS_CACHE_KEY, SPINE_GAME_OBJECT_TYPE, SPINE_SKELETON_DATA_FILE_TYPE, SPINE_ATLAS_FILE_TYPE, SPINE_SKELETON_FILE_CACHE_KEY as SPINE_SKELETON_DATA_CACHE_KEY } from "./keys"; +import { AtlasAttachmentLoader, GLTexture, SceneRenderer, Skeleton, SkeletonBinary, SkeletonData, SkeletonJson, TextureAtlas } from "@esotericsoftware/spine-webgl" import { SpineGameObject, SpineGameObjectBoundsProvider } from "./SpineGameObject"; import { CanvasTexture, SkeletonRenderer } from "@esotericsoftware/spine-canvas"; +/** + * Configuration object used when creating {@link SpineGameObject} instances via a scene's + * {@link GameObjectCreator} (`Scene.make`). + */ +export interface SpineGameObjectConfig extends Phaser.Types.GameObjects.GameObjectConfig { + /** The x-position of the object, optional, default: 0 */ + x?: number, + /** The y-position of the object, optional, default: 0 */ + y?: number, + /** The skeleton data key */ + dataKey: string, + /** The atlas key */ + atlasKey: string + /** The bounds provider, optional, default: `SetupPoseBoundsProvider` */ + boundsProvider?: SpineGameObjectBoundsProvider +} + +/** + * {@link ScenePlugin} implementation adding Spine Runtime capabilities to a scene. + * + * The scene's {@link LoaderPlugin} (`Scene.load`) gets these additional functions: + * * `spineBinary(key: string, url: string, xhrSettings?: XHRSettingsObject)`: loads a skeleton binary `.skel` file from the `url`. + * * `spineJson(key: string, url: string, xhrSettings?: XHRSettingsObject)`: loads a skeleton binary `.skel` file from the `url`. + * * `spineAtlas(key: string, url: string, premultipliedAlpha: boolean = true, xhrSettings?: XHRSettingsObject)`: loads a texture atlas `.atlas` file from the `url` as well as its correponding texture atlas page images. + * + * The scene's {@link GameObjectFactory} (`Scene.add`) gets these additional functions: + * * `spine(x: number, y: number, dataKey: string, atlasKey: string, boundsProvider: SpineGameObjectBoundsProvider = SetupPoseBoundsProvider())`: + * creates a new {@link SpineGameObject} from the data and atlas at position `(x, y)`, using the {@link BoundsProvider} to calculate its bounding box. The object is automatically added to the scene. + * + * The scene's {@link GameObjectCreator} (`Scene.make`) gets these additional functions: + * * `spine(config: SpineGameObjectConfig)`: creates a new {@link SpineGameObject} from the given configuration object. + * + * The plugin has additional public methods to work with Spine Runtime core API objects: + * * `getAtlas(atlasKey: string)`: returns the {@link TextureAtlas} instance for the given atlas key. + * * `getSkeletonData(skeletonDataKey: string)`: returns the {@link SkeletonData} instance for the given skeleton data key. + * * `createSkeleton(skeletonDataKey: string, atlasKey: string, premultipliedAlpha: boolean = true)`: creates a new {@link Skeleton} instance from the given skeleton data and atlas key. + * * `isPremultipliedAlpha(atlasKey: string)`: returns `true` if the atlas with the given key has premultiplied alpha. + */ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { game: Phaser.Game; - isWebGL: boolean; + private isWebGL: boolean; gl: WebGLRenderingContext | null; - textureManager: Phaser.Textures.TextureManager; - phaserRenderer: Phaser.Renderer.Canvas.CanvasRenderer | Phaser.Renderer.WebGL.WebGLRenderer | null; - webGLRenderer: SceneRenderer | null; + static gameWebGLRenderer: SceneRenderer | null = null; + get webGLRenderer (): SceneRenderer | null { + return SpinePlugin.gameWebGLRenderer; + } canvasRenderer: SkeletonRenderer | null; - skeletonDataCache: Phaser.Cache.BaseCache; - atlasCache: Phaser.Cache.BaseCache; + phaserRenderer: Phaser.Renderer.Canvas.CanvasRenderer | Phaser.Renderer.WebGL.WebGLRenderer; + private skeletonDataCache: Phaser.Cache.BaseCache; + private atlasCache: Phaser.Cache.BaseCache; constructor (scene: Phaser.Scene, pluginManager: Phaser.Plugins.PluginManager, pluginKey: string) { super(scene, pluginManager, pluginKey); - var game = this.game = pluginManager.game; + this.game = pluginManager.game; this.isWebGL = this.game.config.renderType === 2; this.gl = this.isWebGL ? (this.game.renderer as Phaser.Renderer.WebGL.WebGLRenderer).gl : null; - this.textureManager = this.game.textures; this.phaserRenderer = this.game.renderer; - this.webGLRenderer = null; this.canvasRenderer = null; this.skeletonDataCache = this.game.cache.addCustom(SPINE_SKELETON_DATA_CACHE_KEY); this.atlasCache = this.game.cache.addCustom(SPINE_ATLAS_CACHE_KEY); - if (!this.phaserRenderer) { - this.phaserRenderer = { - width: game.scale.width, - height: game.scale.height, - preRender: () => { }, - postRender: () => { }, - render: () => { }, - destroy: () => { } - } as unknown as Phaser.Renderer.Canvas.CanvasRenderer; - } - let skeletonJsonFileCallback = function (this: any, key: string, url: string, xhrSettings: Phaser.Types.Loader.XHRSettingsObject) { @@ -76,7 +103,6 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { }; pluginManager.registerFileType("spineJson", skeletonJsonFileCallback, scene); - let skeletonBinaryFileCallback = function (this: any, key: string, url: string, xhrSettings: Phaser.Types.Loader.XHRSettingsObject) { @@ -86,7 +112,6 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { }; pluginManager.registerFileType("spineBinary", skeletonBinaryFileCallback, scene); - let atlasFileCallback = function (this: any, key: string, url: string, premultipliedAlpha: boolean, @@ -99,45 +124,48 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { let self = this; let addSpineGameObject = function (this: Phaser.GameObjects.GameObjectFactory, x: number, y: number, dataKey: string, atlasKey: string, boundsProvider: SpineGameObjectBoundsProvider) { - let gameObject = new SpineGameObject(scene, self, x, y, dataKey, atlasKey, boundsProvider); + let gameObject = new SpineGameObject(this.scene, self, x, y, dataKey, atlasKey, boundsProvider); this.displayList.add(gameObject); this.updateList.add(gameObject); return gameObject; }; - let makeSpineGameObject = function (this: Phaser.GameObjects.GameObjectFactory, config: any, addToScene: boolean) { - let dataKey = config.dataKey ? config.dataKey : null; - let atlasKey = config.atlasKey ? config.atlasKey : null; - let gameObject = new SpineGameObject(this.scene, self, 0, 0, dataKey, atlasKey); + let makeSpineGameObject = function (this: Phaser.GameObjects.GameObjectFactory, config: SpineGameObjectConfig, addToScene: boolean = false) { + let x = config.x ? config.x : 0; + let y = config.y ? config.y : 0; + let boundsProvider = config.boundsProvider ? config.boundsProvider : undefined; + let gameObject = new SpineGameObject(this.scene, self, x, y, config.dataKey, config.atlasKey, boundsProvider); if (addToScene !== undefined) { config.add = addToScene; } - Phaser.GameObjects.BuildGameObject(this.scene, gameObject, config); + return Phaser.GameObjects.BuildGameObject(this.scene, gameObject, config); } - pluginManager.registerGameObject(SPINE_GAME_OBJECT_TYPE, addSpineGameObject, makeSpineGameObject); + pluginManager.registerGameObject((window as any).SPINE_GAME_OBJECT_TYPE ? (window as any).SPINE_GAME_OBJECT_TYPE : SPINE_GAME_OBJECT_TYPE, addSpineGameObject, makeSpineGameObject); } + static rendererId = 0; boot () { Skeleton.yDown = true; if (this.isWebGL) { - if (!this.webGLRenderer) { - this.webGLRenderer = new SceneRenderer((this.phaserRenderer! as Phaser.Renderer.WebGL.WebGLRenderer).canvas, this.gl!, true); + if (!SpinePlugin.gameWebGLRenderer) { + SpinePlugin.gameWebGLRenderer = new SceneRenderer((this.game.renderer! as Phaser.Renderer.WebGL.WebGLRenderer).canvas, this.gl!, true); } + this.onResize(); this.game.scale.on(Phaser.Scale.Events.RESIZE, this.onResize, this); } else { if (!this.canvasRenderer) { - this.canvasRenderer = new SkeletonRenderer(this.scene.sys.context); + this.canvasRenderer = new SkeletonRenderer(this.scene!.sys.context); } } - var eventEmitter = this.systems.events; + var eventEmitter = this.systems!.events; eventEmitter.once('shutdown', this.shutdown, this); eventEmitter.once('destroy', this.destroy, this); this.game.events.once('destroy', this.gameDestroy, this); } onResize () { - var phaserRenderer = this.phaserRenderer; + var phaserRenderer = this.game.renderer; var sceneRenderer = this.webGLRenderer; if (phaserRenderer && sceneRenderer) { @@ -152,7 +180,7 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { } shutdown () { - this.systems.events.off("shutdown", this.shutdown, this); + this.systems!.events.off("shutdown", this.shutdown, this); if (this.isWebGL) { this.game.scale.off(Phaser.Scale.Events.RESIZE, this.onResize, this); } @@ -163,18 +191,12 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { } gameDestroy () { - this.pluginManager.removeGameObject(SPINE_GAME_OBJECT_TYPE, true, true); - this.pluginManager.removeGameObject(SPINE_CONTAINER_TYPE, true, true); + this.pluginManager.removeGameObject((window as any).SPINE_GAME_OBJECT_TYPE ? (window as any).SPINE_GAME_OBJECT_TYPE : SPINE_GAME_OBJECT_TYPE, true, true); if (this.webGLRenderer) this.webGLRenderer.dispose(); } - isAtlasPremultiplied (atlasKey: string) { - let atlasFile = this.game.cache.text.get(atlasKey); - if (!atlasFile) return false; - return atlasFile.premultipliedAlpha; - } - - createSkeleton (dataKey: string, atlasKey: string) { + /** Returns the TextureAtlas instance for the given key */ + getAtlas (atlasKey: string) { let atlas: TextureAtlas; if (this.atlasCache.exists(atlasKey)) { atlas = this.atlasCache.get(atlasKey); @@ -185,19 +207,32 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { let gl = this.gl!; gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); for (let atlasPage of atlas.pages) { - atlasPage.setTexture(new GLTexture(gl, this.textureManager.get(atlasKey + "!" + atlasPage.name).getSourceImage() as HTMLImageElement | ImageBitmap, false)); + atlasPage.setTexture(new GLTexture(gl, this.game.textures.get(atlasKey + "!" + atlasPage.name).getSourceImage() as HTMLImageElement | ImageBitmap, false)); } } else { for (let atlasPage of atlas.pages) { - atlasPage.setTexture(new CanvasTexture(this.textureManager.get(atlasKey + "!" + atlasPage.name).getSourceImage() as HTMLImageElement | ImageBitmap)); + atlasPage.setTexture(new CanvasTexture(this.game.textures.get(atlasKey + "!" + atlasPage.name).getSourceImage() as HTMLImageElement | ImageBitmap)); } } this.atlasCache.add(atlasKey, atlas); } + return atlas; + } + /** Returns whether the TextureAtlas uses premultiplied alpha */ + isAtlasPremultiplied (atlasKey: string) { + let atlasFile = this.game.cache.text.get(atlasKey); + if (!atlasFile) return false; + return atlasFile.premultipliedAlpha; + } + + /** Returns the SkeletonData instance for the given data and atlas key */ + getSkeletonData (dataKey: string, atlasKey: string) { + const atlas = this.getAtlas(atlasKey) + const combinedKey = dataKey + atlasKey; let skeletonData: SkeletonData; - if (this.skeletonDataCache.exists(dataKey)) { - skeletonData = this.skeletonDataCache.get(dataKey); + if (this.skeletonDataCache.exists(combinedKey)) { + skeletonData = this.skeletonDataCache.get(combinedKey); } else { if (this.game.cache.json.exists(dataKey)) { let jsonFile = this.game.cache.json.get(dataKey) as any; @@ -208,20 +243,38 @@ export class SpinePlugin extends Phaser.Plugins.ScenePlugin { let binary = new SkeletonBinary(new AtlasAttachmentLoader(atlas)); skeletonData = binary.readSkeletonData(new Uint8Array(binaryFile)); } - this.skeletonDataCache.add(dataKey, skeletonData); + this.skeletonDataCache.add(combinedKey, skeletonData); } + return skeletonData; + } - return new Skeleton(skeletonData); + /** Creates a new Skeleton instance from the data and atlas. */ + createSkeleton (dataKey: string, atlasKey: string) { + return new Skeleton(this.getSkeletonData(dataKey, atlasKey)); } } -export enum SpineSkeletonDataFileType { +enum SpineSkeletonDataFileType { json, binary } -export class SpineSkeletonDataFile extends Phaser.Loader.MultiFile { - constructor (loader: Phaser.Loader.LoaderPlugin, key: string, url: string, public fileType: SpineSkeletonDataFileType, xhrSettings: Phaser.Types.Loader.XHRSettingsObject) { +interface SpineSkeletonDataFileConfig { + key: string; + url: string; + type: "spineJson" | "spineBinary"; + xhrSettings?: Phaser.Types.Loader.XHRSettingsObject +} + +class SpineSkeletonDataFile extends Phaser.Loader.MultiFile { + constructor (loader: Phaser.Loader.LoaderPlugin, key: string | SpineSkeletonDataFileConfig, url?: string, public fileType?: SpineSkeletonDataFileType, xhrSettings?: Phaser.Types.Loader.XHRSettingsObject) { + if (typeof key !== "string") { + const config = key; + key = config.key; + url = config.url; + fileType = config.type === "spineJson" ? SpineSkeletonDataFileType.json : SpineSkeletonDataFileType.binary; + xhrSettings = config.xhrSettings; + } let file = null; let isJson = fileType == SpineSkeletonDataFileType.json; if (isJson) { @@ -251,8 +304,23 @@ export class SpineSkeletonDataFile extends Phaser.Loader.MultiFile { } } -export class SpineAtlasFile extends Phaser.Loader.MultiFile { - constructor (loader: Phaser.Loader.LoaderPlugin, key: string, url: string, public premultipliedAlpha: boolean = true, xhrSettings: Phaser.Types.Loader.XHRSettingsObject) { +interface SpineAtlasFileConfig { + key: string; + url: string; + premultipliedAlpha?: boolean; + xhrSettings?: Phaser.Types.Loader.XHRSettingsObject; +} + +class SpineAtlasFile extends Phaser.Loader.MultiFile { + constructor (loader: Phaser.Loader.LoaderPlugin, key: string | SpineAtlasFileConfig, url?: string, public premultipliedAlpha: boolean = true, xhrSettings?: Phaser.Types.Loader.XHRSettingsObject) { + if (typeof key !== "string") { + const config = key; + key = config.key; + url = config.url; + premultipliedAlpha = config.premultipliedAlpha ?? true; + xhrSettings = config.xhrSettings; + } + super(loader, SPINE_ATLAS_FILE_TYPE, key, [ new Phaser.Loader.FileTypes.TextFile(loader, { key: key, @@ -268,7 +336,7 @@ export class SpineAtlasFile extends Phaser.Loader.MultiFile { this.pending--; if (file.type == "text") { - var lines = file.data.split('\n'); + var lines = file.data.split(/\r\n|\r|\n/); let textures = []; textures.push(lines[0]); for (var t = 1; t < lines.length; t++) { @@ -305,11 +373,11 @@ export class SpineAtlasFile extends Phaser.Loader.MultiFile { } else { file.data = { data: file.data, - premultipliedAlpha: this.premultipliedAlpha || file.data.indexOf("pma: true") >= 0 + premultipliedAlpha: this.premultipliedAlpha || file.data.indexOf("pma: true") >= 0 || file.data.indexOf("pma:true") >= 0 }; file.addToCache(); } } } } -} \ No newline at end of file +} diff --git a/spine-ts/spine-phaser/src/index.ts b/spine-ts/spine-phaser/src/index.ts index e5d94836e..5ad7c756b 100644 --- a/spine-ts/spine-phaser/src/index.ts +++ b/spine-ts/spine-phaser/src/index.ts @@ -1,8 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated September 24, 2021. Replaces all prior versions. + * + * Copyright (c) 2013-2021, 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. + *****************************************************************************/ + export * from "./require-shim" export * from "./SpinePlugin" export * from "./SpineGameObject" export * from "./mixins" export * from "@esotericsoftware/spine-core"; export * from "@esotericsoftware/spine-webgl"; -import { SpinePlugin } from "./SpinePlugin"; +import { SpineGameObjectConfig, SpinePlugin } from "./SpinePlugin"; (window as any).spine = { SpinePlugin: SpinePlugin }; +(window as any)["spine.SpinePlugin"] = SpinePlugin; + +import { SpineGameObject, SpineGameObjectBoundsProvider } from "./SpineGameObject"; + +declare global { + namespace Phaser.Loader { + export interface LoaderPlugin { + spineJson (key: string, url: string, xhrSettings?: Phaser.Types.Loader.XHRSettingsObject): LoaderPlugin; + spineBinary (key: string, url: string, xhrSettings?: Phaser.Types.Loader.XHRSettingsObject): LoaderPlugin; + spineAtlas (key: string, url: string, premultipliedAlpha?: boolean, xhrSettings?: Phaser.Types.Loader.XHRSettingsObject): LoaderPlugin; + } + } + + namespace Phaser.GameObjects { + export interface GameObjectFactory { + spine (x: number, y: number, dataKey: string, atlasKey: string, boundsProvider?: SpineGameObjectBoundsProvider): SpineGameObject; + } + + export interface GameObjectCreator { + spine (config: SpineGameObjectConfig, addToScene?: boolean): SpineGameObject; + } + } + + namespace Phaser { + export interface Scene { + spine: SpinePlugin; + } + } +} diff --git a/spine-ts/spine-phaser/src/keys.ts b/spine-ts/spine-phaser/src/keys.ts index f13f0dda4..f8d01d223 100644 --- a/spine-ts/spine-phaser/src/keys.ts +++ b/spine-ts/spine-phaser/src/keys.ts @@ -1,8 +1,35 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + export const SPINE_SKELETON_FILE_CACHE_KEY = "esotericsoftware.spine.skeletonFile.cache"; export const SPINE_ATLAS_CACHE_KEY = "esotericsoftware.spine.atlas.cache"; -export const SPINE_ATLAS_TEXTURE_CACHE_KEY = "esotericsoftware.spine.atlas.texture.cache"; export const SPINE_LOADER_TYPE = "spine"; export const SPINE_SKELETON_DATA_FILE_TYPE = "spineSkeletonData"; export const SPINE_ATLAS_FILE_TYPE = "spineAtlasData"; export const SPINE_GAME_OBJECT_TYPE = "spine"; -export const SPINE_CONTAINER_TYPE = "spineContainer"; diff --git a/spine-ts/spine-phaser/src/mixins.ts b/spine-ts/spine-phaser/src/mixins.ts index 63ab0810d..83c2dc0d1 100644 --- a/spine-ts/spine-phaser/src/mixins.ts +++ b/spine-ts/spine-phaser/src/mixins.ts @@ -31,6 +31,8 @@ export const Flip = components.Flip; export const ScrollFactor = components.ScrollFactor; export const Transform = components.Transform; export const Visible = components.Visible; +export const Origin = components.Origin; +export const Alpha = components.Alpha; export interface Type< T, @@ -75,3 +77,8 @@ export const TransformMixin: TransformMixin = createMixin; export const VisibleMixin: VisibleMixin = createMixin(Visible); +type OriginMixin = Mixin; +export const OriginMixin: OriginMixin = createMixin(Origin); + +type AlphaMixin = Mixin; +export const AlphaMixin: AlphaMixin = createMixin(Alpha); \ No newline at end of file diff --git a/spine-ts/spine-phaser/src/require-shim.ts b/spine-ts/spine-phaser/src/require-shim.ts index 62a5dca97..49f6287d7 100644 --- a/spine-ts/spine-phaser/src/require-shim.ts +++ b/spine-ts/spine-phaser/src/require-shim.ts @@ -1,3 +1,32 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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 global { var require: any; } @@ -8,4 +37,4 @@ if (window.Phaser) { else if (x === "Phaser") return window.Phaser; } } -export { } \ No newline at end of file +export { } diff --git a/spine-ts/spine-phaser/tsconfig.json b/spine-ts/spine-phaser/tsconfig.json index 389c26f51..0429be99a 100644 --- a/spine-ts/spine-phaser/tsconfig.json +++ b/spine-ts/spine-phaser/tsconfig.json @@ -20,7 +20,8 @@ "**/*.ts", ], "exclude": [ - "dist/**/*.d.ts" + "dist/**/*.d.ts", + "example/**/*.ts" ], "references": [ { diff --git a/spine-ts/spine-pixi/README.md b/spine-ts/spine-pixi/README.md new file mode 100644 index 000000000..20c760dfb --- /dev/null +++ b/spine-ts/spine-pixi/README.md @@ -0,0 +1,3 @@ +# spine-ts Pixi.js + +Please see the top-level [README.md](../README.md) for more information. \ No newline at end of file diff --git a/spine-ts/spine-pixi/example/assets/coin-pma.atlas b/spine-ts/spine-pixi/example/assets/coin-pma.atlas new file mode 100644 index 000000000..290e1858d --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/coin-pma.atlas @@ -0,0 +1,19 @@ +coin-pma.png + size: 1024, 1024 + filter: Linear, Linear + pma: true +coin-front-logo + bounds: 2, 570, 305, 302 +coin-front-shine-logo + bounds: 2, 286, 282, 282 +coin-front-shine-spineboy + bounds: 305, 283, 282, 282 +coin-front-spineboy + bounds: 309, 567, 305, 302 + rotate: 90 +coin-side-round + bounds: 2, 2, 144, 282 +coin-side-straight + bounds: 286, 286, 17, 282 +shine + bounds: 148, 39, 72, 245 diff --git a/spine-ts/spine-pixi/example/assets/coin-pma.png b/spine-ts/spine-pixi/example/assets/coin-pma.png new file mode 100644 index 000000000..93e97ded9 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/coin-pma.png differ diff --git a/spine-ts/spine-pixi/example/assets/coin-pro.skel b/spine-ts/spine-pixi/example/assets/coin-pro.skel new file mode 100644 index 000000000..eda3d9961 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/coin-pro.skel differ diff --git a/spine-ts/spine-pixi/example/assets/mix-and-match-pma.atlas b/spine-ts/spine-pixi/example/assets/mix-and-match-pma.atlas new file mode 100644 index 000000000..c2eb27f20 --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/mix-and-match-pma.atlas @@ -0,0 +1,363 @@ +mix-and-match-pma.png + size: 1024, 512 + filter: Linear, Linear + pma: true + scale: 0.5 +base-head + bounds: 587, 2, 95, 73 +boy/arm-front + bounds: 558, 271, 36, 115 +boy/backpack + bounds: 235, 109, 119, 153 +boy/backpack-pocket + bounds: 328, 73, 34, 62 + rotate: 90 +boy/backpack-strap-front + bounds: 665, 79, 38, 88 +boy/backpack-up + bounds: 395, 364, 21, 70 + rotate: 90 +boy/body + bounds: 251, 264, 97, 132 + rotate: 90 +boy/boot-ribbon-front + bounds: 648, 131, 9, 11 +boy/collar + bounds: 744, 4, 73, 29 + rotate: 90 +boy/ear + bounds: 383, 109, 19, 23 + rotate: 90 +boy/eye-back-low-eyelid + bounds: 739, 284, 17, 6 + rotate: 90 +boy/eye-back-pupil + bounds: 832, 443, 8, 9 + rotate: 90 +boy/eye-back-up-eyelid + bounds: 558, 264, 23, 5 +boy/eye-back-up-eyelid-back + bounds: 802, 491, 19, 10 + rotate: 90 +boy/eye-front-low-eyelid + bounds: 386, 363, 22, 7 + rotate: 90 +boy/eye-front-pupil + bounds: 816, 389, 9, 9 +boy/eye-front-up-eyelid + bounds: 160, 71, 31, 6 + rotate: 90 +boy/eye-front-up-eyelid-back + bounds: 801, 434, 26, 9 + rotate: 90 +boy/eye-iris-back + bounds: 618, 264, 17, 17 +boy/eye-iris-front + bounds: 727, 264, 18, 18 +boy/eye-white-back + bounds: 580, 131, 20, 12 +boy/eye-white-front + bounds: 510, 130, 27, 13 +boy/eyebrow-back + bounds: 751, 88, 20, 11 + rotate: 90 +boy/eyebrow-front + bounds: 483, 130, 25, 11 +boy/hair-back + bounds: 494, 388, 122, 81 + rotate: 90 +boy/hair-bangs + bounds: 667, 284, 70, 37 +boy/hair-side + bounds: 789, 374, 25, 43 +boy/hand-backfingers + bounds: 467, 364, 19, 21 +boy/hand-front-fingers + bounds: 488, 364, 19, 21 +boy/hat + bounds: 615, 417, 93, 56 + rotate: 90 +boy/leg-front + bounds: 138, 104, 31, 158 +boy/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-blue-cape/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl-spring-dress/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +girl/mouth-close + bounds: 551, 365, 21, 5 + rotate: 90 +boy/mouth-smile + bounds: 705, 79, 29, 7 +boy/nose + bounds: 836, 473, 17, 10 + rotate: 90 +boy/pompom + bounds: 747, 273, 48, 43 + rotate: 90 +boy/zip + bounds: 648, 144, 14, 23 +girl-blue-cape/back-eyebrow + bounds: 602, 131, 18, 12 +girl-blue-cape/body-dress + bounds: 2, 264, 109, 246 +girl-blue-cape/body-ribbon + bounds: 615, 283, 50, 38 +girl-blue-cape/cape-back + bounds: 2, 69, 134, 193 +girl-blue-cape/cape-back-up + bounds: 386, 387, 123, 106 + rotate: 90 +girl-blue-cape/cape-ribbon + bounds: 675, 264, 50, 18 +girl-blue-cape/cape-shoulder-back + bounds: 751, 110, 49, 59 +girl-blue-cape/cape-shoulder-front + bounds: 113, 264, 62, 76 + rotate: 90 +girl-blue-cape/cape-up-front + bounds: 399, 264, 98, 117 + rotate: 90 +girl-blue-cape/ear + bounds: 775, 2, 19, 23 +girl-spring-dress/ear + bounds: 775, 2, 19, 23 +girl/ear + bounds: 775, 2, 19, 23 +girl-blue-cape/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-spring-dress/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl/eye-back-low-eyelid + bounds: 802, 463, 17, 6 +girl-blue-cape/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-spring-dress/eye-back-pupil + bounds: 816, 367, 8, 9 +girl/eye-back-pupil + bounds: 816, 367, 8, 9 +girl-blue-cape/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-spring-dress/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl/eye-back-up-eyelid + bounds: 554, 131, 24, 12 +girl-blue-cape/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-spring-dress/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl/eye-back-up-eyelid-back + bounds: 832, 453, 17, 11 + rotate: 90 +girl-blue-cape/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-spring-dress/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl/eye-front-low-eyelid + bounds: 739, 303, 18, 6 + rotate: 90 +girl-blue-cape/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-spring-dress/eye-front-pupil + bounds: 816, 378, 9, 9 +girl/eye-front-pupil + bounds: 816, 378, 9, 9 +girl-blue-cape/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-spring-dress/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl/eye-front-up-eyelid + bounds: 392, 77, 30, 14 + rotate: 90 +girl-blue-cape/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-spring-dress/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl/eye-front-up-eyelid-back + bounds: 455, 130, 26, 11 +girl-blue-cape/eye-iris-back + bounds: 637, 264, 17, 17 +girl-blue-cape/eye-iris-front + bounds: 802, 471, 18, 18 +girl-blue-cape/eye-white-back + bounds: 596, 264, 20, 16 +girl-spring-dress/eye-white-back + bounds: 596, 264, 20, 16 +girl-blue-cape/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-spring-dress/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl/eye-white-front + bounds: 796, 5, 20, 16 + rotate: 90 +girl-blue-cape/front-eyebrow + bounds: 608, 149, 18, 12 + rotate: 90 +girl-blue-cape/hair-back + bounds: 508, 145, 117, 98 + rotate: 90 +girl-blue-cape/hair-bangs + bounds: 673, 419, 91, 40 + rotate: 90 +girl-blue-cape/hair-head-side-back + bounds: 196, 331, 30, 52 + rotate: 90 +girl-blue-cape/hair-head-side-front + bounds: 738, 323, 41, 42 +girl-blue-cape/hair-side + bounds: 473, 3, 36, 71 +girl-blue-cape/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-spring-dress/hand-front-fingers + bounds: 509, 365, 19, 21 +girl-blue-cape/leg-front + bounds: 168, 72, 30, 158 + rotate: 90 +girl-blue-cape/mouth-smile + bounds: 736, 79, 29, 7 +girl-spring-dress/mouth-smile + bounds: 736, 79, 29, 7 +girl/mouth-smile + bounds: 736, 79, 29, 7 +girl-blue-cape/nose + bounds: 747, 264, 11, 7 +girl-spring-dress/nose + bounds: 747, 264, 11, 7 +girl/nose + bounds: 747, 264, 11, 7 +girl-blue-cape/sleeve-back + bounds: 767, 79, 42, 29 +girl-blue-cape/sleeve-front + bounds: 408, 76, 52, 119 + rotate: 90 +girl-spring-dress/arm-front + bounds: 596, 282, 17, 111 +girl-spring-dress/back-eyebrow + bounds: 801, 420, 18, 12 +girl-spring-dress/body-up + bounds: 179, 4, 64, 66 +girl-spring-dress/cloak-down + bounds: 775, 27, 50, 50 +girl-spring-dress/cloak-up + bounds: 360, 7, 64, 58 + rotate: 90 +girl-spring-dress/eye-iris-back + bounds: 656, 264, 17, 17 +girl-spring-dress/eye-iris-front + bounds: 814, 492, 18, 18 +girl-spring-dress/front-eyebrow + bounds: 822, 472, 18, 12 + rotate: 90 +girl-spring-dress/hair-back + bounds: 196, 363, 147, 93 + rotate: 90 +girl-spring-dress/hair-bangs + bounds: 696, 326, 91, 40 + rotate: 90 +girl-spring-dress/hair-head-side-back + bounds: 529, 76, 30, 52 +girl-spring-dress/hair-head-side-front + bounds: 781, 323, 41, 42 +girl-spring-dress/hair-side + bounds: 511, 3, 36, 71 +girl-spring-dress/leg-front + bounds: 171, 104, 30, 158 +girl-spring-dress/neck + bounds: 138, 70, 20, 32 +girl-spring-dress/shoulder-ribbon + bounds: 622, 131, 36, 24 + rotate: 90 +girl-spring-dress/skirt + bounds: 113, 328, 182, 81 + rotate: 90 +girl-spring-dress/underskirt + bounds: 2, 2, 175, 65 +girl/arm-front + bounds: 577, 395, 36, 115 +girl/back-eyebrow + bounds: 834, 492, 18, 12 + rotate: 90 +girl/bag-base + bounds: 191, 264, 62, 58 + rotate: 90 +girl/bag-strap-front + bounds: 385, 265, 12, 96 +girl/bag-top + bounds: 738, 367, 49, 50 +girl/body + bounds: 356, 130, 97, 132 +girl/boot-ribbon-front + bounds: 539, 130, 13, 13 +girl/eye-iris-back + bounds: 821, 424, 17, 17 +girl/eye-iris-front + bounds: 812, 443, 18, 18 +girl/eye-white-back + bounds: 814, 5, 20, 16 + rotate: 90 +girl/front-eyebrow + bounds: 816, 400, 18, 12 + rotate: 90 +girl/hair-back + bounds: 291, 363, 147, 93 + rotate: 90 +girl/hair-bangs + bounds: 715, 419, 91, 40 + rotate: 90 +girl/hair-flap-down-front + bounds: 288, 5, 70, 65 +girl/hair-head-side-back + bounds: 561, 77, 30, 52 +girl/hair-head-side-front + bounds: 757, 419, 41, 42 + rotate: 90 +girl/hair-patch + bounds: 245, 4, 66, 41 + rotate: 90 +girl/hair-side + bounds: 549, 3, 36, 71 +girl/hair-strand-back-1 + bounds: 684, 3, 58, 74 +girl/hair-strand-back-2 + bounds: 692, 171, 91, 58 + rotate: 90 +girl/hair-strand-back-3 + bounds: 615, 323, 92, 79 + rotate: 90 +girl/hair-strand-front-1 + bounds: 518, 269, 38, 94 +girl/hair-strand-front-2 + bounds: 593, 79, 70, 50 +girl/hair-strand-front-3 + bounds: 705, 88, 44, 81 +girl/hand-front-fingers + bounds: 530, 365, 19, 21 +girl/hat + bounds: 608, 169, 93, 82 + rotate: 90 +girl/leg-front + bounds: 203, 104, 30, 158 +girl/pompom + bounds: 757, 462, 48, 43 + rotate: 90 +girl/scarf + bounds: 455, 143, 119, 51 + rotate: 90 +girl/scarf-back + bounds: 420, 2, 72, 51 + rotate: 90 +girl/zip + bounds: 356, 109, 19, 25 + rotate: 90 diff --git a/spine-ts/spine-pixi/example/assets/mix-and-match-pma.png b/spine-ts/spine-pixi/example/assets/mix-and-match-pma.png new file mode 100644 index 000000000..1c7c748eb Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/mix-and-match-pma.png differ diff --git a/spine-ts/spine-pixi/example/assets/mix-and-match-pro.skel b/spine-ts/spine-pixi/example/assets/mix-and-match-pro.skel new file mode 100644 index 000000000..e57bc08a0 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/mix-and-match-pro.skel differ diff --git a/spine-ts/spine-pixi/example/assets/raptor-pma.atlas b/spine-ts/spine-pixi/example/assets/raptor-pma.atlas new file mode 100644 index 000000000..5b4981c80 --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/raptor-pma.atlas @@ -0,0 +1,101 @@ +raptor-pma.png + size: 1024, 512 + filter: Linear, Linear + pma: true + scale: 0.5 +back-arm + bounds: 829, 88, 46, 25 + rotate: 90 +back-bracer + bounds: 195, 238, 39, 28 + rotate: 90 +back-hand + bounds: 724, 140, 36, 34 + rotate: 90 +back-knee + bounds: 760, 131, 49, 67 + rotate: 90 +back-thigh + bounds: 225, 238, 39, 24 + rotate: 90 +eyes-open + bounds: 975, 204, 47, 45 +front-arm + bounds: 969, 112, 48, 26 +front-bracer + bounds: 724, 97, 41, 29 + rotate: 90 +front-hand + bounds: 251, 239, 41, 38 +front-open-hand + bounds: 856, 76, 43, 44 + rotate: 90 +front-thigh + bounds: 729, 178, 57, 29 + rotate: 90 +gun + bounds: 894, 251, 107, 103 +gun-nohand + bounds: 764, 241, 105, 102 +head + bounds: 756, 345, 136, 149 +lower-leg + bounds: 475, 237, 73, 98 + rotate: 90 +mouth-grind + bounds: 975, 172, 47, 30 +mouth-smile + bounds: 975, 140, 47, 30 +neck + bounds: 366, 282, 18, 21 +raptor-back-arm + bounds: 636, 97, 82, 86 + rotate: 90 +raptor-body + bounds: 2, 2, 632, 233 +raptor-front-arm + bounds: 871, 168, 81, 102 + rotate: 90 +raptor-front-leg + bounds: 2, 237, 191, 257 +raptor-hindleg-back + bounds: 195, 279, 169, 215 +raptor-horn + bounds: 431, 312, 182, 80 + rotate: 90 +raptor-horn-back + bounds: 513, 318, 176, 77 + rotate: 90 +raptor-jaw + bounds: 894, 356, 126, 138 +raptor-jaw-tooth + bounds: 294, 240, 37, 48 + rotate: 90 +raptor-mouth-inside + bounds: 344, 241, 36, 41 + rotate: 90 +raptor-saddle-strap-back + bounds: 575, 242, 54, 74 +raptor-saddle-strap-front + bounds: 764, 182, 57, 95 + rotate: 90 +raptor-saddle-w-shadow + bounds: 592, 323, 162, 171 +raptor-tail-shadow + bounds: 366, 305, 189, 63 + rotate: 90 +raptor-tongue + bounds: 387, 239, 86, 64 +stirrup-back + bounds: 829, 136, 44, 35 + rotate: 90 +stirrup-front + bounds: 866, 121, 45, 50 + rotate: 90 +stirrup-strap + bounds: 918, 120, 49, 46 +torso + bounds: 636, 181, 54, 91 + rotate: 90 +visor + bounds: 631, 237, 131, 84 diff --git a/spine-ts/spine-pixi/example/assets/raptor-pma.png b/spine-ts/spine-pixi/example/assets/raptor-pma.png new file mode 100644 index 000000000..96886a609 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/raptor-pma.png differ diff --git a/spine-ts/spine-pixi/example/assets/raptor-pro.json b/spine-ts/spine-pixi/example/assets/raptor-pro.json new file mode 100644 index 000000000..5439b9138 --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/raptor-pro.json @@ -0,0 +1,9161 @@ +{ +"skeleton": { + "hash": "AAVlM3uJh3s", + "spine": "4.1.17", + "x": -809.16, + "y": -73.54, + "width": 1287.65, + "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, + "transform": "noScale", + "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, + "transform": "noScale", + "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, + "scaleX": 1.0004, + "scaleY": 1.0004, + "transform": "onlyTranslation", + "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.6, + "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" + }, + { "name": "head-control", "parent": "head", "rotation": -95.04, "x": 42.32, "y": -220.33, "color": "219517ff" }, + { "name": "leg-control", "parent": "front-leg1", "rotation": 53.14, "x": 172.97, "y": 4.16, "color": "1d8020ff" } +], +"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": "raptow-jaw-tooth", "bone": "jaw", "attachment": "raptor-jaw-tooth" }, + { "name": "raptor-horn-back", "bone": "horn-back", "attachment": "raptor-horn-back" }, + { "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", + "bendPositive": false + }, + { + "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", + "bendPositive": false + } +], +"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": [ 134, 135, 116, 107, 34, 35, 106, 107, 35, 106, 35, 36, 105, 106, 36, 78, 107, 77, 77, 107, 106, 76, 77, 106, 76, 106, 105, 76, 105, 75, 116, 135, 123, 134, 116, 117, 123, 122, 121, 123, 121, 120, 116, 123, 120, 130, 119, 120, 119, 117, 120, 126, 123, 136, 122, 125, 124, 125, 122, 126, 155, 20, 133, 20, 21, 112, 19, 20, 156, 133, 118, 132, 131, 132, 118, 122, 124, 127, 133, 113, 134, 131, 130, 148, 155, 131, 148, 130, 129, 147, 129, 128, 146, 17, 18, 19, 129, 146, 147, 1, 124, 125, 136, 114, 126, 16, 17, 15, 154, 17, 156, 2, 127, 124, 155, 148, 150, 145, 127, 2, 146, 128, 3, 148, 147, 150, 2, 124, 1, 151, 156, 153, 152, 154, 156, 13, 154, 11, 147, 149, 4, 11, 12, 13, 11, 154, 152, 4, 149, 3, 8, 9, 7, 111, 22, 23, 22, 112, 21, 112, 81, 113, 81, 82, 113, 113, 82, 114, 82, 83, 114, 83, 84, 114, 84, 85, 114, 114, 86, 115, 114, 85, 86, 115, 0, 1, 115, 86, 0, 10, 11, 9, 11, 152, 9, 9, 152, 7, 7, 152, 6, 6, 152, 151, 6, 151, 5, 5, 151, 150, 150, 4, 5, 150, 147, 4, 146, 3, 149, 145, 2, 3, 151, 153, 150, 152, 156, 151, 126, 114, 115, 135, 113, 114, 147, 146, 149, 1, 125, 115, 145, 3, 128, 13, 15, 154, 153, 155, 150, 13, 14, 15, 15, 17, 154, 20, 112, 113, 125, 126, 115, 148, 130, 147, 156, 155, 153, 127, 145, 128, 20, 113, 133, 127, 128, 121, 17, 19, 156, 135, 114, 136, 132, 131, 155, 120, 128, 129, 155, 133, 132, 131, 118, 119, 118, 117, 119, 156, 20, 155, 131, 119, 130, 133, 117, 118, 130, 120, 129, 122, 123, 126, 117, 116, 120, 121, 122, 127, 120, 121, 128, 113, 135, 134, 135, 136, 123, 133, 134, 117, 24, 111, 23, 111, 112, 22, 111, 80, 112, 112, 80, 81, 110, 107, 78, 30, 139, 29, 139, 140, 29, 29, 140, 28, 140, 108, 109, 140, 141, 28, 28, 141, 27, 27, 141, 142, 140, 109, 141, 141, 109, 142, 142, 26, 27, 142, 143, 26, 142, 109, 143, 26, 143, 25, 109, 110, 143, 110, 144, 143, 143, 144, 25, 109, 108, 110, 110, 79, 80, 79, 110, 78, 25, 144, 24, 110, 111, 144, 110, 80, 111, 144, 111, 24, 108, 34, 107, 30, 31, 138, 138, 31, 32, 138, 32, 137, 32, 33, 137, 33, 34, 137, 138, 139, 30, 138, 137, 139, 139, 137, 140, 108, 140, 137, 137, 34, 108, 110, 108, 107, 37, 105, 36, 104, 105, 37, 104, 37, 38, 38, 103, 104, 105, 104, 75, 103, 73, 104, 104, 73, 74, 75, 104, 74, 38, 39, 103, 39, 102, 103, 40, 102, 39, 101, 102, 40, 73, 103, 72, 101, 71, 102, 72, 103, 102, 72, 102, 71, 101, 40, 41, 100, 101, 41, 100, 41, 42, 100, 42, 99, 69, 100, 99, 71, 101, 70, 69, 70, 100, 101, 100, 70, 42, 43, 99, 99, 43, 98, 43, 44, 98, 98, 44, 97, 98, 97, 67, 99, 98, 68, 68, 98, 67, 99, 68, 69, 44, 45, 97, 97, 45, 96, 45, 46, 96, 96, 46, 95, 96, 95, 65, 97, 96, 66, 96, 65, 66, 97, 66, 67, 46, 47, 95, 95, 47, 94, 47, 48, 94, 94, 48, 93, 94, 93, 63, 95, 94, 64, 94, 63, 64, 95, 64, 65, 48, 49, 93, 93, 49, 92, 92, 49, 91, 49, 50, 91, 91, 61, 92, 93, 92, 62, 92, 61, 62, 93, 62, 63, 50, 90, 91, 51, 89, 90, 50, 51, 90, 51, 52, 89, 89, 59, 90, 59, 60, 90, 90, 60, 91, 60, 61, 91, 55, 87, 54, 55, 56, 87, 54, 87, 53, 52, 88, 89, 87, 88, 53, 52, 53, 88, 56, 57, 87, 87, 57, 88, 57, 58, 88, 88, 58, 89, 58, 59, 89 ], + "vertices": [ 2, 8, 142.31, -163.1, 0.91085, 74, -65.79, 94.58, 0.08915, 2, 8, 129.87, -206.92, 0.78514, 74, -21.05, 86.04, 0.21486, 2, 8, 113.94, -247.72, 0.77045, 74, 21, 73.75, 0.22955, 2, 8, 95.41, -280.88, 0.81697, 74, 55.65, 58.2, 0.18303, 2, 8, 76.47, -299.85, 0.92186, 74, 76.21, 41, 0.07814, 2, 8, 50.32, -309.1, 0.93376, 74, 87.72, 15.77, 0.06624, 2, 8, 30.6, -308.34, 0.9245, 74, 88.7, -3.95, 0.0755, 2, 8, 11.66, -304.47, 0.91842, 74, 86.51, -23.15, 0.08158, 2, 8, -21.93, -292.74, 0.98449, 74, 77.77, -57.64, 0.01551, 2, 8, -7.26, -287.07, 0.90726, 74, 70.83, -43.53, 0.09274, 2, 8, -23.63, -271.23, 0.89469, 74, 56.49, -61.23, 0.10531, 2, 8, -5.35, -267.89, 0.87252, 74, 51.57, -43.31, 0.12748, 2, 8, -22.13, -246.63, 0.90956, 74, 31.85, -61.9, 0.09044, 2, 8, 1.79, -243.11, 0.79155, 74, 26.25, -38.38, 0.20845, 2, 8, -5.62, -235.26, 0.80291, 74, 19.09, -46.44, 0.19709, 2, 8, 4.82, -234.16, 0.75452, 74, 17.07, -36.14, 0.24548, 2, 8, -3.61, -220.15, 0.7702, 74, 3.85, -45.77, 0.2298, 2, 8, 9.36, -218.37, 0.69443, 74, 0.94, -33, 0.30557, 2, 8, -6.91, -201.42, 0.7716, 74, -14.51, -50.7, 0.2284, 2, 8, 21.07, -197.82, 0.52991, 74, -20.56, -23.15, 0.47009, 2, 8, 25.72, -185.86, 0.48384, 74, -32.88, -19.56, 0.51616, 3, 8, -2.82, -155.01, 0.49549, 54, 99.81, 14.95, 0.1998, 74, -61.14, -50.76, 0.30472, 3, 8, -34.92, -139.14, 0.52773, 54, 107.98, -19.92, 0.45684, 74, -74.17, -84.14, 0.01543, 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.39257, 61, -55.62, 167.98, 0.26021, 1, -45.7, -168.32, 0.34722, 4, 62, -58.53, 122.52, 0.02965, 2, -92.91, -98.95, 0.15809, 61, 1.54, 109.92, 0.56291, 1, -71.11, -90.91, 0.24934, 5, 63, -87.14, 125.38, 0.01694, 62, -30.38, 104.17, 0.12049, 2, -117.05, -75.56, 0.06243, 61, 32.55, 96.96, 0.67353, 1, -93.12, -65.52, 0.12661, 5, 63, -54.56, 107.85, 0.06533, 62, 5.17, 93.91, 0.35431, 2, -149.99, -58.72, 0.01512, 61, 69.37, 93.3, 0.52081, 1, -124.48, -45.88, 0.04444, 4, 64, -91.18, 96.68, 0.02003, 63, -26.17, 96.68, 0.17282, 62, 35.28, 88.98, 0.56052, 61, 99.87, 93.89, 0.24663, 4, 64, -55.58, 91.31, 0.08871, 63, 9.43, 91.31, 0.37251, 62, 71.21, 91.24, 0.43883, 61, 134.8, 102.61, 0.09995, 5, 65, -80.72, 91.6, 0.01487, 64, -22.44, 85.2, 0.21852, 63, 42.57, 85.2, 0.55905, 62, 104.89, 92.27, 0.18543, 61, 167.74, 109.71, 0.02213, 4, 65, -51.3, 84.41, 0.07099, 64, 7.44, 80.26, 0.46092, 63, 72.45, 80.26, 0.39268, 62, 135.14, 93.74, 0.07541, 4, 65, -22.46, 78.67, 0.2126, 64, 36.63, 76.74, 0.62934, 63, 101.64, 76.74, 0.13917, 62, 164.42, 96.46, 0.01889, 4, 66, -61.72, 72.53, 0.05014, 65, 8.81, 72.53, 0.49668, 64, 68.28, 72.99, 0.41049, 63, 133.29, 72.99, 0.04268, 3, 66, -23.6, 64.7, 0.21233, 65, 46.93, 64.7, 0.64547, 64, 106.89, 68.09, 0.1422, 4, 67, -56.68, 59.57, 0.00497, 66, 11.45, 57.2, 0.56359, 65, 81.98, 57.2, 0.40675, 64, 142.41, 63.26, 0.0247, 4, 68, -88.32, 52.48, 0.00856, 67, -26.06, 50.98, 0.14719, 66, 42.4, 49.87, 0.68541, 65, 112.93, 49.87, 0.15884, 4, 68, -53.99, 42.22, 0.05573, 67, 8.43, 41.3, 0.39231, 66, 77.27, 41.61, 0.51595, 65, 147.8, 41.61, 0.036, 5, 69, -79.08, 32.17, 0.00731, 68, -23.87, 33.95, 0.20888, 67, 38.69, 33.54, 0.55959, 66, 107.81, 35.1, 0.21646, 65, 178.34, 35.1, 0.00775, 5, 69, -49.94, 24.87, 0.05717, 68, 5.1, 25.99, 0.4278, 67, 67.79, 26.07, 0.45737, 66, 137.19, 28.83, 0.05638, 65, 207.72, 28.83, 0.00128, 5, 70, -74, 19.39, 0.00687, 69, -24.91, 18.93, 0.21088, 68, 29.98, 19.49, 0.5528, 67, 92.78, 19.99, 0.22286, 66, 162.41, 23.77, 0.00659, 4, 70, -49.4, 13.39, 0.05569, 69, -0.28, 13.08, 0.44113, 68, 54.48, 13.08, 0.43894, 67, 117.38, 14, 0.06424, 4, 70, -26.39, 8.9, 0.21474, 69, 22.77, 8.73, 0.56103, 68, 77.42, 8.22, 0.21699, 67, 140.4, 9.52, 0.00724, 3, 70, -1, 6.11, 0.49366, 69, 48.17, 6.1, 0.44664, 68, 102.76, 5.01, 0.05971, 3, 70, 21.83, 3.3, 0.77042, 69, 71.02, 3.44, 0.22113, 68, 125.54, 1.84, 0.00845, 2, 70, 45.36, 1.27, 0.92172, 69, 94.56, 1.55, 0.07828, 2, 70, 75.48, -1.02, 0.98437, 69, 124.7, -0.54, 0.01563, 2, 70, 74.41, -10.99, 0.98712, 69, 123.69, -10.52, 0.01288, 2, 70, 47.53, -13.96, 0.9286, 69, 96.83, -13.66, 0.0714, 3, 70, 25.58, -16.62, 0.78026, 69, 74.89, -16.46, 0.21218, 68, 128.96, -18.15, 0.00756, 4, 70, 1.81, -20.07, 0.50456, 69, 51.15, -20.06, 0.43841, 68, 105.14, -21.21, 0.05555, 67, 168.62, -19.43, 0.00148, 4, 70, -21.82, -24.02, 0.2241, 69, 27.54, -24.16, 0.55698, 68, 81.45, -24.77, 0.20577, 67, 144.99, -23.39, 0.01316, 5, 70, -48.25, -27.85, 0.06037, 69, 1.14, -28.15, 0.44261, 68, 54.96, -28.17, 0.41953, 67, 118.56, -27.24, 0.07662, 66, 190.11, -22.36, 8.7E-4, 5, 70, -76.93, -32.01, 0.00843, 69, -27.52, -32.49, 0.21461, 68, 26.21, -31.86, 0.52853, 67, 89.88, -31.41, 0.23794, 66, 161.62, -27.71, 0.01048, 5, 69, -53.61, -36.45, 0.05984, 68, 0.04, -35.22, 0.4064, 67, 63.76, -35.22, 0.46847, 66, 135.68, -32.58, 0.06423, 65, 206.21, -32.58, 0.00106, 5, 69, -86.21, -41.34, 0.00821, 68, -32.66, -39.38, 0.19546, 67, 31.14, -39.93, 0.57299, 66, 103.28, -38.62, 0.21339, 65, 173.81, -38.62, 0.00994, 4, 68, -65.07, -43.5, 0.05047, 67, -1.2, -44.59, 0.45101, 66, 71.16, -44.6, 0.43746, 65, 141.69, -44.6, 0.06106, 4, 68, -97.64, -46.72, 0.00724, 67, -33.71, -48.36, 0.20423, 66, 38.83, -49.7, 0.58773, 65, 109.36, -49.7, 0.2008, 4, 67, -66.72, -52.2, 0.05217, 66, 6, -54.89, 0.45622, 65, 76.53, -54.89, 0.46325, 64, 145.49, -48.91, 0.02835, 3, 66, -30.62, -60.6, 0.17334, 65, 39.91, -60.6, 0.683, 64, 109.41, -57.39, 0.14366, 4, 66, -68.46, -66.77, 0.0295, 65, 2.07, -66.77, 0.50408, 64, 72.15, -66.42, 0.40417, 63, 137.16, -66.42, 0.06225, 4, 65, -34.88, -72.32, 0.18739, 64, 35.73, -74.76, 0.58778, 63, 100.73, -74.76, 0.2056, 62, 195.5, -51.82, 0.01923, 4, 65, -75.09, -77.7, 0.04676, 64, -3.96, -83.19, 0.39617, 63, 61.05, -83.19, 0.48167, 62, 158.49, -68.43, 0.07539, 3, 64, -32.54, -89.19, 0.14427, 63, 32.47, -89.19, 0.63908, 62, 131.82, -80.33, 0.21665, 4, 64, -71.85, -91.35, 0.04785, 63, -6.84, -91.35, 0.40108, 62, 93.85, -90.74, 0.50635, 61, 189.98, -72.27, 0.04472, 3, 63, -45.16, -103.67, 0.17783, 62, 58.99, -110.86, 0.68949, 61, 159.33, -98.37, 0.13269, 4, 63, -88.59, -107.18, 0.06196, 62, 17.28, -123.46, 0.5382, 2, -120.43, 156.97, 0.01597, 61, 120.58, -118.3, 0.38387, 4, 63, -112.39, -91.86, 0.01664, 62, -9.21, -113.51, 0.31712, 2, -96.32, 142.15, 0.06918, 61, 92.73, -113.3, 0.59706, 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, 2, 8, 144.24, -7.82, 0.89352, 74, -220.64, 82.87, 0.10648, 2, 8, 153.81, -49.13, 0.88, 74, -180.33, 96.03, 0.12, 2, 8, 154.57, -106.94, 0.91167, 74, -122.81, 101.86, 0.08833, 2, 70, 46.28, -5.67, 0.88974, 69, 95.52, -5.38, 0.11026, 3, 70, 24, -6.32, 0.78319, 69, 73.25, -6.17, 0.21288, 68, 127.55, -7.82, 0.00393, 3, 70, 0.06, -7.63, 0.4984, 69, 49.31, -7.63, 0.45067, 68, 103.59, -8.74, 0.05093, 4, 70, -25.34, -7.36, 0.21021, 69, 23.92, -7.52, 0.57916, 68, 78.21, -8.06, 0.20281, 67, 141.46, -6.74, 0.00782, 4, 70, -49.23, -8.43, 0.05008, 69, 0.04, -8.74, 0.44936, 68, 54.3, -8.74, 0.44109, 67, 117.57, -7.82, 0.05946, 5, 70, -78.74, -9.59, 0.00411, 69, -29.46, -10.08, 0.20704, 68, 24.78, -9.42, 0.55388, 67, 88.06, -9, 0.22906, 66, 158.89, -5.38, 0.0059, 4, 69, -57, -9.28, 0.05054, 68, -2.74, -7.99, 0.42931, 67, 60.53, -8.04, 0.46828, 66, 131.34, -5.55, 0.05187, 5, 69, -87.47, -7.89, 0.00416, 68, -33.16, -5.91, 0.19066, 67, 30.07, -6.47, 0.59281, 66, 100.84, -5.23, 0.20446, 65, 171.37, -5.23, 0.00791, 4, 68, -64.88, -2.76, 0.04806, 67, -1.7, -3.86, 0.44622, 66, 68.99, -3.93, 0.45724, 65, 139.52, -3.93, 0.04848, 4, 68, -98.1, -2.85, 0.00302, 67, -34.91, -4.51, 0.16897, 66, 35.83, -5.93, 0.6491, 65, 106.36, -5.93, 0.17891, 3, 67, -69.74, -5.58, 0.03488, 66, 1.08, -8.43, 0.4896, 65, 71.61, -8.43, 0.47552, 4, 67, -108.75, -4.75, 0.00424, 66, -37.94, -9.2, 0.16984, 65, 32.59, -9.2, 0.69137, 64, 98.21, -6.7, 0.13455, 2, 65, 0.17, -8.31, 0.52543, 64, 65.82, -8.27, 0.47457, 3, 65, -34.17, -6.83, 0.18477, 64, 31.46, -9.41, 0.62696, 63, 96.47, -9.41, 0.18827, 4, 65, -66.3, -4.22, 0.01263, 64, -0.78, -9.24, 0.46677, 63, 64.23, -9.24, 0.48853, 62, 146, 4.52, 0.03206, 3, 64, -35.25, -8.87, 0.22735, 63, 29.76, -8.87, 0.65577, 62, 112.23, -2.39, 0.11689, 4, 64, -69.22, -8.55, 0.02776, 63, -4.21, -8.55, 0.41215, 62, 78.95, -9.25, 0.52977, 61, 160.59, 5.18, 0.03032, 3, 63, -46.14, -2.26, 0.12876, 62, 36.63, -11.94, 0.70822, 61, 119.45, -5.12, 0.16302, 3, 63, -84, 7.67, 0.04548, 62, -2.46, -10.23, 0.46291, 61, 80.69, -10.51, 0.4916, 4, 62, -40.04, -2.56, 0.20066, 2, -87.22, 27.36, 0.04102, 61, 42.35, -9.75, 0.69947, 1, -54.47, 34.43, 0.05884, 4, 62, -84, 4.08, 0.06346, 2, -45.32, 12.47, 0.1335, 61, -2.09, -11.18, 0.66178, 1, -14.03, 15.96, 0.14126, 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, 4, 6, 151.36, -15.54, 0.1938, 7, 12.13, -31.86, 0.65264, 54, 35.04, -116.47, 0.10585, 74, -188.88, -122.43, 0.0477, 4, 7, 70.75, -31.76, 0.42196, 8, -5.28, -31.36, 0.19392, 54, 5.95, -65.58, 0.22877, 74, -184.09, -64, 0.15534, 3, 8, 47.28, -25.92, 0.60156, 54, -31.67, -28.46, 0.26709, 74, -194.09, -12.11, 0.13136, 3, 8, 110.31, -65.62, 0.66779, 54, -41.11, 45.43, 0.13197, 74, -160.06, 54.14, 0.20024, 2, 8, 120.51, -143.55, 0.72576, 74, -83.35, 71.14, 0.27424, 2, 8, 76.35, -191.51, 0.55039, 74, -31.7, 31.36, 0.44961, 2, 8, 63.06, -197.7, 0.57574, 74, -24.37, 18.67, 0.42426, 2, 8, 56.42, -210.42, 0.59162, 74, -11.11, 13.17, 0.40838, 2, 8, 62.27, -225.94, 0.54866, 74, 3.83, 20.37, 0.45134, 2, 8, 74.99, -231.02, 0.55882, 74, 7.78, 33.48, 0.44118, 2, 8, 90.83, -221.52, 0.5372, 74, -3.08, 48.42, 0.4628, 2, 8, 93.3, -206.31, 0.54037, 74, -18.44, 49.55, 0.45963, 2, 8, 86.63, -193.69, 0.56061, 74, -30.43, 41.8, 0.43939, 2, 8, 110.32, -205.97, 0.55507, 74, -20.28, 66.47, 0.44493, 2, 8, 111.33, -183.27, 0.52695, 74, -42.98, 65.49, 0.47305, 2, 8, 111.53, -160.07, 0.56797, 74, -66.1, 63.65, 0.43203, 2, 8, 102.49, -224.1, 0.57026, 74, -1.52, 60.27, 0.42974, 2, 8, 83.06, -235.84, 0.54683, 74, 11.87, 41.94, 0.45317, 2, 8, 75.02, -238.67, 0.5345, 74, 15.4, 34.18, 0.4655, 2, 8, 64.95, -240.47, 0.52774, 74, 18.07, 24.31, 0.47226, 2, 8, 59.74, -238.59, 0.52019, 74, 16.66, 18.96, 0.47981, 2, 8, 49.93, -213.38, 0.51178, 74, -7.59, 6.97, 0.48822, 2, 8, 46.45, -191.85, 0.53448, 74, -28.74, 1.61, 0.46552, 2, 8, 63.13, -172.79, 0.45609, 74, -49.18, 16.56, 0.54391, 2, 8, 76.73, -169.46, 0.47244, 74, -53.69, 29.81, 0.52756, 2, 8, 98.86, -157.68, 0.53514, 74, -67.37, 50.82, 0.46486, 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, 4, 6, 127.4, -71.89, 0.69313, 7, -43.11, -58.31, 0.19154, 54, 85.35, -151.38, 0.10631, 74, -167.16, -179.69, 0.00902, 2, 8, 104.61, -244.7, 0.66844, 74, 18.8, 64.19, 0.33156, 2, 8, 81.39, -264.16, 0.67294, 74, 40.23, 42.76, 0.32706, 2, 8, 66.82, -266.01, 0.65456, 74, 43.35, 28.41, 0.34544, 2, 8, 58.66, -259.02, 0.64393, 74, 37.11, 19.68, 0.35607, 2, 8, 78.9, -281.43, 0.75776, 74, 57.66, 41.81, 0.24224, 2, 8, 53.83, -287.14, 0.77384, 74, 65.54, 17.33, 0.22616, 2, 8, 33.86, -287.57, 0.80091, 74, 67.72, -2.53, 0.19909, 2, 8, 9.92, -286.55, 0.89717, 74, 68.81, -26.47, 0.10283, 2, 8, 36.24, -266.75, 0.70023, 74, 46.78, -1.99, 0.29977, 2, 8, 7.82, -257.69, 0.78734, 74, 40.25, -31.09, 0.21266, 2, 8, 41.56, -240.46, 0.5741, 74, 20.12, 1.01, 0.4259, 2, 8, 22.36, -235.22, 0.62581, 74, 16.58, -18.58, 0.37419 ], + "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": [ 14, 12, 13, 14, 11, 12, 14, 15, 11, 11, 15, 10, 55, 44, 47, 44, 45, 47, 10, 15, 45, 15, 47, 45, 55, 46, 44, 44, 46, 45, 45, 46, 10, 46, 9, 10, 48, 9, 46, 48, 8, 9, 16, 17, 15, 17, 47, 15, 18, 55, 17, 17, 55, 47, 19, 48, 18, 18, 48, 55, 20, 43, 19, 19, 43, 48, 48, 46, 55, 48, 43, 8, 21, 42, 20, 20, 42, 43, 21, 41, 42, 21, 22, 41, 43, 7, 8, 43, 42, 7, 42, 6, 7, 42, 41, 6, 23, 24, 22, 22, 24, 41, 41, 40, 6, 41, 24, 40, 6, 40, 5, 5, 39, 4, 5, 40, 39, 39, 26, 54, 39, 40, 26, 24, 25, 40, 40, 25, 26, 39, 38, 4, 4, 38, 3, 39, 50, 38, 39, 54, 50, 38, 37, 3, 3, 37, 2, 26, 27, 54, 54, 27, 50, 50, 51, 38, 38, 51, 37, 27, 28, 50, 50, 28, 51, 56, 57, 49, 32, 33, 57, 57, 58, 49, 57, 33, 58, 49, 58, 59, 59, 58, 34, 34, 58, 33, 59, 34, 0, 32, 57, 56, 37, 1, 2, 51, 36, 37, 37, 36, 1, 28, 52, 51, 51, 52, 36, 28, 29, 52, 29, 53, 52, 29, 30, 53, 36, 52, 35, 52, 53, 35, 36, 0, 1, 36, 35, 0, 31, 56, 30, 30, 56, 53, 53, 56, 35, 31, 32, 56, 56, 49, 35, 35, 59, 0, 49, 59, 35 ], + "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, 3, 42, 165.75, -94.49, 0.3178, 43, 105.59, -71.26, 0.67648, 75, -80.8, -39.34, 0.00571, 3, 42, 166.4, -79.07, 0.45961, 43, 90.23, -72.77, 0.53468, 75, -67.92, -34.74, 0.00571, 3, 42, 166.49, -74.17, 0.53171, 43, 85.43, -73.29, 0.45686, 75, -64.13, -33.63, 0.01143, 3, 42, 141.54, -82.47, 0.7272, 43, 97.13, -96.82, 0.26709, 75, -86.02, -21.18, 0.00571, 3, 42, 99.76, -97.08, 0.84471, 43, 117.34, -136.23, 0.14529, 75, -123.07, 1.78, 0.01, 2, 42, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16385, 2, 42, -16.21, -74.77, 0.53, 1, -42.95, -58.39, 0.47, 1, 1, -52.66, 17.56, 1, 1, 1, 70.07, 18.78, 1, 2, 42, 93.55, 4.14, 0.84985, 75, -47.66, 63.53, 0.15015, 3, 42, 185.14, -6.67, 0.69958, 43, 15.99, -64.28, 0.22749, 75, 0.73, -14.59, 0.07292, 3, 42, 217.11, -18.75, 0.50337, 43, 23.47, -30.93, 0.48663, 75, 9.65, -46.32, 0.01, 2, 42, 225.64, -32.92, 0.32528, 43, 36.31, -20.51, 0.67472, 3, 42, 223, -84.74, 0.2007, 43, 87.97, -15.86, 0.79322, 75, -43.91, -82.01, 0.00607, 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, 3, 42, -9.28, -17.51, 0.21934, 1, 7.72, -30.86, 0.74243, 75, -126.22, 130.87, 0.03823, 3, 42, 195.91, -53.82, 0.42127, 43, 61.12, -47.06, 0.57302, 75, -30.92, -46.02, 0.00571, 3, 42, 190.1, -48.45, 0.52927, 43, 56.62, -53.56, 0.46502, 75, -29.84, -39.6, 0.00571, 3, 42, 161.27, -48.26, 0.74345, 43, 60.44, -82.13, 0.18733, 75, -47.3, -19.14, 0.06922, 3, 42, 120.38, -58.54, 0.78619, 43, 76.31, -121.19, 0.13381, 75, -79.81, 7.32, 0.08, 3, 42, 197.37, -69.23, 0.33416, 43, 76.18, -43.47, 0.66185, 75, -43.15, -54, 0.00398, 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, 3, 42, 49.5, -83.17, 0.65468, 1, -17.26, -114.16, 0.26246, 75, -142.18, 45.76, 0.08286, 3, 42, -9.83, -51.31, 0.41164, 1, -21.43, -46.95, 0.57122, 75, -153.07, 111.17, 0.01714, 2, 42, -31.44, -20.43, 0.27617, 1, -6.57, -12.31, 0.72383, 3, 42, 0.92, 47.46, 0.40628, 1, 68.18, -4.06, 0.57468, 75, -69.72, 165.13, 0.01904 ], + "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": { + "type": "mesh", + "uvs": [ 0.23202, 0, 0.36456, 0.3051, 0.37967, 0.28578, 0.42983, 0.41504, 0.48255, 0.4592, 0.49181, 0.37558, 0.54262, 0.43364, 0.62744, 0.22373, 0.72685, 0.20157, 0.71155, 0.10296, 0.7437, 0.12629, 0.87154, 0.32694, 0.92655, 0.58847, 0.95146, 0.58291, 1, 0.79797, 0.99855, 0.91608, 0.95668, 0.9066, 0.89548, 0.84052, 0.85745, 0.71568, 0.81176, 0.71081, 0.79146, 0.64162, 0.7146, 0.66948, 0.70308, 0.72109, 0.66405, 0.91955, 0.57139, 1, 0.51265, 1, 0.40749, 0.94178, 0.34499, 0.80186, 0.24959, 0.49467, 0.23945, 0.4213, 0.15768, 0.37748, 0.10301, 0.43856, 0.0716, 0.54182, 0.0635, 0.72333, 0.0968, 0.78581, 0.19705, 0.70312, 0.20849, 0.70702, 0.13611, 0.87184, 0.0794, 0.95675, 0.03745, 0.92784, 0, 0.72707, 0, 0.49239, 0.01821, 0.37577, 0.08924, 0.16005, 0.2217, 0.08591, 0.21231, 0.02037, 0.21551, 0, 0.93395, 0.7495, 0.84078, 0.47214, 0.76078, 0.46484, 0.71616, 0.58482, 0.55373, 0.75879, 0.45392, 0.65487, 0.35185, 0.54621 ], + "triangles": [ 17, 18, 47, 0, 45, 46, 44, 45, 0, 8, 9, 10, 1, 44, 0, 8, 10, 11, 30, 43, 44, 29, 30, 44, 31, 42, 43, 1, 29, 44, 30, 31, 43, 4, 5, 6, 49, 8, 11, 48, 49, 11, 28, 29, 1, 32, 42, 31, 41, 42, 32, 53, 28, 1, 12, 48, 11, 49, 50, 7, 49, 7, 8, 6, 7, 50, 20, 49, 48, 50, 49, 20, 52, 3, 4, 6, 50, 51, 21, 50, 20, 18, 19, 20, 48, 18, 20, 48, 47, 18, 21, 22, 50, 32, 40, 41, 33, 40, 32, 47, 48, 12, 22, 51, 50, 4, 6, 51, 52, 4, 51, 47, 13, 14, 53, 27, 28, 1, 2, 3, 53, 1, 3, 37, 34, 35, 37, 35, 36, 16, 47, 14, 17, 47, 16, 23, 51, 22, 39, 40, 33, 39, 33, 34, 38, 39, 34, 53, 52, 27, 52, 53, 3, 25, 26, 52, 26, 27, 52, 37, 38, 34, 51, 25, 52, 24, 25, 51, 23, 24, 51, 47, 12, 13, 15, 16, 14 ], + "vertices": [ 1, 34, 281.61, 81.74, 1, 1, 34, 213.35, 84.72, 1, 1, 34, 211.41, 78.74, 1, 2, 34, 184.08, 81.47, 0.99749, 74, -201.91, 110.55, 0.00251, 1, 34, 165.27, 73.64, 1, 1, 34, 171.82, 61.6, 1, 2, 34, 152.01, 55.86, 0.99978, 74, -160.92, 112.71, 2.2E-4, 2, 34, 152.05, 10.45, 0.99, 74, -134.51, 149.65, 0.01, 2, 34, 127.93, -16.63, 0.98888, 74, -99.14, 157.63, 0.01112, 2, 34, 142.65, -24.37, 0.97775, 74, -106.6, 172.5, 0.02225, 2, 34, 131.57, -29.57, 0.9788, 74, -94.56, 170.26, 0.0212, 2, 34, 75.83, -37.63, 0.97359, 74, -44.55, 144.38, 0.02641, 2, 34, 32.94, -20.65, 0.93, 74, -19.57, 105.6, 0.07, 2, 34, 26.9, -27.43, 0.9, 74, -10.71, 107.6, 0.1, 2, 34, -9.24, -14.28, 0.86, 74, 11.02, 75.86, 0.14, 2, 34, -21.6, -0.12, 0.78, 74, 12.83, 57.16, 0.22, 2, 34, -9.42, 9.08, 0.84, 74, -2.43, 56.76, 0.16, 2, 34, 14.03, 16.44, 0.88122, 74, -25.78, 64.43, 0.11878, 2, 34, 37.64, 11.23, 0.93, 74, -41.95, 82.41, 0.07, 2, 34, 50.35, 21.92, 0.94, 74, -58.5, 81.12, 0.06, 2, 34, 63.22, 18.84, 0.95957, 74, -67.18, 91.12, 0.04043, 2, 34, 80.71, 41.03, 0.99714, 74, -94.31, 83.25, 0.00286, 1, 34, 78.21, 49.9, 1, 1, 34, 67.2, 82.69, 1, 1, 34, 83.22, 114.91, 1, 1, 34, 98.88, 129.38, 1, 1, 34, 133.2, 148.49, 1, 1, 34, 164.96, 147.54, 1, 1, 34, 223.55, 135.17, 1, 1, 34, 234.17, 129.11, 1, 1, 34, 260.7, 144.13, 1, 1, 34, 268.68, 164.73, 1, 1, 34, 265.91, 184.53, 1, 1, 34, 248.48, 207.72, 1, 1, 34, 232.86, 206.82, 1, 1, 34, 215.06, 172.46, 1, 1, 34, 211.59, 170.1, 1, 1, 34, 213.1, 207.18, 1, 1, 34, 219.05, 231.06, 1, 1, 34, 233.36, 238.02, 1, 1, 34, 265.01, 223.8, 1, 1, 34, 290.33, 196.4, 1, 1, 34, 298.06, 178.29, 1, 1, 34, 302.4, 135.6, 1, 1, 34, 275.09, 94.31, 1, 1, 34, 284.66, 88.97, 1, 1, 34, 286.01, 85.81, 1, 2, 34, 13.6, -3.66, 0.93, 74, -13.73, 80.52, 0.07, 1, 34, 68.37, -13.1, 1, 2, 34, 90.48, 5.75, 0.995, 74, -81.72, 117.62, 0.005, 2, 34, 89.43, 30.76, 0.995, 74, -95.42, 96.68, 0.005, 1, 34, 113.96, 91.09, 1, 1, 34, 151.78, 103.55, 1, 1, 34, 190.72, 116, 1 ], + "hull": 47, + "edges": [ 0, 92, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 30, 32, 32, 34, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 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, 28, 30, 16, 18, 34, 36, 58, 60, 96, 94, 96, 98, 98, 100 ], + "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": [ 15, 14, 0, 1, 23, 0, 12, 13, 15, 15, 13, 14, 8, 18, 7, 7, 18, 6, 18, 5, 6, 8, 19, 18, 17, 21, 16, 23, 15, 0, 24, 15, 23, 21, 20, 16, 21, 22, 20, 21, 24, 22, 24, 23, 22, 2, 22, 23, 20, 22, 3, 22, 2, 3, 2, 23, 1, 11, 24, 21, 4, 16, 20, 16, 4, 18, 17, 16, 19, 19, 16, 18, 18, 4, 5, 4, 20, 3, 9, 10, 17, 8, 9, 19, 9, 17, 19, 10, 21, 17, 10, 11, 21, 11, 12, 24, 12, 15, 24 ], + "vertices": [ 2, 54, 28.47, 75.44, 0.40489, 74, -91.22, 43.02, 0.59511, 2, 54, 66.98, 65.83, 0.54061, 74, -64.96, 13.27, 0.45939, 2, 54, 98.09, 68.86, 0.67457, 74, -37.62, -1.88, 0.32543, 2, 54, 132.32, 71.81, 0.77891, 74, -7.76, -18.87, 0.22109, 2, 54, 163.31, 76.98, 0.78694, 74, 20.7, -32.2, 0.21306, 2, 54, 190.52, 90.03, 0.78631, 74, 50.51, -36.88, 0.21369, 2, 54, 210.32, 100.44, 0.86507, 74, 72.72, -39.54, 0.13493, 1, 54, 238.9, 67.81, 1, 2, 54, 234.83, 1.64, 0.98898, 74, 36.86, -134.8, 0.01102, 2, 54, 173.67, -58.3, 0.98603, 74, -47.5, -149.48, 0.01397, 1, 54, 125.49, -79.1, 1, 2, 54, 87.8, -40.51, 0.77481, 74, -108.13, -86.11, 0.22519, 3, 54, -5.59, -78.2, 0.30353, 8, -21.32, -18.84, 0.63716, 74, -202.55, -73.18, 0.05931, 2, 8, 106.45, -6.22, 0.98571, 74, -224.49, 48.7, 0.01429, 2, 8, 95.42, -85.63, 0.62475, 74, -144.43, 44.69, 0.37525, 2, 54, 24.89, 6.25, 0.63522, 74, -133.42, -11.92, 0.36478, 2, 54, 177.48, 5.6, 0.7446, 74, -8.12, -99.01, 0.2554, 2, 54, 160.25, -36.54, 0.86286, 74, -46.21, -123.95, 0.13714, 2, 54, 216.48, 51.69, 0.84606, 74, 50.14, -83.17, 0.15394, 2, 54, 213.42, 2.58, 0.92571, 74, 19.76, -121.89, 0.07429, 2, 54, 138.62, 31.33, 0.63037, 74, -25.53, -55.78, 0.36963, 2, 54, 124.75, -11.2, 0.73167, 74, -61.07, -82.94, 0.26833, 2, 54, 102.54, 22.8, 0.5705, 74, -60.08, -42.34, 0.4295, 2, 54, 61.9, 25.79, 0.54075, 74, -91.85, -16.83, 0.45925, 2, 54, 86.18, -5.32, 0.63768, 74, -89.5, -56.22, 0.36232 ], + "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": [ 13, 11, 12, 10, 11, 13, 13, 12, 0, 13, 0, 1, 9, 13, 1, 9, 1, 2, 10, 13, 9, 14, 9, 2, 14, 2, 3, 5, 3, 4, 14, 3, 5, 15, 9, 14, 8, 9, 15, 7, 8, 15, 6, 14, 5, 15, 14, 6, 7, 15, 6 ], + "vertices": [ 2, 54, 28.9, 96.24, 0.84, 74, -73.48, 56.29, 0.16, 2, 54, 65.84, 86.82, 0.84002, 74, -48.4, 27.58, 0.15998, 2, 54, 125.41, 92.66, 0.88641, 74, 3.97, -1.4, 0.11359, 2, 54, 151.38, 98.09, 0.83356, 74, 28.44, -11.66, 0.16644, 2, 54, 191.91, 121, 0.85174, 74, 74.81, -15.78, 0.14826, 2, 54, 227.3, 89.29, 0.83919, 74, 85.97, -61.97, 0.16081, 2, 54, 223.4, 25.16, 0.94641, 74, 46.37, -112.58, 0.05359, 2, 54, 176.27, -33.76, 0.77848, 74, -25.86, -134.36, 0.22152, 2, 54, 132.75, -53.77, 0.70055, 74, -73.05, -126.15, 0.29945, 2, 54, 94.17, -16.26, 0.68436, 74, -83.54, -73.38, 0.31564, 3, 54, 19.52, -38.44, 0.28887, 8, -3.76, -62.46, 0.60639, 74, -154.63, -56.39, 0.10474, 1, 8, 98.59, -46.15, 1, 2, 8, 110.02, -102.65, 0.84736, 74, -123.17, 57.1, 0.15264, 2, 54, 31.25, 29.22, 0.82334, 74, -109.57, -0.23, 0.17666, 2, 54, 171.54, 28.72, 0.86269, 74, 5.69, -80.23, 0.13731, 2, 54, 161.87, -12.64, 0.71096, 74, -25.74, -108.8, 0.28904 ], + "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": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 1, 54, 275.87, 107.8, 1, 2, 54, 235.58, 46.93, 0.94857, 74, -85.57, -171.76, 0.05143, 2, 54, 155.53, 99.92, 0.94, 74, -56.06, -80.4, 0.06, 1, 54, 195.82, 160.79, 1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "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 } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "gun-grab": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "front-open-hand" }, + { "time": 0.2333, "name": "gun" } + ] + }, + "gun": { + "attachment": [ + { "time": 0.2333 } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 12.34 ] + }, + { + "time": 0.1333, + "value": 12.34, + "curve": [ 0.158, 12.34, 0.208, -89.55 ] + }, + { + "time": 0.2333, + "value": -89.55, + "curve": [ 0.269, -89.03, 0.299, -89.03 ] + }, + { + "time": 0.3333, + "value": -79.79, + "curve": [ 0.397, -62.87, 0.583, -10.18 ] + }, + { "time": 0.6667, "value": -10.18 } + ], + "scale": [ + { + "curve": [ 0.058, 1, 0.175, 0.938, 0.058, 1, 0.175, 0.938 ] + }, + { + "time": 0.2333, + "x": 0.938, + "y": 0.938, + "curve": [ 0.342, 0.938, 0.558, 1, 0.342, 0.938, 0.558, 1 ] + }, + { "time": 0.6667 } + ] + }, + "front-arm": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.082, -21.08 ] + }, + { + "time": 0.1, + "value": -32, + "curve": [ 0.15, -62.93, 0.213, -120.29 ] + }, + { + "time": 0.2333, + "value": -136.89, + "curve": [ 0.29, -183.72, 0.308, -204.81 ] + }, + { + "time": 0.3333, + "value": -204.81, + "curve": [ 0.383, -204.81, 0.479, -143.9 ] + }, + { + "time": 0.5333, + "value": -113.86, + "curve": [ 0.563, -97.44, 0.633, -56.75 ] + }, + { "time": 0.6667, "value": -56.75 } + ], + "translate": [ + { + "curve": [ 0.058, 0, 0.173, 4.7, 0.058, 0, 0.175, -2.66 ] + }, + { + "time": 0.2333, + "x": 5.85, + "y": -2.66, + "curve": [ 0.258, 6.3, 0.308, 6.84, 0.258, -2.66, 0.308, 4.8 ] + }, + { + "time": 0.3333, + "x": 6.84, + "y": 4.8, + "curve": [ 0.417, 6.84, 0.583, 0, 0.417, 4.8, 0.583, 0 ] + }, + { "time": 0.6667 } + ] + }, + "front-bracer": { + "rotate": [ + { + "curve": [ 0.058, 0, 0.218, 76.7 ] + }, + { + "time": 0.2333, + "value": 86.02, + "curve": [ 0.267, 106.51, 0.317, 114.95 ] + }, + { + "time": 0.3333, + "value": 114.95, + "curve": [ 0.383, 114.95, 0.515, 89.58 ] + }, + { + "time": 0.5333, + "value": 81.86, + "curve": [ 0.574, 64.66, 0.633, 34.74 ] + }, + { "time": 0.6667, "value": 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": [ + {}, + { "time": 0.3, "name": "gun-nohand" } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { + "value": -10.18, + "curve": [ 0.042, -10.18, 0.132, -79.17 ] + }, + { + "time": 0.1667, + "value": -84.76, + "curve": [ 0.204, -90.76, 0.267, -89.52 ] + }, + { + "time": 0.3, + "value": -89.52, + "curve": [ 0.342, -89.52, 0.411, -56.54 ] + }, + { + "time": 0.4667, + "value": -35.36, + "curve": [ 0.507, -19.8, 0.617, 0.18 ] + }, + { "time": 0.6667, "value": 0.18 } + ], + "translate": [ + { + "curve": [ 0.017, 0, 0.05, -1.82, 0.017, 0, 0.05, 0.11 ] + }, + { "time": 0.0667, "x": -1.82, "y": 0.11 } + ], + "scale": [ + { + "curve": [ 0.075, 1, 0.225, 0.888, 0.075, 1, 0.225, 0.888 ] + }, + { "time": 0.3, "x": 0.888, "y": 0.888 } + ] + }, + "front-arm": { + "rotate": [ + { + "value": -56.75, + "curve": [ 0.042, -56.75, 0.104, -197.53 ] + }, + { + "time": 0.1667, + "value": -197.88, + "curve": [ 0.23, -198.59, 0.267, -143.09 ] + }, + { + "time": 0.3, + "value": -143.09, + "curve": [ 0.342, -143.09, 0.425, -159.79 ] + }, + { + "time": 0.4667, + "value": -159.79, + "curve": [ 0.517, -159.79, 0.617, -25.24 ] + }, + { "time": 0.6667, "value": -25.24 } + ] + }, + "front-bracer": { + "rotate": [ + { + "value": 34.74, + "curve": [ 0.042, 34.74, 0.138, 83.37 ] + }, + { + "time": 0.1667, + "value": 90.01, + "curve": [ 0.195, 96.76, 0.369, 112.84 ] + }, + { + "time": 0.4, + "value": 114.44, + "curve": [ 0.422, 115.57, 0.45, 116.1 ] + }, + { "time": 0.4667, "value": 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, + "curve": [ 0.325, 0, 0.393, -4.59 ] + }, + { + "time": 0.4, + "value": -6.98, + "curve": [ 0.421, -14.42, 0.45, -69.67 ] + }, + { + "time": 0.4667, + "value": -69.67, + "curve": [ 0.483, -69.67, 0.509, -21.2 ] + }, + { + "time": 0.5333, + "value": -12.81, + "curve": [ 0.562, -2.84, 0.633, 5.74 ] + }, + { + "time": 0.6667, + "value": 5.74, + "curve": [ 0.742, 5.74, 0.892, 0 ] + }, + { "time": 0.9667 } + ], + "translate": [ + { + "x": -90.53, + "y": 47.55, + "curve": [ 0.015, -146.88, 0.075, -246.15, 0.036, 37.03, 0.075, 33.45 ] + }, + { + "time": 0.1, + "x": -246.15, + "y": 33.45, + "curve": [ 0.15, -246.15, 0.375, -246.15, 0.15, 33.45, 0.349, 33.63 ] + }, + { + "time": 0.4, + "x": -246.15, + "y": 33.45, + "curve": [ 0.413, -243.99, 0.447, -223.12, 0.413, 35.27, 0.46, 361.9 ] + }, + { + "time": 0.4667, + "x": -179.6, + "y": 397.56, + "curve": [ 0.484, -140.35, 0.517, 16.95, 0.477, 456.62, 0.496, 549.31 ] + }, + { + "time": 0.5333, + "x": 73.03, + "y": 636.97, + "curve": [ 0.557, 157.46, 0.606, 251.39, 0.56, 699.46, 0.633, 735.98 ] + }, + { + "time": 0.6667, + "x": 251.39, + "y": 737.16, + "curve": [ 0.796, 249.04, 0.947, 141, 0.81, 742.2, 0.947, 234.23 ] + }, + { "time": 0.9667, "x": 95.94, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { + "value": -4.48, + "curve": [ 0.049, -9.72, 0.1, -13.95 ] + }, + { + "time": 0.1333, + "value": -13.95, + "curve": [ 0.2, -13.95, 0.361, 5.8 ] + }, + { + "time": 0.4, + "value": 12.46, + "curve": [ 0.438, 19.02, 0.513, 31.53 ] + }, + { + "time": 0.6667, + "value": 31.43, + "curve": [ 0.821, 31.91, 0.951, 2.18 ] + }, + { + "time": 0.9667, + "value": -4.26, + "curve": [ 0.982, -10.63, 1.013, -18.69 ] + }, + { + "time": 1.0667, + "value": -18.59, + "curve": [ 1.108, -18.52, 1.292, 3.45 ] + }, + { + "time": 1.3333, + "value": 3.45, + "curve": [ 1.367, 3.45, 1.445, 2.35 ] + }, + { "time": 1.5333, "value": -4.48 } + ], + "translate": [ + { + "x": -47.56, + "y": 48.49, + "curve": [ 0.043, -69.43, 0.1, -79.91, 0.033, 48.49, 0.111, -39.5 ] + }, + { + "time": 0.1333, + "x": -79.91, + "y": -55.85, + "curve": [ 0.166, -79.91, 0.225, -76.38, 0.162, -76.85, 0.217, -91.17 ] + }, + { + "time": 0.2667, + "x": -52.47, + "y": -92.76, + "curve": [ 0.312, -26.39, 0.38, 56.36, 0.317, -94.39, 0.359, -58.96 ] + }, + { + "time": 0.4, + "x": 82.2, + "y": 39.51, + "curve": [ 0.426, 116.54, 0.532, 203.27, 0.43, 112.89, 0.475, 649.69 ] + }, + { + "time": 0.6667, + "x": 205.52, + "y": 649.79, + "curve": [ 0.775, 207.34, 0.857, 58.95, 0.879, 646.83, 0.926, 440.06 ] + }, + { + "time": 0.9667, + "x": 59.67, + "y": 161.1, + "curve": [ 1.026, 60.06, 1.041, 72.9, 0.982, 53.87, 1.004, -91.4 ] + }, + { + "time": 1.0667, + "x": 91.3, + "y": -91.6, + "curve": [ 1.083, 103.05, 1.246, 238.62, 1.207, -92.04, 1.234, 76.13 ] + }, + { + "time": 1.3333, + "x": 238.12, + "y": 75.68, + "curve": [ 1.408, 237.69, 1.5, 213.2, 1.41, 75.33, 1.497, 49.77 ] + }, + { "time": 1.5333, "x": 213.2, "y": 49.77 } + ] + }, + "back-foot-target": { + "rotate": [ + { + "time": 0.3, + "curve": [ 0.325, 0, 0.386, -31.84 ] + }, + { + "time": 0.4, + "value": -41.64, + "curve": [ 0.42, -55.3, 0.458, -86.03 ] + }, + { + "time": 0.4667, + "value": -86.03, + "curve": [ 0.475, -86.03, 0.515, -62.63 ] + }, + { + "time": 0.5333, + "value": -57.97, + "curve": [ 0.645, -29.13, 1.025, -7.79 ] + }, + { "time": 1.0333, "value": -7.79 } + ], + "translate": [ + { "x": 99.37, "curve": "stepped" }, + { + "time": 0.3, + "x": 99.37, + "curve": [ 0.352, 97.71, 0.349, 85.15, 0.4, 0, 0.3, 0 ] + }, + { + "time": 0.4, + "x": 83.35, + "curve": [ 0.412, 83.24, 0.424, 87.02, 0.411, 0.2, 0.415, -7.91 ] + }, + { + "time": 0.4333, + "x": 92.07, + "y": -9.73, + "curve": [ 0.451, 100.78, 0.463, 124.21, 0.449, 27.5, 0.462, 103.35 ] + }, + { + "time": 0.4667, + "x": 132.33, + "y": 119.67, + "curve": [ 0.476, 153.34, 0.517, 239.65, 0.476, 151.52, 0.518, 382.69 ] + }, + { + "time": 0.5333, + "x": 267.51, + "y": 435.87, + "curve": [ 0.553, 302.61, 0.632, 352.21, 0.557, 517.14, 0.645, 683.92 ] + }, + { + "time": 0.6667, + "x": 352.52, + "y": 702.46, + "curve": [ 0.747, 353.24, 0.797, 342.85, 0.745, 768.64, 0.789, 768.68 ] + }, + { + "time": 0.8333, + "x": 322.4, + "y": 717.67, + "curve": [ 0.866, 303.67, 0.932, 224.25, 0.865, 681.89, 0.936, 422.05 ] + }, + { + "time": 0.9667, + "x": 220.5, + "y": 293.73, + "curve": [ 0.989, 218.13, 1.009, 314.6, 0.987, 209.37, 1.024, 79.62 ] + }, + { "time": 1.0333, "x": 318.98 } + ] + }, + "front-leg-target": { + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -33.09, 0.025, 0, 0.075, -31.34 ] + }, + { + "time": 0.1, + "x": -33.09, + "y": -31.34, + "curve": [ 0.175, -33.09, 0.325, 140.91, 0.175, -31.34, 0.325, 51.55 ] + }, + { + "time": 0.4, + "x": 140.91, + "y": 51.55, + "curve": [ 0.434, 140.58, 0.421, 10.15, 0.435, 50.46, 0.45, 16 ] + }, + { + "time": 0.4667, + "x": -11.12, + "y": 4.78, + "curve": [ 0.501, -25.03, 0.586, -45.12, 0.511, -24.72, 0.56, -38.69 ] + }, + { + "time": 0.6667, + "x": -46.38, + "y": -40.57, + "curve": [ 0.74, -46.38, 0.923, -1.75, 0.74, -40.57, 0.896, 22.3 ] + }, + { + "time": 0.9667, + "x": -1.72, + "y": 20.96, + "curve": [ 0.993, -1.71, 0.993, -37.51, 0.995, 20.41, 0.954, -37.81 ] + }, + { + "time": 1.1, + "x": -38.27, + "y": -35.93, + "curve": [ 1.181, -38.85, 1.252, 44.94, 1.184, -34.84, 1.252, 5.48 ] + }, + { + "time": 1.3333, + "x": 44.94, + "y": 5.48, + "curve": [ 1.383, 44.94, 1.452, 0, 1.383, 5.48, 1.452, 0 ] + }, + { "time": 1.5333 } + ] + }, + "back-leg-target": { + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -35.37, 0.025, 0, 0.075, -16.42 ] + }, + { + "time": 0.1, + "x": -35.37, + "y": -16.42, + "curve": [ 0.141, -35.37, 0.205, -14.12, 0.141, -16.42, 0.214, 4.84 ] + }, + { + "time": 0.2667, + "x": -4.49, + "y": 4.24, + "curve": [ 0.317, 3.38, 0.366, 12.04, 0.319, 3.65, 0.375, -33.42 ] + }, + { + "time": 0.4, + "x": 12.04, + "y": -42.73, + "curve": [ 0.417, 12.04, 0.45, -46.17, 0.413, -47.43, 0.454, -76.29 ] + }, + { + "time": 0.4667, + "x": -46.17, + "y": -81.12, + "curve": [ 0.475, -46.17, 0.525, -38.36, 0.499, -93.24, 0.525, -96.11 ] + }, + { + "time": 0.5333, + "x": -38.36, + "y": -96.11, + "curve": [ 0.567, -38.36, 0.633, -55.58, 0.567, -96.11, 0.643, -67.83 ] + }, + { + "time": 0.6667, + "x": -55.58, + "y": -63.06, + "curve": [ 0.75, -55.58, 0.907, -56.88, 0.736, -49.33, 0.921, -52.06 ] + }, + { + "time": 1, + "x": -43, + "y": -42.05, + "curve": [ 1.076, -31.56, 1.101, -19.95, 1.084, -31.37, 1.125, -4.64 ] + }, + { + "time": 1.1333, + "x": -12.99, + "y": -3.97, + "curve": [ 1.198, 0.98, 1.233, 0, 1.173, -0.72, 1.233, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail1": { + "rotate": [ + { + "curve": [ 0.033, -0.73, 0.182, -1.37 ] + }, + { + "time": 0.2333, + "value": -0.68, + "curve": [ 0.324, 0.55, 0.378, 4.7 ] + }, + { + "time": 0.4, + "value": 6.15, + "curve": [ 0.449, 9.36, 0.523, 12.03 ] + }, + { + "time": 0.5667, + "value": 12.05, + "curve": [ 0.704, 12.09, 0.764, -9.79 ] + }, + { + "time": 0.9333, + "value": -9.74, + "curve": [ 0.984, -9.73, 1.054, -9.25 ] + }, + { + "time": 1.1, + "value": -7.09, + "curve": [ 1.173, -3.67, 1.279, 7.71 ] + }, + { + "time": 1.3333, + "value": 7.67, + "curve": [ 1.407, 7.63, 1.491, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail3": { + "rotate": [ + { + "curve": [ 0.143, -0.06, 0.212, -21.95 ] + }, + { + "time": 0.2333, + "value": -24.08, + "curve": [ 0.258, -26.54, 0.283, -26.63 ] + }, + { + "time": 0.3, + "value": -26.63, + "curve": [ 0.325, -26.63, 0.365, -22.41 ] + }, + { + "time": 0.4, + "value": -17.42, + "curve": [ 0.463, -8.36, 0.658, 0.68 ] + }, + { + "time": 0.7667, + "value": 0.99, + "curve": [ 0.839, 1.2, 0.911, -6.88 ] + }, + { + "time": 0.9333, + "value": -7.95, + "curve": [ 0.999, -11.08, 1.101, -12.03 ] + }, + { + "time": 1.1667, + "value": -11.94, + "curve": [ 1.233, -11.85, 1.317, -8.44 ] + }, + { + "time": 1.3333, + "value": -7.62, + "curve": [ 1.4, -4.31, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.076, 2.18, 0.15, 3.87 ] + }, + { + "time": 0.2, + "value": 3.87, + "curve": [ 0.25, 3.87, 0.317, -14.55 ] + }, + { + "time": 0.3667, + "value": -14.55, + "curve": [ 0.433, -14.55, 0.549, -7.29 ] + }, + { + "time": 0.6667, + "value": -0.64, + "curve": [ 0.725, 2.66, 0.883, 10.9 ] + }, + { + "time": 0.9667, + "value": 10.9, + "curve": [ 1.095, 10.9, 1.185, -6.18 ] + }, + { + "time": 1.2667, + "value": -6.04, + "curve": [ 1.38, -5.86, 1.471, -2.78 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.105, 6.29, 0.05, 0, 0.15, -22.92 ] + }, + { + "time": 0.2, + "x": 9.67, + "y": -22.92, + "curve": [ 0.417, 17.38, 0.775, 24.08, 0.392, -22.92, 0.806, 3.87 ] + }, + { + "time": 0.9667, + "x": 24.08, + "y": 4.46, + "curve": [ 1.012, 24.08, 1.071, 23.76, 1.022, 4.66, 1.077, -8.33 ] + }, + { + "time": 1.1333, + "x": 20.46, + "y": -8.46, + "curve": [ 1.221, 16.02, 1.317, 10.46, 1.21, -8.64, 1.352, 2.35 ] + }, + { + "time": 1.4, + "x": 5.93, + "y": 2.27, + "curve": [ 1.451, 3.19, 1.497, 0, 1.468, 2.16, 1.494, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm1": { + "rotate": [ + { + "curve": [ 0.067, 0, 0.2, 51.21 ] + }, + { + "time": 0.2667, + "value": 51.21, + "curve": [ 0.325, 51.21, 0.442, -38.7 ] + }, + { + "time": 0.5, + "value": -38.7, + "curve": [ 0.567, -38.7, 0.706, 24.96 ] + }, + { + "time": 0.7667, + "value": 38.01, + "curve": [ 0.854, 56.01, 0.911, 62.19 ] + }, + { + "time": 1, + "value": 62.19, + "curve": [ 1.084, 62.19, 1.192, -14.43 ] + }, + { + "time": 1.2333, + "value": -14.43, + "curve": [ 1.292, -14.43, 1.408, 0 ] + }, + { "time": 1.4667 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.053, 0, 0.169, -1.43 ] + }, + { + "time": 0.2, + "value": -2.08, + "curve": [ 0.272, -3.58, 0.329, -4.44 ] + }, + { + "time": 0.4, + "value": -4.48, + "curve": [ 0.473, -4.51, 0.616, -2.46 ] + }, + { + "time": 0.6667, + "value": -1.01, + "curve": [ 0.728, 0.75, 0.881, 5.85 ] + }, + { + "time": 0.9667, + "value": 5.85, + "curve": [ 1.04, 5.86, 1.17, -1.69 ] + }, + { + "time": 1.2667, + "value": -1.79, + "curve": [ 1.317, -1.84, 1.483, 0 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.042, -1.88, 0.137, -2.9, 0.058, 3.23, 0.133, 7.83 ] + }, + { + "time": 0.2, + "x": -2.93, + "y": 7.91, + "curve": [ 0.262, -2.97, 0.337, 1.35, 0.262, 7.98, 0.333, -17.63 ] + }, + { + "time": 0.4, + "x": 5.6, + "y": -17.63, + "curve": [ 0.501, 12.45, 0.612, 22.88, 0.467, -17.63, 0.619, -5.42 ] + }, + { + "time": 0.6667, + "x": 25.24, + "y": -2.9, + "curve": [ 0.752, 28.94, 0.851, 31.66, 0.775, 2.84, 0.883, 5.36 ] + }, + { + "time": 0.9667, + "x": 31.78, + "y": 5.36, + "curve": [ 1.083, 31.89, 1.209, 25.93, 1.068, 5.52, 1.169, -13.52 ] + }, + { + "time": 1.2667, + "x": 22.31, + "y": -13.24, + "curve": [ 1.338, 17.8, 1.432, 11.29, 1.345, -13.01, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "back-arm1": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 41.83 ] + }, + { + "time": 0.1333, + "value": 41.83, + "curve": [ 0.233, 41.83, 0.433, -19.76 ] + }, + { + "time": 0.5333, + "value": -19.76, + "curve": [ 0.617, -19.76, 0.813, 7.86 ] + }, + { + "time": 0.8667, + "value": 16.31, + "curve": [ 0.922, 25.06, 0.992, 39.62 ] + }, + { + "time": 1.0333, + "value": 39.62, + "curve": [ 1.067, 39.62, 1.134, 36.98 ] + }, + { + "time": 1.1667, + "value": 21.98, + "curve": [ 1.184, 13.73, 1.242, -14.43 ] + }, + { + "time": 1.2667, + "value": -14.43, + "curve": [ 1.317, -14.43, 1.417, 0 ] + }, + { "time": 1.4667 } + ] + }, + "spineboy-hip": { + "translate": [ + { + "curve": [ 0.033, 0, 0.071, 12.38, 0.033, 0, 0.099, 6.02 ] + }, + { + "time": 0.1333, + "x": 18.47, + "y": 5.61, + "curve": [ 0.183, 23.25, 0.285, 23.09, 0.199, 4.82, 0.308, -11.17 ] + }, + { + "time": 0.3333, + "x": 24.3, + "y": -23.55, + "curve": [ 0.439, 26.95, 0.553, 40.03, 0.394, -53.54, 0.573, -55.54 ] + }, + { + "time": 0.6667, + "x": 51.3, + "y": -55.2, + "curve": [ 0.741, 58.64, 0.905, 68.29, 0.853, -54.53, 0.939, -42.26 ] + }, + { + "time": 1, + "x": 67.68, + "y": -37.87, + "curve": [ 1.071, 67.22, 1.216, 14.12, 1.055, -33.92, 1.171, -3.34 ] + }, + { + "time": 1.2667, + "x": 10.39, + "y": -1.83, + "curve": [ 1.376, 2.35, 1.467, 0, 1.338, -0.69, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail5": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.077, 8.48 ] + }, + { + "time": 0.1333, + "value": 5.57, + "curve": [ 0.214, 1.41, 0.249, -14.58 ] + }, + { + "time": 0.3, + "value": -14.58, + "curve": [ 0.341, -14.52, 0.36, -12.87 ] + }, + { + "time": 0.4, + "value": -10.37, + "curve": [ 0.466, -6.22, 0.481, 6.11 ] + }, + { + "time": 0.7667, + "value": 11.47, + "curve": [ 0.831, 12.69, 0.857, 12.88 ] + }, + { + "time": 0.9333, + "value": 12.89, + "curve": [ 1.073, 12.92, 1.137, -5.02 ] + }, + { + "time": 1.1667, + "value": -10.52, + "curve": [ 1.189, -14.81, 1.242, -16.26 ] + }, + { + "time": 1.2667, + "value": -16.26, + "curve": [ 1.292, -16.26, 1.344, -10.57 ] + }, + { + "time": 1.3667, + "value": -7.39, + "curve": [ 1.387, -4.51, 1.468, -0.3 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.1, 18.42 ] + }, + { + "time": 0.1333, + "value": 18.42, + "curve": [ 0.225, 18.42, 0.408, -58.26 ] + }, + { + "time": 0.5, + "value": -58.26, + "curve": [ 0.567, -58.26, 0.702, -38.97 ] + }, + { + "time": 0.7667, + "value": -16.61, + "curve": [ 0.821, 2.07, 0.967, 12.73 ] + }, + { + "time": 1.0667, + "value": 13.08, + "curve": [ 1.108, 13.23, 1.192, -56.15 ] + }, + { + "time": 1.2333, + "value": -56.15, + "curve": [ 1.292, -56.15, 1.356, -0.71 ] + }, + { "time": 1.4667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.1333, "value": 15.28 }, + { "time": 0.4, "value": -53.41 }, + { "time": 0.7667, "value": -63.35 }, + { "time": 1.0667, "value": -29.92 }, + { "time": 1.3, "value": 7.24 }, + { "time": 1.4, "value": -3.7 }, + { "time": 1.4667 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.035, -0.03, 0.069, 8.8 ] + }, + { + "time": 0.1, + "value": 9.41, + "curve": [ 0.141, 10.24, 0.189, 4.37 ] + }, + { + "time": 0.2, + "value": 3.23, + "curve": [ 0.224, 0.67, 0.369, -14.75 ] + }, + { + "time": 0.4, + "value": -19.24, + "curve": [ 0.441, -25.21, 0.498, -33.84 ] + }, + { + "time": 0.5333, + "value": -33.74, + "curve": [ 0.581, -33.61, 0.614, -28.7 ] + }, + { + "time": 0.6667, + "value": -28.63, + "curve": [ 0.73, -28.55, 0.809, -29.54 ] + }, + { + "time": 0.9, + "value": -29.94, + "curve": [ 0.948, -30.15, 0.967, -4.31 ] + }, + { + "time": 1, + "value": -3.74, + "curve": [ 1.032, -3.18, 1.04, -9.87 ] + }, + { + "time": 1.0667, + "value": -9.83, + "curve": [ 1.094, -9.79, 1.157, 0.42 ] + }, + { + "time": 1.2, + "value": 0.36, + "curve": [ 1.237, 0.31, 1.249, -5.16 ] + }, + { + "time": 1.2667, + "value": -5.16, + "curve": [ 1.292, -5.16, 1.351, 3.76 ] + }, + { + "time": 1.4, + "value": 3.9, + "curve": [ 1.44, 4.01, 1.509, 0 ] + }, + { "time": 1.5333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, 1.7, 0.05, 0, 0.15, -35.74 ] + }, + { + "time": 0.2, + "x": 2.52, + "y": -35.74, + "curve": [ 0.264, 3.57, 0.342, 10.41, 0.258, -35.74, 0.342, -18.19 ] + }, + { + "time": 0.4, + "x": 10.41, + "y": -18.19, + "curve": [ 0.458, 10.41, 0.608, 26.32, 0.458, -18.19, 0.608, -20.79 ] + }, + { + "time": 0.6667, + "x": 26.32, + "y": -20.79, + "curve": [ 0.75, 26.32, 0.917, 19.04, 0.75, -20.79, 0.917, 1.7 ] + }, + { "time": 1, "x": 19.04, "y": 1.7 } + ], + "scale": [ + { + "curve": [ 0.05, 1, 0.15, 0.985, 0.05, 1, 0.15, 1.049 ] + }, + { + "time": 0.2, + "x": 0.985, + "y": 1.049, + "curve": [ 0.233, 0.985, 0.3, 1, 0.233, 1.049, 0.3, 1 ] + }, + { + "time": 0.3333, + "curve": [ 0.375, 1, 0.458, 1.066, 0.375, 1, 0.458, 0.945 ] + }, + { + "time": 0.5, + "x": 1.066, + "y": 0.945, + "curve": [ 0.603, 1.066, 0.7, 0.987, 0.639, 0.945, 0.817, 1.049 ] + }, + { + "time": 0.8667, + "x": 0.985, + "y": 1.049, + "curve": [ 0.878, 0.985, 0.958, 1.066, 0.917, 1.049, 0.958, 0.945 ] + }, + { + "time": 1, + "x": 1.066, + "y": 0.945, + "curve": [ 1.045, 1.065, 1.061, 0.986, 1.05, 0.944, 1.058, 1.048 ] + }, + { + "time": 1.1, + "x": 0.985, + "y": 1.049, + "curve": [ 1.189, 0.983, 1.363, 1, 1.119, 1.048, 1.363, 1 ] + }, + { "time": 1.5333 } + ] + }, + "back-arm2": { + "rotate": [ + { + "curve": [ 0.033, 0, 0.124, -25.32 ] + }, + { + "time": 0.1333, + "value": -28.29, + "curve": [ 0.178, -42.54, 0.408, -75.93 ] + }, + { + "time": 0.5, + "value": -75.93, + "curve": [ 0.567, -75.93, 0.722, -61.84 ] + }, + { + "time": 0.7667, + "value": -57.21, + "curve": [ 0.834, -50.18, 0.992, -38.17 ] + }, + { + "time": 1.0667, + "value": -38.17, + "curve": [ 1.108, -38.17, 1.177, -49.68 ] + }, + { + "time": 1.2667, + "value": -49.36, + "curve": [ 1.349, -49.07, 1.475, 0 ] + }, + { "time": 1.5333 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "value": -4.78, + "curve": [ 0.033, -4.78, 0.088, -8.83 ] + }, + { + "time": 0.1333, + "value": -13.36, + "curve": [ 0.179, -17.9, 0.242, -26.07 ] + }, + { + "time": 0.2667, + "value": -31.39, + "curve": [ 0.31, -40.56, 0.382, -52.73 ] + }, + { + "time": 0.4667, + "value": -52.79, + "curve": [ 0.574, -52.87, 0.615, -44.38 ] + }, + { + "time": 0.6667, + "value": -36.05, + "curve": [ 0.71, -29.14, 0.917, 9.18 ] + }, + { + "time": 1, + "value": 9.18, + "curve": [ 1.058, 9.18, 1.163, -29.03 ] + }, + { + "time": 1.2333, + "value": -29.37, + "curve": [ 1.275, -29.37, 1.377, -9.74 ] + }, + { + "time": 1.4, + "value": -7.98, + "curve": [ 1.443, -4.61, 1.517, -1.69 ] + }, + { "time": 1.5333, "value": -1.69 } + ] + }, + "tail7": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.049, 6.72, 0.193, 20.19 ] + }, + { + "time": 0.2333, + "value": 20.19, + "curve": [ 0.25, 20.19, 0.325, -13.06 ] + }, + { + "time": 0.4, + "value": -13.06, + "curve": [ 0.433, -13.06, 0.484, -9.84 ] + }, + { + "time": 0.5333, + "value": -5.93, + "curve": [ 0.586, -1.74, 0.822, 16.83 ] + }, + { + "time": 0.9333, + "value": 16.85, + "curve": [ 0.992, 16.86, 1.035, 12.25 ] + }, + { + "time": 1.0667, + "value": 7.16, + "curve": [ 1.129, -2.72, 1.166, -16.97 ] + }, + { + "time": 1.2, + "value": -16.51, + "curve": [ 1.273, -16.51, 1.319, -13.06 ] + }, + { + "time": 1.3667, + "value": -8.95, + "curve": [ 1.421, -4.2, 1.508, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-foot2": { + "rotate": [ + { + "time": 0.4, + "curve": [ 0.403, -10.05, 0.416, -43.77 ] + }, + { + "time": 0.4333, + "value": -53.55, + "curve": [ 0.469, -73.71, 0.522, -67.11 ] + }, + { + "time": 0.5333, + "value": -67.11, + "curve": [ 0.592, -68.53, 0.613, 20.61 ] + }, + { + "time": 0.9333, + "value": 24.85, + "curve": [ 0.958, 24.85, 0.989, 20.15 ] + }, + { "time": 1 } + ] + }, + "front-hand": { + "rotate": [ + { + "curve": [ 0.076, 0, 0.185, -8.93 ] + }, + { + "time": 0.3, + "value": -8.94, + "curve": [ 0.333, -8.94, 0.372, 38.13 ] + }, + { + "time": 0.4333, + "value": 38.11, + "curve": [ 0.516, 38.08, 0.653, -22.01 ] + }, + { + "time": 0.6667, + "value": -27.75, + "curve": [ 0.693, -38.81, 0.75, -52.48 ] + }, + { + "time": 0.8, + "value": -52.38, + "curve": [ 0.896, -52.18, 1.052, 10.93 ] + }, + { + "time": 1.0667, + "value": 16.08, + "curve": [ 1.088, 23.55, 1.152, 45.76 ] + }, + { + "time": 1.2, + "value": 46.03, + "curve": [ 1.252, 46.32, 1.27, -12.74 ] + }, + { + "time": 1.3, + "value": -12.68, + "curve": [ 1.373, -12.53, 1.424, 0 ] + }, + { "time": 1.4667 } + ] + }, + "jaw": { + "rotate": [ + { "value": 0.83 }, + { "time": 0.1333, "value": 6.62 }, + { "time": 0.3333, "value": -3.98 }, + { + "time": 0.4667, + "value": -14.79, + "curve": [ 0.731, -14.76, 0.792, 3.22 ] + }, + { "time": 0.9, "value": 3.22 }, + { "time": 0.9333, "value": -3.14 }, + { "time": 1.0667, "value": 12.08 }, + { "time": 1.2333, "value": -8.41 }, + { "time": 1.5333, "value": 0.83 } + ], + "translate": [ + { + "x": -10.21, + "y": 13.96, + "curve": [ 0.041, -10.21, 0.086, -23.53, 0.041, 13.96, 0.086, -6.69 ] + }, + { + "time": 0.1333, + "x": -23.53, + "y": -6.69, + "curve": [ 0.233, -23.53, 0.347, -43.29, 0.233, -6.69, 0.347, 2.9 ] + }, + { + "time": 0.4667, + "x": -42.09, + "y": 4.75, + "curve": [ 0.607, -40.69, 0.757, -33.92, 0.607, 6.92, 0.757, -13.55 ] + }, + { + "time": 0.9, + "x": -28.39, + "y": -12.1, + "curve": [ 1.016, -24, 1.13, -30.31, 1.016, -10.94, 1.13, 3.19 ] + }, + { + "time": 1.2333, + "x": -26.95, + "y": 9.17, + "curve": [ 1.347, -23.32, 1.449, -10.21, 1.347, 15.64, 1.449, 13.96 ] + }, + { "time": 1.5333, "x": -10.21, "y": 13.96 } + ] + }, + "back-foot2": { + "rotate": [ + { + "time": 0.4333, + "curve": [ 0.442, 0, 0.454, -46.1 ] + }, + { + "time": 0.4667, + "value": -60.96, + "curve": [ 0.475, -70.47, 0.517, -76.49 ] + }, + { + "time": 0.5333, + "value": -76.49, + "curve": [ 0.567, -76.49, 0.643, -68.96 ] + }, + { + "time": 0.6667, + "value": -63.79, + "curve": [ 0.712, -53.71, 0.866, -1.7 ] + }, + { + "time": 0.9333, + "value": 16.34, + "curve": [ 0.944, 19.2, 0.983, 24.85 ] + }, + { + "time": 1, + "value": 24.85, + "curve": [ 1.017, 24.85, 1.067, 11.07 ] + }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + { + "curve": [ 0.046, 0, 0.017, 36.31 ] + }, + { + "time": 0.1667, + "value": 36.26, + "curve": [ 0.3, 36.22, 0.535, 24.33 ] + }, + { + "time": 0.6667, + "value": 24.22, + "curve": [ 0.769, 24.27, 0.907, 26.83 ] + }, + { + "time": 0.9667, + "value": 31.87, + "curve": [ 1.024, 36.68, 1.148, 55.22 ] + }, + { + "time": 1.2, + "value": 55.2, + "curve": [ 1.296, 55.16, 1.469, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tail9": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.04, 6.72, 0.185, 21.12 ] + }, + { + "time": 0.2333, + "value": 21.25, + "curve": [ 0.27, 21.35, 0.284, 17.74 ] + }, + { + "time": 0.3, + "value": 14.56, + "curve": [ 0.322, 10.26, 0.375, -13.06 ] + }, + { + "time": 0.4, + "value": -13.06, + "curve": [ 0.433, -13.06, 0.51, -11.64 ] + }, + { + "time": 0.5333, + "value": -7.88, + "curve": [ 0.579, -0.37, 0.741, 21.14 ] + }, + { + "time": 0.7667, + "value": 23.25, + "curve": [ 0.819, 27.63, 0.865, 31.03 ] + }, + { + "time": 0.9333, + "value": 31.09, + "curve": [ 0.975, 31.12, 1.034, 24.27 ] + }, + { + "time": 1.0667, + "value": 16.48, + "curve": [ 1.121, 3.62, 1.146, -4.68 ] + }, + { + "time": 1.1667, + "value": -10.43, + "curve": [ 1.185, -15.54, 1.242, -22.43 ] + }, + { + "time": 1.2667, + "value": -22.43, + "curve": [ 1.292, -22.43, 1.338, -20.95 ] + }, + { + "time": 1.3667, + "value": -17.59, + "curve": [ 1.412, -12.34, 1.508, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-foot3": { + "rotate": [ + { + "time": 0.4, + "curve": [ 0.415, 0.16, 0.423, -3.39 ] + }, + { + "time": 0.4333, + "value": -8.31, + "curve": [ 0.438, -10.62, 0.486, -19.18 ] + }, + { + "time": 0.5333, + "value": -19.17, + "curve": [ 0.581, -19.16, 0.637, -15.86 ] + }, + { + "time": 0.6667, + "value": -13.75, + "curve": [ 0.743, -8.29, 0.858, 10.78 ] + }, + { + "time": 0.9333, + "value": 10.78, + "curve": [ 0.958, 10.78, 1.022, 10.58 ] + }, + { "time": 1.0333, "value": 0.34 } + ] + }, + "head2": { + "rotate": [ + { + "value": 18.08, + "curve": [ 0.033, 18.08, 0.108, 24.73 ] + }, + { + "time": 0.1333, + "value": 25.81, + "curve": [ 0.206, 28.87, 0.258, 29.66 ] + }, + { + "time": 0.3, + "value": 29.66, + "curve": [ 0.325, 29.66, 0.387, 27.38 ] + }, + { + "time": 0.4, + "value": 26.31, + "curve": [ 0.488, 19.31, 0.606, 9.53 ] + }, + { + "time": 0.6333, + "value": 7.4, + "curve": [ 0.681, 3.72, 0.761, -1.99 ] + }, + { + "time": 0.8333, + "value": -1.98, + "curve": [ 0.888, -1.97, 0.944, 1.29 ] + }, + { + "time": 0.9667, + "value": 3.21, + "curve": [ 1.005, 6.46, 1.019, 15.11 ] + }, + { + "time": 1.0667, + "value": 15.13, + "curve": [ 1.125, 15.15, 1.204, 13.96 ] + }, + { + "time": 1.2333, + "value": 12.87, + "curve": [ 1.271, 11.48, 1.275, 9.98 ] + }, + { + "time": 1.3333, + "value": 7.77, + "curve": [ 1.394, 5.46, 1.393, 5.9 ] + }, + { + "time": 1.4333, + "value": 5.86, + "curve": [ 1.481, 5.81, 1.517, 8.93 ] + }, + { "time": 1.5333, "value": 8.93 } + ], + "scale": [ + { + "time": 0.9, + "curve": [ 0.928, 1, 0.963, 1.056, 0.928, 1, 0.963, 0.978 ] + }, + { + "time": 1, + "x": 1.056, + "y": 0.978, + "curve": [ 1.052, 1.056, 1.11, 0.951, 1.052, 0.978, 1.11, 0.997 ] + }, + { + "time": 1.1667, + "x": 0.942, + "y": 1.001, + "curve": [ 1.267, 0.926, 1.367, 1, 1.267, 1.008, 1.367, 1 ] + }, + { "time": 1.4333 } + ] + }, + "neck2": { + "rotate": [ + { + "value": -0.77, + "curve": [ 0.033, -0.77, 0.1, 15.96 ] + }, + { + "time": 0.1333, + "value": 15.96, + "curve": [ 0.175, 15.96, 0.269, 11.97 ] + }, + { + "time": 0.3, + "value": 10.07, + "curve": [ 0.34, 7.56, 0.375, 4.11 ] + }, + { + "time": 0.4, + "value": 4.05, + "curve": [ 0.468, 3.91, 0.575, 8.43 ] + }, + { + "time": 0.6333, + "value": 8.48, + "curve": [ 0.73, 8.58, 0.883, -2.77 ] + }, + { + "time": 0.9667, + "value": -2.77, + "curve": [ 0.992, -2.77, 1.047, 3.79 ] + }, + { + "time": 1.0667, + "value": 5.45, + "curve": [ 1.094, 7.73, 1.192, 10.76 ] + }, + { + "time": 1.2333, + "value": 10.76, + "curve": [ 1.258, 10.76, 1.316, 7.65 ] + }, + { + "time": 1.3667, + "value": 7.6, + "curve": [ 1.417, 7.56, 1.5, 12.24 ] + }, + { "time": 1.5333, "value": 12.24 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "x": -0.43, "y": -9.01 }, + { "time": 0.5 }, + { "time": 0.9667, "x": -6.56, "y": 0.7 }, + { "time": 1.0667, "x": 12.25, "y": -29.51 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "value": -22.27 }, + { "time": 0.2667, "value": -16.91 }, + { "time": 0.4333, "value": -2.22 }, + { "time": 0.6667, "value": -6.95 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.3, "value": -13.39, "curve": "stepped" }, + { "time": 0.9667, "value": -13.39 }, + { "time": 1.3333 } + ] + }, + "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.4667 } + ] + }, + "tail2": { + "rotate": [ + { + "curve": [ 0.031, 0, 0.085, -0.3 ] + }, + { + "time": 0.1333, + "value": -0.88, + "curve": [ 0.22, -1.88, 0.255, -7.43 ] + }, + { + "time": 0.3, + "value": -7.43, + "curve": [ 0.325, -7.43, 0.366, -7.05 ] + }, + { + "time": 0.4, + "value": -5.89, + "curve": [ 0.434, -4.73, 0.506, 1.38 ] + }, + { + "time": 0.5333, + "value": 1.75, + "curve": [ 0.582, 2.41, 0.637, 3.11 ] + }, + { + "time": 0.7333, + "value": 3.14, + "curve": [ 0.814, 3.16, 0.903, 0.42 ] + }, + { + "time": 0.9333, + "value": -0.83, + "curve": [ 0.959, -1.87, 1.106, -7.13 ] + }, + { + "time": 1.1667, + "value": -7.07, + "curve": [ 1.206, -7.03, 1.308, 4.72 ] + }, + { + "time": 1.4, + "value": 4.89, + "curve": [ 1.452, 4.98, 1.501, -6.46 ] + }, + { "time": 1.5333, "value": -6.46 } + ] + }, + "tail4": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.072, 8.45 ] + }, + { + "time": 0.1333, + "value": 8.08, + "curve": [ 0.257, 7.33, 0.161, -3.27 ] + }, + { + "time": 0.3, + "value": -3.31, + "curve": [ 0.455, -3.35, 0.599, 7.47 ] + }, + { + "time": 0.7667, + "value": 11.95, + "curve": [ 0.804, 12.94, 0.861, 14.26 ] + }, + { + "time": 0.9333, + "value": 14.35, + "curve": [ 0.963, 14.39, 0.996, 14.41 ] + }, + { + "time": 1.0333, + "value": 6.04, + "curve": [ 1.072, -2.56, 1.116, -11.42 ] + }, + { + "time": 1.1667, + "value": -11.4, + "curve": [ 1.238, -11.4, 1.318, -6.95 ] + }, + { + "time": 1.3333, + "value": -5.65, + "curve": [ 1.364, -3.08, 1.508, 3.65 ] + }, + { "time": 1.5333, "value": 3.65 } + ] + }, + "tail6": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.017, 6.72, 0.079, 14.92 ] + }, + { + "time": 0.1333, + "value": 14.56, + "curve": [ 0.186, 14.23, 0.228, 8.64 ] + }, + { + "time": 0.2333, + "value": 6.59, + "curve": [ 0.245, 1.79, 0.303, -11.91 ] + }, + { + "time": 0.4, + "value": -11.91, + "curve": [ 0.474, -11.91, 0.702, 8.29 ] + }, + { + "time": 0.7667, + "value": 12.95, + "curve": [ 0.803, 15.57, 0.845, 18.42 ] + }, + { + "time": 0.9333, + "value": 18.64, + "curve": [ 1.043, 18.9, 1.08, -11.4 ] + }, + { + "time": 1.1667, + "value": -11.61, + "curve": [ 1.236, -11.44, 1.29, -10.99 ] + }, + { + "time": 1.3333, + "value": -8.88, + "curve": [ 1.423, -4.58, 1.472, 2.97 ] + }, + { "time": 1.5333, "value": 3.69 } + ] + }, + "tail8": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.018, 6.72, 0.179, 17.14 ] + }, + { + "time": 0.2333, + "value": 17.13, + "curve": [ 0.257, 17.2, 0.288, 11.35 ] + }, + { + "time": 0.3, + "value": 9.01, + "curve": [ 0.318, 5.47, 0.375, -14.47 ] + }, + { + "time": 0.4, + "value": -14.47, + "curve": [ 0.433, -14.47, 0.492, -12.37 ] + }, + { + "time": 0.5333, + "value": -9.76, + "curve": [ 0.575, -6.73, 0.732, 7.06 ] + }, + { + "time": 0.7667, + "value": 9.18, + "curve": [ 0.809, 11.79, 0.85, 14.28 ] + }, + { + "time": 0.9333, + "value": 14.4, + "curve": [ 0.98, 14.46, 1.027, 12.95 ] + }, + { + "time": 1.0667, + "value": 6.47, + "curve": [ 1.112, -0.74, 1.148, -13.08 ] + }, + { + "time": 1.1667, + "value": -14.91, + "curve": [ 1.215, -19.6, 1.259, -23.09 ] + }, + { + "time": 1.3, + "value": -23.17, + "curve": [ 1.376, -23.24, 1.508, -11.89 ] + }, + { "time": 1.5333, "value": -11.89 } + ] + }, + "tail10": { + "rotate": [ + { + "value": 6.72, + "curve": [ 0.038, 6.72, 0.199, 10.82 ] + }, + { + "time": 0.2333, + "value": 10.93, + "curve": [ 0.257, 11, 0.276, 11.07 ] + }, + { + "time": 0.3, + "value": 8.71, + "curve": [ 0.335, 5.33, 0.37, -8.93 ] + }, + { + "time": 0.4, + "value": -12.6, + "curve": [ 0.425, -15.68, 0.5, -18.92 ] + }, + { + "time": 0.5333, + "value": -18.92, + "curve": [ 0.549, -18.92, 0.651, 2.65 ] + }, + { + "time": 0.7, + "value": 9.59, + "curve": [ 0.725, 13.09, 0.791, 16.42 ] + }, + { + "time": 0.8333, + "value": 16.82, + "curve": [ 0.956, 17.98, 1.051, 10.26 ] + }, + { + "time": 1.0667, + "value": 7.38, + "curve": [ 1.098, 1.71, 1.13, -23.72 ] + }, + { + "time": 1.1667, + "value": -26.24, + "curve": [ 1.199, -28.46, 1.242, -29.22 ] + }, + { + "time": 1.2667, + "value": -29.22, + "curve": [ 1.292, -29.22, 1.353, -18.67 ] + }, + { + "time": 1.3667, + "value": -17.84, + "curve": [ 1.408, -15.28, 1.492, -11.19 ] + }, + { "time": 1.5333, "value": -11.19 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -13.92, + "curve": [ 0.119, -14.07, 0.185, -17.29 ] + }, + { + "time": 0.2667, + "value": -17.26, + "curve": [ 0.326, -17.24, 0.467, 1.36 ] + }, + { + "time": 0.5333, + "value": 1.36, + "curve": [ 0.583, 1.36, 0.686, 0.58 ] + }, + { + "time": 0.7333, + "value": -2.1, + "curve": [ 0.773, -4.34, 0.883, -27.93 ] + }, + { + "time": 0.9333, + "value": -27.93, + "curve": [ 1, -27.93, 1.128, -14.6 ] + }, + { + "time": 1.2, + "value": -13.79, + "curve": [ 1.305, -12.61, 1.352, -12.27 ] + }, + { + "time": 1.4333, + "value": -12.07, + "curve": [ 1.48, -11.96, 1.508, -14.43 ] + }, + { "time": 1.5333, "value": -14.43 } + ] + }, + "back-leg1": { + "translate": [ + {}, + { "time": 0.4667, "x": -12.67, "y": -22.45 }, + { "time": 0.9 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.317, 5.37 ] + }, + { + "time": 0.3333, + "value": 5.37, + "curve": [ 0.375, 5.37, 0.458, 17.56 ] + }, + { + "time": 0.5, + "value": 17.56, + "curve": [ 0.567, 17.56, 0.745, 7.05 ] + }, + { + "time": 0.7667, + "value": 5.59, + "curve": [ 0.792, 3.95, 0.944, -7.5 ] + }, + { + "time": 0.9667, + "value": -8.54, + "curve": [ 0.99, -9.6, 1.017, -10.01 ] + }, + { + "time": 1.0333, + "value": -10.01, + "curve": [ 1.067, -10.01, 1.152, 0.34 ] + }, + { + "time": 1.1667, + "value": 1.84, + "curve": [ 1.172, 2.4, 1.217, 5.06 ] + }, + { + "time": 1.2667, + "value": 5.88, + "curve": [ 1.28, 6.11, 1.317, 6.21 ] + }, + { + "time": 1.3333, + "value": 6.21, + "curve": [ 1.35, 6.21, 1.395, 1.51 ] + }, + { + "time": 1.4, + "value": 1.14, + "curve": [ 1.427, -0.79, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.324, 11.19 ] + }, + { + "time": 0.3333, + "value": 10.52, + "curve": [ 0.388, 6.71, 0.471, 1.06 ] + }, + { + "time": 0.5, + "value": -0.4, + "curve": [ 0.573, -4, 0.7, -7.16 ] + }, + { + "time": 0.7667, + "value": -7.16, + "curve": [ 0.817, -7.16, 0.917, -7.61 ] + }, + { + "time": 0.9667, + "value": -7.61, + "curve": [ 0.983, -7.61, 1.023, -5.42 ] + }, + { + "time": 1.0333, + "value": -4.76, + "curve": [ 1.088, -1.16, 1.133, 13.06 ] + }, + { + "time": 1.1667, + "value": 13.06, + "curve": [ 1.192, 13.06, 1.261, 3.4 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.285, -1.5, 1.317, -12.63 ] + }, + { + "time": 1.3333, + "value": -12.63, + "curve": [ 1.35, -12.63, 1.383, 16.65 ] + }, + { + "time": 1.4, + "value": 16.65, + "curve": [ 1.425, 16.65, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone5": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.321, 9.81 ] + }, + { + "time": 0.3333, + "value": 9.24, + "curve": [ 0.398, 6.26, 0.459, 4.3 ] + }, + { + "time": 0.5, + "value": 3.82, + "curve": [ 0.575, 2.94, 0.7, 1.96 ] + }, + { + "time": 0.7667, + "value": 1.96, + "curve": [ 0.817, 1.96, 0.91, -3.96 ] + }, + { + "time": 0.9667, + "value": -7.61, + "curve": [ 0.977, -8.28, 1.017, -10.01 ] + }, + { + "time": 1.0333, + "value": -10.01, + "curve": [ 1.067, -10.01, 1.133, 6.48 ] + }, + { + "time": 1.1667, + "value": 6.48, + "curve": [ 1.192, 6.48, 1.254, 3.31 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.294, -0.11, 1.317, -11.57 ] + }, + { + "time": 1.3333, + "value": -11.57, + "curve": [ 1.358, -11.57, 1.408, 5.16 ] + }, + { + "time": 1.4333, + "value": 5.16, + "curve": [ 1.458, 5.16, 1.508, -2.77 ] + }, + { "time": 1.5333, "value": -2.77 } + ] + }, + "bone": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.325, 10.28 ] + }, + { + "time": 0.3333, + "value": 9.74, + "curve": [ 0.388, 6.32, 0.46, 4.23 ] + }, + { + "time": 0.5, + "value": 3.82, + "curve": [ 0.562, 3.19, 0.7, 2.05 ] + }, + { + "time": 0.7667, + "value": 1.96, + "curve": [ 0.825, 1.88, 0.917, 4.62 ] + }, + { + "time": 0.9667, + "value": 4.62, + "curve": [ 0.983, 4.62, 1.023, 1.2 ] + }, + { + "time": 1.0333, + "value": 0.71, + "curve": [ 1.081, -1.59, 1.133, -2.71 ] + }, + { + "time": 1.1667, + "value": -2.71, + "curve": [ 1.192, -2.71, 1.246, -1.91 ] + }, + { + "time": 1.2667, + "value": -0.49, + "curve": [ 1.294, 1.34, 1.298, 3.19 ] + }, + { + "time": 1.3333, + "value": 5.49, + "curve": [ 1.342, 6.03, 1.383, 7.29 ] + }, + { + "time": 1.4, + "value": 7.29, + "curve": [ 1.425, 7.29, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -6.29 ] + }, + { + "time": 0.1, + "value": -6.29, + "curve": [ 0.142, -6.29, 0.225, 14.19 ] + }, + { + "time": 0.2667, + "value": 14.19, + "curve": [ 0.283, 14.19, 0.324, 10.89 ] + }, + { + "time": 0.3333, + "value": 10.09, + "curve": [ 0.392, 5.25, 0.471, -0.35 ] + }, + { + "time": 0.5, + "value": -2.13, + "curve": [ 0.562, -5.98, 0.7, -10.52 ] + }, + { + "time": 0.7667, + "value": -10.52, + "curve": [ 0.817, -10.52, 0.929, -8.78 ] + }, + { + "time": 0.9667, + "value": -6.83, + "curve": [ 0.998, -5.22, 1.027, -2.36 ] + }, + { + "time": 1.0333, + "value": -1.45, + "curve": [ 1.073, 4.26, 1.133, 18.91 ] + }, + { + "time": 1.1667, + "value": 18.91, + "curve": [ 1.192, 18.91, 1.26, 3.63 ] + }, + { + "time": 1.2667, + "value": 2.21, + "curve": [ 1.283, -1.14, 1.317, -7.27 ] + }, + { + "time": 1.3333, + "value": -7.27, + "curve": [ 1.35, -7.27, 1.383, 10.01 ] + }, + { + "time": 1.4, + "value": 10.01, + "curve": [ 1.425, 10.01, 1.475, -2.77 ] + }, + { "time": 1.5, "value": -2.77 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.102, 0, 0.227, -26.08, 0.05, 0, 0.262, 97.74 ] + }, + { + "time": 0.4333, + "x": -26.1, + "y": 97.3, + "curve": [ 0.663, -26.12, 0.832, -16.98, 0.613, 96.83, 0.892, 22.95 ] + }, + { + "time": 0.9333, + "x": -14.02, + "y": 11.08, + "curve": [ 0.986, -12.5, 1.035, -10.47, 0.957, 4.24, 1.058, -31.97 ] + }, + { + "time": 1.1, + "x": -8.27, + "y": -31.97, + "curve": [ 1.163, -6.13, 1.265, -3.68, 1.158, -31.97, 1.275, 24.45 ] + }, + { + "time": 1.3333, + "x": -2.27, + "y": 24.45, + "curve": [ 1.447, 0.09, 1.483, 0, 1.383, 24.45, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "horn-front": { + "translate": [ + { + "curve": [ 0.108, 0, 0.325, -6.39, 0.108, 0, 0.325, 23.95 ] + }, + { + "time": 0.4333, + "x": -6.39, + "y": 23.95, + "curve": [ 0.558, -6.39, 0.808, 3.02, 0.558, 23.95, 0.808, -1.11 ] + }, + { + "time": 0.9333, + "x": 3.02, + "y": -1.11, + "curve": [ 0.975, 3.02, 1.058, 4.31, 0.975, -1.11, 1.058, -10.04 ] + }, + { + "time": 1.1, + "x": 4.31, + "y": -10.04, + "curve": [ 1.158, 4.31, 1.275, 3.72, 1.158, -10.04, 1.275, 6.17 ] + }, + { + "time": 1.3333, + "x": 3.72, + "y": 6.17, + "curve": [ 1.383, 3.72, 1.483, 0, 1.383, 6.17, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "horn-back": { + "translate": [ + { + "curve": [ 0.108, 0, 0.325, -3.27, 0.108, 0, 0.325, -12.12 ] + }, + { + "time": 0.4333, + "x": -3.27, + "y": -12.12, + "curve": [ 0.558, -3.27, 0.808, 0, 0.558, -12.12, 0.808, 0 ] + }, + { + "time": 0.9333, + "curve": [ 0.975, 0, 1.058, -2.83, 0.975, 0, 1.058, 17.37 ] + }, + { + "time": 1.1, + "x": -2.83, + "y": 17.37, + "curve": [ 1.158, -2.83, 1.275, 0.49, 1.158, 17.37, 1.275, 6.93 ] + }, + { + "time": 1.3333, + "x": 0.49, + "y": 6.93, + "curve": [ 1.383, 0.49, 1.483, 0, 1.383, 6.93, 1.483, 0 ] + }, + { "time": 1.5333 } + ] + }, + "torso1": { + "rotate": [ + { + "curve": [ 0.118, 0.13, 0.135, 1.55 ] + }, + { + "time": 0.2, + "value": 3.04, + "curve": [ 0.243, 4.04, 0.325, 5.4 ] + }, + { + "time": 0.3667, + "value": 5.4, + "curve": [ 0.467, 5.4, 0.567, -16.54 ] + }, + { + "time": 0.6667, + "value": -16.54, + "curve": [ 0.804, -16.54, 0.878, 9.25 ] + }, + { + "time": 0.9667, + "value": 9.37, + "curve": [ 1.053, 9.48, 1.131, -2.06 ] + }, + { + "time": 1.2, + "value": -1.95, + "curve": [ 1.292, -1.8, 1.304, 2.68 ] + }, + { + "time": 1.3667, + "value": 2.86, + "curve": [ 1.429, 3.03, 1.472, -0.13 ] + }, + { "time": 1.5333 } + ] + }, + "saddle": { + "translate": [ + { "x": 19.28, "y": -10.71 } + ] + }, + "tongue1": { + "rotate": [ + { + "curve": [ 0.1, 0, 0.3, 9.37 ] + }, + { + "time": 0.4, + "value": 9.37, + "curve": [ 0.5, 9.37, 0.7, 17.48 ] + }, + { + "time": 0.8, + "value": 17.48, + "curve": [ 0.867, 17.48, 1, 22.44 ] + }, + { + "time": 1.0667, + "value": 22.44, + "curve": [ 1.117, 22.44, 1.217, -7.3 ] + }, + { + "time": 1.2667, + "value": -7.3, + "curve": [ 1.333, -7.3, 1.467, 0 ] + }, + { "time": 1.5333 } + ] + }, + "tongue2": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, -16.67 ] + }, + { + "time": 0.3333, + "value": -16.67, + "curve": [ 0.383, -16.67, 0.483, -20.4 ] + }, + { + "time": 0.5333, + "value": -20.4, + "curve": [ 0.592, -20.4, 0.708, -5.9 ] + }, + { "time": 0.7667, "value": -5.9 } + ] + }, + "tongue3": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, -16.67 ] + }, + { + "time": 0.3333, + "value": -16.67, + "curve": [ 0.383, -16.67, 0.483, -32.41 ] + }, + { + "time": 0.5333, + "value": -32.41, + "curve": [ 0.592, -32.41, 0.708, -4.64 ] + }, + { + "time": 0.7667, + "value": -4.64, + "curve": [ 0.817, -4.64, 0.917, 9.34 ] + }, + { "time": 0.9667, "value": 9.34 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "curve": [ 0.068, 0, 0.147, 0.59 ] + }, + { + "time": 0.2333, + "value": 0.26, + "curve": [ 0.286, 0.06, 0.364, -2.89 ] + }, + { + "time": 0.4, + "value": -4.33, + "curve": [ 0.432, -5.6, 0.489, -7.01 ] + }, + { + "time": 0.5333, + "value": -7.19, + "curve": [ 0.622, -7.54, 0.748, -0.51 ] + }, + { + "time": 0.8, + "value": 1.72, + "curve": [ 0.877, 5.01, 0.931, 5.58 ] + }, + { + "time": 1, + "value": 5.62, + "curve": [ 1.04, 5.64, 1.114, -0.98 ] + }, + { + "time": 1.1667, + "value": -2.42, + "curve": [ 1.307, -6.12, 1.433, -6.47 ] + }, + { "time": 1.5333, "value": -6.47 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.05, 0, 0.106, 0, 0.05, 0, 0.106, 100.22 ] + }, + { + "time": 0.1667, + "y": 100.22, + "curve": [ 0.199, 0, 0.234, 0, 0.199, 100.22, 0.242, -19.3 ] + }, + { + "time": 0.2667, + "y": -25.61, + "curve": [ 0.331, 0, 0.398, 0, 0.321, -39.52, 0.398, -43.58 ] + }, + { + "time": 0.4667, + "y": -43.47, + "curve": [ 0.522, 0, 0.578, 0, 0.522, -43.39, 0.598, 11.65 ] + }, + { + "time": 0.6333, + "y": 23.7, + "curve": [ 0.745, 0, 0.858, 0, 0.729, 55.73, 0.858, 75.57 ] + }, + { + "time": 0.9667, + "y": 71.98, + "curve": [ 0.989, 0, 1.012, 0, 0.989, 71.25, 1.012, -46.63 ] + }, + { + "time": 1.0333, + "y": -48.46, + "curve": [ 1.091, 0, 1.147, 0, 1.091, -53.23, 1.126, 120.27 ] + }, + { + "time": 1.2, + "y": 118.83, + "curve": [ 1.234, 0, 1.268, 0, 1.237, 118.12, 1.251, -67.36 ] + }, + { + "time": 1.3, + "y": -66.77, + "curve": [ 1.335, 0, 1.369, 0, 1.333, -66.38, 1.368, 44.6 ] + }, + { + "time": 1.4, + "y": 40.56, + "curve": [ 1.449, 0, 1.493, 0, 1.421, 37.96, 1.493, 0 ] + }, + { "time": 1.5333 } + ] + }, + "front-arm": { + "translate": [ + {}, + { "time": 0.4, "x": -5.67, "y": -4.08 }, + { "time": 0.5333, "y": -4.23 }, + { "time": 0.9, "x": -12.75, "y": 12.28 }, + { "time": 1.2333, "x": -4.44, "y": -5.6 }, + { "time": 1.5333 } + ], + "scale": [ + {}, + { "time": 0.4, "x": 1.057 }, + { "time": 0.5333, "x": 1.118 }, + { "time": 0.6667 }, + { "time": 1.3, "x": 1.105 }, + { "time": 1.5333 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 37.3, "bendPositive": false }, + { "time": 0.4333, "softness": 46.5, "bendPositive": false }, + { "time": 0.8, "softness": 15.1, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + {} + ], + "spineboy-front-arm-ik": [ + { "softness": 15, "stretch": true } + ] + }, + "drawOrder": [ + { + "offsets": [ + { "slot": "raptor-horn", "offset": 4 }, + { "slot": "front-thigh", "offset": -5 } + ] + } + ] + }, + "roar": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.6333, "name": "mouth-grind" }, + { "time": 1.5667, "name": "mouth-smile" } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.061, 2.9 ] + }, + { + "time": 0.1, + "value": 2.95, + "curve": [ 0.15, 3.01, 0.192, -10.89 ] + }, + { + "time": 0.2, + "value": -14.12, + "curve": [ 0.224, -23.48, 0.238, -33.2 ] + }, + { + "time": 0.3, + "value": -33.4, + "curve": [ 0.401, -33.71, 0.493, -9.73 ] + }, + { + "time": 0.5667, + "value": -6.44, + "curve": [ 0.589, -5.43, 0.683, -0.43 ] + }, + { + "time": 0.7, + "value": -0.43, + "curve": [ 0.739, -0.43, 0.778, -6.76 ] + }, + { + "time": 0.8333, + "value": -6.78, + "curve": [ 0.962, -6.83, 1.164, -5.78 ] + }, + { + "time": 1.4333, + "value": -5.93, + "curve": [ 1.531, -5.99, 1.535, -17.42 ] + }, + { + "time": 1.7, + "value": -17.43, + "curve": [ 1.808, -17.5, 1.816, 3.25 ] + }, + { + "time": 1.9333, + "value": 3.28, + "curve": [ 1.988, 3.3, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "y": 0.49, + "curve": [ 0.012, -0.48, 0.055, 34.36, 0.033, 15.91, 0.072, 19.98 ] + }, + { + "time": 0.1, + "x": 34.57, + "y": 19.97, + "curve": [ 0.3, 33.35, 0.261, -337.47, 0.27, 21.25, 0.435, -81.31 ] + }, + { + "time": 0.4667, + "x": -339.74, + "y": -103.88, + "curve": [ 0.525, -333.53, 0.54, -266.9, 0.518, -141.21, 0.548, -146.45 ] + }, + { + "time": 0.5667, + "x": -207.1, + "y": -146.24, + "curve": [ 0.577, -182.59, 0.605, 44.93, 0.613, -146.67, 0.629, -42.46 ] + }, + { + "time": 0.7, + "x": 44.98, + "y": -16.55, + "curve": [ 0.729, 44.99, 0.752, 42.93, 0.722, -8.54, 0.75, -6.52 ] + }, + { + "time": 0.7667, + "x": 41.57, + "y": -6.52, + "curve": [ 0.8, 38.2, 0.817, 35.92, 0.783, -6.52, 0.817, -13.34 ] + }, + { + "time": 0.8333, + "x": 35.92, + "y": -13.34, + "curve": [ 0.85, 35.92, 0.861, 39.13, 0.85, -13.34, 0.883, -6.52 ] + }, + { + "time": 0.9, + "x": 41.57, + "y": -6.52, + "curve": [ 0.945, 44.44, 1.276, 55.19, 0.992, -6.52, 1.275, -29.36 ] + }, + { + "time": 1.3667, + "x": 48.94, + "y": -29.36, + "curve": [ 1.579, 34.34, 1.622, -126.54, 1.558, -27.52, 1.659, -0.02 ] + }, + { + "time": 1.7, + "x": -127.64, + "y": 26.21, + "curve": [ 1.76, -128.48, 1.796, -115.83, 1.73, 45.34, 1.788, 70.47 ] + }, + { + "time": 1.8667, + "x": -78.95, + "y": 70.65, + "curve": [ 1.924, -49.19, 2.036, -1.03, 1.95, 70.79, 2.067, -30.6 ] + }, + { "time": 2.1333, "y": 0.49 } + ] + }, + "torso2": { + "rotate": [ + { + "curve": [ 0.093, 0.6, 0.15, 1.6 ] + }, + { + "time": 0.2, + "value": 1.61, + "curve": [ 0.29, 1.63, 0.346, -1.9 ] + }, + { + "time": 0.3667, + "value": -3.53, + "curve": [ 0.389, -5.3, 0.508, -20.04 ] + }, + { + "time": 0.5333, + "value": -22.32, + "curve": [ 0.559, -24.61, 0.596, -27.57 ] + }, + { + "time": 0.7, + "value": -27.54, + "curve": [ 0.758, -27.53, 0.754, -20.48 ] + }, + { + "time": 0.8, + "value": -20.36, + "curve": [ 0.831, -20.27, 0.851, -21.29 ] + }, + { + "time": 0.9, + "value": -21.25, + "curve": [ 0.963, -21.2, 1.021, -14.89 ] + }, + { + "time": 1.0667, + "value": -14.92, + "curve": [ 1.141, -14.99, 1.167, -18.09 ] + }, + { + "time": 1.2667, + "value": -18.03, + "curve": [ 1.385, -17.94, 1.605, -5.08 ] + }, + { + "time": 1.6667, + "value": -5.02, + "curve": [ 1.714, -4.98, 1.751, -7.53 ] + }, + { + "time": 1.8, + "value": -7.52, + "curve": [ 1.961, -6.98, 2.05, -0.54 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.167, 10.5, 0.05, 0, 0.15, 15.96 ] + }, + { + "time": 0.2, + "x": 12.62, + "y": 15.96, + "curve": [ 0.264, 16.81, 0.35, 19.16, 0.25, 15.96, 0.372, -12.74 ] + }, + { + "time": 0.4, + "x": 19.16, + "y": -15.96, + "curve": [ 0.45, 19.16, 0.565, 14.27, 0.46, -22.88, 0.55, -27.56 ] + }, + { + "time": 0.6, + "x": 13.67, + "y": -27.56, + "curve": [ 0.655, 12.74, 0.707, 12.17, 0.642, -27.56, 0.703, -24.23 ] + }, + { + "time": 0.7667, + "x": 12.05, + "y": -14.93, + "curve": [ 0.798, 11.99, 0.817, 12.59, 0.811, -8.49, 0.817, 0.87 ] + }, + { + "time": 0.8333, + "x": 13.4, + "y": 0.87, + "curve": [ 0.867, 15.08, 0.877, 16.88, 0.858, 0.87, 0.908, -11.59 ] + }, + { + "time": 0.9333, + "x": 18.37, + "y": -11.59, + "curve": [ 0.957, 19, 1.011, 19.96, 0.958, -11.59, 1.008, -1.9 ] + }, + { + "time": 1.0333, + "x": 20.16, + "y": -1.9, + "curve": [ 1.072, 20.52, 1.162, 20.95, 1.075, -1.9, 1.158, -5.89 ] + }, + { + "time": 1.2, + "x": 21.21, + "y": -5.89, + "curve": [ 1.245, 21.53, 1.375, 25.99, 1.258, -5.89, 1.375, 3.45 ] + }, + { + "time": 1.4333, + "x": 25.99, + "y": 3.45, + "curve": [ 1.5, 25.99, 1.645, 25.8, 1.5, 3.45, 1.646, 1.31 ] + }, + { + "time": 1.7, + "x": 25.18, + "y": 0.95, + "curve": [ 1.784, 24.23, 2.025, 0, 1.816, 0.17, 2.025, 0 ] + }, + { "time": 2.1333 } + ], + "scale": [ + { + "time": 0.5333, + "curve": [ 0.55, 1, 0.657, 1.09, 0.55, 1, 0.683, 0.966 ] + }, + { + "time": 0.7, + "x": 1.093, + "y": 0.966, + "curve": [ 0.772, 1.091, 0.8, 0.988, 0.774, 0.968, 0.8, 1.043 ] + }, + { + "time": 0.8333, + "x": 0.988, + "y": 1.043, + "curve": [ 0.867, 0.988, 0.983, 1.002, 0.867, 1.043, 0.991, 0.999 ] + }, + { "time": 1.1333 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "curve": [ 0.024, -0.09, 0.088, -27.73 ] + }, + { + "time": 0.1667, + "value": -27.92, + "curve": [ 0.193, -27.99, 0.216, -27.44 ] + }, + { + "time": 0.2333, + "value": -27.42, + "curve": [ 0.292, -27.34, 0.4, -41 ] + }, + { + "time": 0.4333, + "value": -47.9, + "curve": [ 0.481, -57.82, 0.578, -76.33 ] + }, + { + "time": 0.6333, + "value": -81.72, + "curve": [ 0.656, -83.88, 0.669, -84.84 ] + }, + { + "time": 0.7, + "value": -84.84, + "curve": [ 0.733, -84.84, 0.8, -60.21 ] + }, + { + "time": 0.8333, + "value": -60.21, + "curve": [ 0.85, -60.21, 0.873, -68.32 ] + }, + { + "time": 0.9, + "value": -68.29, + "curve": [ 0.933, -68.25, 0.958, -64.03 ] + }, + { + "time": 1, + "value": -63.97, + "curve": [ 1.085, -63.84, 1.213, -69.62 ] + }, + { + "time": 1.2667, + "value": -69.47, + "curve": [ 1.42, -69.06, 1.479, -59.79 ] + }, + { + "time": 1.5, + "value": -54.97, + "curve": [ 1.524, -49.41, 1.645, -25.87 ] + }, + { + "time": 1.7, + "value": -18.45, + "curve": [ 1.751, -11.45, 1.878, 0 ] + }, + { "time": 2.1333 } + ] + }, + "head2": { + "rotate": [ + { + "value": 12.98, + "curve": [ 0.031, 13.09, 0.051, 13.3 ] + }, + { + "time": 0.0667, + "value": 14.18, + "curve": [ 0.093, 15.64, 0.27, 32.49 ] + }, + { + "time": 0.3, + "value": 33.18, + "curve": [ 0.337, 34.04, 0.379, 21.48 ] + }, + { + "time": 0.4333, + "value": 21.71, + "curve": [ 0.495, 21.97, 0.586, 55.8 ] + }, + { + "time": 0.6333, + "value": 55.8, + "curve": [ 0.713, 55.8, 0.808, 48.07 ] + }, + { + "time": 0.9, + "value": 48.25, + "curve": [ 0.95, 48.35, 0.991, 53.74 ] + }, + { + "time": 1.0333, + "value": 53.37, + "curve": [ 1.058, 53.15, 1.073, 47.29 ] + }, + { + "time": 1.1, + "value": 47.47, + "curve": [ 1.189, 48.06, 1.186, 51.29 ] + }, + { + "time": 1.2333, + "value": 51.02, + "curve": [ 1.265, 50.85, 1.312, 48.13 ] + }, + { + "time": 1.3333, + "value": 45.79, + "curve": [ 1.359, 42.93, 1.443, 33.19 ] + }, + { + "time": 1.5, + "value": 32.96, + "curve": [ 1.555, 32.74, 1.584, 45.98 ] + }, + { + "time": 1.6333, + "value": 45.92, + "curve": [ 1.706, 45.84, 1.747, 24.35 ] + }, + { + "time": 1.8, + "value": 15.58, + "curve": [ 1.858, 6.03, 1.904, 0 ] + }, + { + "time": 1.9333, + "curve": [ 1.966, 0, 2.019, 17.18 ] + }, + { + "time": 2.0667, + "value": 17.31, + "curve": [ 2.097, 17.39, 2.116, 12.98 ] + }, + { "time": 2.1333, "value": 12.98 } + ], + "scale": [ + { + "time": 0.4667, + "curve": [ 0.497, 1, 0.531, 0.984, 0.497, 1, 0.531, 1.04 ] + }, + { + "time": 0.5667, + "x": 0.984, + "y": 1.04, + "curve": [ 0.618, 0.984, 0.684, 1.043, 0.618, 1.04, 0.668, 0.992 ] + }, + { + "time": 0.7333, + "x": 1.044, + "y": 0.99, + "curve": [ 0.775, 1.045, 0.844, 1, 0.767, 0.989, 0.844, 1 ] + }, + { "time": 0.9, "curve": "stepped" }, + { + "time": 1.4333, + "curve": [ 1.475, 1, 1.563, 1.001, 1.475, 1, 1.568, 1.003 ] + }, + { + "time": 1.6, + "x": 1.004, + "y": 1.008, + "curve": [ 1.651, 1.008, 1.675, 1.016, 1.637, 1.012, 1.675, 1.055 ] + }, + { + "time": 1.7, + "x": 1.016, + "y": 1.055, + "curve": [ 1.758, 1.016, 1.854, 1.008, 1.758, 1.055, 1.881, 1.014 ] + }, + { + "time": 1.9333, + "x": 1.004, + "y": 1.008, + "curve": [ 1.98, 1.001, 2.083, 1, 1.993, 1.001, 2.083, 1 ] + }, + { "time": 2.1333 } + ] + }, + "neck2": { + "rotate": [ + { + "value": 0.02, + "curve": [ 0.05, 0.02, 0.144, 5.69 ] + }, + { + "time": 0.2, + "value": 9.94, + "curve": [ 0.276, 15.74, 0.525, 37.25 ] + }, + { + "time": 0.6333, + "value": 37.25, + "curve": [ 0.808, 37.25, 1.175, 37.21 ] + }, + { + "time": 1.3333, + "value": 33.93, + "curve": [ 1.543, 29.58, 1.659, 13.32 ] + }, + { + "time": 1.7, + "value": 11.08, + "curve": [ 1.762, 7.68, 1.875, 0 ] + }, + { "time": 1.9333 } + ] + }, + "front-arm1": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.051, -14.24 ] + }, + { + "time": 0.1, + "value": -14.37, + "curve": [ 0.206, -14.64, 0.27, 25.52 ] + }, + { + "time": 0.3333, + "value": 25.6, + "curve": [ 0.466, 25.77, 0.528, -35.52 ] + }, + { + "time": 0.7, + "value": -35.63, + "curve": [ 0.742, -35.65, 0.808, -30.27 ] + }, + { + "time": 0.8333, + "value": -28.76, + "curve": [ 0.956, -21.55, 1.342, -18.16 ] + }, + { + "time": 1.5, + "value": -18.16, + "curve": [ 1.608, -18.16, 1.825, 13.78 ] + }, + { + "time": 1.9333, + "value": 13.78, + "curve": [ 1.983, 13.78, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-arm2": { + "rotate": [ + { + "curve": [ 0.157, 0, 0.166, 22.96 ] + }, + { + "time": 0.2333, + "value": 23.11, + "curve": [ 0.52, 23.77, 0.523, 3.24 ] + }, + { + "time": 0.5333, + "value": -3.34, + "curve": [ 0.561, -21.06, 0.604, -49.19 ] + }, + { + "time": 0.8, + "value": -59.15, + "curve": [ 0.896, -64.05, 1.195, -69.82 ] + }, + { + "time": 1.3333, + "value": -69.51, + "curve": [ 1.407, -69.35, 1.46, -64.94 ] + }, + { + "time": 1.5, + "value": -47.97, + "curve": [ 1.525, -37.26, 1.6, 20.75 ] + }, + { + "time": 1.6667, + "value": 20.78, + "curve": [ 1.801, 20.84, 1.868, -8.99 ] + }, + { + "time": 1.9333, + "value": -8.99, + "curve": [ 1.983, -8.99, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-hand": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.15, 15.17 ] + }, + { + "time": 0.2, + "value": 15.17, + "curve": [ 0.409, 14.83, 0.403, -26.62 ] + }, + { + "time": 0.5333, + "value": -25.8, + "curve": [ 0.62, -25.26, 0.648, 1.88 ] + }, + { + "time": 0.8, + "value": 1.88, + "curve": [ 0.983, 1.88, 1.479, -23.1 ] + }, + { + "time": 1.5333, + "value": -30.97, + "curve": [ 1.574, -36.96, 1.591, -46.26 ] + }, + { + "time": 1.6333, + "value": -46.06, + "curve": [ 1.75, -45.52, 1.762, 18.69 ] + }, + { + "time": 1.9333, + "value": 19.03, + "curve": [ 1.983, 19.13, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-arm2": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.081, -14.57 ] + }, + { + "time": 0.2, + "value": -14.55, + "curve": [ 0.287, -14.54, 0.388, -2.01 ] + }, + { + "time": 0.4667, + "value": -2.44, + "curve": [ 0.53, -2.78, 0.593, -10.56 ] + }, + { + "time": 0.6, + "value": -25.66, + "curve": [ 0.621, -73.18, 0.619, -95.18 ] + }, + { + "time": 0.7667, + "value": -97.24, + "curve": [ 0.847, -98.36, 1.279, -103.19 ] + }, + { + "time": 1.5, + "value": -77.44, + "curve": [ 1.567, -69.6, 1.77, -24.47 ] + }, + { + "time": 1.9333, + "value": -8.99, + "curve": [ 1.959, -6.54, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-hand": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.136, 7.7 ] + }, + { + "time": 0.2, + "value": 19.14, + "curve": [ 0.243, 26.85, 0.237, 49.93 ] + }, + { + "time": 0.3, + "value": 49.98, + "curve": [ 0.416, 50.06, 0.415, 33.42 ] + }, + { + "time": 0.4667, + "value": 33.94, + "curve": [ 0.586, 35.15, 0.557, 78.18 ] + }, + { + "time": 0.6, + "value": 78.77, + "curve": [ 0.624, 79.1, 0.639, 48.7 ] + }, + { + "time": 0.6667, + "value": 37.71, + "curve": [ 0.711, 20.36, 0.804, -1.75 ] + }, + { + "time": 0.9667, + "value": -3, + "curve": [ 1.168, -4.55, 1.332, -1.6 ] + }, + { + "time": 1.3667, + "value": 1.79, + "curve": [ 1.408, 5.92, 1.502, 36.79 ] + }, + { + "time": 1.5667, + "value": 36.4, + "curve": [ 1.685, 35.7, 1.9, 31.04 ] + }, + { + "time": 1.9333, + "value": 27.25, + "curve": [ 1.999, 19.84, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-arm1": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.056, 24.8 ] + }, + { + "time": 0.1667, + "value": 25.18, + "curve": [ 0.301, 25.64, 0.566, 11.56 ] + }, + { + "time": 0.6333, + "value": -5.85, + "curve": [ 0.672, -16, 0.707, -25.63 ] + }, + { + "time": 0.8, + "value": -25.79, + "curve": [ 0.975, -25.79, 1.295, -26.78 ] + }, + { + "time": 1.5, + "value": -12.94, + "curve": [ 1.564, -8.58, 1.825, 13.78 ] + }, + { + "time": 1.9333, + "value": 13.78, + "curve": [ 1.983, 13.78, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "neck": { + "rotate": [ + { + "curve": [ 0.05, 0, 0.114, -8.5 ] + }, + { + "time": 0.2, + "value": -8.26, + "curve": [ 0.29, -8.01, 0.537, 12.55 ] + }, + { + "time": 0.6333, + "value": 13.44, + "curve": [ 0.766, 14.68, 1.273, 2.13 ] + }, + { + "time": 1.4667, + "value": -3.5, + "curve": [ 1.565, -6.92, 1.656, -11.02 ] + }, + { + "time": 1.7, + "value": -10.74, + "curve": [ 1.788, -10.19, 1.852, 2.74 ] + }, + { + "time": 1.9333, + "value": 2.88, + "curve": [ 1.992, 2.98, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, -20.09, 0.05, 0, 0.174, -0.26 ] + }, + { + "time": 0.2, + "x": -19.98, + "y": -1.45, + "curve": [ 0.312, -19.75, 0.463, 34.4, 0.264, -4.43, 0.474, -34.98 ] + }, + { + "time": 0.6, + "x": 34.3, + "y": -34.87, + "curve": [ 0.672, 34.26, 0.742, 30.02, 0.638, -34.83, 0.742, -21.32 ] + }, + { + "time": 0.8, + "x": 30.02, + "y": -21.32, + "curve": [ 0.842, 30.02, 0.992, 37.66, 0.842, -21.32, 0.992, -41.18 ] + }, + { + "time": 1.0333, + "x": 37.66, + "y": -41.18, + "curve": [ 1.083, 37.66, 1.183, 23.6, 1.083, -41.18, 1.183, -0.63 ] + }, + { + "time": 1.2333, + "x": 23.6, + "y": -0.63, + "curve": [ 1.292, 23.6, 1.408, 26.3, 1.292, -0.63, 1.408, -26.62 ] + }, + { + "time": 1.4667, + "x": 26.3, + "y": -26.62, + "curve": [ 1.581, 26.3, 1.618, 17.21, 1.5, -26.62, 1.675, 3.64 ] + }, + { + "time": 1.7, + "x": 12.18, + "y": 3.64, + "curve": [ 1.773, 7.71, 1.87, 4.4, 1.758, 3.64, 1.875, -4.9 ] + }, + { + "time": 1.9333, + "x": 2.83, + "y": -4.9, + "curve": [ 2.001, 1.15, 2.083, 0, 1.983, -4.9, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "head": { + "rotate": [ + { + "curve": [ 0.001, -4.96, 0.05, -6.66 ] + }, + { + "time": 0.0667, + "value": -6.57, + "curve": [ 0.211, -5.81, 0.176, 34.04 ] + }, + { + "time": 0.2667, + "value": 33.65, + "curve": [ 0.335, 33.7, 0.454, 12.93 ] + }, + { + "time": 0.5, + "value": 3.37, + "curve": [ 0.539, -4.68, 0.547, -11.66 ] + }, + { + "time": 0.6, + "value": -12.11, + "curve": [ 0.645, -11.69, 0.602, 31.75 ] + }, + { + "time": 0.8, + "value": 31.51, + "curve": [ 0.85, 31.51, 0.917, 25.3 ] + }, + { + "time": 0.9667, + "value": 25.3, + "curve": [ 1.075, 25.3, 1.392, 27.9 ] + }, + { + "time": 1.5, + "value": 27.9, + "curve": [ 1.55, 27.9, 1.717, -5.14 ] + }, + { + "time": 1.8, + "value": -4.51, + "curve": [ 1.861, -4.19, 1.949, 4.07 ] + }, + { + "time": 2.0333, + "value": 4.18, + "curve": [ 2.087, 4.25, 2.096, 2.99 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.05, 0, 0.15, 22.58, 0.05, 0, 0.154, -41.07 ] + }, + { + "time": 0.2, + "x": 22.75, + "y": -41.48, + "curve": [ 0.3, 23.09, 0.336, -13.2, 0.329, -42.63, 0.356, 19.91 ] + }, + { + "time": 0.5667, + "x": -12.04, + "y": 21.07, + "curve": [ 0.643, -12.24, 0.681, 19.67, 0.625, 21.26, 0.615, -90.96 ] + }, + { + "time": 0.7, + "x": 20.1, + "y": -90.36, + "curve": [ 0.718, 20.5, 0.75, 16.57, 0.738, -90.33, 0.75, -87.92 ] + }, + { + "time": 0.7667, + "x": 16.57, + "y": -87.92, + "curve": [ 0.783, 16.57, 0.817, 18.74, 0.783, -87.92, 0.817, -87.42 ] + }, + { + "time": 0.8333, + "x": 18.74, + "y": -87.42, + "curve": [ 0.85, 18.74, 0.883, 16.57, 0.85, -87.42, 0.883, -87.92 ] + }, + { + "time": 0.9, + "x": 16.57, + "y": -87.92, + "curve": [ 0.917, 16.57, 0.95, 18.74, 0.917, -87.92, 0.95, -87.42 ] + }, + { + "time": 0.9667, + "x": 18.74, + "y": -87.42, + "curve": [ 1.075, 18.74, 1.392, 27.31, 1.075, -87.42, 1.392, -84.9 ] + }, + { + "time": 1.5, + "x": 27.31, + "y": -84.9, + "curve": [ 1.554, 27.31, 1.605, -22.6, 1.512, -84.9, 1.575, -102.53 ] + }, + { + "time": 1.7, + "x": -22.58, + "y": -89.06, + "curve": [ 1.812, -23.81, 1.863, 9.94, 1.841, -71.22, 1.847, 11.93 ] + }, + { + "time": 1.9667, + "x": 10.77, + "y": 13.35, + "curve": [ 2.028, 11.26, 2.065, -0.88, 2.032, 14.12, 2.082, 7.52 ] + }, + { "time": 2.1333 } + ], + "shear": [ + { + "time": 0.6333, + "curve": [ 0.654, 0, 0.67, -0.13, 0.654, 0, 0.676, 0 ] + }, + { + "time": 0.7, + "x": -0.56, + "curve": [ 0.721, -0.86, 0.744, -1.24, 0.721, 0, 0.744, 0 ] + }, + { + "time": 0.7667, + "x": -1.24, + "curve": [ 0.788, -1.24, 0.819, -0.69, 0.788, 0, 0.811, 0 ] + }, + { + "time": 0.8333, + "x": -0.47, + "curve": [ 0.88, 0.25, 0.901, 0.43, 0.866, 0, 0.9, 0 ] + }, + { + "time": 0.9333, + "x": 0.43, + "curve": [ 0.975, 0.44, 1.017, -0.47, 1, 0, 1.068, 0 ] + }, + { + "time": 1.1333, + "x": -0.46, + "curve": [ 1.202, -0.44, 1.282, -0.01, 1.216, 0, 1.462, 0 ] + }, + { "time": 1.5 } + ] + }, + "jaw": { + "rotate": [ + { + "value": -1.2, + "curve": [ 0.05, -1.2, 0.158, 0.54 ] + }, + { + "time": 0.2, + "value": 1.83, + "curve": [ 0.273, 4.06, 0.417, 15.63 ] + }, + { + "time": 0.4667, + "value": 14.47, + "curve": [ 0.652, 10.18, 0.592, -68.7 ] + }, + { + "time": 0.6667, + "value": -68.7, + "curve": [ 0.731, -68.52, 0.767, -42.64 ] + }, + { + "time": 0.8, + "value": -42.45, + "curve": [ 0.808, -42.45, 0.801, -43.41 ] + }, + { + "time": 0.8333, + "value": -43.55, + "curve": [ 0.858, -43.55, 0.906, -39.81 ] + }, + { + "time": 0.9333, + "value": -39.73, + "curve": [ 0.956, -39.65, 1.013, -42.1 ] + }, + { + "time": 1.0333, + "value": -42.02, + "curve": [ 1.06, -41.91, 1.083, -35.38 ] + }, + { + "time": 1.1333, + "value": -35.34, + "curve": [ 1.169, -35.32, 1.22, -36.84 ] + }, + { + "time": 1.2667, + "value": -36.74, + "curve": [ 1.372, -36.31, 1.542, 1.5 ] + }, + { + "time": 1.6, + "value": -3.58, + "curve": [ 1.62, -3.98, 1.647, -9.02 ] + }, + { + "time": 1.7, + "value": -8.79, + "curve": [ 1.748, -8.74, 1.823, 3.7 ] + }, + { + "time": 1.9333, + "value": 4.73, + "curve": [ 1.951, 5.04, 1.975, -1.14 ] + }, + { + "time": 2, + "value": -1.34, + "curve": [ 2.048, -1.72, 2.1, -1.2 ] + }, + { "time": 2.1333, "value": -1.2 } + ], + "translate": [ + { + "x": -3.44, + "y": 2.51, + "curve": [ 0.111, -3.74, 0.391, -39.94, 0.155, 4.09, 0.297, -2.98 ] + }, + { + "time": 0.4667, + "x": -56.45, + "y": -10.08, + "curve": [ 0.527, -69.24, 0.561, -75.25, 0.577, -15.37, 0.551, -15.25 ] + }, + { + "time": 0.6, + "x": -74.43, + "y": -14.69, + "curve": [ 0.634, -74.95, 0.624, -60.95, 0.641, -14.11, 0.65, 23.07 ] + }, + { + "time": 0.6667, + "x": -53.45, + "y": 23.07, + "curve": [ 0.759, -37.12, 1.392, -28.49, 0.892, 23.07, 1.375, 19.61 ] + }, + { + "time": 1.6, + "x": -21.33, + "y": 16.78, + "curve": [ 1.762, -15.77, 1.825, -8.47, 1.625, 16.47, 1.78, 6.33 ] + }, + { + "time": 1.8667, + "x": -8.47, + "y": -3.77, + "curve": [ 1.9, -8.47, 1.967, -15.38, 1.914, -8.24, 1.967, -10.85 ] + }, + { + "time": 2, + "x": -15.38, + "y": -10.85, + "curve": [ 2.033, -15.38, 2.1, -3.44, 2.033, -10.85, 2.1, 2.51 ] + }, + { "time": 2.1333, "x": -3.44, "y": 2.51 } + ], + "scale": [ + { + "time": 0.5667, + "curve": [ 0.594, 1, 0.621, 0.956, 0.601, 1, 0.621, 1.058 ] + }, + { + "time": 0.6333, + "x": 0.956, + "y": 1.058, + "curve": [ 0.646, 0.956, 0.639, 0.994, 0.646, 1.058, 0.642, 1.02 ] + }, + { "time": 0.7 } + ], + "shear": [ + { + "time": 0.2333, + "curve": [ 0.283, 0, 0.361, -0.05, 0.283, 0, 0.405, -0.25 ] + }, + { + "time": 0.4333, + "x": 0.04, + "y": -0.47, + "curve": [ 0.498, 0.13, 0.57, 0.57, 0.485, -0.88, 0.533, -2.91 ] + }, + { + "time": 0.6333, + "x": 0.55, + "y": -2.91, + "curve": [ 0.702, 0.53, 0.717, 0.33, 0.68, -2.87, 0.748, -2.09 ] + }, + { + "time": 0.8, + "x": 0.2, + "y": -1.59, + "curve": [ 0.897, 0.05, 1.025, 0, 0.862, -0.98, 1.025, 0 ] + }, + { "time": 1.1333 } + ] + }, + "tongue1": { + "rotate": [ + { + "value": 16.25, + "curve": [ 0.05, 16.25, 0.197, 16.24 ] + }, + { + "time": 0.2, + "value": 15.93, + "curve": [ 0.244, 10.93, 0.33, -0.69 ] + }, + { + "time": 0.3667, + "value": -0.58, + "curve": [ 0.432, -0.37, 0.481, 1.4 ] + }, + { + "time": 0.5333, + "value": 5.31, + "curve": [ 0.541, 5.85, 0.57, 25.11 ] + }, + { + "time": 0.6, + "value": 28.2, + "curve": [ 0.611, 29.32, 0.623, 14.35 ] + }, + { + "time": 0.6333, + "value": 15.32, + "curve": [ 0.661, 17.81, 0.683, 18.19 ] + }, + { + "time": 0.7, + "value": 18.19, + "curve": [ 0.733, 18.19, 0.8, 13.38 ] + }, + { + "time": 0.8333, + "value": 13.38, + "curve": [ 0.867, 13.38, 0.937, 14.84 ] + }, + { + "time": 0.9667, + "value": 15.71, + "curve": [ 1.019, 17.29, 1.045, 19.01 ] + }, + { + "time": 1.0667, + "value": 20.57, + "curve": [ 1.084, 21.85, 1.148, 23.51 ] + }, + { + "time": 1.1667, + "value": 23.29, + "curve": [ 1.22, 22.66, 1.242, 16.58 ] + }, + { + "time": 1.2667, + "value": 16.58, + "curve": [ 1.283, 16.58, 1.327, 19.6 ] + }, + { + "time": 1.3333, + "value": 19.86, + "curve": [ 1.376, 21.73, 1.408, 22.44 ] + }, + { + "time": 1.4333, + "value": 22.44, + "curve": [ 1.458, 22.44, 1.481, 19.06 ] + }, + { + "time": 1.5333, + "value": 19.01, + "curve": [ 1.575, 18.98, 1.656, 22.9 ] + }, + { + "time": 1.7, + "value": 22.93, + "curve": [ 1.776, 22.99, 1.875, 16.25 ] + }, + { "time": 1.9333, "value": 16.25 } + ], + "translate": [ + { "x": -22.37, "y": 13.32 } + ], + "scale": [ + { + "time": 0.2, + "curve": [ 0.3, 1, 0.5, 1.16, 0.3, 1, 0.5, 1 ] + }, + { + "time": 0.6, + "x": 1.16, + "curve": [ 0.875, 1.16, 1.425, 1, 0.875, 1, 1.425, 1 ] + }, + { "time": 1.7 } + ] + }, + "torso1": { + "rotate": [ + { + "curve": [ 0.029, 0, 0.036, -1.4 ] + }, + { + "time": 0.1, + "value": -1.41, + "curve": [ 0.143, -1.42, 0.287, 10.8 ] + }, + { + "time": 0.3333, + "value": 10.73, + "curve": [ 0.479, 10.51, 0.531, 6.79 ] + }, + { + "time": 0.6, + "curve": [ 0.624, -2.59, 0.679, -4.75 ] + }, + { + "time": 0.7, + "value": -4.9, + "curve": [ 0.723, -5.06, 0.75, -2.6 ] + }, + { + "time": 0.7667, + "value": -2.6, + "curve": [ 0.783, -2.6, 0.814, -4.72 ] + }, + { + "time": 0.8333, + "value": -4.7, + "curve": [ 0.858, -4.67, 0.857, -1.2 ] + }, + { + "time": 0.9, + "value": -1.13, + "curve": [ 0.926, -1.09, 1, -3.27 ] + }, + { + "time": 1.0333, + "value": -3.27, + "curve": [ 1.061, -3.27, 1.1, 0.25 ] + }, + { + "time": 1.1333, + "value": 0.24, + "curve": [ 1.179, 0.23, 1.199, -1.36 ] + }, + { + "time": 1.2333, + "value": -1.36, + "curve": [ 1.295, -1.36, 1.29, 1.49 ] + }, + { + "time": 1.3667, + "value": 1.47, + "curve": [ 1.409, 1.46, 1.464, -1.37 ] + }, + { + "time": 1.5, + "value": -1.36, + "curve": [ 1.607, -1.3, 1.754, 1.39 ] + }, + { + "time": 1.9667, + "value": 1.36, + "curve": [ 2.008, 1.36, 2.092, 0 ] + }, + { "time": 2.1333 } + ] + }, + "horn-back": { + "rotate": [ + { "time": 0.2 }, + { "time": 1.0333, "value": 7.62 }, + { "time": 1.9333 } + ], + "translate": [ + { + "time": 1.6667, + "curve": [ 1.708, 0, 1.792, 19.83, 1.708, 0, 1.792, 22.59 ] + }, + { + "time": 1.8333, + "x": 19.83, + "y": 22.59, + "curve": [ 1.908, 19.83, 2.058, 0, 1.908, 22.59, 2.058, 0 ] + }, + { "time": 2.1333 } + ] + }, + "horn-front": { + "rotate": [ + { + "curve": [ 0.018, 0, 0.052, 0.73 ] + }, + { + "time": 0.0667, + "value": 1.73, + "curve": [ 0.084, 2.92, 0.1, 4.72 ] + }, + { + "time": 0.1333, + "value": 4.95, + "curve": [ 0.162, 5.16, 0.187, 4.3 ] + }, + { + "time": 0.2, + "value": 3.89, + "curve": [ 0.289, 0.95, 0.477, -6.85 ] + }, + { + "time": 0.6667, + "value": -6.06, + "curve": [ 0.809, -5.49, 0.953, -3.36 ] + }, + { + "time": 1.0333, + "value": -2.66, + "curve": [ 1.255, -0.73, 1.708, 0 ] + }, + { "time": 1.9333 } + ], + "translate": [ + { "time": 1.4667 }, + { "time": 1.9, "x": 5.8, "y": -14.31 }, + { "time": 2.0333, "x": 7.96, "y": -4.52 }, + { "time": 2.1333 } + ] + }, + "front-leg-target": { + "rotate": [ + { "value": -0.31 } + ], + "translate": [ + { + "curve": [ 0.138, 0.68, 0.144, 63.75, 0.092, 0, 0.15, 21.48 ] + }, + { + "time": 0.2, + "x": 63.06, + "y": 22.03, + "curve": [ 0.315, 61.65, 0.292, -25.03, 0.315, 23.29, 0.356, -56.94 ] + }, + { + "time": 0.5, + "x": -29.09, + "y": -56.75, + "curve": [ 0.601, -31.05, 0.583, 104.34, 0.589, -56.64, 0.583, 47.28 ] + }, + { "time": 0.7, "x": 104.34, "y": 47.28 }, + { + "time": 1.3667, + "x": 106.2, + "y": 47.7, + "curve": [ 1.538, 105.92, 1.633, 88.98, 1.552, 49.6, 1.633, 40.88 ] + }, + { + "time": 1.7333, + "x": 49.5, + "y": 28.71, + "curve": [ 1.842, 7.01, 2.025, -0.54, 1.842, 15.61, 2.025, 0 ] + }, + { "time": 2.1333 } + ] + }, + "back-leg-target": { + "translate": [ + {}, + { "time": 0.2, "x": 5.58, "y": 4.02 }, + { + "time": 0.4667, + "x": -39.15, + "y": -10.18, + "curve": [ 0.512, -15.45, 0.563, 1.22, 0.512, 9.94, 0.563, 28.79 ] + }, + { "time": 0.6333, "x": 17.09, "y": 42.26 }, + { "time": 0.7333, "x": 30.54, "y": 59.35 }, + { + "time": 1.4667, + "x": 31.18, + "y": 60.17, + "curve": [ 1.567, 24.16, 1.607, 12.61, 1.564, 55.67, 1.613, 36.27 ] + }, + { "time": 1.6667, "x": -19.04, "y": -0.52 }, + { "time": 2.1333 } + ] + }, + "spineboy-hip": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, 10.98 ] + }, + { + "time": 0.1, + "value": 10.98, + "curve": [ 0.157, 10.98, 0.238, 8.08 ] + }, + { + "time": 0.3333, + "value": 8.02, + "curve": [ 0.391, 7.98, 0.432, 11.76 ] + }, + { + "time": 0.4667, + "value": 11.66, + "curve": [ 0.491, 11.58, 0.504, 11.4 ] + }, + { + "time": 0.5333, + "value": 7.39, + "curve": [ 0.577, 1.45, 0.627, -5.5 ] + }, + { + "time": 0.7, + "value": -7.47, + "curve": [ 0.821, -10.75, 0.917, -11.16 ] + }, + { + "time": 1, + "value": -11.16, + "curve": [ 1.13, -11.16, 1.359, 3.64 ] + }, + { + "time": 1.5333, + "value": 3.43, + "curve": [ 1.603, 3.89, 1.637, -25.96 ] + }, + { + "time": 1.7, + "value": -25.96, + "curve": [ 1.811, -26.33, 1.881, 9.15 ] + }, + { + "time": 1.9667, + "value": 9.05, + "curve": [ 2.034, 8.97, 2.092, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "curve": [ 0.025, 0, 0.075, -3.14, 0.025, 0, 0.075, 4.23 ] + }, + { + "time": 0.1, + "x": -2.69, + "y": 4.23, + "curve": [ 0.131, -2.14, 0.167, 3.27, 0.125, 4.23, 0.183, -2.98 ] + }, + { + "time": 0.2, + "x": 17.13, + "y": -6.44, + "curve": [ 0.214, 22.78, 0.275, 27.63, 0.235, -13.6, 0.274, -24.33 ] + }, + { + "time": 0.3, + "x": 27.63, + "y": -24.78, + "curve": [ 0.342, 27.63, 0.425, 23.61, 0.349, -25.62, 0.441, -8.74 ] + }, + { + "time": 0.4667, + "x": 23.61, + "y": -8.32, + "curve": [ 0.483, 23.61, 0.508, 20.92, 0.486, -7.99, 0.508, -37.58 ] + }, + { + "time": 0.5333, + "x": 35.42, + "y": -44.36, + "curve": [ 0.551, 45.68, 0.608, 70.81, 0.569, -53.86, 0.616, -66.98 ] + }, + { + "time": 0.6333, + "x": 70.81, + "y": -72.81, + "curve": [ 0.65, 70.81, 0.679, 65.64, 0.648, -77.73, 0.671, -76.48 ] + }, + { + "time": 0.7, + "x": 62.91, + "y": -76.91, + "curve": [ 0.725, 59.54, 0.775, 59.86, 0.73, -77.35, 0.775, -54.3 ] + }, + { + "time": 0.8, + "x": 59.86, + "y": -54.3, + "curve": [ 0.825, 59.86, 0.867, 59.93, 0.825, -54.3, 0.865, -55.33 ] + }, + { + "time": 0.9, + "x": 60.79, + "y": -56.69, + "curve": [ 0.946, 62, 0.962, 62.29, 0.923, -57.6, 0.951, -57.62 ] + }, + { + "time": 1, + "x": 63.78, + "y": -57.73, + "curve": [ 1.038, 65.26, 1.106, 68.28, 1.058, -57.86, 1.1, -57.63 ] + }, + { + "time": 1.1333, + "x": 69.44, + "y": -57.41, + "curve": [ 1.217, 72.97, 1.333, 77.13, 1.226, -56.82, 1.316, -55.55 ] + }, + { + "time": 1.4, + "x": 77.13, + "y": -53.65, + "curve": [ 1.433, 77.13, 1.467, 73.12, 1.437, -52.82, 1.492, -50.91 ] + }, + { + "time": 1.5333, + "x": 63.41, + "y": -49.52, + "curve": [ 1.549, 61.17, 1.597, 46.67, 1.576, -48.09, 1.599, -47.25 ] + }, + { + "time": 1.6333, + "x": 38.86, + "y": -45.65, + "curve": [ 1.687, 27.26, 1.722, 20.8, 1.677, -43.62, 1.71, -40.67 ] + }, + { + "time": 1.7333, + "x": 19.46, + "y": -38, + "curve": [ 1.803, 11.67, 1.885, 5.59, 1.758, -35.11, 1.888, -14.53 ] + }, + { + "time": 1.9333, + "x": 4.11, + "y": -7.78, + "curve": [ 2.006, 1.87, 2.083, 0, 1.96, -3.77, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2, "value": -21.93 }, + { "time": 0.3, "value": -23.29 }, + { "time": 0.4333, "value": -29.8 }, + { "time": 0.5333, "value": -36.62 }, + { "time": 0.6333, "value": -40.49 }, + { "time": 0.7, "value": -38.28 }, + { "time": 0.7667, "value": -33.33 }, + { "time": 0.8333, "value": -28.06 }, + { "time": 1.4333, "value": -27.17 }, + { "time": 1.5333, "value": -27.62 }, + { "time": 1.7 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.0667, "x": 1.11, "y": -2.35 }, + { "time": 0.3, "x": 21.56, "y": -45.67 }, + { "time": 0.5667, "x": 2.23, "y": -34.98 }, + { "time": 0.7333, "x": 28.52, "y": -47.75 }, + { "time": 0.8333, "x": 24.52, "y": -37.92 }, + { "time": 1.5, "x": 26.24, "y": -38.24 }, + { "time": 1.7, "x": -9.39, "y": -0.72 }, + { "time": 1.8667, "x": 1.03, "y": -21.86 }, + { "time": 2.1333 } + ] + }, + "gun": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.075, -16.45 ] + }, + { + "time": 0.1, + "value": -16.38, + "curve": [ 0.186, -16.14, 0.268, -2.86 ] + }, + { + "time": 0.3, + "value": -2.83, + "curve": [ 0.342, -2.79, 0.427, -27.51 ] + }, + { + "time": 0.4333, + "value": -29.46, + "curve": [ 0.508, -53.36, 0.613, -60.85 ] + }, + { + "time": 0.6333, + "value": -60.92, + "curve": [ 0.711, -61.15, 0.734, -27.93 ] + }, + { + "time": 0.7667, + "value": -23.27, + "curve": [ 0.785, -20.65, 0.852, -13.39 ] + }, + { + "time": 0.9, + "value": -13.36, + "curve": [ 0.952, -13.33, 1.002, -20.79 ] + }, + { + "time": 1.0333, + "value": -20.87, + "curve": [ 1.206, -21.35, 1.432, -17.1 ] + }, + { + "time": 1.5, + "value": -14.02, + "curve": [ 1.549, -11.78, 1.65, 15.4 ] + }, + { + "time": 1.7, + "value": 15.4, + "curve": [ 1.733, 15.4, 1.8, 9.7 ] + }, + { + "time": 1.8333, + "value": 2.78, + "curve": [ 1.875, -5.94, 1.908, -25.4 ] + }, + { + "time": 1.9333, + "value": -25.23, + "curve": [ 2.015, -24.66, 2.108, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.308, 0, 0.525, -18.37, 0.308, 0, 0.525, -9.19 ] + }, + { + "time": 0.6333, + "x": -18.37, + "y": -9.19, + "curve": [ 0.9, -18.37, 1.433, 0, 0.9, -9.19, 1.433, 0 ] + }, + { "time": 1.7 } + ] + }, + "tail1": { + "rotate": [ + { + "curve": [ 0.098, 0.13, 0.204, -14.76 ] + }, + { + "time": 0.2667, + "value": -14.69, + "curve": [ 0.453, -14.49, 0.578, 19.55 ] + }, + { + "time": 0.9333, + "value": 19.85, + "curve": [ 1.08, 19.98, 1.328, 16.46 ] + }, + { + "time": 1.4333, + "value": 9.05, + "curve": [ 1.532, 2.13, 1.565, -5.76 ] + }, + { + "time": 1.7, + "value": -5.74, + "curve": [ 1.739, -5.73, 1.771, 1.08 ] + }, + { + "time": 1.8, + "value": 1.06, + "curve": [ 1.853, 1.04, 1.956, -1.66 ] + }, + { + "time": 2, + "value": -1.81, + "curve": [ 2.039, -1.95, 2.08, -0.07 ] + }, + { "time": 2.1333 } + ] + }, + "tail3": { + "rotate": [ + { + "value": -4.66, + "curve": [ 0.053, -3.48, 0.21, 0.22 ] + }, + { + "time": 0.2667, + "value": 0.23, + "curve": [ 0.331, 0.24, 0.337, -16.21 ] + }, + { + "time": 0.4333, + "value": -16.22, + "curve": [ 0.521, -16.24, 0.565, -5.72 ] + }, + { + "time": 0.6667, + "value": -5.73, + "curve": [ 0.743, -5.73, 0.805, -9.29 ] + }, + { + "time": 0.8333, + "value": -9.89, + "curve": [ 0.878, -10.85, 0.93, -11.71 ] + }, + { + "time": 1, + "value": -11.85, + "curve": [ 1.032, -11.91, 1.065, -10.91 ] + }, + { + "time": 1.1, + "value": -10.92, + "curve": [ 1.142, -10.93, 1.19, -11.14 ] + }, + { + "time": 1.2333, + "value": -11.21, + "curve": [ 1.268, -11.27, 1.296, -10.85 ] + }, + { + "time": 1.3333, + "value": -10.84, + "curve": [ 1.389, -10.83, 1.422, -12.91 ] + }, + { + "time": 1.4667, + "value": -12.9, + "curve": [ 1.523, -12.89, 1.594, 0.83 ] + }, + { + "time": 1.6667, + "value": 0.91, + "curve": [ 1.722, 0.97, 1.763, -1.01 ] + }, + { + "time": 1.8, + "value": -2.92, + "curve": [ 1.837, -4.84, 1.889, -7.19 ] + }, + { + "time": 1.9667, + "value": -7.21, + "curve": [ 2.039, -7.24, 2.081, -5.7 ] + }, + { "time": 2.1333, "value": -4.66 } + ] + }, + "tail5": { + "rotate": [ + { + "value": 5.3, + "curve": [ 0.036, 7.51, 0.233, 22.33 ] + }, + { + "time": 0.2667, + "value": 22.33, + "curve": [ 0.325, 22.33, 0.414, -17.46 ] + }, + { + "time": 0.5, + "value": -17.34, + "curve": [ 0.554, -17.27, 0.622, -8.56 ] + }, + { + "time": 0.6667, + "value": -3.3, + "curve": [ 0.68, -1.76, 0.718, 2.89 ] + }, + { + "time": 0.8, + "value": 2.99, + "curve": [ 0.87, 3.07, 0.878, -6.27 ] + }, + { + "time": 0.9333, + "value": -6.3, + "curve": [ 0.953, -6.31, 1.022, -0.18 ] + }, + { + "time": 1.0667, + "value": -0.19, + "curve": [ 1.141, -0.21, 1.247, -1.67 ] + }, + { + "time": 1.3333, + "value": -1.68, + "curve": [ 1.445, -1.69, 1.533, 6.2 ] + }, + { + "time": 1.6333, + "value": 6.15, + "curve": [ 1.783, 6.09, 1.796, 2.3 ] + }, + { + "time": 1.9333, + "value": 2.27, + "curve": [ 2.022, 2.41, 2.09, 3.96 ] + }, + { "time": 2.1333, "value": 5.3 } + ] + }, + "tail7": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.024, -9.39, 0.083, 2.54 ] + }, + { + "time": 0.1, + "value": 5.38, + "curve": [ 0.12, 8.69, 0.201, 19.39 ] + }, + { + "time": 0.2667, + "value": 19.39, + "curve": [ 0.326, 19.38, 0.373, 10.75 ] + }, + { + "time": 0.4, + "value": 6.64, + "curve": [ 0.425, 2.85, 0.527, -17.3 ] + }, + { + "time": 0.6, + "value": -17.31, + "curve": [ 0.729, -17.34, 0.751, 6.3 ] + }, + { + "time": 0.8, + "value": 6.38, + "curve": [ 0.868, 6.5, 0.914, -11.69 ] + }, + { + "time": 0.9667, + "value": -11.4, + "curve": [ 0.995, -11.24, 1.044, -1.32 ] + }, + { + "time": 1.1, + "value": -1.44, + "curve": [ 1.143, -1.54, 1.18, -10.37 ] + }, + { + "time": 1.2667, + "value": -10.23, + "curve": [ 1.295, -10.19, 1.34, -3.84 ] + }, + { + "time": 1.4333, + "value": -4.1, + "curve": [ 1.553, -4.43, 1.585, -16.61 ] + }, + { + "time": 1.6333, + "value": -16.61, + "curve": [ 1.688, -16.61, 1.696, 23.74 ] + }, + { + "time": 1.7333, + "value": 23.71, + "curve": [ 1.798, 23.66, 1.87, 16.5 ] + }, + { + "time": 1.9, + "value": 10.29, + "curve": [ 1.923, 5.57, 1.978, -13.06 ] + }, + { + "time": 2.0667, + "value": -13.03, + "curve": [ 2.081, -13.06, 2.106, -12.38 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tail9": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.033, -10.89, 0.109, -16.1 ] + }, + { + "time": 0.1667, + "value": -15.69, + "curve": [ 0.2, -15.45, 0.263, 24 ] + }, + { + "time": 0.3, + "value": 23.95, + "curve": [ 0.341, 23.91, 0.38, 20.42 ] + }, + { + "time": 0.4, + "value": 13.72, + "curve": [ 0.436, 1.64, 0.469, -22.42 ] + }, + { + "time": 0.5667, + "value": -22.06, + "curve": [ 0.592, -21.97, 0.619, -12.65 ] + }, + { + "time": 0.6333, + "value": -12.97, + "curve": [ 0.649, -13.32, 0.672, -23.19 ] + }, + { + "time": 0.7333, + "value": -23.77, + "curve": [ 0.753, -23.95, 0.784, 18.1 ] + }, + { + "time": 0.8333, + "value": 18.04, + "curve": [ 0.896, 17.97, 0.968, -8.44 ] + }, + { + "time": 1.0667, + "value": -8.3, + "curve": [ 1.102, -8.25, 1.147, 1.32 ] + }, + { + "time": 1.2, + "value": 1.29, + "curve": [ 1.225, 1.28, 1.264, -9.04 ] + }, + { + "time": 1.3333, + "value": -9.07, + "curve": [ 1.359, -9.08, 1.367, -0.8 ] + }, + { + "time": 1.4, + "value": -0.93, + "curve": [ 1.45, -1.14, 1.485, -13.55 ] + }, + { + "time": 1.5333, + "value": -13.67, + "curve": [ 1.589, -13.81, 1.592, -4.95 ] + }, + { + "time": 1.6333, + "value": -4.9, + "curve": [ 1.659, -4.87, 1.672, -6.82 ] + }, + { + "time": 1.7, + "value": -6.85, + "curve": [ 1.732, -6.89, 1.741, 23.58 ] + }, + { + "time": 1.8, + "value": 23.61, + "curve": [ 1.855, 23.65, 1.942, -2.54 ] + }, + { + "time": 1.9667, + "value": -7.74, + "curve": [ 1.979, -10.39, 2.03, -19.23 ] + }, + { + "time": 2.0667, + "value": -19.56, + "curve": [ 2.092, -19.79, 2.116, -10.89 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tongue2": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.192, -3.18 ] + }, + { + "time": 0.2, + "value": -3.18, + "curve": [ 0.217, -3.18, 0.25, 52.29 ] + }, + { + "time": 0.2667, + "value": 52.29, + "curve": [ 0.333, 52.29, 0.506, 33.61 ] + }, + { + "time": 0.5333, + "value": 17.71, + "curve": [ 0.545, 10.61, 0.575, -38.38 ] + }, + { + "time": 0.6, + "value": -63.26, + "curve": [ 0.613, -75.71, 0.625, -74.25 ] + }, + { + "time": 0.6333, + "value": -74.25, + "curve": [ 0.65, -74.25, 0.666, -50.57 ] + }, + { + "time": 0.7, + "value": -42.92, + "curve": [ 0.715, -39.42, 0.803, -33.62 ] + }, + { + "time": 0.8333, + "value": -32.97, + "curve": [ 0.884, -31.92, 0.934, -31.56 ] + }, + { + "time": 0.9667, + "value": -31.29, + "curve": [ 1.012, -30.9, 1.051, -29.92 ] + }, + { + "time": 1.0667, + "value": -28.95, + "curve": [ 1.105, -26.65, 1.142, -20.34 ] + }, + { + "time": 1.1667, + "value": -20.34, + "curve": [ 1.192, -20.34, 1.242, -24.26 ] + }, + { + "time": 1.2667, + "value": -24.26, + "curve": [ 1.283, -24.26, 1.317, -19.87 ] + }, + { + "time": 1.3333, + "value": -19.87, + "curve": [ 1.358, -19.87, 1.428, -21.71 ] + }, + { + "time": 1.4333, + "value": -22.11, + "curve": [ 1.481, -25.54, 1.508, -36.17 ] + }, + { + "time": 1.5333, + "value": -36.17, + "curve": [ 1.575, -36.17, 1.648, -17.58 ] + }, + { + "time": 1.7, + "value": -13.32, + "curve": [ 1.748, -9.35, 1.861, -3.44 ] + }, + { + "time": 1.9333, + "value": -1.54, + "curve": [ 1.975, -0.45, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.283, 0, 0.423, -0.54, 0.283, 0, 0.435, 0.96 ] + }, + { + "time": 0.5333, + "x": 6.19, + "y": 1.39, + "curve": [ 0.567, 8.27, 0.633, 45.26, 0.555, 1.49, 0.62, 1.67 ] + }, + { + "time": 0.6667, + "x": 57.07, + "y": 1.67, + "curve": [ 0.706, 70.68, 0.76, 94.14, 0.729, 1.67, 0.764, 1.67 ] + }, + { + "time": 0.8333, + "x": 94.09, + "y": 1.67, + "curve": [ 1.21, 93.82, 1.098, 7.05, 1.195, 1.67, 1.676, 1.67 ] + }, + { + "time": 1.9333, + "x": 6.19, + "y": 1.67, + "curve": [ 1.983, 6.14, 2.083, 0, 1.983, 1.67, 2.083, 0 ] + }, + { "time": 2.1333 } + ] + }, + "tongue3": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.142, -1.29 ] + }, + { + "time": 0.2, + "value": 4.21, + "curve": [ 0.209, 5.09, 0.25, 52.29 ] + }, + { + "time": 0.2667, + "value": 52.29, + "curve": [ 0.333, 52.29, 0.491, 43.05 ] + }, + { + "time": 0.5333, + "value": 17.71, + "curve": [ 0.551, 6.94, 0.577, -41.44 ] + }, + { + "time": 0.6, + "value": -50.22, + "curve": [ 0.613, -55.02, 0.625, -24.1 ] + }, + { + "time": 0.6333, + "value": -24.1, + "curve": [ 0.65, -24.1, 0.683, 52.67 ] + }, + { + "time": 0.7, + "value": 52.67, + "curve": [ 0.733, 52.67, 0.8, -50.91 ] + }, + { + "time": 0.8333, + "value": -50.91, + "curve": [ 0.867, -50.91, 0.933, 36.54 ] + }, + { + "time": 0.9667, + "value": 36.54, + "curve": [ 0.992, 36.54, 1.042, -47.34 ] + }, + { + "time": 1.0667, + "value": -47.34, + "curve": [ 1.092, -47.34, 1.142, 5.53 ] + }, + { + "time": 1.1667, + "value": 5.53, + "curve": [ 1.192, 5.53, 1.242, -19.25 ] + }, + { + "time": 1.2667, + "value": -19.94, + "curve": [ 1.298, -20.82, 1.313, -13.2 ] + }, + { + "time": 1.3333, + "value": -2.03, + "curve": [ 1.368, 17.44, 1.408, 54.04 ] + }, + { + "time": 1.4333, + "value": 54.04, + "curve": [ 1.458, 54.04, 1.519, 43.79 ] + }, + { + "time": 1.5333, + "value": 35.49, + "curve": [ 1.581, 8.1, 1.658, -36.24 ] + }, + { + "time": 1.7, + "value": -36.24, + "curve": [ 1.758, -36.24, 1.875, 13.61 ] + }, + { + "time": 1.9333, + "value": 13.61, + "curve": [ 1.983, 13.61, 2.083, 0 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "time": 0.2, + "curve": [ 0.283, 0, 0.45, 11.48, 0.283, 0, 0.45, 3.7 ] + }, + { "time": 0.5333, "x": 11.48, "y": 3.7 }, + { "time": 2.1333 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -2.53, + "curve": [ 0.079, -2.45, 0.302, -25.1 ] + }, + { + "time": 0.3333, + "value": -25.81, + "curve": [ 0.389, -27.07, 0.484, -26.23 ] + }, + { + "time": 0.5333, + "value": -26.79, + "curve": [ 0.561, -27.1, 0.608, -31.99 ] + }, + { + "time": 0.6333, + "value": -31.97, + "curve": [ 0.725, -31.89, 0.763, -10.53 ] + }, + { + "time": 0.8333, + "value": -7.75, + "curve": [ 0.911, -4.71, 1.308, -5.82 ] + }, + { + "time": 1.4667, + "value": -5.82, + "curve": [ 1.541, -5.82, 1.632, -4.15 ] + }, + { + "time": 1.7, + "value": -4.14, + "curve": [ 1.766, -4.13, 1.845, -11.09 ] + }, + { + "time": 1.9333, + "value": -11.09, + "curve": [ 1.983, -11.09, 2.083, -2.53 ] + }, + { "time": 2.1333, "value": -2.53 } + ], + "translate": [ + { + "curve": [ 0.083, 0, 0.25, 11.69, 0.083, 0, 0.25, -2.81 ] + }, + { + "time": 0.3333, + "x": 11.69, + "y": -2.81, + "curve": [ 0.408, 11.69, 0.558, 0, 0.408, -2.81, 0.558, 0 ] + }, + { "time": 0.6333 } + ], + "scale": [ + { + "time": 0.6333, + "curve": [ 0.65, 1, 0.666, 1.076, 0.65, 1, 0.683, 1 ] + }, + { + "time": 0.7, + "x": 1.103, + "curve": [ 0.737, 1.132, 0.8, 1.162, 0.733, 1, 0.8, 1 ] + }, + { + "time": 0.8333, + "x": 1.162, + "curve": [ 1.05, 1.162, 1.483, 1, 1.05, 1, 1.483, 1 ] + }, + { "time": 1.7 } + ] + }, + "front-foot-target": { + "rotate": [ + { + "curve": [ 0.074, -0.1, 0.093, -16.93 ] + }, + { + "time": 0.1, + "value": -19.19, + "curve": [ 0.117, -24.39, 0.157, -24.35 ] + }, + { + "time": 0.2, + "value": -24.36, + "curve": [ 0.252, -24.36, 0.311, -22.81 ] + }, + { + "time": 0.4333, + "value": -22.8, + "curve": [ 0.628, -22.79, 0.776, -25.56 ] + }, + { + "time": 1.2333, + "value": -25.57, + "curve": [ 1.378, -25.58, 1.525, 2.24 ] + }, + { + "time": 1.7333, + "value": 2.24, + "curve": [ 1.797, 2.48, 1.732, -17.39 ] + }, + { + "time": 1.8, + "value": -17.18, + "curve": [ 1.923, -16.81, 2.073, 0.17 ] + }, + { "time": 2.1333 } + ], + "translate": [ + { + "y": 1.27, + "curve": [ 0.027, -0.41, 0.053, -46.34, 0.023, 3.93, 0.05, 71.17 ] + }, + { + "time": 0.0667, + "x": -73.27, + "y": 71.17, + "curve": [ 0.088, -115.35, 0.169, -316.46, 0.103, 71.88, 0.17, 60.5 ] + }, + { + "time": 0.2, + "x": -392.1, + "y": 9.43, + "curve": [ 0.231, -419.09, 0.231, -422.04, 0.231, 9.43, 0.231, 9.43 ] + }, + { "time": 0.2667, "x": -422.04, "y": 9.43, "curve": "stepped" }, + { + "time": 0.6, + "x": -422.04, + "y": 9.43, + "curve": [ 0.643, -422.04, 0.688, -403.61, 0.643, 9.43, 0.688, 9.43 ] + }, + { "time": 0.7333, "x": -403.61, "y": 9.43, "curve": "stepped" }, + { + "time": 1.7333, + "x": -403.61, + "y": 9.43, + "curve": [ 1.769, -403.61, 1.793, -341.64, 1.768, 9.43, 1.783, 111.02 ] + }, + { + "time": 1.8, + "x": -308.05, + "y": 111.02, + "curve": [ 1.813, -248.48, 1.9, 0, 1.858, 109.79, 1.928, 38.95 ] + }, + { + "time": 1.9333, + "curve": [ 1.983, 0, 2.083, 0.76, 1.983, 0, 2.122, 0 ] + }, + { "time": 2.1333, "y": 1.27 } + ] + }, + "front-foot2": { + "rotate": [ + {}, + { "time": 0.0333, "value": -17.85 }, + { "time": 0.0667, "value": -27.51 }, + { "time": 0.1, "value": -21.45 }, + { "time": 0.1333, "value": -12.42 }, + { "time": 0.1667, "value": -1.36 }, + { "time": 0.2, "value": -17.5 }, + { "time": 0.6, "value": -17.43 }, + { "time": 0.7, "value": -21.13, "curve": "stepped" }, + { "time": 1.7333, "value": -21.13 }, + { "time": 1.8, "value": -41.83 }, + { "time": 1.8667, "value": -1.1 }, + { "time": 1.9333 } + ] + }, + "front-foot3": { + "rotate": [ + {}, + { "time": 0.0333, "value": 1.2 }, + { "time": 0.1, "value": 8.93 }, + { + "time": 0.2, + "value": 26.93, + "curve": [ 0.217, 26.93, 0.224, 25.26 ] + }, + { "time": 0.2333, "value": 16.32, "curve": "stepped" }, + { "time": 1.7333, "value": 16.32 }, + { "time": 1.7667, "value": 24.81 }, + { "time": 1.8, "value": -12.37 }, + { "time": 1.8333, "value": -17.66 }, + { "time": 1.9, "value": 9.39 }, + { "time": 1.9333, "value": 16.11 }, + { "time": 2 } + ], + "translate": [ + { "x": -29.67, "curve": "stepped" }, + { "time": 1.7333, "x": -29.67 }, + { "time": 1.8, "x": -34.03, "y": 8.95 }, + { "time": 2.1333, "x": -29.67 } + ] + }, + "back-hand2": { + "rotate": [ + { "value": -21.46 }, + { "time": 0.2, "value": -21.93 }, + { "time": 0.3, "value": -8.39 }, + { "time": 0.4333, "value": -5.38 }, + { "time": 0.5333, "value": -30.38 }, + { "time": 0.6333, "value": -55.56 }, + { "time": 0.7, "value": -18.74 }, + { "time": 0.7667, "value": -20.26 }, + { "time": 0.8333, "value": -21.46 } + ] + }, + "saddle": { + "rotate": [ + { + "value": -3.18, + "curve": [ 0.042, -3.18, 0.132, -3.3 ] + }, + { + "time": 0.1667, + "value": -3.04, + "curve": [ 0.278, -2.2, 0.517, 8.87 ] + }, + { + "time": 0.6333, + "value": 8.87, + "curve": [ 0.683, 8.87, 0.772, -1.92 ] + }, + { + "time": 0.8333, + "value": -2.37, + "curve": [ 0.9, -2.86, 1.258, -3.18 ] + }, + { + "time": 1.4, + "value": -3.18, + "curve": [ 1.458, -3.18, 1.575, -7.06 ] + }, + { + "time": 1.6333, + "value": -7.06, + "curve": [ 1.715, -7.06, 1.86, -0.12 ] + }, + { + "time": 1.9667, + "value": -0.07, + "curve": [ 2.05, -0.03, 2.09, -3.18 ] + }, + { "time": 2.1333, "value": -3.18 } + ], + "translate": [ + { + "x": 12.68, + "y": -2.67, + "curve": [ 0.042, 12.68, 0.125, 22.76, 0.042, -2.67, 0.125, -3.36 ] + }, + { + "time": 0.1667, + "x": 22.76, + "y": -3.36, + "curve": [ 0.283, 22.76, 0.517, 9.26, 0.283, -3.36, 0.517, -0.42 ] + }, + { + "time": 0.6333, + "x": 9.26, + "y": -0.42, + "curve": [ 0.658, 9.26, 0.708, 12.68, 0.658, -0.42, 0.708, -2.67 ] + }, + { "time": 0.7333, "x": 12.68, "y": -2.67 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "value": -0.37, + "curve": [ 0.067, -0.37, 0.2, -0.95 ] + }, + { + "time": 0.2667, + "value": -0.95, + "curve": [ 0.325, -0.95, 0.466, -15.05 ] + }, + { + "time": 0.5, + "value": -17.95, + "curve": [ 0.567, -23.58, 0.6, -27.12 ] + }, + { + "time": 0.6333, + "value": -27.12, + "curve": [ 0.658, -27.12, 0.688, -23.12 ] + }, + { + "time": 0.7333, + "value": -18.56, + "curve": [ 0.75, -16.89, 0.803, -13.87 ] + }, + { + "time": 0.8333, + "value": -12.02, + "curve": [ 0.866, -10.04, 0.97, -6.28 ] + }, + { + "time": 1.0667, + "value": -6.13, + "curve": [ 1.133, -6.02, 1.204, -10.67 ] + }, + { + "time": 1.2667, + "value": -10.07, + "curve": [ 1.394, -8.87, 1.514, -1.13 ] + }, + { + "time": 1.6, + "value": -1.13, + "curve": [ 1.675, -1.13, 1.825, -6.56 ] + }, + { + "time": 1.9, + "value": -6.68, + "curve": [ 1.952, -6.76, 1.982, -6.39 ] + }, + { + "time": 2, + "value": -5.97, + "curve": [ 2.033, -5.22, 2.1, -0.37 ] + }, + { "time": 2.1333, "value": -0.37 } + ], + "translate": [ + { + "curve": [ 0.125, 0, 0.375, -17.92, 0.125, 0, 0.375, -1.75 ] + }, + { + "time": 0.5, + "x": -17.92, + "y": -1.75, + "curve": [ 0.589, -17.92, 0.707, -7.06, 0.589, -1.75, 0.707, -4.51 ] + }, + { + "time": 0.8333, + "x": -2.9, + "y": -6.57, + "curve": [ 1.102, 5.81, 1.414, 11.49, 1.102, -10.87, 1.414, -16.3 ] + }, + { + "time": 1.6, + "x": 11.49, + "y": -16.3, + "curve": [ 1.733, 11.49, 2, 0, 1.733, -16.3, 2, 0 ] + }, + { "time": 2.1333 } + ] + }, + "spineboy-back-arm-target": { + "translate": [ + {}, + { "time": 0.6333, "x": 56.17, "y": -58.56 }, + { "time": 0.8333, "x": 34.47, "y": -59.19 }, + { "time": 2.1333 } + ] + }, + "tail2": { + "rotate": [ + { + "value": -4.33, + "curve": [ 0.027, -1.91, 0.124, 3.51 ] + }, + { + "time": 0.1667, + "value": 6.45, + "curve": [ 0.211, 9.51, 0.278, 10.89 ] + }, + { + "time": 0.3333, + "value": 10.99, + "curve": [ 0.392, 11.09, 0.385, -13.61 ] + }, + { + "time": 0.5, + "value": -13.56, + "curve": [ 0.614, -13.52, 0.636, -5.75 ] + }, + { + "time": 0.7, + "value": -5.76, + "curve": [ 0.787, -5.77, 0.831, -10.17 ] + }, + { + "time": 0.9667, + "value": -10.46, + "curve": [ 1.072, -10.68, 1.279, -8.29 ] + }, + { + "time": 1.3333, + "value": -6.23, + "curve": [ 1.389, -4.11, 1.509, 5.53 ] + }, + { + "time": 1.5333, + "value": 9.75, + "curve": [ 1.551, 12.82, 1.619, 27.3 ] + }, + { + "time": 1.6667, + "value": 27.26, + "curve": [ 1.734, 27.21, 1.763, 9.86 ] + }, + { + "time": 1.8, + "value": 5.3, + "curve": [ 1.836, 0.84, 1.926, -9.62 ] + }, + { + "time": 2, + "value": -9.49, + "curve": [ 2.071, -9.36, 2.091, -7.25 ] + }, + { "time": 2.1333, "value": -4.33 } + ], + "translate": [ + { + "curve": [ 0.133, 0, 0.435, 3.44, 0.133, 0, 0.4, 0 ] + }, + { + "time": 0.5333, + "x": 11.88, + "curve": [ 0.618, 19.17, 0.84, 41.3, 0.575, 0, 0.848, 4.02 ] + }, + { + "time": 0.9667, + "x": 41.27, + "y": 4.03, + "curve": [ 1.78, 41.12, 1.763, 0.25, 1.213, 4.03, 1.848, 0.08 ] + }, + { "time": 2.1333 } + ] + }, + "tail4": { + "rotate": [ + { + "value": 13.37, + "curve": [ 0.033, 13.37, 0.101, 11.83 ] + }, + { + "time": 0.1333, + "value": 11.78, + "curve": [ 0.201, 11.66, 0.233, 16.73 ] + }, + { + "time": 0.2667, + "value": 16.73, + "curve": [ 0.289, 16.73, 0.316, 16.02 ] + }, + { + "time": 0.3333, + "value": 13.79, + "curve": [ 0.391, 6.36, 0.456, -4.32 ] + }, + { + "time": 0.4667, + "value": -5.61, + "curve": [ 0.482, -7.52, 0.499, -10.14 ] + }, + { + "time": 0.5667, + "value": -10.33, + "curve": [ 0.576, -10.36, 0.616, -10.01 ] + }, + { + "time": 0.6667, + "value": -8.03, + "curve": [ 0.781, -3.75, 0.935, 3.38 ] + }, + { + "time": 1, + "value": 4.13, + "curve": [ 1.033, 4.52, 1.063, 4.54 ] + }, + { + "time": 1.1333, + "value": 4.55, + "curve": [ 1.176, 4.56, 1.221, 4.12 ] + }, + { + "time": 1.2667, + "value": 4.18, + "curve": [ 1.349, 4.28, 1.417, 4.99 ] + }, + { + "time": 1.4333, + "value": 5.83, + "curve": [ 1.466, 7.48, 1.557, 19.49 ] + }, + { + "time": 1.6333, + "value": 19.57, + "curve": [ 1.775, 19.71, 1.857, 7.44 ] + }, + { + "time": 1.9667, + "value": 7.46, + "curve": [ 2.045, 7.48, 2.092, 13.37 ] + }, + { "time": 2.1333, "value": 13.37 } + ] + }, + "tail6": { + "rotate": [ + { + "value": 5.3, + "curve": [ 0.026, 7.49, 0.15, 12.9 ] + }, + { + "time": 0.2, + "value": 17.27, + "curve": [ 0.251, 21.71, 0.291, 24.53 ] + }, + { + "time": 0.3333, + "value": 24.59, + "curve": [ 0.403, 24.69, 0.376, -22.01 ] + }, + { + "time": 0.5333, + "value": -21.87, + "curve": [ 0.601, -21.81, 0.697, -13.33 ] + }, + { + "time": 0.7333, + "value": -10.11, + "curve": [ 0.748, -8.78, 0.863, 4.36 ] + }, + { + "time": 0.9333, + "value": 4.22, + "curve": [ 0.974, 4.13, 1.063, 1.22 ] + }, + { + "time": 1.1, + "value": 1.32, + "curve": [ 1.145, 1.44, 1.196, 6.12 ] + }, + { + "time": 1.2333, + "value": 6.08, + "curve": [ 1.279, 6.03, 1.324, -4.69 ] + }, + { + "time": 1.4333, + "value": -5.05, + "curve": [ 1.505, -5.28, 1.608, -1.45 ] + }, + { + "time": 1.6333, + "value": 0.1, + "curve": [ 1.647, 0.95, 1.722, 20.39 ] + }, + { + "time": 1.8, + "value": 20.34, + "curve": [ 1.888, 20.3, 1.878, -3.6 ] + }, + { + "time": 2, + "value": -3.58, + "curve": [ 2.055, -3.58, 2.121, 3.57 ] + }, + { "time": 2.1333, "value": 5.3 } + ] + }, + "tail8": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.081, -11.05, 0.147, 13.08 ] + }, + { + "time": 0.1667, + "value": 15.43, + "curve": [ 0.186, 17.83, 0.268, 21.77 ] + }, + { + "time": 0.3333, + "value": 21.83, + "curve": [ 0.472, 21.96, 0.454, -21.07 ] + }, + { + "time": 0.5, + "value": -21.25, + "curve": [ 0.544, -20.58, 0.551, -10.78 ] + }, + { + "time": 0.6, + "value": -10.88, + "curve": [ 0.618, -10.92, 0.651, -17.9 ] + }, + { + "time": 0.6667, + "value": -17.69, + "curve": [ 0.694, -17.33, 0.795, 1.24 ] + }, + { + "time": 0.8333, + "value": 3.93, + "curve": [ 0.858, 5.72, 0.886, 7.58 ] + }, + { + "time": 0.9333, + "value": 7.55, + "curve": [ 0.982, 7.53, 0.948, -9.49 ] + }, + { + "time": 1.0333, + "value": -9.59, + "curve": [ 1.083, -9.64, 1.1, -4.47 ] + }, + { + "time": 1.1333, + "value": -4.45, + "curve": [ 1.195, -4.4, 1.198, -11.22 ] + }, + { + "time": 1.2667, + "value": -11.14, + "curve": [ 1.314, -11.08, 1.359, -8.01 ] + }, + { + "time": 1.4667, + "value": -8.41, + "curve": [ 1.523, -8.63, 1.603, -26.32 ] + }, + { + "time": 1.6667, + "value": -26.16, + "curve": [ 1.702, -26.06, 1.729, 19.38 ] + }, + { + "time": 1.8, + "value": 19.14, + "curve": [ 1.862, 18.93, 1.956, -1.69 ] + }, + { + "time": 1.9667, + "value": -3.18, + "curve": [ 2.006, -8.48, 2.092, -10.76 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "tail10": { + "rotate": [ + { + "value": -10.89, + "curve": [ 0.033, -10.89, 0.111, -30.73 ] + }, + { + "time": 0.1667, + "value": -30.9, + "curve": [ 0.229, -31.08, 0.335, 27.4 ] + }, + { + "time": 0.4, + "value": 27.6, + "curve": [ 0.439, 27.72, 0.524, -27.93 ] + }, + { + "time": 0.5667, + "value": -27.88, + "curve": [ 0.62, -27.81, 0.664, -24.25 ] + }, + { + "time": 0.7, + "value": -20.93, + "curve": [ 0.734, -17.79, 0.814, 5.46 ] + }, + { + "time": 0.8333, + "value": 13.09, + "curve": [ 0.842, 16.62, 0.87, 28.27 ] + }, + { + "time": 0.9, + "value": 28.51, + "curve": [ 0.947, 28.9, 0.985, -19.51 ] + }, + { + "time": 1, + "value": -22.12, + "curve": [ 1.01, -23.84, 1.038, -31.09 ] + }, + { + "time": 1.0667, + "value": -31.14, + "curve": [ 1.103, -31.22, 1.133, 19.55 ] + }, + { + "time": 1.1667, + "value": 19.35, + "curve": [ 1.201, 19.15, 1.213, -14.84 ] + }, + { + "time": 1.3, + "value": -14.94, + "curve": [ 1.347, -14.99, 1.37, 11.37 ] + }, + { + "time": 1.4, + "value": 11.31, + "curve": [ 1.432, 11.24, 1.523, -27.59 ] + }, + { + "time": 1.5333, + "value": -31.27, + "curve": [ 1.565, -42.53, 1.588, -42.01 ] + }, + { + "time": 1.6, + "value": -42.01, + "curve": [ 1.64, -41.99, 1.753, -25.24 ] + }, + { + "time": 1.7667, + "value": -18.25, + "curve": [ 1.778, -12.25, 1.82, 14.24 ] + }, + { + "time": 1.9, + "value": 14.82, + "curve": [ 1.929, 14.81, 2.041, -14.3 ] + }, + { + "time": 2.0667, + "value": -14.15, + "curve": [ 2.096, -13.98, 2.11, -10.93 ] + }, + { "time": 2.1333, "value": -10.89 } + ] + }, + "jaw-inside": { + "rotate": [ + {}, + { "time": 0.7667, "value": 13.77 }, + { "time": 2.1333 } + ], + "translate": [ + {}, + { "time": 0.6, "x": -4.3, "y": 4.48 }, + { "time": 0.7667, "x": -23.59, "y": -9.32 }, + { "time": 2.1333 } + ], + "scale": [ + { "time": 0.6 }, + { "time": 0.7667, "x": 1.119 }, + { "time": 2.1333 } + ] + }, + "bone": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.125, 6.63 ] + }, + { + "time": 0.1667, + "value": 6.63, + "curve": [ 0.192, 6.63, 0.242, 2.54 ] + }, + { + "time": 0.2667, + "value": 2.54, + "curve": [ 0.308, 2.54, 0.406, 11.71 ] + }, + { + "time": 0.4333, + "value": 12.45, + "curve": [ 0.491, 14, 0.6, 14.87 ] + }, + { + "time": 0.7, + "value": 14.69, + "curve": [ 0.725, 14.64, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.825, -1.4, 0.887, 5.02 ] + }, + { + "time": 0.9, + "value": 5.61, + "curve": [ 0.936, 7.29, 1, 9.11 ] + }, + { + "time": 1.0333, + "value": 9.11, + "curve": [ 1.058, 9.11, 1.108, 6.88 ] + }, + { + "time": 1.1333, + "value": 6.88, + "curve": [ 1.158, 6.88, 1.208, 10.51 ] + }, + { + "time": 1.2333, + "value": 10.51, + "curve": [ 1.258, 10.51, 1.308, 6.4 ] + }, + { + "time": 1.3333, + "value": 6.4, + "curve": [ 1.358, 6.4, 1.408, 14.34 ] + }, + { + "time": 1.4333, + "value": 14.34, + "curve": [ 1.45, 14.34, 1.496, 0.94 ] + }, + { + "time": 1.5, + "value": 0.49, + "curve": [ 1.525, -2.03, 1.575, -5.85 ] + }, + { + "time": 1.6, + "value": -5.85, + "curve": [ 1.625, -5.85, 1.675, 4.87 ] + }, + { + "time": 1.7, + "value": 4.87, + "curve": [ 1.717, 4.87, 1.75, -1.8 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.817, -1.8, 1.917, 13.56 ] + }, + { + "time": 1.9667, + "value": 13.56, + "curve": [ 2.008, 13.56, 2.092, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.042, 0, 0.146, -2.69 ] + }, + { + "time": 0.1667, + "value": -4.33, + "curve": [ 0.219, -8.51, 0.262, -16.86 ] + }, + { + "time": 0.2667, + "value": -17.98, + "curve": [ 0.308, -27.29, 0.392, -48.51 ] + }, + { + "time": 0.4333, + "value": -48.51, + "curve": [ 0.5, -48.51, 0.633, 6.49 ] + }, + { + "time": 0.7, + "value": 6.49, + "curve": [ 0.725, 6.49, 0.765, 3.58 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.848, -8.2, 0.875, -10.86 ] + }, + { + "time": 0.9, + "value": -10.86, + "curve": [ 0.933, -10.86, 1, -4.95 ] + }, + { + "time": 1.0333, + "value": -4.95, + "curve": [ 1.058, -4.95, 1.108, -14.48 ] + }, + { + "time": 1.1333, + "value": -14.48, + "curve": [ 1.158, -14.48, 1.208, -10.43 ] + }, + { + "time": 1.2333, + "value": -10.43, + "curve": [ 1.258, -10.43, 1.308, -28.38 ] + }, + { + "time": 1.3333, + "value": -28.38, + "curve": [ 1.358, -28.38, 1.43, -14.4 ] + }, + { + "time": 1.4333, + "value": -13.27, + "curve": [ 1.45, -7.85, 1.483, 0.49 ] + }, + { + "time": 1.5, + "value": 0.49, + "curve": [ 1.525, 0.49, 1.594, -14.84 ] + }, + { + "time": 1.6, + "value": -15.95, + "curve": [ 1.637, -22.9, 1.675, -38.34 ] + }, + { + "time": 1.7, + "value": -38.34, + "curve": [ 1.717, -38.34, 1.749, -24.54 ] + }, + { + "time": 1.7667, + "value": -21.29, + "curve": [ 1.81, -13.5, 1.902, -4.2 ] + }, + { + "time": 1.9667, + "value": 2.36, + "curve": [ 2, 5.78, 2.022, 7.84 ] + }, + { + "time": 2.0667, + "value": 8.12, + "curve": [ 2.1, 8.33, 2.1, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.064, -0.37 ] + }, + { + "time": 0.1, + "value": -2.21, + "curve": [ 0.125, -3.49, 0.155, -5.64 ] + }, + { + "time": 0.1667, + "value": -6.06, + "curve": [ 0.208, -7.52, 0.242, -7.08 ] + }, + { + "time": 0.2667, + "value": -7.08, + "curve": [ 0.375, -7.08, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.98, 3.03 ] + }, + { + "time": 1.0333, + "value": 2.98, + "curve": [ 1.076, 2.94, 1.149, 3.42 ] + }, + { + "time": 1.1667, + "value": 3.92, + "curve": [ 1.185, 4.42, 1.222, 5.94 ] + }, + { + "time": 1.2667, + "value": 5.9, + "curve": [ 1.299, 5.87, 1.305, 0.43 ] + }, + { + "time": 1.3667, + "value": 0.38, + "curve": [ 1.432, 0.32, 1.437, 2.12 ] + }, + { + "time": 1.4667, + "value": 2.12, + "curve": [ 1.491, 2.12, 1.514, -6.82 ] + }, + { + "time": 1.5667, + "value": -9.65, + "curve": [ 1.582, -10.49, 1.616, -10.48 ] + }, + { + "time": 1.6333, + "value": -10.48, + "curve": [ 1.65, -10.48, 1.725, -3.32 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.786, -1.1, 1.932, 0.99 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.989, 2.33, 2.006, 6.83 ] + }, + { + "time": 2.0333, + "value": 6.85, + "curve": [ 2.065, 6.87, 2.109, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.064, 0.8 ] + }, + { + "time": 0.1, + "value": -1.04, + "curve": [ 0.125, -2.32, 0.16, -5.18 ] + }, + { + "time": 0.1667, + "value": -5.78, + "curve": [ 0.207, -9.38, 0.242, -15.67 ] + }, + { + "time": 0.2667, + "value": -15.67, + "curve": [ 0.375, -15.67, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.984, 2.94 ] + }, + { + "time": 1.0333, + "value": 3, + "curve": [ 1.085, 3.06, 1.133, 3.41 ] + }, + { + "time": 1.1667, + "value": 4.6, + "curve": [ 1.213, 6.21, 1.234, 8.82 ] + }, + { + "time": 1.2667, + "value": 8.27, + "curve": [ 1.302, 7.7, 1.313, 0.66 ] + }, + { + "time": 1.3667, + "value": 0.43, + "curve": [ 1.413, 0.24, 1.437, 3 ] + }, + { + "time": 1.4667, + "value": 3, + "curve": [ 1.491, 3, 1.515, -15.25 ] + }, + { + "time": 1.5667, + "value": -15.03, + "curve": [ 1.601, -14.89, 1.626, -12.84 ] + }, + { + "time": 1.6333, + "value": -12.25, + "curve": [ 1.674, -9, 1.75, -1.8 ] + }, + { + "time": 1.7667, + "value": -1.8, + "curve": [ 1.784, -1.8, 1.804, -12.17 ] + }, + { + "time": 1.8333, + "value": -12.06, + "curve": [ 1.872, -11.93, 1.935, -3.2 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.986, 4.89, 2.008, 10.05 ] + }, + { + "time": 2.0333, + "value": 9.69, + "curve": [ 2.07, 9.18, 2.088, 0 ] + }, + { "time": 2.1333 } + ] + }, + "bone5": { + "rotate": [ + { + "curve": [ 0.025, 0, 0.062, 28.42 ] + }, + { + "time": 0.1, + "value": 28.6, + "curve": [ 0.147, 28.83, 0.153, 11.26 ] + }, + { + "time": 0.1667, + "value": 7.14, + "curve": [ 0.184, 2.13, 0.242, -3.09 ] + }, + { + "time": 0.2667, + "value": -3.09, + "curve": [ 0.375, -3.09, 0.558, 14.69 ] + }, + { + "time": 0.6667, + "value": 14.69, + "curve": [ 0.692, 14.69, 0.775, -1.4 ] + }, + { + "time": 0.8, + "value": -1.4, + "curve": [ 0.817, -1.4, 0.883, 3.9 ] + }, + { + "time": 0.9, + "value": 3.9, + "curve": [ 0.939, 3.9, 0.985, -10.79 ] + }, + { + "time": 1.0333, + "value": -11.13, + "curve": [ 1.076, -11.41, 1.131, 1.61 ] + }, + { + "time": 1.1667, + "value": 9.66, + "curve": [ 1.176, 11.68, 1.223, 16.67 ] + }, + { + "time": 1.2667, + "value": 17.42, + "curve": [ 1.291, 17.84, 1.325, 1.33 ] + }, + { + "time": 1.3667, + "value": 1.77, + "curve": [ 1.4, 2.12, 1.437, 13.5 ] + }, + { + "time": 1.4667, + "value": 13.5, + "curve": [ 1.491, 13.5, 1.53, 12.52 ] + }, + { + "time": 1.5667, + "value": 6.34, + "curve": [ 1.592, 2.04, 1.625, -8.5 ] + }, + { + "time": 1.6333, + "value": -9.29, + "curve": [ 1.668, -12.54, 1.752, -12.67 ] + }, + { + "time": 1.7667, + "value": -13.33, + "curve": [ 1.796, -14.63, 1.798, -16.98 ] + }, + { + "time": 1.8333, + "value": -16.88, + "curve": [ 1.885, -16.74, 1.93, -6.63 ] + }, + { + "time": 1.9667, + "value": 1.81, + "curve": [ 1.989, 7.11, 2.008, 15.58 ] + }, + { + "time": 2.0333, + "value": 15.21, + "curve": [ 2.07, 14.7, 2.109, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-leg1": { + "rotate": [ + { "value": -10.53 } + ] + }, + "spineboy-front-foot-target": { + "translate": [ + { + "curve": [ 0.075, 0, 0.225, 12.33, 0.075, 0, 0.225, 10.25 ] + }, + { + "time": 0.3, + "x": 12.33, + "y": 10.25, + "curve": [ 0.758, 12.33, 1.675, 0, 0.758, 10.25, 1.675, 0 ] + }, + { "time": 2.1333 } + ] + }, + "front-arm": { + "rotate": [ + { + "value": -14.35, + "curve": [ 0.133, -14.35, 0.4, -19.58 ] + }, + { "time": 0.5333, "value": -19.58 } + ], + "translate": [ + { + "curve": [ 0.033, 0, 0.1, -7.25, 0.033, 0, 0.1, -6.08 ] + }, + { + "time": 0.1333, + "x": -7.25, + "y": -6.08, + "curve": [ 0.167, -7.25, 0.233, -9.9, 0.167, -6.08, 0.233, -6.36 ] + }, + { + "time": 0.2667, + "x": -9.9, + "y": -6.36, + "curve": [ 0.292, -9.9, 0.342, -18.75, 0.292, -6.36, 0.342, -3.94 ] + }, + { + "time": 0.3667, + "x": -18.75, + "y": -3.94, + "curve": [ 0.442, -18.75, 0.592, -6.67, 0.442, -3.94, 0.621, -5.2 ] + }, + { + "time": 0.6667, + "x": -6.67, + "y": -5.49, + "curve": [ 0.766, -6.67, 0.886, -6.5, 0.906, -7.04, 0.862, -6.67 ] + }, + { + "time": 1, + "x": -6.32, + "y": -7.71, + "curve": [ 1.142, -6.09, 1.277, -5.84, 1.153, -8.88, 1.277, -10.04 ] + }, + { + "time": 1.3667, + "x": -5.84, + "y": -10.04, + "curve": [ 1.415, -5.84, 1.452, -5.89, 1.415, -10.04, 1.434, -9.81 ] + }, + { + "time": 1.4667, + "x": -5.93, + "y": -9.67, + "curve": [ 1.567, -6.22, 1.62, -6.67, 1.51, -9.48, 1.71, -9.28 ] + }, + { + "time": 1.8, + "x": -6.67, + "y": -9.26, + "curve": [ 1.883, -6.67, 2.05, 0, 1.883, -9.25, 2.05, 0 ] + }, + { "time": 2.1333 } + ], + "scale": [ + { + "curve": [ 0.036, 1, 0.083, 1.024, 0.036, 1, 0.083, 1.001 ] + }, + { + "time": 0.1333, + "x": 1.024, + "y": 1.001, + "curve": [ 0.259, 1.024, 0.411, 1, 0.259, 1.001, 0.411, 1 ] + }, + { + "time": 0.5, + "curve": [ 0.575, 1, 0.592, 1.192, 0.575, 1, 0.592, 1 ] + }, + { + "time": 0.6667, + "x": 1.192, + "curve": [ 0.75, 1.192, 0.858, 1.081, 0.75, 1, 0.858, 1 ] + }, + { + "time": 0.9333, + "x": 1.081, + "curve": [ 1.017, 1.081, 0.917, 1.085, 1.017, 1, 0.917, 1 ] + }, + { + "time": 1, + "x": 1.085, + "curve": [ 1.1, 1.085, 1.267, 1.087, 1.1, 1, 1.267, 1 ] + }, + { + "time": 1.3667, + "x": 1.087, + "curve": [ 1.375, 1.087, 1.418, 1.125, 1.375, 1, 1.418, 1 ] + }, + { + "time": 1.4667, + "x": 1.162, + "curve": [ 1.502, 1.188, 1.676, 1.354, 1.502, 1, 1.676, 1 ] + }, + { + "time": 1.8, + "x": 1.301, + "curve": [ 1.841, 1.284, 2.109, 1, 1.841, 1, 2.109, 1 ] + }, + { "time": 2.1333 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.4333, "value": -19.63 }, + { "time": 0.8333, "value": -15.18 }, + { "time": 1.3333, "value": -5.96 }, + { "time": 1.7667, "value": -18.16 }, + { "time": 2.1333 } + ], + "translate": [ + {}, + { "time": 0.4333, "x": -1.45, "y": 16.31, "curve": "stepped" }, + { "time": 1, "x": -1.45, "y": 16.31 }, + { "time": 2.1333 } + ] + }, + "back-arm": { + "rotate": [ + { "value": 44.83 } + ], + "scale": [ + { "time": 0.4667 }, + { "time": 0.5667, "x": 1.088 }, + { "time": 0.6667, "x": 1.311 }, + { "time": 0.7667, "x": 1.211 }, + { "time": 1.2, "x": 1.008 }, + { "time": 1.5667, "x": 1.137 }, + { "time": 1.8333 } + ] + }, + "back-bracer": { + "rotate": [ + { "value": -108.62 } + ] + }, + "back-leg1": { + "rotate": [ + { "value": -8.96 } + ] + }, + "back-leg2": { + "rotate": [ + { "value": -19.65 } + ] + }, + "back-leg3": { + "rotate": [ + { "value": 19.47 } + ] + }, + "back-foot1": { + "rotate": [ + { "value": 1.53 } + ] + }, + "back-thigh": { + "rotate": [ + { "value": 6.63 } + ] + }, + "back-knee": { + "rotate": [ + { "value": -8.23 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 72.21 } + ] + }, + "front-leg2": { + "rotate": [ + { "value": -9.63 } + ] + }, + "front-leg3": { + "rotate": [ + { "value": 3.66 } + ] + }, + "front-foot1": { + "rotate": [ + { "value": 0.4 } + ] + }, + "front-thigh": { + "rotate": [ + { "value": 8.81 } + ] + }, + "lower-leg": { + "rotate": [ + { "value": -12.66 } + ] + }, + "stirrup-strap1": { + "rotate": [ + { "value": 5.25 } + ] + }, + "stirrup-strap2": { + "rotate": [ + { "value": -9.39 } + ] + }, + "head-control": { + "translate": [ + { + "curve": [ 0.054, 0, 0.199, -1.25, 0.072, 1.29, 0.192, -16.81 ] + }, + { + "time": 0.2333, + "x": -7.11, + "y": -16.81, + "curve": [ 0.327, -23.29, 0.379, -49.73, 0.317, -16.81, 0.452, 14.65 ] + }, + { + "time": 0.5667, + "x": -48.04, + "y": 14.37, + "curve": [ 0.653, -47.8, 0.826, -35.85, 0.674, 14.1, 0.729, -25.53 ] + }, + { + "time": 0.8333, + "x": -35.79, + "y": -25.53, + "curve": [ 0.867, -35.49, 0.908, -35.48, 0.858, -25.53, 0.908, -15.45 ] + }, + { + "time": 0.9333, + "x": -35.48, + "y": -15.45, + "curve": [ 0.967, -35.48, 1.039, -37.97, 0.967, -15.45, 1.033, -22.04 ] + }, + { + "time": 1.0667, + "x": -39.2, + "y": -22.04, + "curve": [ 1.135, -42.29, 1.163, -43.43, 1.1, -22.04, 1.167, -6.45 ] + }, + { + "time": 1.2, + "x": -44.12, + "y": -6.45, + "curve": [ 1.24, -44.87, 1.325, -45.15, 1.242, -6.45, 1.287, -13.6 ] + }, + { + "time": 1.3667, + "x": -45.15, + "y": -13.61, + "curve": [ 1.417, -45.15, 1.517, -47.61, 1.448, -13.61, 1.509, -1.81 ] + }, + { + "time": 1.5667, + "x": -47.61, + "y": -1.61, + "curve": [ 1.617, -47.61, 1.671, -48.3, 1.653, -1.32, 1.756, -23.41 ] + }, + { + "time": 1.7667, + "x": -37.45, + "y": -28.41, + "curve": [ 1.791, -34.66, 1.814, -20.75, 1.796, -41.85, 1.804, -47.93 ] + }, + { + "time": 1.8333, + "x": -18.68, + "y": -47.78, + "curve": [ 1.92, -9.88, 1.961, -5.23, 1.906, -47.41, 1.952, -34.09 ] + }, + { + "time": 2, + "x": -3.41, + "y": -22.62, + "curve": [ 2.045, -1.31, 2.1, 0, 2.013, -19.49, 2.1, 0 ] + }, + { "time": 2.1333 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.017, 0, 0.05, 0, 0.017, 0, 0.05, 102.43 ] + }, + { + "time": 0.0667, + "y": 102.43, + "curve": [ 0.1, 0, 0.15, 0, 0.1, 102.43, 0.15, 97.83 ] + }, + { + "time": 0.2, + "y": 93.23, + "curve": [ 0.223, 0, 0.246, 0, 0.223, 91.13, 0.246, -33.33 ] + }, + { + "time": 0.2667, + "y": -34.99, + "curve": [ 0.292, 0, 0.315, 0, 0.292, -36.97, 0.315, 84.03 ] + }, + { + "time": 0.3333, + "y": 84.03, + "curve": [ 0.35, 0, 0.383, 0, 0.35, 84.03, 0.383, 22.16 ] + }, + { + "time": 0.4, + "y": 22.16, + "curve": [ 0.467, 0, 0.6, 11.4, 0.467, 22.16, 0.6, -252.93 ] + }, + { + "time": 0.6667, + "x": 11.4, + "y": -252.93, + "curve": [ 0.7, 11.4, 0.767, 11.4, 0.7, -252.93, 0.767, -174.39 ] + }, + { + "time": 0.8, + "x": 11.4, + "y": -174.39, + "curve": [ 0.825, 11.4, 0.875, 11.4, 0.825, -174.39, 0.875, -201.79 ] + }, + { + "time": 0.9, + "x": 11.4, + "y": -201.79, + "curve": [ 0.925, 11.4, 0.975, 11.4, 0.925, -201.79, 0.975, -174.33 ] + }, + { + "time": 1, + "x": 11.4, + "y": -174.33, + "curve": [ 1.033, 11.4, 1.1, 11.4, 1.033, -174.33, 1.1, -221.22 ] + }, + { + "time": 1.1333, + "x": 11.4, + "y": -221.22, + "curve": [ 1.167, 11.4, 1.233, 11.4, 1.167, -221.22, 1.233, -167.36 ] + }, + { + "time": 1.2667, + "x": 11.4, + "y": -167.36, + "curve": [ 1.308, 11.4, 1.392, 11.4, 1.308, -167.36, 1.392, -214.56 ] + }, + { + "time": 1.4333, + "x": 11.4, + "y": -214.56, + "curve": [ 1.508, 11.4, 1.725, 11.4, 1.508, -214.56, 1.725, 48.39 ] + }, + { + "time": 1.8, + "x": 11.4, + "y": 48.39, + "curve": [ 1.857, 11.4, 1.953, 6.13, 1.857, 48.39, 1.953, -139.31 ] + }, + { + "time": 2.0333, + "x": 2.76, + "y": -153.62, + "curve": [ 2.072, 1.2, 2.107, 0, 2.072, -160.25, 2.107, 0 ] + }, + { "time": 2.1333 } + ] + } + }, + "ik": { + "front-leg-ik": [ + { "softness": 73.5, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + { "softness": 15.4, "stretch": true } + ], + "spineboy-front-arm-ik": [ + { "softness": 15, "stretch": true } + ], + "spineboy-front-leg-ik": [ + { "softness": 19.9, "bendPositive": false } + ] + }, + "drawOrder": [ + { + "offsets": [ + { "slot": "raptor-horn", "offset": 4 }, + { "slot": "front-thigh", "offset": -5 } + ] + } + ] + }, + "walk": { + "slots": { + "raptor-jaw-inside": { + "rgba": [ + { "color": "646464ff" }, + { "time": 0.6333, "color": "808080ff" }, + { "time": 1.2667, "color": "646464ff" } + ] + }, + "tail-shadow": { + "rgba": [ + { + "color": "00000000", + "curve": [ 0.158, 0, 0.442, 0, 0.158, 0, 0.442, 0, 0.158, 0, 0.442, 0, 0.158, 0, 0.441, 0.2 ] + }, + { + "time": 0.6, + "color": "00000033", + "curve": [ 0.633, 0, 1.075, 0, 0.633, 0, 1.075, 0, 0.633, 0, 1.075, 0, 0.805, 0.2, 1.075, 0 ] + }, + { "time": 1.2333, "color": "00000000" } + ], + "attachment": [ + { "name": "raptor-tail-shadow" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.27, -32.53 ] + }, + { + "time": 0.3667, + "value": -51.26, + "curve": [ 0.411, -59.91, 0.559, -84.04 ] + }, + { + "time": 0.6333, + "value": -84.29, + "curve": [ 1.183, -83.79, 1.129, 0.25 ] + }, + { "time": 1.2667 } + ], + "translate": [ + { "x": 381.92, "y": 36.5 }, + { "time": 0.6333, "x": -134.72, "y": 37.42 }, + { + "time": 0.7, + "x": -171.19, + "y": 126.07, + "curve": [ 0.733, -171.19, 0.798, -142.14, 0.74, 182.63, 0.8, 238.01 ] + }, + { + "time": 0.8333, + "x": -70.41, + "y": 238.01, + "curve": [ 0.845, -46.13, 1.125, 418.07, 0.983, 235.62, 1.129, 141.43 ] + }, + { + "time": 1.1667, + "x": 418.07, + "y": 115.18, + "curve": [ 1.192, 418.07, 1.231, 404.25, 1.202, 89.98, 1.2, 84.96 ] + }, + { "time": 1.2667, "x": 381.92, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { + "value": -4.78, + "curve": [ 0.033, -4.18, 0.05, -3.99 ] + }, + { + "time": 0.0667, + "value": -3.99, + "curve": [ 0.142, -3.99, 0.292, -12.5 ] + }, + { + "time": 0.3667, + "value": -12.5, + "curve": [ 0.477, -12.56, 0.584, -4.05 ] + }, + { + "time": 0.7, + "value": -3.99, + "curve": [ 0.775, -3.89, 0.925, -12.5 ] + }, + { + "time": 1, + "value": -12.5, + "curve": [ 1.067, -12.5, 1.216, -6.08 ] + }, + { "time": 1.2667, "value": -4.78 } + ], + "translate": [ + { + "x": 161.93, + "y": 34.05, + "curve": [ 0.022, 155.35, 0.047, 146.41, 0.021, 20.48, 0.039, 1.4 ] + }, + { + "time": 0.0667, + "x": 146.25, + "y": 1.68, + "curve": [ 0.124, 146.16, 0.29, 209.86, 0.18, 2.76, 0.294, 142.08 ] + }, + { + "time": 0.4, + "x": 209.5, + "y": 140.69, + "curve": [ 0.562, 208.96, 0.624, 145.35, 0.537, 141.96, 0.63, 4.69 ] + }, + { + "time": 0.7, + "x": 145.67, + "y": 2.06, + "curve": [ 0.745, 145.86, 0.928, 209.19, 0.818, 3.05, 0.95, 138.66 ] + }, + { + "time": 1.0333, + "x": 209.19, + "y": 139.3, + "curve": [ 1.1, 209.19, 1.221, 175.02, 1.13, 140.4, 1.235, 58.97 ] + }, + { "time": 1.2667, "x": 161.93, "y": 34.05 } + ] + }, + "back-foot-target": { + "rotate": [ + { + "value": -80.75, + "curve": [ 0.198, -90.08, 0.228, -92.2 ] + }, + { + "time": 0.3667, + "value": -92.34, + "curve": [ 0.42, -92.39, 0.517, -45.34 ] + }, + { + "time": 0.5667, + "value": -45.34, + "curve": [ 0.655, -45.71, 1.097, -71.9 ] + }, + { "time": 1.2667, "value": -80.75 } + ], + "translate": [ + { + "x": -187.61, + "y": -15.47, + "curve": [ 0.049, -223.65, 0.093, -245.68, 0.092, -17.15, 0.095, -1.05 ] + }, + { + "time": 0.1333, + "x": -245.95, + "y": 31.3, + "curve": [ 0.166, -245.38, 0.315, 6.48, 0.173, 64.21, 0.228, 125.64 ] + }, + { + "time": 0.3667, + "x": 86.5, + "y": 124.4, + "curve": [ 0.382, 110.05, 0.518, 358.22, 0.462, 123.17, 0.549, 44.45 ] + }, + { + "time": 0.5667, + "x": 361.92, + "y": 29.91, + "curve": [ 0.583, 361.92, 0.579, 373.34, 0.597, 4.36, 0.603, 0.79 ] + }, + { "time": 0.6333, "x": 316.72, "y": -26.42 }, + { "time": 1.2667, "x": -187.61, "y": -15.47 } + ] + }, + "front-leg1": { + "translate": [ + { + "curve": [ 0.017, 0, 0.3, 0.01, 0.017, 0, 0.293, 13.2 ] + }, + { + "time": 0.3667, + "x": -0.27, + "y": 13.9, + "curve": [ 0.46, -0.66, 0.548, -1.22, 0.44, 14.6, 0.57, 15.77 ] + }, + { + "time": 0.6333, + "x": -2.25, + "y": 16.95, + "curve": [ 0.705, -3.11, 0.783, -4.75, 0.697, 18.15, 0.783, 31.94 ] + }, + { + "time": 0.8333, + "x": -4.75, + "y": 31.94, + "curve": [ 0.875, -4.75, 0.963, -4.5, 0.875, 31.94, 0.985, 27.76 ] + }, + { + "time": 1, + "x": -3.8, + "y": 25.55, + "curve": [ 1.07, -2.46, 1.2, 0, 1.033, 20.56, 1.2, 0 ] + }, + { "time": 1.2667 } + ] + }, + "front-leg-target": { + "translate": [ + { + "x": -18.05, + "y": -2.89, + "curve": [ 0.135, -18.7, 0.286, -40.73, 0.171, -2.56, 0.416, -51.29 ] + }, + { + "time": 0.5333, + "x": -42.2, + "y": -52.27, + "curve": [ 0.558, -42.2, 0.568, -44.03, 0.558, -52.27, 0.608, -22.52 ] + }, + { + "time": 0.6333, + "x": -36.87, + "y": -22.52, + "curve": [ 0.702, -29.26, 0.783, -26.32, 0.683, -22.52, 0.763, -44.03 ] + }, + { + "time": 0.8333, + "x": -26.32, + "y": -72.37, + "curve": [ 0.875, -26.32, 0.939, -42.98, 0.855, -81, 0.916, -109.88 ] + }, + { + "time": 1, + "x": -42.64, + "y": -109.99, + "curve": [ 1.176, -42.56, 1.221, -18.42, 1.18, -110.24, 1.217, -3.39 ] + }, + { "time": 1.2667, "x": -18.05, "y": -2.89 } + ] + }, + "back-leg-target": { + "rotate": [ + { "value": 2.39 } + ], + "translate": [ + { + "x": -24.54, + "y": 15.12, + "curve": [ 0.135, -24.49, 0.417, -40.42, 0.121, 14.56, 0.327, -140.88 ] + }, + { + "time": 0.5667, + "x": -40.21, + "y": -141.76, + "curve": [ 0.705, -40.01, 1.147, -24.39, 0.939, -143.13, 1.122, 15.12 ] + }, + { "time": 1.2667, "x": -24.54, "y": 15.12 } + ] + }, + "tail1": { + "rotate": [ + { + "value": -1.81, + "curve": [ 0.091, -1.81, 0.208, 12.33 ] + }, + { + "time": 0.3333, + "value": 12.33, + "curve": [ 0.431, 12.33, 0.532, -1.81 ] + }, + { + "time": 0.6333, + "value": -1.81, + "curve": [ 0.735, -1.81, 0.838, 11.62 ] + }, + { + "time": 0.9333, + "value": 11.62, + "curve": [ 1.06, 11.62, 1.176, -1.81 ] + }, + { "time": 1.2667, "value": -1.81 } + ] + }, + "torso1": { + "rotate": [ + { + "value": 7.22, + "curve": [ 0.048, 7.93, 0.072, 8.38 ] + }, + { + "time": 0.1333, + "value": 8.39, + "curve": [ 0.202, 8.4, 0.302, 2.44 ] + }, + { + "time": 0.3667, + "value": 2.44, + "curve": [ 0.433, 2.44, 0.588, 6.89 ] + }, + { + "time": 0.6, + "value": 7.22, + "curve": [ 0.618, 7.7, 0.683, 8.43 ] + }, + { + "time": 0.7333, + "value": 8.43, + "curve": [ 0.83, 8.43, 0.91, 2.42 ] + }, + { + "time": 0.9667, + "value": 2.42, + "curve": [ 1.033, 2.42, 1.212, 6.06 ] + }, + { "time": 1.2667, "value": 7.22 } + ] + }, + "saddle": { + "rotate": [ + { "value": -2.52 }, + { "time": 0.3667, "value": -4.17 }, + { "time": 0.6333, "value": -3.85 }, + { "time": 1, "value": -3.1 }, + { "time": 1.2667, "value": -2.52 } + ], + "translate": [ + { "x": 5.87, "y": -0.06 }, + { + "time": 0.3667, + "curve": [ 0.377, -0.01, 0.417, -0.04, 0.377, 1.66, 0.417, 5.92 ] + }, + { + "time": 0.4333, + "x": -0.04, + "y": 5.92, + "curve": [ 0.518, -0.04, 0.603, -6.88, 0.518, 5.92, 0.603, 1.38 ] + }, + { "time": 0.6333, "x": -8.81, "y": 0.1 }, + { "time": 0.7, "x": -7.83, "y": -2.27 }, + { + "time": 1, + "curve": [ 1.01, -0.01, 1.05, -0.04, 1.01, 1.66, 1.05, 5.92 ] + }, + { + "time": 1.0667, + "x": -0.04, + "y": 5.92, + "curve": [ 1.151, -0.04, 1.237, 4.57, 1.151, 5.92, 1.237, 1.25 ] + }, + { "time": 1.2667, "x": 5.87, "y": -0.06 } + ] + }, + "torso2": { + "rotate": [ + { + "value": -4.19, + "curve": [ 0.092, -4.19, 0.275, -2.54 ] + }, + { + "time": 0.3667, + "value": -2.54, + "curve": [ 0.433, -2.54, 0.567, -4.19 ] + }, + { + "time": 0.6333, + "value": -4.19, + "curve": [ 0.725, -4.19, 0.908, -2.57 ] + }, + { + "time": 1, + "value": -2.57, + "curve": [ 1.067, -2.57, 1.2, -4.19 ] + }, + { "time": 1.2667, "value": -4.19 } + ], + "translate": [ + { + "curve": [ 0.087, -1.87, 0.131, -1.57, 0.098, 9.88, 0.131, 12.61 ] + }, + { + "time": 0.1667, + "x": -1.57, + "y": 12.61, + "curve": [ 0.246, -1.57, 0.278, 8.5, 0.246, 12.61, 0.258, -10.38 ] + }, + { + "time": 0.3667, + "x": 8.38, + "y": -10.24, + "curve": [ 0.453, 8.25, 0.581, 1.81, 0.441, -10.14, 0.598, -3.48 ] + }, + { + "time": 0.6333, + "x": 0.09, + "curve": [ 0.666, -0.98, 0.764, -1.48, 0.667, 3.32, 0.764, 12.61 ] + }, + { + "time": 0.8, + "x": -1.48, + "y": 12.61, + "curve": [ 0.88, -1.48, 0.937, 8.5, 0.88, 12.61, 0.907, -10.4 ] + }, + { + "time": 1.0333, + "x": 8.38, + "y": -10.24, + "curve": [ 1.12, 8.26, 1.218, 2.68, 1.101, -10.15, 1.195, -5.21 ] + }, + { "time": 1.2667 } + ] + }, + "front-arm1": { + "rotate": [ + { + "value": -348.35, + "curve": [ 0.305, -348.39, 0.452, -330.1 ] + }, + { + "time": 0.6333, + "value": -329.45, + "curve": [ 0.927, -329.66, 0.992, -347.92 ] + }, + { "time": 1.2667, "value": -348.35 } + ], + "translate": [ + { + "x": 8.89, + "y": 9.56, + "curve": [ 0.065, 11.51, 0.276, 24.33, 0.111, 9.62, 0.302, 1.67 ] + }, + { + "time": 0.3667, + "x": 24.1, + "y": -1.47, + "curve": [ 0.479, 23.82, 0.545, 23.42, 0.424, -4.23, 0.533, -7.49 ] + }, + { + "time": 0.6333, + "x": 20.65, + "y": -7.55, + "curve": [ 0.724, 17.83, 0.908, 4.35, 0.725, -7.6, 0.903, -1.56 ] + }, + { + "time": 1, + "x": 4.35, + "y": 2.31, + "curve": [ 1.058, 4.35, 1.197, 6.14, 1.052, 4.38, 1.17, 9.44 ] + }, + { "time": 1.2667, "x": 8.89, "y": 9.56 } + ] + }, + "neck": { + "rotate": [ + { + "value": -22.13, + "curve": [ 0.092, -22.13, 0.275, -4.12 ] + }, + { + "time": 0.3667, + "value": -4.12, + "curve": [ 0.433, -4.12, 0.567, -22.13 ] + }, + { + "time": 0.6333, + "value": -22.13, + "curve": [ 0.725, -22.13, 0.908, -4.12 ] + }, + { + "time": 1, + "value": -4.12, + "curve": [ 1.067, -4.12, 1.2, -22.13 ] + }, + { "time": 1.2667, "value": -22.13 } + ], + "translate": [ + { + "x": 19.46, + "y": -14.29, + "curve": [ 0.046, 22.71, 0.064, 24.67, 0.027, -20.08, 0.067, -33.27 ] + }, + { + "time": 0.1, + "x": 24.7, + "y": -32.71, + "curve": [ 0.121, 24.71, 0.187, 5.34, 0.136, -32.09, 0.207, -18.93 ] + }, + { + "time": 0.2333, + "x": 5.16, + "y": -13.23, + "curve": [ 0.287, 4.94, 0.337, 5.54, 0.274, -4.5, 0.332, 3.98 ] + }, + { + "time": 0.3667, + "x": 7.2, + "y": 3.98, + "curve": [ 0.426, 10.51, 0.575, 18.6, 0.433, 3.98, 0.6, -8.7 ] + }, + { + "time": 0.6333, + "x": 21.66, + "y": -14.29, + "curve": [ 0.668, 23.45, 0.697, 24.53, 0.668, -20.07, 0.697, -32.36 ] + }, + { + "time": 0.7333, + "x": 24.7, + "y": -32.71, + "curve": [ 0.788, 24.95, 0.82, 4.99, 0.782, -33.17, 0.829, -21.82 ] + }, + { + "time": 0.8667, + "x": 5.16, + "y": -13.23, + "curve": [ 0.921, 5.36, 0.955, 6.02, 0.897, -6.22, 0.965, 3.98 ] + }, + { + "time": 1, + "x": 7.71, + "y": 3.98, + "curve": [ 1.046, 9.42, 1.17, 14.8, 1.067, 3.98, 1.227, -5.97 ] + }, + { "time": 1.2667, "x": 19.46, "y": -14.29 } + ] + }, + "back-arm1": { + "rotate": [ + { + "value": 36.77, + "curve": [ 0.275, 36.57, 0.464, 23.85 ] + }, + { + "time": 0.6333, + "value": 23.86, + "curve": [ 0.891, 23.91, 1.035, 36.68 ] + }, + { "time": 1.2667, "value": 36.77 } + ], + "translate": [ + { + "x": -20.37, + "y": -12.6, + "curve": [ 0.092, -20.37, 0.567, -30.85, 0.25, -12.16, 0.508, -9.49 ] + }, + { + "time": 0.6333, + "x": -30.85, + "y": -9.16, + "curve": [ 0.725, -30.85, 1.143, -20.51, 0.794, -9.16, 1.086, -12.8 ] + }, + { "time": 1.2667, "x": -20.37, "y": -12.6 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { + "value": -5.12, + "curve": [ 0.042, -5.12, 0.104, -2.7 ] + }, + { + "time": 0.1667, + "value": 0.89, + "curve": [ 0.241, 5.11, 0.317, 10.59 ] + }, + { + "time": 0.3667, + "value": 10.59, + "curve": [ 0.433, 10.59, 0.567, 0.72 ] + }, + { + "time": 0.6333, + "value": 0.72, + "curve": [ 0.733, 0.72, 0.933, 7.72 ] + }, + { + "time": 1.0333, + "value": 7.72, + "curve": [ 1.092, 7.72, 1.208, -5.12 ] + }, + { "time": 1.2667, "value": -5.12 } + ] + }, + "front-arm2": { + "rotate": [ + { + "value": 20.46, + "curve": [ 0.092, 20.46, 0.29, 10.44 ] + }, + { + "time": 0.3667, + "value": 4.66, + "curve": [ 0.493, -4.86, 0.54, -11 ] + }, + { + "time": 0.6333, + "value": -11.14, + "curve": [ 0.725, -11.27, 0.934, 1.22 ] + }, + { + "time": 1, + "value": 6.77, + "curve": [ 1.042, 10.27, 1.15, 20.26 ] + }, + { "time": 1.2667, "value": 20.46 } + ] + }, + "head": { + "rotate": [ + { + "value": 21.27, + "curve": [ 0.121, 21.36, 0.118, 5.37 ] + }, + { + "time": 0.3333, + "value": 5.74, + "curve": [ 0.443, 5.92, 0.579, 20.65 ] + }, + { + "time": 0.6333, + "value": 20.71, + "curve": [ 0.761, 20.68, 0.8, 6.02 ] + }, + { + "time": 1.0333, + "value": 5.76, + "curve": [ 1.101, 5.8, 1.208, 21.57 ] + }, + { "time": 1.2667, "value": 21.27 } + ], + "translate": [ + { + "x": 9.88, + "y": -21.53, + "curve": [ 0.066, 2.9, 0.151, -2.12, 0.05, -24.49, 0.139, -28.72 ] + }, + { + "time": 0.2, + "x": -1.68, + "y": -28.94, + "curve": [ 0.281, -0.96, 0.392, 24.71, 0.278, -29.21, 0.37, -7.39 ] + }, + { + "time": 0.4667, + "x": 24.76, + "y": -6.79, + "curve": [ 0.645, 24.69, 0.668, -1.21, 0.622, -7.06, 0.597, -30.92 ] + }, + { + "time": 0.8, + "x": -1.47, + "y": -30.78, + "curve": [ 0.89, -1.64, 0.979, 25.37, 0.877, -30.73, 0.97, -7.01 ] + }, + { + "time": 1.0667, + "x": 25.27, + "y": -6.86, + "curve": [ 1.147, 25.19, 1.217, 15.2, 1.141, -6.75, 1.217, -18.56 ] + }, + { "time": 1.2667, "x": 9.88, "y": -21.53 } + ] + }, + "back-arm2": { + "rotate": [ + { + "value": -28.13, + "curve": [ 0.32, -28.07, 0.434, 0.42 ] + }, + { + "time": 0.6333, + "value": 0.31, + "curve": [ 0.941, 0.13, 0.968, -27.95 ] + }, + { "time": 1.2667, "value": -28.13 } + ] + }, + "stirrup": { + "rotate": [ + { "value": -17.15 }, + { "time": 0.3667, "value": -11.14 }, + { "time": 0.6333, "value": -6.95 }, + { "time": 1, "value": -11.84 }, + { "time": 1.2667, "value": -17.15 } + ], + "translate": [ + { "x": 8.98, "y": 4.99 }, + { "time": 0.3667, "x": 4.85, "y": 1 }, + { "time": 0.6333, "x": 7.76, "y": -2.99 }, + { "time": 1, "x": 4.85, "y": 1 }, + { "time": 1.2667, "x": 8.98, "y": 4.99 } + ] + }, + "front-foot2": { + "rotate": [ + { "value": 36.9 }, + { "time": 0.0667, "value": 7.88 }, + { "time": 0.1333, "value": 4.67 }, + { + "time": 0.5, + "value": 6.81, + "curve": [ 0.572, 7.04, 0.605, 6.97 ] + }, + { + "time": 0.6333, + "value": 6.25, + "curve": [ 0.686, 4.19, 0.708, -105.88 ] + }, + { + "time": 0.8, + "value": -104.63, + "curve": [ 0.955, -102.9, 1.188, 34.64 ] + }, + { "time": 1.2667, "value": 36.9 } + ] + }, + "front-hand": { + "rotate": [ + { + "value": -60.7, + "curve": [ 0.318, -60.68, 0.442, -6 ] + }, + { + "time": 0.6333, + "value": -6.02, + "curve": [ 0.847, -6.04, 1.076, -60.24 ] + }, + { "time": 1.2667, "value": -60.7 } + ] + }, + "horn-back": { + "translate": [ + { "x": 7.01, "y": 42.92 }, + { "time": 0.3667, "x": 13.17, "y": 33.39 }, + { "time": 0.6333, "x": 7.68, "y": 13.94 }, + { "time": 1, "x": 12.26, "y": 35.06 }, + { "time": 1.2667, "x": 7.01, "y": 42.92 } + ] + }, + "jaw": { + "rotate": [ + { + "value": -9.46, + "curve": [ 0.088, -9.55, 0.339, -16.63 ] + }, + { + "time": 0.3667, + "value": -17.51, + "curve": [ 0.562, -23.77, 0.8, -23.24 ] + }, + { + "time": 0.8333, + "value": -23.22, + "curve": [ 0.963, -23.18, 1.179, -9.56 ] + }, + { "time": 1.2667, "value": -9.46 } + ], + "translate": [ + { + "x": -0.34, + "y": -2.02, + "curve": [ 0.092, -0.34, 0.275, 0.79, 0.092, -2.02, 0.275, 9.47 ] + }, + { + "time": 0.3667, + "x": 0.79, + "y": 9.47, + "curve": [ 0.425, 0.79, 0.575, 0.93, 0.425, 9.47, 0.575, 6.04 ] + }, + { + "time": 0.6333, + "x": 0.93, + "y": 6.09, + "curve": [ 0.642, 0.93, 0.783, 0.79, 0.714, 6.16, 0.783, 9.47 ] + }, + { + "time": 0.8333, + "x": 0.79, + "y": 9.47, + "curve": [ 0.875, 0.79, 0.958, 0.57, 0.875, 9.47, 0.979, 7.85 ] + }, + { + "time": 1, + "x": 0.57, + "y": 7.17, + "curve": [ 1.067, 0.57, 1.2, -0.34, 1.083, 4.51, 1.2, -2.02 ] + }, + { "time": 1.2667, "x": -0.34, "y": -2.02 } + ] + }, + "back-foot2": { + "rotate": [ + { + "curve": [ 0.019, 0, 0.046, 0.68 ] + }, + { + "time": 0.0667, + "value": -2.42, + "curve": [ 0.127, -11.89, 0.157, -75.22 ] + }, + { + "time": 0.3, + "value": -74.35, + "curve": [ 0.372, -74.4, 0.44, -55.45 ] + }, + { + "time": 0.4667, + "value": -38.51, + "curve": [ 0.488, -24.72, 0.512, 30.14 ] + }, + { + "time": 0.6, + "value": 30.17, + "curve": [ 0.631, 30.18, 0.649, 17.16 ] + }, + { + "time": 0.6667, + "value": 2.1, + "curve": [ 0.758, 2.1, 1.2, 0 ] + }, + { "time": 1.2667 } + ] + }, + "back-hand": { + "rotate": [ + { + "value": -26.17, + "curve": [ 0.077, -26.23, 0.165, -15.08 ] + }, + { + "time": 0.2667, + "value": -15.07, + "curve": [ 0.348, -15.06, 0.514, -27.32 ] + }, + { + "time": 0.6333, + "value": -27.37, + "curve": [ 0.745, -27.37, 0.844, -14.99 ] + }, + { + "time": 1, + "value": -15.02, + "curve": [ 1.117, -15.05, 1.104, -26.34 ] + }, + { "time": 1.2667, "value": -26.17 } + ] + }, + "tongue1": { + "rotate": [ + { "value": 21.55 }, + { "time": 0.8, "value": 0.08 }, + { "time": 1.2667, "value": 21.55 } + ] + }, + "front-foot3": { + "rotate": [ + { "value": -1.65 }, + { + "time": 0.1, + "value": -3.94, + "curve": [ 0.158, -3.94, 0.308, -3.82 ] + }, + { + "time": 0.3667, + "value": -3.82, + "curve": [ 0.433, -3.82, 0.511, -6.36 ] + }, + { + "time": 0.6333, + "value": -6.62, + "curve": [ 0.701, -7.05, 0.687, 24.84 ] + }, + { + "time": 0.7333, + "value": 25.1, + "curve": [ 0.766, 25.1, 0.821, -23.09 ] + }, + { + "time": 0.8667, + "value": -22.96, + "curve": [ 0.975, -22.65, 1.139, 10.93 ] + }, + { + "time": 1.2, + "value": 10.93, + "curve": [ 1.217, 10.93, 1.267, 5.95 ] + }, + { "time": 1.2667, "value": -1.65 } + ] + }, + "tongue2": { + "rotate": [ + { + "value": -16.02, + "curve": [ 0.286, -15.88, 0.415, -3.2 ] + }, + { + "time": 0.6333, + "value": -3.21, + "curve": [ 0.988, -3.22, 1.102, -16.12 ] + }, + { "time": 1.2667, "value": -16.02 } + ] + }, + "tongue3": { + "rotate": [ + { + "value": -16.02, + "curve": [ 0.027, -12.15, 0.123, 0.49 ] + }, + { + "time": 0.2333, + "value": 0.44, + "curve": [ 0.457, 0.33, 0.862, -36.42 ] + }, + { + "time": 1.0667, + "value": -36.41, + "curve": [ 1.168, -36.41, 1.248, -19.42 ] + }, + { "time": 1.2667, "value": -16.02 } + ] + }, + "neck2": { + "rotate": [ + { "value": 24.69 } + ], + "translate": [ + { + "x": -6.84, + "y": -1.8, + "curve": [ 0.164, -6.45, 0.256, -6.42, 0.092, -1.8, 0.308, -0.45 ] + }, + { + "time": 0.4, + "x": -6.24, + "y": -0.45, + "curve": [ 0.514, -6.09, 0.567, -6.03, 0.467, -0.45, 0.567, -1.81 ] + }, + { + "time": 0.6333, + "x": -6.03, + "y": -1.81, + "curve": [ 0.725, -6.03, 0.908, -10.81, 0.725, -1.81, 0.908, -0.35 ] + }, + { + "time": 1, + "x": -10.81, + "y": -0.35, + "curve": [ 1.067, -10.81, 1.137, -7.65, 1.067, -0.35, 1.2, -1.8 ] + }, + { "time": 1.2667, "x": -6.84, "y": -1.8 } + ] + }, + "spineboy-hip": { + "translate": [ + { + "x": 53.69, + "y": -49.21, + "curve": [ 0.118, 53.52, 0.275, 16.15, 0.092, -49.21, 0.275, -32.56 ] + }, + { + "time": 0.3667, + "x": 16.15, + "y": -32.56, + "curve": [ 0.433, 16.15, 0.542, 53.47, 0.433, -32.56, 0.567, -49.21 ] + }, + { + "time": 0.6333, + "x": 53.69, + "y": -49.21, + "curve": [ 0.742, 53.95, 0.908, 15.73, 0.725, -49.21, 0.908, -29.74 ] + }, + { + "time": 1, + "x": 15.73, + "y": -29.74, + "curve": [ 1.067, 15.73, 1.11, 54.45, 1.067, -29.74, 1.2, -49.21 ] + }, + { "time": 1.2667, "x": 53.69, "y": -49.21 } + ] + }, + "spineboy-torso": { + "rotate": [ + { + "value": -37.55, + "curve": [ 0.092, -37.55, 0.275, -12.2 ] + }, + { + "time": 0.3667, + "value": -12.2, + "curve": [ 0.498, -12.2, 0.567, -37.66 ] + }, + { + "time": 0.6333, + "value": -37.66, + "curve": [ 0.725, -37.66, 0.908, -12.19 ] + }, + { + "time": 1, + "value": -12.19, + "curve": [ 1.131, -12.19, 1.2, -37.55 ] + }, + { "time": 1.2667, "value": -37.55 } + ] + }, + "front-arm": { + "translate": [ + { "y": -5.28 }, + { "time": 0.1333, "x": -3.61, "y": -8.36 }, + { "time": 0.3667, "x": -8.05, "y": -5.53 }, + { "time": 0.6333 }, + { "time": 1, "x": -7.45, "y": -1.99 }, + { "time": 1.2667, "y": -5.28 } + ] + }, + "gun": { + "rotate": [ + { + "value": -11.68, + "curve": [ 0.03, -14.01, 0.177, -31.16 ] + }, + { + "time": 0.3, + "value": -31.16, + "curve": [ 0.368, -31.16, 0.475, -9.46 ] + }, + { + "time": 0.5333, + "value": -9.58, + "curve": [ 0.737, -9.99, 0.77, -31.38 ] + }, + { + "time": 0.9333, + "value": -31.11, + "curve": [ 0.992, -31.11, 1.108, -9.58 ] + }, + { + "time": 1.1667, + "value": -9.58, + "curve": [ 1.192, -9.58, 1.236, -9.68 ] + }, + { "time": 1.2667, "value": -11.68 } + ], + "translate": [ + { + "curve": [ 0.042, -0.34, 0.098, -0.45, 0.039, -4.02, 0.098, -6.86 ] + }, + { + "time": 0.1333, + "x": -0.45, + "y": -6.86, + "curve": [ 0.194, -0.45, 0.256, 2.36, 0.194, -6.86, 0.245, 6.35 ] + }, + { + "time": 0.3333, + "x": 2.35, + "y": 6.16, + "curve": [ 0.439, 2.35, 0.579, 0.46, 0.418, 5.98, 0.6, 2.06 ] + }, + { + "time": 0.6333, + "curve": [ 0.668, -0.29, 0.731, -0.45, 0.679, -2.83, 0.731, -6.86 ] + }, + { + "time": 0.7667, + "x": -0.45, + "y": -6.86, + "curve": [ 0.828, -0.45, 0.89, 2.35, 0.828, -6.86, 0.899, 6.27 ] + }, + { + "time": 0.9667, + "x": 2.35, + "y": 6.16, + "curve": [ 1.053, 2.36, 1.213, 0.51, 1.051, 6.03, 1.226, 2.28 ] + }, + { "time": 1.2667 } + ] + }, + "tail2": { + "rotate": [ + { + "value": -12.17, + "curve": [ 0.091, -12.17, 0.207, -1.45 ] + }, + { + "time": 0.3333, + "value": -1.45, + "curve": [ 0.441, -1.45, 0.555, -12.17 ] + }, + { + "time": 0.6667, + "value": -12.17, + "curve": [ 0.896, -12.17, 0.874, -1.45 ] + }, + { + "time": 1, + "value": -1.45, + "curve": [ 1.107, -1.45, 1.117, -12.17 ] + }, + { "time": 1.2667, "value": -12.17 } + ] + }, + "tail3": { + "rotate": [ + { + "value": -7.15, + "curve": [ 0.083, -7.15, 0.25, 0.58 ] + }, + { + "time": 0.3333, + "value": 0.58, + "curve": [ 0.408, 0.58, 0.558, -7.15 ] + }, + { + "time": 0.6333, + "value": -7.15, + "curve": [ 0.717, -7.15, 0.883, 0.75 ] + }, + { + "time": 0.9667, + "value": 0.75, + "curve": [ 1.042, 0.75, 1.192, -7.15 ] + }, + { "time": 1.2667, "value": -7.15 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.87, 0.158, 0, 0.475, -0.87 ] + }, + { + "time": 0.6333, + "x": -9.87, + "y": -0.87, + "curve": [ 0.792, -9.87, 1.108, 0, 0.792, -0.87, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail4": { + "rotate": [ + { + "value": -3.83, + "curve": [ 0.013, -4.23, 0.024, -4.53 ] + }, + { + "time": 0.0333, + "value": -4.53, + "curve": [ 0.068, -4.53, 0.116, -3.13 ] + }, + { + "time": 0.1667, + "value": -0.39, + "curve": [ 0.24, 3.5, 0.318, 9.15 ] + }, + { + "time": 0.3667, + "value": 9.15, + "curve": [ 0.442, 9.15, 0.592, -4.53 ] + }, + { + "time": 0.6667, + "value": -4.53, + "curve": [ 0.75, -4.53, 0.917, 9 ] + }, + { + "time": 1, + "value": 9, + "curve": [ 1.065, 9, 1.187, -1.17 ] + }, + { "time": 1.2667, "value": -3.83 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -4.06, 0.158, 0, 0.475, 0.32 ] + }, + { + "time": 0.6333, + "x": -4.06, + "y": 0.32, + "curve": [ 0.792, -4.06, 1.108, 0, 0.792, 0.32, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail5": { + "rotate": [ + { + "value": -7.24, + "curve": [ 0.026, -8.78, 0.048, -9.9 ] + }, + { + "time": 0.0667, + "value": -9.9, + "curve": [ 0.093, -9.9, 0.129, -9.01 ] + }, + { + "time": 0.1667, + "value": -6.6, + "curve": [ 0.248, -1.49, 0.343, 7.39 ] + }, + { + "time": 0.4, + "value": 7.39, + "curve": [ 0.475, 7.39, 0.625, -9.9 ] + }, + { + "time": 0.7, + "value": -9.9, + "curve": [ 0.783, -9.9, 0.95, 7.29 ] + }, + { + "time": 1.0333, + "value": 7.29, + "curve": [ 1.09, 7.29, 1.19, -2.46 ] + }, + { "time": 1.2667, "value": -7.24 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -7.55, 0.158, 0, 0.475, 0.73 ] + }, + { + "time": 0.6333, + "x": -7.55, + "y": 0.73, + "curve": [ 0.792, -7.55, 1.108, 0, 0.792, 0.73, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail6": { + "rotate": [ + { + "value": -4.22, + "curve": [ 0.038, -7.4, 0.074, -9.9 ] + }, + { + "time": 0.1, + "value": -9.9, + "curve": [ 0.119, -9.9, 0.142, -9.79 ] + }, + { + "time": 0.1667, + "value": -8.22, + "curve": [ 0.255, -2.85, 0.369, 9.89 ] + }, + { + "time": 0.4333, + "value": 9.89, + "curve": [ 0.508, 9.89, 0.658, -9.9 ] + }, + { + "time": 0.7333, + "value": -9.9, + "curve": [ 0.817, -9.9, 0.983, 10.12 ] + }, + { + "time": 1.0667, + "value": 10.12, + "curve": [ 1.115, 10.12, 1.196, 1.7 ] + }, + { "time": 1.2667, "value": -4.22 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.06, 0.158, 0, 0.475, 1.58 ] + }, + { + "time": 0.6333, + "x": -9.06, + "y": 1.58, + "curve": [ 0.792, -9.06, 1.108, 0, 0.792, 1.58, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail7": { + "rotate": [ + { + "value": -0.76, + "curve": [ 0.051, -5.53, 0.1, -9.9 ] + }, + { + "time": 0.1333, + "value": -9.9, + "curve": [ 0.144, -9.9, 0.155, -10.45 ] + }, + { + "time": 0.1667, + "value": -9.89, + "curve": [ 0.257, -5.87, 0.394, 11.3 ] + }, + { + "time": 0.4667, + "value": 11.3, + "curve": [ 0.542, 11.3, 0.692, -9.9 ] + }, + { + "time": 0.7667, + "value": -9.9, + "curve": [ 0.85, -9.9, 1.017, 11.52 ] + }, + { + "time": 1.1, + "value": 11.52, + "curve": [ 1.141, 11.52, 1.205, 5.07 ] + }, + { "time": 1.2667, "value": -0.76 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -9.93, 0.158, 0, 0.475, 1.32 ] + }, + { + "time": 0.6333, + "x": -9.93, + "y": 1.32, + "curve": [ 0.792, -9.93, 1.108, 0, 0.792, 1.32, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail8": { + "rotate": [ + { + "value": 4.71, + "curve": [ 0.062, -2.19, 0.126, -10.79 ] + }, + { + "time": 0.1667, + "value": -10.79, + "curve": [ 0.25, -10.79, 0.417, 16.46 ] + }, + { + "time": 0.5, + "value": 16.46, + "curve": [ 0.575, 16.46, 0.725, -9.9 ] + }, + { + "time": 0.8, + "value": -9.9, + "curve": [ 0.883, -9.9, 1.05, 15.57 ] + }, + { + "time": 1.1333, + "value": 15.57, + "curve": [ 1.167, 15.57, 1.217, 10.43 ] + }, + { "time": 1.2667, "value": 4.71 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -12.57, 0.158, 0, 0.475, 1.97 ] + }, + { + "time": 0.6333, + "x": -12.57, + "y": 1.97, + "curve": [ 0.792, -12.57, 1.108, 0, 0.792, 1.97, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail9": { + "rotate": [ + { + "value": 7.95, + "curve": [ 0.072, 1.87, 0.151, -6.79 ] + }, + { + "time": 0.2, + "value": -6.79, + "curve": [ 0.283, -6.79, 0.45, 15.08 ] + }, + { + "time": 0.5333, + "value": 15.08, + "curve": [ 0.608, 15.08, 0.758, -6.79 ] + }, + { + "time": 0.8333, + "value": -6.79, + "curve": [ 0.917, -6.79, 1.083, 13.8 ] + }, + { + "time": 1.1667, + "value": 13.8, + "curve": [ 1.193, 13.8, 1.229, 11.28 ] + }, + { "time": 1.2667, "value": 7.95 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -15.36, 0.158, 0, 0.475, 2.18 ] + }, + { + "time": 0.6333, + "x": -15.36, + "y": 2.18, + "curve": [ 0.792, -15.36, 1.108, 0, 0.792, 2.18, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "tail10": { + "rotate": [ + { + "value": 8.87, + "curve": [ 0.078, 3.96, 0.177, -5.98 ] + }, + { + "time": 0.2333, + "value": -5.98, + "curve": [ 0.317, -5.98, 0.483, 10.93 ] + }, + { + "time": 0.5667, + "value": 10.93, + "curve": [ 0.642, 10.93, 0.792, -5.98 ] + }, + { + "time": 0.8667, + "value": -5.98, + "curve": [ 0.95, -5.98, 1.117, 11.58 ] + }, + { + "time": 1.2, + "value": 11.58, + "curve": [ 1.219, 11.58, 1.242, 10.48 ] + }, + { "time": 1.2667, "value": 8.87 } + ], + "translate": [ + { + "curve": [ 0.158, 0, 0.475, -19.3, 0.158, 0, 0.475, 1.9 ] + }, + { + "time": 0.6333, + "x": -19.3, + "y": 1.9, + "curve": [ 0.792, -19.3, 1.108, 0, 0.792, 1.9, 1.108, 0 ] + }, + { "time": 1.2667 } + ] + }, + "horn-front": { + "translate": [ + { + "x": 3.46, + "y": -20.12, + "curve": [ 0.092, 3.46, 0.243, 3.41, 0.092, -20.12, 0.292, -6.08 ] + }, + { + "time": 0.3667, + "x": 3.57, + "y": -1.24, + "curve": [ 0.407, 3.63, 0.567, 5.09, 0.484, 6.36, 0.567, 11.01 ] + }, + { + "time": 0.6333, + "x": 5.09, + "y": 11.01, + "curve": [ 0.725, 5.09, 0.807, 2.74, 0.725, 11.01, 0.918, -0.08 ] + }, + { + "time": 1, + "x": 2.77, + "y": -5.87, + "curve": [ 1.116, 2.79, 1.2, 3.46, 1.049, -9.34, 1.2, -20.12 ] + }, + { "time": 1.2667, "x": 3.46, "y": -20.12 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { + "value": 3.65, + "curve": [ 0.091, 3.65, 0.233, 5.42 ] + }, + { + "time": 0.3667, + "value": 5.41, + "curve": [ 0.45, 5.4, 0.566, 3.49 ] + }, + { + "time": 0.6333, + "value": 3.49, + "curve": [ 0.732, 3.49, 0.89, 5.39 ] + }, + { + "time": 1.0333, + "value": 5.38, + "curve": [ 1.112, 5.38, 1.207, 3.65 ] + }, + { "time": 1.2667, "value": 3.65 } + ] + }, + "jaw-inside": { + "translate": [ + { "x": -8.34, "y": -3.22 }, + { "time": 0.6333, "x": 1.17, "y": -1.6 }, + { "time": 1.2667, "x": -8.34, "y": -3.22 } + ] + }, + "bone": { + "rotate": [ + { + "value": 2, + "curve": [ 0.031, 3.38, 0.075, 4.99 ] + }, + { + "time": 0.1, + "value": 5.01, + "curve": [ 0.194, 5.05, 0.398, -0.88 ] + }, + { + "time": 0.4667, + "value": -0.83, + "curve": [ 0.538, -0.78, 0.671, 4.88 ] + }, + { + "time": 0.7333, + "value": 4.88, + "curve": [ 0.846, 4.88, 1.032, -0.57 ] + }, + { + "time": 1.1, + "value": -0.57, + "curve": [ 1.142, -0.57, 1.201, 0.04 ] + }, + { "time": 1.2667, "value": 2 } + ] + }, + "bone2": { + "rotate": [ + { + "curve": [ 0.019, -8.93, 0.062, -21.67 ] + }, + { + "time": 0.1333, + "value": -21.67, + "curve": [ 0.23, -21.67, 0.346, 21.39 ] + }, + { + "time": 0.4667, + "value": 21.32, + "curve": [ 0.639, 21.22, 0.626, -21.47 ] + }, + { + "time": 0.7667, + "value": -21.67, + "curve": [ 0.863, -21.81, 1.013, 21.01 ] + }, + { + "time": 1.1, + "value": 21.32, + "curve": [ 1.204, 21.68, 1.245, 9.94 ] + }, + { "time": 1.2667 } + ] + }, + "bone3": { + "rotate": [ + { + "curve": [ 0.083, 0, 0.25, 11.45 ] + }, + { + "time": 0.3333, + "value": 11.45, + "curve": [ 0.407, 11.39, 0.547, 0.26 ] + }, + { + "time": 0.6333, + "value": 0.18, + "curve": [ 0.708, 0.18, 0.858, 11.29 ] + }, + { + "time": 0.9333, + "value": 11.29, + "curve": [ 1.017, 11.29, 1.183, 0 ] + }, + { "time": 1.2667 } + ] + }, + "bone4": { + "rotate": [ + { + "curve": [ 0, -6.15, 0.044, -10.86 ] + }, + { + "time": 0.1, + "value": -11.06, + "curve": [ 0.161, -11.27, 0.267, 10.59 ] + }, + { + "time": 0.3667, + "value": 10.49, + "curve": [ 0.554, 10.32, 0.603, -10.61 ] + }, + { + "time": 0.7333, + "value": -10.98, + "curve": [ 0.782, -10.93, 0.949, 10.3 ] + }, + { + "time": 1.0333, + "value": 10.41, + "curve": [ 1.144, 10.56, 1.255, 4.55 ] + }, + { "time": 1.2667 } + ] + }, + "bone5": { + "rotate": [ + { + "value": 6.23, + "curve": [ 0.042, 3.41, 0.105, 3.02 ] + }, + { + "time": 0.1667, + "value": 3.03, + "curve": [ 0.222, 3.04, 0.334, 11.98 ] + }, + { + "time": 0.4333, + "value": 11.93, + "curve": [ 0.561, 11.87, 0.662, 3.23 ] + }, + { + "time": 0.8, + "value": 3.22, + "curve": [ 0.849, 3.21, 1.016, 11.92 ] + }, + { + "time": 1.1, + "value": 12.03, + "curve": [ 1.162, 12.12, 1.223, 9.21 ] + }, + { "time": 1.2667, "value": 6.23 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.3667, "x": -12.14, "y": 8.93 }, + { "time": 0.6333 }, + { "time": 1, "x": -10.79, "y": 7.94 }, + { "time": 1.2667 } + ] + }, + "front-hand2": { + "rotate": [ + { + "curve": [ 0.092, 0, 0.275, 15.62 ] + }, + { + "time": 0.3667, + "value": 15.62, + "curve": [ 0.433, 15.62, 0.567, 0 ] + }, + { + "time": 0.6333, + "curve": [ 0.733, 0, 0.933, 15.62 ] + }, + { + "time": 1.0333, + "value": 15.62, + "curve": [ 1.092, 15.62, 1.208, 0 ] + }, + { "time": 1.2667 } + ] + }, + "front-bracer": { + "rotate": [ + { "value": 52.99 } + ] + }, + "head-control": { + "translate": [ + { + "y": -55.1, + "curve": [ 0.063, -1.75, 0.253, -5.83, 0.092, -55.1, 0.298, -20 ] + }, + { + "time": 0.3667, + "x": -5.85, + "y": -6.98, + "curve": [ 0.437, -5.86, 0.539, -2.89, 0.44, 6.9, 0.567, 28.15 ] + }, + { + "time": 0.6333, + "y": 28.15, + "curve": [ 0.709, 2.32, 0.858, 5.7, 0.708, 28.15, 0.867, 1.15 ] + }, + { + "time": 0.9333, + "x": 5.7, + "y": -12.05, + "curve": [ 1.017, 5.7, 1.157, 2.64, 1.02, -29.22, 1.183, -55.1 ] + }, + { "time": 1.2667, "y": -55.1 } + ] + }, + "leg-control": { + "translate": [ + { + "curve": [ 0.021, 0, 0.048, 3.27, 0.021, 0, 0.044, -99.76 ] + }, + { + "time": 0.0667, + "x": 5.16, + "y": -99.76, + "curve": [ 0.099, 8.46, 0.145, 12.65, 0.089, -99.76, 0.134, 67.18 ] + }, + { + "time": 0.1667, + "x": 12.65, + "y": 68.39, + "curve": [ 0.188, 12.65, 0.251, 7.24, 0.211, 70.03, 0.244, -68.23 ] + }, + { + "time": 0.2667, + "x": 4.95, + "y": -68.19, + "curve": [ 0.324, -3.3, 0.337, -4.96, 0.307, -68.11, 0.329, -15.36 ] + }, + { + "time": 0.3667, + "x": -10.49, + "y": -14.91, + "curve": [ 0.404, -17.53, 0.441, -25.51, 0.416, -14.33, 0.484, -84.78 ] + }, + { + "time": 0.5, + "x": -25.51, + "y": -101.71, + "curve": [ 0.566, -25.51, 0.634, -23.99, 0.543, -148.75, 0.634, -191.81 ] + }, + { + "time": 0.7, + "x": -21.81, + "y": -183.43, + "curve": [ 0.915, -14.78, 1.123, 0, 0.915, -156.4, 1.123, 0 ] + }, + { "time": 1.2667 } + ] + }, + "head2": { + "rotate": [ + { + "value": 11.97, + "curve": [ 0.021, 10.46, 0.104, 4.49 ] + }, + { + "time": 0.1667, + "value": 4.55, + "curve": [ 0.312, 4.71, 0.419, 14.2 ] + }, + { + "time": 0.5, + "value": 14.11, + "curve": [ 0.671, 13.92, 0.686, 4.54 ] + }, + { + "time": 0.8, + "value": 4.56, + "curve": [ 0.953, 4.59, 1.029, 14.2 ] + }, + { + "time": 1.1333, + "value": 14.13, + "curve": [ 1.186, 14.1, 1.214, 14.03 ] + }, + { "time": 1.2667, "value": 11.97 } + ], + "scale": [ + { + "curve": [ 0.011, 0.995, 0.122, 0.985, 0.055, 1.007, 0.104, 1.011 ] + }, + { + "time": 0.1667, + "x": 0.985, + "y": 1.012, + "curve": [ 0.256, 0.985, 0.415, 1.014, 0.245, 1.013, 0.419, 0.988 ] + }, + { + "time": 0.5, + "x": 1.013, + "y": 0.988, + "curve": [ 0.579, 1.013, 0.693, 0.988, 0.62, 0.988, 0.713, 1.014 ] + }, + { + "time": 0.8, + "x": 0.988, + "y": 1.014, + "curve": [ 0.881, 0.988, 1.075, 1.014, 0.908, 1.014, 1.033, 0.988 ] + }, + { + "time": 1.1333, + "x": 1.014, + "y": 0.989, + "curve": [ 1.181, 1.014, 1.2, 1.011, 1.164, 0.989, 1.23, 0.995 ] + }, + { "time": 1.2667 } + ] + } + }, + "ik": { + "back-leg-ik": [ + { "softness": 66.9, "bendPositive": false } + ], + "spineboy-back-arm-ik": [ + {} + ], + "spineboy-front-arm-ik": [ + { "softness": 14.4, "stretch": true } + ] + }, + "events": [ + { "time": 0.6333, "name": "footstep" }, + { "time": 1.2667, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/spine-ts/spine-pixi/example/assets/spineboy-pma.atlas b/spine-ts/spine-pixi/example/assets/spineboy-pma.atlas new file mode 100644 index 000000000..9c8bd8e81 --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/spineboy-pma.atlas @@ -0,0 +1,102 @@ +spineboy-pma.png + size: 1024, 256 + filter: Linear, Linear + pma: true + scale: 0.5 +crosshair + bounds: 813, 160, 45, 45 +eye-indifferent + bounds: 569, 2, 47, 45 +eye-surprised + bounds: 643, 7, 47, 45 + rotate: 90 +front-bracer + bounds: 811, 51, 29, 40 +front-fist-closed + bounds: 807, 93, 38, 41 +front-fist-open + bounds: 815, 210, 43, 44 +front-foot + bounds: 706, 64, 63, 35 + rotate: 90 +front-shin + bounds: 80, 11, 41, 92 +front-thigh + bounds: 754, 12, 23, 56 +front-upper-arm + bounds: 618, 5, 23, 49 +goggles + bounds: 214, 20, 131, 83 +gun + bounds: 347, 14, 105, 102 + rotate: 90 +head + bounds: 80, 105, 136, 149 +hoverboard-board + bounds: 2, 8, 246, 76 + rotate: 90 +hoverboard-thruster + bounds: 478, 2, 30, 32 +hoverglow-small + bounds: 218, 117, 137, 38 + rotate: 90 +mouth-grind + bounds: 775, 80, 47, 30 + rotate: 90 +mouth-oooo + bounds: 779, 31, 47, 30 + rotate: 90 +mouth-smile + bounds: 783, 207, 47, 30 + rotate: 90 +muzzle-glow + bounds: 779, 4, 25, 25 +muzzle-ring + bounds: 451, 14, 25, 105 +muzzle01 + bounds: 664, 60, 67, 40 + rotate: 90 +muzzle02 + bounds: 580, 56, 68, 42 + rotate: 90 +muzzle03 + bounds: 478, 36, 83, 53 + rotate: 90 +muzzle04 + bounds: 533, 49, 75, 45 + rotate: 90 +muzzle05 + bounds: 624, 56, 68, 38 + rotate: 90 +neck + bounds: 806, 8, 18, 21 +portal-bg + bounds: 258, 121, 133, 133 +portal-flare1 + bounds: 690, 2, 56, 30 + rotate: 90 +portal-flare2 + bounds: 510, 3, 57, 31 +portal-flare3 + bounds: 722, 4, 58, 30 + rotate: 90 +portal-shade + bounds: 393, 121, 133, 133 +portal-streaks1 + bounds: 528, 126, 126, 128 +portal-streaks2 + bounds: 656, 129, 125, 125 +rear-bracer + bounds: 826, 13, 28, 36 +rear-foot + bounds: 743, 70, 57, 30 + rotate: 90 +rear-shin + bounds: 174, 14, 38, 89 +rear-thigh + bounds: 783, 158, 28, 47 +rear-upper-arm + bounds: 783, 136, 20, 44 + rotate: 90 +torso + bounds: 123, 13, 49, 90 diff --git a/spine-ts/spine-pixi/example/assets/spineboy-pma.png b/spine-ts/spine-pixi/example/assets/spineboy-pma.png new file mode 100644 index 000000000..1f322d0bd Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/spineboy-pma.png differ diff --git a/spine-ts/spine-pixi/example/assets/spineboy-pro.skel b/spine-ts/spine-pixi/example/assets/spineboy-pro.skel new file mode 100644 index 000000000..c14f30405 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/spineboy-pro.skel differ diff --git a/spine-ts/spine-pixi/example/assets/stretchyman-pma.atlas b/spine-ts/spine-pixi/example/assets/stretchyman-pma.atlas new file mode 100644 index 000000000..d8b4a4077 --- /dev/null +++ b/spine-ts/spine-pixi/example/assets/stretchyman-pma.atlas @@ -0,0 +1,19 @@ +stretchyman-pma.png + size: 1024, 256 + filter: Linear, Linear + pma: true +back-arm + bounds: 679, 173, 72, 202 + rotate: 90 +back-leg + bounds: 2, 2, 100, 318 + rotate: 90 +body + bounds: 2, 104, 141, 452 + rotate: 90 +front-arm + bounds: 456, 100, 145, 221 + rotate: 90 +head + bounds: 322, 15, 87, 102 + rotate: 90 diff --git a/spine-ts/spine-pixi/example/assets/stretchyman-pma.png b/spine-ts/spine-pixi/example/assets/stretchyman-pma.png new file mode 100644 index 000000000..78e8b4503 Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/stretchyman-pma.png differ diff --git a/spine-ts/spine-pixi/example/assets/stretchyman-pro.skel b/spine-ts/spine-pixi/example/assets/stretchyman-pro.skel new file mode 100644 index 000000000..815094d5e Binary files /dev/null and b/spine-ts/spine-pixi/example/assets/stretchyman-pro.skel differ diff --git a/spine-ts/spine-pixi/example/events-example.html b/spine-ts/spine-pixi/example/events-example.html new file mode 100644 index 000000000..ba13b75d1 --- /dev/null +++ b/spine-ts/spine-pixi/example/events-example.html @@ -0,0 +1,69 @@ + + + + spine-pixi + + + + + + + + + + diff --git a/spine-ts/spine-pixi/example/index.html b/spine-ts/spine-pixi/example/index.html new file mode 100644 index 000000000..644cc71c0 --- /dev/null +++ b/spine-ts/spine-pixi/example/index.html @@ -0,0 +1,67 @@ + + + + spine-pixi + + + + + + + + + + diff --git a/spine-ts/spine-pixi/example/manual-loading.html b/spine-ts/spine-pixi/example/manual-loading.html new file mode 100644 index 000000000..babf71c7b --- /dev/null +++ b/spine-ts/spine-pixi/example/manual-loading.html @@ -0,0 +1,74 @@ + + + + spine-pixi + + + + + + + + + + diff --git a/spine-ts/spine-pixi/package.json b/spine-ts/spine-pixi/package.json new file mode 100644 index 000000000..fe2e7f278 --- /dev/null +++ b/spine-ts/spine-pixi/package.json @@ -0,0 +1,43 @@ +{ + "name": "@esotericsoftware/spine-pixi", + "version": "4.1.42", + "description": "The official Spine Runtimes for the web.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist/**/*", + "README.md", + "LICENSE" + ], + "scripts": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/esotericsoftware/spine-runtimes.git" + }, + "keywords": [ + "gamedev", + "animations", + "2d", + "spine", + "game-dev", + "runtimes", + "skeletal" + ], + "author": "Esoteric Software LLC", + "license": "LicenseRef-LICENSE", + "bugs": { + "url": "https://github.com/esotericsoftware/spine-runtimes/issues" + }, + "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", + "dependencies": { + "@esotericsoftware/spine-core": "4.1.42" + }, + "peerDependencies": { + "@pixi/core": "^7.2.4", + "@pixi/display": "^7.2.4", + "@pixi/graphics": "^7.2.4", + "@pixi/text": "^7.2.4", + "@pixi/assets": "^7.2.4", + "@pixi/mesh": "^7.2.4" + } +} \ No newline at end of file diff --git a/spine-ts/spine-pixi/src/DarkSlotMesh.ts b/spine-ts/spine-pixi/src/DarkSlotMesh.ts new file mode 100644 index 000000000..7db9e251e --- /dev/null +++ b/spine-ts/spine-pixi/src/DarkSlotMesh.ts @@ -0,0 +1,117 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { SpineTexture } from "./SpineTexture"; +import type { BlendMode, NumberArrayLike } from "@esotericsoftware/spine-core"; +import { DarkTintMesh } from "./darkTintMesh/DarkTintMesh"; +import type { ISlotMesh } from "./Spine"; + +export class DarkSlotMesh extends DarkTintMesh implements ISlotMesh { + public name: string = ""; + + private static auxColor = [0, 0, 0, 0]; + + constructor () { + super(); + } + public updateFromSpineData ( + slotTexture: SpineTexture, + slotBlendMode: BlendMode, + slotName: string, + finalVertices: NumberArrayLike, + finalVerticesLength: number, + finalIndices: NumberArrayLike, + finalIndicesLength: number, + darkTint: boolean + ): void { + this.texture = slotTexture.texture; + + const vertLenght = (finalVerticesLength / (darkTint ? 12 : 8)) * 2; + + if (this.geometry.getBuffer("aTextureCoord").data?.length !== vertLenght) { + this.geometry.getBuffer("aTextureCoord").data = new Float32Array(vertLenght); + } + + if (this.geometry.getBuffer("aVertexPosition").data?.length !== vertLenght) { + this.geometry.getBuffer("aVertexPosition").data = new Float32Array(vertLenght); + } + + let vertIndex = 0; + + for (let i = 0; i < finalVerticesLength; i += darkTint ? 12 : 8) { + let auxi = i; + + this.geometry.getBuffer("aVertexPosition").data[vertIndex] = finalVertices[auxi++]; + this.geometry.getBuffer("aVertexPosition").data[vertIndex + 1] = finalVertices[auxi++]; + + auxi += 4; // color + + this.geometry.getBuffer("aTextureCoord").data[vertIndex] = finalVertices[auxi++]; + this.geometry.getBuffer("aTextureCoord").data[vertIndex + 1] = finalVertices[auxi++]; + + vertIndex += 2; + } + + if (darkTint) { + DarkSlotMesh.auxColor[0] = finalVertices[8]; + DarkSlotMesh.auxColor[1] = finalVertices[9]; + DarkSlotMesh.auxColor[2] = finalVertices[10]; + DarkSlotMesh.auxColor[3] = finalVertices[11]; + this.darkTint = DarkSlotMesh.auxColor; + + DarkSlotMesh.auxColor[0] = finalVertices[2]; + DarkSlotMesh.auxColor[1] = finalVertices[3]; + DarkSlotMesh.auxColor[2] = finalVertices[4]; + DarkSlotMesh.auxColor[3] = finalVertices[5]; + this.tint = DarkSlotMesh.auxColor; + } else { + DarkSlotMesh.auxColor[0] = finalVertices[2]; + DarkSlotMesh.auxColor[1] = finalVertices[3]; + DarkSlotMesh.auxColor[2] = finalVertices[4]; + DarkSlotMesh.auxColor[3] = finalVertices[5]; + + this.tint = DarkSlotMesh.auxColor; + } + this.blendMode = SpineTexture.toPixiBlending(slotBlendMode); + + if (this.geometry.indexBuffer.data.length !== finalIndices.length) { + this.geometry.indexBuffer.data = new Uint32Array(finalIndices); + } else { + for (let i = 0; i < finalIndicesLength; i++) { + this.geometry.indexBuffer.data[i] = finalIndices[i]; + } + } + + this.name = slotName; + + this.geometry.getBuffer("aVertexPosition").update(); + this.geometry.getBuffer("aTextureCoord").update(); + this.geometry.indexBuffer.update(); + } +} diff --git a/spine-ts/spine-pixi/src/SlotMesh.ts b/spine-ts/spine-pixi/src/SlotMesh.ts new file mode 100644 index 000000000..9b5910223 --- /dev/null +++ b/spine-ts/spine-pixi/src/SlotMesh.ts @@ -0,0 +1,118 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { SpineTexture } from "./SpineTexture"; +import type { BlendMode, NumberArrayLike } from "@esotericsoftware/spine-core"; +import type { ISlotMesh } from "./Spine"; +import { Mesh, MeshGeometry, MeshMaterial } from "@pixi/mesh"; +import { Texture } from "@pixi/core"; + +export class SlotMesh extends Mesh implements ISlotMesh { + public name: string = ""; + + private static readonly auxColor = [0, 0, 0, 0]; + private warnedTwoTint: boolean = false; + + constructor () { + const geometry = new MeshGeometry(); + + geometry.getBuffer("aVertexPosition").static = false; + geometry.getBuffer("aTextureCoord").static = false; + + const meshMaterial = new MeshMaterial(Texture.EMPTY); + super(geometry, meshMaterial); + } + public updateFromSpineData ( + slotTexture: SpineTexture, + slotBlendMode: BlendMode, + slotName: string, + finalVertices: NumberArrayLike, + finalVerticesLength: number, + finalIndices: NumberArrayLike, + finalIndicesLength: number, + darkTint: boolean + ): void { + this.texture = slotTexture.texture; + + const vertLenght = (finalVerticesLength / (darkTint ? 12 : 8)) * 2; + + if (this.geometry.getBuffer("aTextureCoord").data?.length !== vertLenght) { + this.geometry.getBuffer("aTextureCoord").data = new Float32Array(vertLenght); + } + + if (this.geometry.getBuffer("aVertexPosition").data?.length !== vertLenght) { + this.geometry.getBuffer("aVertexPosition").data = new Float32Array(vertLenght); + } + + let vertIndex = 0; + + for (let i = 0; i < finalVerticesLength; i += darkTint ? 12 : 8) { + let auxi = i; + + this.geometry.getBuffer("aVertexPosition").data[vertIndex] = finalVertices[auxi++]; + this.geometry.getBuffer("aVertexPosition").data[vertIndex + 1] = finalVertices[auxi++]; + + auxi += 4; // color + + this.geometry.getBuffer("aTextureCoord").data[vertIndex] = finalVertices[auxi++]; + this.geometry.getBuffer("aTextureCoord").data[vertIndex + 1] = finalVertices[auxi++]; + + vertIndex += 2; + } + + // console.log(vertLenght, auxVert.length); + + if (darkTint && !this.warnedTwoTint) { + console.warn("DarkTint is not enabled by default. To enable use a DarkSlotMesh factory while creating the Spine object."); + this.warnedTwoTint = true; + } + + SlotMesh.auxColor[0] = finalVertices[2]; + SlotMesh.auxColor[1] = finalVertices[3]; + SlotMesh.auxColor[2] = finalVertices[4]; + SlotMesh.auxColor[3] = finalVertices[5]; + + this.tint = SlotMesh.auxColor; + this.blendMode = SpineTexture.toPixiBlending(slotBlendMode); + + if (this.geometry.indexBuffer.data.length !== finalIndices.length) { + this.geometry.indexBuffer.data = new Uint32Array(finalIndices); + } else { + for (let i = 0; i < finalIndicesLength; i++) { + this.geometry.indexBuffer.data[i] = finalIndices[i]; + } + } + + this.name = slotName; + + this.geometry.getBuffer("aVertexPosition").update(); + this.geometry.getBuffer("aTextureCoord").update(); + this.geometry.indexBuffer.update(); + } +} diff --git a/spine-ts/spine-pixi/src/Spine.ts b/spine-ts/spine-pixi/src/Spine.ts new file mode 100644 index 000000000..e8ef4e205 --- /dev/null +++ b/spine-ts/spine-pixi/src/Spine.ts @@ -0,0 +1,379 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import type { BlendMode, Bone, Event, NumberArrayLike, SkeletonData, Slot, TextureAtlas, TrackEntry } from "@esotericsoftware/spine-core"; +import { + AnimationState, + AnimationStateData, + AtlasAttachmentLoader, + ClippingAttachment, + Color, + MeshAttachment, + RegionAttachment, + Skeleton, + SkeletonBinary, + SkeletonClipping, + SkeletonJson, + Utils, + Vector2, +} from "@esotericsoftware/spine-core"; +import type { SpineTexture } from "./SpineTexture"; +import { SlotMesh } from "./SlotMesh"; +import type { ISpineDebugRenderer } from "./SpineDebugRenderer"; +import { Assets } from "@pixi/assets"; +import type { IPointData } from "@pixi/core"; +import { Ticker, utils } from "@pixi/core"; +import type { IDestroyOptions, DisplayObject } from "@pixi/display"; +import { Container } from "@pixi/display"; + +export interface ISpineOptions { + autoUpdate?: boolean; + slotMeshFactory?: () => ISlotMesh; +} + +export interface SpineEvents { + complete: [trackEntry: TrackEntry]; + dispose: [trackEntry: TrackEntry]; + end: [trackEntry: TrackEntry]; + event: [trackEntry: TrackEntry, event: Event]; + interrupt: [trackEntry: TrackEntry]; + start: [trackEntry: TrackEntry]; +} + +export class Spine extends Container { + public skeleton: Skeleton; + public state: AnimationState; + + private _debug?: ISpineDebugRenderer | undefined = undefined; + public get debug (): ISpineDebugRenderer | undefined { + return this._debug; + } + public set debug (value: ISpineDebugRenderer | undefined) { + if (this._debug) { + this._debug.unregisterSpine(this); + } + if (value) { + value.registerSpine(this); + } + this._debug = value; + } + + protected slotMeshFactory: () => ISlotMesh; + + private autoUpdateWarned: boolean = false; + private _autoUpdate: boolean = true; + public get autoUpdate (): boolean { + return this._autoUpdate; + } + public set autoUpdate (value: boolean) { + if (value) { + Ticker.shared.add(this.internalUpdate, this); + this.autoUpdateWarned = false; + } else { + Ticker.shared.remove(this.internalUpdate, this); + } + this._autoUpdate = value; + } + + private meshesCache = new Map(); + + private static vectorAux: Vector2 = new Vector2(); + private static clipper: SkeletonClipping = new SkeletonClipping(); + + private static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + private static VERTEX_SIZE = 2 + 2 + 4; + private static DARK_VERTEX_SIZE = 2 + 2 + 4 + 4; + + private lightColor = new Color(); + private darkColor = new Color(); + + + constructor (skeletonData: SkeletonData, options?: ISpineOptions) { + super(); + + this.skeleton = new Skeleton(skeletonData); + const animData = new AnimationStateData(skeletonData); + this.state = new AnimationState(animData); + this.autoUpdate = options?.autoUpdate ?? true; + this.slotMeshFactory = options?.slotMeshFactory ?? ((): ISlotMesh => new SlotMesh()); + this.skeleton.setToSetupPose(); + this.skeleton.updateWorldTransform(); + } + + public update (deltaSeconds: number): void { + if (this.autoUpdate && !this.autoUpdateWarned) { + console.warn("You are calling update on a Spine instance that has autoUpdate set to true. This is probably not what you want."); + this.autoUpdateWarned = true; + } + this.internalUpdate(0, deltaSeconds); + } + + protected internalUpdate (_deltaFrame: number, deltaSeconds?: number): void { + // Because reasons, pixi uses deltaFrames at 60fps. We ignore the default deltaFrames and use the deltaSeconds from pixi ticker. + this.state.update(deltaSeconds ?? Ticker.shared.deltaMS / 1000); + } + + public override updateTransform (): void { + this.updateSpineTransform(); + this.debug?.renderDebug(this); + super.updateTransform(); + } + + protected updateSpineTransform (): void { + // if I ever create the linked spines, this will be useful. + + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + this.updateGeometry(); + this.sortChildren(); + } + + public override destroy (options?: boolean | IDestroyOptions | undefined): void { + for (const [, mesh] of this.meshesCache) { + mesh?.destroy(); + } + this.state.clearListeners(); + this.debug = undefined; + this.meshesCache.clear(); + super.destroy(options); + } + + private resetMeshes (): void { + for (const [, mesh] of this.meshesCache) { + mesh.zIndex = -1; + mesh.visible = false; + } + } + + /** + * If you want to manually handle which meshes go on which slot and how you cache, overwrite this method. + */ + protected getMeshForSlot (slot: Slot): ISlotMesh { + if (!this.meshesCache.has(slot)) { + let mesh = this.slotMeshFactory(); + this.addChild(mesh); + this.meshesCache.set(slot, mesh); + return mesh; + } else { + let mesh = this.meshesCache.get(slot)!; + mesh.visible = true; + return mesh; + } + } + + private verticesCache: NumberArrayLike = Utils.newFloatArray(1024); + + private updateGeometry (): void { + this.resetMeshes(); + + let triangles: Array | null = null; + let uvs: NumberArrayLike | null = null; + const drawOrder = this.skeleton.drawOrder; + + for (let i = 0, n = drawOrder.length; i < n; i++) { + const slot = drawOrder[i]; + const useDarkColor = slot.darkColor != null; + const vertexSize = Spine.clipper.isClipping() ? 2 : useDarkColor ? Spine.DARK_VERTEX_SIZE : Spine.VERTEX_SIZE; + if (!slot.bone.active) { + Spine.clipper.clipEndWithSlot(slot); + continue; + } + const attachment = slot.getAttachment(); + let attachmentColor: Color | null; + let texture: SpineTexture | null; + let numFloats = 0; + if (attachment instanceof RegionAttachment) { + const region = attachment; + attachmentColor = region.color; + numFloats = vertexSize * 4; + region.computeWorldVertices(slot, this.verticesCache, 0, vertexSize); + triangles = Spine.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region?.texture; + } else if (attachment instanceof MeshAttachment) { + const mesh = attachment; + attachmentColor = mesh.color; + numFloats = (mesh.worldVerticesLength >> 1) * vertexSize; + if (numFloats > this.verticesCache.length) { + this.verticesCache = Utils.newFloatArray(numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, this.verticesCache, 0, vertexSize); + triangles = mesh.triangles; + uvs = mesh.uvs; + texture = mesh.region?.texture; + } else if (attachment instanceof ClippingAttachment) { + Spine.clipper.clipStart(slot, attachment); + continue; + } else { + Spine.clipper.clipEndWithSlot(slot); + continue; + } + if (texture != null) { + const skeleton = slot.bone.skeleton; + const skeletonColor = skeleton.color; + const slotColor = slot.color; + const alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + this.lightColor.set( + skeletonColor.r * slotColor.r * attachmentColor.r, + skeletonColor.g * slotColor.g * attachmentColor.g, + skeletonColor.b * slotColor.b * attachmentColor.b, + alpha + ); + if (slot.darkColor != null) { + this.darkColor.setFromColor(slot.darkColor); + } else { + this.darkColor.set(0, 0, 0, 0); + } + + let finalVertices: NumberArrayLike; + let finalVerticesLength: number; + let finalIndices: NumberArrayLike; + let finalIndicesLength: number; + + if (Spine.clipper.isClipping()) { + Spine.clipper.clipTriangles(this.verticesCache, numFloats, triangles, triangles.length, uvs, this.lightColor, this.darkColor, useDarkColor); + + finalVertices = Spine.clipper.clippedVertices; + finalVerticesLength = finalVertices.length; + + finalIndices = Spine.clipper.clippedTriangles; + finalIndicesLength = finalIndices.length; + } else { + const verts = this.verticesCache; + for (let v = 2, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) { + let tempV = v; + verts[tempV++] = this.lightColor.r; + verts[tempV++] = this.lightColor.g; + verts[tempV++] = this.lightColor.b; + verts[tempV++] = this.lightColor.a; + + verts[tempV++] = uvs[u]; + verts[tempV++] = uvs[u + 1]; + + if (useDarkColor) { + verts[tempV++] = this.darkColor.r; + verts[tempV++] = this.darkColor.g; + verts[tempV++] = this.darkColor.b; + } + } + finalVertices = this.verticesCache; + finalVerticesLength = numFloats; + finalIndices = triangles; + finalIndicesLength = triangles.length; + } + + if (finalVerticesLength == 0 || finalIndicesLength == 0) { + Spine.clipper.clipEndWithSlot(slot); + continue; + } + + const mesh = this.getMeshForSlot(slot); + mesh.zIndex = i; + mesh.updateFromSpineData(texture, slot.data.blendMode, slot.data.name, finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, useDarkColor); + } + + Spine.clipper.clipEndWithSlot(slot); + } + Spine.clipper.clipEnd(); + } + + public setBonePosition (bone: string | Bone, position: IPointData): void { + const boneAux = bone; + if (typeof bone === "string") { + bone = this.skeleton.findBone(bone)!; + } + + if (!bone) throw Error(`Cant set bone position, bone ${String(boneAux)} not found`); + Spine.vectorAux.set(position.x, position.y); + + if (bone.parent) { + const aux = bone.parent.worldToLocal(Spine.vectorAux); + bone.x = aux.x; + bone.y = aux.y; + } + else { + bone.x = Spine.vectorAux.x; + bone.y = Spine.vectorAux.y; + } + } + + public getBonePosition (bone: string | Bone, outPos?: IPointData): IPointData | undefined { + const boneAux = bone; + if (typeof bone === "string") { + bone = this.skeleton.findBone(bone)!; + } + + if (!bone) { + console.error(`Cant set bone position! Bone ${String(boneAux)} not found`); + return outPos; + } + + if (!outPos) { + outPos = { x: 0, y: 0 }; + } + + outPos.x = bone.worldX; + outPos.y = bone.worldY; + return outPos; + } + + public static readonly skeletonCache: Record = Object.create(null); + + public static from (skeletonAssetName: string, atlasAssetName: string, options?: ISpineOptions & { scale?: number }): Spine { + const cacheKey = `${skeletonAssetName}-${atlasAssetName}-${options?.scale ?? 1}`; + let skeletonData = Spine.skeletonCache[cacheKey]; + if (skeletonData) { + return new Spine(skeletonData, options); + } + const skeletonAsset = Assets.get(skeletonAssetName); + const atlasAsset = Assets.get(atlasAssetName); + const attachmentLoader = new AtlasAttachmentLoader(atlasAsset); + let parser = skeletonAsset instanceof Uint8Array ? new SkeletonBinary(attachmentLoader) : new SkeletonJson(attachmentLoader); + parser.scale = options?.scale ?? 1; + skeletonData = parser.readSkeletonData(skeletonAsset); + Spine.skeletonCache[cacheKey] = skeletonData; + return new this(skeletonData, options); + } +} + +Skeleton.yDown = true; + +export interface ISlotMesh extends DisplayObject { + name: string; + updateFromSpineData ( + slotTexture: SpineTexture, + slotBlendMode: BlendMode, + slotName: string, + finalVertices: NumberArrayLike, + finalVerticesLength: number, + finalIndices: NumberArrayLike, + finalIndicesLength: number, + darkTint: boolean + ): void; +} diff --git a/spine-ts/spine-pixi/src/SpineDebugRenderer.ts b/spine-ts/spine-pixi/src/SpineDebugRenderer.ts new file mode 100644 index 000000000..c217d9e70 --- /dev/null +++ b/spine-ts/spine-pixi/src/SpineDebugRenderer.ts @@ -0,0 +1,572 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { Container } from "@pixi/display"; +import { Graphics } from "@pixi/graphics"; +import { Text } from "@pixi/text"; +import type { Spine } from "./Spine"; +import type { AnimationStateListener } from "@esotericsoftware/spine-core"; +import { ClippingAttachment, MeshAttachment, PathAttachment, RegionAttachment, SkeletonBounds } from "@esotericsoftware/spine-core"; + +/** + * Make a class that extends from this interface to create your own debug renderer. + * @public + */ +export interface ISpineDebugRenderer { + /** + * This will be called every frame, after the spine has been updated. + */ + renderDebug (spine: Spine): void; + + /** + * This is called when the `spine.debug` object is set to null or when the spine is destroyed. + */ + unregisterSpine (spine: Spine): void; + + /** + * This is called when the `spine.debug` object is set to a new instance of a debug renderer. + */ + registerSpine (spine: Spine): void; +} + +type DebugDisplayObjects = { + bones: Container; + skeletonXY: Graphics; + regionAttachmentsShape: Graphics; + meshTrianglesLine: Graphics; + meshHullLine: Graphics; + clippingPolygon: Graphics; + boundingBoxesRect: Graphics; + boundingBoxesCircle: Graphics; + boundingBoxesPolygon: Graphics; + pathsCurve: Graphics; + pathsLine: Graphics; + parentDebugContainer: Container; + eventText: Container; + eventCallback: AnimationStateListener; +}; + +/** + * This is a debug renderer that uses PixiJS Graphics under the hood. + * @public + */ +export class SpineDebugRenderer implements ISpineDebugRenderer { + private registeredSpines: Map = new Map(); + + public drawMeshHull = true; + public drawMeshTriangles = true; + public drawBones = true; + public drawPaths = true; + public drawBoundingBoxes = true; + public drawClipping = true; + public drawRegionAttachments = true; + public drawEvents = true; + + public lineWidth = 1; + public regionAttachmentsColor = 0x0078ff; + public meshHullColor = 0x0078ff; + public meshTrianglesColor = 0xffcc00; + public clippingPolygonColor = 0xff00ff; + public boundingBoxesRectColor = 0x00ff00; + public boundingBoxesPolygonColor = 0x00ff00; + public boundingBoxesCircleColor = 0x00ff00; + public pathsCurveColor = 0xff0000; + public pathsLineColor = 0xff00ff; + public skeletonXYColor = 0xff0000; + public bonesColor = 0x00eecc; + public eventFontSize: number = 24; + public eventFontColor: number = 0x0; + + /** + * The debug is attached by force to each spine object. So we need to create it inside the spine when we get the first update + */ + public registerSpine (spine: Spine): void { + if (this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!", spine); + return; + } + const debugDisplayObjects: DebugDisplayObjects = { + parentDebugContainer: new Container(), + bones: new Container(), + skeletonXY: new Graphics(), + regionAttachmentsShape: new Graphics(), + meshTrianglesLine: new Graphics(), + meshHullLine: new Graphics(), + clippingPolygon: new Graphics(), + boundingBoxesRect: new Graphics(), + boundingBoxesCircle: new Graphics(), + boundingBoxesPolygon: new Graphics(), + pathsCurve: new Graphics(), + pathsLine: new Graphics(), + eventText: new Container(), + eventCallback: { + event: (_, event) => { + if (this.drawEvents) { + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const text = new Text(event.data.name, { fontSize: this.eventFontSize / scale, fill: this.eventFontColor, fontFamily: "monospace" }); + text.scale.x = Math.sign(spine.scale.x); + text.anchor.set(0.5); + debugDisplayObjects.eventText.addChild(text); + setTimeout(() => { + if (!text.destroyed) { + text.destroy(); + } + }, 250); + } + }, + }, + }; + + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText); + + debugDisplayObjects.parentDebugContainer.zIndex = 9999999; + + // Disable screen reader and mouse input on debug objects. + (debugDisplayObjects.parentDebugContainer as any).accessibleChildren = false; + (debugDisplayObjects.parentDebugContainer as any).eventMode = "none"; + (debugDisplayObjects.parentDebugContainer as any).interactiveChildren = false; + + spine.addChild(debugDisplayObjects.parentDebugContainer); + + spine.state.addListener(debugDisplayObjects.eventCallback); + + this.registeredSpines.set(spine, debugDisplayObjects); + } + public renderDebug (spine: Spine): void { + if (!this.registeredSpines.has(spine)) { + // This should never happen. Spines are registered when you assign spine.debug + this.registerSpine(spine); + } + + const debugDisplayObjects = this.registeredSpines.get(spine); + + if (!debugDisplayObjects) { + return; + } + spine.addChild(debugDisplayObjects.parentDebugContainer); + + debugDisplayObjects.skeletonXY.clear(); + debugDisplayObjects.regionAttachmentsShape.clear(); + debugDisplayObjects.meshTrianglesLine.clear(); + debugDisplayObjects.meshHullLine.clear(); + debugDisplayObjects.clippingPolygon.clear(); + debugDisplayObjects.boundingBoxesRect.clear(); + debugDisplayObjects.boundingBoxesCircle.clear(); + debugDisplayObjects.boundingBoxesPolygon.clear(); + debugDisplayObjects.pathsCurve.clear(); + debugDisplayObjects.pathsLine.clear(); + + for (let len = debugDisplayObjects.bones.children.length; len > 0; len--) { + debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, baseTexture: true }); + } + + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const lineWidth = this.lineWidth / scale; + + if (this.drawBones) { + this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale); + } + + if (this.drawPaths) { + this.drawPathsFunc(spine, debugDisplayObjects, lineWidth); + } + + if (this.drawBoundingBoxes) { + this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth); + } + + if (this.drawClipping) { + this.drawClippingFunc(spine, debugDisplayObjects, lineWidth); + } + + if (this.drawMeshHull || this.drawMeshTriangles) { + this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth); + } + + if (this.drawRegionAttachments) { + this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth); + } + + if (this.drawEvents) { + for (const child of debugDisplayObjects.eventText.children) { + child.alpha -= 0.05; + child.y -= 2; + } + } + } + + private drawBonesFunc (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number, scale: number): void { + const skeleton = spine.skeleton; + const skeletonX = skeleton.x; + const skeletonY = skeleton.y; + const bones = skeleton.bones; + + debugDisplayObjects.skeletonXY.lineStyle(lineWidth, this.skeletonXYColor, 1); + + for (let i = 0, len = bones.length; i < len; i++) { + const bone = bones[i]; + const boneLen = bone.data.length; + const starX = skeletonX + bone.worldX; + const starY = skeletonY + bone.worldY; + const endX = skeletonX + boneLen * bone.a + bone.worldX; + const endY = skeletonY + boneLen * bone.b + bone.worldY; + + if (bone.data.name === "root" || bone.data.parent === null) { + continue; + } + + const w = Math.abs(starX - endX); + const h = Math.abs(starY - endY); + // a = w, // side length a + const a2 = Math.pow(w, 2); // square root of side length a + const b = h; // side length b + const b2 = Math.pow(h, 2); // square root of side length b + const c = Math.sqrt(a2 + b2); // side length c + const c2 = Math.pow(c, 2); // square root of side length c + const rad = Math.PI / 180; + // A = Math.acos([a2 + c2 - b2] / [2 * a * c]) || 0, // Angle A + // C = Math.acos([a2 + b2 - c2] / [2 * a * b]) || 0, // C angle + const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; // angle of corner B + + if (c === 0) { + continue; + } + + const gp = new Graphics(); + + debugDisplayObjects.bones.addChild(gp); + + // draw bone + const refRation = c / 50 / scale; + + gp.beginFill(this.bonesColor, 1); + gp.drawPolygon(0, 0, 0 - refRation, c - refRation * 3, 0, c - refRation, 0 + refRation, c - refRation * 3); + gp.endFill(); + gp.x = starX; + gp.y = starY; + gp.pivot.y = c; + + // Calculate bone rotation angle + let rotation = 0; + + if (starX < endX && starY < endY) { + // bottom right + rotation = -B + 180 * rad; + } else if (starX > endX && starY < endY) { + // bottom left + rotation = 180 * rad + B; + } else if (starX > endX && starY > endY) { + // top left + rotation = -B; + } else if (starX < endX && starY > endY) { + // bottom left + rotation = B; + } else if (starY === endY && starX < endX) { + // To the right + rotation = 90 * rad; + } else if (starY === endY && starX > endX) { + // go left + rotation = -90 * rad; + } else if (starX === endX && starY < endY) { + // down + rotation = 180 * rad; + } else if (starX === endX && starY > endY) { + // up + rotation = 0; + } + gp.rotation = rotation; + + // Draw the starting rotation point of the bone + gp.lineStyle(lineWidth + refRation / 2.4, this.bonesColor, 1); + gp.beginFill(0x000000, 0.6); + gp.drawCircle(0, c, refRation * 1.2); + gp.endFill(); + } + + // Draw the skeleton starting point "X" form + const startDotSize = lineWidth * 3; + + debugDisplayObjects.skeletonXY.moveTo(skeletonX - startDotSize, skeletonY - startDotSize); + debugDisplayObjects.skeletonXY.lineTo(skeletonX + startDotSize, skeletonY + startDotSize); + debugDisplayObjects.skeletonXY.moveTo(skeletonX + startDotSize, skeletonY - startDotSize); + debugDisplayObjects.skeletonXY.lineTo(skeletonX - startDotSize, skeletonY + startDotSize); + } + + private drawRegionAttachmentsFunc (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + + debugDisplayObjects.regionAttachmentsShape.lineStyle(lineWidth, this.regionAttachmentsColor, 1); + + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + const attachment = slot.getAttachment(); + + if (attachment == null || !(attachment instanceof RegionAttachment)) { + continue; + } + + const regionAttachment = attachment; + + const vertices = new Float32Array(8); + + regionAttachment.computeWorldVertices(slot, vertices, 0, 2); + debugDisplayObjects.regionAttachmentsShape.drawPolygon(Array.from(vertices.slice(0, 8))); + } + } + + private drawMeshHullAndMeshTriangles (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + + debugDisplayObjects.meshHullLine.lineStyle(lineWidth, this.meshHullColor, 1); + debugDisplayObjects.meshTrianglesLine.lineStyle(lineWidth, this.meshTrianglesColor, 1); + + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + + if (attachment == null || !(attachment instanceof MeshAttachment)) { + continue; + } + + const meshAttachment = attachment; + + const vertices = new Float32Array(meshAttachment.worldVerticesLength); + const triangles = meshAttachment.triangles; + let hullLength = meshAttachment.hullLength; + + meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2); + // draw the skinned mesh (triangle) + if (this.drawMeshTriangles) { + for (let i = 0, len = triangles.length; i < len; i += 3) { + const v1 = triangles[i] * 2; + const v2 = triangles[i + 1] * 2; + const v3 = triangles[i + 2] * 2; + + debugDisplayObjects.meshTrianglesLine.moveTo(vertices[v1], vertices[v1 + 1]); + debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v2], vertices[v2 + 1]); + debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v3], vertices[v3 + 1]); + } + } + + // draw skin border + if (this.drawMeshHull && hullLength > 0) { + hullLength = (hullLength >> 1) * 2; + let lastX = vertices[hullLength - 2]; + let lastY = vertices[hullLength - 1]; + + for (let i = 0, len = hullLength; i < len; i += 2) { + const x = vertices[i]; + const y = vertices[i + 1]; + + debugDisplayObjects.meshHullLine.moveTo(x, y); + debugDisplayObjects.meshHullLine.lineTo(lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + + private drawClippingFunc (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + + debugDisplayObjects.clippingPolygon.lineStyle(lineWidth, this.clippingPolygonColor, 1); + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + + if (attachment == null || !(attachment instanceof ClippingAttachment)) { + continue; + } + + const clippingAttachment = attachment; + + const nn = clippingAttachment.worldVerticesLength; + const world = new Float32Array(nn); + + clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2); + debugDisplayObjects.clippingPolygon.drawPolygon(Array.from(world)); + } + } + + private drawBoundingBoxesFunc (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void { + // draw the total outline of the bounding box + debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5); + + const bounds = new SkeletonBounds(); + + bounds.update(spine.skeleton, true); + debugDisplayObjects.boundingBoxesRect.drawRect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + + const polygons = bounds.polygons; + const drawPolygon = (polygonVertices: ArrayLike, _offset: unknown, count: number): void => { + debugDisplayObjects.boundingBoxesPolygon.lineStyle(lineWidth, this.boundingBoxesPolygonColor, 1); + debugDisplayObjects.boundingBoxesPolygon.beginFill(this.boundingBoxesPolygonColor, 0.1); + + if (count < 3) { + throw new Error("Polygon must contain at least 3 vertices"); + } + const paths = []; + const dotSize = lineWidth * 2; + + for (let i = 0, len = polygonVertices.length; i < len; i += 2) { + const x1 = polygonVertices[i]; + const y1 = polygonVertices[i + 1]; + + // draw the bounding box node + debugDisplayObjects.boundingBoxesCircle.lineStyle(0); + debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor); + debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize); + debugDisplayObjects.boundingBoxesCircle.endFill(); + + paths.push(x1, y1); + } + + // draw the bounding box area + debugDisplayObjects.boundingBoxesPolygon.drawPolygon(paths); + debugDisplayObjects.boundingBoxesPolygon.endFill(); + }; + + for (let i = 0, len = polygons.length; i < len; i++) { + const polygon = polygons[i]; + + drawPolygon(polygon, 0, polygon.length); + } + } + + private drawPathsFunc (spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + + debugDisplayObjects.pathsCurve.lineStyle(lineWidth, this.pathsCurveColor, 1); + debugDisplayObjects.pathsLine.lineStyle(lineWidth, this.pathsLineColor, 1); + + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + + if (attachment == null || !(attachment instanceof PathAttachment)) { + continue; + } + + const pathAttachment = attachment; + let nn = pathAttachment.worldVerticesLength; + const world = new Float32Array(nn); + + pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2); + let x1 = world[2]; + let y1 = world[3]; + let x2 = 0; + let y2 = 0; + + if (pathAttachment.closed) { + const cx1 = world[0]; + const cy1 = world[1]; + const cx2 = world[nn - 2]; + const cy2 = world[nn - 1]; + + x2 = world[nn - 4]; + y2 = world[nn - 3]; + + // curve + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + + // handle + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + } + nn -= 4; + for (let ii = 4; ii < nn; ii += 6) { + const cx1 = world[ii]; + const cy1 = world[ii + 1]; + const cx2 = world[ii + 2]; + const cy2 = world[ii + 3]; + + x2 = world[ii + 4]; + y2 = world[ii + 5]; + // curve + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + + // handle + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + + public unregisterSpine (spine: Spine): void { + if (!this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!", spine); + } + const debugDisplayObjects = this.registeredSpines.get(spine); + + if (!debugDisplayObjects) { + return; + } + + spine.state.removeListener(debugDisplayObjects.eventCallback); + + debugDisplayObjects.parentDebugContainer.destroy({ baseTexture: true, children: true, texture: true }); + this.registeredSpines.delete(spine); + } +} diff --git a/spine-ts/spine-pixi/src/SpineTexture.ts b/spine-ts/spine-pixi/src/SpineTexture.ts new file mode 100644 index 000000000..784bb18d0 --- /dev/null +++ b/spine-ts/spine-pixi/src/SpineTexture.ts @@ -0,0 +1,138 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { BlendMode, Texture, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core"; +import type { BaseTexture as PixiBaseTexture, BaseImageResource } from "@pixi/core"; +import { Texture as PixiTexture, SCALE_MODES, MIPMAP_MODES, WRAP_MODES, BLEND_MODES } from "@pixi/core"; + +export class SpineTexture extends Texture { + private static textureMap: Map = new Map(); + + public static from (texture: PixiBaseTexture): SpineTexture { + if (SpineTexture.textureMap.has(texture)) { + return SpineTexture.textureMap.get(texture)!; + } + return new SpineTexture(texture); + } + + public readonly texture: PixiTexture; + + private constructor (image: PixiBaseTexture) { + // Todo: maybe add error handling if you feed a video texture to spine? + super((image.resource as BaseImageResource).source as any); + this.texture = PixiTexture.from(image); + } + + public setFilters (minFilter: TextureFilter, _magFilter: TextureFilter): void { + this.texture.baseTexture.scaleMode = SpineTexture.toPixiTextureFilter(minFilter); + this.texture.baseTexture.mipmap = SpineTexture.toPixiMipMap(minFilter); + + // pixi only has one filter for both min and mag, too bad + } + + public setWraps (uWrap: TextureWrap, _vWrap: TextureWrap): void { + this.texture.baseTexture.wrapMode = SpineTexture.toPixiTextureWrap(uWrap); + + // Pixi only has one setting + } + + public dispose (): void { + // I am not entirely sure about this... + this.texture.destroy(); + } + + private static toPixiTextureFilter (filter: TextureFilter): SCALE_MODES { + switch (filter) { + case TextureFilter.Nearest: + case TextureFilter.MipMapNearestLinear: + case TextureFilter.MipMapNearestNearest: + return SCALE_MODES.NEAREST; + + case TextureFilter.Linear: + case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap + case TextureFilter.MipMapLinearNearest: + return SCALE_MODES.LINEAR; + + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + + private static toPixiMipMap (filter: TextureFilter): MIPMAP_MODES { + switch (filter) { + case TextureFilter.Nearest: + case TextureFilter.Linear: + return MIPMAP_MODES.OFF; + + case TextureFilter.MipMapNearestLinear: + case TextureFilter.MipMapNearestNearest: + case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap + case TextureFilter.MipMapLinearNearest: + return MIPMAP_MODES.ON; + + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + + private static toPixiTextureWrap (wrap: TextureWrap): WRAP_MODES { + switch (wrap) { + case TextureWrap.ClampToEdge: + return WRAP_MODES.CLAMP; + + case TextureWrap.MirroredRepeat: + return WRAP_MODES.MIRRORED_REPEAT; + + case TextureWrap.Repeat: + return WRAP_MODES.REPEAT; + + default: + throw new Error(`Unknown texture wrap: ${String(wrap)}`); + } + } + + public static toPixiBlending (blend: BlendMode): BLEND_MODES { + switch (blend) { + case BlendMode.Normal: + return BLEND_MODES.NORMAL; + + case BlendMode.Additive: + return BLEND_MODES.ADD; + + case BlendMode.Multiply: + return BLEND_MODES.MULTIPLY; + + case BlendMode.Screen: + return BLEND_MODES.SCREEN; + + default: + throw new Error(`Unknown blendMode: ${String(blend)}`); + } + } +} diff --git a/spine-ts/spine-pixi/src/assets/atlasLoader.ts b/spine-ts/spine-pixi/src/assets/atlasLoader.ts new file mode 100644 index 000000000..cc008c449 --- /dev/null +++ b/spine-ts/spine-pixi/src/assets/atlasLoader.ts @@ -0,0 +1,122 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { TextureAtlas } from "@esotericsoftware/spine-core"; +import { SpineTexture } from "../SpineTexture"; +import type { AssetExtension, Loader } from "@pixi/assets"; +import { LoaderParserPriority, checkExtension } from "@pixi/assets"; +import type { Texture } from "@pixi/core"; +import { ExtensionType, settings, utils, BaseTexture, extensions } from "@pixi/core"; + +type RawAtlas = string; + +const spineTextureAtlasLoader: AssetExtension = { + extension: ExtensionType.Asset, + + loader: { + extension: { + type: ExtensionType.LoadParser, + priority: LoaderParserPriority.Normal, + name: "spineTextureAtlasLoader", + }, + + test(url: string): boolean { + return checkExtension(url, ".atlas"); + }, + + async load(url: string): Promise { + const response = await settings.ADAPTER.fetch(url); + + const txt = await response.text(); + + return txt; + }, + + testParse(asset: unknown, options: {src: string}): Promise { + const isExtensionRight = checkExtension(options.src, ".atlas"); + const isString = typeof asset === "string"; + + return Promise.resolve(isExtensionRight && isString); + }, + + unload(atlas: TextureAtlas) { + atlas.dispose(); + }, + + async parse(asset: RawAtlas, options: {src: string, data: ISpineAtlasMetadata}, loader: Loader): Promise { + const metadata: ISpineAtlasMetadata = options.data || {}; + let basePath = utils.path.dirname(options.src); + + if (basePath && basePath.lastIndexOf("/") !== basePath.length - 1) { + basePath += "/"; + } + + // Retval is going to be a texture atlas. However we need to wait for it's callback to resolve this promise. + const retval = new TextureAtlas(asset); + + // If the user gave me only one texture, that one is assumed to be the "first" texture in the atlas + if (metadata.images instanceof BaseTexture || typeof metadata.images === "string") { + const pixiTexture = metadata.images; + metadata.images = {} as Record; + metadata.images[retval.pages[0].name] = pixiTexture; + } + + // we will wait for all promises for the textures at the same time at the end. + const textureLoadingPromises = []; + + // fill the pages + for (const page of retval.pages) { + const pageName = page.name; + const providedPage = metadata?.images ? metadata.images[pageName] : undefined; + if (providedPage instanceof BaseTexture) { + page.setTexture(SpineTexture.from(providedPage)); + } else { + const url: string = providedPage ?? utils.path.normalize([...basePath.split(utils.path.sep), pageName].join(utils.path.sep)); + const pixiPromise = loader.load({ src: url, data: metadata.imageMetadata }).then((texture) => { + page.setTexture(SpineTexture.from(texture.baseTexture)); + }); + textureLoadingPromises.push(pixiPromise); + } + } + + await Promise.all(textureLoadingPromises); + + return retval; + }, + }, +} as AssetExtension; + +extensions.add(spineTextureAtlasLoader); + +export interface ISpineAtlasMetadata { + // If you are downloading an .atlas file, this metadata will go to the Texture loader + imageMetadata?: any; + // If you already have atlas pages loaded as pixi textures and want to use that to create the atlas, you can pass them here + images?: BaseTexture | string | Record; +} diff --git a/spine-ts/spine-pixi/src/assets/skeletonLoader.ts b/spine-ts/spine-pixi/src/assets/skeletonLoader.ts new file mode 100644 index 000000000..030b8de9f --- /dev/null +++ b/spine-ts/spine-pixi/src/assets/skeletonLoader.ts @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import type { AssetExtension } from "@pixi/assets"; +import { LoaderParserPriority, checkExtension } from "@pixi/assets"; +import { ExtensionType, settings, extensions } from "@pixi/core"; + +type SkeletonJsonAsset = any; +type SkeletonBinaryAsset = Uint8Array; + +function isJson(resource: any): resource is SkeletonJsonAsset { + return resource.hasOwnProperty("bones"); +} + +function isBuffer(resource: any): resource is SkeletonBinaryAsset { + return resource instanceof Uint8Array; +} + +const spineLoaderExtension: AssetExtension = { + extension: ExtensionType.Asset, + + loader: { + extension: { + type: ExtensionType.LoadParser, + priority: LoaderParserPriority.Normal, + }, + + test(url) { + return checkExtension(url, ".skel"); + }, + + async load(url: string): Promise { + const response = await settings.ADAPTER.fetch(url); + + const buffer = new Uint8Array(await response.arrayBuffer()); + + return buffer; + }, + testParse(asset: unknown, options: {src: string}): Promise { + const isJsonSpineModel = checkExtension(options.src, ".json") && isJson(asset); + const isBinarySpineModel = checkExtension(options.src, ".skel") && isBuffer(asset); + + return Promise.resolve(isJsonSpineModel || isBinarySpineModel); + }, + }, +} as AssetExtension; + +extensions.add(spineLoaderExtension); diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintBatchGeom.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintBatchGeom.ts new file mode 100644 index 000000000..596a3ff78 --- /dev/null +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintBatchGeom.ts @@ -0,0 +1,61 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { Geometry, Buffer, TYPES } from "@pixi/core"; + +/** + * Geometry used to batch standard PIXI content (e.g. Mesh, Sprite, Graphics objects). + * @memberof PIXI + */ +export class DarkTintBatchGeometry extends Geometry { + // eslint-disable-next-line @typescript-eslint/naming-convention + public _buffer: Buffer; + + // eslint-disable-next-line @typescript-eslint/naming-convention + public _indexBuffer: Buffer; + + /** + * @param {boolean} [_static=false] - Optimization flag, where `false` + * is updated every frame, `true` doesn't change frame-to-frame. + */ + constructor(_static = false) { + super(); + + this._buffer = new Buffer(undefined, _static, false); + + this._indexBuffer = new Buffer(undefined, _static, true); + + this.addAttribute("aVertexPosition", this._buffer, 2, false, TYPES.FLOAT) + .addAttribute("aTextureCoord", this._buffer, 2, false, TYPES.FLOAT) + .addAttribute("aColor", this._buffer, 4, true, TYPES.UNSIGNED_BYTE) + .addAttribute("aDarkColor", this._buffer, 4, true, TYPES.UNSIGNED_BYTE) + .addAttribute("aTextureId", this._buffer, 1, true, TYPES.FLOAT) + .addIndex(this._indexBuffer); + } +} diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintGeom.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintGeom.ts new file mode 100644 index 000000000..65d9e425c --- /dev/null +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintGeom.ts @@ -0,0 +1,52 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import { Geometry, Buffer, TYPES } from "@pixi/core"; + +/** + * Geometry used to batch standard PIXI content (e.g. Mesh, Sprite, Graphics objects). + * @memberof PIXI + */ +export class DarkTintGeometry extends Geometry { + /** + * @param {boolean} [_static=false] - Optimization flag, where `false` + * is updated every frame, `true` doesn't change frame-to-frame. + */ + constructor(_static = false) { + super(); + + const verticesBuffer = new Buffer(undefined); + const uvsBuffer = new Buffer(undefined, true); + const indexBuffer = new Buffer(undefined, true, true); + + this.addAttribute("aVertexPosition", verticesBuffer, 2, false, TYPES.FLOAT); + this.addAttribute("aTextureCoord", uvsBuffer, 2, false, TYPES.FLOAT); + this.addIndex(indexBuffer); + } +} diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts new file mode 100644 index 000000000..f909727db --- /dev/null +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts @@ -0,0 +1,204 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import type { ColorSource } from "@pixi/core"; +import { Shader, TextureMatrix, Color, Texture, Matrix, Program } from "@pixi/core"; + +const vertex = ` +attribute vec2 aVertexPosition; +attribute vec2 aTextureCoord; + +uniform mat3 projectionMatrix; +uniform mat3 translationMatrix; +uniform mat3 uTextureMatrix; + +varying vec2 vTextureCoord; + +void main(void) +{ + gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); + + vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy; +} +`; + +const fragment = ` +varying vec2 vTextureCoord; +uniform vec4 uColor; +uniform vec4 uDarkColor; + +uniform sampler2D uSampler; + +void main(void) +{ + vec4 texColor = texture2D(uSampler, vTextureCoord); + gl_FragColor.a = texColor.a * uColor.a; + gl_FragColor.rgb = ((texColor.a - 1.0) * uDarkColor.a + 1.0 - texColor.rgb) * uDarkColor.rgb + texColor.rgb * uColor.rgb; +} +`; + +export interface IDarkTintMaterialOptions { + alpha?: number; + tint?: ColorSource; + darkTint?: ColorSource; + pluginName?: string; + uniforms?: Record; +} + +export class DarkTintMaterial extends Shader { + public readonly uvMatrix: TextureMatrix; + + public batchable: boolean; + + public pluginName: string; + + // eslint-disable-next-line @typescript-eslint/naming-convention + public _tintRGB: number; + // eslint-disable-next-line @typescript-eslint/naming-convention + public _darkTintRGB: number; + + /** + * Only do update if tint or alpha changes. + * @private + * @default false + */ + private _colorDirty: boolean; + private _alpha: number; + + private _tintColor: Color; + private _darkTintColor: Color; + + constructor(texture?: Texture) { + const uniforms = { + uSampler: texture ?? Texture.EMPTY, + alpha: 1, + uTextureMatrix: Matrix.IDENTITY, + uColor: new Float32Array([1, 1, 1, 1]), + uDarkColor: new Float32Array([0, 0, 0, 0]), + }; + + // Set defaults + const options = { + tint: 0xffffff, + darkTint: 0x0, + alpha: 1, + pluginName: "darkTintBatch", + }; + + super(Program.from(vertex, fragment), uniforms); + + this._colorDirty = false; + + this.uvMatrix = new TextureMatrix(uniforms.uSampler); + this.batchable = true; + this.pluginName = options.pluginName; + + this._tintColor = new Color(options.tint); + this._darkTintColor = new Color(options.darkTint); + this._tintRGB = this._tintColor.toLittleEndianNumber(); + this._darkTintRGB = this._darkTintColor.toLittleEndianNumber(); + this._alpha = options.alpha; + this._colorDirty = true; + } + + public get texture(): Texture { + return this.uniforms.uSampler; + } + public set texture(value: Texture) { + if (this.uniforms.uSampler !== value) { + if (!this.uniforms.uSampler.baseTexture.alphaMode !== !value.baseTexture.alphaMode) { + this._colorDirty = true; + } + + this.uniforms.uSampler = value; + this.uvMatrix.texture = value; + } + } + + public set alpha(value: number) { + if (value === this._alpha) { + return; + } + + this._alpha = value; + this._colorDirty = true; + } + public get alpha(): number { + return this._alpha; + } + + public set tint(value: ColorSource) { + if (value === this.tint) { + return; + } + + this._tintColor.setValue(value); + this._tintRGB = this._tintColor.toLittleEndianNumber(); + this._colorDirty = true; + } + public get tint(): ColorSource { + return this._tintColor.value!; + } + + public set darkTint(value: ColorSource) { + if (value === this.darkTint) { + return; + } + + this._darkTintColor.setValue(value); + this._darkTintRGB = this._darkTintColor.toLittleEndianNumber(); + this._colorDirty = true; + } + public get darkTint(): ColorSource { + return this._darkTintColor.value!; + } + + public get tintValue(): number { + return this._tintColor.toNumber(); + } + + public get darkTintValue(): number { + return this._darkTintColor.toNumber(); + } + + /** Gets called automatically by the Mesh. Intended to be overridden for custom {@link PIXI.MeshMaterial} objects. */ + public update(): void { + if (this._colorDirty) { + this._colorDirty = false; + const baseTexture = this.texture.baseTexture; + const applyToChannels = baseTexture.alphaMode as unknown as boolean; + + Color.shared.setValue(this._tintColor).premultiply(this._alpha, applyToChannels).toArray(this.uniforms.uColor); + Color.shared.setValue(this._darkTintColor).premultiply(this._alpha, applyToChannels).toArray(this.uniforms.uDarkColor); + } + if (this.uvMatrix.update()) { + this.uniforms.uTextureMatrix = this.uvMatrix.mapCoord; + } + } +} diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts new file mode 100644 index 000000000..9f5efb675 --- /dev/null +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts @@ -0,0 +1,91 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import type { Texture, ColorSource, Renderer, BLEND_MODES } from "@pixi/core"; +import { Mesh } from "@pixi/mesh"; +import { DarkTintGeometry } from "./DarkTintGeom"; +import { DarkTintMaterial } from "./DarkTintMaterial"; + +export interface IDarkTintElement { + // eslint-disable-next-line @typescript-eslint/naming-convention + _texture: Texture; + vertexData: Float32Array; + indices: Uint16Array | Uint32Array | Array; + uvs: Float32Array; + worldAlpha: number; + // eslint-disable-next-line @typescript-eslint/naming-convention + _tintRGB: number; + // eslint-disable-next-line @typescript-eslint/naming-convention + _darkTintRGB: number; + blendMode: BLEND_MODES; +} + +export class DarkTintMesh extends Mesh { + // eslint-disable-next-line @typescript-eslint/naming-convention + public _darkTintRGB: number = 0; + + constructor(texture?: Texture) { + super(new DarkTintGeometry(), new DarkTintMaterial(texture), undefined, undefined); + } + + public get darkTint(): ColorSource | null { + return "darkTint" in this.shader ? (this.shader as unknown as DarkTintMaterial).darkTint : null; + } + + public set darkTint(value: ColorSource | null) { + (this.shader as unknown as DarkTintMaterial).darkTint = value!; + } + + public get darkTintValue(): number { + return (this.shader as unknown as DarkTintMaterial).darkTintValue; + } + + // eslint-disable-next-line @typescript-eslint/naming-convention + protected override _renderToBatch(renderer: Renderer): void { + const geometry = this.geometry; + const shader = this.shader; + + if (shader.uvMatrix) { + shader.uvMatrix.update(); + this.calculateUvs(); + } + + // set properties for batching.. + this.calculateVertices(); + this.indices = geometry.indexBuffer.data as Uint16Array; + this._tintRGB = shader._tintRGB; + this._darkTintRGB = shader._darkTintRGB; + this._texture = shader.texture; + + const pluginName = this.material.pluginName; + + renderer.batch.setObjectRenderer(renderer.plugins[pluginName]); + renderer.plugins[pluginName].render(this); + } +} diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts new file mode 100644 index 000000000..69d78d9ee --- /dev/null +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts @@ -0,0 +1,119 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +import type { IDarkTintElement } from "./DarkTintMesh"; +import { DarkTintBatchGeometry } from "./DarkTintBatchGeom"; +import type { ExtensionMetadata, Renderer, ViewableBuffer } from "@pixi/core"; +import { BatchRenderer, ExtensionType, BatchShaderGenerator, Color } from "@pixi/core"; + +const vertex = ` +precision highp float; +attribute vec2 aVertexPosition; +attribute vec2 aTextureCoord; +attribute vec4 aColor; +attribute vec4 aDarkColor; +attribute float aTextureId; + +uniform mat3 projectionMatrix; +uniform mat3 translationMatrix; +uniform vec4 tint; + +varying vec2 vTextureCoord; +varying vec4 vColor; +varying vec4 vDarkColor; +varying float vTextureId; + +void main(void){ + gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); + + vTextureCoord = aTextureCoord; + vTextureId = aTextureId; + vColor = aColor * tint; + vDarkColor = aDarkColor * tint; + +} +`; + +const fragment = ` +varying vec2 vTextureCoord; +varying vec4 vColor; +varying vec4 vDarkColor; +varying float vTextureId; +uniform sampler2D uSamplers[%count%]; + +void main(void){ + vec4 color; + %forloop% + + + gl_FragColor.a = color.a * vColor.a; + gl_FragColor.rgb = ((color.a - 1.0) * vDarkColor.a + 1.0 - color.rgb) * vDarkColor.rgb + color.rgb * vColor.rgb; +} +`; + +export class DarkTintRenderer extends BatchRenderer { + public static override extension: ExtensionMetadata = { + name: "darkTintBatch", + type: ExtensionType.RendererPlugin, + }; + + constructor(renderer: Renderer) { + super(renderer); + this.shaderGenerator = new BatchShaderGenerator(vertex, fragment); + this.geometryClass = DarkTintBatchGeometry; + // Pixi's default 6 + 1 for uDarkTint. (this is size in _floats_. color is 4 bytes which roughly equals one float :P ) + this.vertexSize = 7; + } + + public override packInterleavedGeometry(element: IDarkTintElement, attributeBuffer: ViewableBuffer, indexBuffer: Uint16Array, aIndex: number, iIndex: number): void { + const { uint32View, float32View } = attributeBuffer; + const packedVertices = aIndex / this.vertexSize; + const uvs = element.uvs; + const indicies = element.indices; + const vertexData = element.vertexData; + const textureId = element._texture.baseTexture._batchLocation; + const alpha = Math.min(element.worldAlpha, 1.0); + const argb = Color.shared.setValue(element._tintRGB).toPremultiplied(alpha, (element._texture.baseTexture.alphaMode ?? 0) > 0); + const darkargb = Color.shared.setValue(element._darkTintRGB).toPremultiplied(alpha, (element._texture.baseTexture.alphaMode ?? 0) > 0); + + // lets not worry about tint! for now.. + for (let i = 0; i < vertexData.length; i += 2) { + float32View[aIndex++] = vertexData[i]; + float32View[aIndex++] = vertexData[i + 1]; + float32View[aIndex++] = uvs[i]; + float32View[aIndex++] = uvs[i + 1]; + uint32View[aIndex++] = argb; + uint32View[aIndex++] = darkargb; + float32View[aIndex++] = textureId; + } + for (let i = 0; i < indicies.length; i++) { + indexBuffer[iIndex++] = packedVertices + indicies[i]; + } + } +} diff --git a/spine-ts/spine-pixi/src/index.ts b/spine-ts/spine-pixi/src/index.ts new file mode 100644 index 000000000..eaa67acc0 --- /dev/null +++ b/spine-ts/spine-pixi/src/index.ts @@ -0,0 +1,47 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated September 24, 2021. Replaces all prior versions. + * + * Copyright (c) 2013-2021, 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. + *****************************************************************************/ + +export * from './require-shim'; +export * from './Spine'; +export * from './SpineDebugRenderer'; +export * from './SpineTexture'; +export * from './SlotMesh'; +export * from './DarkSlotMesh'; +export * from './assets/atlasLoader'; +export * from './assets/skeletonLoader'; +export * from './darkTintMesh/DarkTintBatchGeom'; +export * from './darkTintMesh/DarkTintGeom'; +export * from './darkTintMesh/DarkTintMaterial'; +export * from './darkTintMesh/DarkTintMesh'; +export * from './darkTintMesh/DarkTintRenderer'; +export * from "@esotericsoftware/spine-core"; + + +import './assets/atlasLoader'; // Side effects install the loaders into pixi +import './assets/skeletonLoader'; // Side effects install the loaders into pixi diff --git a/spine-ts/spine-pixi/src/require-shim.ts b/spine-ts/spine-pixi/src/require-shim.ts new file mode 100644 index 000000000..051f22e23 --- /dev/null +++ b/spine-ts/spine-pixi/src/require-shim.ts @@ -0,0 +1,43 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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 global { + var require: any; + var PIXI: any; +} + +if (window.PIXI) { + let prevRequire = window.require; + window.require = (x: string) => { + if (prevRequire) return prevRequire(x); + else if (x.startsWith("@pixi/")) return window.PIXI; + } +} + +export { } diff --git a/spine-ts/spine-pixi/tsconfig.json b/spine-ts/spine-pixi/tsconfig.json new file mode 100644 index 000000000..fa33fe0e2 --- /dev/null +++ b/spine-ts/spine-pixi/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "./src", + "outDir": "./dist", + "paths": { + "@esotericsoftware/spine-core": [ + "../spine-core/src" + ] + } + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "dist/**/*.d.ts" + ], + "references": [ + { + "path": "../spine-core" + } + ] +} \ No newline at end of file diff --git a/spine-ts/spine-player/README.md b/spine-ts/spine-player/README.md index e98ec76c7..7eb7f9d81 100644 --- a/spine-ts/spine-player/README.md +++ b/spine-ts/spine-player/README.md @@ -1,3 +1,3 @@ # spine-ts Player -Please see the top-level [README.md](../README.md) for more information. \ No newline at end of file +Please see the [Spine Web Player documentation](https://esotericsoftware.com/spine-player) for more information. diff --git a/spine-ts/spine-player/package.json b/spine-ts/spine-player/package.json index 01c1b5100..f8f3f342c 100644 --- a/spine-ts/spine-player/package.json +++ b/spine-ts/spine-player/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-player", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -30,6 +30,6 @@ }, "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", "dependencies": { - "@esotericsoftware/spine-webgl": "^4.1.26" + "@esotericsoftware/spine-webgl": "4.1.42" } } \ No newline at end of file diff --git a/spine-ts/spine-player/src/Player.ts b/spine-ts/spine-player/src/Player.ts index 37474cf32..6bf954e76 100644 --- a/spine-ts/spine-player/src/Player.ts +++ b/spine-ts/spine-player/src/Player.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Animation, AnimationState, AnimationStateData, AtlasAttachmentLoader, Bone, Color, Disposable, Downloader, MathUtils, MixBlend, MixDirection, Skeleton, SkeletonBinary, SkeletonData, SkeletonJson, StringMap, TextureAtlas, TextureFilter, TimeKeeper, TrackEntry, Vector2 } from "@esotericsoftware/spine-core" diff --git a/spine-ts/spine-threejs/example/coordinate-transform.html b/spine-ts/spine-threejs/example/coordinate-transform.html new file mode 100644 index 000000000..c5e9d66bc --- /dev/null +++ b/spine-ts/spine-threejs/example/coordinate-transform.html @@ -0,0 +1,155 @@ + + + + + spine-threejs + + + + + + + + + + + \ No newline at end of file diff --git a/spine-ts/spine-threejs/example/index.html b/spine-ts/spine-threejs/example/index.html index ba95db20d..d6bf3daea 100644 --- a/spine-ts/spine-threejs/example/index.html +++ b/spine-ts/spine-threejs/example/index.html @@ -1,141 +1,150 @@ + + + spine-threejs + + + + + - canvas { - position: absolute; - width: 100%; - height: 100%; - } - + + - - - \ No newline at end of file + init(); + })(); + + + diff --git a/spine-ts/spine-threejs/example/logarithmic-depth-buffer.html b/spine-ts/spine-threejs/example/logarithmic-depth-buffer.html new file mode 100644 index 000000000..ff93dea22 --- /dev/null +++ b/spine-ts/spine-threejs/example/logarithmic-depth-buffer.html @@ -0,0 +1,186 @@ + + + + spine-threejs + + + + + + + + + + diff --git a/spine-ts/spine-threejs/package.json b/spine-ts/spine-threejs/package.json index 37ec5b4d3..adb89d923 100644 --- a/spine-ts/spine-threejs/package.json +++ b/spine-ts/spine-threejs/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-threejs", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -30,8 +30,6 @@ }, "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", "dependencies": { - "@types/three": "^0.146.0", - "three": "^0.146.0", - "@esotericsoftware/spine-core": "^4.1.26" + "@esotericsoftware/spine-core": "4.1.42" } } \ No newline at end of file diff --git a/spine-ts/spine-threejs/src/AssetManager.ts b/spine-ts/spine-threejs/src/AssetManager.ts index d332ebeab..f776832fa 100644 --- a/spine-ts/spine-threejs/src/AssetManager.ts +++ b/spine-ts/spine-threejs/src/AssetManager.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { AssetManagerBase, Downloader } from "@esotericsoftware/spine-core" diff --git a/spine-ts/spine-threejs/src/MeshBatcher.ts b/spine-ts/spine-threejs/src/MeshBatcher.ts index f474b484f..c602899a2 100644 --- a/spine-ts/spine-threejs/src/MeshBatcher.ts +++ b/spine-ts/spine-threejs/src/MeshBatcher.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { SkeletonMeshMaterial, SkeletonMeshMaterialParametersCustomizer } from "./SkeletonMesh"; diff --git a/spine-ts/spine-threejs/src/SkeletonMesh.ts b/spine-ts/spine-threejs/src/SkeletonMesh.ts index 07c48e119..433c75689 100644 --- a/spine-ts/spine-threejs/src/SkeletonMesh.ts +++ b/spine-ts/spine-threejs/src/SkeletonMesh.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,16 +23,33 @@ * (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. + * (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. *****************************************************************************/ -import { AnimationState, AnimationStateData, BlendMode, ClippingAttachment, Color, MeshAttachment, NumberArrayLike, RegionAttachment, Skeleton, SkeletonClipping, SkeletonData, TextureAtlasRegion, Utils, Vector2 } from "@esotericsoftware/spine-core"; +import { + AnimationState, + AnimationStateData, + BlendMode, + ClippingAttachment, + Color, + MeshAttachment, + NumberArrayLike, + RegionAttachment, + Skeleton, + SkeletonClipping, + SkeletonData, + TextureAtlasRegion, + Utils, + Vector2, +} from "@esotericsoftware/spine-core"; import { MeshBatcher } from "./MeshBatcher"; import * as THREE from "three"; import { ThreeJsTexture } from "./ThreeJsTexture"; -export type SkeletonMeshMaterialParametersCustomizer = (materialParameters: THREE.ShaderMaterialParameters) => void; +export type SkeletonMeshMaterialParametersCustomizer = ( + materialParameters: THREE.ShaderMaterialParameters +) => void; export class SkeletonMeshMaterial extends THREE.ShaderMaterial { constructor (customizer: SkeletonMeshMaterialParametersCustomizer) { @@ -69,17 +86,17 @@ export class SkeletonMeshMaterial extends THREE.ShaderMaterial { fragmentShader: fragmentShader, side: THREE.DoubleSide, transparent: true, - depthWrite: false, - alphaTest: 0.0 + depthWrite: true, + alphaTest: 0.0, }; customizer(parameters); if (parameters.alphaTest && parameters.alphaTest > 0) { - parameters.defines = { "USE_SPINE_ALPHATEST": 1 }; + parameters.defines = { USE_SPINE_ALPHATEST: 1 }; if (!parameters.uniforms) parameters.uniforms = {}; parameters.uniforms["alphaTest"] = { value: parameters.alphaTest }; } super(parameters); - }; + } } export class SkeletonMesh extends THREE.Object3D { @@ -101,7 +118,12 @@ export class SkeletonMesh extends THREE.Object3D { private vertices = Utils.newFloatArray(1024); private tempColor = new Color(); - constructor (skeletonData: SkeletonData, private materialCustomerizer: SkeletonMeshMaterialParametersCustomizer = (material) => { }) { + constructor ( + skeletonData: SkeletonData, + private materialCustomerizer: SkeletonMeshMaterialParametersCustomizer = ( + material + ) => { } + ) { super(); this.skeleton = new Skeleton(skeletonData); @@ -181,7 +203,7 @@ export class SkeletonMesh extends THREE.Object3D { region.computeWorldVertices(slot, vertices, 0, vertexSize); triangles = SkeletonMesh.QUAD_TRIANGLES; uvs = region.uvs; - texture = (region.region!.renderObject).page.texture; + texture = region.region!.texture; } else if (attachment instanceof MeshAttachment) { let mesh = attachment; attachmentColor = mesh.color; @@ -190,12 +212,19 @@ export class SkeletonMesh extends THREE.Object3D { if (numFloats > vertices.length) { vertices = this.vertices = Utils.newFloatArray(numFloats); } - mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, vertexSize); + mesh.computeWorldVertices( + slot, + 0, + mesh.worldVerticesLength, + vertices, + 0, + vertexSize + ); triangles = mesh.triangles; uvs = mesh.uvs; - texture = (mesh.region!.renderObject).page.texture; + texture = mesh.region!.texture; } else if (attachment instanceof ClippingAttachment) { - let clip = (attachment); + let clip = attachment; clipper.clipStart(slot, clip); continue; } else { @@ -209,10 +238,12 @@ export class SkeletonMesh extends THREE.Object3D { let slotColor = slot.color; let alpha = skeletonColor.a * slotColor.a * attachmentColor.a; let color = this.tempColor; - color.set(skeletonColor.r * slotColor.r * attachmentColor.r, + color.set( + skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, - alpha); + alpha + ); let finalVertices: NumberArrayLike; let finalVerticesLength: number; @@ -220,7 +251,16 @@ export class SkeletonMesh extends THREE.Object3D { let finalIndicesLength: number; if (clipper.isClipping()) { - clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, tempLight, false); + clipper.clipTriangles( + vertices, + numFloats, + triangles, + triangles.length, + uvs, + color, + tempLight, + false + ); let clippedVertices = clipper.clippedVertices; let clippedTriangles = clipper.clippedTriangles; finalVertices = clippedVertices; @@ -229,7 +269,11 @@ export class SkeletonMesh extends THREE.Object3D { finalIndicesLength = clippedTriangles.length; } else { let verts = vertices; - for (let v = 2, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) { + 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; @@ -249,7 +293,12 @@ export class SkeletonMesh extends THREE.Object3D { } // Start new batch if this one can't hold vertices/indices - if (!batch.canBatch(finalVerticesLength / SkeletonMesh.VERTEX_SIZE, finalIndicesLength)) { + if ( + !batch.canBatch( + finalVerticesLength / SkeletonMesh.VERTEX_SIZE, + finalIndicesLength + ) + ) { batch.end(); batch = this.nextBatch(); batch.begin(); @@ -257,10 +306,19 @@ export class SkeletonMesh extends THREE.Object3D { const slotBlendMode = slot.data.blendMode; const slotTexture = texture.texture; - const materialGroup = batch.findMaterialGroup(slotTexture, slotBlendMode); + const materialGroup = batch.findMaterialGroup( + slotTexture, + slotBlendMode + ); batch.addMaterialGroup(finalIndicesLength, materialGroup); - batch.batch(finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, z); + batch.batch( + finalVertices, + finalVerticesLength, + finalIndices, + finalIndicesLength, + z + ); z += zOffset; } diff --git a/spine-ts/spine-threejs/src/ThreeJsTexture.ts b/spine-ts/spine-threejs/src/ThreeJsTexture.ts index be48c3013..9addf4b71 100644 --- a/spine-ts/spine-threejs/src/ThreeJsTexture.ts +++ b/spine-ts/spine-threejs/src/ThreeJsTexture.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { BlendMode, Texture, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core"; @@ -81,4 +81,4 @@ export class ThreeJsTexture extends Texture { else if (blend === BlendMode.Screen) return THREE.CustomBlending; else throw new Error("Unknown blendMode: " + blend); } -} \ No newline at end of file +} diff --git a/spine-ts/spine-threejs/src/require-shim.ts b/spine-ts/spine-threejs/src/require-shim.ts index 73dae0ea9..e315fe12e 100644 --- a/spine-ts/spine-threejs/src/require-shim.ts +++ b/spine-ts/spine-threejs/src/require-shim.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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 global { diff --git a/spine-ts/spine-webgl/example/custom-attachment.html b/spine-ts/spine-webgl/example/custom-attachment.html new file mode 100644 index 000000000..728912674 --- /dev/null +++ b/spine-ts/spine-webgl/example/custom-attachment.html @@ -0,0 +1,97 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spine-ts/spine-webgl/example/head.png b/spine-ts/spine-webgl/example/head.png new file mode 100644 index 000000000..0ecab2159 Binary files /dev/null and b/spine-ts/spine-webgl/example/head.png differ diff --git a/spine-ts/spine-webgl/package.json b/spine-ts/spine-webgl/package.json index bbe9c7c83..3e0e97e9c 100644 --- a/spine-ts/spine-webgl/package.json +++ b/spine-ts/spine-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@esotericsoftware/spine-webgl", - "version": "4.1.26", + "version": "4.1.42", "description": "The official Spine Runtimes for the web.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -30,6 +30,6 @@ }, "homepage": "https://github.com/esotericsoftware/spine-runtimes#readme", "dependencies": { - "@esotericsoftware/spine-core": "^4.1.26" + "@esotericsoftware/spine-core": "4.1.42" } } \ No newline at end of file diff --git a/spine-ts/spine-webgl/src/AssetManager.ts b/spine-ts/spine-webgl/src/AssetManager.ts index aded0734a..1a3fd07d1 100644 --- a/spine-ts/spine-webgl/src/AssetManager.ts +++ b/spine-ts/spine-webgl/src/AssetManager.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { AssetManagerBase, Downloader } from "@esotericsoftware/spine-core" diff --git a/spine-ts/spine-webgl/src/Camera.ts b/spine-ts/spine-webgl/src/Camera.ts index bdd91c677..0cadb1b16 100644 --- a/spine-ts/spine-webgl/src/Camera.ts +++ b/spine-ts/spine-webgl/src/Camera.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Matrix4 } from "./Matrix4"; diff --git a/spine-ts/spine-webgl/src/CameraController.ts b/spine-ts/spine-webgl/src/CameraController.ts index 9bbb13f14..9c91b84c0 100644 --- a/spine-ts/spine-webgl/src/CameraController.ts +++ b/spine-ts/spine-webgl/src/CameraController.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Input } from "./Input"; diff --git a/spine-ts/spine-webgl/src/GLTexture.ts b/spine-ts/spine-webgl/src/GLTexture.ts index f3a19073b..ff11e00d8 100644 --- a/spine-ts/spine-webgl/src/GLTexture.ts +++ b/spine-ts/spine-webgl/src/GLTexture.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Texture, Disposable, Restorable, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/Input.ts b/spine-ts/spine-webgl/src/Input.ts index 0610e6382..afe8f1044 100644 --- a/spine-ts/spine-webgl/src/Input.ts +++ b/spine-ts/spine-webgl/src/Input.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ export class Input { diff --git a/spine-ts/spine-webgl/src/LoadingScreen.ts b/spine-ts/spine-webgl/src/LoadingScreen.ts index de3befe59..27d9af894 100644 --- a/spine-ts/spine-webgl/src/LoadingScreen.ts +++ b/spine-ts/spine-webgl/src/LoadingScreen.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,11 +23,11 @@ * (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. + * (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. *****************************************************************************/ -import { Color, Disposable, TimeKeeper } from "@esotericsoftware/spine-core"; +import { BlendMode, Color, Disposable, TimeKeeper } from "@esotericsoftware/spine-core"; import { GLTexture } from "./GLTexture"; import { ResizeMode, SceneRenderer } from "./SceneRenderer"; @@ -88,7 +88,7 @@ export class LoadingScreen implements Disposable { renderer.resize(ResizeMode.Expand); renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); - renderer.batcher.setBlendMode(gl.ONE, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + renderer.batcher.setBlendMode(BlendMode.Normal, true); if (complete) { this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); diff --git a/spine-ts/spine-webgl/src/Matrix4.ts b/spine-ts/spine-webgl/src/Matrix4.ts index 41d4631a9..5a13c4682 100644 --- a/spine-ts/spine-webgl/src/Matrix4.ts +++ b/spine-ts/spine-webgl/src/Matrix4.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Vector2 } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/Mesh.ts b/spine-ts/spine-webgl/src/Mesh.ts index d4676ef48..2080a6780 100644 --- a/spine-ts/spine-webgl/src/Mesh.ts +++ b/spine-ts/spine-webgl/src/Mesh.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Disposable, Restorable } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/PolygonBatcher.ts b/spine-ts/spine-webgl/src/PolygonBatcher.ts index fc7f6a0af..9f869ae3d 100644 --- a/spine-ts/spine-webgl/src/PolygonBatcher.ts +++ b/spine-ts/spine-webgl/src/PolygonBatcher.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,23 +23,30 @@ * (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. + * (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. *****************************************************************************/ -import { Disposable } from "@esotericsoftware/spine-core"; +import { BlendMode, Disposable } from "@esotericsoftware/spine-core"; import { GLTexture } from "./GLTexture"; import { Mesh, Position2Attribute, ColorAttribute, TexCoordAttribute, Color2Attribute } from "./Mesh"; import { Shader } from "./Shader"; import { ManagedWebGLRenderingContext } from "./WebGL"; +const GL_ONE = 1; +const GL_ONE_MINUS_SRC_COLOR = 0x0301; +const GL_SRC_ALPHA = 0x0302; +const GL_ONE_MINUS_SRC_ALPHA = 0x0303; +const GL_ONE_MINUS_DST_ALPHA = 0x0305; +const GL_DST_COLOR = 0x0306; + export class PolygonBatcher implements Disposable { public static disableCulling = false; private context: ManagedWebGLRenderingContext; private drawCalls = 0; private static globalDrawCalls = 0; - private isDrawing = false; + isDrawing = false; private mesh: Mesh; private shader: Shader | null = null; private lastTexture: GLTexture | null = null; @@ -80,16 +87,28 @@ export class PolygonBatcher implements Disposable { } } - setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) { + private static blendModesGL: { srcRgb: number, srcRgbPma: number, dstRgb: number, srcAlpha: number }[] = [ + { srcRgb: GL_SRC_ALPHA, srcRgbPma: GL_ONE, dstRgb: GL_ONE_MINUS_SRC_ALPHA, srcAlpha: GL_ONE }, + { srcRgb: GL_SRC_ALPHA, srcRgbPma: GL_ONE, dstRgb: GL_ONE, srcAlpha: GL_ONE }, + { srcRgb: GL_DST_COLOR, srcRgbPma: GL_DST_COLOR, dstRgb: GL_ONE_MINUS_SRC_ALPHA, srcAlpha: GL_ONE }, + { srcRgb: GL_ONE, srcRgbPma: GL_ONE, dstRgb: GL_ONE_MINUS_SRC_COLOR, srcAlpha: GL_ONE } + ] + + setBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean) { + const blendModeGL = PolygonBatcher.blendModesGL[blendMode]; + const srcColorBlend = premultipliedAlpha ? blendModeGL.srcRgbPma : blendModeGL.srcRgb; + const srcAlphaBlend = blendModeGL.srcAlpha; + const dstBlend = blendModeGL.dstRgb; + if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstBlend == dstBlend) return; this.srcColorBlend = srcColorBlend; this.srcAlphaBlend = srcAlphaBlend; this.dstBlend = dstBlend; if (this.isDrawing) { this.flush(); - let gl = this.context.gl; - gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend); } + let gl = this.context.gl; + gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend); } draw (texture: GLTexture, vertices: ArrayLike, indices: Array) { diff --git a/spine-ts/spine-webgl/src/SceneRenderer.ts b/spine-ts/spine-webgl/src/SceneRenderer.ts index 207e725eb..34ac5d1ec 100644 --- a/spine-ts/spine-webgl/src/SceneRenderer.ts +++ b/spine-ts/spine-webgl/src/SceneRenderer.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Color, Disposable, Skeleton, MathUtils, TextureAtlasRegion } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/Shader.ts b/spine-ts/spine-webgl/src/Shader.ts index 8dbc79e43..e6e5ef837 100644 --- a/spine-ts/spine-webgl/src/Shader.ts +++ b/spine-ts/spine-webgl/src/Shader.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Disposable, Restorable } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/ShapeRenderer.ts b/spine-ts/spine-webgl/src/ShapeRenderer.ts index a9494ff16..1bb7c066e 100644 --- a/spine-ts/spine-webgl/src/ShapeRenderer.ts +++ b/spine-ts/spine-webgl/src/ShapeRenderer.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Disposable, Color, Vector2, MathUtils } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts index f6e33faeb..ed71b5c7a 100644 --- a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts +++ b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Disposable, Color, SkeletonBounds, Utils, Skeleton, RegionAttachment, MeshAttachment, PathAttachment, ClippingAttachment } from "@esotericsoftware/spine-core"; diff --git a/spine-ts/spine-webgl/src/SkeletonRenderer.ts b/spine-ts/spine-webgl/src/SkeletonRenderer.ts index 2a557b9ba..034fac2c8 100644 --- a/spine-ts/spine-webgl/src/SkeletonRenderer.ts +++ b/spine-ts/spine-webgl/src/SkeletonRenderer.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,14 +23,14 @@ * (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. + * (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. *****************************************************************************/ import { NumberArrayLike, Color, SkeletonClipping, Vector2, Utils, Skeleton, BlendMode, RegionAttachment, TextureAtlasRegion, MeshAttachment, ClippingAttachment } from "@esotericsoftware/spine-core"; import { GLTexture } from "./GLTexture"; import { PolygonBatcher } from "./PolygonBatcher"; -import { ManagedWebGLRenderingContext, WebGLBlendModeConverter } from "./WebGL"; +import { ManagedWebGLRenderingContext } from "./WebGL"; class Renderable { @@ -68,11 +68,6 @@ export class SkeletonRenderer { let twoColorTint = this.twoColorTint; let blendMode: BlendMode | null = null; - let tempPos = this.temp; - let tempUv = this.temp2; - let tempLight = this.temp3; - let tempDark = this.temp4; - let renderable: Renderable = this.renderable; let uvs: NumberArrayLike; let triangles: Array; @@ -113,7 +108,7 @@ export class SkeletonRenderer { region.computeWorldVertices(slot, renderable.vertices, 0, clippedVertexSize); triangles = SkeletonRenderer.QUAD_TRIANGLES; uvs = region.uvs; - texture = (region.region!.renderObject).page.texture; + texture = region.region!.texture; attachmentColor = region.color; } else if (attachment instanceof MeshAttachment) { let mesh = attachment; @@ -125,7 +120,7 @@ export class SkeletonRenderer { } mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); triangles = mesh.triangles; - texture = (mesh.region!.renderObject).page.texture; + texture = mesh.region!.texture; uvs = mesh.uvs; attachmentColor = mesh.color; } else if (attachment instanceof ClippingAttachment) { @@ -166,17 +161,14 @@ export class SkeletonRenderer { let slotBlendMode = slot.data.blendMode; if (slotBlendMode != blendMode) { blendMode = slotBlendMode; - batcher.setBlendMode( - WebGLBlendModeConverter.getSourceColorGLBlendMode(blendMode, premultipliedAlpha), - WebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode), - WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); + batcher.setBlendMode(blendMode, premultipliedAlpha); } 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 (transformer) transformer(renderable.vertices, renderable.numFloats, vertexSize); + if (transformer) transformer(clippedVertices, clippedVertices.length, vertexSize); batcher.draw(texture, clippedVertices, clippedTriangles); } else { let verts = renderable.vertices; diff --git a/spine-ts/spine-webgl/src/SpineCanvas.ts b/spine-ts/spine-webgl/src/SpineCanvas.ts index 246b7d867..ec8dc6cfa 100644 --- a/spine-ts/spine-webgl/src/SpineCanvas.ts +++ b/spine-ts/spine-webgl/src/SpineCanvas.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { TimeKeeper, AssetManager, ManagedWebGLRenderingContext, SceneRenderer, Input, StringMap } from "./"; @@ -32,12 +32,12 @@ import { TimeKeeper, AssetManager, ManagedWebGLRenderingContext, SceneRenderer, /** An app running inside a {@link SpineCanvas}. The app life-cycle * is as follows: * - * 1. `loadAssets()` is called. The app can queue assets for loading via {@link SpineCanvas#assetManager}. + * 1. `loadAssets()` is called. The app can queue assets for loading via {@link SpineCanvas.assetManager}. * 2. `initialize()` is called when all assets are loaded. The app can setup anything it needs to enter the main application logic. * 3. `update()` is called periodically at screen refresh rate. The app can update its state. - * 4. `render()` is called periodically at screen refresh rate. The app can render its state via {@link SpineCanvas#renderer} or directly via the WebGL context in {@link SpineCanvas.gl}` + * 4. `render()` is called periodically at screen refresh rate. The app can render its state via {@link SpineCanvas.renderer} or directly via the WebGL context in {@link SpineCanvas.gl}. * - * The `error()` method is called in case the assets could not be loaded. + * The `error()` method is called in case the assets could not be loaded. The `dispose()` method is called in case the canvas has been disposed via {@link SpineCanvas.dispose}. */ export interface SpineCanvasApp { loadAssets?(canvas: SpineCanvas): void; @@ -45,6 +45,7 @@ export interface SpineCanvasApp { update?(canvas: SpineCanvas, delta: number): void; render?(canvas: SpineCanvas): void; error?(canvas: SpineCanvas, errors: StringMap): void; + dispose?(canvas: SpineCanvas): void; } /** Configuration passed to the {@link SpineCanvas} constructor */ @@ -75,8 +76,10 @@ export class SpineCanvas { /** The input processor used to listen to mouse, touch, and keyboard events. */ readonly input: Input; + private disposed = false; + /** Constructs a new spine canvas, rendering to the provided HTML canvas. */ - constructor (canvas: HTMLCanvasElement, config: SpineCanvasConfig) { + constructor (canvas: HTMLCanvasElement, private config: SpineCanvasConfig) { if (!config.pathPrefix) config.pathPrefix = ""; if (!config.app) config.app = { loadAssets: () => { }, @@ -84,6 +87,7 @@ export class SpineCanvas { update: () => { }, render: () => { }, error: () => { }, + dispose: () => { }, } if (config.webglConfig) config.webglConfig = { alpha: true }; @@ -97,6 +101,7 @@ export class SpineCanvas { if (config.app.loadAssets) config.app.loadAssets(this); let loop = () => { + if (this.disposed) return; requestAnimationFrame(loop); this.time.update(); if (config.app.update) config.app.update(this, this.time.delta); @@ -104,6 +109,7 @@ export class SpineCanvas { } let waitForAssets = () => { + if (this.disposed) return; if (this.assetManager.isLoadingComplete()) { if (this.assetManager.hasErrors()) { if (config.app.error) config.app.error(this, this.assetManager.getErrors()); @@ -123,4 +129,10 @@ export class SpineCanvas { this.gl.clearColor(r, g, b, a); this.gl.clear(this.gl.COLOR_BUFFER_BIT); } + + /** Disposes the app, so the update() and render() functions are no longer called. Calls the dispose() callback.*/ + dispose() { + if (this.config.app.dispose) this.config.app.dispose(this); + this.disposed = true; + } } diff --git a/spine-ts/spine-webgl/src/Vector3.ts b/spine-ts/spine-webgl/src/Vector3.ts index df12edb10..aab816c3e 100644 --- a/spine-ts/spine-webgl/src/Vector3.ts +++ b/spine-ts/spine-webgl/src/Vector3.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Matrix4, M00, M01, M02, M03, M10, M11, M12, M13, M20, M21, M22, M23, M30, M31, M32, M33 } from "./Matrix4"; diff --git a/spine-ts/spine-webgl/src/WebGL.ts b/spine-ts/spine-webgl/src/WebGL.ts index 314bdf1a2..f90009487 100644 --- a/spine-ts/spine-webgl/src/WebGL.ts +++ b/spine-ts/spine-webgl/src/WebGL.ts @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ import { Restorable, BlendMode } from "@esotericsoftware/spine-core"; @@ -62,42 +62,3 @@ export class ManagedWebGLRenderingContext { if (index > -1) this.restorables.splice(index, 1); } } - -const ONE = 1; -const ONE_MINUS_SRC_COLOR = 0x0301; -const SRC_ALPHA = 0x0302; -const ONE_MINUS_SRC_ALPHA = 0x0303; -const ONE_MINUS_DST_ALPHA = 0x0305; -const DST_COLOR = 0x0306; - -export class WebGLBlendModeConverter { - static getDestGLBlendMode (blendMode: BlendMode) { - switch (blendMode) { - case BlendMode.Normal: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Additive: return ONE; - case BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Screen: return ONE_MINUS_SRC_ALPHA; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } - - static getSourceColorGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) { - switch (blendMode) { - case BlendMode.Normal: return premultipliedAlpha ? ONE : SRC_ALPHA; - case BlendMode.Additive: return premultipliedAlpha ? ONE : SRC_ALPHA; - case BlendMode.Multiply: return DST_COLOR; - case BlendMode.Screen: return ONE; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } - - static getSourceAlphaGLBlendMode (blendMode: BlendMode) { - switch (blendMode) { - case BlendMode.Normal: return ONE; - case BlendMode.Additive: return ONE; - case BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Screen: return ONE_MINUS_SRC_COLOR; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } -} diff --git a/spine-ts/tsconfig.json b/spine-ts/tsconfig.json index d981bf510..d739fc105 100644 --- a/spine-ts/tsconfig.json +++ b/spine-ts/tsconfig.json @@ -18,6 +18,9 @@ }, { "path": "./spine-threejs" + }, + { + "path": "./spine-pixi" } ] } \ No newline at end of file diff --git a/spine-ue4/Config/DefaultEngine.ini b/spine-ue4/Config/DefaultEngine.ini index 9acb0ff23..a10553c95 100644 --- a/spine-ue4/Config/DefaultEngine.ini +++ b/spine-ue4/Config/DefaultEngine.ini @@ -71,3 +71,17 @@ r.UsePreExposure=False r.DefaultFeature.MotionBlur=False r.TextureStreaming=False +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=886514FD3F4CB6A778CAC39C5D779DFE +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + diff --git a/spine-ue4/Config/DefaultInput.ini b/spine-ue4/Config/DefaultInput.ini new file mode 100644 index 000000000..1ff89cc17 --- /dev/null +++ b/spine-ue4/Config/DefaultInput.ini @@ -0,0 +1,86 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bEnableInputDeviceSubsystem=True +bShouldFlushPressedKeysOnViewportFocusLost=True +bEnableDynamicComponentInputBinding=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/spine-ue4/Content/GettingStarted/01-basic-animation.umap b/spine-ue4/Content/GettingStarted/01-basic-animation.umap index 16a7ec056..28f3a63e9 100644 Binary files a/spine-ue4/Content/GettingStarted/01-basic-animation.umap and b/spine-ue4/Content/GettingStarted/01-basic-animation.umap differ diff --git a/spine-ue4/Content/GettingStarted/04-basic-controls.umap b/spine-ue4/Content/GettingStarted/04-basic-controls.umap index 232d96185..fc3616e7e 100644 Binary files a/spine-ue4/Content/GettingStarted/04-basic-controls.umap and b/spine-ue4/Content/GettingStarted/04-basic-controls.umap differ diff --git a/spine-ue4/Content/GettingStarted/08-bone-follower.umap b/spine-ue4/Content/GettingStarted/08-bone-follower.umap new file mode 100644 index 000000000..b1c84c25d Binary files /dev/null and b/spine-ue4/Content/GettingStarted/08-bone-follower.umap differ diff --git a/spine-ue4/Content/GettingStarted/09-skins.umap b/spine-ue4/Content/GettingStarted/09-skins.umap new file mode 100644 index 000000000..7015feb5e Binary files /dev/null and b/spine-ue4/Content/GettingStarted/09-skins.umap differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Particles/GunTipParticles.uasset b/spine-ue4/Content/GettingStarted/Assets/Particles/GunTipParticles.uasset new file mode 100644 index 000000000..06b52fdde Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Particles/GunTipParticles.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/mix-and-match/Textures/mix-and-match-pro.uasset b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/Textures/mix-and-match-pro.uasset new file mode 100644 index 000000000..d19673aaa Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/Textures/mix-and-match-pro.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.atlas b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.atlas new file mode 100644 index 000000000..42742e684 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.atlas @@ -0,0 +1,427 @@ +mix-and-match-pro.png +size:1937,840 +filter:Linear,Linear +base-head +bounds:432,68,187,143 +offsets:1,1,189,145 +rotate:90 +boy/arm-front +bounds:487,263,71,229 +rotate:90 +boy/backpack +bounds:491,532,237,306 +boy/backpack-pocket +bounds:1868,502,67,123 +boy/backpack-strap-front +bounds:1235,352,76,175 +boy/backpack-up +bounds:1560,98,42,139 +boy/body +bounds:730,480,194,263 +rotate:90 +boy/boot-ribbon-front +bounds:1918,139,17,22 +boy/collar +bounds:873,10,145,58 +boy/ear +bounds:1868,377,38,45 +rotate:90 +boy/eye-back-low-eyelid +bounds:1538,512,33,11 +rotate:90 +boy/eye-back-pupil +bounds:1201,367,13,14 +offsets:1,2,15,17 +boy/eye-back-up-eyelid +bounds:1868,365,46,10 +boy/eye-back-up-eyelid-back +bounds:246,38,38,20 +boy/eye-front-low-eyelid +bounds:197,260,44,13 +rotate:90 +boy/eye-front-pupil +bounds:1162,335,15,14 +offsets:1,2,17,17 +rotate:90 +boy/eye-front-up-eyelid +bounds:1488,109,62,11 +boy/eye-front-up-eyelid-back +bounds:1822,144,52,17 +offsets:0,1,52,18 +boy/eye-iris-back +bounds:426,2,31,32 +offsets:1,1,33,34 +rotate:90 +boy/eye-iris-front +bounds:1502,512,34,33 +offsets:1,1,36,35 +boy/eye-white-back +bounds:1869,99,39,24 +boy/eye-white-front +bounds:1338,4,53,26 +boy/eyebrow-back +bounds:286,38,38,20 +offsets:1,1,40,22 +boy/eyebrow-front +bounds:197,38,47,20 +offsets:1,1,49,22 +boy/hair-back +bounds:725,316,243,162 +boy/hair-bangs +bounds:1036,251,140,73 +boy/hair-patch +bounds:1178,268,132,82 +boy/hair-side +bounds:1631,342,50,86 +boy/hand-backfingers +bounds:1833,8,36,40 +offsets:1,1,38,42 +boy/hand-front-fingers +bounds:1876,125,36,40 +offsets:1,1,38,42 +rotate:90 +boy/hat +bounds:577,76,185,111 +rotate:90 +boy/leg-front +bounds:134,38,61,316 +boy/mouth-close +bounds:326,38,40,7 +offsets:1,1,42,9 +girl-blue-cape/mouth-close +bounds:326,38,40,7 +offsets:1,1,42,9 +girl-spring-dress/mouth-close +bounds:326,38,40,7 +offsets:1,1,42,9 +girl/mouth-close +bounds:326,38,40,7 +offsets:1,1,42,9 +boy/mouth-smile +bounds:1020,13,55,11 +offsets:1,1,57,13 +rotate:90 +boy/nose +bounds:564,9,34,19 +rotate:90 +boy/pompom +bounds:1410,2,94,83 +offsets:1,1,96,85 +rotate:90 +boy/zip +bounds:1220,107,25,43 +offsets:1,2,27,46 +rotate:90 +girl-blue-cape/back-eyebrow +bounds:995,653,34,21 +offsets:1,1,36,23 +girl-blue-cape/body-dress +bounds:2,356,218,482 +offsets:0,0,218,492 +girl-blue-cape/body-ribbon +bounds:1822,163,98,73 +offsets:1,1,100,75 +rotate:90 +girl-blue-cape/cape-back +bounds:222,453,267,385 +girl-blue-cape/cape-back-up +bounds:1688,627,246,211 +girl-blue-cape/cape-ribbon +bounds:1897,163,98,34 +offsets:1,1,100,36 +rotate:90 +girl-blue-cape/cape-shoulder-back +bounds:1034,2,98,118 +rotate:90 +girl-blue-cape/cape-shoulder-front +bounds:1313,345,123,152 +rotate:90 +girl-blue-cape/cape-up-front +bounds:197,60,195,233 +rotate:90 +girl-blue-cape/ear +bounds:1833,50,35,43 +offsets:1,1,38,45 +girl-spring-dress/ear +bounds:1833,50,35,43 +offsets:1,1,38,45 +girl/ear +bounds:1833,50,35,43 +offsets:1,1,38,45 +girl-blue-cape/eye-back-low-eyelid +bounds:1265,121,33,11 +girl-spring-dress/eye-back-low-eyelid +bounds:1265,121,33,11 +girl/eye-back-low-eyelid +bounds:1265,121,33,11 +girl-blue-cape/eye-back-pupil +bounds:1201,352,13,14 +offsets:1,2,15,17 +rotate:90 +girl-spring-dress/eye-back-pupil +bounds:1201,352,13,14 +offsets:1,2,15,17 +rotate:90 +girl/eye-back-pupil +bounds:1201,352,13,14 +offsets:1,2,15,17 +rotate:90 +girl-blue-cape/eye-back-up-eyelid +bounds:197,306,48,23 +rotate:90 +girl-spring-dress/eye-back-up-eyelid +bounds:197,306,48,23 +rotate:90 +girl/eye-back-up-eyelid +bounds:197,306,48,23 +rotate:90 +girl-blue-cape/eye-back-up-eyelid-back +bounds:1031,653,34,21 +girl-spring-dress/eye-back-up-eyelid-back +bounds:1031,653,34,21 +girl/eye-back-up-eyelid-back +bounds:1031,653,34,21 +girl-blue-cape/eye-front-low-eyelid +bounds:1871,2,36,11 +girl-spring-dress/eye-front-low-eyelid +bounds:1871,2,36,11 +girl/eye-front-low-eyelid +bounds:1871,2,36,11 +girl-blue-cape/eye-front-pupil +bounds:1178,251,15,14 +offsets:1,2,17,17 +rotate:90 +girl-spring-dress/eye-front-pupil +bounds:1178,251,15,14 +offsets:1,2,17,17 +rotate:90 +girl/eye-front-pupil +bounds:1178,251,15,14 +offsets:1,2,17,17 +rotate:90 +girl-blue-cape/eye-front-up-eyelid +bounds:1276,2,60,28 +girl-spring-dress/eye-front-up-eyelid +bounds:1276,2,60,28 +girl/eye-front-up-eyelid +bounds:1276,2,60,28 +girl-blue-cape/eye-front-up-eyelid-back +bounds:1435,98,51,22 +girl-spring-dress/eye-front-up-eyelid-back +bounds:1435,98,51,22 +girl/eye-front-up-eyelid-back +bounds:1435,98,51,22 +girl-blue-cape/eye-iris-back +bounds:460,2,31,32 +offsets:1,1,33,34 +rotate:90 +girl-blue-cape/eye-iris-front +bounds:1467,434,34,33 +offsets:1,1,36,35 +rotate:90 +girl-blue-cape/eye-white-back +bounds:393,19,39,31 +rotate:90 +girl-spring-dress/eye-white-back +bounds:393,19,39,31 +rotate:90 +girl-blue-cape/eye-white-front +bounds:1201,383,40,32 +rotate:90 +girl-spring-dress/eye-white-front +bounds:1201,383,40,32 +rotate:90 +girl/eye-white-front +bounds:1201,383,40,32 +rotate:90 +girl-blue-cape/front-eyebrow +bounds:507,45,34,21 +offsets:1,1,36,23 +girl-blue-cape/hair-back +bounds:491,336,232,194 +offsets:1,1,234,196 +girl-blue-cape/hair-bangs +bounds:690,6,181,80 +girl-blue-cape/hair-head-side-back +bounds:1154,2,59,103 +girl-blue-cape/hair-head-side-front +bounds:1580,13,82,83 +girl-blue-cape/hair-patch +bounds:1220,134,132,82 +rotate:90 +girl-blue-cape/hair-side +bounds:1147,107,71,142 +girl-blue-cape/hand-front-fingers +bounds:1870,57,36,40 +offsets:1,1,38,42 +girl-spring-dress/hand-front-fingers +bounds:1870,57,36,40 +offsets:1,1,38,42 +girl-blue-cape/leg-front +bounds:718,254,60,316 +rotate:90 +girl-blue-cape/mouth-smile +bounds:326,47,55,11 +offsets:1,1,57,13 +girl-spring-dress/mouth-smile +bounds:326,47,55,11 +offsets:1,1,57,13 +girl/mouth-smile +bounds:326,47,55,11 +offsets:1,1,57,13 +girl-blue-cape/nose +bounds:1683,341,22,13 +rotate:90 +girl-spring-dress/nose +bounds:1683,341,22,13 +rotate:90 +girl/nose +bounds:1683,341,22,13 +rotate:90 +girl-blue-cape/sleeve-back +bounds:1868,417,83,57 +rotate:90 +girl-blue-cape/sleeve-front +bounds:1313,547,104,238 +rotate:90 +girl-spring-dress/arm-front +bounds:134,2,34,222 +rotate:90 +girl-spring-dress/back-eyebrow +bounds:543,45,34,21 +offsets:1,1,36,23 +girl-spring-dress/body-up +bounds:1304,116,126,129 +offsets:1,1,128,131 +rotate:90 +girl-spring-dress/cloak-down +bounds:1596,239,100,100 +girl-spring-dress/cloak-up +bounds:1698,247,121,116 +offsets:0,0,127,116 +girl-spring-dress/eye-iris-back +bounds:473,35,31,32 +offsets:1,1,33,34 +rotate:90 +girl-spring-dress/eye-iris-front +bounds:358,2,34,33 +offsets:1,1,36,35 +rotate:90 +girl-spring-dress/front-eyebrow +bounds:579,53,34,21 +offsets:1,1,36,23 +girl-spring-dress/hair-back +bounds:1096,653,294,185 +girl-spring-dress/hair-bangs +bounds:1685,438,181,80 +girl-spring-dress/hair-head-side-back +bounds:1215,2,59,103 +girl-spring-dress/hair-head-side-front +bounds:1664,11,82,83 +rotate:90 +girl-spring-dress/hair-patch +bounds:1276,32,132,82 +girl-spring-dress/hair-side +bounds:1685,365,71,142 +rotate:90 +girl-spring-dress/leg-front +bounds:995,591,60,316 +rotate:90 +girl-spring-dress/neck +bounds:1829,375,37,61 +offsets:1,1,39,63 +girl-spring-dress/shoulder-ribbon +bounds:1761,94,69,46 +offsets:1,1,71,48 +girl-spring-dress/skirt +bounds:730,676,364,162 +girl-spring-dress/underskirt +bounds:2,4,350,130 +rotate:90 +girl/arm-front +bounds:970,352,71,229 +rotate:90 +girl/back-eyebrow +bounds:615,53,34,21 +offsets:1,1,36,23 +girl/bag-base +bounds:1435,122,123,115 +girl/bag-strap-front +bounds:970,326,24,190 +offsets:0,2,24,192 +rotate:90 +girl/bag-top +bounds:1821,263,98,100 +girl/body +bounds:222,257,194,263 +rotate:90 +girl/boot-ribbon-front +bounds:970,454,24,23 +offsets:1,1,26,25 +rotate:90 +girl/eye-iris-back +bounds:494,2,31,32 +offsets:1,1,33,34 +rotate:90 +girl/eye-iris-front +bounds:528,10,34,33 +offsets:1,1,36,35 +girl/eye-white-back +bounds:432,35,39,31 +girl/front-eyebrow +bounds:651,53,34,21 +offsets:1,1,36,23 +girl/hair-back +bounds:1392,653,294,185 +girl/hair-bangs +bounds:1502,430,181,80 +girl/hair-flap-down-front +bounds:1553,512,139,130 +rotate:90 +girl/hair-head-side-back +bounds:1761,142,59,103 +girl/hair-head-side-front +bounds:1749,9,82,83 +girl/hair-patch +bounds:1604,105,132,82 +rotate:90 +girl/hair-side +bounds:1688,95,71,142 +girl/hair-strand-back-1 +bounds:1034,102,111,147 +offsets:5,0,116,147 +girl/hair-strand-back-2 +bounds:1685,520,180,105 +offsets:2,0,182,115 +girl/hair-strand-back-3 +bounds:877,70,182,155 +offsets:1,1,184,157 +rotate:90 +girl/hair-strand-front-1 +bounds:1313,470,75,187 +rotate:90 +girl/hair-strand-front-2 +bounds:1455,239,139,100 +girl/hair-strand-front-3 +bounds:1467,341,87,162 +rotate:90 +girl/hand-front-fingers +bounds:1871,15,36,40 +offsets:1,1,38,42 +girl/hat +bounds:690,88,185,164 +girl/leg-front +bounds:995,529,60,316 +rotate:90 +girl/pompom +bounds:1495,2,94,83 +offsets:1,1,96,85 +rotate:90 +girl/scarf +bounds:995,425,238,102 +girl/scarf-back +bounds:1312,244,141,99 +offsets:1,2,143,102 +girl/zip +bounds:1832,95,35,47 +offsets:1,1,37,49 diff --git a/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.png b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.png new file mode 100644 index 000000000..3aea5278f Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.png differ diff --git a/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.skel b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.skel new file mode 100644 index 000000000..e57bc08a0 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.skel differ diff --git a/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.uasset b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.uasset new file mode 100644 index 000000000..6b12c4318 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/mix-and-match/mix-and-match-pro.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/BoneFollower_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/BoneFollower_Blueprint.uasset new file mode 100644 index 000000000..e8069fbdc Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/BoneFollower_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset index 1c32773eb..b0f887525 100644 Binary files a/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset and b/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset index c48899ed7..4e1945e45 100644 Binary files a/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset and b/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/SetSkin_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/SetSkin_Blueprint.uasset new file mode 100644 index 000000000..5fab91c1e Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/SetSkin_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/TargetSpineboy_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/TargetSpineboy_Blueprint.uasset new file mode 100644 index 000000000..7f66becf6 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/TargetSpineboy_Blueprint.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp index 14e8a9a14..df4c681bc 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAtlasImportFactory.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp index 417f57ed4..e556a854d 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineEditorPlugin.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp index 1a4a61b9a..3603abfc1 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonImportFactory.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h index e6ba1af7d..faf18652c 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h index 7bd7826bc..30ee9500c 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h index 97f3a341f..9f2cad965 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SSpineWidget.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SSpineWidget.cpp index 5b630e6fa..c5781990f 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SSpineWidget.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SSpineWidget.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SSpineWidget.h" @@ -228,6 +228,14 @@ void SSpineWidget::Flush(int32 LayerId, FSlateWindowElementList &OutDrawElements Idx++; } +FVector2D SSpineWidget::ComputeDesiredSize(float X) const { + if (widget && widget->skeleton && widget->Atlas) { + return FVector2D(boundsSize.X, boundsSize.Y); + } else { + return FVector2D(256, 256); + } +} + void SSpineWidget::UpdateMesh(int32 LayerId, FSlateWindowElementList &OutDrawElements, const FGeometry &AllottedGeometry, Skeleton *Skeleton) { TArray vertices; TArray indices; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp index 1c63187da..9be02dfcc 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineAtlasAsset.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp index 0e1fc964f..4ccef32c0 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineBoneDriverComponent.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp index 100a783a5..aeff8ac63 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineBoneFollowerComponent.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp index 53ee78bb9..534346b65 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpinePlugin.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp index 40db61610..edcbdf536 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonAnimationComponent.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp index 0c7fa3600..74efba82e 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonComponent.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp index cb7dd2f50..808cac805 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonDataAsset.h" @@ -298,9 +298,9 @@ SkeletonData *USpineSkeletonDataAsset::GetSkeletonData(Atlas *Atlas) { void USpineSkeletonDataAsset::SetMixes(AnimationStateData *animationStateData) { for (auto &data : MixData) { if (!data.From.IsEmpty() && !data.To.IsEmpty()) { - const char *fromChar = TCHAR_TO_UTF8(*data.From); - const char *toChar = TCHAR_TO_UTF8(*data.To); - animationStateData->setMix(fromChar, toChar, data.Mix); + std::string fromChar = TCHAR_TO_UTF8(*data.From); + std::string toChar = TCHAR_TO_UTF8(*data.To); + animationStateData->setMix(fromChar.c_str(), toChar.c_str(), data.Mix); } } animationStateData->setDefaultMix(DefaultMix); diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp index f6e43d292..5e40b2d9a 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineSkeletonRendererComponent.h" @@ -359,4 +359,4 @@ void USpineSkeletonRendererComponent::UpdateMesh(USpineSkeletonComponent *compon clipper.clipEnd(); } -#undef LOCTEXT_NAMESPACE \ No newline at end of file +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp index 41670e90c..dc0a6e70d 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #include "SpineWidget.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SSpineWidget.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SSpineWidget.h index 0736fa50d..e69d8ba6b 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SSpineWidget.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SSpineWidget.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once @@ -55,6 +55,8 @@ protected: void Flush(int32 LayerId, FSlateWindowElementList &OutDrawElements, const FGeometry &AllottedGeometry, int &Idx, TArray &Vertices, TArray &Indices, TArray &Uvs, TArray &Colors, TArray &Colors2, UMaterialInstanceDynamic *Material); + virtual FVector2D ComputeDesiredSize(float) const override; + USpineWidget *widget; FRenderData renderData; FVector boundsMin; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h index de7d93d2f..a57f65363 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h index a4e1a3e2d..58c8234be 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h index 5bb6e1d9f..c7bcf03b4 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h index 6a0fe65c8..8ebeb2aae 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h index 3cc75fe78..3145a6726 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h index e6e92daaf..c040110ce 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h index cfe9dda60..9abc7c5df 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h index 8d90fcd1c..5b24870f3 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h index 347905fb6..2836a484a 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma once diff --git a/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs b/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs index c07976ae1..93c1df224 100644 --- a/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs +++ b/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnrealBuildTool; diff --git a/spine-ue4/Source/SpineUE4/SpineboyCppPawn.cpp b/spine-ue4/Source/SpineUE4/SpineboyCppPawn.cpp index 395ffcd07..4fd635be0 100644 --- a/spine-ue4/Source/SpineUE4/SpineboyCppPawn.cpp +++ b/spine-ue4/Source/SpineUE4/SpineboyCppPawn.cpp @@ -14,15 +14,15 @@ ASpineboyCppPawn::ASpineboyCppPawn() { // Called when the game starts or when spawned void ASpineboyCppPawn::BeginPlay() { Super::BeginPlay(); - USpineSkeletonAnimationComponent *animation = FindComponentByClass(); - animation->SetAnimation(0, FString("walk"), true); + USpineSkeletonAnimationComponent *animationComponent = FindComponentByClass(); + animationComponent->SetAnimation(0, FString("walk"), true); } // Called every frame void ASpineboyCppPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); - USpineSkeletonAnimationComponent *animation = FindComponentByClass(); - spine::AnimationState *state = animation->GetAnimationState(); + USpineSkeletonAnimationComponent *animationComponent = FindComponentByClass(); + spine::AnimationState *state = animationComponent->GetAnimationState(); spine::TrackEntry *entry = state->getCurrent(0); if (entry) { GEngine->AddOnScreenDebugMessage(-1, 0.5f, FColor::Yellow, FString(entry->getAnimation()->getName().buffer())); diff --git a/spine-ue4/SpineUE4.uproject b/spine-ue4/SpineUE4.uproject index 05d782f11..40c4435b1 100644 --- a/spine-ue4/SpineUE4.uproject +++ b/spine-ue4/SpineUE4.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "4.27", + "EngineAssociation": "5.2", "Category": "", "Description": "", "Modules": [ diff --git a/spine-ue4/setup.sh b/spine-ue4/setup.sh old mode 100644 new mode 100755 diff --git a/spine-unity/Assets/Spine Examples/Other Examples/Animation Tester/SpineAnimationTesterTool.cs b/spine-unity/Assets/Spine Examples/Other Examples/Animation Tester/SpineAnimationTesterTool.cs index 4ce80557d..e5cfd8e1e 100644 --- a/spine-unity/Assets/Spine Examples/Other Examples/Animation Tester/SpineAnimationTesterTool.cs +++ b/spine-unity/Assets/Spine Examples/Other Examples/Animation Tester/SpineAnimationTesterTool.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/AttackSpineboy.cs b/spine-unity/Assets/Spine Examples/Scripts/AttackSpineboy.cs index 96e71ea6b..714ab7e46 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/AttackSpineboy.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/AttackSpineboy.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/DraggableTransform.cs b/spine-unity/Assets/Spine Examples/Scripts/DraggableTransform.cs index 890df4439..295de6091 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/DraggableTransform.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/DraggableTransform.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/FootSoldierExample.cs b/spine-unity/Assets/Spine Examples/Scripts/FootSoldierExample.cs index 628c13576..114716cc8 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/FootSoldierExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/FootSoldierExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/BasicPlatformerController.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/BasicPlatformerController.cs index 846e443ac..03ffb1343 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/BasicPlatformerController.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/BasicPlatformerController.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/ConstrainedCamera.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/ConstrainedCamera.cs index 5590a1976..709cefd97 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/ConstrainedCamera.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/ConstrainedCamera.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/Raptor.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/Raptor.cs index 6c3a0ce86..64d76b051 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/Raptor.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/Raptor.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBeginnerTwo.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBeginnerTwo.cs index 388979b4d..5e4fe6e2b 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBeginnerTwo.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBeginnerTwo.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBlinkPlayer.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBlinkPlayer.cs index 93ec7dd6d..64e130b19 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBlinkPlayer.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineBlinkPlayer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerInput.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerInput.cs index 55d8db026..9908bb168 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerInput.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerInput.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerModel.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerModel.cs index f50ae5107..af31a3c14 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerModel.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerModel.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerView.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerView.cs index 486d5850b..213cd5796 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerView.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerView.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs new file mode 100644 index 000000000..0047db095 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs @@ -0,0 +1,167 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +using Spine.Unity; +using System.Collections; +using UnityEngine; + +namespace Spine.Unity.Examples { + public class SpineboyBeginnerViewGraphic : MonoBehaviour { + + #region Inspector + [Header("Components")] + public SpineboyBeginnerModel model; + public SkeletonGraphic skeletonGraphic; + + public AnimationReferenceAsset run, idle, aim, shoot, jump; + public EventDataReferenceAsset footstepEvent; + + [Header("Audio")] + public float footstepPitchOffset = 0.2f; + public float gunsoundPitchOffset = 0.13f; + public AudioSource footstepSource, gunSource, jumpSource; + + [Header("Effects")] + public ParticleSystem gunParticles; + #endregion + + SpineBeginnerBodyState previousViewState; + + void Start () { + if (skeletonGraphic == null) return; + model.ShootEvent += PlayShoot; + model.StartAimEvent += StartPlayingAim; + model.StopAimEvent += StopPlayingAim; + skeletonGraphic.AnimationState.Event += HandleEvent; + } + + void HandleEvent (Spine.TrackEntry trackEntry, Spine.Event e) { + if (e.Data == footstepEvent.EventData) + PlayFootstepSound(); + } + + void Update () { + if (skeletonGraphic == null) return; + if (model == null) return; + + if ((skeletonGraphic.Skeleton.ScaleX < 0) != model.facingLeft) { // Detect changes in model.facingLeft + Turn(model.facingLeft); + } + + // Detect changes in model.state + SpineBeginnerBodyState currentModelState = model.state; + + if (previousViewState != currentModelState) { + PlayNewStableAnimation(); + } + + previousViewState = currentModelState; + } + + void PlayNewStableAnimation () { + SpineBeginnerBodyState newModelState = model.state; + Animation nextAnimation; + + // Add conditionals to not interrupt transient animations. + + if (previousViewState == SpineBeginnerBodyState.Jumping && newModelState != SpineBeginnerBodyState.Jumping) { + PlayFootstepSound(); + } + + if (newModelState == SpineBeginnerBodyState.Jumping) { + jumpSource.Play(); + nextAnimation = jump; + } else { + if (newModelState == SpineBeginnerBodyState.Running) { + nextAnimation = run; + } else { + nextAnimation = idle; + } + } + + skeletonGraphic.AnimationState.SetAnimation(0, nextAnimation, true); + } + + void PlayFootstepSound () { + footstepSource.Play(); + footstepSource.pitch = GetRandomPitch(footstepPitchOffset); + } + + [ContextMenu("Check Tracks")] + void CheckTracks () { + AnimationState state = skeletonGraphic.AnimationState; + Debug.Log(state.GetCurrent(0)); + Debug.Log(state.GetCurrent(1)); + } + + #region Transient Actions + public void PlayShoot () { + // Play the shoot animation on track 1. + TrackEntry shootTrack = skeletonGraphic.AnimationState.SetAnimation(1, shoot, false); + shootTrack.AttachmentThreshold = 1f; + shootTrack.MixDuration = 0f; + skeletonGraphic.AnimationState.AddEmptyAnimation(1, 0.5f, 0.1f); + + // Play the aim animation on track 2 to aim at the mouse target. + TrackEntry aimTrack = skeletonGraphic.AnimationState.SetAnimation(2, aim, false); + aimTrack.AttachmentThreshold = 1f; + aimTrack.MixDuration = 0f; + skeletonGraphic.AnimationState.AddEmptyAnimation(2, 0.5f, 0.1f); + + gunSource.pitch = GetRandomPitch(gunsoundPitchOffset); + gunSource.Play(); + //gunParticles.randomSeed = (uint)Random.Range(0, 100); + gunParticles.Play(); + } + + public void StartPlayingAim () { + // Play the aim animation on track 2 to aim at the mouse target. + TrackEntry aimTrack = skeletonGraphic.AnimationState.SetAnimation(2, aim, true); + aimTrack.AttachmentThreshold = 1f; + aimTrack.MixDuration = 0f; + } + + public void StopPlayingAim () { + skeletonGraphic.AnimationState.AddEmptyAnimation(2, 0.5f, 0.1f); + } + + public void Turn (bool facingLeft) { + skeletonGraphic.Skeleton.ScaleX = facingLeft ? -1f : 1f; + // Maybe play a transient turning animation too, then call ChangeStableAnimation. + } + #endregion + + #region Utility + public float GetRandomPitch (float maxPitchOffset) { + return 1f + Random.Range(-maxPitchOffset, maxPitchOffset); + } + #endregion + } + +} diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs.meta b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs.meta new file mode 100644 index 000000000..ad8bda7c8 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyBeginnerViewGraphic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 795971ea6ab1f214eac09ad8814226e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetController.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetController.cs index 45b690b63..f7bf34b16 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetController.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetController.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs new file mode 100644 index 000000000..cb43b3e74 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs @@ -0,0 +1,64 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +using UnityEngine; + +namespace Spine.Unity.Examples { + public class SpineboyTargetControllerGraphic : MonoBehaviour { + + public SkeletonGraphic skeletonGraphic; + + [SpineBone(dataField: "skeletonGraphic")] + public string boneName; + public Camera cam; + public Canvas canvas; + + Bone bone; + + void OnValidate () { + if (skeletonGraphic == null) skeletonGraphic = GetComponent(); + } + + void Start () { + bone = skeletonGraphic.Skeleton.FindBone(boneName); + } + + void Update () { + Vector3 mousePosition = Input.mousePosition; + Vector2 localRectPosition; + RectTransformUtility.ScreenPointToLocalPointInRectangle( + skeletonGraphic.rectTransform, mousePosition, null, out localRectPosition); + Vector3 skeletonSpacePoint = localRectPosition / skeletonGraphic.MeshScale; + skeletonSpacePoint.x *= skeletonGraphic.Skeleton.ScaleX; + skeletonSpacePoint.y *= skeletonGraphic.Skeleton.ScaleY; + bone.SetLocalPosition(skeletonSpacePoint); + } + } + +} diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs.meta b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs.meta new file mode 100644 index 000000000..127824379 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/SpineboyTargetControllerGraphic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e58811512f2bea64988af3798e27f1d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/TransitionDictionaryExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/TransitionDictionaryExample.cs index 3e618490b..9c7ab50b7 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/TransitionDictionaryExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Getting Started Scripts/TransitionDictionaryExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Goblins.cs b/spine-unity/Assets/Spine Examples/Scripts/Goblins.cs index 64240e8d8..8be2d2947 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Goblins.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Goblins.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/HandleEventWithAudioExample.cs b/spine-unity/Assets/Spine Examples/Scripts/HandleEventWithAudioExample.cs index f90b1f559..d1a63c507 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/HandleEventWithAudioExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/HandleEventWithAudioExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/HeroEffectsHandlerExample.cs b/spine-unity/Assets/Spine Examples/Scripts/HeroEffectsHandlerExample.cs index 383eb945a..030cf1801 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/HeroEffectsHandlerExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/HeroEffectsHandlerExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/HurtFlashEffect.cs b/spine-unity/Assets/Spine Examples/Scripts/HurtFlashEffect.cs index 48ad33317..42a71e4fa 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/HurtFlashEffect.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/HurtFlashEffect.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/MaterialPropertyBlockExample.cs b/spine-unity/Assets/Spine Examples/Scripts/MaterialPropertyBlockExample.cs index c5c6ca3b8..b2212ec27 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/MaterialPropertyBlockExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/MaterialPropertyBlockExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/MaterialReplacementExample.cs b/spine-unity/Assets/Spine Examples/Scripts/MaterialReplacementExample.cs index 66e54c18f..9f2d0b44d 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/MaterialReplacementExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/MaterialReplacementExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/DummyMecanimControllerExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/DummyMecanimControllerExample.cs index 9736a93a2..38843162d 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/DummyMecanimControllerExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/DummyMecanimControllerExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/MecanimToAnimationHandleExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/MecanimToAnimationHandleExample.cs index 0057d1e12..84a78f086 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/MecanimToAnimationHandleExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/MecanimToAnimationHandleExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/SkeletonAnimationHandleExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/SkeletonAnimationHandleExample.cs index 16fe06108..50626b774 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/SkeletonAnimationHandleExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mecanim as Logic/SkeletonAnimationHandleExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; diff --git a/spine-unity/Assets/Spine Examples/Scripts/MecanimAnimationMatchModifier/AnimationMatchModifierAsset.cs b/spine-unity/Assets/Spine Examples/Scripts/MecanimAnimationMatchModifier/AnimationMatchModifierAsset.cs index ec72027ea..d14b33351 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/MecanimAnimationMatchModifier/AnimationMatchModifierAsset.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/MecanimAnimationMatchModifier/AnimationMatchModifierAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipAssetExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipAssetExample.cs index 96c1de22d..4ab67bca3 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipAssetExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipAssetExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipButtonExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipButtonExample.cs index fd264f9a4..aceb27b31 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipButtonExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipButtonExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipSystemExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipSystemExample.cs index e2db3edc2..9ee3cf619 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipSystemExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipSystemExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipsVisualsComponentExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipsVisualsComponentExample.cs index 7a3670a02..b572e418b 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipsVisualsComponentExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/EquipsVisualsComponentExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsButtonExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsButtonExample.cs index 4549fbb44..d8d615050 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsButtonExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsButtonExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsExample.cs index dc952f77b..89b5093c6 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Mix and Match Character Customize/MixAndMatchSkinsExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/MixAndMatch.cs b/spine-unity/Assets/Spine Examples/Scripts/MixAndMatch.cs index 7fe17617b..93596335b 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/MixAndMatch.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/MixAndMatch.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/MixAndMatchGraphic.cs b/spine-unity/Assets/Spine Examples/Scripts/MixAndMatchGraphic.cs index d54d21906..29dc4b925 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/MixAndMatchGraphic.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/MixAndMatchGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/RaggedySpineboy.cs b/spine-unity/Assets/Spine Examples/Scripts/RaggedySpineboy.cs index 2c5d11f43..87a132bfa 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/RaggedySpineboy.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/RaggedySpineboy.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/ReloadSceneOnKeyDown.cs b/spine-unity/Assets/Spine Examples/Scripts/ReloadSceneOnKeyDown.cs index ecb3fa4e2..ea1637a27 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/ReloadSceneOnKeyDown.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/ReloadSceneOnKeyDown.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/RenderTextureFadeoutExample.cs b/spine-unity/Assets/Spine Examples/Scripts/RenderTextureFadeoutExample.cs index 7c7dd5b59..3df6e55b4 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/RenderTextureFadeoutExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/RenderTextureFadeoutExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2017_2_OR_NEWER diff --git a/spine-unity/Assets/Spine Examples/Scripts/Rotator.cs b/spine-unity/Assets/Spine Examples/Scripts/Rotator.cs index 644470d10..db7c76403 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Rotator.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Rotator.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/RuntimeLoadFromExportsExample.cs b/spine-unity/Assets/Spine Examples/Scripts/RuntimeLoadFromExportsExample.cs index ff21923e4..17f19b4bb 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/RuntimeLoadFromExportsExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/RuntimeLoadFromExportsExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs index 199b1b0b5..337a0e0ab 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/CombinedSkin.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/CombinedSkin.cs index 915d5e9a4..59230430a 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/CombinedSkin.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/CombinedSkin.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AttachmentTools; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhost.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhost.cs index 006fb3f03..d8f586bb9 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhost.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhost.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhostRenderer.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhostRenderer.cs index 04fc735da..f3cae902d 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhostRenderer.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Ghost/SkeletonGhostRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/AtlasRegionAttacher.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/AtlasRegionAttacher.cs index 35cd7c63d..a93ca995f 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/AtlasRegionAttacher.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/AtlasRegionAttacher.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/SpriteAttacher.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/SpriteAttacher.cs index 5313cbabc..6c33210cf 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/SpriteAttacher.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Legacy/SpriteAttacher.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Original Contribution by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/OutlineSkeletonGraphic.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/OutlineSkeletonGraphic.cs index 35ff0f726..ba83f3983 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/OutlineSkeletonGraphic.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/OutlineSkeletonGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs new file mode 100644 index 000000000..2a5536cb4 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs @@ -0,0 +1,268 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER +#define NEW_PREFAB_SYSTEM +#endif + +#if UNITY_2019_3_OR_NEWER +#define SET_VERTICES_HAS_LENGTH_PARAMETER +#endif + +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Spine.Unity.Examples { + +#if NEW_PREFAB_SYSTEM + [ExecuteAlways] +#else + [ExecuteInEditMode] +#endif + public class RenderCombinedMesh : MonoBehaviour { + public SkeletonRenderer skeletonRenderer; + public SkeletonRenderSeparator renderSeparator; + public MeshRenderer[] referenceRenderers; + + bool updateViaSkeletonCallback = false; + MeshFilter[] referenceMeshFilters; + MeshRenderer ownRenderer; + MeshFilter ownMeshFilter; + + protected DoubleBuffered doubleBufferedMesh; + protected ExposedList positionBuffer; + protected ExposedList colorBuffer; + protected ExposedList uvBuffer; + protected ExposedList indexBuffer; + +#if UNITY_EDITOR + private void Reset () { + if (skeletonRenderer == null) + skeletonRenderer = this.GetComponentInParent(); + GatherRenderers(); + + Awake(); + if (referenceRenderers.Length > 0) + ownRenderer.sharedMaterial = referenceRenderers[0].sharedMaterial; + + LateUpdate(); + } +#endif + protected void GatherRenderers () { + referenceRenderers = this.GetComponentsInChildren(); + if (referenceRenderers.Length == 0 || + (referenceRenderers.Length == 1 && referenceRenderers[0].gameObject == this.gameObject)) { + Transform parent = this.transform.parent; + if (parent) + referenceRenderers = parent.GetComponentsInChildren(); + } + referenceRenderers = referenceRenderers.Where( + (val, idx) => val.gameObject != this.gameObject && val.enabled).ToArray(); + } + + void Awake () { + if (skeletonRenderer == null) + skeletonRenderer = this.GetComponentInParent(); + if (referenceRenderers == null || referenceRenderers.Length == 0) { + GatherRenderers(); + } + + if (renderSeparator == null) { + if (skeletonRenderer) + renderSeparator = skeletonRenderer.GetComponent(); + else + renderSeparator = this.GetComponentInParent(); + } + + int count = referenceRenderers.Length; + referenceMeshFilters = new MeshFilter[count]; + for (int i = 0; i < count; ++i) { + referenceMeshFilters[i] = referenceRenderers[i].GetComponent(); + } + + ownRenderer = this.GetComponent(); + if (ownRenderer == null) + ownRenderer = this.gameObject.AddComponent(); + ownMeshFilter = this.GetComponent(); + if (ownMeshFilter == null) + ownMeshFilter = this.gameObject.AddComponent(); + } + + void OnEnable () { +#if UNITY_EDITOR + if (Application.isPlaying) + Awake(); +#endif + if (skeletonRenderer) { + skeletonRenderer.OnMeshAndMaterialsUpdated -= UpdateOnCallback; + skeletonRenderer.OnMeshAndMaterialsUpdated += UpdateOnCallback; + updateViaSkeletonCallback = true; + } + if (renderSeparator) { + renderSeparator.OnMeshAndMaterialsUpdated -= UpdateOnCallback; + renderSeparator.OnMeshAndMaterialsUpdated += UpdateOnCallback; + updateViaSkeletonCallback = true; + } + } + + void OnDisable () { + if (skeletonRenderer) + skeletonRenderer.OnMeshAndMaterialsUpdated -= UpdateOnCallback; + if (renderSeparator) + renderSeparator.OnMeshAndMaterialsUpdated -= UpdateOnCallback; + } + + void OnDestroy () { + for (int i = 0; i < 2; ++i) { + Mesh mesh = doubleBufferedMesh.GetNext(); +#if UNITY_EDITOR + if (Application.isEditor && !Application.isPlaying) + UnityEngine.Object.DestroyImmediate(mesh); + else + UnityEngine.Object.Destroy(mesh); +#else + UnityEngine.Object.Destroy(mesh); +#endif + } + } + + void LateUpdate () { +#if UNITY_EDITOR + if (!Application.isPlaying) { + UpdateMesh(); + return; + } +#endif + + if (updateViaSkeletonCallback) + return; + UpdateMesh(); + } + + void UpdateOnCallback (SkeletonRenderer r) { + UpdateMesh(); + } + + protected void EnsureBufferSizes (int combinedVertexCount, int combinedIndexCount) { + if (positionBuffer == null) { + positionBuffer = new ExposedList(combinedVertexCount); + uvBuffer = new ExposedList(combinedVertexCount); + colorBuffer = new ExposedList(combinedVertexCount); + indexBuffer = new ExposedList(combinedIndexCount); + } + + if (positionBuffer.Count != combinedVertexCount) { + positionBuffer.Resize(combinedVertexCount); + uvBuffer.Resize(combinedVertexCount); + colorBuffer.Resize(combinedVertexCount); + } + if (indexBuffer.Count != combinedIndexCount) { + indexBuffer.Resize(combinedIndexCount); + } + } + + void InitMesh () { + if (doubleBufferedMesh == null) { + doubleBufferedMesh = new DoubleBuffered(); + for (int i = 0; i < 2; ++i) { + Mesh combinedMesh = doubleBufferedMesh.GetNext(); + combinedMesh.MarkDynamic(); + combinedMesh.name = "RenderCombinedMesh" + i; + combinedMesh.subMeshCount = 1; + } + } + } + + void UpdateMesh () { + InitMesh(); + int combinedVertexCount = 0; + int combinedIndexCount = 0; + GetCombinedMeshInfo(ref combinedVertexCount, ref combinedIndexCount); + + EnsureBufferSizes(combinedVertexCount, combinedIndexCount); + + int combinedV = 0; + int combinedI = 0; + for (int r = 0, rendererCount = referenceMeshFilters.Length; r < rendererCount; ++r) { + MeshFilter meshFilter = referenceMeshFilters[r]; + Mesh mesh = meshFilter.sharedMesh; + if (mesh == null) continue; + + int vertexCount = mesh.vertexCount; + Vector3[] positions = mesh.vertices; + Vector2[] uvs = mesh.uv; + Color32[] colors = mesh.colors32; + + System.Array.Copy(positions, 0, this.positionBuffer.Items, combinedV, vertexCount); + System.Array.Copy(uvs, 0, this.uvBuffer.Items, combinedV, vertexCount); + System.Array.Copy(colors, 0, this.colorBuffer.Items, combinedV, vertexCount); + + for (int s = 0, submeshCount = mesh.subMeshCount; s < submeshCount; ++s) { + int submeshIndexCount = (int)mesh.GetIndexCount(s); + int[] submeshIndices = mesh.GetIndices(s); + int[] dstIndices = this.indexBuffer.Items; + for (int i = 0; i < submeshIndexCount; ++i) + dstIndices[i + combinedI] = submeshIndices[i] + combinedV; + combinedI += submeshIndexCount; + } + combinedV += vertexCount; + } + + Mesh combinedMesh = doubleBufferedMesh.GetNext(); + combinedMesh.Clear(); +#if SET_VERTICES_HAS_LENGTH_PARAMETER + combinedMesh.SetVertices(this.positionBuffer.Items, 0, this.positionBuffer.Count); + combinedMesh.SetUVs(0, this.uvBuffer.Items, 0, this.uvBuffer.Count); + combinedMesh.SetColors(this.colorBuffer.Items, 0, this.colorBuffer.Count); + combinedMesh.SetTriangles(this.indexBuffer.Items, 0, this.indexBuffer.Count, 0); +#else + // Note: excess already contains zero positions and indices after ExposedList.Resize(). + combinedMesh.vertices = this.positionBuffer.Items; + combinedMesh.uv = this.uvBuffer.Items; + combinedMesh.colors32 = this.colorBuffer.Items; + combinedMesh.triangles = this.indexBuffer.Items; +#endif + ownMeshFilter.sharedMesh = combinedMesh; + } + + void GetCombinedMeshInfo (ref int vertexCount, ref int indexCount) { + for (int r = 0, rendererCount = referenceMeshFilters.Length; r < rendererCount; ++r) { + MeshFilter meshFilter = referenceMeshFilters[r]; + Mesh mesh = meshFilter.sharedMesh; + if (mesh == null) continue; + + vertexCount += mesh.vertexCount; + for (int s = 0, submeshCount = mesh.subMeshCount; s < submeshCount; ++s) { + indexCount += (int)mesh.GetIndexCount(s); + } + } + } + } +} diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs.meta b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs.meta new file mode 100644 index 000000000..739194fc6 --- /dev/null +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderCombinedMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05709c69e8e14304b9781652ad05daef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderExistingMesh.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderExistingMesh.cs index b900daf63..d2a266bc9 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderExistingMesh.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RenderExistingMesh.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -101,10 +101,15 @@ namespace Spine.Unity.Examples { } #if UNITY_EDITOR + // handle disabled scene reload + private void OnEnable () { + if (Application.isPlaying) + Awake(); + } + private void Update () { - if (!Application.isPlaying) { + if (!Application.isPlaying) InitializeDict(); - } } #endif @@ -142,6 +147,7 @@ namespace Spine.Unity.Examples { } void InitializeDict () { + replacementMaterialDict.Clear(); for (int i = 0; i < replacementMaterials.Length; ++i) { MaterialReplacement entry = replacementMaterials[i]; replacementMaterialDict[entry.originalMaterial] = entry.replacementMaterial; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RootMotionDeltaCompensation.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RootMotionDeltaCompensation.cs index ff1ead1b0..a21947998 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RootMotionDeltaCompensation.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/RootMotionDeltaCompensation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/JitterEffectExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/JitterEffectExample.cs index 216d0cba3..9dad523b1 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/JitterEffectExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/JitterEffectExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/TwoByTwoTransformEffectExample.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/TwoByTwoTransformEffectExample.cs index e0efb15b6..339dcfa5c 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/TwoByTwoTransformEffectExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/Sample VertexEffects/TwoByTwoTransformEffectExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SetRigidbodySolverIterations.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SetRigidbodySolverIterations.cs index f0df68748..b1649d251 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SetRigidbodySolverIterations.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SetRigidbodySolverIterations.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationFixedTimestep.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationFixedTimestep.cs index ff3e7f93a..cb63836e9 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationFixedTimestep.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationFixedTimestep.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationMulti/SkeletonAnimationMulti.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationMulti/SkeletonAnimationMulti.cs index f207c3074..febf098e1 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationMulti/SkeletonAnimationMulti.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonAnimationMulti/SkeletonAnimationMulti.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonColorInitialize.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonColorInitialize.cs index 03ebe03df..cbf3969cd 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonColorInitialize.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonColorInitialize.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicMirror.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicMirror.cs index 083fc4d94..d7f782918 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicMirror.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicMirror.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicPlayAnimationAtEvent.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicPlayAnimationAtEvent.cs index 2abc657cf..1e4c3949b 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicPlayAnimationAtEvent.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonGraphicPlayAnimationAtEvent.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonGraphicRenderTexture.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonGraphicRenderTexture.cs index b8d4bbf4e..590f4f1fc 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonGraphicRenderTexture.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonGraphicRenderTexture.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2017_2_OR_NEWER diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTexture.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTexture.cs index 369682ca7..413d8914d 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTexture.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTexture.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2019_3_OR_NEWER @@ -73,6 +73,17 @@ namespace Spine.Unity.Examples { CreateQuadChild(); } +#if UNITY_EDITOR + protected void Reset () { + string[] folders = { "Assets", "Packages" }; + string[] assets = UnityEditor.AssetDatabase.FindAssets("t:material RenderQuadMaterial", folders); + if (assets.Length > 0) { + string materialPath = UnityEditor.AssetDatabase.GUIDToAssetPath(assets[0]); + quadMaterial = UnityEditor.AssetDatabase.LoadAssetAtPath(materialPath); + } + } +#endif + void CreateQuadChild () { quad = new GameObject(this.name + " RenderTexture", typeof(MeshRenderer), typeof(MeshFilter)); quad.transform.SetParent(this.transform.parent, false); diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureBase.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureBase.cs index 7b5ec2ea2..2a6a59df4 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureBase.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureBase.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2017_2_OR_NEWER diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureFadeout.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureFadeout.cs index 759ced96b..85e62c7d3 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureFadeout.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonRenderTexture/SkeletonRenderTextureFadeout.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2019_3_OR_NEWER diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdoll2DInspector.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdoll2DInspector.cs index e296711b3..23d1b8988 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdoll2DInspector.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdoll2DInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdollInspector.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdollInspector.cs index 8adc02f7f..65660a403 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdollInspector.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/Editor/SkeletonRagdollInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll.cs index 9f6bbb9de..d872ab37e 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs index 51fb8b06b..9cecb3f48 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs index e9effd25d..8856b433a 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs index 4be598a18..9400b54e6 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs index 8487c697b..8033b86c9 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SlotTintBlackFollower.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SlotTintBlackFollower.cs index 510a38c59..ba3829788 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SlotTintBlackFollower.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SlotTintBlackFollower.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs index b9b4eea13..921528093 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpawnFromSkeletonDataExample.cs b/spine-unity/Assets/Spine Examples/Scripts/SpawnFromSkeletonDataExample.cs index f54b3232c..17aa98ef0 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpawnFromSkeletonDataExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpawnFromSkeletonDataExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpawnSkeletonGraphicExample.cs b/spine-unity/Assets/Spine Examples/Scripts/SpawnSkeletonGraphicExample.cs index d36855198..00283b452 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpawnSkeletonGraphicExample.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpawnSkeletonGraphicExample.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs index 6f86a7afd..194743bba 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Spineboy.cs b/spine-unity/Assets/Spine Examples/Scripts/Spineboy.cs index dceedcc99..779b51932 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Spineboy.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Spineboy.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyBodyTilt.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyBodyTilt.cs index 6ea2b3e3b..43f035216 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyBodyTilt.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyBodyTilt.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFacialExpression.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFacialExpression.cs index 16cc4f921..3ae733196 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFacialExpression.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFacialExpression.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFootplanter.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFootplanter.cs index b09940cda..64806e107 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFootplanter.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFootplanter.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFreeze.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFreeze.cs index 851f181fc..c8909f221 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyFreeze.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyFreeze.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyPole.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyPole.cs index e94821f2e..0cc505ea7 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyPole.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyPole.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineboyPoleGraphic.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineboyPoleGraphic.cs index 40c609f7b..add2de6e0 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineboyPoleGraphic.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineboyPoleGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine Examples/package.json b/spine-unity/Assets/Spine Examples/package.json index a44616f26..b4f28beec 100644 --- a/spine-unity/Assets/Spine Examples/package.json +++ b/spine-unity/Assets/Spine Examples/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity-examples", "displayName": "spine-unity Runtime Examples", "description": "This plugin provides example scenes and scripts for the spine-unity runtime.", - "version": "4.1.0", + "version": "4.1.22", "unity": "2018.3", "author": { "name": "Esoteric Software", @@ -30,4 +30,4 @@ }, "homepage": "https://github.com/EsotericSoftware/spine-runtimes#readme", "type": "sample" -} \ No newline at end of file +} diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/AnimationReferenceAssetEditor.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/AnimationReferenceAssetEditor.cs index e55e20864..8151aa128 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/AnimationReferenceAssetEditor.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/AnimationReferenceAssetEditor.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SkeletonDataAssetInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SkeletonDataAssetInspector.cs index ad03a2a0e..7b24fa5c2 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SkeletonDataAssetInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #define SPINE_SKELETON_MECANIM diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs index 9c337d51d..5da5af73c 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ //#define BAKE_ALL_BUTTON @@ -42,7 +42,7 @@ namespace Spine.Unity.Editor { [CustomEditor(typeof(SpineAtlasAsset)), CanEditMultipleObjects] public class SpineAtlasAssetInspector : UnityEditor.Editor { - SerializedProperty atlasFile, materials; + SerializedProperty atlasFile, materials, textureLoadingMode, onDemandTextureLoader; SpineAtlasAsset atlasAsset; GUIContent spriteSlicesLabel; @@ -70,6 +70,8 @@ namespace Spine.Unity.Editor { SpineEditorUtilities.ConfirmInitialization(); atlasFile = serializedObject.FindProperty("atlasFile"); materials = serializedObject.FindProperty("materials"); + textureLoadingMode = serializedObject.FindProperty("textureLoadingMode"); + onDemandTextureLoader = serializedObject.FindProperty("onDemandTextureLoader"); materials.isExpanded = true; atlasAsset = (SpineAtlasAsset)target; #if REGION_BAKING_MESH @@ -132,6 +134,12 @@ namespace Spine.Unity.Editor { } } + if (textureLoadingMode != null) { + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(textureLoadingMode); + EditorGUILayout.PropertyField(onDemandTextureLoader); + } + EditorGUILayout.Space(); if (SpineInspectorUtility.LargeCenteredButton(SpineInspectorUtility.TempContent("Set Mipmap Bias to " + SpinePreferences.DEFAULT_MIPMAPBIAS, tooltip: "This may help textures with mipmaps be less blurry when used for 2D sprites."))) { foreach (Material m in atlasAsset.materials) { diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineSpriteAtlasAssetInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineSpriteAtlasAssetInspector.cs index 4188346c2..60e7bc779 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineSpriteAtlasAssetInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineSpriteAtlasAssetInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerGraphicInspector.cs index f00d04d56..a729ae900 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerGraphicInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; @@ -99,8 +99,7 @@ namespace Spine.Unity.Editor { Transform transform = skeletonGraphicComponent.transform; Skeleton skeleton = skeletonGraphicComponent.Skeleton; - Canvas canvas = skeletonGraphicComponent.canvas; - float positionScale = canvas == null ? 1f : skeletonGraphicComponent.canvas.referencePixelsPerUnit; + float positionScale = skeletonGraphicComponent.MeshScale; if (string.IsNullOrEmpty(boneName.stringValue)) { SpineHandles.DrawBones(transform, skeleton, positionScale); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerInspector.cs index 24b4f491c..dcc7a19ad 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoneFollowerInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs index c821ebf90..e33939f47 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs index e171a5bc4..c3c7ff8f5 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/PointFollowerInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/PointFollowerInspector.cs index 85fe84d37..0a8d1e9e7 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/PointFollowerInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/PointFollowerInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonAnimationInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonAnimationInspector.cs index 931ec581e..10263f6ce 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonAnimationInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonAnimationInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicCustomMaterialsInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicCustomMaterialsInspector.cs index 6ef0f56d4..3fbf7172c 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicCustomMaterialsInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicCustomMaterialsInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Examples; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs index 7e7153387..53ca35d23 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -35,6 +35,10 @@ #define HAS_CULL_TRANSPARENT_MESH #endif +#if UNITY_2017_2_OR_NEWER +#define NEWPLAYMODECALLBACKS +#endif + using System.Reflection; using UnityEditor; using UnityEngine; @@ -57,10 +61,11 @@ namespace Spine.Unity.Editor { SerializedProperty additiveMaterial, multiplyMaterial, screenMaterial; SerializedProperty skeletonDataAsset, initialSkinName; SerializedProperty startingAnimation, startingLoop, timeScale, freeze, - updateTiming, updateWhenInvisible, unscaledTime, tintBlack; + updateTiming, updateWhenInvisible, unscaledTime, tintBlack, layoutScaleMode, editReferenceRect; SerializedProperty initialFlipX, initialFlipY; SerializedProperty meshGeneratorSettings; - SerializedProperty allowMultipleCanvasRenderers, separatorSlotNames, enableSeparatorSlots, updateSeparatorPartLocation; + SerializedProperty allowMultipleCanvasRenderers, separatorSlotNames, enableSeparatorSlots, + updateSeparatorPartLocation, updateSeparatorPartScale; SerializedProperty raycastTarget, maskable; readonly GUIContent UnscaledTimeLabel = new GUIContent("Unscaled Time", @@ -76,8 +81,8 @@ namespace Spine.Unity.Editor { protected bool TargetIsValid { get { if (serializedObject.isEditingMultipleObjects) { - foreach (UnityEngine.Object o in targets) { - SkeletonGraphic component = (SkeletonGraphic)o; + foreach (UnityEngine.Object c in targets) { + SkeletonGraphic component = (SkeletonGraphic)c; if (!component.IsValid) return false; } @@ -129,16 +134,49 @@ namespace Spine.Unity.Editor { freeze = so.FindProperty("freeze"); updateTiming = so.FindProperty("updateTiming"); updateWhenInvisible = so.FindProperty("updateWhenInvisible"); + layoutScaleMode = so.FindProperty("layoutScaleMode"); + editReferenceRect = so.FindProperty("editReferenceRect"); meshGeneratorSettings = so.FindProperty("meshGenerator").FindPropertyRelative("settings"); meshGeneratorSettings.isExpanded = SkeletonRendererInspector.advancedFoldout; allowMultipleCanvasRenderers = so.FindProperty("allowMultipleCanvasRenderers"); updateSeparatorPartLocation = so.FindProperty("updateSeparatorPartLocation"); + updateSeparatorPartScale = so.FindProperty("updateSeparatorPartScale"); enableSeparatorSlots = so.FindProperty("enableSeparatorSlots"); separatorSlotNames = so.FindProperty("separatorSlotNames"); separatorSlotNames.isExpanded = true; + +#if NEWPLAYMODECALLBACKS + EditorApplication.playModeStateChanged += OnPlaymodeChanged; +#else + EditorApplication.playmodeStateChanged += OnPlaymodeChanged; +#endif + } + + void OnDisable () { +#if NEWPLAYMODECALLBACKS + EditorApplication.playModeStateChanged -= OnPlaymodeChanged; +#else + EditorApplication.playmodeStateChanged -= OnPlaymodeChanged; +#endif + DisableEditReferenceRectMode(); + } + +#if NEWPLAYMODECALLBACKS + void OnPlaymodeChanged (PlayModeStateChange mode) { +#else + void OnPlaymodeChanged () { +#endif + DisableEditReferenceRectMode(); + } + + void DisableEditReferenceRectMode () { + foreach (UnityEngine.Object c in targets) { + SkeletonGraphic component = (SkeletonGraphic)c; + component.EditReferenceRect = false; + } } public override void OnInspectorGUI () { @@ -268,7 +306,7 @@ namespace Spine.Unity.Editor { } EditorGUILayout.Space(); - SeparatorsField(separatorSlotNames, enableSeparatorSlots, updateSeparatorPartLocation); + SeparatorsField(separatorSlotNames, enableSeparatorSlots, updateSeparatorPartLocation, updateSeparatorPartScale); } } @@ -299,14 +337,29 @@ namespace Spine.Unity.Editor { EditorGUILayout.PropertyField(raycastTarget); if (maskable != null) EditorGUILayout.PropertyField(maskable); - EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight + 5)); - EditorGUILayout.PrefixLabel("Match RectTransform with Mesh"); - if (GUILayout.Button("Match", EditorStyles.miniButton, GUILayout.Width(65f))) { - foreach (UnityEngine.Object skeletonGraphic in targets) { - MatchRectTransformWithBounds((SkeletonGraphic)skeletonGraphic); - } + EditorGUILayout.PropertyField(layoutScaleMode); + + using (new EditorGUI.DisabledGroupScope(layoutScaleMode.intValue == 0)) { + EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight + 5)); + EditorGUILayout.PrefixLabel("Edit Layout Bounds"); + editReferenceRect.boolValue = GUILayout.Toggle(editReferenceRect.boolValue, + EditorGUIUtility.IconContent("EditCollider"), EditorStyles.miniButton, GUILayout.Width(40f)); + EditorGUILayout.EndHorizontal(); + } + if (layoutScaleMode.intValue == 0) { + editReferenceRect.boolValue = false; + } + + using (new EditorGUI.DisabledGroupScope(editReferenceRect.boolValue == false && layoutScaleMode.intValue != 0)) { + EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight + 5)); + EditorGUILayout.PrefixLabel("Match RectTransform with Mesh"); + if (GUILayout.Button("Match", EditorStyles.miniButton, GUILayout.Width(65f))) { + foreach (UnityEngine.Object skeletonGraphic in targets) { + MatchRectTransformWithBounds((SkeletonGraphic)skeletonGraphic); + } + } + EditorGUILayout.EndHorizontal(); } - EditorGUILayout.EndHorizontal(); if (TargetIsValid && !isInspectingPrefab) { EditorGUILayout.Space(); @@ -320,7 +373,6 @@ namespace Spine.Unity.Editor { } wasChanged |= EditorGUI.EndChangeCheck(); - if (wasChanged) { serializedObject.ApplyModifiedProperties(); slotsReapplyRequired = true; @@ -346,6 +398,18 @@ namespace Spine.Unity.Editor { return false; } + protected void OnSceneGUI () { + SkeletonGraphic skeletonGraphic = (SkeletonGraphic)target; + if (skeletonGraphic.EditReferenceRect) { + SpineHandles.DrawRectTransformRect(skeletonGraphic, Color.gray); + SpineHandles.DrawReferenceRect(skeletonGraphic, Color.green); + } else { + SpineHandles.DrawReferenceRect(skeletonGraphic, Color.blue); + } + + + } + protected void AssignDefaultBlendModeMaterials () { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = (SkeletonGraphic)target; @@ -366,7 +430,7 @@ namespace Spine.Unity.Editor { } public static void SeparatorsField (SerializedProperty separatorSlotNames, SerializedProperty enableSeparatorSlots, - SerializedProperty updateSeparatorPartLocation) { + SerializedProperty updateSeparatorPartLocation, SerializedProperty updateSeparatorPartScale) { bool multi = separatorSlotNames.serializedObject.isEditingMultipleObjects; bool hasTerminalSlot = false; @@ -404,6 +468,7 @@ namespace Spine.Unity.Editor { EditorGUILayout.PropertyField(enableSeparatorSlots, SpineInspectorUtility.TempContent("Enable Separation", tooltip: "Whether to enable separation at the above separator slots.")); EditorGUILayout.PropertyField(updateSeparatorPartLocation, SpineInspectorUtility.TempContent("Update Part Location", tooltip: "Update separator part GameObject location to match the position of the SkeletonGraphic. This can be helpful when re-parenting parts to a different GameObject.")); + EditorGUILayout.PropertyField(updateSeparatorPartScale, SpineInspectorUtility.TempContent("Update Part Scale", tooltip: "Update separator part GameObject scale to match the scale (lossyScale) of the SkeletonGraphic. This can be helpful when re-parenting parts to a different GameObject.")); } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimInspector.cs index 5701b5f1b..2eb7e3afa 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimRootMotionInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimRootMotionInspector.cs index acbef455e..5c9ccb1ca 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimRootMotionInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonMecanimRootMotionInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererCustomMaterialsInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererCustomMaterialsInspector.cs index 2577778fc..59dee02e7 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererCustomMaterialsInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererCustomMaterialsInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #define SPINE_OPTIONAL_MATERIALOVERRIDE diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererInspector.cs index 41ac2fc21..04fb07f2f 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRendererInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -202,7 +202,7 @@ namespace Spine.Unity.Editor { if (!isInspectingPrefab) { if (requireRepaint) { - UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); + SceneView.RepaintAll(); requireRepaint = false; } } @@ -586,7 +586,7 @@ namespace Spine.Unity.Editor { if (mismatchDetected) { mismatchDetected = false; - UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); + SceneView.RepaintAll(); } } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionBaseInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionBaseInspector.cs index 650d2bdd0..d554168ec 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionBaseInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionBaseInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionInspector.cs index 10b8a4871..bcc7ff046 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonRootMotionInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs index e5bf3bd2b..6c2ddebec 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityInspector.cs index e74e23e00..d1cd1eb39 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Menus.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Menus.cs index d6a9d1c00..ff9d2d9bd 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Menus.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Menus.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineShaderWithOutlineGUI.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineShaderWithOutlineGUI.cs index 12b1d9d55..4a8d0f540 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineShaderWithOutlineGUI.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineShaderWithOutlineGUI.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs index cca79d418..87e12e820 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity; @@ -130,6 +130,8 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { MaterialProperty _smoothnessScale = null; MaterialProperty _lightAffectsAdditive = null; + MaterialProperty _tintBlack = null; + MaterialProperty _darkColor = null; static GUIContent _albedoText = new GUIContent("Albedo", "Albedo (RGB) and Transparency (A)"); static GUIContent _maskText = new GUIContent("Light Mask", "Light mask texture (secondary Sprite texture)"); @@ -192,6 +194,8 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { static GUIContent _meshRequiresNormalsAndTangentsText = new GUIContent("Note: Material requires a mesh with Normals and Tangents."); static GUIContent[] _fixedDiffuseRampModeOptions = { new GUIContent("Hard"), new GUIContent("Soft"), new GUIContent("Old Hard"), new GUIContent("Old Soft") }; static GUIContent _lightAffectsAdditiveText = new GUIContent("Light Affects Additive", "For PMA Additive Slots: When enabled, additive Slots are lit normally before the additive color is written to the target buffer. When disabled, the additive color is directly written with intensity 1."); + static GUIContent _tintBlackText = new GUIContent("Tint Black", "Enable Tint Black functionality."); + static GUIContent _darkColorText = new GUIContent("Dark Color", "Tint-black dark color."); const string _primaryMapsText = "Main Maps"; const string _depthLabelText = "Depth"; @@ -266,6 +270,8 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { _smoothnessScale = FindProperty("_GlossMapScale", props, false); _lightAffectsAdditive = FindProperty("_LightAffectsAdditive", props, false); + _tintBlack = FindProperty("_TintBlack", props, false); + _darkColor = FindProperty("_Black", props, false); } static bool BoldToggleField (GUIContent label, bool value) { @@ -851,6 +857,15 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { _materialEditor.ShaderProperty(_lightAffectsAdditive, _lightAffectsAdditiveText); dataChanged |= EditorGUI.EndChangeCheck(); } + + if (_tintBlack != null) { + EditorGUI.BeginChangeCheck(); + _materialEditor.ShaderProperty(_tintBlack, _tintBlackText); + dataChanged |= EditorGUI.EndChangeCheck(); + + if (_darkColor != null && (_tintBlack.floatValue != 0 || _tintBlack.hasMixedValue)) + _materialEditor.ShaderProperty(_darkColor, _darkColorText); + } return dataChanged; } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineAttributeDrawers.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineAttributeDrawers.cs index 01a728e68..d82f32b6a 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineAttributeDrawers.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineAttributeDrawers.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Contributed by: Mitch Thompson diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetDatabaseAvailabilityDetector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetDatabaseAvailabilityDetector.cs index 1c5548273..fd90123a6 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetDatabaseAvailabilityDetector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetDatabaseAvailabilityDetector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs index 80d9ab792..ee4a68d2d 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 @@ -664,7 +664,7 @@ namespace Spine.Unity.Editor { Material material = (Material)AssetDatabase.LoadAssetAtPath(materialPath, typeof(Material)); if (material == null) { - Shader defaultShader = Shader.Find(SpineEditorUtilities.Preferences.DefaultShader); + Shader defaultShader = GetDefaultShader(); material = defaultShader != null ? new Material(defaultShader) : null; if (material) { ApplyPMAOrStraightAlphaSettings(material, SpineEditorUtilities.Preferences.textureSettingsReference); @@ -737,6 +737,13 @@ namespace Spine.Unity.Editor { return loadedAtlas != null ? loadedAtlas : atlasAsset; } + public static Shader GetDefaultShader () { + Shader shader = Shader.Find(SpineEditorUtilities.Preferences.DefaultShader); + if (shader == null) shader = Shader.Find("Spine/Skeleton"); + if (shader == null) shader = Shader.Find("Standard"); + return shader; + } + public static bool SpriteAtlasSettingsNeedAdjustment (UnityEngine.U2D.SpriteAtlas spriteAtlas) { #if EXPOSES_SPRITE_ATLAS_UTILITIES UnityEditor.U2D.SpriteAtlasPackingSettings packingSettings = UnityEditor.U2D.SpriteAtlasExtensions.GetPackingSettings(spriteAtlas); @@ -851,24 +858,24 @@ namespace Spine.Unity.Editor { { string pageName = "SpriteAtlas"; - string materialPath = assetPath + "/" + primaryName + "_" + pageName + ".mat"; - Material mat = AssetDatabase.LoadAssetAtPath(materialPath); + Material material = AssetDatabase.LoadAssetAtPath(materialPath); - if (mat == null) { - mat = new Material(Shader.Find(SpineEditorUtilities.Preferences.defaultShader)); - ApplyPMAOrStraightAlphaSettings(mat, SpineEditorUtilities.Preferences.textureSettingsReference); - AssetDatabase.CreateAsset(mat, materialPath); + if (material == null) { + Shader defaultShader = GetDefaultShader(); + material = defaultShader != null ? new Material(defaultShader) : null; + ApplyPMAOrStraightAlphaSettings(material, SpineEditorUtilities.Preferences.textureSettingsReference); + AssetDatabase.CreateAsset(material, materialPath); } else { - vestigialMaterials.Remove(mat); + vestigialMaterials.Remove(material); } if (texture != null) - mat.mainTexture = texture; + material.mainTexture = texture; - EditorUtility.SetDirty(mat); + EditorUtility.SetDirty(material); // note: don't call AssetDatabase.SaveAssets() since this would trigger OnPostprocessAllAssets() every time unnecessarily. - populatingMaterials.Add(mat); //atlasAsset.materials[i] = mat; + populatingMaterials.Add(material); } atlasAsset.materials = populatingMaterials.ToArray(); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs index cbbe9650f..2cb24f730 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // from spine-unity 4.0 onward BlendModeMaterialAssets are obsolete and shall be upgraded. diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs index dd387967a..686eb3a66 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs index eb78dde4f..e516eebe9 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Icons.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Icons.cs index 59d230463..13864e4bd 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Icons.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Icons.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Instantiation.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Instantiation.cs index d1fffcb7f..aa9bdab52 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Instantiation.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Instantiation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Preferences.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Preferences.cs index 669990d53..c0c0f09b8 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Preferences.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/Preferences.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 @@ -179,6 +179,8 @@ namespace Spine.Unity.Editor { const string TIMELINE_USE_BLEND_DURATION_KEY = "SPINE_TIMELINE_USE_BLEND_DURATION_KEY"; public static bool timelineUseBlendDuration = SpinePreferences.DEFAULT_TIMELINE_USE_BLEND_DURATION; + const string TIMELINE_DEFAULT_MIX_DURATION_KEY = "SPINE_TIMELINE_DEFAULT_MIX_DURATION_KEY"; + public static bool timelineDefaultMixDuration = SpinePreferences.DEFAULT_TIMELINE_DEFAULT_MIX_DURATION; static bool preferencesLoaded = false; @@ -203,6 +205,7 @@ namespace Spine.Unity.Editor { textureImporterWarning = EditorPrefs.GetBool(TEXTUREIMPORTER_WARNING_KEY, SpinePreferences.DEFAULT_TEXTUREIMPORTER_WARNING); componentMaterialWarning = EditorPrefs.GetBool(COMPONENTMATERIAL_WARNING_KEY, SpinePreferences.DEFAULT_COMPONENTMATERIAL_WARNING); skeletonDataAssetNoFileError = EditorPrefs.GetBool(SKELETONDATA_ASSET_NO_FILE_ERROR_KEY, SpinePreferences.DEFAULT_SKELETONDATA_ASSET_NO_FILE_ERROR); + timelineDefaultMixDuration = EditorPrefs.GetBool(TIMELINE_DEFAULT_MIX_DURATION_KEY, SpinePreferences.DEFAULT_TIMELINE_DEFAULT_MIX_DURATION); timelineUseBlendDuration = EditorPrefs.GetBool(TIMELINE_USE_BLEND_DURATION_KEY, SpinePreferences.DEFAULT_TIMELINE_USE_BLEND_DURATION); handleScale = EditorPrefs.GetFloat(SCENE_ICONS_SCALE_KEY, SpinePreferences.DEFAULT_SCENE_ICONS_SCALE); preferencesLoaded = true; @@ -224,6 +227,7 @@ namespace Spine.Unity.Editor { newPreferences.textureImporterWarning = EditorPrefs.GetBool(TEXTUREIMPORTER_WARNING_KEY, SpinePreferences.DEFAULT_TEXTUREIMPORTER_WARNING); newPreferences.componentMaterialWarning = EditorPrefs.GetBool(COMPONENTMATERIAL_WARNING_KEY, SpinePreferences.DEFAULT_COMPONENTMATERIAL_WARNING); newPreferences.skeletonDataAssetNoFileError = EditorPrefs.GetBool(SKELETONDATA_ASSET_NO_FILE_ERROR_KEY, SpinePreferences.DEFAULT_SKELETONDATA_ASSET_NO_FILE_ERROR); + newPreferences.timelineDefaultMixDuration = EditorPrefs.GetBool(TIMELINE_DEFAULT_MIX_DURATION_KEY, SpinePreferences.DEFAULT_TIMELINE_DEFAULT_MIX_DURATION); newPreferences.timelineUseBlendDuration = EditorPrefs.GetBool(TIMELINE_USE_BLEND_DURATION_KEY, SpinePreferences.DEFAULT_TIMELINE_USE_BLEND_DURATION); newPreferences.handleScale = EditorPrefs.GetFloat(SCENE_ICONS_SCALE_KEY, SpinePreferences.DEFAULT_SCENE_ICONS_SCALE); } @@ -243,6 +247,7 @@ namespace Spine.Unity.Editor { EditorPrefs.SetBool(TEXTUREIMPORTER_WARNING_KEY, preferences.textureImporterWarning); EditorPrefs.SetBool(COMPONENTMATERIAL_WARNING_KEY, preferences.componentMaterialWarning); EditorPrefs.SetBool(SKELETONDATA_ASSET_NO_FILE_ERROR_KEY, preferences.skeletonDataAssetNoFileError); + EditorPrefs.SetBool(TIMELINE_DEFAULT_MIX_DURATION_KEY, preferences.timelineDefaultMixDuration); EditorPrefs.SetBool(TIMELINE_USE_BLEND_DURATION_KEY, preferences.timelineUseBlendDuration); EditorPrefs.SetFloat(SCENE_ICONS_SCALE_KEY, preferences.handleScale); } @@ -378,6 +383,7 @@ namespace Spine.Unity.Editor { GUILayout.Space(20); EditorGUILayout.LabelField("Timeline Extension", EditorStyles.boldLabel); { + SpineEditorUtilities.BoolPrefsField(ref timelineDefaultMixDuration, TIMELINE_DEFAULT_MIX_DURATION_KEY, new GUIContent("Default Mix Duration", "When enabled, the clip uses the default mix duration by default, as specified at the SkeletonDataAsset.")); SpineEditorUtilities.BoolPrefsField(ref timelineUseBlendDuration, TIMELINE_USE_BLEND_DURATION_KEY, new GUIContent("Use Blend Duration", "When enabled, MixDuration will be synced with timeline clip transition duration 'Ease In Duration'.")); } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs index 16d60d47f..5d0f33aeb 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,11 +23,10 @@ * (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. + * (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. *****************************************************************************/ - #if UNITY_2018_1_OR_NEWER #define HAS_BUILD_PROCESS_WITH_REPORT #endif @@ -47,6 +46,8 @@ #define HAS_SAVE_ASSET_IF_DIRTY #endif +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + using System.Collections.Generic; using UnityEditor; using UnityEditor.Build; @@ -61,6 +62,9 @@ namespace Spine.Unity.Editor { #if HAS_ON_POSTPROCESS_PREFAB static List prefabsToRestore = new List(); +#endif +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + static List textureLoadersToRestore = new List(); #endif static Dictionary spriteAtlasTexturesToRestore = new Dictionary(); @@ -69,6 +73,9 @@ namespace Spine.Unity.Editor { #if HAS_ON_POSTPROCESS_PREFAB if (SpineEditorUtilities.Preferences.removePrefabPreviewMeshes) PreprocessSpinePrefabMeshes(); +#endif +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + PreprocessOnDemandTextureLoaders(); #endif PreprocessSpriteAtlases(); } @@ -78,6 +85,9 @@ namespace Spine.Unity.Editor { #if HAS_ON_POSTPROCESS_PREFAB if (SpineEditorUtilities.Preferences.removePrefabPreviewMeshes) PostprocessSpinePrefabMeshes(); +#endif +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + PostprocessOnDemandTextureLoaders(); #endif PostprocessSpriteAtlases(); } @@ -133,6 +143,66 @@ namespace Spine.Unity.Editor { } } #endif + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + internal static void PreprocessOnDemandTextureLoaders () { + BuildUtilities.IsInSkeletonAssetBuildPreProcessing = true; + try { + AssetDatabase.StartAssetEditing(); + textureLoadersToRestore.Clear(); + string[] loaderAssets = AssetDatabase.FindAssets("t:OnDemandTextureLoader"); + foreach (string loaderAsset in loaderAssets) { + string assetPath = AssetDatabase.GUIDToAssetPath(loaderAsset); + OnDemandTextureLoader loader = AssetDatabase.LoadAssetAtPath(assetPath); + bool isLoaderUsed = loader.atlasAsset && loader.atlasAsset.OnDemandTextureLoader == loader && + loader.atlasAsset.TextureLoadingMode == AtlasAssetBase.LoadingMode.OnDemand; + if (isLoaderUsed) { + IEnumerable modifiedMaterials; + textureLoadersToRestore.Add(assetPath); + loader.AssignPlaceholderTextures(out modifiedMaterials); + +#if HAS_SAVE_ASSET_IF_DIRTY + foreach (Material material in modifiedMaterials) { + AssetDatabase.SaveAssetIfDirty(material); + } +#endif + } + } + EditorUtility.UnloadUnusedAssetsImmediate(); + AssetDatabase.StopAssetEditing(); +#if !HAS_SAVE_ASSET_IF_DIRTY + if (textureLoadersToRestore.Count > 0) + AssetDatabase.SaveAssets(); +#endif + } finally { + BuildUtilities.IsInSkeletonAssetBuildPreProcessing = false; + } + } + + internal static void PostprocessOnDemandTextureLoaders () { + BuildUtilities.IsInSkeletonAssetBuildPostProcessing = true; + try { + foreach (string assetPath in textureLoadersToRestore) { + OnDemandTextureLoader loader = AssetDatabase.LoadAssetAtPath(assetPath); + IEnumerable modifiedMaterials; + loader.AssignTargetTextures(out modifiedMaterials); +#if HAS_SAVE_ASSET_IF_DIRTY + foreach (Material material in modifiedMaterials) { + AssetDatabase.SaveAssetIfDirty(material); + } +#endif + } +#if !HAS_SAVE_ASSET_IF_DIRTY + if (textureLoadersToRestore.Count > 0) + AssetDatabase.SaveAssets(); +#endif + textureLoadersToRestore.Clear(); + + } finally { + BuildUtilities.IsInSkeletonAssetBuildPostProcessing = false; + } + } +#endif internal static void PreprocessSpriteAtlases () { BuildUtilities.IsInSpriteAtlasBuildPreProcessing = true; try { diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs index f5a080064..95d69a951 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 @@ -238,7 +238,7 @@ namespace Spine.Unity.Editor { } public static void ConfirmInitialization () { - if (!initialized || Icons.skeleton == null) + if (!initialized) Initialize(); } @@ -310,6 +310,12 @@ namespace Spine.Unity.Editor { if (oldAnimationState != null) { stateComponent.AnimationState.AssignEventSubscribersFrom(oldAnimationState); } + if (stateComponent != null) { + // Any set animation needs to be applied as well since it might set attachments, + // having an effect on generated SpriteMaskMaterials below. + stateComponent.AnimationState.Apply(component.skeleton); + component.LateUpdate(); + } #if BUILT_IN_SPRITE_MASK_COMPONENT SpineMaskUtilities.EditorAssignSpriteMaskMaterials(component); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineHandles.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineHandles.cs index d936d4bfb..e8673f4f3 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineHandles.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineHandles.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 @@ -162,6 +162,8 @@ namespace Spine.Unity.Editor { } public static void DrawBoneNames (Transform transform, Skeleton skeleton, float positionScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + GUIStyle style = BoneNameStyle; foreach (Bone b in skeleton.Bones) { if (!b.Active) continue; @@ -172,6 +174,8 @@ namespace Spine.Unity.Editor { } public static void DrawBones (Transform transform, Skeleton skeleton, float positionScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + float boneScale = 1.8f; // Draw the root bone largest; DrawCrosshairs2D(skeleton.Bones.Items[0].GetWorldPosition(transform), 0.08f, positionScale); @@ -191,6 +195,8 @@ namespace Spine.Unity.Editor { return _boneWireBuffer; } public static void DrawBoneWireframe (Transform transform, Bone b, Color color, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Handles.color = color; Vector3 pos = new Vector3(b.WorldX * skeletonRenderScale, b.WorldY * skeletonRenderScale, 0); float length = b.Data.Length; @@ -211,6 +217,8 @@ namespace Spine.Unity.Editor { } public static void DrawBone (Transform transform, Bone b, float boneScale, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Vector3 pos = new Vector3(b.WorldX * skeletonRenderScale, b.WorldY * skeletonRenderScale, 0); float length = b.Data.Length; if (length > 0) { @@ -228,6 +236,8 @@ namespace Spine.Unity.Editor { } public static void DrawBone (Transform transform, Bone b, float boneScale, Color color, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Vector3 pos = new Vector3(b.WorldX * skeletonRenderScale, b.WorldY * skeletonRenderScale, 0); float length = b.Data.Length; if (length > 0) { @@ -245,6 +255,8 @@ namespace Spine.Unity.Editor { } public static void DrawPaths (Transform transform, Skeleton skeleton) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + foreach (Slot s in skeleton.DrawOrder) { PathAttachment p = s.Attachment as PathAttachment; if (p != null) SpineHandles.DrawPath(s, p, transform, true); @@ -253,6 +265,8 @@ namespace Spine.Unity.Editor { static float[] pathVertexBuffer; public static void DrawPath (Slot s, PathAttachment p, Transform t, bool includeName) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + int worldVerticesLength = p.WorldVerticesLength; if (pathVertexBuffer == null || pathVertexBuffer.Length < worldVerticesLength) @@ -296,10 +310,14 @@ namespace Spine.Unity.Editor { } public static void DrawDot (Vector3 position, float size) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Handles.DotHandleCap(0, position, Quaternion.identity, size * HandleUtility.GetHandleSize(position), EventType.Ignore); //Handles.DotCap(0, position, Quaternion.identity, size * HandleUtility.GetHandleSize(position)); } public static void DrawBoundingBoxes (Transform transform, Skeleton skeleton) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + foreach (Slot slot in skeleton.Slots) { BoundingBoxAttachment bba = slot.Attachment as BoundingBoxAttachment; if (bba != null) SpineHandles.DrawBoundingBox(slot, bba, transform); @@ -307,6 +325,8 @@ namespace Spine.Unity.Editor { } public static void DrawBoundingBox (Slot slot, BoundingBoxAttachment box, Transform t) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + if (box.Vertices.Length <= 2) return; // Handle cases where user creates a BoundingBoxAttachment but doesn't actually define it. float[] worldVerts = new float[box.WorldVerticesLength]; @@ -333,6 +353,8 @@ namespace Spine.Unity.Editor { } public static void DrawPointAttachment (Bone bone, PointAttachment pointAttachment, Transform skeletonTransform) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + if (bone == null) return; if (pointAttachment == null) return; @@ -346,6 +368,8 @@ namespace Spine.Unity.Editor { } public static void DrawConstraints (Transform transform, Skeleton skeleton, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Vector3 targetPos; Vector3 pos; bool active; @@ -424,13 +448,59 @@ namespace Spine.Unity.Editor { } } + public static void DrawReferenceRect (SkeletonGraphic skeletonGraphic, Color color) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + + RectTransform rectTransform = skeletonGraphic.rectTransform; + Vector2 referenceRectSize = skeletonGraphic.GetReferenceRectSize(); + Vector3 position = rectTransform.position; + Vector3 right = rectTransform.TransformVector(Vector3.right * referenceRectSize.x); + Vector3 up = rectTransform.TransformVector(Vector3.up * referenceRectSize.y); + + Vector3 cornerVertexBL = position - rectTransform.pivot.x * right - rectTransform.pivot.y * up; + DrawRect(cornerVertexBL, right, up, color); + } + + public static void DrawRectTransformRect (SkeletonGraphic skeletonGraphic, Color color) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + + RectTransform rectTransform = skeletonGraphic.rectTransform; + Vector2 rectTransformSize = skeletonGraphic.RectTransformSize; + Vector3 position = rectTransform.position; + Vector3 right = rectTransform.TransformVector(Vector3.right * rectTransformSize.x); + Vector3 up = rectTransform.TransformVector(Vector3.up * rectTransformSize.y); + + Vector3 cornerVertexBL = position - rectTransform.pivot.x * right - rectTransform.pivot.y * up; + DrawRect(cornerVertexBL, right, up, color); + } + + public static void DrawRect (Vector3 cornerVertexBL, Vector3 right, Vector3 up, Color color) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + + Vector3 v0 = cornerVertexBL; + Vector3 v1 = v0 + right; + Vector3 v2 = v0 + right + up; + Vector3 v3 = v0 + up; + Color previousColor = UnityEditor.Handles.color; + UnityEditor.Handles.color = color; + UnityEditor.Handles.DrawLine(v0, v1); + UnityEditor.Handles.DrawLine(v1, v2); + UnityEditor.Handles.DrawLine(v2, v3); + UnityEditor.Handles.DrawLine(v3, v0); + UnityEditor.Handles.color = previousColor; + } + static void DrawCrosshairs2D (Vector3 position, float scale, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + scale *= SpineEditorUtilities.Preferences.handleScale * skeletonRenderScale; Handles.DrawLine(position + new Vector3(-scale, 0), position + new Vector3(scale, 0)); Handles.DrawLine(position + new Vector3(0, -scale), position + new Vector3(0, scale)); } static void DrawCrosshairs (Vector3 position, float scale, float a, float b, float c, float d, Transform transform, float skeletonRenderScale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + scale *= SpineEditorUtilities.Preferences.handleScale * skeletonRenderScale; Vector3 xOffset = (Vector3)(new Vector2(a, c).normalized * scale); @@ -443,6 +513,8 @@ namespace Spine.Unity.Editor { } static void DrawArrowhead2D (Vector3 pos, float localRotation, float scale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + scale *= SpineEditorUtilities.Preferences.handleScale; SpineHandles.IKMaterial.SetPass(0); @@ -450,10 +522,14 @@ namespace Spine.Unity.Editor { } static void DrawArrowhead (Vector3 pos, Quaternion worldQuaternion) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Graphics.DrawMeshNow(SpineHandles.ArrowheadMesh, pos, worldQuaternion, 0); } static void DrawArrowhead (Matrix4x4 m) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + float s = SpineEditorUtilities.Preferences.handleScale; m.m00 *= s; m.m01 *= s; @@ -470,6 +546,8 @@ namespace Spine.Unity.Editor { } static void DrawBoneCircle (Vector3 pos, Color outlineColor, Vector3 normal, float scale = 1f) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + scale *= SpineEditorUtilities.Preferences.handleScale; Color o = Handles.color; @@ -488,6 +566,8 @@ namespace Spine.Unity.Editor { } internal static void DrawCubicBezier (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { + if (UnityEngine.Event.current.type != EventType.Repaint) return; + Handles.DrawBezier(p0, p3, p1, p2, Handles.color, Texture2D.whiteTexture, 2f); // const float dotSize = 0.01f; // Quaternion q = Quaternion.identity; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineInspectorUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineInspectorUtility.cs index 566da0fbb..c1e4dcf3f 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineInspectorUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineInspectorUtility.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineMaskUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineMaskUtilities.cs index 64b2d59f6..80ddec995 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineMaskUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineMaskUtilities.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #pragma warning disable 0219 @@ -176,7 +176,7 @@ namespace Spine.Unity.Editor { Material[] currentMaterials = meshRenderer.sharedMaterials; if (currentMaterials.Length == 0 || currentMaterials[0] == null) { - Debug.LogWarning("No materials found assigned at " + skeleton.name); + // Note: if no attachments are visible, no materials are set. This is a valid state. return false; } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs index 951bc35c2..316cda832 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -848,7 +848,7 @@ namespace Spine.Unity.Editor { keys.Add(new Keyframe(0, rotation, 0, 0)); - int listIndex = 1; + int listIndex = 0; float r = rotation; @@ -865,7 +865,7 @@ namespace Spine.Unity.Editor { animation.Apply(skeleton, 0, currentTime, true, null, 1f, MixBlend.Setup, MixDirection.In); skeleton.UpdateWorldTransform(); - int pIndex = listIndex - 1; + int pIndex = listIndex; Keyframe pk = keys[pIndex]; @@ -919,16 +919,16 @@ namespace Spine.Unity.Editor { xKeys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[1] + boneData.X, 0, 0)); yKeys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[2] + boneData.Y, 0, 0)); - int listIndex = 1; - int frameIndex = 1; + int listIndex = 0; + int frameIndex = 0; int f = TranslateTimeline.ENTRIES; float[] frames = timeline.Frames; skeleton.SetToSetupPose(); float lastTime = 0; while (currentTime < endTime) { - int pIndex = listIndex - 1; + int pIndex = listIndex; - float curveType = timeline.GetCurveType(frameIndex - 1); + float curveType = timeline.GetCurveType(frameIndex); if (curveType == 0) { //linear Keyframe px = xKeys[pIndex]; @@ -999,8 +999,8 @@ namespace Spine.Unity.Editor { timeline.Apply(skeleton, lastTime, currentTime, null, 1, MixBlend.Setup, MixDirection.In); - px = xKeys[listIndex - 1]; - py = yKeys[listIndex - 1]; + px = xKeys[listIndex]; + py = yKeys[listIndex]; float xOut = (bone.X - px.value) / (currentTime - px.time); float yOut = (bone.Y - py.value) / (currentTime - py.time); @@ -1011,8 +1011,8 @@ namespace Spine.Unity.Editor { xKeys.Add(new Keyframe(currentTime, bone.X, xOut, 0)); yKeys.Add(new Keyframe(currentTime, bone.Y, yOut, 0)); - xKeys[listIndex - 1] = px; - yKeys[listIndex - 1] = py; + xKeys[listIndex] = px; + yKeys[listIndex] = py; listIndex++; lastTime = currentTime; @@ -1055,16 +1055,16 @@ namespace Spine.Unity.Editor { List keys = new List(); keys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[1] + boneDataOffset, 0, 0)); - int listIndex = 1; - int frameIndex = 1; + int listIndex = 0; + int frameIndex = 0; int f = TranslateXTimeline.ENTRIES; float[] frames = timeline.Frames; skeleton.SetToSetupPose(); float lastTime = 0; while (currentTime < endTime) { - int pIndex = listIndex - 1; + int pIndex = listIndex; - float curveType = timeline.GetCurveType(frameIndex - 1); + float curveType = timeline.GetCurveType(frameIndex); if (curveType == 0) { //linear Keyframe p = keys[pIndex]; @@ -1112,13 +1112,13 @@ namespace Spine.Unity.Editor { timeline.Apply(skeleton, lastTime, currentTime, null, 1, MixBlend.Setup, MixDirection.In); - p = keys[listIndex - 1]; + p = keys[listIndex]; float boneOffset = isXTimeline ? bone.X : bone.Y; float valueOut = (boneOffset - p.value) / (currentTime - p.time); p.outTangent = valueOut; keys.Add(new Keyframe(currentTime, boneOffset, valueOut, 0)); - keys[listIndex - 1] = p; + keys[listIndex] = p; listIndex++; lastTime = currentTime; @@ -1155,15 +1155,15 @@ namespace Spine.Unity.Editor { xKeys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[1] * boneData.ScaleX, 0, 0)); yKeys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[2] * boneData.ScaleY, 0, 0)); - int listIndex = 1; - int frameIndex = 1; + int listIndex = 0; + int frameIndex = 0; int f = ScaleTimeline.ENTRIES; float[] frames = timeline.Frames; skeleton.SetToSetupPose(); float lastTime = 0; while (currentTime < endTime) { - int pIndex = listIndex - 1; - float curveType = timeline.GetCurveType(frameIndex - 1); + int pIndex = listIndex; + float curveType = timeline.GetCurveType(frameIndex); if (curveType == 0) { //linear Keyframe px = xKeys[pIndex]; @@ -1234,8 +1234,8 @@ namespace Spine.Unity.Editor { timeline.Apply(skeleton, lastTime, currentTime, null, 1, MixBlend.Setup, MixDirection.In); - px = xKeys[listIndex - 1]; - py = yKeys[listIndex - 1]; + px = xKeys[listIndex]; + py = yKeys[listIndex]; float xOut = (bone.ScaleX - px.value) / (currentTime - px.time); float yOut = (bone.ScaleY - py.value) / (currentTime - py.time); @@ -1246,8 +1246,8 @@ namespace Spine.Unity.Editor { xKeys.Add(new Keyframe(currentTime, bone.ScaleX, xOut, 0)); yKeys.Add(new Keyframe(currentTime, bone.ScaleY, yOut, 0)); - xKeys[listIndex - 1] = px; - yKeys[listIndex - 1] = py; + xKeys[listIndex] = px; + yKeys[listIndex] = py; listIndex++; lastTime = currentTime; @@ -1286,15 +1286,15 @@ namespace Spine.Unity.Editor { List keys = new List(); keys.Add(new Keyframe(timeline.Frames[0], timeline.Frames[1] * boneDataOffset, 0, 0)); - int listIndex = 1; - int frameIndex = 1; + int listIndex = 0; + int frameIndex = 0; int f = ScaleXTimeline.ENTRIES; float[] frames = timeline.Frames; skeleton.SetToSetupPose(); float lastTime = 0; while (currentTime < endTime) { - int pIndex = listIndex - 1; - float curveType = timeline.GetCurveType(frameIndex - 1); + int pIndex = listIndex; + float curveType = timeline.GetCurveType(frameIndex); if (curveType == 0) { //linear Keyframe p = keys[pIndex]; @@ -1340,14 +1340,14 @@ namespace Spine.Unity.Editor { timeline.Apply(skeleton, lastTime, currentTime, null, 1, MixBlend.Setup, MixDirection.In); - p = keys[listIndex - 1]; + p = keys[listIndex]; float boneScale = isXTimeline ? bone.ScaleX : bone.ScaleY; float valueOut = (boneScale - p.value) / (currentTime - p.time); p.outTangent = valueOut; keys.Add(new Keyframe(currentTime, boneScale, valueOut, 0)); - keys[listIndex - 1] = p; + keys[listIndex] = p; listIndex++; lastTime = currentTime; @@ -1382,16 +1382,16 @@ namespace Spine.Unity.Editor { keys.Add(new Keyframe(timeline.Frames[0], rotation, 0, 0)); - int listIndex = 1; - int frameIndex = 1; + int listIndex = 0; + int frameIndex = 0; int f = 2; float[] frames = timeline.Frames; skeleton.SetToSetupPose(); float lastTime = 0; float angle = rotation; while (currentTime < endTime) { - int pIndex = listIndex - 1; - float curveType = timeline.GetCurveType(frameIndex - 1); + int pIndex = listIndex; + float curveType = timeline.GetCurveType(frameIndex); if (curveType == 0) { //linear @@ -1464,7 +1464,7 @@ namespace Spine.Unity.Editor { timeline.Apply(skeleton, lastTime, currentTime, null, 1, MixBlend.Setup, MixDirection.In); skeleton.UpdateWorldTransform(); - pk = keys[listIndex - 1]; + pk = keys[listIndex]; rotation = bone.Rotation; angle += Mathf.DeltaAngle(angle, rotation); @@ -1476,7 +1476,7 @@ namespace Spine.Unity.Editor { keys.Add(new Keyframe(currentTime, r, rOut, 0)); - keys[listIndex - 1] = pk; + keys[listIndex] = pk; listIndex++; lastTime = currentTime; @@ -1582,10 +1582,7 @@ namespace Spine.Unity.Editor { } } - float currentTime = timeline.Frames[0]; - float endTime = frames[frames.Length - 1]; - int f = 0; - while (currentTime < endTime) { + for (int f = 0, frameCount = frames.Length; f < frameCount; ++f) { float time = frames[f]; int frameIndex = Search(frames, time); @@ -1602,9 +1599,6 @@ namespace Spine.Unity.Editor { } } } - - currentTime = time; - f += 1; } foreach (KeyValuePair pair in curveTable) { diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBakingWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBakingWindow.cs index ddaf9a9bc..9d85f2302 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBakingWindow.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBakingWindow.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonDebugWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonDebugWindow.cs index 95404f7c9..309db484b 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonDebugWindow.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonDebugWindow.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // With contributions from: Mitch Thompson diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpinePreferences.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpinePreferences.cs index 7c9f83b21..5299618a9 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpinePreferences.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpinePreferences.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2017_2_OR_NEWER @@ -182,6 +182,9 @@ namespace Spine.Unity.Editor { public bool mecanimEventIncludeFolderName = DEFAULT_MECANIM_EVENT_INCLUDE_FOLDERNAME; // Timeline extension module + public const bool DEFAULT_TIMELINE_DEFAULT_MIX_DURATION = false; + public bool timelineDefaultMixDuration = DEFAULT_TIMELINE_DEFAULT_MIX_DURATION; + public const bool DEFAULT_TIMELINE_USE_BLEND_DURATION = true; public bool timelineUseBlendDuration = DEFAULT_TIMELINE_USE_BLEND_DURATION; @@ -369,6 +372,7 @@ namespace Spine.Unity.Editor { GUILayout.Space(20); EditorGUILayout.LabelField("Timeline Extension", EditorStyles.boldLabel); { + EditorGUILayout.PropertyField(settings.FindProperty("timelineDefaultMixDuration"), new GUIContent("Default Mix Duration", "When enabled, the clip uses the default mix duration by default, as specified at the SkeletonDataAsset.")); EditorGUILayout.PropertyField(settings.FindProperty("timelineUseBlendDuration"), new GUIContent("Use Blend Duration", "When enabled, MixDuration will be synced with timeline clip transition duration 'Ease In Duration'.")); } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpriteAtlasImportWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpriteAtlasImportWindow.cs index 936c74879..9f30b14be 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpriteAtlasImportWindow.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SpriteAtlasImportWindow.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonPartsRendererInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonPartsRendererInspector.cs index fc86fc699..4712cca00 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonPartsRendererInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonPartsRendererInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Editor; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs index 121031713..4366f040a 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AnimationReferenceAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AnimationReferenceAsset.cs index 9564f3bb0..880bcdbf2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AnimationReferenceAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AnimationReferenceAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #define AUTOINIT_SPINEREFERENCE diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AtlasAssetBase.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AtlasAssetBase.cs index e7abeec72..59b5bf5b6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AtlasAssetBase.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AtlasAssetBase.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,10 +23,12 @@ * (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. + * (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. *****************************************************************************/ +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + using System.Collections.Generic; using UnityEngine; @@ -39,5 +41,38 @@ namespace Spine.Unity { public abstract bool IsLoaded { get; } public abstract void Clear (); public abstract Atlas GetAtlas (bool onlyMetaData = false); + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + public enum LoadingMode { + Normal = 0, + OnDemand + } + public virtual LoadingMode TextureLoadingMode { + get { return textureLoadingMode; } + set { textureLoadingMode = value; } + } + public OnDemandTextureLoader OnDemandTextureLoader { + get { return onDemandTextureLoader; } + set { onDemandTextureLoader = value; } + } + + public virtual void BeginCustomTextureLoading () { + if (onDemandTextureLoader) + onDemandTextureLoader.BeginCustomTextureLoading(); + } + + public virtual void EndCustomTextureLoading () { + if (onDemandTextureLoader) + onDemandTextureLoader.EndCustomTextureLoading(); + } + + public virtual void RequireTexturesLoaded (Material material, ref Material overrideMaterial) { + if (onDemandTextureLoader) + onDemandTextureLoader.RequestLoadMaterialTextures(material, ref overrideMaterial); + } + + [SerializeField] protected LoadingMode textureLoadingMode = LoadingMode.Normal; + [SerializeField] protected OnDemandTextureLoader onDemandTextureLoader = null; +#endif } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterials.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterials.cs index f7f52b5a1..8ecf4d1da 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterials.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterials.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/EventDataReferenceAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/EventDataReferenceAsset.cs index 9de56b7ba..f8eb0e4a6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/EventDataReferenceAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/EventDataReferenceAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #define AUTOINIT_SPINEREFERENCE diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs new file mode 100644 index 000000000..16de1b725 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs @@ -0,0 +1,90 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + +using System.Collections.Generic; +using UnityEngine; + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING +namespace Spine.Unity { + public abstract class OnDemandTextureLoader : ScriptableObject { + public AtlasAssetBase atlasAsset; + + /// Original texture name without extension. + /// The placeholder texture's name for a given original target texture name. + public abstract string GetPlaceholderTextureName (string originalTextureName); + /// + /// Assigns previously setup placeholder textures at each Material of the associated AtlasAssetBase. + /// True on success, false if the placeholder texture could not be assigned at any of the + /// AtlasAssetBase's materials. + public abstract bool AssignPlaceholderTextures (out IEnumerable modifiedMaterials); + /// + /// Returns whether any placeholder textures are assigned at the Material of the associated AtlasAssetBase. + /// + /// A newly created list of materials which has a placeholder texture assigned. + /// True, if any placeholder texture is assigned at a Material of the associated AtlasAssetBase. + public abstract bool HasPlaceholderTexturesAssigned (out List placeholderMaterials); + /// + /// Assigns previously setup target textures at each Material where placeholder textures are setup. + /// True on success, false if the target texture could not be assigned at any of the + /// AtlasAssetBase's materials. + public abstract bool AssignTargetTextures (out IEnumerable modifiedMaterials); + public abstract void BeginCustomTextureLoading (); + public abstract void EndCustomTextureLoading (); + public abstract bool HasPlaceholderAssigned (Material material); + public abstract void RequestLoadMaterialTextures (Material material, ref Material overrideMaterial); + public abstract void Clear (bool clearAtlasAsset = false); + + #region Event delegates + public delegate void TextureLoadDelegate (OnDemandTextureLoader loader, Material material, int textureIndex); + protected event TextureLoadDelegate onTextureLoaded; + protected event TextureLoadDelegate onTextureUnloaded; + + public event TextureLoadDelegate TextureLoaded { + add { onTextureLoaded += value; } + remove { onTextureLoaded -= value; } + } + public event TextureLoadDelegate TextureUnloaded { + add { onTextureUnloaded += value; } + remove { onTextureUnloaded -= value; } + } + + protected void OnTextureLoaded (Material material, int textureIndex) { + if (onTextureLoaded != null) + onTextureLoaded(this, material, textureIndex); + } + protected void OnTextureUnloaded (Material material, int textureIndex) { + if (onTextureUnloaded != null) + onTextureUnloaded(this, material, textureIndex); + } + #endregion + } +} +#endif diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs.meta new file mode 100644 index 000000000..f22c0cb75 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/OnDemandTextureLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57d54a357da79654aad505112bb63b9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/RegionlessAttachmentLoader.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/RegionlessAttachmentLoader.cs index 6537c5be6..05e1ec044 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/RegionlessAttachmentLoader.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/RegionlessAttachmentLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs index e155ddd93..dfdad9838 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs index 138366db8..1898dae4a 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs index 6d001f9cb..59de8ebe8 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineAtlasAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineAtlasAsset.cs index 5c0885a4a..4206ed57d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineAtlasAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineAtlasAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; @@ -263,7 +263,10 @@ namespace Spine.Unity { Debug.LogError("Material is missing texture: " + other.name, other); return; } - if (other.mainTexture.name == name) { + string textureName = other.mainTexture.name; + if (textureName == name || + (atlasAsset.OnDemandTextureLoader != null && + textureName == atlasAsset.OnDemandTextureLoader.GetPlaceholderTextureName(name))) { material = other; break; } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineSpriteAtlasAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineSpriteAtlasAsset.cs index a889d30c2..981210f66 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineSpriteAtlasAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SpineSpriteAtlasAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_2_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs new file mode 100644 index 000000000..da4d8b7a8 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs @@ -0,0 +1,192 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; + +namespace Spine.Unity { + + /// + /// Experimental Editor Skeleton Player component enabling Editor playback of the + /// selected animation outside of Play mode for SkeletonAnimation and SkeletonGraphic. + /// + [ExecuteInEditMode] + [AddComponentMenu("Spine/EditorSkeletonPlayer")] + [RequireComponent(typeof(ISkeletonAnimation))] + public class EditorSkeletonPlayer : MonoBehaviour { + public bool playWhenSelected = true; + public bool playWhenDeselected = true; + public float fixedTrackTime = 0.0f; + private IEditorSkeletonWrapper skeletonWrapper; + private TrackEntry trackEntry; + private string oldAnimationName; + private bool oldLoop; + private double oldTime; + + [DidReloadScripts] + private static void OnReloaded () { + // Force start when scripts are reloaded + EditorSkeletonPlayer[] editorSpineAnimations = FindObjectsOfType(); + + foreach (EditorSkeletonPlayer editorSpineAnimation in editorSpineAnimations) + editorSpineAnimation.Start(); + } + + private void Reset () { + // Note: when a skeleton has a varying number of active materials, + // we're moving this component first in the hierarchy to still be + // able to disable this component. + for (int i = 0; i < 10; ++i) + UnityEditorInternal.ComponentUtility.MoveComponentUp(this); + } + + private void Start () { + if (Application.isPlaying) return; + + if (skeletonWrapper == null) { + SkeletonAnimation skeletonAnimation; + SkeletonGraphic skeletonGraphic; + if (skeletonAnimation = this.GetComponent()) + skeletonWrapper = new SkeletonAnimationWrapper(skeletonAnimation); + else if (skeletonGraphic = this.GetComponent()) + skeletonWrapper = new SkeletonGraphicWrapper(skeletonGraphic); + } + + oldTime = EditorApplication.timeSinceStartup; + EditorApplication.update += EditorUpdate; + } + + private void OnDestroy () { + EditorApplication.update -= EditorUpdate; + } + + private void Update () { + if (enabled == false || Application.isPlaying) return; + if (skeletonWrapper == null) return; + if (skeletonWrapper.State == null || skeletonWrapper.State.Tracks.Count == 0) return; + + TrackEntry currentEntry = skeletonWrapper.State.Tracks.Items[0]; + if (currentEntry != null && fixedTrackTime != 0) { + currentEntry.TrackTime = fixedTrackTime; + } + } + + private void EditorUpdate () { + if (enabled == false || Application.isPlaying) return; + if (skeletonWrapper == null) return; + if (skeletonWrapper.State == null) return; + bool isSelected = Selection.Contains(this.gameObject); + if (!this.playWhenSelected && isSelected) return; + if (!this.playWhenDeselected && !isSelected) return; + if (fixedTrackTime != 0) return; + + // Update animation + if (oldAnimationName != skeletonWrapper.AnimationName || oldLoop != skeletonWrapper.Loop) { + SkeletonData skeletonData = skeletonWrapper.SkeletonData; + Spine.Animation animation = (skeletonData == null || skeletonWrapper.AnimationName == null) ? + null : skeletonData.FindAnimation(skeletonWrapper.AnimationName); + if (animation != null) + trackEntry = skeletonWrapper.State.SetAnimation(0, skeletonWrapper.AnimationName, skeletonWrapper.Loop); + else + trackEntry = skeletonWrapper.State.SetEmptyAnimation(0, 0); + oldAnimationName = skeletonWrapper.AnimationName; + oldLoop = skeletonWrapper.Loop; + } + + // Update speed + if (trackEntry != null) + trackEntry.TimeScale = skeletonWrapper.Speed; + + float deltaTime = (float)(EditorApplication.timeSinceStartup - oldTime); + skeletonWrapper.Update(deltaTime); + oldTime = EditorApplication.timeSinceStartup; + + // Force repaint to update animation smoothly +#if UNITY_2017_2_OR_NEWER + EditorApplication.QueuePlayerLoopUpdate(); +#else + SceneView.RepaintAll(); +#endif + } + + private class SkeletonAnimationWrapper : IEditorSkeletonWrapper { + private SkeletonAnimation skeletonAnimation; + + public SkeletonAnimationWrapper (SkeletonAnimation skeletonAnimation) { + this.skeletonAnimation = skeletonAnimation; + } + + public Spine.SkeletonData SkeletonData { + get { + if (!skeletonAnimation.SkeletonDataAsset) return null; + return skeletonAnimation.SkeletonDataAsset.GetSkeletonData(true); + } + } + + public string AnimationName { get { return skeletonAnimation.AnimationName; } } + public bool Loop { get { return skeletonAnimation.loop; } } + public float Speed { get { return skeletonAnimation.timeScale; } } + public Spine.AnimationState State { get { return skeletonAnimation.state; } } + + public void Update (float deltaTime) { + skeletonAnimation.Update(deltaTime); + } + } + + private class SkeletonGraphicWrapper : IEditorSkeletonWrapper { + private SkeletonGraphic skeletonGraphic; + + public SkeletonGraphicWrapper (SkeletonGraphic skeletonGraphic) { + this.skeletonGraphic = skeletonGraphic; + } + + public Spine.SkeletonData SkeletonData { get { return skeletonGraphic.SkeletonData; } } + public string AnimationName { get { return skeletonGraphic.startingAnimation; } } + public bool Loop { get { return skeletonGraphic.startingLoop; } } + public float Speed { get { return skeletonGraphic.timeScale; } } + public Spine.AnimationState State { get { return skeletonGraphic.AnimationState; } } + + public void Update (float deltaTime) { + skeletonGraphic.Update(deltaTime); + } + } + + private interface IEditorSkeletonWrapper { + string AnimationName { get; } + Spine.SkeletonData SkeletonData { get; } + bool Loop { get; } + float Speed { get; } + Spine.AnimationState State { get; } + void Update (float deltaTime); + } + } +} +#endif diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs.meta new file mode 100644 index 000000000..acdcc3044 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/EditorSkeletonPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b473abb659158442b906826a22f18bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollower.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollower.cs index f9589855c..fc16a15db 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollower.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollower.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollowerGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollowerGraphic.cs index d2d0404ce..8735e0fc1 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollowerGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoneFollowerGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -139,9 +139,7 @@ namespace Spine.Unity { RectTransform thisTransform = this.transform as RectTransform; if (thisTransform == null) return; - Canvas canvas = skeletonGraphic.canvas; - if (canvas == null) canvas = skeletonGraphic.GetComponentInParent(); - float scale = canvas != null ? canvas.referencePixelsPerUnit : 100.0f; + float scale = skeletonGraphic.MeshScale; float additionalFlipScale = 1; if (skeletonTransformIsParent) { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollower.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollower.cs index 542d0b43b..7e5bc6210 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollower.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollower.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollowerGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollowerGraphic.cs index 886bbd942..dcc46b3ea 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollowerGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/BoundingBoxFollowerGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -125,10 +125,7 @@ namespace Spine.Unity { int requiredCollidersCount = 0; PolygonCollider2D[] colliders = GetComponents(); if (this.gameObject.activeInHierarchy) { - Canvas canvas = skeletonGraphic.canvas; - if (canvas == null) canvas = skeletonGraphic.GetComponentInParent(); - float scale = canvas != null ? canvas.referencePixelsPerUnit : 100.0f; - + float scale = skeletonGraphic.MeshScale; foreach (Skin skin in skeleton.Data.Skins) AddCollidersForSkin(skin, slotIndex, colliders, scale, ref requiredCollidersCount); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/PointFollower.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/PointFollower.cs index 7667f3100..7f3473775 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/PointFollower.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Following/PointFollower.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs index 6bd62bae5..f371995c6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; @@ -43,5 +43,15 @@ namespace Spine.Unity { protected override void OnPopulateMesh (VertexHelper vh) { vh.Clear(); } + + protected override void OnDisable () { + base.OnDisable(); + this.canvasRenderer.cull = true; + } + + protected override void OnEnable () { + base.OnEnable(); + this.canvasRenderer.cull = false; + } } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonMecanimRootMotion.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonMecanimRootMotion.cs index ac51d112f..4dbc7d2f1 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonMecanimRootMotion.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonMecanimRootMotion.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AnimationTools; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotion.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotion.cs index f51a1b67d..6bc6c0b60 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotion.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotion.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AnimationTools; @@ -54,7 +54,7 @@ namespace Spine.Unity { #endregion AnimationState animationState; - Canvas canvas; + SkeletonGraphic skeletonGraphic; public override Vector2 GetRemainingRootMotion (int trackIndex) { TrackEntry track = animationState.GetCurrent(trackIndex); @@ -79,7 +79,7 @@ namespace Spine.Unity { protected override float AdditionalScale { get { - return canvas ? canvas.referencePixelsPerUnit : 1.0f; + return skeletonGraphic ? skeletonGraphic.MeshScale : 1.0f; } } @@ -93,9 +93,7 @@ namespace Spine.Unity { IAnimationStateComponent animstateComponent = skeletonComponent as IAnimationStateComponent; this.animationState = (animstateComponent != null) ? animstateComponent.AnimationState : null; - if (this.GetComponent() != null) { - canvas = this.GetComponentInParent(); - } + skeletonGraphic = this.GetComponent(); } protected override Vector2 CalculateAnimationsMovementDelta () { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotionBase.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotionBase.cs index c810116d9..f9a00ecfc 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotionBase.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/RootMotion/SkeletonRootMotionBase.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.AnimationTools; @@ -198,11 +198,11 @@ namespace Spine.Unity { } Vector2 rigidbodyDisplacement2D = new Vector2(rigidbodyDisplacement.x, rigidbodyDisplacement.y); - rigidBody2D.MovePosition(gravityAndVelocityMovement + new Vector2(transform.position.x, transform.position.y) + rigidBody2D.MovePosition(gravityAndVelocityMovement + new Vector2(rigidBody2D.position.x, rigidBody2D.position.y) + rigidbodyDisplacement2D + additionalRigidbody2DMovement); rigidBody2D.MoveRotation(rigidbody2DRotation + rigidBody2D.rotation); } else if (rigidBody != null) { - rigidBody.MovePosition(transform.position + rigidBody.MovePosition(rigidBody.position + new Vector3(rigidbodyDisplacement.x, rigidbodyDisplacement.y, rigidbodyDisplacement.z)); rigidBody.MoveRotation(rigidBody.rotation * rigidbodyLocalRotation); } @@ -483,7 +483,6 @@ namespace Spine.Unity { int GetConstraintLastPosIndex (int constraintIndex) { ExposedList constraints = skeletonComponent.Skeleton.TransformConstraints; - TransformConstraint targetConstraint = constraints.Items[constraintIndex]; return transformConstraintIndices.FindIndex(addedIndex => addedIndex == constraintIndex); } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs index 144285421..29c280661 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -253,6 +253,10 @@ namespace Spine.Unity { else state.ApplyEventTimelinesOnly(skeleton, issueEvents: true); + AfterAnimationApplied(); + } + + public void AfterAnimationApplied () { if (_UpdateLocal != null) _UpdateLocal(this); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs index db3f12930..d8e0cf2dc 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -67,7 +67,30 @@ namespace Spine.Unity { public bool startingLoop; public float timeScale = 1f; public bool freeze; + protected float meshScale = 1f; + public float MeshScale { get { return meshScale; } } + public enum LayoutMode { + None = 0, + WidthControlsHeight, + HeightControlsWidth, + FitInParent, + EnvelopeParent + } + public LayoutMode layoutScaleMode = LayoutMode.None; + [SerializeField] protected Vector2 referenceSize = Vector2.one; + [SerializeField] protected float referenceScale = 1f; +#if UNITY_EDITOR + protected LayoutMode previousLayoutScaleMode = LayoutMode.None; + [SerializeField] protected Vector2 rectTransformSize = Vector2.zero; + [SerializeField] protected bool editReferenceRect = false; + protected bool previousEditReferenceRect = false; + + public bool EditReferenceRect { get { return editReferenceRect; } set { editReferenceRect = value; } } + public Vector2 RectTransformSize { get { return rectTransformSize; } } +#else + protected const bool EditReferenceRect = false; +#endif /// Update mode to optionally limit updates to e.g. only apply animations but not update the mesh. public UpdateMode UpdateMode { get { return updateMode; } set { updateMode = value; } } protected UpdateMode updateMode = UpdateMode.FullUpdate; @@ -93,8 +116,10 @@ namespace Spine.Unity { [SerializeField] protected List separatorParts = new List(); public List SeparatorParts { get { return separatorParts; } } public bool updateSeparatorPartLocation = true; + public bool updateSeparatorPartScale = false; private bool wasUpdatedAfterInit = true; + private bool requiresInstructionUpate = true; private Texture baseTexture = null; #if UNITY_EDITOR @@ -256,7 +281,6 @@ namespace Spine.Unity { } protected override void Awake () { - base.Awake(); this.onCullStateChanged.AddListener(OnCullStateChanged); @@ -271,8 +295,12 @@ namespace Spine.Unity { } #endif Initialize(false); - Rebuild(CanvasUpdate.PreRender); + if (this.IsValid) Rebuild(CanvasUpdate.PreRender); } + +#if UNITY_EDITOR + InitLayoutScaleParameters(); +#endif } protected override void OnDestroy () { @@ -282,8 +310,12 @@ namespace Spine.Unity { public override void Rebuild (CanvasUpdate update) { base.Rebuild(update); + if (!this.IsValid) return; if (canvasRenderer.cull) return; - if (update == CanvasUpdate.PreRender) UpdateMeshToInstructions(); + if (update == CanvasUpdate.PreRender) { + if (requiresInstructionUpate) PrepareInstructionsAndRenderers(isInRebuild: true); + UpdateMeshToInstructions(); + } if (allowMultipleCanvasRenderers) canvasRenderer.Clear(); } @@ -296,6 +328,7 @@ namespace Spine.Unity { public virtual void Update () { #if UNITY_EDITOR + UpdateReferenceRectSizes(); if (!Application.isPlaying) { Update(0f); return; @@ -316,7 +349,6 @@ namespace Spine.Unity { wasUpdatedAfterInit = true; if (updateMode < UpdateMode.OnlyAnimationStatus) return; - UpdateAnimationStatus(deltaTime); if (updateMode == UpdateMode.OnlyAnimationStatus) { @@ -358,6 +390,10 @@ namespace Spine.Unity { else state.ApplyEventTimelinesOnly(skeleton, issueEvents: true); + AfterAnimationApplied(); + } + + public void AfterAnimationApplied () { if (UpdateLocal != null) UpdateLocal(this); @@ -373,14 +409,14 @@ namespace Spine.Unity { } public void LateUpdate () { + if (!this.IsValid) return; // instantiation can happen from Update() after this component, leading to a missing Update() call. if (!wasUpdatedAfterInit) Update(0); if (freeze) return; if (updateMode != UpdateMode.FullUpdate) return; PrepareInstructionsAndRenderers(); - if (OnInstructionsPrepared != null) - OnInstructionsPrepared(this.currentInstructions); + SetVerticesDirty(); // triggers Rebuild and avoids potential double-update in a single frame } @@ -427,9 +463,11 @@ namespace Spine.Unity { public Skeleton Skeleton { get { Initialize(false); + requiresInstructionUpate = true; return skeleton; } set { + requiresInstructionUpate = true; skeleton = value; } } @@ -547,15 +585,37 @@ namespace Spine.Unity { 0.5f - (center.y / size.y) ); - this.rectTransform.sizeDelta = size; + SetRectTransformSize(this, size); this.rectTransform.pivot = p; + foreach (Transform separatorPart in separatorParts) { + RectTransform separatorTransform = separatorPart.GetComponent(); + if (separatorTransform) { + SetRectTransformSize(separatorTransform, size); + separatorTransform.pivot = p; + } + } foreach (SkeletonSubmeshGraphic submeshGraphic in submeshGraphics) { - submeshGraphic.rectTransform.sizeDelta = size; + SetRectTransformSize(submeshGraphic, size); submeshGraphic.rectTransform.pivot = p; } } + public static void SetRectTransformSize (Graphic target, Vector2 size) { + SetRectTransformSize(target.rectTransform, size); + } + + public static void SetRectTransformSize (RectTransform targetRectTransform, Vector2 size) { + Vector2 parentSize = Vector2.zero; + if (targetRectTransform.parent != null) { + RectTransform parentTransform = targetRectTransform.parent.GetComponent(); + if (parentTransform) + parentSize = parentTransform.rect.size; + } + Vector2 anchorAreaSize = Vector2.Scale(targetRectTransform.anchorMax - targetRectTransform.anchorMin, parentSize); + targetRectTransform.sizeDelta = size - anchorAreaSize; + } + /// OnAnimationRebuild is raised after the SkeletonAnimation component is successfully initialized. public event ISkeletonAnimationDelegate OnAnimationRebuild; public event UpdateBonesDelegate BeforeApply; @@ -654,11 +714,12 @@ namespace Spine.Unity { OnAnimationRebuild(this); } - public void PrepareInstructionsAndRenderers () { + public void PrepareInstructionsAndRenderers (bool isInRebuild = false) { + requiresInstructionUpate = false; if (!this.allowMultipleCanvasRenderers) { MeshGenerator.GenerateSingleSubmeshInstruction(currentInstructions, skeleton, null); if (canvasRenderers.Count > 0) - DisableUnusedCanvasRenderers(usedCount: 0); + DisableUnusedCanvasRenderers(usedCount: 0, isInRebuild: isInRebuild); usedRenderersCount = 0; } else { MeshGenerator.GenerateSkeletonRendererInstruction(currentInstructions, skeleton, null, @@ -671,8 +732,10 @@ namespace Spine.Unity { EnsureMeshesCount(submeshCount); EnsureUsedTexturesAndMaterialsCount(submeshCount); EnsureSeparatorPartCount(); - PrepareRendererGameObjects(currentInstructions); + PrepareRendererGameObjects(currentInstructions, isInRebuild); } + if (OnInstructionsPrepared != null) + OnInstructionsPrepared(this.currentInstructions); } public void UpdateMesh () { @@ -731,7 +794,13 @@ namespace Spine.Unity { meshGenerator.BuildMeshWithArrays(currentInstructions, updateTriangles); } - if (canvas != null) meshGenerator.ScaleVertexData(canvas.referencePixelsPerUnit); + meshScale = (canvas == null) ? 100 : canvas.referencePixelsPerUnit; + if (layoutScaleMode != LayoutMode.None) { + meshScale *= referenceScale; + if (!EditReferenceRect) + meshScale *= GetLayoutScale(layoutScaleMode); + } + meshGenerator.ScaleVertexData(meshScale); if (OnPostProcessVertices != null) OnPostProcessVertices.Invoke(this.meshGenerator.Buffers); Mesh mesh = smartMesh.mesh; @@ -773,6 +842,11 @@ namespace Spine.Unity { SubmeshInstruction submeshInstructionItem = currentInstructions.submeshInstructions.Items[i]; Material submeshMaterial = submeshInstructionItem.material; if (useOriginalTextureAndMaterial) { + if (submeshMaterial == null) { + usedMaterialItems[i] = null; + usedTextureItems[i] = null; + continue; + } usedTextureItems[i] = submeshMaterial.mainTexture; if (!hasBlendModeMaterials) { usedMaterialItems[i] = this.materialForRendering; @@ -803,9 +877,12 @@ namespace Spine.Unity { } protected void UpdateMeshMultipleCanvasRenderers (SkeletonRendererInstruction currentInstructions) { - Canvas c = canvas; - float scale = (c == null) ? 100 : c.referencePixelsPerUnit; - + meshScale = (canvas == null) ? 100 : canvas.referencePixelsPerUnit; + if (layoutScaleMode != LayoutMode.None) { + meshScale *= referenceScale; + if (!EditReferenceRect) + meshScale *= GetLayoutScale(layoutScaleMode); + } // Generate meshes. int submeshCount = currentInstructions.submeshInstructions.Count; Mesh[] meshesItems = meshes.Items; @@ -826,7 +903,7 @@ namespace Spine.Unity { meshGenerator.AddSubmesh(submeshInstructionItem); Mesh targetMesh = meshesItems[i]; - meshGenerator.ScaleVertexData(scale); + meshGenerator.ScaleVertexData(meshScale); if (OnPostProcessVertices != null) OnPostProcessVertices.Invoke(this.meshGenerator.Buffers); meshGenerator.FillVertexData(targetMesh); meshGenerator.FillTriangles(targetMesh); @@ -877,30 +954,58 @@ namespace Spine.Unity { } } - protected void PrepareRendererGameObjects (SkeletonRendererInstruction currentInstructions) { - int submeshCount = currentInstructions.submeshInstructions.Count; - DisableUnusedCanvasRenderers(usedCount: submeshCount); + protected void PrepareRendererGameObjects (SkeletonRendererInstruction currentInstructions, + bool isInRebuild = false) { - int separatorSlotGroupIndex = 0; - int targetSiblingIndex = 0; - Transform parent = this.separatorSlots.Count == 0 ? this.transform : this.separatorParts[0]; + int submeshCount = currentInstructions.submeshInstructions.Count; + DisableUnusedCanvasRenderers(usedCount: submeshCount, isInRebuild: isInRebuild); + + Transform parent = this.separatorParts.Count == 0 ? this.transform : this.separatorParts[0]; if (updateSeparatorPartLocation) { for (int p = 0; p < this.separatorParts.Count; ++p) { - separatorParts[p].position = this.transform.position; - separatorParts[p].rotation = this.transform.rotation; + Transform separatorPart = separatorParts[p]; + if (separatorPart == null) continue; + separatorPart.position = this.transform.position; + separatorPart.rotation = this.transform.rotation; + } + } + if (updateSeparatorPartScale) { + Vector3 targetScale = this.transform.lossyScale; + for (int p = 0; p < this.separatorParts.Count; ++p) { + Transform separatorPart = separatorParts[p]; + if (separatorPart == null) continue; + Transform partParent = separatorPart.parent; + Vector3 parentScale = partParent == null ? Vector3.one : partParent.lossyScale; + separatorPart.localScale = new Vector3( + parentScale.x == 0f ? 1f : targetScale.x / parentScale.x, + parentScale.y == 0f ? 1f : targetScale.y / parentScale.y, + parentScale.z == 0f ? 1f : targetScale.z / parentScale.z); } } + int separatorSlotGroupIndex = 0; + int targetSiblingIndex = 0; for (int i = 0; i < submeshCount; i++) { CanvasRenderer canvasRenderer = canvasRenderers[i]; - if (i >= usedRenderersCount) { - canvasRenderer.gameObject.SetActive(true); + if (canvasRenderer != null) { + if (i >= usedRenderersCount) + canvasRenderer.gameObject.SetActive(true); + + if (canvasRenderer.transform.parent != parent.transform && !isInRebuild) + canvasRenderer.transform.SetParent(parent.transform, false); + + canvasRenderer.transform.SetSiblingIndex(targetSiblingIndex++); } - if (canvasRenderer.transform.parent != parent.transform) { - canvasRenderer.transform.SetParent(parent.transform, false); - canvasRenderer.transform.localPosition = Vector3.zero; + + SkeletonSubmeshGraphic submeshGraphic = submeshGraphics[i]; + if (submeshGraphic != null) { + RectTransform dstTransform = submeshGraphic.rectTransform; + dstTransform.localPosition = Vector3.zero; + dstTransform.pivot = rectTransform.pivot; + dstTransform.anchorMin = Vector2.zero; + dstTransform.anchorMax = Vector2.one; + dstTransform.sizeDelta = Vector2.zero; } - canvasRenderer.transform.SetSiblingIndex(targetSiblingIndex++); SubmeshInstruction submeshInstructionItem = currentInstructions.submeshInstructions.Items[i]; if (submeshInstructionItem.forceSeparate) { @@ -911,13 +1016,14 @@ namespace Spine.Unity { usedRenderersCount = submeshCount; } - protected void DisableUnusedCanvasRenderers (int usedCount) { + protected void DisableUnusedCanvasRenderers (int usedCount, bool isInRebuild = false) { #if UNITY_EDITOR RemoveNullCanvasRenderers(); #endif for (int i = usedCount; i < canvasRenderers.Count; i++) { canvasRenderers[i].Clear(); - canvasRenderers[i].gameObject.SetActive(false); + if (!isInRebuild) // rebuild does not allow disabling Graphic and thus removing it from rebuild list. + canvasRenderers[i].gameObject.SetActive(false); } } @@ -927,6 +1033,7 @@ namespace Spine.Unity { for (int i = canvasRenderers.Count - 1; i >= 0; --i) { if (canvasRenderers[i] == null) { canvasRenderers.RemoveAt(i); + submeshGraphics.RemoveAt(i); } } } @@ -994,7 +1101,14 @@ namespace Spine.Unity { for (int i = currentCount; i < targetCount; ++i) { GameObject go = new GameObject(string.Format("{0}[{1}]", SeparatorPartGameObjectName, i), typeof(RectTransform)); go.transform.SetParent(this.transform, false); - go.transform.localPosition = Vector3.zero; + + RectTransform dstTransform = go.transform.GetComponent(); + dstTransform.localPosition = Vector3.zero; + dstTransform.pivot = rectTransform.pivot; + dstTransform.anchorMin = Vector2.zero; + dstTransform.anchorMax = Vector2.one; + dstTransform.sizeDelta = Vector2.zero; + separatorParts.Add(go.transform); } } @@ -1027,6 +1141,87 @@ namespace Spine.Unity { } } } + + protected void InitLayoutScaleParameters () { + previousLayoutScaleMode = layoutScaleMode; + } + + protected void UpdateReferenceRectSizes () { + if (rectTransformSize == Vector2.zero) + rectTransformSize = GetCurrentRectSize(); + + HandleChangedEditReferenceRect(); + + if (layoutScaleMode != previousLayoutScaleMode) { + if (layoutScaleMode != LayoutMode.None) { + SetRectTransformSize(this, rectTransformSize); + } else { + rectTransformSize = referenceSize / referenceScale; + referenceScale = 1f; + SetRectTransformSize(this, rectTransformSize); + } + } + if (editReferenceRect || layoutScaleMode == LayoutMode.None) { + referenceSize = GetCurrentRectSize(); + } + previousLayoutScaleMode = layoutScaleMode; + } + + protected void HandleChangedEditReferenceRect () { + if (editReferenceRect == previousEditReferenceRect) return; + previousEditReferenceRect = editReferenceRect; + + if (editReferenceRect) { + rectTransformSize = GetCurrentRectSize(); + ResetRectToReferenceRectSize(); + } else { + SetRectTransformSize(this, rectTransformSize); + } + } + + public void ResetRectToReferenceRectSize () { + referenceScale = referenceScale * GetLayoutScale(previousLayoutScaleMode); + float referenceAspect = referenceSize.x / referenceSize.y; + Vector2 newSize = GetCurrentRectSize(); + + LayoutMode mode = previousLayoutScaleMode; + float frameAspect = newSize.x / newSize.y; + if (mode == LayoutMode.FitInParent) + mode = frameAspect > referenceAspect ? LayoutMode.HeightControlsWidth : LayoutMode.WidthControlsHeight; + else if (mode == LayoutMode.EnvelopeParent) + mode = frameAspect > referenceAspect ? LayoutMode.WidthControlsHeight : LayoutMode.HeightControlsWidth; + + if (mode == LayoutMode.WidthControlsHeight) + newSize.y = newSize.x / referenceAspect; + else if (mode == LayoutMode.HeightControlsWidth) + newSize.x = newSize.y * referenceAspect; + SetRectTransformSize(this, newSize); + } + + public Vector2 GetReferenceRectSize () { + return referenceSize * GetLayoutScale(layoutScaleMode); + } #endif + + protected float GetLayoutScale (LayoutMode mode) { + Vector2 currentSize = GetCurrentRectSize(); + float referenceAspect = referenceSize.x / referenceSize.y; + float frameAspect = currentSize.x / currentSize.y; + if (mode == LayoutMode.FitInParent) + mode = frameAspect > referenceAspect ? LayoutMode.HeightControlsWidth : LayoutMode.WidthControlsHeight; + else if (mode == LayoutMode.EnvelopeParent) + mode = frameAspect > referenceAspect ? LayoutMode.WidthControlsHeight : LayoutMode.HeightControlsWidth; + + if (mode == LayoutMode.WidthControlsHeight) { + return currentSize.x / referenceSize.x; + } else if (mode == LayoutMode.HeightControlsWidth) { + return currentSize.y / referenceSize.y; + } + return 1f; + } + + private Vector2 GetCurrentRectSize () { + return this.rectTransform.rect.size; + } } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs index 1824fff40..8e694feec 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs index 7df180d9a..c0174ed80 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs index 3cb55f0b7..627647599 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,13 +23,18 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER #define NEW_PREFAB_SYSTEM #endif + +#if UNITY_2018_1_OR_NEWER +#define HAS_PROPERTY_BLOCK_QUERY +#endif + #define SPINE_OPTIONAL_RENDEROVERRIDE using System.Collections.Generic; @@ -207,7 +212,12 @@ namespace Spine.Unity { int rendererCount = partsRenderers.Count; if (rendererCount <= 0) return; - if (copyPropertyBlock) +#if HAS_PROPERTY_BLOCK_QUERY + bool assignPropertyBlock = this.copyPropertyBlock && mainMeshRenderer.HasPropertyBlock(); +#else + bool assignPropertyBlock = this.copyPropertyBlock; +#endif + if (assignPropertyBlock) mainMeshRenderer.GetPropertyBlock(copiedBlock); MeshGenerator.Settings settings = new MeshGenerator.Settings { @@ -234,9 +244,8 @@ namespace Spine.Unity { MeshGenerator meshGenerator = currentRenderer.MeshGenerator; meshGenerator.settings = settings; - if (copyPropertyBlock) + if (assignPropertyBlock) currentRenderer.SetPropertyBlock(copiedBlock); - // Render currentRenderer.RenderParts(instruction.submeshInstructions, start, si + 1); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index 87e3c9c8c..ebdcb7e58 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -49,6 +49,7 @@ #define SPINE_OPTIONAL_RENDEROVERRIDE #define SPINE_OPTIONAL_MATERIALOVERRIDE +#define SPINE_OPTIONAL_ON_DEMAND_LOADING using System.Collections.Generic; using UnityEngine; @@ -565,6 +566,10 @@ namespace Spine.Unity { AssignSpriteMaskMaterials(); } #endif +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + if (Application.isPlaying) + HandleOnDemandLoading(); +#endif #if PER_MATERIAL_PROPERTY_BLOCKS if (fixDrawOrder && meshRenderer.sharedMaterials.Length > 2) { @@ -743,6 +748,23 @@ namespace Spine.Unity { #endif //#if BUILT_IN_SPRITE_MASK_COMPONENT +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + void HandleOnDemandLoading () { + foreach (AtlasAssetBase atlasAsset in skeletonDataAsset.atlasAssets) { + if (atlasAsset.TextureLoadingMode != AtlasAssetBase.LoadingMode.Normal) { + atlasAsset.BeginCustomTextureLoading(); + for (int i = 0, count = meshRenderer.sharedMaterials.Length; i < count; ++i) { + Material overrideMaterial = null; + atlasAsset.RequireTexturesLoaded(meshRenderer.sharedMaterials[i], ref overrideMaterial); + if (overrideMaterial != null) + meshRenderer.sharedMaterials[i] = overrideMaterial; + } + atlasAsset.EndCustomTextureLoading(); + } + } + } +#endif + #if PER_MATERIAL_PROPERTY_BLOCKS private MaterialPropertyBlock reusedPropertyBlock; public static readonly int SUBMESH_DUMMY_PARAM_ID = Shader.PropertyToID("_Submesh"); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonGraphicCustomMaterials.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonGraphicCustomMaterials.cs index 25749dece..8aa6ba513 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonGraphicCustomMaterials.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonGraphicCustomMaterials.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonRendererCustomMaterials.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonRendererCustomMaterials.cs index 45c003fdc..a154b8def 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonRendererCustomMaterials.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRendererCustomMaterials/SkeletonRendererCustomMaterials.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/ActivateBasedOnFlipDirection.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/ActivateBasedOnFlipDirection.cs index bd5486096..4682a0389 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/ActivateBasedOnFlipDirection.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/ActivateBasedOnFlipDirection.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody.cs index 3790b7e3a..9a2e267c5 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody2D.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody2D.cs index 4531ca1a8..6942df4af 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody2D.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowLocationRigidbody2D.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowSkeletonUtilityRootRotation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowSkeletonUtilityRootRotation.cs index f47dc8f91..53c430621 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowSkeletonUtilityRootRotation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/FollowSkeletonUtilityRootRotation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs index fa4b7d0d2..20471e0a0 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER @@ -157,14 +157,13 @@ namespace Spine.Unity { } } - if (canvas != null) { - positionScale = canvas.referencePixelsPerUnit; + if (skeletonGraphic != null) { + positionScale = skeletonGraphic.MeshScale; } } [HideInInspector] public SkeletonRenderer skeletonRenderer; [HideInInspector] public SkeletonGraphic skeletonGraphic; - private Canvas canvas; [System.NonSerialized] public ISkeletonAnimation skeletonAnimation; private ISkeletonComponent skeletonComponent; @@ -233,11 +232,6 @@ namespace Spine.Unity { } else if (skeletonGraphic != null) { skeletonGraphic.OnRebuild -= HandleRendererReset; skeletonGraphic.OnRebuild += HandleRendererReset; - canvas = skeletonGraphic.canvas; - if (canvas == null) - canvas = skeletonGraphic.GetComponentInParent(); - if (canvas == null) - positionScale = 100.0f; } if (skeletonAnimation != null) { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs index 0df421ca7..7ee1aaa9d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityConstraint.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityConstraint.cs index 90f1d1fb9..93e5266b8 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityConstraint.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityConstraint.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs index 89a25c854..67ecf8393 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine.Unity { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/DoubleBuffered.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/DoubleBuffered.cs index 058f12277..c7bd405c7 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/DoubleBuffered.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/DoubleBuffered.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine.Unity { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs index a58ebea2b..d5c260523 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2019_3_OR_NEWER @@ -813,8 +813,8 @@ namespace Spine.Unity { b2.x *= alpha; b2.y = slot.Data.BlendMode == BlendMode.Additive ? 0 : alpha; } - int meshVertexCount = meshAttachment.WorldVerticesLength; - for (int iii = 0; iii < meshVertexCount; iii += 2) { + int verticesArrayLength = meshAttachment.WorldVerticesLength; + for (int iii = 0; iii < verticesArrayLength; iii += 2) { uv2i[vi] = rg; uv3i[vi] = b2; vi++; @@ -886,8 +886,8 @@ namespace Spine.Unity { } else { //if (settings.renderMeshes) { MeshAttachment meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { - int meshVertexCount = meshAttachment.WorldVerticesLength; - if (tempVerts.Length < meshVertexCount) this.tempVerts = tempVerts = new float[meshVertexCount]; + int verticesArrayLength = meshAttachment.WorldVerticesLength; + if (tempVerts.Length < verticesArrayLength) this.tempVerts = tempVerts = new float[verticesArrayLength]; meshAttachment.ComputeWorldVertices(slot, tempVerts); if (settings.pmaVertexColors) { @@ -917,7 +917,7 @@ namespace Spine.Unity { if (fy > bmax.y) bmax.y = fy; } - for (int iii = 0; iii < meshVertexCount; iii += 2) { + for (int iii = 0; iii < verticesArrayLength; iii += 2) { float x = tempVerts[iii], y = tempVerts[iii + 1]; vbi[vertexIndex].x = x; vbi[vertexIndex].y = y; vbi[vertexIndex].z = z; cbi[vertexIndex] = color; ubi[vertexIndex].x = attachmentUVs[iii]; ubi[vertexIndex].y = attachmentUVs[iii + 1]; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshRendererBuffers.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshRendererBuffers.cs index 688913ef2..e17e582d5 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshRendererBuffers.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshRendererBuffers.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Not for optimization. Do not disable. diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SkeletonRendererInstruction.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SkeletonRendererInstruction.cs index 1b75e3841..0f8876d42 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SkeletonRendererInstruction.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SkeletonRendererInstruction.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Not for optimization. Do not disable. diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs index 954f21178..0b36a289f 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ // Not for optimization. Do not disable. diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs index 22ba89243..165e62328 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if SPINE_TK2D diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc index 33a7e5862..72693c15c 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc @@ -65,6 +65,10 @@ struct appdata { float3 normal : NORMAL; half4 color : COLOR; float2 uv0 : TEXCOORD0; +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif UNITY_VERTEX_INPUT_INSTANCE_ID }; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc index f969648de..06797cfc7 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc @@ -134,12 +134,18 @@ inline half3 calculateNormalFromBumpMap(float2 texUV, half3 tangentWorld, half3 // inline fixed4 prepareLitPixelForOutput(fixed4 finalPixel, fixed textureAlpha, fixed colorAlpha) : SV_Target { +#if defined(_TINT_BLACK_ON) + const bool applyPMA = false; +#else + const bool applyPMA = true; +#endif + #if defined(_ALPHABLEND_ON) //Normal Alpha - finalPixel.rgb *= finalPixel.a; + if (applyPMA) finalPixel.rgb *= finalPixel.a; #elif defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) //PMA vertex, straight texture - finalPixel.rgb *= textureAlpha; + if (applyPMA) finalPixel.rgb *= textureAlpha; #elif defined(_ALPHAPREMULTIPLY_ON) //Pre multiplied alpha, both vertex and texture // texture and vertex colors are premultiplied already @@ -153,10 +159,10 @@ inline fixed4 prepareLitPixelForOutput(fixed4 finalPixel, fixed textureAlpha, fi #elif defined(_ADDITIVEBLEND) //Additive finalPixel *= 2.0f; - finalPixel.rgb *= colorAlpha; + if (applyPMA) finalPixel.rgb *= colorAlpha; #elif defined(_ADDITIVEBLEND_SOFT) //Additive soft - finalPixel.rgb *= finalPixel.a; + if (applyPMA) finalPixel.rgb *= finalPixel.a; #else //Opaque finalPixel.a = 1; @@ -166,7 +172,11 @@ inline fixed4 prepareLitPixelForOutput(fixed4 finalPixel, fixed textureAlpha, fi inline fixed4 calculateLitPixel(fixed4 texureColor, fixed4 color, fixed3 lighting) : SV_Target { +#if !defined(_TINT_BLACK_ON) fixed4 finalPixel = texureColor * color * fixed4(lighting, 1); +#else + fixed4 finalPixel = texureColor * fixed4(lighting, 1); +#endif finalPixel = prepareLitPixelForOutput(finalPixel, texureColor.a, color.a); return finalPixel; } @@ -253,6 +263,8 @@ uniform fixed _Cutoff; // Additive Slot blend mode // return unlit textureColor, alpha clip textureColor.a only // +// [Deprecated] RETURN_UNLIT_IF_ADDITIVE_SLOT macro will be removed in future versions. +// Use RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT instead. #if defined(_ALPHAPREMULTIPLY_ON) && !defined(_LIGHT_AFFECTS_ADDITIVE) #define RETURN_UNLIT_IF_ADDITIVE_SLOT(textureColor, vertexColor) \ if (vertexColor.a == 0 && (vertexColor.r || vertexColor.g || vertexColor.b)) {\ @@ -269,12 +281,34 @@ uniform fixed _Cutoff; #define RETURN_UNLIT_IF_ADDITIVE_SLOT(textureColor, vertexColor) #endif +// Replacement for deprecated RETURN_UNLIT_IF_ADDITIVE_SLOT macro. +#if (defined(_ALPHAPREMULTIPLY_ON) || defined(_ALPHAPREMULTIPLY_VERTEX_ONLY)) && !defined(_LIGHT_AFFECTS_ADDITIVE) + #if defined(_TINT_BLACK_ON) + #define TINTED_RESULT_PIXEL(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA) fragTintedColor(texureColor, darkVertexColor, vertexColor, lightColorA, darkColorA) + #elif defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) + #define TINTED_RESULT_PIXEL(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA) (texureColor * texureColor.a * vertexColor) + #else + #define TINTED_RESULT_PIXEL(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA) (texureColor * vertexColor) + #endif + + #define RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA) \ + if (vertexColor.a == 0 && (vertexColor.r || vertexColor.g || vertexColor.b)) {\ + ALPHA_CLIP(texureColor, fixed4(1, 1, 1, 1))\ + return TINTED_RESULT_PIXEL(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA);\ + } +#else + #define RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(textureColor, vertexColor, darkVertexColor, lightColorA, darkColorA) +#endif + //////////////////////////////////////// // Color functions // #if !defined(USE_LWRP) && !defined(USE_URP) uniform fixed4 _Color; + #if defined(_TINT_BLACK_ON) + uniform fixed4 _Black; + #endif #endif inline fixed4 calculateVertexColor(fixed4 color) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc index 292f48fc6..54a10257e 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc @@ -26,7 +26,12 @@ struct VertexInput #if defined(_NORMALMAP) float4 tangent : TANGENT; #endif // _NORMALMAP +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif UNITY_VERTEX_INPUT_INSTANCE_ID + }; //////////////////////////////////////// diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc index 945e86f08..6df24dd3d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc @@ -5,6 +5,12 @@ #include "SpriteLighting.cginc" #include "SpriteSpecular.cginc" #include "AutoLight.cginc" +#if defined(_ALPHAPREMULTIPLY_ON) + #undef _STRAIGHT_ALPHA_INPUT +#else + #define _STRAIGHT_ALPHA_INPUT +#endif +#include "../../CGIncludes/Spine-Skeleton-Tint-Common.cginc" //////////////////////////////////////// // Defines @@ -19,11 +25,13 @@ #define _LIGHT_COORD_INDEX_0 6 #define _LIGHT_COORD_INDEX_1 7 #define _FOG_COORD_INDEX 8 + #define _DARKCOLOR_TEXCOORD_INDEX TEXCOORD9 #else #define _VERTEX_LIGHTING_INDEX TEXCOORD3 #define _LIGHT_COORD_INDEX_0 4 #define _LIGHT_COORD_INDEX_1 5 #define _FOG_COORD_INDEX 6 + #define _DARKCOLOR_TEXCOORD_INDEX TEXCOORD7 #endif // _NORMALMAP struct VertexOutput @@ -43,6 +51,10 @@ struct VertexOutput UNITY_FOG_COORDS(_FOG_COORD_INDEX) #endif // _FOG +#if defined(_TINT_BLACK_ON) + float3 darkColor : _DARKCOLOR_TEXCOORD_INDEX; +#endif + UNITY_VERTEX_OUTPUT_STEREO }; @@ -130,11 +142,14 @@ VertexOutput vert(VertexInput v) { VertexOutput output; - UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); output.pos = calculateLocalPos(v.vertex); output.color = calculateVertexColor(v.color); +#if defined(_TINT_BLACK_ON) + output.darkColor = GammaToTargetSpace(half3(v.tintBlackRG.r, v.tintBlackRG.g, v.tintBlackB.r)) + _Black.rgb; +#endif output.texcoord = calculateTextureCoord(v.texcoord); output.posWorld = calculateWorldPos(v.vertex); @@ -166,9 +181,13 @@ VertexOutput vert(VertexInput v) fixed4 fragBase(VertexOutput input) : SV_Target { fixed4 texureColor = calculateTexturePixel(input.texcoord); - RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP + RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(texureColor, input.color, input.darkColor, _Color.a, _Black.a) // shall be called before ALPHA_CLIP ALPHA_CLIP(texureColor, input.color) +#if defined(_TINT_BLACK_ON) + texureColor = fragTintedColor(texureColor, input.darkColor, input.color, _Color.a, _Black.a); +#endif + //Get normal direction fixed3 normalWorld = calculateNormalWorld(input); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc index 60b37bbaa..bac63aa5c 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc @@ -2,6 +2,12 @@ #define SPRITE_UNLIT_INCLUDED #include "ShaderShared.cginc" +#if defined(_ALPHAPREMULTIPLY_ON) + #undef _STRAIGHT_ALPHA_INPUT +#else + #define _STRAIGHT_ALPHA_INPUT +#endif +#include "../../CGIncludes/Spine-Skeleton-Tint-Common.cginc" //////////////////////////////////////// // Vertex structs @@ -12,6 +18,10 @@ struct VertexInput float4 vertex : POSITION; float4 texcoord : TEXCOORD0; fixed4 color : COLOR; +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -24,6 +34,10 @@ struct VertexOutput UNITY_FOG_COORDS(1) #endif // _FOG +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD2; +#endif + UNITY_VERTEX_OUTPUT_STEREO }; @@ -41,6 +55,9 @@ VertexOutput vert(VertexInput input) output.pos = calculateLocalPos(input.vertex); output.texcoord = calculateTextureCoord(input.texcoord); output.color = calculateVertexColor(input.color); +#if defined(_TINT_BLACK_ON) + output.darkColor = GammaToTargetSpace(half3(input.tintBlackRG.r, input.tintBlackRG.g, input.tintBlackB.r)) + _Black.rgb; +#endif #if defined(_FOG) UNITY_TRANSFER_FOG(output,output.pos); @@ -55,8 +72,13 @@ VertexOutput vert(VertexInput input) fixed4 frag(VertexOutput input) : SV_Target { fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); - RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP + RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(texureColor, input.color, input.darkColor, _Color.a, _Black.a) // shall be called before ALPHA_CLIP ALPHA_CLIP(texureColor, input.color) + +#if defined(_TINT_BLACK_ON) + texureColor = fragTintedColor(texureColor, input.darkColor, input.color, _Color.a, _Black.a); +#endif + fixed4 pixel = calculatePixel(texureColor, input.color); COLORISE(pixel) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc index 0fc7ad49d..514ad729d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc @@ -4,6 +4,12 @@ #include "ShaderShared.cginc" #include "SpriteLighting.cginc" #include "SpriteSpecular.cginc" +#if defined(_ALPHAPREMULTIPLY_ON) + #undef _STRAIGHT_ALPHA_INPUT +#else + #define _STRAIGHT_ALPHA_INPUT +#endif +#include "../../CGIncludes/Spine-Skeleton-Tint-Common.cginc" //////////////////////////////////////// // Defines @@ -115,6 +121,10 @@ struct VertexOutput UNITY_FOG_COORDS(_FOG_COORD_INDEX) #endif // _FOG +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD9; +#endif + UNITY_VERTEX_OUTPUT_STEREO }; @@ -342,9 +352,12 @@ VertexOutput vert(VertexInput input) output.pos = calculateLocalPos(input.vertex); output.color = calculateVertexColor(input.color); +#if defined(_TINT_BLACK_ON) + output.darkColor = GammaToTargetSpace(half3(input.tintBlackRG.r, input.tintBlackRG.g, input.tintBlackB.r)) + _Black.rgb; +#endif output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); - float3 viewPos = UnityObjectToViewPos(input.vertex); //float3 viewPos = mul(UNITY_MATRIX_MV, input.vertex); // + float3 viewPos = UnityObjectToViewPos(input.vertex); #if defined(FIXED_NORMALS_BACKFACE_RENDERING) || defined(_RIM_LIGHTING) float4 powWorld = calculateWorldPos(input.vertex); #endif @@ -402,9 +415,13 @@ VertexOutput vert(VertexInput input) fixed4 frag(VertexOutput input) : SV_Target { fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); - RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP + RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(texureColor, input.color, input.darkColor, _Color.a, _Black.a) // shall be called before ALPHA_CLIP ALPHA_CLIP(texureColor, input.color) +#if defined(_TINT_BLACK_ON) + texureColor = fragTintedColor(texureColor, input.darkColor, input.color, _Color.a, _Black.a); +#endif + #if defined(PER_PIXEL_LIGHTING) #if defined(_NORMALMAP) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader index f14b96522..4b08004f2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader @@ -38,6 +38,8 @@ Shader "Spine/Sprite/Pixel Lit" _BlendAmount ("Blend", Range(0,1)) = 0.0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Black("Dark Color", Color) = (0,0,0,0) [HideInInspector] _SrcBlend ("__src", Float) = 1.0 [HideInInspector] _DstBlend ("__dst", Float) = 0.0 @@ -95,6 +97,7 @@ Shader "Spine/Sprite/Pixel Lit" #pragma shader_feature _SPHERICAL_HARMONICS #pragma shader_feature _FOG #pragma shader_feature _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON #pragma multi_compile_fwdbase #pragma fragmentoption ARB_precision_hint_fastest diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader index be99ed41d..32d27bdd4 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader @@ -20,6 +20,9 @@ Shader "Spine/Sprite/Unlit" _BlendTex ("Blend Texture", 2D) = "white" {} _BlendAmount ("Blend", Range(0,1)) = 0.0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Black("Dark Color", Color) = (0,0,0,0) + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 [HideInInspector] _DstBlend ("__dst", Float) = 0.0 [HideInInspector] _RenderQueue ("__queue", Float) = 0.0 @@ -66,6 +69,7 @@ Shader "Spine/Sprite/Unlit" #pragma shader_feature _TEXTURE_BLEND #pragma shader_feature _COLOR_ADJUST #pragma shader_feature _FOG + #pragma shader_feature _TINT_BLACK_ON #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader index 4ef1e3718..39b97f0a1 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader @@ -39,6 +39,8 @@ Shader "Spine/Sprite/Vertex Lit" _BlendAmount ("Blend", Range(0,1)) = 0.0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Black("Dark Color", Color) = (0,0,0,0) [HideInInspector] _SrcBlend ("__src", Float) = 1.0 [HideInInspector] _DstBlend ("__dst", Float) = 0.0 @@ -96,6 +98,7 @@ Shader "Spine/Sprite/Vertex Lit" #pragma shader_feature _SPHERICAL_HARMONICS #pragma shader_feature _FOG #pragma shader_feature _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonDataModifierAssets/BlendModeMaterials/BlendModeMaterialsAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonDataModifierAssets/BlendModeMaterials/BlendModeMaterialsAsset.cs index 76f1c155f..27448a9a7 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonDataModifierAssets/BlendModeMaterials/BlendModeMaterialsAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonDataModifierAssets/BlendModeMaterials/BlendModeMaterialsAsset.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SpineAttributes.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SpineAttributes.cs index 9b4f9f9c8..b56b71b32 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SpineAttributes.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SpineAttributes.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs index b55f9a4e3..7f38e3db1 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2019_3_OR_NEWER diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentCloneExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentCloneExtensions.cs index 477b2d522..ee597bdd0 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentCloneExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentCloneExtensions.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentRegionExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentRegionExtensions.cs index f44f9b305..08933b2c7 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentRegionExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AttachmentRegionExtensions.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/BuildUtilities.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/BuildUtilities.cs index 972bc359f..2d6b08833 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/BuildUtilities.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/BuildUtilities.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_EDITOR diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MaterialChecks.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MaterialChecks.cs index b8f68b9fe..59a03cbc9 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MaterialChecks.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MaterialChecks.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections.Generic; @@ -102,6 +102,10 @@ namespace Spine.Unity { + "a) disable 'CanvasGroup Compatible' at the Material or\n" + "b) enable 'Canvas Group Tint Black' at the SkeletonGraphic component under 'Advanced'.\n" + "You may want to duplicate the 'SkeletonGraphicTintBlack' material and change settings at the duplicate to not affect all instances."; + public static readonly string kCanvasGroupCompatiblePMAVertexMessage = + "\nWarning: 'CanvasGroup Compatible' is enabled at the Material and 'PMA Vertex Colors' is enabled at SkeletonGraphic!\n\nPlease\n" + + "a) disable 'CanvasGroup Compatible' at the Material or\n" + + "b) disable 'PMA Vertex Colors' at the SkeletonGraphic component under 'Advanced'."; public static bool IsMaterialSetupProblematic (SkeletonRenderer renderer, ref string errorMessage) { Material[] materials = renderer.GetComponent().sharedMaterials; @@ -162,6 +166,10 @@ namespace Spine.Unity { isProblematic = true; errorMessage += kCanvasGroupCompatibleDisabledMessage; } + if (settings.pmaVertexColors == true && IsCanvasGroupCompatible(material)) { + isProblematic = true; + errorMessage += kCanvasGroupCompatiblePMAVertexMessage; + } } return isProblematic; } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MathUtilities.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MathUtilities.cs index 4f1cfb44e..f4344c0c3 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MathUtilities.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/MathUtilities.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SettingsTriState.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SettingsTriState.cs index be5291ddb..111152f90 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SettingsTriState.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SettingsTriState.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ namespace Spine.Unity { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SkeletonExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SkeletonExtensions.cs index a67c7c0aa..fc5f6fa55 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SkeletonExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/SkeletonExtensions.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEngine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/TimelineExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/TimelineExtensions.cs index 6a93cbe91..3631b7272 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/TimelineExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/TimelineExtensions.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimation.cs index ddbea9e3c..5ff22d743 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimation.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationComplete.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationComplete.cs index b97c26a9e..dd002d201 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationComplete.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationComplete.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationEnd.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationEnd.cs index dff238649..396288fb5 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationEnd.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineAnimationEnd.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineEvent.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineEvent.cs index 076869362..013a0c444 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineEvent.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineEvent.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineTrackEntryEnd.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineTrackEntryEnd.cs index b405b68bb..9b292ac6a 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineTrackEntryEnd.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/YieldInstructions/WaitForSpineTrackEntryEnd.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 4651c68c8..ac358f72b 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.1.0", + "version": "4.1.25", "unity": "2018.3", "author": { "name": "Esoteric Software", diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation.meta new file mode 100644 index 000000000..b52354a72 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 189dc4f0c0a8a6141b2c0f4c95fba6bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md new file mode 100644 index 000000000..754ab83e6 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md @@ -0,0 +1,7 @@ +## Spine Addressables Extensions [Experimental] + +This experimental plugin provides integration of Addressables on-demand texture loading for the spine-unity runtime. Please be sure to test this package first and create backups of your project before using. + +### Usage + +First declare your target Material textures as addressable. Then select the SpineAtlasAsset, right-click the SpineAtlasAsset Inspector heading and select 'Add Addressables Loader'. This generates an 'AddressableTextureLoader' asset providing configuration parameters and sets up low-resolution placeholder textures which are automatically assigned in a pre-build step when building your game executable. diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md.meta new file mode 100644 index 000000000..fbe9930ae --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Documentation/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 40d839470102af5458205023f6984224 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor.meta new file mode 100644 index 000000000..4593c74ce --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c3739a10096f12488814c2027b2f5c1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs new file mode 100644 index 000000000..dcb3bf2a4 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs @@ -0,0 +1,94 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; + +namespace Spine.Unity.Editor { + + using GenericTextureLoader = GenericOnDemandTextureLoader; + using GenericTextureLoaderInspector = GenericOnDemandTextureLoaderInspector; + using PlaceholderMaterialMapping = AddressablesTextureLoader.PlaceholderMaterialMapping; + using PlaceholderTextureMapping = AddressablesTextureLoader.PlaceholderTextureMapping; + + [CustomEditor(typeof(AddressablesTextureLoader)), CanEditMultipleObjects] + public class AddressablesTextureLoaderInspector : GenericTextureLoaderInspector { + public string LoaderSuffix { get { return "_Addressable"; } } + + public class AddressablesMethodImplementations : StaticMethodImplementations { + public override GenericTextureLoader GetOrCreateLoader (string loaderPath) { + AddressablesTextureLoader loader = AssetDatabase.LoadAssetAtPath(loaderPath); + if (loader == null) { + loader = AddressablesTextureLoader.CreateInstance(); + AssetDatabase.CreateAsset(loader, loaderPath); + loader = AssetDatabase.LoadAssetAtPath(loaderPath); + } else { + loader.Clear(clearAtlasAsset: false); + } + return loader; + } + + public override bool SetupOnDemandLoadingReference ( + ref AddressableTextureReference targetTextureReference, Texture targetTexture) { + + string targetTextureGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(targetTexture)); + if (string.IsNullOrEmpty(targetTextureGUID)) + return false; + targetTextureReference.assetReference = new AssetReferenceTexture(targetTextureGUID); + return targetTextureReference.assetReference.IsValid(); + } + } + + #region Context Menu Item + [MenuItem("CONTEXT/AtlasAssetBase/Add Addressables Loader")] + static void AddAddressablesLoader (MenuCommand cmd) { + if (staticMethods == null) + staticMethods = new AddressablesMethodImplementations(); + staticMethods.AddOnDemandLoader(cmd); + } + #endregion + + protected override StaticMethodImplementations CreateStaticMethodImplementations () { + return new AddressablesMethodImplementations(); + } + + protected override void DrawSingleLineTargetTextureProperty (SerializedProperty property) { + EditorGUILayout.PropertyField(property.FindPropertyRelative("assetReference"), GUIContent.none, true); + } + } +} +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs.meta new file mode 100644 index 000000000..40cbe7aa9 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/AddressablesTextureLoaderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31994ef86a03628459a588131067023f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef new file mode 100644 index 000000000..e32007a87 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef @@ -0,0 +1,25 @@ +{ + "name": "spine-addressables-editor", + "rootNamespace": "", + "references": [ + "spine-unity", + "spine-unity-editor", + "spine-addressables", + "spine-on-demand-loading", + "spine-on-demand-loading-editor", + "Unity.Addressables", + "Unity.Addressables.Editor", + "Unity.ResourceManager" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef.meta new file mode 100644 index 000000000..09f1eb943 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Editor/spine-addressables-editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0743404dced125d4b8d86290e414812c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md b/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md new file mode 100644 index 000000000..4425c6122 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md @@ -0,0 +1,26 @@ +# Spine Runtimes License Agreement +Last updated July 28, 2023. Replaces all prior versions. + +Copyright (c) 2013-2023, 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. \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md.meta new file mode 100644 index 000000000..f3eea63f0 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3369e909ffdf92847a4b8d95b983a7ff +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime.meta new file mode 100644 index 000000000..5dc72ec5d --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 219b86dfc3643544e80d60785c29d034 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs new file mode 100644 index 000000000..be137bb4b --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs @@ -0,0 +1,96 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; + +namespace Spine.Unity { + + [System.Serializable] + public struct AddressableTextureReference : ITargetTextureReference { + [SerializeField] public AssetReferenceTexture assetReference; + +#if UNITY_EDITOR + public Texture EditorTexture { + get { + return (Texture)assetReference.editorAsset; + } + } +#endif + } + + public struct AddressableRequest : IOnDemandRequest { + public AsyncOperationHandle handle; + + public bool WasRequested { + get { return handle.IsValid(); } + } + + public bool WasSuccessfullyLoaded { + get { return handle.IsValid() && handle.Status == AsyncOperationStatus.Succeeded; } + } + + public bool IsTarget (Texture texture) { + return handle.Result == texture; + } + + public void Release () { + Addressables.Release(handle); + } + } + + [System.Serializable] + public class AddressablesTextureLoader : GenericOnDemandTextureLoader { + public override void CreateTextureRequest (AddressableTextureReference targetReference, + MaterialOnDemandData materialData, int textureIndex, Material materialToUpdate) { + + materialData.textureRequests[textureIndex].handle = targetReference.assetReference.LoadAssetAsync(); + materialData.textureRequests[textureIndex].handle.Completed += (obj) => { + if (obj.Status == AsyncOperationStatus.Succeeded) { + materialToUpdate.mainTexture = (Texture)targetReference.assetReference.Asset; + OnTextureLoaded(materialToUpdate, textureIndex); + } + }; + } + + public override Texture GetAlreadyLoadedTexture (int materialIndex, int textureIndex) { + AddressableTextureReference targetReference = placeholderMap[materialIndex].textures[textureIndex].targetTextureReference; + return (Texture)targetReference.assetReference.Asset; + } + } +} +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs.meta new file mode 100644 index 000000000..f217da02d --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/AddressablesTextureLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbdfbb13f312e5041973e2127739f846 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c33b04c403c19614395e83e691d3170a, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef new file mode 100644 index 000000000..b0a03f907 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef @@ -0,0 +1,20 @@ +{ + "name": "spine-addressables", + "rootNamespace": "", + "references": [ + "spine-unity", + "spine-csharp", + "spine-on-demand-loading", + "Unity.Addressables", + "Unity.ResourceManager" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef.meta new file mode 100644 index 000000000..b90aea4c3 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/Runtime/spine-addressables.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2261bc30a9ceb04ebbc867c3654e30e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json b/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json new file mode 100644 index 000000000..56662e150 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json @@ -0,0 +1,22 @@ +{ + "name": "com.esotericsoftware.spine.addressables", + "displayName": "Spine Addressables Extensions [Experimental]", + "description": "This experimental plugin provides integration of Addressables on-demand texture loading for the spine-unity runtime.\nPlease be sure to test this package first and create backups of your project before using.\n\nUsage: First declare your target Material textures as addressable. Then select the SpineAtlasAsset, right-click the SpineAtlasAsset Inspector heading and select 'Add Addressables Loader'. This generates an 'AddressableTextureLoader' asset providing configuration parameters and sets up low-resolution placeholder textures which are automatically assigned in a pre-build step when building your game executable.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", + "version": "4.1.0-preview.1", + "unity": "2018.3", + "author": { + "name": "Esoteric Software", + "email": "contact@esotericsoftware.com", + "url": "http://esotericsoftware.com/" + }, + "dependencies": { + "com.unity.addressables": "1.18.19", + "com.esotericsoftware.spine.spine-unity": "4.1.21", + "com.esotericsoftware.spine.on-demand-loading": "4.1.0" + }, + "keywords": [ + "spine", + "addressables", + "preview" + ] +} diff --git a/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json.meta new file mode 100644 index 000000000..f1bcbe1b3 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.addressables/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ece84be6a21fe8841a65fdc9d5038711 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/LICENSE.md b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/LICENSE.md index 61b10330d..4425c6122 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/LICENSE.md +++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/LICENSE.md @@ -1,26 +1,26 @@ # Spine Runtimes License Agreement -Last updated May 1, 2019. Replaces all prior versions. +Last updated July 28, 2023. Replaces all prior versions. -Copyright (c) 2013-2019, Esoteric Software LLC +Copyright (c) 2013-2023, 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, +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 +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. \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor.meta new file mode 100644 index 000000000..7f71f9a58 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7d10bf3e021d1845b6cb3ffcc0d4cb2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs new file mode 100644 index 000000000..9744617fc --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs @@ -0,0 +1,390 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#if UNITY_2017_2_OR_NEWER +#define NEWPLAYMODECALLBACKS +#endif + +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace Spine.Unity.Editor { + + /// + /// Base class for GenericOnDemandTextureLoader Inspector subclasses. + /// For reference, see the class available + /// in the com.esotericsoftware.spine.addressables UPM package. + /// + /// The implementation struct which holds an on-demand loading reference + /// to the target texture to be loaded, derived from ITargetTextureReference. + /// The implementation struct covering a single texture loading request, + /// derived from IOnDemandRequest + [InitializeOnLoad] + [CustomEditor(typeof(GenericOnDemandTextureLoader<,>)), CanEditMultipleObjects] + public abstract class GenericOnDemandTextureLoaderInspector : UnityEditor.Editor + where TargetReference : Spine.Unity.ITargetTextureReference + where TextureRequest : Spine.Unity.IOnDemandRequest { + + protected SerializedProperty atlasAsset; + protected SerializedProperty maxPlaceholderSize; + protected SerializedProperty placeholderMap; + protected SerializedProperty unloadAfterSecondsUnused; + static protected bool placeholdersFoldout = true; + protected SerializedProperty loadedDataAtMaterial; + protected GenericOnDemandTextureLoader loader; + protected GUIContent placeholderTexturesLabel; + + /// + /// Called via InitializeOnLoad attribute upon Editor startup or compilation. + /// + static GenericOnDemandTextureLoaderInspector () { +#if NEWPLAYMODECALLBACKS + EditorApplication.playModeStateChanged += OnPlaymodeChanged; +#else + EditorApplication.playmodeStateChanged += OnPlaymodeChanged; +#endif + } + + /// + /// Derive your implementation subclass of this class and implement the respective abstract methods. + /// Note: Unfortunately the Unity menu entries are created via static methods, so this is a workaround + /// to provide virtual static functions in old C# versions. + /// + public abstract class StaticMethodImplementations { + + public abstract GenericOnDemandTextureLoader GetOrCreateLoader (string loaderPath); + + /// + /// Returns the on-demand loader asset's filename suffix. The filename + /// is determined by the AtlasAsset, while this suffix replaces the "_Atlas" suffix. + /// When set to e.g. "_Addressable", the loader asset created for + /// the "Skeleton_Atlas" asset is named "Skeleton_Addressable". + /// + public string LoaderSuffix { get; } + + public abstract bool SetupOnDemandLoadingReference ( + ref TargetReference targetTextureReference, Texture targetTexture); + + /// + /// Create a context menu wrapper in the main class for this generic implementation using the code below. + /// + /// [MenuItem("CONTEXT/AtlasAssetBase/Add YourSubclass Loader")] + /// static void AddYourSubclassLoader (MenuCommand cmd) { + /// if (staticMethods == null) + /// staticMethods = new YourSubclassMethodImplementations (); + /// staticMethods.AddOnDemandLoader(cmd); + /// } + /// + /// + public virtual void AddOnDemandLoader (MenuCommand cmd) { + AtlasAssetBase atlasAsset = cmd.context as AtlasAssetBase; + Debug.Log("Adding On-Demand Loader for " + atlasAsset.name, atlasAsset); + + if (atlasAsset.OnDemandTextureLoader != null) { + Debug.LogWarning("AtlasAsset On-Demand TextureLoader is already set. " + + "Please clear it if you want to assign a different one."); + return; + } + + atlasAsset.TextureLoadingMode = AtlasAssetBase.LoadingMode.OnDemand; + EditorUtility.SetDirty(atlasAsset); + + string atlasAssetPath = AssetDatabase.GetAssetPath(atlasAsset); + string loaderPath = atlasAssetPath.Replace(AssetUtility.AtlasSuffix, LoaderSuffix); + + GenericOnDemandTextureLoader loader = staticMethods.GetOrCreateLoader(loaderPath); + staticMethods.SetupForAtlasAsset(loader, atlasAsset); + + EditorUtility.SetDirty(loader); + AssetDatabase.SaveAssets(); + } + + public virtual void SetupForAtlasAsset (GenericOnDemandTextureLoader loader, AtlasAssetBase atlasAsset) { + if (loader.placeholderMap != null && loader.placeholderMap.Length > 0) { + IEnumerable modifiedMaterials; + loader.AssignTargetTextures(out modifiedMaterials); // start from normal textures + } + + if (atlasAsset == null) { + Debug.LogError("AddressableTextureLoader.SetupForAtlasAsset: atlasAsset was null, aborting setup.", atlasAsset); + return; + } + + int materialCount = atlasAsset.MaterialCount; + loader.placeholderMap = new GenericOnDemandTextureLoader.PlaceholderMaterialMapping[materialCount]; + GenericOnDemandTextureLoader.PlaceholderMaterialMapping[] materialMap = loader.placeholderMap; + + atlasAsset.OnDemandTextureLoader = loader; + int maxPlaceholderSize = loader.maxPlaceholderSize; + + int i = 0; + foreach (Material targetMaterial in atlasAsset.Materials) { + Texture targetTexture = targetMaterial.mainTexture; + materialMap[i].textures = new GenericOnDemandTextureLoader.PlaceholderTextureMapping[1]; // Todo: currently only main texture is supported. + int textureIndex = 0; + + GenericOnDemandTextureLoader.PlaceholderTextureMapping[] texturesMap = materialMap[i].textures; + if (texturesMap[textureIndex].placeholderTexture != targetTexture) { // otherwise already set to placeholder + SetupOnDemandLoadingReference(ref texturesMap[textureIndex].targetTextureReference, targetTexture); + texturesMap[textureIndex].placeholderTexture = CreatePlaceholderTextureFor(targetTexture, maxPlaceholderSize, loader); + } + ++i; + } + // assign late since CreatePlaceholderTextureFor(texture) method above might save assets and clear these values. + loader.placeholderMap = materialMap; + loader.atlasAsset = atlasAsset; + } + + public virtual Texture CreatePlaceholderTextureFor (Texture originalTexture, int maxPlaceholderSize, + GenericOnDemandTextureLoader loader) { + + const string AssetFolderName = "LoadingPlaceholderAssets"; + string originalPath = AssetDatabase.GetAssetPath(originalTexture); + string parentFolder = System.IO.Path.GetDirectoryName(originalPath); + string dataPath = parentFolder + "/" + AssetFolderName; + if (!AssetDatabase.IsValidFolder(dataPath)) { + AssetDatabase.CreateFolder(parentFolder, AssetFolderName); + } + + string originalTextureName = System.IO.Path.GetFileNameWithoutExtension(originalPath); + string texturePath = string.Format("{0}/{1}.png", dataPath, loader.GetPlaceholderTextureName(originalTextureName)); + Texture placeholderTexture = AssetDatabase.LoadAssetAtPath(texturePath); + if (placeholderTexture == null) { + AssetDatabase.CopyAsset(originalPath, texturePath); + + const bool resizePhysically = true; + + TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(texturePath); + const string defaultPlatform = "Default"; + TextureImporterPlatformSettings settings = importer.GetPlatformTextureSettings(defaultPlatform); + settings.maxTextureSize = maxPlaceholderSize; + importer.SetPlatformTextureSettings(settings); + importer.maxTextureSize = maxPlaceholderSize; + importer.isReadable = resizePhysically; + importer.SaveAndReimport(); + + if (resizePhysically) { + Texture2D texture2D = AssetDatabase.LoadAssetAtPath(texturePath); + if (texture2D) { + Color[] maxTextureSizePixels = texture2D.GetPixels(); + texture2D.SetPixels(maxTextureSizePixels); + + var bytes = texture2D.EncodeToPNG(); + string targetPath = Application.dataPath + "/../" + texturePath; + System.IO.File.WriteAllBytes(targetPath, bytes); + texture2D.Apply(updateMipmaps: true, makeNoLongerReadable: true); + EditorUtility.SetDirty(texture2D); + AssetDatabase.SaveAssets(); + } + } + placeholderTexture = AssetDatabase.LoadAssetAtPath(texturePath); + } + + UnityEngine.Object folderObject = AssetDatabase.LoadAssetAtPath(dataPath, typeof(UnityEngine.Object)); + if (folderObject != null) { + EditorGUIUtility.PingObject(folderObject); + } + + return placeholderTexture; + } + } + public static StaticMethodImplementations staticMethods; + + void OnEnable () { + atlasAsset = serializedObject.FindProperty("atlasAsset"); + maxPlaceholderSize = serializedObject.FindProperty("maxPlaceholderSize"); + placeholderMap = serializedObject.FindProperty("placeholderMap"); + unloadAfterSecondsUnused = serializedObject.FindProperty("unloadAfterSecondsUnused"); + loadedDataAtMaterial = serializedObject.FindProperty("loadedDataAtMaterial"); + placeholderTexturesLabel = new GUIContent("Placeholder Textures"); + loader = (GenericOnDemandTextureLoader)target; + + if (staticMethods == null) + staticMethods = CreateStaticMethodImplementations(); + } + +#if NEWPLAYMODECALLBACKS + static void OnPlaymodeChanged (PlayModeStateChange mode) { + bool assignTargetTextures = mode == PlayModeStateChange.ExitingPlayMode; +#else + static void OnPlaymodeChanged () { + bool assignTargetTextures = !Application.isPlaying; +#endif + if (assignTargetTextures) { + AssignTargetTexturesAtAllLoaders(); + } + } + + public static void AssignTargetTexturesAtAllLoaders () { + + string[] loaderAssets = AssetDatabase.FindAssets("t:OnDemandTextureLoader"); + foreach (string loaderAsset in loaderAssets) { + string assetPath = AssetDatabase.GUIDToAssetPath(loaderAsset); + OnDemandTextureLoader loader = AssetDatabase.LoadAssetAtPath(assetPath); + AssignTargetTexturesAtLoader(loader); + } + } + + public static void AssignTargetTexturesAtLoader (OnDemandTextureLoader loader) { + List placeholderMaterials; + bool anyPlaceholdersAssigned = loader.HasPlaceholderTexturesAssigned(out placeholderMaterials); + if (anyPlaceholdersAssigned) { + Debug.Log("OnDemandTextureLoader detected placeholders assigned at one or more materials. Resetting to target textures.", loader); + AssetDatabase.StartAssetEditing(); + IEnumerable modifiedMaterials; + loader.AssignTargetTextures(out modifiedMaterials); + foreach (Material placeholderMaterial in placeholderMaterials) { + EditorUtility.SetDirty(placeholderMaterial); + } + AssetDatabase.StopAssetEditing(); + AssetDatabase.SaveAssets(); + } + } + + /// + /// Override this method in your implementation subclass as follows. + /// + /// protected override StaticMethodImplementations CreateStaticMethodImplementations () { + /// return new YourStaticMethodImplementationsSubclass(); + /// } + /// + /// + protected abstract StaticMethodImplementations CreateStaticMethodImplementations (); + + /// Draws a single texture mapping entry in the Inspector. + /// Can be overridden in subclasses where needed. Note that DrawSingleLineTargetTextureProperty + /// can be overridden as well instead of overriding this method. + /// Note that for the sake of space it should be drawn as a single line if possible. + /// + /// SerializedProperty pointing to a + /// PlaceholderTextureMapping object of the placeholderMap array. + protected virtual void DrawPlaceholderMapping (SerializedProperty textureMapping) { + EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight + 5)); + var placeholderTextureProp = textureMapping.FindPropertyRelative("placeholderTexture"); + var targetTextureProp = textureMapping.FindPropertyRelative("targetTextureReference"); + GUILayout.Space(16f); + EditorGUILayout.PropertyField(placeholderTextureProp, GUIContent.none); + EditorGUIUtility.labelWidth = 1; // workaround since GUIContent.none below seems to be ignored + + DrawSingleLineTargetTextureProperty(targetTextureProp); + EditorGUIUtility.labelWidth = 0; // change back to default + EditorGUILayout.EndHorizontal(); + } + + /// Draws a single texture mapping TargetReference in the Inspector. + /// Can be overridden in subclasses where needed. Note that this method is + /// called inside a horizontal Inspector line of a BeginHorizontal() / EndHorizontal() + /// pair, so it is limited to approximately half Inspector width. + /// + /// SerializedProperty pointing to a + /// TargetReference object of the PlaceholderTextureMapping entry. + protected virtual void DrawSingleLineTargetTextureProperty (SerializedProperty property) { + EditorGUILayout.PropertyField(property, GUIContent.none, true); + } + + public override void OnInspectorGUI () { + if (serializedObject.isEditingMultipleObjects) { + DrawDefaultInspector(); + return; + } + + serializedObject.Update(); + + EditorGUILayout.PropertyField(atlasAsset); + EditorGUILayout.PropertyField(maxPlaceholderSize); + EditorGUILayout.PropertyField(unloadAfterSecondsUnused); + + placeholdersFoldout = EditorGUILayout.Foldout(placeholdersFoldout, placeholderTexturesLabel, true); + if (placeholdersFoldout) { + for (int m = 0, materialCount = placeholderMap.arraySize; m < materialCount; ++m) { + // line below equals: PlaceholderTextureMapping[] materialTextures = placeholderMap[m].textures; + SerializedProperty materialTextures = placeholderMap.GetArrayElementAtIndex(m).FindPropertyRelative("textures"); + + for (int t = 0, textureCount = materialTextures.arraySize; t < textureCount; ++t) { + // line below equals: PlaceholderTextureMapping textureMapping = materialTextures[t]; + SerializedProperty textureMapping = materialTextures.GetArrayElementAtIndex(t); + DrawPlaceholderMapping(textureMapping); + } + } + } + + if (GUILayout.Button(new GUIContent("Regenerate", "Re-initialize the placeholder texture maps."), EditorStyles.miniButton, GUILayout.Width(160f))) + ReinitPlaceholderTextures(loader); + + GUILayout.Space(16f); + EditorGUILayout.LabelField("Testing", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(GUILayout.Height(EditorGUIUtility.singleLineHeight + 5)); + if (GUILayout.Button(new GUIContent("Assign Placeholders", "Assign placeholder textures (for testing)."), EditorStyles.miniButton, GUILayout.Width(160f))) + AssignPlaceholderTextures(loader); + if (GUILayout.Button(new GUIContent("Assign Normal Textures", "Re-assign target textures."), EditorStyles.miniButton, GUILayout.Width(160f))) + AssignTargetTextures(loader); + EditorGUILayout.EndHorizontal(); + + if (!Application.isPlaying) + serializedObject.ApplyModifiedProperties(); + } + + public void DeletePlaceholderTextures (GenericOnDemandTextureLoader loader) { + foreach (var materialMap in loader.placeholderMap) { + Texture texture = materialMap.textures[0].placeholderTexture; + if (texture) + AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(texture)); + } + loader.Clear(clearAtlasAsset: false); + AssetDatabase.SaveAssets(); + } + + public void ReinitPlaceholderTextures (GenericOnDemandTextureLoader loader) { + AssignTargetTextures(loader); + DeletePlaceholderTextures(loader); + staticMethods.SetupForAtlasAsset(loader, loader.atlasAsset); + EditorUtility.SetDirty(loader); + AssetDatabase.SaveAssets(); + } + + public bool AssignPlaceholderTextures (GenericOnDemandTextureLoader loader) { + // re-setup placeholders to ensure the mapping is up to date. + staticMethods.SetupForAtlasAsset(loader, loader.atlasAsset); + IEnumerable modifiedMaterials; + return loader.AssignPlaceholderTextures(out modifiedMaterials); + } + + public bool AssignTargetTextures (GenericOnDemandTextureLoader loader) { + IEnumerable modifiedMaterials; + return loader.AssignTargetTextures(out modifiedMaterials); + } + } +} +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs.meta new file mode 100644 index 000000000..76b816ab0 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3eb807840ae1934b9346f35db2c8fac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef new file mode 100644 index 000000000..976379f11 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "spine-on-demand-loading-editor", + "rootNamespace": "", + "references": [ + "spine-unity", + "spine-unity-editor", + "spine-on-demand-loading" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef.meta new file mode 100644 index 000000000..a4d8df4e7 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/spine-on-demand-loading-editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 469d9d10b699b6b42a8727851decc63e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md new file mode 100644 index 000000000..4425c6122 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md @@ -0,0 +1,26 @@ +# Spine Runtimes License Agreement +Last updated July 28, 2023. Replaces all prior versions. + +Copyright (c) 2013-2023, 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. \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md.meta new file mode 100644 index 000000000..485a08ecf --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: efea0eae41e05cb438aabbfb99211f72 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime.meta new file mode 100644 index 000000000..3f58d7e84 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8258ac8697ed60b46a52a3dca4f406e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs new file mode 100644 index 000000000..47a02f031 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs @@ -0,0 +1,315 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, 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. + *****************************************************************************/ + +#define SPINE_OPTIONAL_ON_DEMAND_LOADING + +#if SPINE_OPTIONAL_ON_DEMAND_LOADING + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Spine.Unity { + + /// + /// Interface to derive a concrete target reference struct from which holds + /// an on-demand loading reference to the target texture to be loaded. + /// + public interface ITargetTextureReference { +#if UNITY_EDITOR + Texture EditorTexture { get; } +#endif + } + + /// + /// Interface to derive a concrete request handler struct from which covers + /// a single texture loading request. + /// + public interface IOnDemandRequest { + bool WasRequested { get; } + bool WasSuccessfullyLoaded { get; } + bool IsTarget (Texture texture); + void Release (); + } + + /// + /// Base class to derive your own OnDemandTextureLoader subclasses from which already provides + /// the general loading and unloading framework. + /// For reference, see the class available + /// in the com.esotericsoftware.spine.addressables UPM package. + /// + /// The implementation struct which holds an on-demand loading reference + /// to the target texture to be loaded, derived from ITargetTextureReference. + /// The implementation struct covering a single texture loading request, + /// derived from IOnDemandRequest + [System.Serializable] + public abstract class GenericOnDemandTextureLoader : OnDemandTextureLoader + where TargetReference : ITargetTextureReference + where TextureRequest : IOnDemandRequest { + + [System.Serializable] + public struct PlaceholderTextureMapping { + public Texture placeholderTexture; + public TargetReference targetTextureReference; + } + + /// + /// Unfortunately serialization of jagged arrays PlaceholderTextureMapping[][] is not supported, + /// so we need to use this class with a 1D-array PlaceholderMaterialMapping[] as a workaround. + /// + [System.Serializable] + public struct PlaceholderMaterialMapping { + + public PlaceholderTextureMapping[] textures; + } + + // Note: not System.Serializabe on purpose. Would be unnecessary and causes problems otherwise. + public struct MaterialOnDemandData { + public int lastFrameRequested; + public TextureRequest[] textureRequests; + } + + void Reset () { + Clear(clearAtlasAsset: true); + } + + public override void Clear (bool clearAtlasAsset = false) { + if (clearAtlasAsset) atlasAsset = null; + placeholderMap = null; + loadedDataAtMaterial = null; + } + + public override string GetPlaceholderTextureName (string originalTextureName) { + return originalTextureName + "_low"; + } + + public override bool AssignPlaceholderTextures (out IEnumerable modifiedMaterials) { + modifiedMaterials = null; + if (!atlasAsset) return false; + + int materialIndex = 0; + foreach (Material targetMaterial in atlasAsset.Materials) { + if (materialIndex >= placeholderMap.Length) { + Debug.LogError(string.Format("Failed to assign placeholder textures at {0}, material #{1} {2}. " + + "It seems like the GenericOnDemandTextureLoader asset was not setup accordingly for the AtlasAsset.", + atlasAsset, materialIndex + 1, targetMaterial), this); + return false; + } + Texture activeTexture = targetMaterial.mainTexture; + int textureIndex = 0; // Todo: currently only main texture is supported. + + int mapIndex = materialIndex; +#if UNITY_EDITOR + if (!Application.isPlaying) { + int foundMapIndex = Array.FindIndex(placeholderMap, + entry => entry.textures[textureIndex].targetTextureReference.EditorTexture == activeTexture); + if (foundMapIndex >= 0) + mapIndex = foundMapIndex; + } +#endif + Texture placeholderTexture = placeholderMap[mapIndex].textures[textureIndex].placeholderTexture; + if (placeholderTexture == null) { + Debug.LogWarning(string.Format("Placeholder texture set to null at {0}, for material #{1} {2}. " + + "It seems like the GenericOnDemandTextureLoader asset was not setup accordingly for the AtlasAsset.", + atlasAsset, materialIndex + 1, targetMaterial), this); + } else { + targetMaterial.mainTexture = placeholderTexture; + } + ++materialIndex; + } + modifiedMaterials = atlasAsset.Materials; + return true; + } + + public override bool HasPlaceholderTexturesAssigned (out List placeholderMaterials) { + placeholderMaterials = null; + if (!atlasAsset) return false; + + bool anyPlaceholderAssigned = false; + + int materialIndex = 0; + foreach (Material material in atlasAsset.Materials) { + if (materialIndex >= placeholderMap.Length) + return false; + bool hasPlaceholderAssigned = HasPlaceholderAssigned(material); + if (hasPlaceholderAssigned) { + anyPlaceholderAssigned = true; + if (placeholderMaterials == null) placeholderMaterials = new List(); + placeholderMaterials.Add(material); + } + } + return anyPlaceholderAssigned; + } + + public override bool AssignTargetTextures (out IEnumerable modifiedMaterials) { + modifiedMaterials = null; + if (!atlasAsset) return false; + BeginCustomTextureLoading(); + int i = 0; + foreach (Material targetMaterial in atlasAsset.Materials) { + if (i >= placeholderMap.Length) { + Debug.LogError(string.Format("Failed to assign target textures at {0}, material #{1} {2}. " + + "It seems like the OnDemandTextureLoader asset was not setup accordingly for the AtlasAsset.", + atlasAsset, i + 1, targetMaterial), this); + return false; + } + Material ignoredArgument = null; + RequestLoadMaterialTextures(targetMaterial, ref ignoredArgument); + ++i; + } + modifiedMaterials = atlasAsset.Materials; + EndCustomTextureLoading(); + return true; + } + + public override void BeginCustomTextureLoading () { + if (loadedDataAtMaterial == null || (loadedDataAtMaterial.Length == 0 && placeholderMap.Length > 0)) { + loadedDataAtMaterial = new MaterialOnDemandData[placeholderMap.Length]; + for (int i = 0, count = loadedDataAtMaterial.Length; i < count; ++i) { + loadedDataAtMaterial[i].lastFrameRequested = -1; + int texturesAtMaterial = placeholderMap[i].textures.Length; + loadedDataAtMaterial[i].textureRequests = new TextureRequest[texturesAtMaterial]; + } + } + } + + public override void EndCustomTextureLoading () { +#if UNITY_EDITOR + if (!Application.isPlaying) + return; +#endif + UnloadUnusedTextures(); + } + + public override bool HasPlaceholderAssigned (Material material) { + Texture currentTexture = material.mainTexture; + int textureIndex = 0; // Todo: currently only main texture is supported. + int foundMaterialIndex = Array.FindIndex(placeholderMap, entry => entry.textures[textureIndex].placeholderTexture == currentTexture); + return foundMaterialIndex >= 0; + } + + public override void RequestLoadMaterialTextures (Material material, ref Material overrideMaterial) { + if (!material || !material.mainTexture) return; + + Texture currentTexture = material.mainTexture; + int textureIndex = 0; // Todo: currently only main texture is supported. + + int foundMaterialIndex = Array.FindIndex(placeholderMap, entry => entry.textures[textureIndex].placeholderTexture == currentTexture); + if (foundMaterialIndex >= 0) + RequestLoadTexture(material, foundMaterialIndex, textureIndex); + + int loadedMaterialIndex = Array.FindIndex(loadedDataAtMaterial, entry => + entry.textureRequests[textureIndex].WasRequested && + entry.textureRequests[textureIndex].IsTarget(currentTexture)); + if (loadedMaterialIndex >= 0) + loadedDataAtMaterial[loadedMaterialIndex].lastFrameRequested = Time.frameCount; + } + + protected virtual void RequestLoadTexture (Material material, int materialIndex, int textureIndex) { + PlaceholderTextureMapping[] placeholderTextures = placeholderMap[materialIndex].textures; + TargetReference targetReference = placeholderTextures[textureIndex].targetTextureReference; + loadedDataAtMaterial[materialIndex].lastFrameRequested = Time.frameCount; + +#if UNITY_EDITOR + if (!Application.isPlaying) { + if (targetReference.EditorTexture != null) + material.mainTexture = targetReference.EditorTexture; + return; + } +#endif + MaterialOnDemandData materialData = loadedDataAtMaterial[materialIndex]; + if (materialData.textureRequests[textureIndex].WasRequested) { + Texture loadedTexture = GetAlreadyLoadedTexture(materialIndex, textureIndex); + if (loadedTexture != null) + material.mainTexture = loadedTexture; + return; + } + + CreateTextureRequest(targetReference, materialData, textureIndex, material); + } + + public abstract Texture GetAlreadyLoadedTexture (int materialIndex, int textureIndex); + + public abstract void CreateTextureRequest (TargetReference targetReference, + MaterialOnDemandData materialData, int textureIndex, Material materialToUpdate); + + public virtual void UnloadUnusedTextures () { + int currentFrameCount = Time.frameCount; + float timePerFrame = Time.smoothDeltaTime; + float deltaFramesToUnload = unloadAfterSecondsUnused / timePerFrame; + + for (int materialIndex = 0, materialCount = loadedDataAtMaterial.Length; materialIndex < materialCount; ++materialIndex) { + MaterialOnDemandData materialData = loadedDataAtMaterial[materialIndex]; + int textureCount = materialData.textureRequests.Length; + + for (int textureIndex = 0; textureIndex < textureCount; ++textureIndex) { + TextureRequest textureRequest = materialData.textureRequests[textureIndex]; + if (textureRequest.WasSuccessfullyLoaded && + currentFrameCount - materialData.lastFrameRequested > deltaFramesToUnload) { + RequestUnloadTexture(materialIndex, textureIndex); + } + } + } + } + + public virtual void RequestUnloadTexture (int materialIndex, int textureIndex) { + if (materialIndex >= loadedDataAtMaterial.Length) return; + + bool wasReleased = false; + PlaceholderTextureMapping[] placeholderTextures = placeholderMap[materialIndex].textures; + MaterialOnDemandData materialData = loadedDataAtMaterial[materialIndex]; + if (materialData.textureRequests[textureIndex].WasRequested) { + materialData.textureRequests[textureIndex].Release(); + wasReleased = true; + } + + // reset material textures to placeholder textures. + Material targetMaterial = atlasAsset.Materials.ElementAt(materialIndex); + if (targetMaterial) { + targetMaterial.mainTexture = placeholderTextures[textureIndex].placeholderTexture; + if (wasReleased) + OnTextureUnloaded(targetMaterial, textureIndex); + } + } + + public int maxPlaceholderSize = 128; + public float unloadAfterSecondsUnused = 60.0f; + + /// A map from placeholder to on-demand-loaded target textures. + /// This array holds PlaceholderMaterialMapping for each Material, + /// where each PlaceholderMaterialMapping.textures contains a Texture-to-TextureReference mapping + /// for each Texture at the Material. + public PlaceholderMaterialMapping[] placeholderMap; + + /// An array holding loaded data for each Material. + protected MaterialOnDemandData[] loadedDataAtMaterial; + } +} +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs.meta new file mode 100644 index 000000000..54bfc1c15 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5964cfa446b05ea4e8c3622d3a1b9430 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef new file mode 100644 index 000000000..1faa583b7 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef @@ -0,0 +1,17 @@ +{ + "name": "spine-on-demand-loading", + "rootNamespace": "", + "references": [ + "spine-unity", + "spine-csharp" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef.meta new file mode 100644 index 000000000..4f4fb18d9 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/spine-on-demand-loading.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2eb352bed1bae98439c9adcbb05e6b90 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json new file mode 100644 index 000000000..5682f3443 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json @@ -0,0 +1,21 @@ +{ + "name": "com.esotericsoftware.spine.on-demand-loading", + "displayName": "Spine On-Demand Loading Extensions [Experimental]", + "description": "This experimental plugin provides a generic basic implementation of on-demand texture loading for the spine-unity runtime. You might want to use the available com.esotericsoftware.spine.addressables package which depends on this package.\nPlease be sure to test this package first and create backups of your project before using.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", + "version": "4.1.0", + "unity": "2018.3", + "author": { + "name": "Esoteric Software", + "email": "contact@esotericsoftware.com", + "url": "http://esotericsoftware.com/" + }, + "dependencies": { + "com.esotericsoftware.spine.spine-unity": "4.1.21" + }, + "keywords": [ + "spine", + "on-demand", + "loading", + "preview" + ] +} diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json.meta new file mode 100644 index 000000000..313694e54 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b808d40cc8a54b4ab5b0dbf607e15a8 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/editor-tests/RunAnimationStateTests.cs b/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/editor-tests/RunAnimationStateTests.cs index 4cd9ded48..b49a316a1 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/editor-tests/RunAnimationStateTests.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/editor-tests/RunAnimationStateTests.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2021, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using NUnit.Framework; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/playmode-tests/src/RootMotionTests.cs b/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/playmode-tests/src/RootMotionTests.cs index 7ab010a82..d0157980b 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/playmode-tests/src/RootMotionTests.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.spine-unity-tests/Tests/playmode-tests/src/RootMotionTests.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using NUnit.Framework; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs index f80352b81..0d3b39faf 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateDrawer.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateDrawer.cs index b7bd70b01..5ae46c49a 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateDrawer.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateDrawer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Editor; @@ -56,9 +56,10 @@ public class SpineAnimationStateDrawer : PropertyDrawer { SerializedProperty attachmentProp = property.FindPropertyRelative("attachmentThreshold"); SerializedProperty drawOrderProp = property.FindPropertyRelative("drawOrderThreshold"); - // initialize useBlendDuration parameter according to preferences + // initialize customDuration (inverse default mix duration) and useBlendDuration parameters according to preferences SerializedProperty isInitializedProp = property.FindPropertyRelative("isInitialized"); if (!isInitializedProp.hasMultipleDifferentValues && isInitializedProp.boolValue == false) { + customDurationProp.boolValue = !SpineEditorUtilities.Preferences.timelineDefaultMixDuration; useBlendDurationProp.boolValue = SpineEditorUtilities.Preferences.timelineUseBlendDuration; isInitializedProp.boolValue = true; } diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateGraphicTrackInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateGraphicTrackInspector.cs index f036fa25a..313a22df1 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateGraphicTrackInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateGraphicTrackInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateTrackInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateTrackInspector.cs index 28e094349..d4bdaff21 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateTrackInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateTrackInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipEditor.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipEditor.cs index 9775b0d6c..a52a88105 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipEditor.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipEditor.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2019_1_OR_NEWER diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipInspector.cs index 2d1bc6acd..5617124f0 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipClipInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipDrawer.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipDrawer.cs index b9f031c13..428180d8a 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipDrawer.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipDrawer.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using UnityEditor; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipTrackInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipTrackInspector.cs index 4dec736cd..d4a7a7d0f 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipTrackInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineSkeletonFlipTrackInspector.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine.Unity.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/LICENSE.md b/spine-unity/Modules/com.esotericsoftware.spine.timeline/LICENSE.md index 61b10330d..4425c6122 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/LICENSE.md +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/LICENSE.md @@ -1,26 +1,26 @@ # Spine Runtimes License Agreement -Last updated May 1, 2019. Replaces all prior versions. +Last updated July 28, 2023. Replaces all prior versions. -Copyright (c) 2013-2019, Esoteric Software LLC +Copyright (c) 2013-2023, 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, +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 +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. \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonAnimationPlayableHandle.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonAnimationPlayableHandle.cs index 2f5709585..d2ed9518f 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonAnimationPlayableHandle.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonAnimationPlayableHandle.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ //using UnityEngine.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonGraphicPlayableHandle.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonGraphicPlayableHandle.cs index 5b7bd15a8..c38ae1ec5 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonGraphicPlayableHandle.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SkeletonGraphicPlayableHandle.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ //using UnityEngine.Playables; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SpinePlayableHandleBase.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SpinePlayableHandleBase.cs index 663476053..13022e0e0 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SpinePlayableHandleBase.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/PlayableHandle Component/SpinePlayableHandleBase.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System.Collections; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateBehaviour.cs index 0e097d01a..5bb8fe4a2 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateBehaviour.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateBehaviour.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using Spine; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateClip.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateClip.cs index 5f8715be7..ceadf0463 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateClip.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateClip.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs index 4db14305f..7311c3228 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_EDITOR diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs index f77bddf8b..553331415 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,11 +23,17 @@ * (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. + * (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. *****************************************************************************/ +#if UNITY_2019_1_OR_NEWER +#define SPEED_INCLUDED_IN_CLIP_TIME +#endif + +#if UNITY_EDITOR #define SPINE_EDITMODEPOSE +#endif using System; using UnityEngine; @@ -64,7 +70,8 @@ namespace Spine.Unity.Playables { } public override void OnGraphStop (Playable playable) { - if (!isPaused && endAtClipEnd) + bool isStoppedNotPaused = playable.GetGraph().IsPlaying(); // end of track was reached or graph stopped. + if (isStoppedNotPaused && endAtClipEnd) HandleClipEnd(); } @@ -161,7 +168,7 @@ namespace Spine.Unity.Playables { for (int i = 0; i < inputCount; i++) { float lastInputWeight = lastInputWeights[i]; float inputWeight = playable.GetInputWeight(i); - bool clipStarted = lastInputWeight == 0 && inputWeight > 0; + bool clipStarted = (inputWeight > 0) && (lastInputWeight == 0 || info.seekOccurred || info.timeLooped); if (inputWeight > 0) anyClipPlaying = true; lastInputWeights[i] = inputWeight; @@ -212,7 +219,11 @@ namespace Spine.Unity.Playables { float clipSpeed = (float)clipPlayable.GetSpeed(); trackEntry.EventThreshold = clipData.eventThreshold; trackEntry.DrawOrderThreshold = clipData.drawOrderThreshold; - trackEntry.TrackTime = (float)clipPlayable.GetTime() * clipSpeed * rootPlayableSpeed; +#if SPEED_INCLUDED_IN_CLIP_TIME + trackEntry.TrackTime = (float)clipPlayable.GetTime(); +#else + trackEntry.TrackTime = (float)clipPlayable.GetTime() * rootPlayableSpeed * clipSpeed; +#endif trackEntry.TimeScale = clipSpeed * rootPlayableSpeed; trackEntry.AttachmentThreshold = clipData.attachmentThreshold; trackEntry.HoldPrevious = clipData.holdPrevious; @@ -223,10 +234,9 @@ namespace Spine.Unity.Playables { timelineStartedTrackEntry = trackEntry; } - //else Debug.LogWarningFormat("Animation named '{0}' not found", clipData.animationName); } - - // Ensure that the first frame ends with an updated mesh. + } + if (numStartingClips > 0) { if (skeletonAnimation) { skeletonAnimation.Update(0); skeletonAnimation.LateUpdate(); @@ -242,8 +252,11 @@ namespace Spine.Unity.Playables { } #if SPINE_EDITMODEPOSE + /// Animation event callback for editor scripts when outside of play-mode. + public static event AnimationState.TrackEntryEventDelegate EditorEvent; AnimationState dummyAnimationState; + ExposedList editorAnimationEvents = new ExposedList(); public void PreviewEditModePose (Playable playable, ISkeletonComponent skeletonComponent, IAnimationStateComponent animationStateComponent, @@ -251,6 +264,7 @@ namespace Spine.Unity.Playables { if (Application.isPlaying) return; if (animationStateComponent.IsNullOrDestroyed() || skeletonComponent == null) return; + editorAnimationEvents.Clear(false); int inputCount = playable.GetInputCount(); float rootSpeed = GetRootPlayableSpeed(playable); @@ -283,12 +297,20 @@ namespace Spine.Unity.Playables { var fromClip = (ScriptPlayable)playable.GetInput(lastNonZeroWeightTrack - 1); SpineAnimationStateBehaviour fromClipData = fromClip.GetBehaviour(); fromAnimation = fromClipData.animationReference != null ? fromClipData.animationReference.Animation : null; +#if SPEED_INCLUDED_IN_CLIP_TIME + fromClipTime = (float)fromClip.GetTime(); +#else fromClipTime = (float)fromClip.GetTime() * (float)fromClip.GetSpeed() * rootSpeed; +#endif fromClipLoop = fromClipData.loop; } Animation toAnimation = clipData.animationReference != null ? clipData.animationReference.Animation : null; +#if SPEED_INCLUDED_IN_CLIP_TIME + float toClipTime = (float)inputPlayableClip.GetTime(); +#else float toClipTime = (float)inputPlayableClip.GetTime() * (float)inputPlayableClip.GetSpeed() * rootSpeed; +#endif float mixDuration = clipData.mixDuration; if (!clipData.customDuration && fromAnimation != null && toAnimation != null) { @@ -325,18 +347,27 @@ namespace Spine.Unity.Playables { } // Apply Pose + dummyAnimationState.Event += EditorEvent; dummyAnimationState.Update(0); dummyAnimationState.Apply(skeleton); + dummyAnimationState.Event -= EditorEvent; } else { - if (toAnimation != null) - toAnimation.Apply(skeleton, 0, toClipTime, clipData.loop, null, clipData.alpha, MixBlend.Setup, MixDirection.In); + if (toAnimation != null) { + toAnimation.Apply(skeleton, 0, toClipTime, clipData.loop, editorAnimationEvents, clipData.alpha, MixBlend.Setup, MixDirection.In); + if (EditorEvent != null) { + foreach (Spine.Event e in editorAnimationEvents) { + EditorEvent(null, e); + } + } + } } + skeleton.UpdateWorldTransform(); if (skeletonAnimation) { - skeletonAnimation.Update(0); + skeletonAnimation.AfterAnimationApplied(); skeletonAnimation.LateUpdate(); } else if (skeletonGraphic) { - skeletonGraphic.Update(0); + skeletonGraphic.AfterAnimationApplied(); skeletonGraphic.LateUpdate(); } } diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs index c06a2b06c..a494f283e 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_EDITOR diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipBehaviour.cs index 5907b1b2c..241181c35 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipBehaviour.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipBehaviour.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipClip.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipClip.cs index 394b982c7..e9a53386e 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipClip.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipClip.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ using System; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipMixerBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipMixerBehaviour.cs index 71aced6d6..2461b556a 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipMixerBehaviour.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipMixerBehaviour.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_2018_1_OR_NEWER diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipTrack.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipTrack.cs index 5e57b7e6c..99d6f3d40 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipTrack.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineSkeletonFlip/SpineSkeletonFlipTrack.cs @@ -1,16 +1,16 @@ /****************************************************************************** * Spine Runtimes License Agreement - * Last updated September 24, 2021. Replaces all prior versions. + * Last updated July 28, 2023. Replaces all prior versions. * - * Copyright (c) 2013-2022, Esoteric Software LLC + * Copyright (c) 2013-2023, 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, + * 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. @@ -23,8 +23,8 @@ * (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. + * (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. *****************************************************************************/ #if UNITY_EDITOR diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json index 8fcd7fe8a..0ddccf735 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.timeline", "displayName": "Spine Timeline Extensions", "description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.6", + "version": "4.1.7", "unity": "2018.3", "author": { "name": "Esoteric Software", diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json index 68c955c4d..5f194832e 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.timeline", "displayName": "Spine Timeline Extensions", "description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity and spine-csharp runtimes as UPM packages (not as spine-unity unitypackage), version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.6", + "version": "4.1.13", "unity": "2018.3", "author": { "name": "Esoteric Software", @@ -11,7 +11,7 @@ }, "dependencies": { "com.unity.timeline": "1.2.10", - "com.esotericsoftware.spine.spine-unity": "4.1.0" + "com.esotericsoftware.spine.spine-unity": "4.1.13" }, "keywords": [ "spine", diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/LICENSE.md b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/LICENSE.md index 61b10330d..4425c6122 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/LICENSE.md +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/LICENSE.md @@ -1,26 +1,26 @@ # Spine Runtimes License Agreement -Last updated May 1, 2019. Replaces all prior versions. +Last updated July 28, 2023. Replaces all prior versions. -Copyright (c) 2013-2019, Esoteric Software LLC +Copyright (c) 2013-2023, 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, +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 +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. \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Asset.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Asset.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Asset.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Asset.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Asset.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Asset.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Asset.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Asset.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Renderer Data.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Renderer Data.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Renderer Data.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Renderer Data.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Renderer Data.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Renderer Data.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Example 2D URP Renderer Data.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Example 2D URP Renderer Data.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading-rim-mask.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Images/urp-2d-renderer-heading.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Images/urp-2d-renderer-heading.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro.json.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor-rim-mask.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/RaptorURP/raptor_Material_Outline.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman-rim-mask.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.json.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_Material_Outline.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/URP 2D Shaders.unity b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/URP 2D Shaders.unity similarity index 72% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/URP 2D Shaders.unity rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/URP 2D Shaders.unity index 48d220888..298fe44a3 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/URP 2D Shaders.unity +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/URP 2D Shaders.unity @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 11 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -98,7 +98,7 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} + m_UseShadowmask: 1 --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -118,8 +118,6 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -156,10 +154,8 @@ MonoBehaviour: m_EditorClassIdentifier: skeletonDataAsset: {fileID: 11400000, guid: 809479298965dd14abffeeb0844d7fc3, type: 2} initialSkinName: - fixPrefabOverrideViaMeshFilter: 0 initialFlipX: 0 initialFlipY: 0 - updateWhenInvisible: 3 separatorSlotNames: [] zSpacing: 0 useClipping: 1 @@ -177,8 +173,6 @@ MonoBehaviour: materialsInsideMask: [] materialsOutsideMask: [] disableRenderingOnOverride: 1 - updateTiming: 1 - unscaledTime: 0 _animationName: loop: 1 timeScale: 0.5 @@ -193,12 +187,10 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -223,7 +215,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &100024095 MeshFilter: m_ObjectHideFlags: 0 @@ -275,62 +266,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.555 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 2.15 - m_LightVolumeIntensity: 0.09 - m_LightVolumeIntensityEnabled: 1 + m_LightVolumeOpacity: 0.09 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 9.25 - m_NormalMapQuality: 1 m_UseNormalMap: 1 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 1 m_ShadowVolumeIntensity: 0.513 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 16.769999 m_PointLightOuterAngle: 41.73 m_PointLightInnerRadius: 1.7501951 m_PointLightOuterRadius: 15.677112 + m_PointLightDistance: 9.25 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -384,62 +338,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 1 m_FalloffIntensity: 0.555 m_Color: {r: 0, g: 0.19722795, b: 1, a: 1} m_Intensity: 1 - m_LightVolumeIntensity: 0 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeOpacity: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 3 - m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 360 m_PointLightOuterAngle: 360 m_PointLightInnerRadius: 27.138403 m_PointLightOuterRadius: 35.315388 + m_PointLightDistance: 3 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -493,62 +410,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.555 m_Color: {r: 1, g: 0.1882353, b: 0, a: 1} m_Intensity: 2.29 - m_LightVolumeIntensity: 0.078 - m_LightVolumeIntensityEnabled: 1 + m_LightVolumeOpacity: 0.078 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 9.25 - m_NormalMapQuality: 1 m_UseNormalMap: 1 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 43.21 m_PointLightOuterAngle: 92.31 m_PointLightInnerRadius: 4.0793433 m_PointLightOuterRadius: 6.5738244 + m_PointLightDistance: 9.25 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -602,38 +482,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 4 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 0.09 - m_LightVolumeIntensity: 0 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeOpacity: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 3 - m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0 - m_Vertices: - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 0} - uv: {x: 0, y: 0} - m_Triangles: 0000 - m_LocalBounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} m_PointLightInnerAngle: 360 m_PointLightOuterAngle: 360 m_PointLightInnerRadius: 0 m_PointLightOuterRadius: 1 + m_PointLightDistance: 3 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -658,7 +525,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &523470623 +--- !u!1 &680384995 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -666,89 +533,98 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 523470624} - - component: {fileID: 523470626} - - component: {fileID: 523470625} + - component: {fileID: 680384999} + - component: {fileID: 680384998} + - component: {fileID: 680384997} + - component: {fileID: 680384996} m_Layer: 5 - m_Name: Text URP + m_Name: Canvas m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &523470624 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523470623} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1250291821} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.28475, y: 0} - m_AnchorMax: {x: 0.87025005, y: 0.33634377} - m_AnchoredPosition: {x: -0.09567261, y: 0.5} - m_SizeDelta: {x: 0.19135, y: 0.8167} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &523470625 +--- !u!114 &680384996 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523470623} + m_GameObject: {fileID: 680384995} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Important: If skeletons are lit uniformly blue* or not visible at all, - please make sure to assign the required "Example 2D URP Asset" at "Scriptable - Render Pipeline Settings". - - (see Project Settings->Graphics->Scriptable Render - Pipeline Settings). - - Also check the assigned renderer asset at Player Settings - - Graphics. - - - * This scene uses blue rim light, which requires mask channels - to be setup accordingly.' ---- !u!222 &523470626 -CanvasRenderer: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &680384997 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 523470623} - m_CullTransparentMesh: 0 + m_GameObject: {fileID: 680384995} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &680384998 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680384995} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &680384999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680384995} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1488602475} + m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} --- !u!1 &688931852 GameObject: m_ObjectHideFlags: 0 @@ -778,62 +654,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.555 m_Color: {r: 0, g: 1, b: 0.19503093, a: 1} m_Intensity: 1 - m_LightVolumeIntensity: 0.09 - m_LightVolumeIntensityEnabled: 1 + m_LightVolumeOpacity: 0.09 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 9.25 - m_NormalMapQuality: 1 m_UseNormalMap: 1 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 1 m_ShadowVolumeIntensity: 0.513 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 16.769999 m_PointLightOuterAngle: 41.73 m_PointLightInnerRadius: 1.7501951 m_PointLightOuterRadius: 10.79 + m_PointLightDistance: 9.25 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -893,6 +732,7 @@ MonoBehaviour: m_RequiresDepthTextureOption: 2 m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 + m_CameraOutput: 0 m_Cameras: [] m_RendererIndex: 0 m_VolumeLayerMask: @@ -904,8 +744,6 @@ MonoBehaviour: m_AntialiasingQuality: 2 m_StopNaN: 0 m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 @@ -1002,12 +840,10 @@ SpriteRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1086,62 +922,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.555 m_Color: {r: 0, g: 1, b: 0.19503093, a: 1} m_Intensity: 1 - m_LightVolumeIntensity: 0.09 - m_LightVolumeIntensityEnabled: 1 + m_LightVolumeOpacity: 0.09 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 9.25 - m_NormalMapQuality: 1 m_UseNormalMap: 1 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 1 m_ShadowVolumeIntensity: 0.513 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 16.769999 m_PointLightOuterAngle: 41.73 m_PointLightInnerRadius: 1.7501951 m_PointLightOuterRadius: 10.79 + m_PointLightDistance: 9.25 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -1166,7 +965,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -0.65500003} ---- !u!1 &1250291817 +--- !u!1 &1488602474 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1174,98 +973,89 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1250291821} - - component: {fileID: 1250291820} - - component: {fileID: 1250291819} - - component: {fileID: 1250291818} + - component: {fileID: 1488602475} + - component: {fileID: 1488602477} + - component: {fileID: 1488602476} m_Layer: 5 - m_Name: Canvas + m_Name: Text URP m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1250291818 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1250291817} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1250291819 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1250291817} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &1250291820 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1250291817} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1250291821 +--- !u!224 &1488602475 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1250291817} + m_GameObject: {fileID: 1488602474} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 523470624} - m_Father: {fileID: 0} - m_RootOrder: 13 + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 680384999} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} + m_AnchorMin: {x: 0.28475, y: 0} + m_AnchorMax: {x: 0.87025005, y: 0.33634377} + m_AnchoredPosition: {x: -0.095703125, y: 0.5} + m_SizeDelta: {x: 0.19135, y: 0.8167} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1488602476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488602474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Important: If skeletons are lit uniformly blue* or not visible at all, + please make sure to assign the required "Example 2D URP Asset" at "Scriptable + Render Pipeline Settings". + + (see Project Settings->Graphics->Scriptable Render + Pipeline Settings). + + Also check the assigned renderer asset at Player Settings + - Graphics. + + + * This scene uses blue rim light, which requires mask channels + to be setup accordingly.' +--- !u!222 &1488602477 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488602474} + m_CullTransparentMesh: 0 --- !u!1 &1489880313 GameObject: m_ObjectHideFlags: 0 @@ -1278,7 +1068,6 @@ GameObject: - component: {fileID: 1489880316} - component: {fileID: 1489880315} - component: {fileID: 1489880314} - - component: {fileID: 1489880318} m_Layer: 0 m_Name: Spine GameObject (raptor-pro) m_TagString: Untagged @@ -1300,10 +1089,8 @@ MonoBehaviour: m_EditorClassIdentifier: skeletonDataAsset: {fileID: 11400000, guid: d67c9e96f4d7b0a4a8f01fdce75b755d, type: 2} initialSkinName: - fixPrefabOverrideViaMeshFilter: 0 initialFlipX: 1 initialFlipY: 0 - updateWhenInvisible: 3 separatorSlotNames: [] zSpacing: 0 useClipping: 1 @@ -1321,8 +1108,6 @@ MonoBehaviour: materialsInsideMask: [] materialsOutsideMask: [] disableRenderingOnOverride: 1 - updateTiming: 1 - unscaledTime: 0 _animationName: roar loop: 1 timeScale: 1 @@ -1337,12 +1122,10 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1367,7 +1150,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1489880316 MeshFilter: m_ObjectHideFlags: 0 @@ -1390,24 +1172,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1489880318 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1489880313} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 25e6ceb271c9af848ae53f2af1073d0d, type: 3} - m_Name: - m_EditorClassIdentifier: - color: {r: 1, g: 1, b: 1, a: 1} - quadMaterial: {fileID: 2100000, guid: f23b1fee652c25e4d8708ffe159a8906, type: 2} - targetCamera: {fileID: 0} - maxRenderTextureSize: 1024 - quad: {fileID: 0} - renderTexture: {fileID: 0} --- !u!1 &1539523631 GameObject: m_ObjectHideFlags: 0 @@ -1420,7 +1184,6 @@ GameObject: - component: {fileID: 1539523634} - component: {fileID: 1539523633} - component: {fileID: 1539523632} - - component: {fileID: 1539523636} m_Layer: 0 m_Name: Spine GameObject (stretchyman) m_TagString: Untagged @@ -1442,10 +1205,8 @@ MonoBehaviour: m_EditorClassIdentifier: skeletonDataAsset: {fileID: 11400000, guid: 809479298965dd14abffeeb0844d7fc3, type: 2} initialSkinName: - fixPrefabOverrideViaMeshFilter: 0 initialFlipX: 0 initialFlipY: 0 - updateWhenInvisible: 3 separatorSlotNames: [] zSpacing: 0 useClipping: 1 @@ -1463,8 +1224,6 @@ MonoBehaviour: materialsInsideMask: [] materialsOutsideMask: [] disableRenderingOnOverride: 1 - updateTiming: 1 - unscaledTime: 0 _animationName: sneak loop: 1 timeScale: 0.5 @@ -1479,12 +1238,10 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1509,7 +1266,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1539523634 MeshFilter: m_ObjectHideFlags: 0 @@ -1532,24 +1288,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1539523636 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1539523631} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 25e6ceb271c9af848ae53f2af1073d0d, type: 3} - m_Name: - m_EditorClassIdentifier: - color: {r: 1, g: 1, b: 1, a: 1} - quadMaterial: {fileID: 2100000, guid: b91cbdae3e867cf40b3a1e31cde96f54, type: 2} - targetCamera: {fileID: 0} - maxRenderTextureSize: 1024 - quad: {fileID: 0} - renderTexture: {fileID: 0} --- !u!1 &1540548735 GameObject: m_ObjectHideFlags: 0 @@ -1579,62 +1317,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.555 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 2.15 - m_LightVolumeIntensity: 0.09 - m_LightVolumeIntensityEnabled: 1 + m_LightVolumeOpacity: 0.09 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 9.25 - m_NormalMapQuality: 1 m_UseNormalMap: 1 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 1 m_ShadowVolumeIntensity: 0.513 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 127.98 m_PointLightOuterAngle: 152.94 m_PointLightInnerRadius: 1.7501951 m_PointLightOuterRadius: 6.481049 + m_PointLightDistance: 9.25 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -1688,62 +1389,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 - m_LightVolumeIntensity: 0 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeOpacity: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 3 - m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_ShadowIntensity: 0 - m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 360 m_PointLightOuterAngle: 360 m_PointLightInnerRadius: 0.5638541 m_PointLightOuterRadius: 3.4605482 + m_PointLightDistance: 3 + m_PointLightQuality: 1 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 4.86 diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/URP 2D Shaders.unity.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/URP 2D Shaders.unity.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/2D/URP 2D Shaders.unity.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/2D/URP 2D Shaders.unity.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset_Renderer.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset_Renderer.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset_Renderer.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset_Renderer.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset_Renderer.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset_Renderer.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Example URP Asset_Renderer.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Example URP Asset_Renderer.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro.json.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor-pro_SkeletonData.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt new file mode 100644 index 000000000..89cf60341 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt @@ -0,0 +1,100 @@ +raptor.png + size: 1024, 512 + filter: Linear, Linear + scale: 0.5 +back-arm + bounds: 829, 88, 46, 25 + rotate: 90 +back-bracer + bounds: 195, 238, 39, 28 + rotate: 90 +back-hand + bounds: 724, 140, 36, 34 + rotate: 90 +back-knee + bounds: 760, 131, 49, 67 + rotate: 90 +back-thigh + bounds: 225, 238, 39, 24 + rotate: 90 +eyes-open + bounds: 975, 204, 47, 45 +front-arm + bounds: 969, 112, 48, 26 +front-bracer + bounds: 724, 97, 41, 29 + rotate: 90 +front-hand + bounds: 251, 239, 41, 38 +front-open-hand + bounds: 856, 76, 43, 44 + rotate: 90 +front-thigh + bounds: 729, 178, 57, 29 + rotate: 90 +gun + bounds: 894, 251, 107, 103 +gun-nohand + bounds: 764, 241, 105, 102 +head + bounds: 756, 345, 136, 149 +lower-leg + bounds: 475, 237, 73, 98 + rotate: 90 +mouth-grind + bounds: 975, 172, 47, 30 +mouth-smile + bounds: 975, 140, 47, 30 +neck + bounds: 366, 282, 18, 21 +raptor-back-arm + bounds: 636, 97, 82, 86 + rotate: 90 +raptor-body + bounds: 2, 2, 632, 233 +raptor-front-arm + bounds: 871, 168, 81, 102 + rotate: 90 +raptor-front-leg + bounds: 2, 237, 191, 257 +raptor-hindleg-back + bounds: 195, 279, 169, 215 +raptor-horn + bounds: 431, 312, 182, 80 + rotate: 90 +raptor-horn-back + bounds: 513, 318, 176, 77 + rotate: 90 +raptor-jaw + bounds: 894, 356, 126, 138 +raptor-jaw-tooth + bounds: 294, 240, 37, 48 + rotate: 90 +raptor-mouth-inside + bounds: 344, 241, 36, 41 + rotate: 90 +raptor-saddle-strap-back + bounds: 575, 242, 54, 74 +raptor-saddle-strap-front + bounds: 764, 182, 57, 95 + rotate: 90 +raptor-saddle-w-shadow + bounds: 592, 323, 162, 171 +raptor-tail-shadow + bounds: 366, 305, 189, 63 + rotate: 90 +raptor-tongue + bounds: 387, 239, 86, 64 +stirrup-back + bounds: 829, 136, 44, 35 + rotate: 90 +stirrup-front + bounds: 866, 121, 45, 50 + rotate: 90 +stirrup-strap + bounds: 918, 120, 49, 46 +torso + bounds: 636, 181, 54, 91 + rotate: 90 +visor + bounds: 631, 237, 131, 84 diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.atlas.txt.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.png new file mode 100644 index 000000000..474f6316b Binary files /dev/null and b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.png differ diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Atlas.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat similarity index 99% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat index 6223d77fb..31fed7dca 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat @@ -91,7 +91,7 @@ Material: - _StencilRef: 1 - _StraightAlphaInput: 1 - _Surface: 0 - - _ZWrite: 1 + - _ZWrite: 0 m_Colors: - _BaseColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/RaptorURP/raptor_Material.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-emission.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman-normals.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.atlas.txt.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.json.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png new file mode 100644 index 000000000..1b969bb8b Binary files /dev/null and b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png differ diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman.png.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Atlas.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_Material.mat.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/Spine Skeletons/StretchymanURP/stretchyman_SkeletonData.asset.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/URP 3D Shaders.unity b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/URP 3D Shaders.unity similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/URP 3D Shaders.unity rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/URP 3D Shaders.unity diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/URP 3D Shaders.unity.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/URP 3D Shaders.unity.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/3D/URP 3D Shaders.unity.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/3D/URP 3D Shaders.unity.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/Outline Shaders URP.unity b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/Outline Shaders URP.unity similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/Outline Shaders URP.unity rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/Outline Shaders URP.unity diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/Outline Shaders URP.unity.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/Outline Shaders URP.unity.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Examples/Outline Shaders URP.unity.meta rename to spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Samples~/Examples/Outline Shaders URP.unity.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl index 150a75d76..6a0587cfa 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl @@ -1,8 +1,6 @@ #ifndef SPRITE_NORMALS_PASS_URP_INCLUDED #define SPRITE_NORMALS_PASS_URP_INCLUDED -#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" - #include "../Include/SpineCoreShaders/ShaderShared.cginc" #include "../Include/SpineCoreShaders/SpriteLighting.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl index f9f89b2b0..51ded8a72 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl @@ -1,10 +1,14 @@ #ifndef SPRITE_STANDARD_PASS_URP_INCLUDED #define SPRITE_STANDARD_PASS_URP_INCLUDED -#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" - #include "../Include/SpineCoreShaders/ShaderShared.cginc" #include "../Include/SpineCoreShaders/SpriteLighting.cginc" +#if defined(_ALPHAPREMULTIPLY_ON) + #undef _STRAIGHT_ALPHA_INPUT +#elif !defined(_STRAIGHT_ALPHA_INPUT) + #define _STRAIGHT_ALPHA_INPUT +#endif +#include "../Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc" #if USE_SHAPE_LIGHT_TYPE_0 SHAPE_LIGHT(0) @@ -44,6 +48,10 @@ struct VertexOutputSpriteURP2D #if defined(_RIM_LIGHTING) float4 positionWS : TEXCOORD8; #endif + +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD9; +#endif }; VertexOutputSpriteURP2D CombinedShapeLightVertex(VertexInput input) @@ -57,6 +65,11 @@ VertexOutputSpriteURP2D CombinedShapeLightVertex(VertexInput input) output.lightingUV = ComputeScreenPos(clipVertex).xy; output.vertexColor = calculateVertexColor(input.color); +#if defined(_TINT_BLACK_ON) + output.darkColor = GammaToTargetSpace( + half3(input.tintBlackRG.r, input.tintBlackRG.g, input.tintBlackB.r)) + _Black.rgb; +#endif + output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); float3 positionWS = TransformObjectToWorld(input.vertex.xyz); @@ -87,9 +100,13 @@ VertexOutputSpriteURP2D CombinedShapeLightVertex(VertexInput input) half4 CombinedShapeLightFragment(VertexOutputSpriteURP2D input) : SV_Target { fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); - RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP + RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(texureColor, input.vertexColor, input.darkColor, _Color.a, _Black.a) // shall be called before ALPHA_CLIP ALPHA_CLIP(texureColor, input.vertexColor) +#if defined(_TINT_BLACK_ON) + half4 main = fragTintedColor(texureColor, input.darkColor, input.vertexColor, _Color.a, _Black.a); +#else half4 main = texureColor * input.vertexColor; +#endif half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.texcoord.xy); main.rgb = main.a == 0 ? main.rgb : main.rgb / main.a; // un-premultiply for additive lights in CombinedShapeLightShared, reapply afterwards diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader new file mode 100644 index 000000000..6e6816500 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader @@ -0,0 +1,68 @@ +Shader "Universal Render Pipeline/2D/Spine/Skeleton" { + Properties { + _Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.1 + [NoScaleOffset] _MainTex("Main Texture", 2D) = "black" {} + [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Color(" Light Color", Color) = (1,1,1,1) + _Black(" Dark Color", Color) = (0,0,0,0) + [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8 // Set to Always as default + } + + SubShader { + // Universal Pipeline tag is required. If Universal render pipeline is not set in the graphics settings + // this Subshader will fail. + Tags { "RenderPipeline" = "UniversalPipeline" "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + LOD 100 + Cull Off + ZWrite Off + Blend One OneMinusSrcAlpha + + Stencil { + Ref[_StencilRef] + Comp[_StencilComp] + Pass Keep + } + + Pass { + Tags { "LightMode" = "Universal2D" } + + ZWrite Off + Cull Off + Blend One OneMinusSrcAlpha + + HLSLPROGRAM + // Required to compile gles 2.0 with standard srp library + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_fog + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + + //-------------------------------------- + // Spine related keywords + #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT + #pragma shader_feature _TINT_BLACK_ON + #pragma vertex vert + #pragma fragment frag + + #undef LIGHTMAP_ON + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + #include "../Include/Spine-Input-URP.hlsl" + #include "../Include/Spine-Skeleton-ForwardPass-URP.hlsl" + ENDHLSL + } + } + + FallBack "Hidden/InternalErrorShader" +} diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader.meta new file mode 100644 index 000000000..6deba5f2b --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Skeleton-URP-2D.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3bb7ed9d223c7d749bc42dad56e4ad0f +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader index 551e64c62..fdfe936b8 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader @@ -1,11 +1,14 @@ -Shader "Universal Render Pipeline/2D/Spine/Skeleton Lit" { +Shader "Universal Render Pipeline/2D/Spine/Skeleton Lit" { Properties { [NoScaleOffset] _MainTex ("Main Texture", 2D) = "black" {} [NoScaleOffset] _MaskTex("Mask", 2D) = "white" {} [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Color(" Light Color", Color) = (1,1,1,1) + _Black(" Dark Color", Color) = (0,0,0,0) [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 - [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 0.0 // Disabled stencil test by default + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 8 // Set to Always as default } HLSLINCLUDE @@ -41,11 +44,16 @@ #pragma multi_compile USE_SHAPE_LIGHT_TYPE_2 __ #pragma multi_compile USE_SHAPE_LIGHT_TYPE_3 __ #pragma multi_compile _ _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON struct Attributes { float3 positionOS : POSITION; half4 color : COLOR; float2 uv : TEXCOORD0; + #if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; + #endif }; struct Varyings { @@ -53,6 +61,9 @@ half4 color : COLOR0; float2 uv : TEXCOORD0; float2 lightingUV : TEXCOORD1; + #if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD2; + #endif }; // Spine related keywords @@ -63,6 +74,14 @@ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" #define USE_URP #include "../Include/SpineCoreShaders/Spine-Common.cginc" + #include "../Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc" + + #if defined(_TINT_BLACK_ON) + CBUFFER_START(UnityPerMaterial) + half4 _Color; + half4 _Black; + CBUFFER_END + #endif TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); @@ -94,8 +113,16 @@ float4 clipVertex = o.positionCS / o.positionCS.w; o.lightingUV = ComputeScreenPos(clipVertex).xy; o.color = PMAGammaToTargetSpace(v.color); + #if !defined(_TINT_BLACK_ON) // un-premultiply for additive lights in CombinedShapeLightShared, reapply afterwards o.color.rgb = o.color.a == 0 ? o.color.rgb : o.color.rgb / o.color.a; + #endif + + #if defined(_TINT_BLACK_ON) + o.color *= _Color; + o.darkColor = GammaToTargetSpace( + half3(v.tintBlackRG.r, v.tintBlackRG.g, v.tintBlackB.r)) + _Black.rgb; + #endif return o; } @@ -104,16 +131,28 @@ half4 CombinedShapeLightFragment(Varyings i) : SV_Target { half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); - #if !defined(_STRAIGHT_ALPHA_INPUT) + + #if defined(_TINT_BLACK_ON) + half4 main = fragTintedColor(tex, i.darkColor, i.color, _Color.a, _Black.a); + #if !defined(_LIGHT_AFFECTS_ADDITIVE) + if (i.color.a == 0) + return main; + #endif + // un-premultiply for additive lights in CombinedShapeLightShared, reapply afterwards + main.rgb = main.a == 0 ? main.rgb : main.rgb / main.a; + #else + #if !defined(_STRAIGHT_ALPHA_INPUT) // un-premultiply for additive lights in CombinedShapeLightShared, reapply afterwards tex.rgb = tex.a == 0 ? tex.rgb : tex.rgb / tex.a; - #endif - + #endif half4 main = tex * i.color; - #if !defined(_LIGHT_AFFECTS_ADDITIVE) + + #if !defined(_LIGHT_AFFECTS_ADDITIVE) if (i.color.a == 0) return half4(main.rgb * main.a, main.a); + #endif #endif + half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv); #if UNITY_VERSION < 202120 return half4(CombinedShapeLightShared(half4(main.rgb, 1), mask, i.lightingUV).rgb * main.a, main.a); diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader index 1d737398d..425eefb55 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader @@ -33,13 +33,15 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" _BlendAmount("Blend", Range(0,1)) = 0.0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Black("Dark Color", Color) = (0,0,0,0) [HideInInspector] _SrcBlend("__src", Float) = 1.0 [HideInInspector] _DstBlend("__dst", Float) = 0.0 [HideInInspector] _RenderQueue("__queue", Float) = 0.0 [HideInInspector] _Cull("__cull", Float) = 0.0 [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 - [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 0.0 // Disabled stencil test by default + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 8 // Set to Always as default } HLSLINCLUDE @@ -85,9 +87,10 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #pragma shader_feature _RIM_LIGHTING #pragma shader_feature _TEXTURE_BLEND #pragma shader_feature _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON #pragma fragmentoption ARB_precision_hint_fastest - #pragma multi_compile _ PIXELSNAP_ON + #pragma multi_compile_local _ PIXELSNAP_ON //-------------------------------------- // GPU Instancing @@ -95,7 +98,6 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" //-------------------------------------- // Spine related keywords - #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT #pragma vertex CombinedShapeLightVertex #pragma fragment CombinedShapeLightFragment @@ -106,6 +108,7 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" + #define SPRITE_SHADER_2D #include "../Include/Spine-Input-Sprite-URP.hlsl" #include "Include/Spine-Sprite-StandardPass-URP-2D.hlsl" ENDHLSL @@ -130,7 +133,7 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP - #pragma multi_compile _ PIXELSNAP_ON + #pragma multi_compile_local _ PIXELSNAP_ON //-------------------------------------- // GPU Instancing @@ -140,7 +143,7 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #define fixed4 half4 #define fixed3 half3 #define fixed half - + #define SPRITE_SHADER_2D #include "../Include/Spine-Input-Sprite-URP.hlsl" #include "Include/Spine-Sprite-NormalsPass-URP-2D.hlsl" @@ -158,9 +161,6 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" HLSLPROGRAM #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ALPHAPREMULTIPLY_VERTEX_ONLY _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #if defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) || defined(_ALPHABLEND_ON) - #define _STRAIGHT_ALPHA_INPUT - #endif #pragma prefer_hlslcc gles #pragma vertex UnlitVertex diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl index d40855e2c..21c062e23 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl @@ -2,19 +2,44 @@ #define SPINE_COMMON_URP_INCLUDED #ifdef USE_FORWARD_PLUS -#define IS_URP_14_OR_NEWER 1 + #define IS_URP_14_OR_NEWER 1 + #define IS_URP_12_OR_NEWER 1 #else -#define IS_URP_14_OR_NEWER 0 + #define IS_URP_14_OR_NEWER 0 + #ifdef UNIVERSAL_REALTIME_LIGHTS_INCLUDED + #define IS_URP_12_OR_NEWER 1 + #else + #define IS_URP_12_OR_NEWER 0 + #endif +#endif +#if IS_URP_14_OR_NEWER && !defined(_USE_WEBGL1_LIGHTS) + #define IS_URP_15_OR_NEWER 1 +#else + #define IS_URP_15_OR_NEWER 0 #endif #if defined(_WRITE_RENDERING_LAYERS) && IS_URP_14_OR_NEWER #define USE_WRITE_RENDERING_LAYERS #endif -#ifdef _LIGHT_LAYERS +#if defined(_LIGHT_LAYERS) && IS_URP_12_OR_NEWER +#define USE_LIGHT_LAYERS +#endif + +#if defined(_LIGHT_COOKIES) && IS_URP_12_OR_NEWER +#define USE_LIGHT_COOKIES +#endif + +#ifdef USE_LIGHT_LAYERS uint GetMeshRenderingLayerBackwardsCompatible() { + #if IS_URP_14_OR_NEWER return GetMeshRenderingLayer(); + #elif IS_URP_12_OR_NEWER + return GetMeshRenderingLightLayer(); + #else + return 0; + #endif } #else uint GetMeshRenderingLayerBackwardsCompatible() diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl new file mode 100644 index 000000000..eee3a181d --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl @@ -0,0 +1,74 @@ +#ifndef SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED +#define SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + +struct AttributesSpine +{ + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float4 vertexColor : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct VaryingsSpine +{ + float3 normalWS : NORMAL; + float4 positionCS : SV_POSITION; + float4 texcoordAndAlpha: TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO +}; + +VaryingsSpine DepthNormalsVertex(AttributesSpine input) +{ + VaryingsSpine output = (VaryingsSpine)0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + half3 fixedNormal = half3(0, 0, -1); + half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal)); + +#ifdef _DOUBLE_SIDED_LIGHTING + // unfortunately we have to compute the sign here in the vertex shader + // instead of using VFACE in fragment shader stage. + half3 viewDirWS = UNITY_MATRIX_V[2].xyz; + half faceSign = sign(dot(viewDirWS, normalWS)); + normalWS *= faceSign; +#endif + output.normalWS = normalWS; + + output.texcoordAndAlpha.xyz = float3(TRANSFORM_TEX(input.texcoord, _MainTex).xy, 0); + output.texcoordAndAlpha.a = input.vertexColor.a; + output.positionCS = TransformObjectToHClip(input.positionOS.xyz); + return output; +} + +void DepthNormalsFragment(VaryingsSpine input, + out half4 outNormalWS : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif + ) +{ + fixed4 texureColor = tex2D(_MainTex, input.texcoordAndAlpha.xy); + clip(texureColor.a * input.texcoordAndAlpha.a - _Cutoff); + + float3 normalWS = input.normalWS; +#if defined(_GBUFFER_NORMALS_OCT) + float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms. + float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] + half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] + outNormalWS = half4(packedNormalWS, 0.0); +#else + outNormalWS = half4(normalWS, 0.0); +#endif + +#ifdef USE_WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif +} + +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl.meta new file mode 100644 index 000000000..5517cd01c --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 803855a1999ecce4081f5e0fb18c6475 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Outline-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Outline-URP.hlsl index adddea66a..ec749f38f 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Outline-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Outline-URP.hlsl @@ -10,8 +10,9 @@ CBUFFER_START(UnityPerMaterial) float4 _MainTex_ST; +#ifndef NO_CUTOFF_PARAM half _Cutoff; - +#endif float _OutlineWidth; float4 _OutlineColor; float4 _MainTex_TexelSize; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Sprite-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Sprite-URP.hlsl index 65d6959d9..cdd1d3841 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Sprite-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-Sprite-URP.hlsl @@ -7,12 +7,15 @@ CBUFFER_START(UnityPerMaterial) float4 _MainTex_ST; half4 _Color; +half4 _Black; half _Cutoff; half _ShadowAlphaCutoff; +#ifndef SPRITE_SHADER_2D half _Metallic; half _Glossiness; half _GlossMapScale; +#endif half _BumpScale; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-URP.hlsl index bb27ef3fb..1b2867099 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Input-URP.hlsl @@ -9,8 +9,12 @@ #undef LIGHTMAP_ON CBUFFER_START(UnityPerMaterial) + float4 _MainTex_ST; half _Cutoff; +half4 _Color; +half4 _Black; + CBUFFER_END sampler2D _MainTex; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Skeleton-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Skeleton-ForwardPass-URP.hlsl index 63a55e852..03fee1caf 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Skeleton-ForwardPass-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Skeleton-ForwardPass-URP.hlsl @@ -4,11 +4,16 @@ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" #include "SpineCoreShaders/Spine-Common.cginc" +#include "SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc" struct appdata { float3 pos : POSITION; half4 color : COLOR; float2 uv0 : TEXCOORD0; +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -17,6 +22,9 @@ struct VertexOutput { half4 color : COLOR0; float2 uv0 : TEXCOORD0; float4 pos : SV_POSITION; +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD1; +#endif UNITY_VERTEX_OUTPUT_STEREO }; @@ -29,17 +37,24 @@ VertexOutput vert(appdata v) { o.pos = TransformWorldToHClip(positionWS); o.uv0 = v.uv0; o.color = PMAGammaToTargetSpace(v.color); +#if defined(_TINT_BLACK_ON) + o.color *= _Color; + o.darkColor = GammaToTargetSpace( + half3(v.tintBlackRG.r, v.tintBlackRG.g, v.tintBlackB.r)) + _Black.rgb; +#endif return o; } half4 frag(VertexOutput i) : SV_Target{ float4 texColor = tex2D(_MainTex, i.uv0); - +#if defined(_TINT_BLACK_ON) + return fragTintedColor(texColor, i.darkColor, i.color, _Color.a, _Black.a); +#else #if defined(_STRAIGHT_ALPHA_INPUT) texColor.rgb *= texColor.a; #endif - return (texColor * i.color); +#endif } #endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl index e40d392b2..82eb2e348 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl @@ -1,4 +1,4 @@ -#ifndef SKELETONLIT_FORWARD_PASS_URP_INCLUDED +#ifndef SKELETONLIT_FORWARD_PASS_URP_INCLUDED #define SKELETONLIT_FORWARD_PASS_URP_INCLUDED #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" @@ -6,6 +6,7 @@ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "SpineCoreShaders/Spine-Common.cginc" #include "Spine-Common-URP.hlsl" +#include "SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc" #if (defined(_MAIN_LIGHT_SHADOWS) || defined(MAIN_LIGHT_CALCULATE_SHADOWS)) && !defined(_RECEIVE_SHADOWS_OFF) #define SKELETONLIT_RECEIVE_SHADOWS @@ -16,7 +17,10 @@ struct appdata { float3 normal : NORMAL; half4 color : COLOR; float2 uv0 : TEXCOORD0; - +#if defined(_TINT_BLACK_ON) + float2 tintBlackRG : TEXCOORD1; + float2 tintBlackB : TEXCOORD2; +#endif UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -33,14 +37,16 @@ struct VertexOutput { float3 positionWS : TEXCOORD3; half3 normalWS : TEXCOORD4; #endif - +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD5; +#endif UNITY_VERTEX_OUTPUT_STEREO }; half3 ProcessLight(float3 positionWS, half3 normalWS, uint meshRenderingLayers, int lightIndex) { Light light = GetAdditionalLight(lightIndex, positionWS); -#ifdef _LIGHT_LAYERS +#ifdef USE_LIGHT_LAYERS if (!IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) return half3(0, 0, 0); #endif @@ -119,6 +125,12 @@ VertexOutput vert(appdata v) { o.normalWS = normalWS; #endif +#if defined(_TINT_BLACK_ON) + color *= _Color; + o.darkColor = GammaToTargetSpace( + half3(v.tintBlackRG.r, v.tintBlackRG.g, v.tintBlackB.r)) + _Black.rgb; +#endif + half3 shadowedColor; #if !defined(_LIGHT_AFFECTS_ADDITIVE) if (color.a == 0) { @@ -132,17 +144,26 @@ VertexOutput vert(appdata v) { #endif // !defined(_LIGHT_AFFECTS_ADDITIVE) color.rgb *= LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor); -#if defined(SKELETONLIT_RECEIVE_SHADOWS) - o.shadowedColor = shadowedColor; -#endif // Note: ambient light is also handled via SH. half3 vertexSH; +#if IS_URP_15_OR_NEWER + #ifdef OUTPUT_SH4 + OUTPUT_SH4(positionWS, normalWS.xyz, GetWorldSpaceNormalizeViewDir(positionWS), vertexSH); + #else + OUTPUT_SH(positionWS, normalWS.xyz, GetWorldSpaceNormalizeViewDir(positionWS), vertexSH); + #endif +#else OUTPUT_SH(normalWS.xyz, vertexSH); - color.rgb += SAMPLE_GI(input.lightmapUV, vertexSH, normalWS); +#endif + half3 bakedGI = SAMPLE_GI(v.lightmapUV, vertexSH, normalWS); + color.rgb += bakedGI; o.color = color; #if defined(SKELETONLIT_RECEIVE_SHADOWS) + shadowedColor += bakedGI; + o.shadowedColor = shadowedColor; + VertexPositionInputs vertexInput; vertexInput.positionWS = positionWS; vertexInput.positionCS = o.pos; @@ -158,12 +179,17 @@ half4 frag(VertexOutput i ) : SV_Target0 { half4 tex = tex2D(_MainTex, i.uv0); - #if defined(_STRAIGHT_ALPHA_INPUT) +#if !defined(_TINT_BLACK_ON) && defined(_STRAIGHT_ALPHA_INPUT) tex.rgb *= tex.a; - #endif +#endif - if (i.color.a == 0) + if (i.color.a == 0) { +#if defined(_TINT_BLACK_ON) + return fragTintedColor(tex, i.darkColor, i.color, _Color.a, _Black.a); +#else return tex * i.color; +#endif + } #if defined(_ADDITIONAL_LIGHTS) && USE_FORWARD_PLUS // USE_FORWARD_PLUS lights need to be processed in fragment shader, @@ -180,12 +206,16 @@ half4 frag(VertexOutput i i.color.rgb = lerp(i.shadowedColor, i.color.rgb, shadowAttenuation); #endif -#ifdef _WRITE_RENDERING_LAYERS +#ifdef USE_WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif +#if defined(_TINT_BLACK_ON) + return fragTintedColor(tex, i.darkColor, i.color, _Color.a, _Black.a); +#else return tex * i.color; +#endif } #endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl new file mode 100644 index 000000000..70a817fa0 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl @@ -0,0 +1,88 @@ +#ifndef SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED +#define SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED + +#include "Include/Spine-Sprite-Common-URP.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" +#include "SpineCoreShaders/SpriteLighting.cginc" +#include "SpineCoreShaders/Spine-Common.cginc" +#include "Spine-Common-URP.hlsl" + +//#include "Include/Spine-Sprite-Common-URP.hlsl" +//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + +struct VaryingsSprite +{ + float4 pos : SV_POSITION; + fixed4 vertexColor : COLOR; + float3 texcoord : TEXCOORD0; + +#if defined(_NORMALMAP) + half4 normalWorld : TEXCOORD4; + half4 tangentWorld : TEXCOORD5; + half4 binormalWorld : TEXCOORD6; +#else + half3 normalWorld : TEXCOORD4; +#endif + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO +}; + +VaryingsSprite DepthNormalsVertexSprite(VertexInput input) +{ + VaryingsSprite output = (VaryingsSprite)0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + output.pos = calculateLocalPos(input.vertex); + output.vertexColor = calculateVertexColor(input.color); + output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); + + float backFaceSign = 1; +#if defined(FIXED_NORMALS_BACKFACE_RENDERING) + backFaceSign = calculateBackfacingSign(positionWS.xyz); +#endif + + half3 normalWS = calculateSpriteWorldNormal(input, -backFaceSign); + output.normalWorld.xyz = normalWS; +#if defined(_NORMALMAP) + output.tangentWorld.xyz = calculateWorldTangent(input.tangent); + output.binormalWorld.xyz = calculateSpriteWorldBinormal(input, output.normalWorld.xyz, output.tangentWorld.xyz, backFaceSign); +#endif + + return output; +} + +void DepthNormalsFragmentSprite(VaryingsSprite input, + out half4 outNormalWS : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif + ) +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); + ALPHA_CLIP(texureColor, input.vertexColor) + +#if defined(PER_PIXEL_LIGHTING) && defined(_NORMALMAP) + half3 normalWS = calculateNormalFromBumpMap(input.texcoord.xy, input.tangentWorld.xyz, input.binormalWorld.xyz, input.normalWorld.xyz); +#else + half3 normalWS = input.normalWorld.xyz; +#endif + +#if defined(_GBUFFER_NORMALS_OCT) + float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms. + float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] + half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] + outNormalWS = half4(packedNormalWS, 0.0); +#else + outNormalWS = half4(normalWS, 0.0); +#endif + +#ifdef USE_WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif +} + +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl.meta new file mode 100644 index 000000000..efe280cf7 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5070c54df4a943a438cfe0a199b55657 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl index 303fcd1fd..2c59395a5 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl @@ -7,7 +7,14 @@ #include "SpineCoreShaders/Spine-Common.cginc" #include "Spine-Common-URP.hlsl" -#if defined(_RIM_LIGHTING) || defined(_ADDITIONAL_LIGHTS) || defined(MAIN_LIGHT_CALCULATE_SHADOWS) +#if defined(_ALPHAPREMULTIPLY_ON) + #undef _STRAIGHT_ALPHA_INPUT +#elif !defined(_STRAIGHT_ALPHA_INPUT) + #define _STRAIGHT_ALPHA_INPUT +#endif +#include "SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc" + +#if defined(_RIM_LIGHTING) || defined(_ADDITIONAL_LIGHTS) || defined(MAIN_LIGHT_CALCULATE_SHADOWS) || defined(USE_LIGHT_COOKIES) #define NEEDS_POSITION_WS #endif @@ -38,6 +45,9 @@ struct VertexOutputLWRP #if defined(NEEDS_POSITION_WS) float4 positionWS : TEXCOORD8; #endif +#if defined(_TINT_BLACK_ON) + float3 darkColor : TEXCOORD9; +#endif UNITY_VERTEX_OUTPUT_STEREO }; @@ -99,7 +109,7 @@ half3 ProcessLightPBRSimplified(InputData inputData, BRDFData brdfData, half4 sh #else Light light = GetAdditionalLight(lightIndex, inputData.positionWS); #endif -#ifdef _LIGHT_LAYERS +#ifdef USE_LIGHT_LAYERS if (!IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) return half3(0, 0, 0); #endif @@ -109,7 +119,11 @@ half3 ProcessLightPBRSimplified(InputData inputData, BRDFData brdfData, half4 sh half4 LightweightFragmentPBRSimplified(InputData inputData, half4 texAlbedoAlpha, half metallic, half3 specular, half smoothness, half3 emission, half4 vertexColor) { +#if !defined(_TINT_BLACK_ON) half4 albedo = texAlbedoAlpha * vertexColor; +#else + half4 albedo = texAlbedoAlpha; +#endif BRDFData brdfData; half ignoredAlpha = 1; // ignore alpha, otherwise @@ -122,6 +136,10 @@ half4 LightweightFragmentPBRSimplified(InputData inputData, half4 texAlbedoAlpha #else Light mainLight = GetMainLight(); #endif +#if defined(USE_LIGHT_COOKIES) + half3 cookieColor = SampleMainLightCookie(inputData.positionWS); + mainLight.color *= cookieColor; +#endif half3 finalColor = inputData.bakedGI * albedo.rgb; finalColor += LightingPhysicallyBased(brdfData, mainLight, inputData.normalWS, inputData.viewDirectionWS); @@ -169,7 +187,7 @@ half3 ProcessLightLambert(InputData inputData, half4 shadowMask, uint meshRender Light light = GetAdditionalLight(lightIndex, inputData.positionWS); #endif -#ifdef _LIGHT_LAYERS +#ifdef USE_LIGHT_LAYERS if (!IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) return half3(0, 0, 0); #endif @@ -185,7 +203,11 @@ half3 ProcessLightLambert(InputData inputData, half4 shadowMask, uint meshRender half4 LightweightFragmentBlinnPhongSimplified(InputData inputData, half4 texDiffuseAlpha, half3 emission, half4 vertexColor) { +#if !defined(_TINT_BLACK_ON) half4 diffuse = texDiffuseAlpha * vertexColor; +#else + half4 diffuse = texDiffuseAlpha; +#endif #ifndef _MAIN_LIGHT_VERTEX #if (defined(_MAIN_LIGHT_SHADOWS) || defined(MAIN_LIGHT_CALCULATE_SHADOWS)) && !defined(_RECEIVE_SHADOWS_OFF) @@ -193,6 +215,11 @@ half4 LightweightFragmentBlinnPhongSimplified(InputData inputData, half4 texDiff #else Light mainLight = GetMainLight(); #endif +#if defined(USE_LIGHT_COOKIES) + half3 cookieColor = SampleMainLightCookie(inputData.positionWS); + mainLight.color *= cookieColor; +#endif + half3 diffuseLighting = inputData.bakedGI; half3 attenuation = mainLight.distanceAttenuation* mainLight.shadowAttenuation; @@ -246,6 +273,10 @@ VertexOutputLWRP ForwardPassVertexSprite(VertexInput input) output.pos = calculateLocalPos(input.vertex); output.vertexColor = calculateVertexColor(input.color); +#if defined(_TINT_BLACK_ON) + output.darkColor = GammaToTargetSpace( + half3(input.tintBlackRG.r, input.tintBlackRG.g, input.tintBlackB.r)) + _Black.rgb; +#endif output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); float3 positionWS = TransformObjectToWorld(input.vertex.xyz); @@ -280,7 +311,15 @@ VertexOutputLWRP ForwardPassVertexSprite(VertexInput input) output.fogFactorAndVertexLight.x = fogFactor; #endif +#if IS_URP_15_OR_NEWER + #ifdef OUTPUT_SH4 + OUTPUT_SH4(positionWS, normalWS.xyz, GetWorldSpaceNormalizeViewDir(positionWS), output.vertexSH); + #else + OUTPUT_SH(positionWS, normalWS.xyz, GetWorldSpaceNormalizeViewDir(positionWS), output.vertexSH); + #endif +#else OUTPUT_SH(normalWS.xyz, output.vertexSH); +#endif return output; } @@ -293,9 +332,15 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); - RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP + + RETURN_UNLIT_IF_ADDITIVE_SLOT_TINT(texureColor, input.vertexColor, input.darkColor, _Color.a, _Black.a) // shall be called before ALPHA_CLIP + ALPHA_CLIP(texureColor, input.vertexColor) +#if defined(_TINT_BLACK_ON) + texureColor = fragTintedColor(texureColor, input.darkColor, input.vertexColor, _Color.a, _Black.a); +#endif + // fill out InputData struct InputData inputData; #if !defined(_RECEIVE_SHADOWS_OFF) @@ -321,13 +366,12 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input inputData.normalWS = normalWS; inputData.bakedGI = SAMPLE_GI(input.lightmapUV, input.vertexSH, inputData.normalWS); -#if defined(_RIM_LIGHTING) || defined(_ADDITIONAL_LIGHTS) +#if defined(_RIM_LIGHTING) || defined(_ADDITIONAL_LIGHTS) || defined(USE_LIGHT_COOKIES) inputData.positionWS = input.positionWS.rgb; #endif #if defined(_ADDITIONAL_LIGHTS) && USE_FORWARD_PLUS inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.pos); -#else - inputData.normalizedScreenSpaceUV = 0; + // note: don't assign normalizedScreenSpaceUV otherwise since old URP versions are missing this member variable #endif #if defined(SPECULAR) diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc new file mode 100644 index 000000000..0bfcc57ec --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc @@ -0,0 +1,3 @@ +// Adapt this path accordingly if you have unpacked the Spine directory to another location. +//#include "Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc" +#include "Packages/com.esotericsoftware.spine.spine-unity/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc.meta new file mode 100644 index 000000000..5c69d41b8 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Skeleton-Tint-Common.cginc.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 17717bcd66ca5ee4388ec779392904c3 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Outline/Spine-Skeleton-OutlineOnly-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Outline/Spine-Skeleton-OutlineOnly-URP.shader index 0c01bb842..5f58688d7 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Outline/Spine-Skeleton-OutlineOnly-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Outline/Spine-Skeleton-OutlineOnly-URP.shader @@ -49,6 +49,7 @@ Shader "Universal Render Pipeline/Spine/Outline/Skeleton-OutlineOnly" { #define fixed4 half4 #define fixed3 half3 #define fixed half + #define NO_CUTOFF_PARAM #include "../Include/Spine-Input-Outline-URP.hlsl" #include "../Include/Spine-Outline-Pass-URP.hlsl" ENDHLSL diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Skeleton-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Skeleton-URP.shader index e8c3591d2..93f60c133 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Skeleton-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Skeleton-URP.shader @@ -3,6 +3,10 @@ Shader "Universal Render Pipeline/Spine/Skeleton" { _Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.1 [NoScaleOffset] _MainTex("Main Texture", 2D) = "black" {} [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 + [Toggle(_ZWRITE)] _ZWrite("Depth Write", Float) = 0.0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Color(" Light Color", Color) = (1,1,1,1) + _Black(" Dark Color", Color) = (0,0,0,0) [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8 // Set to Always as default } @@ -26,7 +30,7 @@ Shader "Universal Render Pipeline/Spine/Skeleton" { Name "Forward" Tags{"LightMode" = "UniversalForward"} - ZWrite Off + ZWrite[_ZWrite] Cull Off Blend One OneMinusSrcAlpha @@ -46,6 +50,7 @@ Shader "Universal Render Pipeline/Spine/Skeleton" { //-------------------------------------- // Spine related keywords #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT + #pragma shader_feature _TINT_BLACK_ON #pragma vertex vert #pragma fragment frag diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-SkeletonLit-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-SkeletonLit-URP.shader index b1b4625a0..301c9b5b5 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-SkeletonLit-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-SkeletonLit-URP.shader @@ -1,13 +1,17 @@ -Shader "Universal Render Pipeline/Spine/Skeleton Lit" { +Shader "Universal Render Pipeline/Spine/Skeleton Lit" { Properties { _Cutoff ("Shadow alpha cutoff", Range(0,1)) = 0.1 [NoScaleOffset] _MainTex ("Main Texture", 2D) = "black" {} [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 + [Toggle(_ZWRITE)] _ZWrite("Depth Write", Float) = 0.0 [Toggle(_RECEIVE_SHADOWS)] _ReceiveShadows("Receive Shadows", Int) = 0 [Toggle(_DOUBLE_SIDED_LIGHTING)] _DoubleSidedLighting("Double-Sided Lighting", Int) = 0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Color(" Light Color", Color) = (1,1,1,1) + _Black(" Dark Color", Color) = (0,0,0,0) [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 - [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 0.0 // Disabled stencil test by default + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 8 // Set to Always as default } SubShader { @@ -16,7 +20,7 @@ Tags { "RenderPipeline" = "UniversalPipeline" "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } LOD 100 Cull Off - ZWrite Off + ZWrite[_ZWrite] Blend One OneMinusSrcAlpha Stencil { @@ -29,7 +33,7 @@ Name "ForwardLit" Tags{"LightMode" = "UniversalForward"} - ZWrite Off + ZWrite[_ZWrite] Cull Off Blend One OneMinusSrcAlpha @@ -47,6 +51,7 @@ #pragma multi_compile _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE #pragma multi_compile _ _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON // Farward+ renderer keywords #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile _ _FORWARD_PLUS @@ -119,7 +124,7 @@ ENDHLSL } - Pass + Pass { Name "DepthOnly" Tags{"LightMode" = "DepthOnly"} @@ -153,6 +158,40 @@ #include "Include/Spine-DepthOnlyPass-URP.hlsl" ENDHLSL } + + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags{"LightMode" = "DepthNormals"} + + ZWrite On + + HLSLPROGRAM + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _ _DOUBLE_SIDED_LIGHTING + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + #include "Include/Spine-Input-URP.hlsl" + #include "Include/Spine-DepthNormalsPass-URP.hlsl" + ENDHLSL + } } FallBack "Hidden/InternalErrorShader" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader index 73f6232d4..d411f1e28 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader @@ -39,13 +39,15 @@ Shader "Universal Render Pipeline/Spine/Sprite" _BlendAmount("Blend", Range(0,1)) = 0.0 [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0 + [MaterialToggle(_TINT_BLACK_ON)] _TintBlack("Tint Black", Float) = 0 + _Black("Dark Color", Color) = (0,0,0,0) [HideInInspector] _SrcBlend("__src", Float) = 1.0 [HideInInspector] _DstBlend("__dst", Float) = 0.0 [HideInInspector] _RenderQueue("__queue", Float) = 0.0 [HideInInspector] _Cull("__cull", Float) = 0.0 [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 - [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 0.0 // Disabled stencil test by default + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 8 // Set to Always as default } SubShader @@ -95,6 +97,7 @@ Shader "Universal Render Pipeline/Spine/Sprite" #pragma shader_feature _FOG #pragma shader_feature _RECEIVE_SHADOWS_OFF #pragma shader_feature _LIGHT_AFFECTS_ADDITIVE + #pragma shader_feature _TINT_BLACK_ON #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog @@ -107,6 +110,8 @@ Shader "Universal Render Pipeline/Spine/Sprite" #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE + #pragma multi_compile_fragment _ _LIGHT_COOKIES + // Farward+ renderer keywords #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile _ _FORWARD_PLUS @@ -124,7 +129,6 @@ Shader "Universal Render Pipeline/Spine/Sprite" //-------------------------------------- // Spine related keywords - #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT #pragma vertex ForwardPassVertexSprite #pragma fragment ForwardPassFragmentSprite @@ -209,6 +213,42 @@ Shader "Universal Render Pipeline/Spine/Sprite" ENDHLSL } + // This pass is used when drawing to a _CameraNormalsTexture texture + Pass + { + Name "DepthNormals" + Tags{"LightMode" = "DepthNormals"} + + ZWrite On + Cull[_Cull] + + HLSLPROGRAM + #pragma vertex DepthNormalsVertexSprite + #pragma fragment DepthNormalsFragmentSprite + + // ------------------------------------- + // Material Keywords + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ALPHA_CLIP + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + #include "Include/Spine-Input-Sprite-URP.hlsl" + #include "Include/Spine-Sprite-DepthNormalsPass-URP.hlsl" + ENDHLSL + } + Pass { Name "Unlit" @@ -220,10 +260,6 @@ Shader "Universal Render Pipeline/Spine/Sprite" HLSLPROGRAM #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ALPHAPREMULTIPLY_VERTEX_ONLY _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #if defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) || defined(_ALPHABLEND_ON) - #define _STRAIGHT_ALPHA_INPUT - #endif - #pragma prefer_hlslcc gles #pragma vertex vert #pragma fragment frag diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json index b9cedf465..38fa175df 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.urp-shaders", "displayName": "Spine Universal RP Shaders", "description": "This plugin provides universal render pipeline (URP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.10", + "version": "4.1.23", "unity": "2019.3", "author": { "name": "Esoteric Software", @@ -19,5 +19,12 @@ "render pipeline", "shaders" ], - "hideInEditor": false + "hideInEditor": false, + "samples": [ + { + "displayName": "Examples", + "description": "Contains examples for 2D and 3D Universal RP Spine shaders", + "path": "Samples~/Examples" + } + ] } diff --git a/spine-unity/README.md b/spine-unity/README.md index dba132794..6d869e149 100644 --- a/spine-unity/README.md +++ b/spine-unity/README.md @@ -22,7 +22,7 @@ Unity's physics components do not support dynamically assigned vertices so they ## Unity version -spine-unity is compatible with Unity 2017.1-2022.1. +spine-unity is compatible with Unity 2017.1-2023.1. ## Usage