Fix for Node3D request gizmos multiple times

This can result in multiple gizmos being created for the same nodes in some circumstances
This commit is contained in:
Elise
2025-05-04 20:49:58 +10:00
parent 1cf573f44d
commit 1aa4c04895
2 changed files with 8 additions and 2 deletions

View File

@ -229,7 +229,8 @@ void Node3D::_notification(int p_what) {
}
#ifdef TOOLS_ENABLED
if (is_part_of_edited_scene()) {
if (is_part_of_edited_scene() && !data.gizmos_requested) {
data.gizmos_requested = true;
get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id());
}
#endif
@ -753,7 +754,10 @@ void Node3D::update_gizmos() {
}
if (data.gizmos.is_empty()) {
get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id());
if (!data.gizmos_requested) {
data.gizmos_requested = true;
get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id());
}
return;
}
if (data.gizmos_dirty) {
@ -1450,6 +1454,7 @@ Node3D::Node3D() :
data.fti_frame_xform_force_update = false;
#ifdef TOOLS_ENABLED
data.gizmos_requested = false;
data.gizmos_disabled = false;
data.gizmos_dirty = false;
data.transform_gizmo_visible = true;

View File

@ -154,6 +154,7 @@ private:
#ifdef TOOLS_ENABLED
Vector<Ref<Node3DGizmo>> gizmos;
bool gizmos_requested : 1;
bool gizmos_disabled : 1;
bool gizmos_dirty : 1;
bool transform_gizmo_visible : 1;