diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-17 15:43:38 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-17 15:43:38 +0200 |
commit | e73a4a382ee57c9eb006d7e8f11038643081b12b (patch) | |
tree | aa4169bddbc945474b2fa2f5fadf3eaae7a0e512 | |
parent | 1537452aa94e3fdb19386eac9f8394b391998e8a (diff) | |
parent | 4795c3cdfa5cebaaee6c5ca0ea070d0e7c4305e4 (diff) | |
download | redot-engine-e73a4a382ee57c9eb006d7e8f11038643081b12b.tar.gz |
Merge pull request #79201 from Rindbee/fix-setup-state-not-cleared
Clear the previously set state when configuring for a new scene root node
-rw-r--r-- | core/io/resource.cpp | 5 | ||||
-rw-r--r-- | core/io/resource.h | 2 | ||||
-rw-r--r-- | scene/main/viewport.cpp | 17 | ||||
-rw-r--r-- | scene/main/viewport.h | 2 |
4 files changed, 20 insertions, 6 deletions
diff --git a/core/io/resource.cpp b/core/io/resource.cpp index 07677337b4..68cdeabac7 100644 --- a/core/io/resource.cpp +++ b/core/io/resource.cpp @@ -239,6 +239,7 @@ void Resource::configure_for_local_scene(Node *p_for_scene, HashMap<Ref<Resource List<PropertyInfo> plist; get_property_list(&plist); + reset_local_to_scene(); local_scene = p_for_scene; for (const PropertyInfo &E : plist) { @@ -382,6 +383,10 @@ void Resource::setup_local_to_scene() { emit_signal(SNAME("setup_local_to_scene_requested")); } +void Resource::reset_local_to_scene() { + // Restores the state as if setup_local_to_scene() hadn't been called. +} + Node *(*Resource::_get_local_scene_func)() = nullptr; void (*Resource::_update_configuration_warning)() = nullptr; diff --git a/core/io/resource.h b/core/io/resource.h index af8c275a1c..f848bdba99 100644 --- a/core/io/resource.h +++ b/core/io/resource.h @@ -80,6 +80,8 @@ protected: void _set_path(const String &p_path); void _take_over_path(const String &p_path); + virtual void reset_local_to_scene(); + public: static Node *(*_get_local_scene_func)(); //used by editor static void (*_update_configuration_warning)(); //used by editor diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 41034466f9..7b2d67d776 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -87,12 +87,7 @@ void ViewportTexture::setup_local_to_scene() { } } -void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { - if (path == p_path) { - return; - } - - path = p_path; +void ViewportTexture::reset_local_to_scene() { vp_changed = true; if (vp) { @@ -104,6 +99,16 @@ void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { proxy_ph = RS::get_singleton()->texture_2d_placeholder_create(); RS::get_singleton()->texture_proxy_update(proxy, proxy_ph); } +} + +void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { + if (path == p_path) { + return; + } + + path = p_path; + + reset_local_to_scene(); if (get_local_scene() && !path.is_empty()) { setup_local_to_scene(); diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 346dc6af7e..68084fc35f 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -70,6 +70,8 @@ class ViewportTexture : public Texture2D { protected: static void _bind_methods(); + virtual void reset_local_to_scene() override; + public: void set_viewport_path_in_scene(const NodePath &p_path); NodePath get_viewport_path_in_scene() const; |