Overhaul Resource::duplicate_for_local_scene()

- Serves as a first step for future refactors.
- Code is simpler.
- Algorithm is more efficient: instead of two passes (dumb copy + resolve copies), it's single-pass.
- Now obeys `PROPERTY_USAGE_NEVER_DUPLICATE`.
- Now handles deep self-references (the resource to be duplicated being referenced somewhere deep).
This commit is contained in:
Pedro J. Estébanez
2024-12-19 10:15:02 +01:00
parent 34f005d810
commit f5383df83b
2 changed files with 67 additions and 39 deletions
+1 -1
View File
@@ -83,7 +83,7 @@ private:
SelfList<Resource> remapped_list;
void _dupe_sub_resources(Variant &r_variant, Node *p_for_scene, HashMap<Ref<Resource>, Ref<Resource>> &p_remap_cache);
Variant _duplicate_recursive_for_local_scene(const Variant &p_variant, Node *p_for_scene, HashMap<Ref<Resource>, Ref<Resource>> &p_remap_cache);
void _find_sub_resources(const Variant &p_variant, HashSet<Ref<Resource>> &p_resources_found);
protected: