Merge branch '4.2' into 4.3-beta

# Conflicts:
#	spine-ts/package.json
#	spine-unity/Assets/Spine/package.json
This commit is contained in:
Nathan Sweet 2025-05-09 17:05:41 -04:00
commit 7be6dac44a
499 changed files with 21846 additions and 403749 deletions

View File

@ -95,7 +95,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: gdextension-macos-${{ env.GODOT_TAG }}
path: spine-godot/example-v4-extension/bin/macos/macos.framework/*
path: spine-godot/example-v4-extension/bin/macos/**/*
build-ios:
runs-on: macos-latest
@ -117,7 +117,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: gdextension-ios-${{ env.GODOT_TAG }}
path: spine-godot/example-v4-extension/bin/ios/*.xcframework/**/*
path: spine-godot/example-v4-extension/bin/ios/**/*
build-android:
runs-on: ubuntu-latest
@ -252,7 +252,7 @@ jobs:
# Move artifacts to their correct locations
mv gdextension-windows-$GODOT_TAG/* bin/windows/
mv gdextension-linux-x86_64-$GODOT_TAG/* bin/linux/
mv gdextension-macos-$GODOT_TAG/* bin/macos/macos.framework/
mv gdextension-macos-$GODOT_TAG/* bin/macos/
mv gdextension-ios-$GODOT_TAG/* bin/ios/
mv gdextension-android-$GODOT_TAG/* bin/android/
mv gdextension-web-$GODOT_TAG/* bin/web/

1
.gitignore vendored
View File

@ -144,6 +144,7 @@ spine-ts/spine-core/dist
spine-ts/spine-canvas/dist
spine-ts/spine-webgl/dist
spine-ts/spine-player/dist
spine-ts/spine-webcomponents/dist
spine-ts/spine-threejs/dist
spine-ts/spine-phaser-v3/dist
spine-ts/spine-phaser-v4/dist

View File

@ -409,291 +409,110 @@ cp -f ../snowglobe/export/* "$ROOT/spine-sfml/cpp/data/"
cp -f ../cloud-pot/export/* "$ROOT/spine-sfml/cpp/data/"
echo "spine-ts"
rm "$ROOT/spine-ts/spine-webgl/example/assets/"*
cp -f ../coin/export/coin-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
rm "$ROOT/spine-ts/assets/"*
cp -f ../cloud-pot/export/cloud-pot.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../celestial-circus/export/celestial-circus-pro.json "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/celestial-circus-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/celestial-circus-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/celestial-circus-pma.png "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/celestial-circus.atlas "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/celestial-circus.png "$ROOT/spine-ts/assets/"
cp -f ../snowglobe/export/snowglobe-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../snowglobe/export/snowglobe-pma* "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../chibi-stickers/export/chibi-stickers.json "$ROOT/spine-ts/assets/"
cp -f ../chibi-stickers/export/chibi-stickers.skel "$ROOT/spine-ts/assets/"
cp -f ../chibi-stickers/export/chibi-stickers.atlas "$ROOT/spine-ts/assets/"
cp -f ../chibi-stickers/export/chibi-stickers-pma* "$ROOT/spine-ts/assets/"
cp -f ../goblins/export/goblins-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../goblins/export/goblins-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../goblins/export/goblins-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../goblins/export/goblins-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.png "$ROOT/spine-ts/assets/"
cp -f ../cloud-pot/export/cloud-pot.atlas "$ROOT/spine-ts/assets/"
cp -f ../cloud-pot/export/cloud-pot.png "$ROOT/spine-ts/assets/"
cp -f ../dragon/export/dragon-ess.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../dragon/export/dragon-ess.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../dragon/export/dragon-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../dragon/export/dragon-pma*.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../coin/export/coin-pro.json "$ROOT/spine-ts/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../raptor/export/raptor-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../raptor/export/raptor-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../dragon/export/dragon-ess.skel "$ROOT/spine-ts/assets/"
cp -f ../dragon/export/dragon-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../dragon/export/dragon-pma*.png "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../goblins/export/goblins-pro.json "$ROOT/spine-ts/assets/"
cp -f ../goblins/export/goblins-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../goblins/export/goblins-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../goblins/export/goblins-pma.png "$ROOT/spine-ts/assets/"
cp -f ../tank/export/tank-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../tank/export/tank-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../tank/export/tank-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../tank/export/tank-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.json "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match.atlas "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match.png "$ROOT/spine-ts/assets/"
cp -f ../vine/export/vine-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../vine/export/vine-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../vine/export/vine-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../vine/export/vine-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../owl/export/owl-pro.json "$ROOT/spine-ts/assets/"
cp -f ../owl/export/owl-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../owl/export/owl-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../owl/export/owl-pma.png "$ROOT/spine-ts/assets/"
cp -f ../owl/export/owl-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../owl/export/owl-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../owl/export/owl-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../owl/export/owl-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor-pma.png "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ts/assets/"
cp -f ../raptor/export/raptor.png "$ROOT/spine-ts/assets/"
cp -f ../raptor/images/raptor-jaw-tooth.png "$ROOT/spine-ts/assets/"
cp -f ../stretchyman/export/stretchyman-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../sack/export/sack-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../sack/export/sack-pma.png "$ROOT/spine-ts/assets/"
cp -f ../sack/export/sack.atlas "$ROOT/spine-ts/assets/"
cp -f ../sack/export/sack.png "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../snowglobe/export/snowglobe-pma* "$ROOT/spine-ts/assets/"
cp -f ../snowglobe/export/snowglobe* "$ROOT/spine-ts/assets/"
cp -f ../sack/export/sack-pro.json "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../sack/export/sack-pma.atlas "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../sack/export/sack-pma.png "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-ess.json "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-webgl/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.json "$ROOT/spine-ts/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/assets/"
rm "$ROOT/spine-ts/spine-canvas/example/assets/"*
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-canvas/example/assets/"
cp -f ../spineboy/export/spineboy-ess.json "$ROOT/spine-ts/spine-canvas/example/assets/"
cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/spine-canvas/example/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-canvas/example/assets/"
cp -f ../tank/export/tank-pro.json "$ROOT/spine-ts/assets/"
cp -f ../tank/export/tank-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../tank/export/tank-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../tank/export/tank-pma.png "$ROOT/spine-ts/assets/"
rm "$ROOT/spine-ts/spine-canvaskit/example/assets/"*
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../vine/export/vine-pro.json "$ROOT/spine-ts/assets/"
cp -f ../vine/export/vine-pro.skel "$ROOT/spine-ts/assets/"
cp -f ../vine/export/vine-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../vine/export/vine-pma.png "$ROOT/spine-ts/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../mix-and-match/export/mix-and-match.atlas "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../mix-and-match/export/mix-and-match.png "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../celestial-circus/export/celestial-circus-pro.json "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../celestial-circus/export/celestial-circus.atlas "$ROOT/spine-ts/spine-canvaskit/example/assets/"
cp -f ../celestial-circus/export/celestial-circus.png "$ROOT/spine-ts/spine-canvaskit/example/assets/"
rm "$ROOT/spine-ts/spine-threejs/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../raptor/export/raptor.png "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../coin/export/coin-pro.json "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-threejs/example/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-threejs/example/assets/"
rm "$ROOT/spine-ts/spine-player/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-player/example/assets/"
cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/spine-player/example/assets/"
cp -f ../raptor/export/raptor-pma.png "$ROOT/spine-ts/spine-player/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-player/example/assets/"
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 ../celestial-circus/export/* "$ROOT/spine-ts/spine-player/example/assets/"
rm "$ROOT/spine-ts/spine-phaser-v3/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../raptor/export/raptor-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../windmill/export/windmill-ess.json "$ROOT/spine-ts/assets/"
cp -f ../windmill/export/windmill-pma.atlas "$ROOT/spine-ts/assets/"
cp -f ../windmill/export/windmill-pma.png "$ROOT/spine-ts/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/typescript/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.json "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../sack/export/sack-pro.json "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../sack/export/sack.atlas "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../sack/export/sack.png "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.json "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
cp -f ../snowglobe/export/snowglobe* "$ROOT/spine-ts/spine-phaser-v3/example/assets/"
rm "$ROOT/spine-ts/spine-phaser-v4/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../raptor/export/raptor-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../raptor/export/raptor-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/typescript/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.json "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../sack/export/sack-pro.json "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../sack/export/sack.atlas "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../sack/export/sack.png "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.json "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
cp -f ../snowglobe/export/snowglobe* "$ROOT/spine-ts/spine-phaser-v4/example/assets/"
rm "$ROOT/spine-ts/spine-pixi-v7/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../raptor/export/raptor.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../raptor/images/raptor-jaw-tooth.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/typescript/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.json "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../sack/export/sack-pro.json "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../sack/export/sack-pma.atlas "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../sack/export/sack-pma.png "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.json "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
cp -f ../snowglobe/export/snowglobe-pma* "$ROOT/spine-ts/spine-pixi-v7/example/assets/"
rm "$ROOT/spine-ts/spine-pixi-v8/example/assets/"*
cp -f ../raptor/export/raptor-pro.json "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../raptor/export/raptor.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../raptor/export/raptor.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../raptor/images/raptor-jaw-tooth.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy-pro.json "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../spineboy/export/spineboy-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/typescript/assets/"
cp -f ../spineboy/export/spineboy-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/typescript/assets/"
cp -f ../coin/export/coin-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../coin/export/coin-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../coin/export/coin-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../dragon/export/dragon-ess.json "$ROOT/spine-pixi-v8/example/assets/"
cp -f ../dragon/export/dragon-ess.skel "$ROOT/spine-pixi-v8/example/assets/"
cp -f ../dragon/export/dragon.atlas "$ROOT/spine-pixi-v8/example/assets/"
cp -f ../dragon/export/dragon*.png "$ROOT/spine-pixi-v8/example/assets/"
cp -f ../stretchyman/export/stretchyman-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../stretchyman/export/stretchyman-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../mix-and-match/export/mix-and-match-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../celestial-circus/export/* "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.json "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../cloud-pot/export/cloud-pot.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../cloud-pot/export/cloud-pot-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../sack/export/sack-pro.json "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../sack/export/sack-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../sack/export/sack-pma.atlas "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../sack/export/sack-pma.png "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.json "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../snowglobe/export/snowglobe-pro.skel "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
cp -f ../snowglobe/export/snowglobe-pma* "$ROOT/spine-ts/spine-pixi-v8/example/assets/"
echo "spine-monogame"
rm "$ROOT/spine-monogame/spine-monogame-example/data/"*

View File

@ -852,10 +852,11 @@ spAnimationState_addAnimation(spAnimationState *self, int trackIndex, spAnimatio
if (!last) {
_spAnimationState_setCurrent(self, trackIndex, entry, 1);
_spEventQueue_drain(internal->queue);
if (delay < 0) delay = 0;
} else {
last->next = entry;
entry->previous = last;
if (delay <= 0) delay += spTrackEntry_getTrackComplete(last) - entry->mixDuration;
if (delay <= 0) delay = MAX(delay + spTrackEntry_getTrackComplete(last) - entry->mixDuration, 0);
}
entry->delay = delay;
@ -872,7 +873,7 @@ spTrackEntry *spAnimationState_setEmptyAnimation(spAnimationState *self, int tra
spTrackEntry *
spAnimationState_addEmptyAnimation(spAnimationState *self, int trackIndex, float mixDuration, float delay) {
spTrackEntry *entry = spAnimationState_addAnimation(self, trackIndex, SP_EMPTY_ANIMATION, 0, delay);
if (delay <= 0) entry->delay += entry->mixDuration - mixDuration;
if (delay <= 0) entry->delay = MAX(entry->delay + entry->mixDuration - mixDuration, 0);
entry->mixDuration = mixDuration;
entry->trackEnd = mixDuration;
return entry;
@ -1061,7 +1062,12 @@ float spTrackEntry_getTrackComplete(spTrackEntry *entry) {
void spTrackEntry_setMixDuration(spTrackEntry *entry, float mixDuration, float delay) {
entry->mixDuration = mixDuration;
if (entry->previous && delay <= 0) delay += spTrackEntry_getTrackComplete(entry) - mixDuration;
if (delay <= 0) {
if (entry->previous)
delay = MAX(delay + spTrackEntry_getTrackComplete(entry->previous) - mixDuration, 0);
else
delay = 0;
}
entry->delay = delay;
}

View File

@ -39,6 +39,9 @@ namespace spine {
template<typename T>
class SP_API Vector : public SpineObject {
public:
using size_type = size_t;
using value_type = T;
Vector() : _size(0), _capacity(0), _buffer(NULL) {
}
@ -77,7 +80,11 @@ namespace spine {
size_t oldSize = _size;
_size = newSize;
if (_capacity < newSize) {
_capacity = (int) (_size * 1.75f);
if (_capacity == 0) {
_capacity = _size;
} else {
_capacity = (int) (_size * 1.75f);
}
if (_capacity < 8) _capacity = 8;
_buffer = spine::SpineExtension::realloc<T>(_buffer, _capacity, __FILE__, __LINE__);
}
@ -114,14 +121,14 @@ namespace spine {
}
}
inline void addAll(Vector<T> &inValue) {
inline void addAll(const Vector<T> &inValue) {
ensureCapacity(this->size() + inValue.size());
for (size_t i = 0; i < inValue.size(); i++) {
add(inValue[i]);
}
}
inline void clearAndAddAll(Vector<T> &inValue) {
inline void clearAndAddAll(const Vector<T> &inValue) {
this->clear();
this->addAll(inValue);
}
@ -168,6 +175,12 @@ namespace spine {
return _buffer[inIndex];
}
inline const T &operator[](size_t inIndex) const {
assert(inIndex < _size);
return _buffer[inIndex];
}
inline friend bool operator==(Vector<T> &lhs, Vector<T> &rhs) {
if (lhs.size() != rhs.size()) {
return false;
@ -186,6 +199,13 @@ namespace spine {
return !(lhs == rhs);
}
Vector &operator=(const Vector &inVector) {
if (this != &inVector) {
clearAndAddAll(inVector);
}
return *this;
}
inline T *buffer() {
return _buffer;
}
@ -219,7 +239,6 @@ namespace spine {
buffer->~T();
}
// Vector &operator=(const Vector &inVector) {};
};
}

View File

@ -164,7 +164,12 @@ void TrackEntry::setMixDuration(float inValue) { _mixDuration = inValue; }
void TrackEntry::setMixDuration(float mixDuration, float delay) {
_mixDuration = mixDuration;
if (_previous && delay <= 0) delay += _previous->getTrackComplete() - mixDuration;
if (delay <= 0) {
if (_previous != nullptr)
delay = MathUtil::max(delay + _previous->getTrackComplete() - mixDuration, 0.0f);
else
delay = 0;
}
this->_delay = delay;
}
@ -606,10 +611,11 @@ TrackEntry *AnimationState::addAnimation(size_t trackIndex, Animation *animation
if (last == NULL) {
setCurrent(trackIndex, entry, true);
_queue->drain();
if (delay < 0) delay = 0;
} else {
last->_next = entry;
entry->_previous = last;
if (delay <= 0) delay += last->getTrackComplete() - entry->_mixDuration;
if (delay <= 0) delay = MathUtil::max(delay + last->getTrackComplete() - entry->_mixDuration, 0.0f);
}
entry->_delay = delay;
@ -625,7 +631,7 @@ TrackEntry *AnimationState::setEmptyAnimation(size_t trackIndex, float mixDurati
TrackEntry *AnimationState::addEmptyAnimation(size_t trackIndex, float mixDuration, float delay) {
TrackEntry *entry = addAnimation(trackIndex, AnimationState::getEmptyAnimation(), false, delay);
if (delay <= 0) entry->_delay += entry->_mixDuration - mixDuration;
if (delay <= 0) entry->_delay = MathUtil::max(entry->_delay + entry->_mixDuration - mixDuration, 0.0f);
entry->_mixDuration = mixDuration;
entry->_trackEnd = mixDuration;
return entry;

View File

@ -46,6 +46,23 @@
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64"
}
},
{
"type": "cppvsdbg",
"request": "launch",
"name": "debug scene extension",
"program": "godot/bin/godot.windows.editor.dev.x86_64.exe",
"args": ["--path", "example-v4-extension", "examples/13-load-from-disk/load-from-disk.tscn"],
"cwd": "${workspaceFolder}",
"preLaunchTask": "build-extension",
"linux": {
"type": "lldb",
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64"
},
"osx": {
"type": "lldb",
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64"
}
},
{
"type": "cppvsdbg",
"request": "launch",

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleExecutable</key>
<string>${BUNDLE_LIBRARY}</string>
<key>CFBundleName</key>
<string>${BUNDLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${BUNDLE_IDENTIFIER}</string>
<key>CFBundleVersion</key>
<string>${BUNDLE_VERSION}</string>
<key>CFBundleShortVersionString</key>
<string>${BUNDLE_VERSION}</string>
<key>MinimumOSVersion</key>
<string>${MIN_IOS_VERSION}</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
</dict>
</plist>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleExecutable</key>
<string>${BUNDLE_LIBRARY}</string>
<key>CFBundleName</key>
<string>${BUNDLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${BUNDLE_IDENTIFIER}</string>
<key>CFBundleVersion</key>
<string>${BUNDLE_VERSION}</string>
<key>CFBundleShortVersionString</key>
<string>${BUNDLE_VERSION}</string>
<key>LSMinimumSystemVersion</key>
<string>${MIN_MACOS_VERSION}</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
</dict>
</plist>

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python
import os
import sys
import subprocess
from methods import print_error
@ -112,12 +113,13 @@ if env["target"] in ["editor", "template_debug"]:
except AttributeError:
print("Not including class reference as we're targeting a pre-4.3 baseline.")
file = "{}{}{}".format(libname, env["suffix"], env["SHLIBSUFFIX"])
file = "lib{}{}{}".format(libname, env["suffix"], env["SHLIBSUFFIX"])
filepath = ""
if env["platform"] == "macos" or env["platform"] == "ios":
filepath = "{}.framework/".format(env["platform"])
file = "{}.{}.{}".format(libname, env["platform"], env["target"])
filepath = "lib{}.{}.{}.framework/".format(libname, env["platform"], env["target"])
file = "lib{}.{}.{}".format(libname, env["platform"], env["target"])
env.Append(LINKFLAGS=["-Wl,-install_name,@rpath/{}{}".format(filepath, file)])
libraryfile = "bin/{}/{}{}".format(env["platform"], filepath, file)
library = env.SharedLibrary(
@ -125,9 +127,40 @@ library = env.SharedLibrary(
source=sources,
)
copy = env.InstallAs("{}/bin/{}/{}lib{}".format(projectdir, env["platform"], filepath, file), library)
if env["platform"] == "macos" or env["platform"] == "ios":
plist_subst = {
"${BUNDLE_LIBRARY}": file,
"${BUNDLE_NAME}": "spine-godot",
"${BUNDLE_IDENTIFIER}": "com.esotericsoftware.spine.spine-godot",
"${BUNDLE_VERSION}": subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).decode('utf-8').strip().split('-')[0] + '.0',
"${MIN_MACOS_VERSION}": "10.12",
"${MIN_IOS_VERSION}": "12.0"
}
if env["platform"] == "macos":
plist_file = "bin/macos/{}Resources/Info.plist".format(filepath)
plist = env.Substfile(
target=plist_file,
source="Info.macos.plist",
SUBST_DICT=plist_subst
)
elif env["platform"] == "ios":
plist_file = "bin/ios/{}Info.plist".format(filepath)
plist = env.Substfile(
target=plist_file,
source="Info.ios.plist",
SUBST_DICT=plist_subst
)
env.Depends(library, plist)
copy = env.InstallAs("{}/{}".format(projectdir, libraryfile), library)
default_args = [library, copy]
if env["platform"] == "macos" or env["platform"] == "ios":
copy_plist = env.InstallAs("{}/{}".format(projectdir, plist_file), plist_file)
default_args.append(copy_plist)
if localEnv.get("compiledb", False):
default_args += [compilation_db]
Default(*default_args)

View File

@ -57,87 +57,7 @@ echo "CPUS: $cpus"
pushd ..
if [ "$raw_platform" == "ios" ]; then
BINDIR="example-v4-extension/bin/ios"
mkdir -p $BINDIR
# Step 1: Build simulator binaries
echo "Building for iOS simulator..."
scons -j $cpus $options $platform target=template_debug arch=universal ios_simulator=yes
mv $BINDIR/ios.framework/libspine_godot.ios.template_debug $BINDIR/libspine_godot.ios.template_debug.simulator.a
scons -j $cpus $options $platform target=template_release arch=universal ios_simulator=yes
mv $BINDIR/ios.framework/libspine_godot.ios.template_release $BINDIR/libspine_godot.ios.template_release.simulator.a
# Step 2: Build device binaries
echo "Building for iOS device..."
scons -j $cpus $options $platform target=template_debug arch=arm64 ios_simulator=no
mv $BINDIR/ios.framework/libspine_godot.ios.template_debug $BINDIR/libspine_godot.ios.template_debug.a
scons -j $cpus $options $platform target=template_release arch=arm64 ios_simulator=no
mv $BINDIR/ios.framework/libspine_godot.ios.template_release $BINDIR/libspine_godot.ios.template_release.a
# Step 3: Create xcframeworks
echo "Creating xcframeworks..."
xcodebuild -create-xcframework \
-library $BINDIR/libspine_godot.ios.template_debug.a \
-library $BINDIR/libspine_godot.ios.template_debug.simulator.a \
-output $BINDIR/libspine_godot.ios.template_debug.xcframework
xcodebuild -create-xcframework \
-library $BINDIR/libspine_godot.ios.template_release.a \
-library $BINDIR/libspine_godot.ios.template_release.simulator.a \
-output $BINDIR/libspine_godot.ios.template_release.xcframework
# Cleanup intermediate files
rm -f $BINDIR/*.a
rm -rf $BINDIR/ios.framework
elif [ "$raw_platform" == "macos" ]; then
BINDIR="example-v4-extension/bin/macos/macos.framework"
TMPDIR="example-v4-extension/bin/macos/tmp"
mkdir -p $BINDIR $TMPDIR
# Build x86_64 binaries
echo "Building for macOS x86_64..."
scons -j $cpus $options $platform target=editor arch=x86_64
mv $BINDIR/libspine_godot.macos.editor $TMPDIR/libspine_godot.macos.editor.x86_64
scons -j $cpus $options $platform target=template_debug arch=x86_64
mv $BINDIR/libspine_godot.macos.template_debug $TMPDIR/libspine_godot.macos.template_debug.x86_64
scons -j $cpus $options $platform target=template_release arch=x86_64
mv $BINDIR/libspine_godot.macos.template_release $TMPDIR/libspine_godot.macos.template_release.x86_64
# Build arm64 binaries
echo "Building for macOS arm64..."
scons -j $cpus $options $platform target=editor arch=arm64
mv $BINDIR/libspine_godot.macos.editor $TMPDIR/libspine_godot.macos.editor.arm64
scons -j $cpus $options $platform target=template_debug arch=arm64
mv $BINDIR/libspine_godot.macos.template_debug $TMPDIR/libspine_godot.macos.template_debug.arm64
scons -j $cpus $options $platform target=template_release arch=arm64
mv $BINDIR/libspine_godot.macos.template_release $TMPDIR/libspine_godot.macos.template_release.arm64
# Create universal binaries
echo "Creating universal binaries..."
lipo -create \
$TMPDIR/libspine_godot.macos.editor.x86_64 \
$TMPDIR/libspine_godot.macos.editor.arm64 \
-output $BINDIR/libspine_godot.macos.editor
lipo -create \
$TMPDIR/libspine_godot.macos.template_debug.x86_64 \
$TMPDIR/libspine_godot.macos.template_debug.arm64 \
-output $BINDIR/libspine_godot.macos.template_debug
lipo -create \
$TMPDIR/libspine_godot.macos.template_release.x86_64 \
$TMPDIR/libspine_godot.macos.template_release.arm64 \
-output $BINDIR/libspine_godot.macos.template_release
# Cleanup intermediate files
rm -rf $TMPDIR
elif [ "$raw_platform" == "web" ]; then
if [ "$raw_platform" == "web" ]; then
BINDIR="example-v4-extension/bin/web"
mkdir -p $BINDIR
@ -150,10 +70,9 @@ elif [ "$raw_platform" == "web" ]; then
echo "Building web without threads..."
scons -j $cpus $options $platform target=template_debug threads=no
scons -j $cpus $options $platform target=template_release threads=no
else
# Normal build process for other platforms
if [ "$raw_platform" != "android" ] && [ "$raw_platform" != "web" ]; then
if [ "$raw_platform" != "android" ] && [ "$raw_platform" != "ios" ] && [ "$raw_platform" != "web" ]; then
scons -j $cpus $options $platform target=editor
fi
scons -j $cpus $options $platform target=template_debug

View File

@ -140,23 +140,18 @@ public:
}
void load(spine::AtlasPage &page, const spine::String &path) override {
Error error = OK;
String fixed_path;
fixed_path.parse_utf8(path.buffer());
bool is_resource = fix_path(fixed_path);
import_image_resource(fixed_path);
#if SPINE_GODOT_EXTENSION
Ref<Texture2D> texture = ResourceLoader::get_singleton()->load(fixed_path, "", ResourceLoader::CACHE_MODE_REUSE);
#else
#if VERSION_MAJOR > 3
Ref<Texture2D> texture = get_texture_from_image(fixed_path, is_resource);
#else
Ref<Texture> texture = get_texture_from_image(fixed_path, is_resource);
#endif
#endif
if (error != OK || !texture.is_valid()) {
if (!texture.is_valid()) {
ERR_PRINT(vformat("Can't load texture: \"%s\"", fixed_path));
auto renderer_object = memnew(SpineRendererObject);
renderer_object->texture = Ref<Texture>(nullptr);
@ -170,17 +165,19 @@ public:
renderer_object->texture = texture;
renderer_object->normal_map = Ref<Texture>(nullptr);
String new_path = vformat("%s/%s_%s", fixed_path.get_base_dir(), normal_map_prefix, fixed_path.get_file());
String normal_map_path = vformat("%s/%s_%s", fixed_path.get_base_dir(), normal_map_prefix, fixed_path.get_file());
is_resource = fix_path(normal_map_path);
#if SPINE_GODOT_EXTENSION
if (ResourceLoader::get_singleton()->exists(new_path)) {
Ref<Texture> normal_map = ResourceLoader::get_singleton()->load(new_path);
if (ResourceLoader::get_singleton()->exists(normal_map_path)) {
import_image_resource(normal_map_path);
Ref<Texture> normal_map = get_texture_from_image(normal_map_path, is_resource);
normal_maps->append(normal_map);
renderer_object->normal_map = normal_map;
}
#else
if (ResourceLoader::exists(new_path)) {
import_image_resource(new_path);
Ref<Texture> normal_map = get_texture_from_image(new_path, is_resource);
if (ResourceLoader::exists(normal_map_path)) {
import_image_resource(normal_map_path);
Ref<Texture> normal_map = get_texture_from_image(normal_map_path, is_resource);
normal_maps->append(normal_map);
renderer_object->normal_map = normal_map;
}

View File

@ -5,36 +5,36 @@ compatibility_minimum = "4.1"
[libraries]
macos.editor = "res://bin/macos/macos.framework/libspine_godot.macos.editor"
macos.debug = "res://bin/macos/macos.framework/libspine_godot.macos.template_debug"
macos.release = "res://bin/macos/macos.framework/libspine_godot.macos.template_release"
macos.editor = "macos/libspine_godot.macos.editor.framework"
macos.debug = "macos/libspine_godot.macos.template_debug.framework"
macos.release = "macos/libspine_godot.macos.template_release.framework"
ios.debug = "res://bin/ios/ios.framework/libspine_godot.ios.template_debug.xcframework"
ios.release = "res://bin/ios/ios.framework/libspine_godot.ios.template_release.xcframework"
ios.debug = "ios/libspine_godot.ios.template_debug.framework"
ios.release = "ios/libspine_godot.ios.template_release.framework"
windows.editor.x86_64 = "res://bin/windows/libspine_godot.windows.editor.x86_64.dll"
windows.debug.x86_64 = "res://bin/windows/libspine_godot.windows.template_debug.x86_64.dll"
windows.release.x86_64 = "res://bin/windows/libspine_godot.windows.template_release.x86_64.dll"
windows.editor.x86_64 = "windows/libspine_godot.windows.editor.x86_64.dll"
windows.debug.x86_64 = "windows/libspine_godot.windows.template_debug.x86_64.dll"
windows.release.x86_64 = "windows/libspine_godot.windows.template_release.x86_64.dll"
linux.editor.x86_64 = "res://bin/linux/libspine_godot.linux.editor.x86_64.so"
linux.debug.x86_64 = "res://bin/linux/libspine_godot.linux.template_debug.x86_64.so"
linux.release.x86_64 = "res://bin/linux/libspine_godot.linux.template_release.x86_64.so"
linux.editor.x86_64 = "linux/libspine_godot.linux.editor.x86_64.so"
linux.debug.x86_64 = "linux/libspine_godot.linux.template_debug.x86_64.so"
linux.release.x86_64 = "linux/libspine_godot.linux.template_release.x86_64.so"
linux.editor.arm64 = "res://bin/linux/libspine_godot.linux.editor.arm64.so"
linux.debug.arm64 = "res://bin/linux/libspine_godot.linux.template_debug.arm64.so"
linux.release.arm64 = "res://bin/linux/libspine_godot.linux.template_release.arm64.so"
linux.editor.arm64 = "linux/libspine_godot.linux.editor.arm64.so"
linux.debug.arm64 = "linux/libspine_godot.linux.template_debug.arm64.so"
linux.release.arm64 = "linux/libspine_godot.linux.template_release.arm64.so"
linux.editor.rv64 = "res://bin/linux/libspine_godot.linux.editor.rv64.so"
linux.debug.rv64 = "res://bin/linux/libspine_godot.linux.template_debug.rv64.so"
linux.release.rv64 = "res://bin/linux/libspine_godot.linux.template_release.rv64.so"
linux.editor.rv64 = "linux/libspine_godot.linux.editor.rv64.so"
linux.debug.rv64 = "linux/libspine_godot.linux.template_debug.rv64.so"
linux.release.rv64 = "linux/libspine_godot.linux.template_release.rv64.so"
android.debug.x86_64 = "res://bin/android/libspine_godot.android.template_debug.x86_64.so"
android.release.x86_64 = "res://bin/android/libspine_godot.android.template_release.x86_64.so"
android.debug.x86_64 = "android/libspine_godot.android.template_debug.x86_64.so"
android.release.x86_64 = "android/libspine_godot.android.template_release.x86_64.so"
android.debug.arm64 = "res://bin/android/libspine_godot.android.template_debug.arm64.so"
android.release.arm64 = "res://bin/android/libspine_godot.android.template_release.arm64.so"
android.debug.arm64 = "android/libspine_godot.android.template_debug.arm64.so"
android.release.arm64 = "android/libspine_godot.android.template_release.arm64.so"
web.debug.threads.wasm32 = "res://bin/web/libgdexample.web.template_debug.wasm32.wasm"
web.release.threads.wasm32 = "res://bin/web/libgdexample.web.template_release.wasm32.wasm"
web.debug.wasm32 = "res://bin/web/libgdexample.web.template_debug.wasm32.nothreads.wasm"
web.release.wasm32 = "res://bin/web/libgdexample.web.template_release.wasm32.nothreads.wasm"
web.debug.threads.wasm32 = "web/libgdexample.web.template_debug.wasm32.wasm"
web.release.threads.wasm32 = "web/libgdexample.web.template_release.wasm32.wasm"
web.debug.wasm32 = "web/libgdexample.web.template_debug.wasm32.nothreads.wasm"
web.release.wasm32 = "web/libgdexample.web.template_release.wasm32.nothreads.wasm"

View File

@ -594,11 +594,11 @@ class AnimationState {
if (last == null) {
setCurrent(trackIndex, entry, true);
queue.drain();
if (delay < 0) delay = 0;
} else {
last.next = entry;
entry.previous = last;
if (delay <= 0)
delay += last.getTrackComplete() - entry.mixDuration;
if (delay <= 0) delay = Math.max(delay + last.getTrackComplete() - entry.mixDuration, 0);
}
entry.delay = delay;
@ -614,8 +614,7 @@ class AnimationState {
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;
if (delay <= 0) entry.delay = Math.max(entry.delay + entry.mixDuration - mixDuration, 0);
entry.mixDuration = mixDuration;
entry.trackEnd = mixDuration;
return entry;

View File

@ -56,7 +56,20 @@ class TrackEntry implements Poolable {
public var animationEnd:Float = 0;
public var animationLast:Float = 0;
public var nextAnimationLast:Float = 0;
public var delay:Float = 0;
/** Seconds to postpone playing the animation. Must be >= 0. When this track entry is the current track entry,
* <code>delay</code> postpones incrementing the {@link #getTrackTime()}. When this track entry is queued,
* <code>delay</code> is the time from the start of the previous animation to when this track entry will become the current
* track entry (ie when the previous track entry {@link TrackEntry#getTrackTime()} >= this track entry's
* <code>delay</code>).
* <p>
* {@link #getTimeScale()} affects the delay.
* <p>
* When passing <code>delay</code> <= 0 to {@link AnimationState#addAnimation(int, Animation, boolean, float)} this
* <code>delay</code> is set using a mix duration from {@link AnimationStateData}. To change the {@link #getMixDuration()}
* afterward, use {@link #setMixDuration(float, float)} so this <code>delay</code> is adjusted. */
public var delay(default, set):Float = 0;
public var trackTime:Float = 0;
public var trackLast:Float = 0;
public var nextTrackLast:Float = 0;
@ -64,7 +77,7 @@ class TrackEntry implements Poolable {
public var timeScale:Float = 0;
public var alpha:Float = 0;
public var mixTime:Float = 0;
@:isVar public var mixDuration(get, set):Float = 0;
public var mixDuration:Float = 0;
public var interruptAlpha:Float = 0;
public var totalAlpha:Float = 0;
public var mixBlend:MixBlend = MixBlend.replace;
@ -73,14 +86,9 @@ class TrackEntry implements Poolable {
public var timelinesRotation:Array<Float> = new Array<Float>();
public var shortestRotation = false;
function get_mixDuration():Float {
return mixDuration;
}
function set_mixDuration(mixDuration:Float):Float {
this.mixDuration = mixDuration;
if (previous != null && delay <= 0) delay += previous.getTrackComplete() - mixDuration;
return mixDuration;
function set_delay(delay:Float):Float {
if (delay < 0) throw new SpineException("delay must be >= 0.");
return this.delay = delay;
}
public function new() {}
@ -142,4 +150,15 @@ class TrackEntry implements Poolable {
public function resetRotationDirection():Void {
timelinesRotation.resize(0);
}
public function setMixDurationWithDelay(mixDuration:Float):Float {
this.mixDuration = mixDuration;
if (delay <= 0) {
if (this.previous != null)
delay = Math.max(delay + this.previous.getTrackComplete() - mixDuration, 0);
else
delay = 0;
}
return mixDuration;
}
}

View File

@ -323,7 +323,8 @@ fileprivate extension BlendMode {
case SPINE_BLEND_MODE_NORMAL:
return premultipliedAlpha ? .one : .sourceAlpha
case SPINE_BLEND_MODE_ADDITIVE:
return .sourceAlpha
// additvie only needs sourceAlpha multiply if it is not pma
return premultipliedAlpha ? .one : .sourceAlpha
case SPINE_BLEND_MODE_MULTIPLY:
return .destinationColor
case SPINE_BLEND_MODE_SCREEN:
@ -333,12 +334,13 @@ fileprivate extension BlendMode {
}
}
func sourceAlphaBlendFactor(premultipliedAlpha: Bool) -> MTLBlendFactor {
var sourceAlphaBlendFactor: MTLBlendFactor {
// pma and non-pma has no-relation ship with alpha blending
switch self {
case SPINE_BLEND_MODE_NORMAL:
return premultipliedAlpha ? .one : .sourceAlpha
return .one
case SPINE_BLEND_MODE_ADDITIVE:
return .sourceAlpha
return .one
case SPINE_BLEND_MODE_MULTIPLY:
return .oneMinusSourceAlpha
case SPINE_BLEND_MODE_SCREEN:
@ -384,7 +386,7 @@ fileprivate extension MTLRenderPipelineColorAttachmentDescriptor {
func apply(blendMode: BlendMode, with premultipliedAlpha: Bool) {
isBlendingEnabled = true
sourceRGBBlendFactor = blendMode.sourceRGBBlendFactor(premultipliedAlpha: premultipliedAlpha)
sourceAlphaBlendFactor = blendMode.sourceAlphaBlendFactor(premultipliedAlpha: premultipliedAlpha)
sourceAlphaBlendFactor = blendMode.sourceAlphaBlendFactor
destinationRGBBlendFactor = blendMode.destinationRGBBlendFactor
destinationAlphaBlendFactor = blendMode.destinationAlphaBlendFactor
}

View File

@ -7,8 +7,9 @@ up into multiple modules:
1. `spine-webgl/`, a self-contained WebGL backend, built on the core classes.
1. `spine-canvas/`, a self-contained Canvas backend, built on the core classes.
1. `spine-canvaskit/`, a self-contained [CanvasKit](https://skia.org/docs/user/modules/canvaskit/) backend, built on the core classes for CanvasKit, supporting both NodeJS for headless rendering, and browsers.
1. `spine-threejs/`, a self-contained [THREE.JS](https://threejs.org/) backend, built on the core classes.
1. `spine-player/`, a self-contained player to easily display Spine animations on your website, built on the core classes and WebGL backend.
1. `spine-webcomponents/`, web components to easily display Spine animations on your website, built on the core classes and WebGL backend.
1. `spine-threejs/`, a [THREE.JS](https://threejs.org/) backend, built on the core classes.
1. `spine-phaser-v3/`, a [Phaser v3](https://phaser.io/) backend, built on the core classes.
1. `spine-phaser-v4/`, a [Phaser v4](https://phaser.io/) backend, built on the core classes.
1. `spine-pixi-v7/`, a [PixiJS v7](https://pixijs.com/) backend, built on the core classes.

View File

Before

Width:  |  Height:  |  Size: 799 KiB

After

Width:  |  Height:  |  Size: 799 KiB

View File

Before

Width:  |  Height:  |  Size: 790 KiB

After

Width:  |  Height:  |  Size: 790 KiB

View File

@ -0,0 +1,435 @@
chibi-stickers-pma.png
size: 512, 128
filter: Linear, Linear
pma: true
scale: 0.5
common/angry-mark
bounds: 278, 85, 42, 41
common/big-purple-fear
bounds: 2, 54, 134, 72
common/big-tear
bounds: 138, 93, 33, 82
rotate: 90
common/eye-3
bounds: 226, 25, 15, 26
common/eye-closed-happy
bounds: 267, 7, 25, 9
rotate: 90
common/eye-dafault
bounds: 203, 20, 22, 21
rotate: 90
common/eye-equal
bounds: 308, 43, 25, 15
common/eye-fire
bounds: 278, 57, 26, 28
rotate: 90
common/eye-half-open
bounds: 138, 2, 26, 16
common/eye-heart
bounds: 308, 60, 26, 23
common/eye-reverse-v
bounds: 166, 2, 26, 16
common/eye-sideway-v
bounds: 336, 60, 21, 23
common/eye-slant-close
bounds: 194, 2, 23, 16
common/eye-small-dot
bounds: 119, 2, 15, 15
common/eye-sparkle
bounds: 372, 97, 30, 29
common/eye-star
bounds: 404, 99, 29, 27
common/eye-twirl
bounds: 226, 2, 21, 23
rotate: 90
common/eye-u
bounds: 2, 2, 24, 17
common/eye-x
bounds: 176, 20, 25, 22
common/lamp
bounds: 138, 44, 47, 65
rotate: 90
common/mouth-3
bounds: 89, 2, 15, 28
rotate: 90
common/mouth-bracket
bounds: 322, 85, 34, 11
common/mouth-doubt
bounds: 243, 34, 26, 15
common/mouth-fangs
bounds: 205, 52, 39, 14
rotate: 90
common/mouth-line
bounds: 435, 96, 36, 7
common/mouth-neutral
bounds: 245, 51, 27, 12
common/mouth-o-tall
bounds: 221, 53, 22, 33
common/mouth-open-smile
bounds: 138, 20, 36, 22
common/mouth-rectangle
bounds: 435, 105, 35, 21
common/mouth-reverse-v
bounds: 473, 95, 27, 10
common/mouth-s
bounds: 28, 8, 41, 11
common/mouth-smile-little
bounds: 117, 19, 33, 19
rotate: 90
common/mouth-toungue-sticking-out
bounds: 245, 65, 31, 21
common/mouth-u
bounds: 472, 107, 36, 19
common/mouth-v
bounds: 251, 5, 27, 14
rotate: 90
common/mouth-x
bounds: 335, 38, 21, 20
common/purple-fear-lines
bounds: 322, 98, 48, 28
common/shadow
bounds: 2, 21, 113, 31
common/small-dash
bounds: 404, 88, 9, 20
rotate: 90
common/small-drop-line
bounds: 71, 2, 16, 17
common/small-purple-fear
bounds: 222, 88, 54, 38
common/tear
bounds: 274, 36, 20, 19
chibi-stickers-pma_2.png
size: 1024, 256
filter: Linear, Linear
pma: true
scale: 0.5
erikari/arm
bounds: 981, 164, 28, 90
erikari/arm-shoulder-decoration
bounds: 790, 149, 32, 43
erikari/back-hair
bounds: 258, 113, 158, 141
erikari/back-hair-long
bounds: 2, 34, 220, 254
rotate: 90
erikari/blush
bounds: 981, 133, 29, 18
rotate: 90
erikari/body
bounds: 584, 115, 70, 98
erikari/bracelet
bounds: 1011, 221, 33, 11
rotate: 90
erikari/collar
bounds: 390, 48, 61, 62
erikari/ear
bounds: 258, 2, 34, 42
erikari/eyebrow
bounds: 453, 98, 20, 12
erikari/hair-front
bounds: 258, 46, 130, 65
erikari/hair-side
bounds: 656, 149, 43, 132
rotate: 90
erikari/hat-border
bounds: 418, 215, 254, 39
erikari/hat-top
bounds: 674, 194, 160, 60
erikari/head-base
bounds: 836, 129, 143, 125
erikari/leg
bounds: 2, 4, 28, 101
rotate: 90
erikari/leg-decoration
bounds: 770, 134, 36, 13
erikari/skirt
bounds: 418, 112, 164, 101
erikari/strawberries-decoration
bounds: 656, 91, 112, 56
chibi-stickers-pma_3.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
harri/arm
bounds: 147, 21, 28, 90
rotate: 90
harri/back-hair
bounds: 2, 107, 158, 141
harri/back-hair-long
bounds: 147, 51, 40, 80
rotate: 90
harri/beard
bounds: 2, 2, 10, 11
harri/blush
bounds: 265, 103, 29, 18
harri/body
bounds: 307, 94, 70, 98
rotate: 90
harri/body-decoration
bounds: 407, 97, 70, 67
harri/ear
bounds: 229, 57, 34, 42
rotate: 90
harri/eyebrow
bounds: 494, 226, 22, 12
rotate: 90
harri/hair-front
bounds: 2, 15, 143, 90
harri/head-base
bounds: 162, 123, 143, 125
harri/leg
bounds: 162, 93, 28, 101
rotate: 90
harri/sword
bounds: 307, 166, 185, 82
chibi-stickers-pma_4.png
size: 1024, 256
filter: Linear, Linear
pma: true
scale: 0.5
luke/arm
bounds: 930, 224, 28, 90
rotate: 90
luke/arm-shoulder-decoration
bounds: 581, 112, 31, 27
rotate: 90
luke/back-hair
bounds: 173, 111, 158, 141
luke/blush
bounds: 151, 68, 29, 18
rotate: 90
luke/body
bounds: 700, 123, 70, 98
rotate: 90
luke/eyebrow
bounds: 2, 2, 27, 12
luke/face-cover
bounds: 2, 99, 169, 153
luke/glasses-shadow
bounds: 2, 16, 147, 81
luke/hair-decoration
bounds: 478, 145, 130, 107
luke/hair-front
bounds: 700, 195, 122, 57
luke/head-base
bounds: 333, 127, 143, 125
luke/leg
bounds: 478, 115, 28, 101
rotate: 90
luke/shield
bounds: 610, 148, 88, 104
luke/skirt
bounds: 930, 191, 81, 31
luke/sword
bounds: 824, 181, 104, 71
chibi-stickers-pma_5.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
mario/arm
bounds: 244, 2, 28, 90
mario/back-hair
bounds: 2, 101, 168, 148
mario/back-hair-long
bounds: 151, 6, 86, 91
rotate: 90
mario/beard
bounds: 2, 6, 147, 93
mario/blush
bounds: 492, 220, 29, 18
rotate: 90
mario/body
bounds: 317, 111, 70, 98
rotate: 90
mario/ear
bounds: 456, 207, 34, 42
mario/eyebrow
bounds: 417, 164, 32, 17
mario/hair-front
bounds: 317, 183, 137, 66
mario/head-base
bounds: 172, 124, 143, 125
mario/leg
bounds: 172, 94, 28, 101
rotate: 90
chibi-stickers-pma_6.png
size: 1024, 256
filter: Linear, Linear
pma: true
scale: 0.5
misaki/arm
bounds: 609, 95, 28, 90
misaki/back-hair
bounds: 194, 105, 158, 141
misaki/back-hair-long
bounds: 2, 51, 190, 195
misaki/belt
bounds: 741, 190, 76, 26
misaki/blush
bounds: 844, 228, 29, 18
misaki/body
bounds: 641, 176, 70, 98
rotate: 90
misaki/ear
bounds: 144, 7, 34, 42
misaki/eyebrow
bounds: 194, 54, 30, 12
misaki/glasses
bounds: 194, 68, 141, 35
misaki/glasses-side
bounds: 354, 111, 8, 23
rotate: 90
misaki/hair-front
bounds: 499, 187, 140, 59
misaki/hair-side
bounds: 2, 2, 47, 140
rotate: 90
misaki/head-base
bounds: 354, 121, 143, 125
misaki/leg
bounds: 741, 218, 28, 101
rotate: 90
misaki/skirt
bounds: 499, 95, 108, 90
chibi-stickers-pma_7.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
nate/arm
bounds: 151, 65, 28, 90
rotate: 90
nate/back-hair
bounds: 2, 109, 158, 141
nate/beard
bounds: 2, 39, 147, 68
nate/blush
bounds: 407, 165, 29, 18
nate/body
bounds: 307, 113, 70, 98
rotate: 90
nate/ear
bounds: 451, 208, 34, 42
nate/eyebrow
bounds: 265, 111, 27, 12
nate/glasses
bounds: 2, 2, 141, 35
nate/glasses-side
bounds: 151, 47, 8, 16
nate/hair-front
bounds: 307, 185, 142, 65
nate/head-base
bounds: 162, 125, 143, 125
nate/leg
bounds: 162, 95, 28, 101
rotate: 90
chibi-stickers-pma_8.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
sinisa/arm
bounds: 147, 52, 28, 90
rotate: 90
sinisa/back-hair
bounds: 2, 96, 158, 141
sinisa/beard
bounds: 307, 192, 139, 45
sinisa/blush
bounds: 147, 32, 29, 18
sinisa/body
bounds: 307, 120, 70, 98
rotate: 90
sinisa/body-decoration
bounds: 265, 83, 27, 27
sinisa/ear
bounds: 448, 195, 34, 42
sinisa/eyebrow
bounds: 407, 171, 38, 19
sinisa/hair-front
bounds: 2, 2, 143, 92
sinisa/head-base
bounds: 162, 112, 143, 125
sinisa/leg
bounds: 162, 82, 28, 101
rotate: 90
chibi-stickers-pma_9.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
soeren/arm
bounds: 254, 47, 28, 90
soeren/back-hair
bounds: 2, 111, 150, 141
soeren/beard
bounds: 2, 41, 145, 68
soeren/blush
bounds: 284, 119, 29, 18
soeren/body
bounds: 154, 67, 70, 98
rotate: 90
soeren/ear
bounds: 200, 23, 34, 42
soeren/eyebrow
bounds: 460, 137, 27, 12
soeren/glasses
bounds: 2, 2, 152, 37
soeren/glasses-side
bounds: 490, 245, 7, 20
rotate: 90
soeren/glove
bounds: 156, 12, 42, 53
soeren/hair-front
bounds: 154, 139, 159, 113
soeren/head-base
bounds: 315, 127, 143, 125
soeren/leg
bounds: 460, 151, 28, 101
chibi-stickers-pma_10.png
size: 512, 256
filter: Linear, Linear
pma: true
scale: 0.5
spineboy/arm
bounds: 407, 97, 28, 90
rotate: 90
spineboy/arm-decoration
bounds: 307, 127, 32, 29
spineboy/arm-shoulder-decoration
bounds: 451, 72, 23, 23
spineboy/back-hair
bounds: 2, 106, 158, 141
spineboy/blush
bounds: 2, 2, 29, 18
spineboy/body
bounds: 307, 55, 70, 98
rotate: 90
spineboy/ear
bounds: 407, 61, 34, 42
rotate: 90
spineboy/eyebrow
bounds: 143, 77, 27, 12
rotate: 90
spineboy/glasses
bounds: 162, 158, 179, 89
spineboy/glasses-shadow
bounds: 2, 22, 139, 82
spineboy/hair-front
bounds: 343, 127, 145, 120
spineboy/head-base
bounds: 162, 31, 143, 125
spineboy/leg
bounds: 307, 24, 29, 101
rotate: 90

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@ -0,0 +1,425 @@
chibi-stickers.png
size: 512, 128
filter: Linear, Linear
scale: 0.5
common/angry-mark
bounds: 278, 85, 42, 41
common/big-purple-fear
bounds: 2, 54, 134, 72
common/big-tear
bounds: 138, 93, 33, 82
rotate: 90
common/eye-3
bounds: 226, 25, 15, 26
common/eye-closed-happy
bounds: 267, 7, 25, 9
rotate: 90
common/eye-dafault
bounds: 203, 20, 22, 21
rotate: 90
common/eye-equal
bounds: 308, 43, 25, 15
common/eye-fire
bounds: 278, 57, 26, 28
rotate: 90
common/eye-half-open
bounds: 138, 2, 26, 16
common/eye-heart
bounds: 308, 60, 26, 23
common/eye-reverse-v
bounds: 166, 2, 26, 16
common/eye-sideway-v
bounds: 336, 60, 21, 23
common/eye-slant-close
bounds: 194, 2, 23, 16
common/eye-small-dot
bounds: 119, 2, 15, 15
common/eye-sparkle
bounds: 372, 97, 30, 29
common/eye-star
bounds: 404, 99, 29, 27
common/eye-twirl
bounds: 226, 2, 21, 23
rotate: 90
common/eye-u
bounds: 2, 2, 24, 17
common/eye-x
bounds: 176, 20, 25, 22
common/lamp
bounds: 138, 44, 47, 65
rotate: 90
common/mouth-3
bounds: 89, 2, 15, 28
rotate: 90
common/mouth-bracket
bounds: 322, 85, 34, 11
common/mouth-doubt
bounds: 243, 34, 26, 15
common/mouth-fangs
bounds: 205, 52, 39, 14
rotate: 90
common/mouth-line
bounds: 435, 96, 36, 7
common/mouth-neutral
bounds: 245, 51, 27, 12
common/mouth-o-tall
bounds: 221, 53, 22, 33
common/mouth-open-smile
bounds: 138, 20, 36, 22
common/mouth-rectangle
bounds: 435, 105, 35, 21
common/mouth-reverse-v
bounds: 473, 95, 27, 10
common/mouth-s
bounds: 28, 8, 41, 11
common/mouth-smile-little
bounds: 117, 19, 33, 19
rotate: 90
common/mouth-toungue-sticking-out
bounds: 245, 65, 31, 21
common/mouth-u
bounds: 472, 107, 36, 19
common/mouth-v
bounds: 251, 5, 27, 14
rotate: 90
common/mouth-x
bounds: 335, 38, 21, 20
common/purple-fear-lines
bounds: 322, 98, 48, 28
common/shadow
bounds: 2, 21, 113, 31
common/small-dash
bounds: 404, 88, 9, 20
rotate: 90
common/small-drop-line
bounds: 71, 2, 16, 17
common/small-purple-fear
bounds: 222, 88, 54, 38
common/tear
bounds: 274, 36, 20, 19
chibi-stickers_2.png
size: 1024, 256
filter: Linear, Linear
scale: 0.5
erikari/arm
bounds: 981, 164, 28, 90
erikari/arm-shoulder-decoration
bounds: 790, 149, 32, 43
erikari/back-hair
bounds: 258, 113, 158, 141
erikari/back-hair-long
bounds: 2, 34, 220, 254
rotate: 90
erikari/blush
bounds: 981, 133, 29, 18
rotate: 90
erikari/body
bounds: 584, 115, 70, 98
erikari/bracelet
bounds: 1011, 221, 33, 11
rotate: 90
erikari/collar
bounds: 390, 48, 61, 62
erikari/ear
bounds: 258, 2, 34, 42
erikari/eyebrow
bounds: 453, 98, 20, 12
erikari/hair-front
bounds: 258, 46, 130, 65
erikari/hair-side
bounds: 656, 149, 43, 132
rotate: 90
erikari/hat-border
bounds: 418, 215, 254, 39
erikari/hat-top
bounds: 674, 194, 160, 60
erikari/head-base
bounds: 836, 129, 143, 125
erikari/leg
bounds: 2, 4, 28, 101
rotate: 90
erikari/leg-decoration
bounds: 770, 134, 36, 13
erikari/skirt
bounds: 418, 112, 164, 101
erikari/strawberries-decoration
bounds: 656, 91, 112, 56
chibi-stickers_3.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
harri/arm
bounds: 147, 21, 28, 90
rotate: 90
harri/back-hair
bounds: 2, 107, 158, 141
harri/back-hair-long
bounds: 147, 51, 40, 80
rotate: 90
harri/beard
bounds: 2, 2, 10, 11
harri/blush
bounds: 265, 103, 29, 18
harri/body
bounds: 307, 94, 70, 98
rotate: 90
harri/body-decoration
bounds: 407, 97, 70, 67
harri/ear
bounds: 229, 57, 34, 42
rotate: 90
harri/eyebrow
bounds: 494, 226, 22, 12
rotate: 90
harri/hair-front
bounds: 2, 15, 143, 90
harri/head-base
bounds: 162, 123, 143, 125
harri/leg
bounds: 162, 93, 28, 101
rotate: 90
harri/sword
bounds: 307, 166, 185, 82
chibi-stickers_4.png
size: 1024, 256
filter: Linear, Linear
scale: 0.5
luke/arm
bounds: 930, 224, 28, 90
rotate: 90
luke/arm-shoulder-decoration
bounds: 581, 112, 31, 27
rotate: 90
luke/back-hair
bounds: 173, 111, 158, 141
luke/blush
bounds: 151, 68, 29, 18
rotate: 90
luke/body
bounds: 700, 123, 70, 98
rotate: 90
luke/eyebrow
bounds: 2, 2, 27, 12
luke/face-cover
bounds: 2, 99, 169, 153
luke/glasses-shadow
bounds: 2, 16, 147, 81
luke/hair-decoration
bounds: 478, 145, 130, 107
luke/hair-front
bounds: 700, 195, 122, 57
luke/head-base
bounds: 333, 127, 143, 125
luke/leg
bounds: 478, 115, 28, 101
rotate: 90
luke/shield
bounds: 610, 148, 88, 104
luke/skirt
bounds: 930, 191, 81, 31
luke/sword
bounds: 824, 181, 104, 71
chibi-stickers_5.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
mario/arm
bounds: 244, 2, 28, 90
mario/back-hair
bounds: 2, 101, 168, 148
mario/back-hair-long
bounds: 151, 6, 86, 91
rotate: 90
mario/beard
bounds: 2, 6, 147, 93
mario/blush
bounds: 492, 220, 29, 18
rotate: 90
mario/body
bounds: 317, 111, 70, 98
rotate: 90
mario/ear
bounds: 456, 207, 34, 42
mario/eyebrow
bounds: 417, 164, 32, 17
mario/hair-front
bounds: 317, 183, 137, 66
mario/head-base
bounds: 172, 124, 143, 125
mario/leg
bounds: 172, 94, 28, 101
rotate: 90
chibi-stickers_6.png
size: 1024, 256
filter: Linear, Linear
scale: 0.5
misaki/arm
bounds: 609, 95, 28, 90
misaki/back-hair
bounds: 194, 105, 158, 141
misaki/back-hair-long
bounds: 2, 51, 190, 195
misaki/belt
bounds: 741, 190, 76, 26
misaki/blush
bounds: 844, 228, 29, 18
misaki/body
bounds: 641, 176, 70, 98
rotate: 90
misaki/ear
bounds: 144, 7, 34, 42
misaki/eyebrow
bounds: 194, 54, 30, 12
misaki/glasses
bounds: 194, 68, 141, 35
misaki/glasses-side
bounds: 354, 111, 8, 23
rotate: 90
misaki/hair-front
bounds: 499, 187, 140, 59
misaki/hair-side
bounds: 2, 2, 47, 140
rotate: 90
misaki/head-base
bounds: 354, 121, 143, 125
misaki/leg
bounds: 741, 218, 28, 101
rotate: 90
misaki/skirt
bounds: 499, 95, 108, 90
chibi-stickers_7.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
nate/arm
bounds: 151, 65, 28, 90
rotate: 90
nate/back-hair
bounds: 2, 109, 158, 141
nate/beard
bounds: 2, 39, 147, 68
nate/blush
bounds: 407, 165, 29, 18
nate/body
bounds: 307, 113, 70, 98
rotate: 90
nate/ear
bounds: 451, 208, 34, 42
nate/eyebrow
bounds: 265, 111, 27, 12
nate/glasses
bounds: 2, 2, 141, 35
nate/glasses-side
bounds: 151, 47, 8, 16
nate/hair-front
bounds: 307, 185, 142, 65
nate/head-base
bounds: 162, 125, 143, 125
nate/leg
bounds: 162, 95, 28, 101
rotate: 90
chibi-stickers_8.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
sinisa/arm
bounds: 147, 52, 28, 90
rotate: 90
sinisa/back-hair
bounds: 2, 96, 158, 141
sinisa/beard
bounds: 307, 192, 139, 45
sinisa/blush
bounds: 147, 32, 29, 18
sinisa/body
bounds: 307, 120, 70, 98
rotate: 90
sinisa/body-decoration
bounds: 265, 83, 27, 27
sinisa/ear
bounds: 448, 195, 34, 42
sinisa/eyebrow
bounds: 407, 171, 38, 19
sinisa/hair-front
bounds: 2, 2, 143, 92
sinisa/head-base
bounds: 162, 112, 143, 125
sinisa/leg
bounds: 162, 82, 28, 101
rotate: 90
chibi-stickers_9.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
soeren/arm
bounds: 254, 47, 28, 90
soeren/back-hair
bounds: 2, 111, 150, 141
soeren/beard
bounds: 2, 41, 145, 68
soeren/blush
bounds: 284, 119, 29, 18
soeren/body
bounds: 154, 67, 70, 98
rotate: 90
soeren/ear
bounds: 200, 23, 34, 42
soeren/eyebrow
bounds: 460, 137, 27, 12
soeren/glasses
bounds: 2, 2, 152, 37
soeren/glasses-side
bounds: 490, 245, 7, 20
rotate: 90
soeren/glove
bounds: 156, 12, 42, 53
soeren/hair-front
bounds: 154, 139, 159, 113
soeren/head-base
bounds: 315, 127, 143, 125
soeren/leg
bounds: 460, 151, 28, 101
chibi-stickers_10.png
size: 512, 256
filter: Linear, Linear
scale: 0.5
spineboy/arm
bounds: 407, 97, 28, 90
rotate: 90
spineboy/arm-decoration
bounds: 307, 127, 32, 29
spineboy/arm-shoulder-decoration
bounds: 451, 72, 23, 23
spineboy/back-hair
bounds: 2, 106, 158, 141
spineboy/blush
bounds: 2, 2, 29, 18
spineboy/body
bounds: 307, 55, 70, 98
rotate: 90
spineboy/ear
bounds: 407, 61, 34, 42
rotate: 90
spineboy/eyebrow
bounds: 143, 77, 27, 12
rotate: 90
spineboy/glasses
bounds: 162, 158, 179, 89
spineboy/glasses-shadow
bounds: 2, 22, 139, 82
spineboy/hair-front
bounds: 343, 127, 145, 120
spineboy/head-base
bounds: 162, 31, 143, 125
spineboy/leg
bounds: 307, 24, 29, 101
rotate: 90

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 350 KiB

After

Width:  |  Height:  |  Size: 350 KiB

View File

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 328 KiB

View File

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

View File

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 306 KiB

View File

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 204 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

View File

Before

Width:  |  Height:  |  Size: 369 KiB

After

Width:  |  Height:  |  Size: 369 KiB

View File

Before

Width:  |  Height:  |  Size: 341 KiB

After

Width:  |  Height:  |  Size: 341 KiB

View File

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 321 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 409 KiB

After

Width:  |  Height:  |  Size: 409 KiB

View File

Before

Width:  |  Height:  |  Size: 413 KiB

After

Width:  |  Height:  |  Size: 413 KiB

View File

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

View File

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 161 KiB

View File

Before

Width:  |  Height:  |  Size: 673 KiB

After

Width:  |  Height:  |  Size: 673 KiB

View File

Before

Width:  |  Height:  |  Size: 784 KiB

After

Width:  |  Height:  |  Size: 784 KiB

View File

Before

Width:  |  Height:  |  Size: 400 KiB

After

Width:  |  Height:  |  Size: 400 KiB

View File

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 240 KiB

View File

Before

Width:  |  Height:  |  Size: 392 KiB

After

Width:  |  Height:  |  Size: 392 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

Before

Width:  |  Height:  |  Size: 1009 KiB

After

Width:  |  Height:  |  Size: 1009 KiB

View File

Before

Width:  |  Height:  |  Size: 537 KiB

After

Width:  |  Height:  |  Size: 537 KiB

View File

Before

Width:  |  Height:  |  Size: 517 KiB

After

Width:  |  Height:  |  Size: 517 KiB

View File

Before

Width:  |  Height:  |  Size: 403 KiB

After

Width:  |  Height:  |  Size: 403 KiB

View File

Before

Width:  |  Height:  |  Size: 239 KiB

After

Width:  |  Height:  |  Size: 239 KiB

View File

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 240 KiB

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