[godot] Only return global transforms is SpineSprite is visible in tree.

This commit is contained in:
badlogic 2022-04-23 22:14:32 +02:00
parent 30ef5d350a
commit 9f5eaf89a8
3 changed files with 5 additions and 6 deletions

View File

@ -465,6 +465,7 @@ void SpineBone::set_transform(Transform2D transform) {
Transform2D SpineBone::get_global_transform() {
SPINE_CHECK(bone, Transform2D())
if (!sprite) return get_transform();
if (!sprite->is_visible_in_tree()) return get_transform();
Transform2D local;
local.rotate(Math::deg2rad(-get_world_rotation_x()));
local.scale(Vector2(get_world_scale_x(), get_world_scale_y()));
@ -475,6 +476,7 @@ Transform2D SpineBone::get_global_transform() {
void SpineBone::set_global_transform(Transform2D transform) {
SPINE_CHECK(bone,)
if (!sprite) set_transform(transform);
if (!sprite->is_visible_in_tree()) return;
transform = sprite->get_global_transform().affine_inverse() * transform;
Vector2 position = transform.get_origin();
position.y *= -1;

View File

@ -95,6 +95,7 @@ void SpineSlotNode::update_transform(SpineSprite *sprite) {
}
auto bone = slot->get_bone();
if (!bone.is_valid()) return;
if (!is_visible_in_tree()) return;
this->set_global_transform(bone->get_global_transform());
}

View File

@ -480,9 +480,7 @@ void SpineSprite::callback(spine::AnimationState *state, spine::EventType type,
}
Transform2D SpineSprite::get_global_bone_transform(const String &bone_name) {
if (!animation_state.is_valid() && !skeleton.is_valid()) {
return get_global_transform();
}
if (!animation_state.is_valid() && !skeleton.is_valid()) return get_global_transform();
auto bone = skeleton->find_bone(bone_name);
if (!bone.is_valid()) {
print_error(vformat("Bone: '%s' not found.", bone_name));
@ -492,9 +490,7 @@ Transform2D SpineSprite::get_global_bone_transform(const String &bone_name) {
}
void SpineSprite::set_global_bone_transform(const String &bone_name, Transform2D transform) {
if (!animation_state.is_valid() && !skeleton.is_valid()) {
return;
}
if (!animation_state.is_valid() && !skeleton.is_valid()) return;
auto bone = skeleton->find_bone(bone_name);
if (!bone.is_valid()) {
return;