diff options
Diffstat (limited to 'scene/3d/spatial.cpp')
-rw-r--r-- | scene/3d/spatial.cpp | 67 |
1 files changed, 24 insertions, 43 deletions
diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 848b08eb8f..7db3bb18bd 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -29,6 +29,7 @@ /*************************************************************************/ #include "spatial.h" +#include "engine.h" #include "message_queue.h" #include "scene/main/viewport.h" #include "scene/scene_string_names.h" @@ -127,14 +128,14 @@ 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); else data.C = NULL; - if (data.toplevel && !get_tree()->is_editor_hint()) { + if (data.toplevel && !Engine::get_singleton()->is_editor_hint()) { if (data.parent) { data.local_transform = data.parent->get_global_transform() * get_transform(); @@ -166,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(); } @@ -178,14 +179,19 @@ void Spatial::_notification(int p_what) { get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_enter_world, NULL, 0); } #ifdef TOOLS_ENABLED - if (get_tree()->is_editor_hint()) { + if (Engine::get_singleton()->is_editor_hint()) { //get_scene()->call_group(SceneMainLoop::GROUP_CALL_REALTIME,SceneStringNames::get_singleton()->_spatial_editor_group,SceneStringNames::get_singleton()->_request_gizmo,this); 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 @@ -280,37 +286,6 @@ Transform Spatial::get_global_transform() const { return data.global_transform; } -#if 0 -void Spatial::add_child_notify(Node *p_child) { -/* - Spatial *s=p_child->cast_to<Spatial>(); - if (!s) - return; - - ERR_FAIL_COND(data.children_lock>0); - - s->data.dirty=DIRTY_GLOBAL; // don't allow global transform to be valid - s->data.parent=this; - data.children.push_back(s); - s->data.C=data.children.back(); -*/ -} - -void Spatial::remove_child_notify(Node *p_child) { -/* - Spatial *s=p_child->cast_to<Spatial>(); - if (!s) - return; - - ERR_FAIL_COND(data.children_lock>0); - - if (s->data.C) - data.children.erase(s->data.C); - s->data.parent=NULL; - s->data.C=NULL; -*/ -} -#endif Spatial *Spatial::get_parent_spatial() const { @@ -448,7 +423,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(); } @@ -470,12 +447,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(); + } } } @@ -492,7 +473,7 @@ void Spatial::set_as_toplevel(bool p_enabled) { if (data.toplevel == p_enabled) return; - if (is_inside_tree() && !get_tree()->is_editor_hint()) { + if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) { if (p_enabled) set_transform(get_global_transform()); |