[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() { Transform2D SpineBone::get_global_transform() {
SPINE_CHECK(bone, Transform2D()) SPINE_CHECK(bone, Transform2D())
if (!sprite) return get_transform(); if (!sprite) return get_transform();
if (!sprite->is_visible_in_tree()) return get_transform();
Transform2D local; Transform2D local;
local.rotate(Math::deg2rad(-get_world_rotation_x())); local.rotate(Math::deg2rad(-get_world_rotation_x()));
local.scale(Vector2(get_world_scale_x(), get_world_scale_y())); 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) { void SpineBone::set_global_transform(Transform2D transform) {
SPINE_CHECK(bone,) SPINE_CHECK(bone,)
if (!sprite) set_transform(transform); if (!sprite) set_transform(transform);
if (!sprite->is_visible_in_tree()) return;
transform = sprite->get_global_transform().affine_inverse() * transform; transform = sprite->get_global_transform().affine_inverse() * transform;
Vector2 position = transform.get_origin(); Vector2 position = transform.get_origin();
position.y *= -1; position.y *= -1;

View File

@ -95,6 +95,7 @@ void SpineSlotNode::update_transform(SpineSprite *sprite) {
} }
auto bone = slot->get_bone(); auto bone = slot->get_bone();
if (!bone.is_valid()) return; if (!bone.is_valid()) return;
if (!is_visible_in_tree()) return;
this->set_global_transform(bone->get_global_transform()); 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) { Transform2D SpineSprite::get_global_bone_transform(const String &bone_name) {
if (!animation_state.is_valid() && !skeleton.is_valid()) { if (!animation_state.is_valid() && !skeleton.is_valid()) return get_global_transform();
return get_global_transform();
}
auto bone = skeleton->find_bone(bone_name); auto bone = skeleton->find_bone(bone_name);
if (!bone.is_valid()) { if (!bone.is_valid()) {
print_error(vformat("Bone: '%s' not found.", bone_name)); 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) { void SpineSprite::set_global_bone_transform(const String &bone_name, Transform2D transform) {
if (!animation_state.is_valid() && !skeleton.is_valid()) { if (!animation_state.is_valid() && !skeleton.is_valid()) return;
return;
}
auto bone = skeleton->find_bone(bone_name); auto bone = skeleton->find_bone(bone_name);
if (!bone.is_valid()) { if (!bone.is_valid()) {
return; return;