Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reimplement Resource._setup_local_to_scene & deprecate signal #67080

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion core/io/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,8 @@ Node *Resource::get_local_scene() const {
}

void Resource::setup_local_to_scene() {
// Can't use GDVIRTUAL in Resource, so this will have to be done with a signal
Mickeon marked this conversation as resolved.
Show resolved Hide resolved
emit_signal(SNAME("setup_local_to_scene_requested"));
GDVIRTUAL_CALL(_setup_local_to_scene);
}

void Resource::reset_local_to_scene() {
Expand Down Expand Up @@ -460,6 +460,7 @@ void Resource::_bind_methods() {
get_rid_bind.return_val.type = Variant::RID;

::ClassDB::add_virtual_method(get_class_static(), get_rid_bind, true, Vector<String>(), true);
GDVIRTUAL_BIND(_setup_local_to_scene);
}

Resource::Resource() :
Expand Down
2 changes: 2 additions & 0 deletions core/io/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

#include "core/io/resource_uid.h"
#include "core/object/class_db.h"
#include "core/object/gdvirtual.gen.inc"
#include "core/object/ref_counted.h"
#include "core/templates/safe_refcount.h"
#include "core/templates/self_list.h"
Expand Down Expand Up @@ -81,6 +82,7 @@ class Resource : public RefCounted {
void _take_over_path(const String &p_path);

virtual void reset_local_to_scene();
GDVIRTUAL0(_setup_local_to_scene);

public:
static Node *(*_get_local_scene_func)(); //used by editor
Expand Down
24 changes: 20 additions & 4 deletions doc/classes/Resource.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,21 @@
Override this method to return a custom [RID] when [method get_rid] is called.
</description>
</method>
<method name="_setup_local_to_scene" qualifiers="virtual">
<return type="void" />
<description>
Override this method to customize the newly duplicated resource created from [method PackedScene.instantiate], if the original's [member resource_local_to_scene] is set to [code]true[/code].
[b]Example:[/b] Set a random [code]damage[/code] value to every local resource from an instantiated scene.
[codeblock]
extends Resource

var damage = 0

func _setup_local_to_scene():
damage = randi_range(10, 40)
[/codeblock]
</description>
</method>
<method name="duplicate" qualifiers="const">
<return type="Resource" />
<param index="0" name="subresources" type="bool" default="false" />
Expand Down Expand Up @@ -58,8 +73,8 @@
<method name="setup_local_to_scene" is_deprecated="true">
<return type="void" />
<description>
Emits the [signal setup_local_to_scene_requested] signal. If [member resource_local_to_scene] is set to [code]true[/code], this method is called from [method PackedScene.instantiate] by the newly duplicated resource within the scene instance.
For most resources, this method performs no logic of its own. Custom behavior can be defined by connecting [signal setup_local_to_scene_requested] from a script, [b]not[/b] by overriding this method.
Calls [method _setup_local_to_scene]. If [member resource_local_to_scene] is set to [code]true[/code], this method is automatically called from [method PackedScene.instantiate] by the newly duplicated resource within the scene instance.
[i]Deprecated.[/i] This method should only be called internally. Override [method _setup_local_to_scene] instead.
</description>
</method>
<method name="take_over_path">
Expand Down Expand Up @@ -90,9 +105,10 @@
[b]Note:[/b] This signal is not emitted automatically for properties of custom resources. If necessary, a setter needs to be created to emit the signal.
</description>
</signal>
<signal name="setup_local_to_scene_requested">
<signal name="setup_local_to_scene_requested" is_deprecated="true">
<description>
Emitted by the newly duplicated resource with [member resource_local_to_scene] set to [code]true[/code], when the scene is instantiated. Custom behavior can be defined by connecting this signal.
Emitted by a newly duplicated resource with [member resource_local_to_scene] set to [code]true[/code].
[i]Deprecated.[/i] This signal is only emitted when the resource is created. Override [method _setup_local_to_scene] instead.
</description>
</signal>
</signals>
Expand Down