diff options
Diffstat (limited to 'scene/3d/spatial.cpp')
-rw-r--r-- | scene/3d/spatial.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 6498238e12..2c1ef5c00b 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -128,7 +128,7 @@ void Spatial::_notification(int p_what) { Node *p = get_parent(); if (p) - data.parent = p->cast_to<Spatial>(); + data.parent = Object::cast_to<Spatial>(p); if (data.parent) data.C = data.parent->data.children.push_back(this); @@ -167,7 +167,7 @@ void Spatial::_notification(int p_what) { data.viewport = NULL; Node *parent = get_parent(); while (parent && !data.viewport) { - data.viewport = parent->cast_to<Viewport>(); + data.viewport = Object::cast_to<Viewport>(parent); parent = parent->get_parent(); } @@ -185,8 +185,13 @@ void Spatial::_notification(int p_what) { get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); if (!data.gizmo_disabled) { - if (data.gizmo.is_valid()) + if (data.gizmo.is_valid()) { data.gizmo->create(); + if (data.gizmo->can_draw()) { + data.gizmo->redraw(); + } + data.gizmo->transform(); + } } } #endif @@ -284,7 +289,7 @@ Transform Spatial::get_global_transform() const { #if 0 void Spatial::add_child_notify(Node *p_child) { /* - Spatial *s=p_child->cast_to<Spatial>(); + Spatial *s=Object::cast_to<Spatial>(p_child); if (!s) return; @@ -299,7 +304,7 @@ void Spatial::add_child_notify(Node *p_child) { void Spatial::remove_child_notify(Node *p_child) { /* - Spatial *s=p_child->cast_to<Spatial>(); + Spatial *s=Object::cast_to<Spatial>(p_child); if (!s) return; @@ -449,7 +454,9 @@ void Spatial::set_gizmo(const Ref<SpatialGizmo> &p_gizmo) { if (data.gizmo.is_valid() && is_inside_world()) { data.gizmo->create(); - data.gizmo->redraw(); + if (data.gizmo->can_draw()) { + data.gizmo->redraw(); + } data.gizmo->transform(); } @@ -471,12 +478,16 @@ Ref<SpatialGizmo> Spatial::get_gizmo() const { void Spatial::_update_gizmo() { + if (!is_inside_world()) + return; data.gizmo_dirty = false; if (data.gizmo.is_valid()) { - if (is_visible_in_tree()) - data.gizmo->redraw(); - else - data.gizmo->clear(); + if (data.gizmo->can_draw()) { + if (is_visible_in_tree()) + data.gizmo->redraw(); + else + data.gizmo->clear(); + } } } |