summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-08-17 15:43:38 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-08-17 15:43:38 +0200
commite73a4a382ee57c9eb006d7e8f11038643081b12b (patch)
treeaa4169bddbc945474b2fa2f5fadf3eaae7a0e512
parent1537452aa94e3fdb19386eac9f8394b391998e8a (diff)
parent4795c3cdfa5cebaaee6c5ca0ea070d0e7c4305e4 (diff)
downloadredot-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.cpp5
-rw-r--r--core/io/resource.h2
-rw-r--r--scene/main/viewport.cpp17
-rw-r--r--scene/main/viewport.h2
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;