[godot] Fix update order of SpineBoneNode.

This commit is contained in:
badlogic 2022-05-01 07:12:52 +02:00
parent 8bf6d2f45d
commit b9b123ff48
10 changed files with 376 additions and 28 deletions

View File

@ -2,10 +2,10 @@ extends Node2D
onready var spineboy: SpineSprite = $Spineboy
func _before_world_transforms_change(_sprite):
func _world_transforms_changed(_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", self, "_before_world_transforms_change")
spineboy.connect("world_transforms_changed", self, "_world_transforms_changed")

View File

@ -8,5 +8,8 @@ script = ExtResource( 1 )
[node name="Spineboy" type="SpineSprite" parent="."]
position = Vector2( 481, 457 )
scale = Vector2( 0.457952, 0.457952 )
scale = Vector2( 0.5, 0.5 )
skeleton_data_res = ExtResource( 2 )
preview_animation = "-- Empty --"
preview_frame = false
preview_time = 0.0

View File

@ -15,8 +15,7 @@ preview_frame = true
preview_time = 0.0
[node name="HoverboardCenterBone" type="SpineBoneNode" parent="SpineSprite"]
position = Vector2( -6.26196, -111.618 )
rotation = -0.0046904
position = Vector2( 21.5753, -111.472 )
bone_name = "hoverboard-controller"
bone_mode = 1
@ -35,7 +34,6 @@ cast_to = Vector2( 0, 1000 )
[node name="HipBone" type="SpineBoneNode" parent="SpineSprite"]
position = Vector2( -36.9481, -338.198 )
rotation = 3.14072
bone_name = "hip"
bone_mode = 1

View File

@ -10,574 +10,862 @@ rotation = -3.67884e-05
position = Vector2( 53.8037, 119.483 )
scale = Vector2( 0.1, 0.1 )
skeleton_data_res = ExtResource( 1 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = true
preview_time = 2.36477e-39
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 )
preview_animation = ""
preview_frame = true
preview_time = 6.85235e-43
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 51.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
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 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
script = ExtResource( 2 )

View File

@ -0,0 +1,26 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://assets/spineboy/spineboy-data-res.tres" type="SpineSkeletonDataResource" id=1]
[ext_resource path="res://icon.png" type="Texture" id=2]
[node name="Node2D" type="Node2D"]
[node name="SpineSprite" type="SpineSprite" parent="."]
position = Vector2( 483, 490 )
scale = Vector2( 0.548763, 0.548763 )
skeleton_data_res = ExtResource( 1 )
preview_animation = ""
preview_frame = false
preview_time = 0.0
[node name="SpineBoneNode" type="SpineBoneNode" parent="SpineSprite"]
position = Vector2( 40.8752, -276.036 )
rotation = 0.837234
scale = Vector2( 1, 1 )
bone_name = "gun"
bone_mode = 1
[node name="Sprite" type="Sprite" parent="."]
visible = false
position = Vector2( 505.431, 338.522 )
texture = ExtResource( 2 )

View File

@ -449,6 +449,8 @@ void SpineBone::set_transform(Transform2D transform) {
set_rotation(rotation);
set_scale_x(scale.x);
set_scale_y(scale.y);
get_spine_owner()->set_modified_bones();
}
Transform2D SpineBone::get_global_transform() {
@ -466,15 +468,28 @@ void SpineBone::set_global_transform(Transform2D transform) {
SPINE_CHECK(get_spine_object(),)
if (!get_spine_owner()) set_transform(transform);
if (!get_spine_owner()->is_visible_in_tree()) return;
transform = get_spine_owner()->get_global_transform().affine_inverse() * transform;
Vector2 position = transform.get_origin();
position.y *= -1;
float rotation = world_to_local_rotation(Math::rad2deg(transform.get_rotation()));
Vector2 scale = transform.get_scale();
set_x(position.x);
set_y(position.y);
set_rotation(rotation);
set_scale_x(scale.x);
set_scale_y(scale.y);
auto bone = get_spine_object();
Transform2D inverse_sprite_transform = get_spine_owner()->get_global_transform().affine_inverse();
transform = inverse_sprite_transform * transform;
Vector2 position = transform.get_origin();
float local_x = position.x, local_y = position.y;
float local_rotation = Math::rad2deg(transform.get_rotation());
Vector2 local_scale = transform.get_scale();
spine::Bone *parent = bone->getParent();
if (parent) {
parent->worldToLocal(local_x, local_y, local_x, local_y);
parent->worldToLocal(position.x + local_scale.x, position.y + local_scale.y, local_scale.x, local_scale.y);
local_scale.x -= local_x;
local_scale.y = -(local_scale.y - local_y);
local_rotation = 180 + bone->worldToLocalRotation(local_rotation);
}
bone->setX(local_x);
bone->setY(local_y);
bone->setRotation(local_rotation);
bone->setScaleX(local_scale.x);
bone->setScaleY(local_scale.y);
get_spine_owner()->set_modified_bones();
}

View File

@ -32,7 +32,6 @@
void SpineBoneNode::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_bone_mode"), &SpineBoneNode::set_bone_mode);
ClassDB::bind_method(D_METHOD("get_bone_mode"), &SpineBoneNode::get_bone_mode);
ClassDB::bind_method(D_METHOD("_before_world_transforms_change", "spine_sprite"), &SpineBoneNode::before_world_transforms_change);
ClassDB::bind_method(D_METHOD("_on_world_transforms_changed", "spine_sprite"), &SpineBoneNode::on_world_transforms_changed);
ADD_PROPERTY(PropertyInfo(Variant::INT, "bone_mode", PROPERTY_HINT_ENUM, "Follow,Drive"), "set_bone_mode", "get_bone_mode");
@ -44,10 +43,8 @@ void SpineBoneNode::_notification(int what) {
SpineSprite *sprite = cast_to<SpineSprite>(get_parent());
if (sprite) {
#if VERSION_MAJOR > 3
sprite->connect("before_world_transforms_change", callable_mp(this, &SpineBoneNode::before_world_transforms_change));
sprite->connect("world_transforms_changed", callable_mp(this, &SpineSlotNode::on_world_transforms_changed));
#else
sprite->connect("before_world_transforms_change", this, "_before_world_transforms_change");
sprite->connect("world_transforms_changed", this, "_on_world_transforms_changed");
#endif
update_transform(sprite);
@ -70,10 +67,8 @@ void SpineBoneNode::_notification(int what) {
SpineSprite *sprite = cast_to<SpineSprite>(get_parent());
if (sprite) {
#if VERSION_MAJOR > 3
sprite->disconnect("before_world_transforms_change", callable_mp(this, &SpineBoneNode::before_world_transforms_change));
sprite->disconnect("world_transforms_changed", callable_mp(this, &SpineSlotNode::on_world_transforms_changed));
#else
sprite->disconnect("before_world_transforms_change", this, "_before_world_transforms_change");
sprite->disconnect("world_transforms_changed", this, "_on_world_transforms_changed");
#endif
}
@ -114,19 +109,16 @@ bool SpineBoneNode::_get(const StringName& property, Variant& value) const {
bool SpineBoneNode::_set(const StringName& property, const Variant& value) {
if (property == "bone_name") {
bone_name = value;
SpineSprite *sprite = cast_to<SpineSprite>(get_parent());
init_transform(sprite);
return true;
}
return false;
}
void SpineBoneNode::before_world_transforms_change(const Variant& _sprite) {
SpineSprite* sprite = cast_to<SpineSprite>(_sprite.operator Object*());
if (bone_mode == SpineConstant::BoneMode_Drive) update_transform(sprite);
}
void SpineBoneNode::on_world_transforms_changed(const Variant& _sprite) {
SpineSprite* sprite = cast_to<SpineSprite>(_sprite.operator Object*());
if (bone_mode == SpineConstant::BoneMode_Follow) update_transform(sprite);
update_transform(sprite);
}
void SpineBoneNode::update_transform(SpineSprite* sprite) {
@ -143,10 +135,29 @@ void SpineBoneNode::update_transform(SpineSprite* sprite) {
}
}
void SpineBoneNode::init_transform(SpineSprite* sprite) {
if (!sprite) return;
if (bone_mode == SpineConstant::BoneMode_Drive) return;
sprite->get_skeleton()->set_to_setup_pose();
set_global_transform(sprite->get_global_bone_transform(bone_name));
update_transform(sprite);
#if VERSION_MAJOR == 3
_change_notify("transform/translation");
_change_notify("transform/rotation");
_change_notify("transform/scale");
_change_notify("translation");
_change_notify("rotation");
_change_notify("rotation_deg");
_change_notify("scale");
#endif
}
SpineConstant::BoneMode SpineBoneNode::get_bone_mode() {
return bone_mode;
}
void SpineBoneNode::set_bone_mode(SpineConstant::BoneMode _bone_mode) {
bone_mode = _bone_mode;
SpineSprite *sprite = cast_to<SpineSprite>(get_parent());
init_transform(sprite);
}

View File

@ -45,9 +45,9 @@ protected:
void _get_property_list(List<PropertyInfo> *list) const;
bool _get(const StringName &property, Variant &value) const;
bool _set(const StringName &property, const Variant &value);
void before_world_transforms_change(const Variant &_sprite);
void on_world_transforms_changed(const Variant &_sprite);
void update_transform(SpineSprite *sprite);
void init_transform(SpineSprite *sprite);
public:
SpineBoneNode(): bone_mode(SpineConstant::BoneMode_Follow) {}

View File

@ -313,6 +313,7 @@ bool SpineSprite::_get(const StringName& property, Variant& value) const {
}
static void update_preview_animation(SpineSprite *sprite, const String &animation, bool frame, float time) {
sprite->get_skeleton()->set_to_setup_pose();
if (EMPTY(animation) || animation == "-- Empty --") {
sprite->get_animation_state()->set_empty_animation(0, 0);
return;
@ -365,7 +366,9 @@ void SpineSprite::update_skeleton(float delta) {
animation_state->apply(skeleton);
emit_signal("before_world_transforms_change", this);
skeleton->update_world_transform();
modified_bones = false;
emit_signal("world_transforms_changed", this);
if (modified_bones) skeleton->update_world_transform();
sort_slot_nodes();
update_meshes(skeleton);
update();

View File

@ -39,6 +39,8 @@ class SpineSlotNode;
class SpineSprite : public Node2D, public spine::AnimationStateListenerObject {
GDCLASS(SpineSprite, Node2D)
friend class SpineBone;
protected:
Ref<SpineSkeletonDataResource> skeleton_data_res;
@ -58,6 +60,7 @@ protected:
Ref<Material> multiply_material;
Ref<Material> screen_material;
spine::SkeletonClipping *skeleton_clipper;
bool modified_bones;
static void _bind_methods();
void _notification(int what);
@ -69,6 +72,7 @@ protected:
void remove_meshes();
void sort_slot_nodes();
void update_meshes(Ref<SpineSkeleton> skeleton_ref);
void set_modified_bones() { modified_bones = true; }
void callback(spine::AnimationState *state, spine::EventType type, spine::TrackEntry *entry, spine::Event *event);