[godot] Cleaned-up and added v4 examples.

This commit is contained in:
badlogic 2022-04-27 15:27:16 +02:00
parent 323a8b9299
commit 9ce8d5171a
51 changed files with 35482 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,16 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOGGVorbis"
uid="uid://btqvnw8fgej4l"
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

View File

@ -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.json" type="SpineSkeletonFileResource" id=2]
[resource]
atlas_res = ExtResource( 1 )
skeleton_file_res = ExtResource( 2 )
animations = null
skins = null

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
[remap]
importer="spine.json"
type="SpineSkeletonFileResource"
uid="uid://t7fk7pe11l3b"
path="res://.godot/imported/mix-and-match-pro.json-57325a5014e6fd56fc4a86824bc458ea.spjson"
[deps]
source_file="res://assets/mix-and-match/mix-and-match-pro.json"
dest_files=["res://.godot/imported/mix-and-match-pro.json-57325a5014e6fd56fc4a86824bc458ea.spjson"]
[params]

View File

@ -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

View File

@ -0,0 +1,15 @@
[remap]
importer="spine.atlas"
type="SpineAtlasResource"
uid="uid://c2hb88h3y512b"
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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dsodn1w3yva6f"
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/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

View File

@ -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

Binary file not shown.

View File

@ -0,0 +1,14 @@
[remap]
importer="spine.skel"
type="SpineSkeletonFileResource"
uid="uid://do8aw2r36b6qk"
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]

View File

@ -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

View File

@ -0,0 +1,15 @@
[remap]
importer="spine.atlas"
type="SpineAtlasResource"
uid="uid://em5emiut17gv"
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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b173v4l5brfj"
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/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

View File

@ -0,0 +1,20 @@
[gd_resource type="SpineSkeletonDataResource" load_steps=5 format=2]
[ext_resource path="res://assets/spineboy/spineboy.atlas" type="SpineAtlasResource" id=1]
[ext_resource path="res://assets/spineboy/spineboy-pro.json" type="SpineSkeletonFileResource" 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 ) ]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
[remap]
importer="spine.json"
type="SpineSkeletonFileResource"
uid="uid://d0sh0yumfhw5k"
path="res://.godot/imported/spineboy-pro.json-60444223fe3960c6d4c33b92d7495419.spjson"
[deps]
source_file="res://assets/spineboy/spineboy-pro.json"
dest_files=["res://.godot/imported/spineboy-pro.json-60444223fe3960c6d4c33b92d7495419.spjson"]
[params]

View File

@ -0,0 +1,14 @@
[remap]
importer="spine.skel"
type="SpineSkeletonFileResource"
uid="uid://c4ksiwem3sg21"
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]

View File

@ -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

View File

@ -0,0 +1,15 @@
[remap]
importer="spine.atlas"
type="SpineAtlasResource"
uid="uid://bcrd02k17qbt"
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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8she3akx8ig"
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/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

View File

@ -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 )

View File

@ -0,0 +1,4 @@
extends SpineSprite
func _ready():
get_animation_state().set_animation("walk", true, 0)

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://covnpp5pbw5g7"]
[ext_resource type="Script" path="res://examples/01-helloworld/helloworld.gd" id="2_hkbn2"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="3"]
[node name="Node2D" type="Node2D"]
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(496.207, 477.185)
scale = Vector2(0.466832, 0.466832)
skeleton_data_res = ExtResource( "3" )
script = ExtResource( "2_hkbn2" )

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://examples/01-helloworld/helloworld.gd" id="1"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="3"]
[node name="Node2D" type="Node2D"]
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(496.207, 477.185)
scale = Vector2(0.466832, 0.466832)
skeleton_data_res = ExtResource( "3" )
script = ExtResource( "1" )

View File

