diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-03-23 16:16:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-23 16:16:25 +0100 |
commit | 20edf69f96160fcf7c0ea2449f4daf50f572ce99 (patch) | |
tree | 96ca71593fb38b96eba0f366a8120a374002e3ae | |
parent | cbbe0743a9155f06d03d4b906209933192a02731 (diff) | |
parent | 258d91f883eb3db0ebc709f4f7e43ccb6948a7fc (diff) |
Merge pull request #33508 from nekomatata/object-has-signal
Added has_signal method for Object
-rw-r--r-- | core/object.cpp | 20 | ||||
-rw-r--r-- | core/object.h | 1 | ||||
-rw-r--r-- | doc/classes/Object.xml | 11 |
3 files changed, 31 insertions, 1 deletions
diff --git a/core/object.cpp b/core/object.cpp index 140ee811fe..188c0ee5c2 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -1324,6 +1324,25 @@ Array Object::_get_incoming_connections() const { return ret; } +bool Object::has_signal(const StringName &p_name) const { + if (!script.is_null()) { + Ref<Script> scr = script; + if (scr.is_valid() && scr->has_script_signal(p_name)) { + return true; + } + } + + if (ClassDB::has_signal(get_class_name(), p_name)) { + return true; + } + + if (_has_user_signal(p_name)) { + return true; + } + + return false; +} + void Object::get_signal_list(List<MethodInfo> *p_signals) const { if (!script.is_null()) { @@ -1696,6 +1715,7 @@ void Object::_bind_methods() { ClassDB::bind_method(D_METHOD("has_method", "method"), &Object::has_method); + ClassDB::bind_method(D_METHOD("has_signal", "signal"), &Object::has_signal); ClassDB::bind_method(D_METHOD("get_signal_list"), &Object::_get_signal_list); ClassDB::bind_method(D_METHOD("get_signal_connection_list", "signal"), &Object::_get_signal_connection_list); ClassDB::bind_method(D_METHOD("get_incoming_connections"), &Object::_get_incoming_connections); diff --git a/core/object.h b/core/object.h index 59d3f06cfe..9bdcf0d3d8 100644 --- a/core/object.h +++ b/core/object.h @@ -694,6 +694,7 @@ public: void add_user_signal(const MethodInfo &p_signal); Error emit_signal(const StringName &p_name, VARIANT_ARG_LIST); Error emit_signal(const StringName &p_name, const Variant **p_args, int p_argcount); + bool has_signal(const StringName &p_name) const; void get_signal_list(List<MethodInfo> *p_signals) const; void get_signal_connection_list(const StringName &p_signal, List<Connection> *p_connections) const; void get_all_signal_connections(List<Connection> *p_connections) const; diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index a3faccae1a..33f5fc0f35 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -311,13 +311,22 @@ Returns [code]true[/code] if the object contains the given [code]method[/code]. </description> </method> + <method name="has_signal" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="signal" type="String"> + </argument> + <description> + Returns [code]true[/code] if the given [code]signal[/code] exists. + </description> + </method> <method name="has_user_signal" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="signal" type="StringName"> </argument> <description> - Returns [code]true[/code] if the given user-defined [code]signal[/code] exists. + Returns [code]true[/code] if the given user-defined [code]signal[/code] exists. Only signals added using [method add_user_signal] are taken into account. </description> </method> <method name="is_blocking_signals" qualifiers="const"> |