diff options
Diffstat (limited to 'scene/3d/node_3d.cpp')
-rw-r--r-- | scene/3d/node_3d.cpp | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index 2a1b35ae39..73f17060df 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -103,8 +103,9 @@ void Node3D::_propagate_transform_changed(Node3D *p_origin) { data.children_lock++; for (List<Node3D *>::Element *E = data.children.front(); E; E = E->next()) { - if (E->get()->data.toplevel_active) + if (E->get()->data.toplevel_active) { continue; //don't propagate to a toplevel + } E->get()->_propagate_transform_changed(p_origin); } #ifdef TOOLS_ENABLED @@ -125,13 +126,15 @@ void Node3D::_notification(int p_what) { ERR_FAIL_COND(!get_tree()); Node *p = get_parent(); - if (p) + if (p) { data.parent = Object::cast_to<Node3D>(p); + } - if (data.parent) + if (data.parent) { data.C = data.parent->data.children.push_back(this); - else + } else { data.C = nullptr; + } if (data.toplevel && !Engine::get_singleton()->is_editor_hint()) { if (data.parent) { @@ -149,10 +152,12 @@ void Node3D::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { notification(NOTIFICATION_EXIT_WORLD, true); - if (xform_change.in_list()) + if (xform_change.in_list()) { get_tree()->xform_change_list.remove(&xform_change); - if (data.C) + } + if (data.C) { data.parent->data.children.erase(data.C); + } data.parent = nullptr; data.C = nullptr; data.toplevel_active = false; @@ -287,15 +292,17 @@ Node3D *Node3D::get_parent_spatial() const { } Transform Node3D::get_relative_transform(const Node *p_parent) const { - if (p_parent == this) + if (p_parent == this) { return Transform(); + } ERR_FAIL_COND_V(!data.parent, Transform()); - if (p_parent == data.parent) + if (p_parent == data.parent) { return get_transform(); - else + } else { return data.parent->get_relative_transform(p_parent) * get_transform(); + } } void Node3D::set_translation(const Vector3 &p_translation) { @@ -373,14 +380,18 @@ Vector3 Node3D::get_scale() const { void Node3D::update_gizmo() { #ifdef TOOLS_ENABLED - if (!is_inside_world()) + if (!is_inside_world()) { return; - if (!data.gizmo.is_valid()) + } + if (!data.gizmo.is_valid()) { get_tree()->call_group_flags(SceneTree::GROUP_CALL_REALTIME, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); - if (!data.gizmo.is_valid()) + } + if (!data.gizmo.is_valid()) { return; - if (data.gizmo_dirty) + } + if (data.gizmo_dirty) { return; + } data.gizmo_dirty = true; MessageQueue::get_singleton()->push_call(this, "_update_gizmo"); #endif @@ -389,10 +400,12 @@ void Node3D::update_gizmo() { void Node3D::set_gizmo(const Ref<Node3DGizmo> &p_gizmo) { #ifdef TOOLS_ENABLED - if (data.gizmo_disabled) + if (data.gizmo_disabled) { return; - if (data.gizmo.is_valid() && is_inside_world()) + } + if (data.gizmo.is_valid() && is_inside_world()) { data.gizmo->free(); + } data.gizmo = p_gizmo; if (data.gizmo.is_valid() && is_inside_world()) { data.gizmo->create(); @@ -417,14 +430,16 @@ Ref<Node3DGizmo> Node3D::get_gizmo() const { void Node3D::_update_gizmo() { #ifdef TOOLS_ENABLED - if (!is_inside_world()) + if (!is_inside_world()) { return; + } data.gizmo_dirty = false; if (data.gizmo.is_valid()) { - if (is_visible_in_tree()) + if (is_visible_in_tree()) { data.gizmo->redraw(); - else + } else { data.gizmo->clear(); + } } #endif } @@ -432,8 +447,9 @@ void Node3D::_update_gizmo() { #ifdef TOOLS_ENABLED void Node3D::set_disable_gizmo(bool p_enabled) { data.gizmo_disabled = p_enabled; - if (!p_enabled && data.gizmo.is_valid()) + if (!p_enabled && data.gizmo.is_valid()) { data.gizmo = Ref<Node3DGizmo>(); + } } #endif @@ -447,13 +463,15 @@ bool Node3D::is_scale_disabled() const { } void Node3D::set_as_toplevel(bool p_enabled) { - if (data.toplevel == p_enabled) + if (data.toplevel == p_enabled) { return; + } if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) { - if (p_enabled) + if (p_enabled) { set_transform(get_global_transform()); - else if (data.parent) + } else if (data.parent) { set_transform(data.parent->get_global_transform().affine_inverse() * get_global_transform()); + } data.toplevel = p_enabled; data.toplevel_active = p_enabled; @@ -479,38 +497,44 @@ void Node3D::_propagate_visibility_changed() { emit_signal(SceneStringNames::get_singleton()->visibility_changed); _change_notify("visible"); #ifdef TOOLS_ENABLED - if (data.gizmo.is_valid()) + if (data.gizmo.is_valid()) { _update_gizmo(); + } #endif for (List<Node3D *>::Element *E = data.children.front(); E; E = E->next()) { Node3D *c = E->get(); - if (!c || !c->data.visible) + if (!c || !c->data.visible) { continue; + } c->_propagate_visibility_changed(); } } void Node3D::show() { - if (data.visible) + if (data.visible) { return; + } data.visible = true; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _propagate_visibility_changed(); } void Node3D::hide() { - if (!data.visible) + if (!data.visible) { return; + } data.visible = false; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _propagate_visibility_changed(); } @@ -529,10 +553,11 @@ bool Node3D::is_visible_in_tree() const { } void Node3D::set_visible(bool p_visible) { - if (p_visible) + if (p_visible) { show(); - else + } else { hide(); + } } bool Node3D::is_visible() const { |