@ -0,0 +1,38 @@
extends Node2D
@onready var footstep_audio: AudioStreamPlayer = $FootstepAudio
func _animation_started(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry):
print("Animation started: " + track_entry.get_animation().get_name())
func _animation_interrupted(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry):
print("Animation interrupted: " + track_entry.get_animation().get_name())
func _animation_ended(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry):
print("Animation ended: " + track_entry.get_animation().get_name())
func _animation_completed(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry):
print("Animation completed: " + track_entry.get_animation().get_name())
func _animation_disposed(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry):
print("Animation disposed: " + track_entry.get_animation().get_name())
func _animation_event(sprite: SpineSprite, animation_state: SpineAnimationState, track_entry: SpineTrackEntry, event: SpineEvent):
print("Animation event: " + track_entry.get_animation().get_name() + ", " + event.get_data().get_event_name())
if (event.get_data().get_event_name() == "footstep"):
footstep_audio.play()
func _ready():
var spineboy = $Spineboy
var animation_state = spineboy.get_animation_state()
animation_state.set_animation("jump", false, 0)
animation_state.add_animation("walk", 0, true, 0)
animation_state.add_animation("run", 2, true, 0)
spineboy.connect("animation_started", Callable(self, "_animation_started"))
spineboy.connect("animation_interrupted", Callable(self, "_animation_interrupted"))
spineboy.connect("animation_ended", Callable(self, "_animation_ended"))
spineboy.connect("animation_completed", Callable(self, "_animation_completed"))
spineboy.connect("animation_disposed", Callable(self, "_animation_disposed"))
spineboy.connect("animation_event", Callable(self, "_animation_event"))
pass

View File

@ -0,0 +1,16 @@
[gd_scene load_steps=4 format=3 uid="uid://pybgwkgp2y7o"]
[ext_resource type="Script" path="res://examples/02-animation-state-listeners/animation-state-listeners.gd" id="1"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="2"]
[ext_resource type="AudioStream" uid="uid://btqvnw8fgej4l" path="res://assets/footstep.ogg" id="3"]
[node name="Node2D" type="Node2D"]
script = ExtResource( "1" )
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(473, 487)
scale = Vector2(0.575051, 0.575051)
skeleton_data_res = ExtResource( "2" )
[node name="FootstepAudio" type="AudioStreamPlayer" parent="."]
stream = ExtResource( "3" )

View File

@ -0,0 +1,22 @@
extends SpineSprite
func _ready():
var data = get_skeleton().get_data()
var custom_skin = new_skin("custom-skin")
var skin_base = data.find_skin("skin-base")
custom_skin.add_skin(skin_base)
custom_skin.add_skin(data.find_skin("nose/short"))
custom_skin.add_skin(data.find_skin("eyelids/girly"))
custom_skin.add_skin(data.find_skin("eyes/violet"))
custom_skin.add_skin(data.find_skin("hair/brown"))
custom_skin.add_skin(data.find_skin("clothes/hoodie-orange"))
custom_skin.add_skin(data.find_skin("legs/pants-jeans"))
custom_skin.add_skin(data.find_skin("accessories/bag"))
custom_skin.add_skin(data.find_skin("accessories/hat-red-yellow"))
get_skeleton().set_skin(custom_skin);
for el in custom_skin.get_attachments():
var entry: SpineSkinEntry = el
print(str(entry.get_slot_index()) + " " + entry.get_name())
get_animation_state().set_animation("dance", true, 0)

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://2y54bey2t35l"]
[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/mix-and-match.gd" id="2"]
[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" )
script = ExtResource( "2" )

View File

@ -0,0 +1,19 @@
extends SpineSprite
func _ready():
get_animation_state().set_animation("idle", true, 0)
func _process(_delta):
if Input.is_action_just_pressed("ui_left"):
get_animation_state().set_animation("run", true, 0)
get_skeleton().set_scale_x(-1)
if Input.is_action_just_released("ui_left"):
get_animation_state().set_animation("idle", true, 0)
if (Input.is_action_just_pressed("ui_right")):
get_animation_state().set_animation("run", true, 0)
get_skeleton().set_scale_x(1)
if Input.is_action_just_released("ui_right"):
get_animation_state().set_animation("idle", true, 0)

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://ca3tp7fuv1i77"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="1"]
[ext_resource type="Script" path="res://examples/04-simple-input/simple-input.gd" id="2_lsf60"]
[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" )
script = ExtResource( "2_lsf60" )

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="1"]
[ext_resource type="Script" path="res://examples/04-simple-input/simple-input.gd" id="2"]
[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 )
script = ExtResource( 2 )

View File

@ -0,0 +1,11 @@
extends Node2D
@onready var spineboy: SpineSprite = $Spineboy
func _before_world_transforms_change(_sprite):
spineboy.set_global_bone_transform("crosshair", Transform2D(0, get_viewport().get_mouse_position()))
func _ready():
spineboy.get_animation_state().set_animation("walk", true, 0)
spineboy.get_animation_state().set_animation("aim", true, 1)
spineboy.connect("before_world_transforms_change", Callable(self, "_before_world_transforms_change"))

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://bfkgc16yqcdyi"]
[ext_resource type="Script" path="res://examples/05-mouse-following/mouse-following.gd" id="1"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="2"]
[node name="Node2D" type="Node2D"]
script = ExtResource( "1" )
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(481, 457)
scale = Vector2(0.457952, 0.457952)
skeleton_data_res = ExtResource( "2" )

View File

@ -0,0 +1,11 @@
extends Node2D
@onready var spineboy: SpineSprite = $Spineboy
@onready var sprite: Sprite2D = $Spineboy/Sprite
func _world_transforms_changed(_sprite):
sprite.global_transform = spineboy.get_global_bone_transform("gun-tip")
func _ready():
spineboy.get_animation_state().set_animation("walk", true, 0)
spineboy.connect("world_transforms_changed", Callable(self, "_world_transforms_changed"))

View File

@ -0,0 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://dm0y2i1jdd28x"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="1"]
[ext_resource type="Script" path="res://examples/06-bone-following/bone-following.gd" id="2"]
[ext_resource type="Texture2D" uid="uid://8ud5n2ywp5ba" path="res://icon.png" id="3"]
[node name="Node2D" type="Node2D"]
script = ExtResource( "2" )
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(478, 483)
scale = Vector2(0.58461, 0.58461)
skeleton_data_res = ExtResource( "1" )
[node name="Sprite" type="Sprite2D" parent="Spineboy"]
position = Vector2(20, 20)
texture = ExtResource( "3" )

View File

@ -0,0 +1,11 @@
extends Node2D
@onready var spineboy: SpineSprite = $Spineboy
@onready var raptor: SpineSprite = $Spineboy/SlotNodeGun/Raptor
@onready var tiny_spineboy: SpineSprite = $Spineboy/SlotNodeFrontFist/TinySpineboy
func _ready():
var entry = spineboy.get_animation_state().set_animation("run", true, 0)
entry.set_time_scale(0.1)
raptor.get_animation_state().set_animation("walk", true, 0)
tiny_spineboy.get_animation_state().set_animation("walk", true, 0)

View File

@ -0,0 +1,35 @@
[gd_scene load_steps=4 format=3 uid="uid://ca6sxv2ecmfue"]
[ext_resource type="Script" path="res://examples/07-slot-node/slot-node.gd" id="1"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="2"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raprot-data.tres" id="3"]
[node name="Node2D" type="Node2D"]
script = ExtResource( "1" )
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2(506, 480)
scale = Vector2(0.560712, 0.560712)
skeleton_data_res = ExtResource( "2" )
[node name="SlotNodeGun" type="SpineSlotNode" parent="Spineboy"]
position = Vector2(40.8752, -276.036)
rotation = 0.837234
scale = Vector2(1, 1)
slot_name = "gun"
[node name="Raptor" type="SpineSprite" parent="Spineboy/SlotNodeGun"]
position = Vector2(84.6909, -67.9174)
scale = Vector2(0.193472, 0.193472)
skeleton_data_res = ExtResource( "3" )
[node name="SlotNodeFrontFist" type="SpineSlotNode" parent="Spineboy"]
position = Vector2(-29.0298, -241.577)
rotation = 0.995187
scale = Vector2(1, 1)
slot_name = "front-fist"
[node name="TinySpineboy" type="SpineSprite" parent="Spineboy/SlotNodeFrontFist"]
position = Vector2(-2.64624, -10.8111)
scale = Vector2(0.193389, 0.193389)
skeleton_data_res = ExtResource( "2" )

View File

@ -0,0 +1,33 @@
extends Node2D
@onready var player = $AnimationPlayer
@onready var spineboy = $Spineboy
var speed = 400;
var velocity_x = 0;
func _ready():
player.play("cutscene")
pass
func _process(delta):
if (!player.is_playing()):
if Input.is_action_just_released("ui_left"):
spineboy.get_animation_state().set_animation("idle", true, 0)
velocity_x = 0
if Input.is_action_just_released("ui_right"):
spineboy.get_animation_state().set_animation("idle", true, 0)
velocity_x = 0
if (Input.is_action_just_pressed("ui_right")):
spineboy.get_animation_state().set_animation("run", true, 0)
spineboy.get_skeleton().set_scale_x(1)
velocity_x = 1
if Input.is_action_just_pressed("ui_left"):
spineboy.get_animation_state().set_animation("run", true, 0)
spineboy.get_skeleton().set_scale_x(-1)
velocity_x = -1
spineboy.position.x += velocity_x * speed * delta

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -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/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

View File

@ -0,0 +1,35 @@
; 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/08-animation-player/animation-player.tscn"
run/low_processor_mode=true
config/icon="res://icon.png"
config/features=PackedStringArray("4.0")
[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"

View File

@ -0,0 +1,4 @@
extends SpineSprite
func _ready():
get_animation_state().set_animation("walk", true)

View File

@ -0,0 +1,583 @@
[gd_scene load_steps=3 format=3 uid="uid://b2hntkowlhaxt"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="1"]
[ext_resource type="Script" path="res://tests/batch-test.gd" id="2"]
[node name="Node2D" type="Node2D"]
rotation = -3.67884e-05
[node name="SpineSprite" type="SpineSprite" parent="."]
position = Vector2(53.8037, 119.483)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite2" type="SpineSprite" parent="."]
position = Vector2(111.488, 119.485)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite3" type="SpineSprite" parent="."]
position = Vector2(164.678, 119.487)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite4" type="SpineSprite" parent="."]
position = Vector2(217.119, 121.736)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite5" type="SpineSprite" parent="."]
position = Vector2(277.051, 120.989)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite6" type="SpineSprite" parent="."]
position = Vector2(337.733, 118.744)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite7" type="SpineSprite" parent="."]
position = Vector2(403.658, 120.994)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite8" type="SpineSprite" parent="."]
position = Vector2(464.34, 120.996)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite9" type="SpineSprite" parent="."]
position = Vector2(525.021, 120.998)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite10" type="SpineSprite" parent="."]
position = Vector2(589.448, 121.001)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite11" type="SpineSprite" parent="."]
position = Vector2(649.381, 121.752)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite12" type="SpineSprite" parent="."]
position = Vector2(709.313, 123.253)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite13" type="SpineSprite" parent="."]
position = Vector2(769.245, 119.509)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite14" type="SpineSprite" parent="."]
position = Vector2(830.676, 119.511)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite15" type="SpineSprite" parent="."]
position = Vector2(892.106, 121.761)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite16" type="SpineSprite" parent="."]
position = Vector2(953.537, 121.763)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite17" type="SpineSprite" parent="."]
position = Vector2(56.0478, 207.883)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite18" type="SpineSprite" parent="."]
position = Vector2(113.733, 207.885)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite19" type="SpineSprite" parent="."]
position = Vector2(166.923, 207.887)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite20" type="SpineSprite" parent="."]
position = Vector2(219.363, 210.136)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite21" type="SpineSprite" parent="."]
position = Vector2(279.295, 209.389)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite22" type="SpineSprite" parent="."]
position = Vector2(339.977, 207.144)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite23" type="SpineSprite" parent="."]
position = Vector2(405.902, 209.394)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite24" type="SpineSprite" parent="."]
position = Vector2(466.584, 209.396)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite25" type="SpineSprite" parent="."]
position = Vector2(527.265, 209.399)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite26" type="SpineSprite" parent="."]
position = Vector2(591.692, 209.401)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite27" type="SpineSprite" parent="."]
position = Vector2(651.625, 210.152)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite28" type="SpineSprite" parent="."]
position = Vector2(711.557, 211.653)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite29" type="SpineSprite" parent="."]
position = Vector2(771.489, 207.909)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite30" type="SpineSprite" parent="."]
position = Vector2(832.92, 207.911)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite31" type="SpineSprite" parent="."]
position = Vector2(894.351, 210.161)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite32" type="SpineSprite" parent="."]
position = Vector2(955.781, 210.163)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite33" type="SpineSprite" parent="."]
position = Vector2(60.5394, 300.778)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite34" type="SpineSprite" parent="."]
position = Vector2(118.224, 300.78)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite35" type="SpineSprite" parent="."]
position = Vector2(171.414, 300.782)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite36" type="SpineSprite" parent="."]
position = Vector2(223.855, 303.032)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite37" type="SpineSprite" parent="."]
position = Vector2(283.787, 302.285)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite38" type="SpineSprite" parent="."]
position = Vector2(344.468, 300.039)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite39" type="SpineSprite" parent="."]
position = Vector2(410.394, 302.289)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite40" type="SpineSprite" parent="."]
position = Vector2(471.075, 302.292)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite41" type="SpineSprite" parent="."]
position = Vector2(531.757, 302.294)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite42" type="SpineSprite" parent="."]
position = Vector2(596.184, 302.296)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite43" type="SpineSprite" parent="."]
position = Vector2(656.116, 303.047)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite44" type="SpineSprite" parent="."]
position = Vector2(716.048, 304.548)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite45" type="SpineSprite" parent="."]
position = Vector2(775.981, 300.804)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite46" type="SpineSprite" parent="."]
position = Vector2(837.411, 300.807)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite47" type="SpineSprite" parent="."]
position = Vector2(898.842, 303.056)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite48" type="SpineSprite" parent="."]
position = Vector2(960.273, 303.059)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite49" type="SpineSprite" parent="."]
position = Vector2(60.5361, 389.178)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite50" type="SpineSprite" parent="."]
position = Vector2(118.221, 389.18)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite51" type="SpineSprite" parent="."]
position = Vector2(171.411, 389.182)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite52" type="SpineSprite" parent="."]
position = Vector2(223.851, 391.432)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite53" type="SpineSprite" parent="."]
position = Vector2(283.784, 390.685)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite54" type="SpineSprite" parent="."]
position = Vector2(344.465, 388.44)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite55" type="SpineSprite" parent="."]
position = Vector2(410.391, 390.689)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite56" type="SpineSprite" parent="."]
position = Vector2(471.072, 390.692)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite57" type="SpineSprite" parent="."]
position = Vector2(531.753, 390.694)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite58" type="SpineSprite" parent="."]
position = Vector2(596.181, 390.696)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite59" type="SpineSprite" parent="."]
position = Vector2(656.113, 391.448)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite60" type="SpineSprite" parent="."]
position = Vector2(716.045, 392.948)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite61" type="SpineSprite" parent="."]
position = Vector2(775.978, 389.204)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite62" type="SpineSprite" parent="."]
position = Vector2(837.408, 389.207)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite63" type="SpineSprite" parent="."]
position = Vector2(898.839, 391.456)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite64" type="SpineSprite" parent="."]
position = Vector2(960.269, 391.459)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite65" type="SpineSprite" parent="."]
position = Vector2(62.0311, 477.578)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite66" type="SpineSprite" parent="."]
position = Vector2(119.716, 477.581)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite67" type="SpineSprite" parent="."]
position = Vector2(172.906, 477.583)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite68" type="SpineSprite" parent="."]
position = Vector2(225.346, 479.832)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite69" type="SpineSprite" parent="."]
position = Vector2(285.279, 479.085)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite70" type="SpineSprite" parent="."]
position = Vector2(345.96, 476.84)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite71" type="SpineSprite" parent="."]
position = Vector2(411.886, 479.09)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite72" type="SpineSprite" parent="."]
position = Vector2(472.567, 479.092)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite73" type="SpineSprite" parent="."]
position = Vector2(533.248, 479.094)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite74" type="SpineSprite" parent="."]
position = Vector2(597.676, 479.096)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite75" type="SpineSprite" parent="."]
position = Vector2(657.608, 479.848)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite76" type="SpineSprite" parent="."]
position = Vector2(717.54, 481.348)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite77" type="SpineSprite" parent="."]
position = Vector2(777.473, 477.605)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite78" type="SpineSprite" parent="."]
position = Vector2(838.903, 477.607)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite79" type="SpineSprite" parent="."]
position = Vector2(900.334, 479.857)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite80" type="SpineSprite" parent="."]
position = Vector2(961.765, 479.859)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite81" type="SpineSprite" parent="."]
position = Vector2(66.5229, 562.233)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite82" type="SpineSprite" parent="."]
position = Vector2(124.208, 562.235)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite83" type="SpineSprite" parent="."]
position = Vector2(177.398, 562.237)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite84" type="SpineSprite" parent="."]
position = Vector2(229.838, 564.486)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite85" type="SpineSprite" parent="."]
position = Vector2(289.77, 563.74)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite86" type="SpineSprite" parent="."]
position = Vector2(350.452, 561.494)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite87" type="SpineSprite" parent="."]
position = Vector2(416.377, 563.744)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite88" type="SpineSprite" parent="."]
position = Vector2(477.059, 563.746)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite89" type="SpineSprite" parent="."]
position = Vector2(537.74, 563.749)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite90" type="SpineSprite" parent="."]
position = Vector2(602.167, 563.751)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite91" type="SpineSprite" parent="."]
position = Vector2(662.1, 564.502)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite92" type="SpineSprite" parent="."]
position = Vector2(722.032, 566.003)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite93" type="SpineSprite" parent="."]
position = Vector2(781.964, 562.259)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite94" type="SpineSprite" parent="."]
position = Vector2(843.395, 562.261)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite95" type="SpineSprite" parent="."]
position = Vector2(904.826, 564.511)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )
[node name="SpineSprite96" type="SpineSprite" parent="."]
position = Vector2(966.256, 564.513)
scale = Vector2(0.1, 0.1)
skeleton_data_res = ExtResource( "1" )
script = ExtResource( "2" )

View File

@ -0,0 +1,39 @@
extends SpineSprite
func test_spine_animation():
var walkAnim: SpineAnimation = get_skeleton().get_data().find_animation("walk")
assert(walkAnim.get_name() == "walk")
var duration = walkAnim.get_duration()
walkAnim.set_duration(duration + 1)
assert(walkAnim.get_duration() == duration + 1)
assert(walkAnim.get_timelines().size() == 39)
var timeline: SpineTimeline = walkAnim.get_timelines()[0]
var propertyIds = timeline.get_property_ids()
assert(walkAnim.has_timeline(propertyIds))
assert(!walkAnim.has_timeline([0]))
func test_spine_timeline():
var walkAnim: SpineAnimation = get_skeleton().get_data().find_animation("walk")
var timeline: SpineTimeline = walkAnim.get_timelines()[0]
assert(timeline.get_duration() == 1)
assert(timeline.get_property_ids() == [4294967300])
assert(timeline.get_type() == "RotateTimeline")
func test_spine_object_invalidation():
var skeleton_data = get_skeleton().get_data()
var bone_data = skeleton_data.find_bone("gun");
var old_bone_data_x = bone_data.get_x();
var bone = get_skeleton().find_bone("gun")
var old_bone_x = bone.get_x()
skeleton_data_res = null
assert(old_bone_x != bone.get_x())
assert(old_bone_data_x == bone_data.get_x())
skeleton_data.atlas_res = null;
assert(old_bone_data_x != bone_data.get_x())
func _ready():
test_spine_animation()
test_spine_timeline()
test_spine_object_invalidation()
print("All tests passed")

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://32p13eo7undk"]
[ext_resource type="Script" path="res://tests/unit-tests.gd" id="1"]
[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spinebody-data-res.tres" id="2"]
[node name="Node2D" type="Node2D"]
position = Vector2(496.659, 431.634)
scale = Vector2(0.7, 0.7)
[node name="SpineSprite" type="SpineSprite" parent="."]
skeleton_data_res = ExtResource( "2" )
script = ExtResource( "1" )