class_signal.rst 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/Signal.xml.
  6. .. _class_Signal:
  7. Signal
  8. ======
  9. A built-in type representing a signal of an :ref:`Object<class_Object>`.
  10. .. rst-class:: classref-introduction-group
  11. Description
  12. -----------
  13. **Signal** is a built-in :ref:`Variant<class_Variant>` type that represents a signal of an :ref:`Object<class_Object>` instance. Like all :ref:`Variant<class_Variant>` types, it can be stored in variables and passed to functions. Signals allow all connected :ref:`Callable<class_Callable>`\ s (and by extension their respective objects) to listen and react to events, without directly referencing one another. This keeps the code flexible and easier to manage. You can check whether an :ref:`Object<class_Object>` has a given signal name using :ref:`Object.has_signal<class_Object_method_has_signal>`.
  14. In GDScript, signals can be declared with the ``signal`` keyword. In C#, you may use the ``[Signal]`` attribute on a delegate.
  15. .. tabs::
  16. .. code-tab:: gdscript
  17. signal attacked
  18. # Additional arguments may be declared.
  19. # These arguments must be passed when the signal is emitted.
  20. signal item_dropped(item_name, amount)
  21. .. code-tab:: csharp
  22. [Signal]
  23. delegate void AttackedEventHandler();
  24. // Additional arguments may be declared.
  25. // These arguments must be passed when the signal is emitted.
  26. [Signal]
  27. delegate void ItemDroppedEventHandler(string itemName, int amount);
  28. .. note::
  29. There are notable differences when using this API with C#. See :ref:`doc_c_sharp_differences` for more information.
  30. .. rst-class:: classref-introduction-group
  31. Tutorials
  32. ---------
  33. - :doc:`Using Signals <../getting_started/step_by_step/signals>`
  34. - `GDScript Basics <../tutorials/scripting/gdscript/gdscript_basics.html#signals>`__
  35. .. rst-class:: classref-reftable-group
  36. Constructors
  37. ------------
  38. .. table::
  39. :widths: auto
  40. +-----------------------------+------------------------------------------------------------------------------------------------------------------------------------------+
  41. | :ref:`Signal<class_Signal>` | :ref:`Signal<class_Signal_constructor_Signal>`\ (\ ) |
  42. +-----------------------------+------------------------------------------------------------------------------------------------------------------------------------------+
  43. | :ref:`Signal<class_Signal>` | :ref:`Signal<class_Signal_constructor_Signal>`\ (\ from\: :ref:`Signal<class_Signal>`\ ) |
  44. +-----------------------------+------------------------------------------------------------------------------------------------------------------------------------------+
  45. | :ref:`Signal<class_Signal>` | :ref:`Signal<class_Signal_constructor_Signal>`\ (\ object\: :ref:`Object<class_Object>`, signal\: :ref:`StringName<class_StringName>`\ ) |
  46. +-----------------------------+------------------------------------------------------------------------------------------------------------------------------------------+
  47. .. rst-class:: classref-reftable-group
  48. Methods
  49. -------
  50. .. table::
  51. :widths: auto
  52. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  53. | :ref:`int<class_int>` | :ref:`connect<class_Signal_method_connect>`\ (\ callable\: :ref:`Callable<class_Callable>`, flags\: :ref:`int<class_int>` = 0\ ) |
  54. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  55. | |void| | :ref:`disconnect<class_Signal_method_disconnect>`\ (\ callable\: :ref:`Callable<class_Callable>`\ ) |
  56. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  57. | |void| | :ref:`emit<class_Signal_method_emit>`\ (\ ...\ ) |vararg| |const| |
  58. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  59. | :ref:`Array<class_Array>` | :ref:`get_connections<class_Signal_method_get_connections>`\ (\ ) |const| |
  60. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  61. | :ref:`StringName<class_StringName>` | :ref:`get_name<class_Signal_method_get_name>`\ (\ ) |const| |
  62. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  63. | :ref:`Object<class_Object>` | :ref:`get_object<class_Signal_method_get_object>`\ (\ ) |const| |
  64. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  65. | :ref:`int<class_int>` | :ref:`get_object_id<class_Signal_method_get_object_id>`\ (\ ) |const| |
  66. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  67. | :ref:`bool<class_bool>` | :ref:`has_connections<class_Signal_method_has_connections>`\ (\ ) |const| |
  68. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  69. | :ref:`bool<class_bool>` | :ref:`is_connected<class_Signal_method_is_connected>`\ (\ callable\: :ref:`Callable<class_Callable>`\ ) |const| |
  70. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  71. | :ref:`bool<class_bool>` | :ref:`is_null<class_Signal_method_is_null>`\ (\ ) |const| |
  72. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
  73. .. rst-class:: classref-reftable-group
  74. Operators
  75. ---------
  76. .. table::
  77. :widths: auto
  78. +-------------------------+-------------------------------------------------------------------------------------------------+
  79. | :ref:`bool<class_bool>` | :ref:`operator !=<class_Signal_operator_neq_Signal>`\ (\ right\: :ref:`Signal<class_Signal>`\ ) |
  80. +-------------------------+-------------------------------------------------------------------------------------------------+
  81. | :ref:`bool<class_bool>` | :ref:`operator ==<class_Signal_operator_eq_Signal>`\ (\ right\: :ref:`Signal<class_Signal>`\ ) |
  82. +-------------------------+-------------------------------------------------------------------------------------------------+
  83. .. rst-class:: classref-section-separator
  84. ----
  85. .. rst-class:: classref-descriptions-group
  86. Constructor Descriptions
  87. ------------------------
  88. .. _class_Signal_constructor_Signal:
  89. .. rst-class:: classref-constructor
  90. :ref:`Signal<class_Signal>` **Signal**\ (\ ) :ref:`🔗<class_Signal_constructor_Signal>`
  91. Constructs an empty **Signal** with no object nor signal name bound.
  92. .. rst-class:: classref-item-separator
  93. ----
  94. .. rst-class:: classref-constructor
  95. :ref:`Signal<class_Signal>` **Signal**\ (\ from\: :ref:`Signal<class_Signal>`\ )
  96. Constructs a **Signal** as a copy of the given **Signal**.
  97. .. rst-class:: classref-item-separator
  98. ----
  99. .. rst-class:: classref-constructor
  100. :ref:`Signal<class_Signal>` **Signal**\ (\ object\: :ref:`Object<class_Object>`, signal\: :ref:`StringName<class_StringName>`\ )
  101. Creates a **Signal** object referencing a signal named ``signal`` in the specified ``object``.
  102. .. rst-class:: classref-section-separator
  103. ----
  104. .. rst-class:: classref-descriptions-group
  105. Method Descriptions
  106. -------------------
  107. .. _class_Signal_method_connect:
  108. .. rst-class:: classref-method
  109. :ref:`int<class_int>` **connect**\ (\ callable\: :ref:`Callable<class_Callable>`, flags\: :ref:`int<class_int>` = 0\ ) :ref:`🔗<class_Signal_method_connect>`
  110. Connects this signal to the specified ``callable``. Optional ``flags`` can be also added to configure the connection's behavior (see :ref:`ConnectFlags<enum_Object_ConnectFlags>` constants). You can provide additional arguments to the connected ``callable`` by using :ref:`Callable.bind<class_Callable_method_bind>`.
  111. A signal can only be connected once to the same :ref:`Callable<class_Callable>`. If the signal is already connected, returns :ref:`@GlobalScope.ERR_INVALID_PARAMETER<class_@GlobalScope_constant_ERR_INVALID_PARAMETER>` and pushes an error message, unless the signal is connected with :ref:`Object.CONNECT_REFERENCE_COUNTED<class_Object_constant_CONNECT_REFERENCE_COUNTED>`. To prevent this, use :ref:`is_connected<class_Signal_method_is_connected>` first to check for existing connections.
  112. ::
  113. for button in $Buttons.get_children():
  114. button.pressed.connect(_on_pressed.bind(button))
  115. func _on_pressed(button):
  116. print(button.name, " was pressed")
  117. .. rst-class:: classref-item-separator
  118. ----
  119. .. _class_Signal_method_disconnect:
  120. .. rst-class:: classref-method
  121. |void| **disconnect**\ (\ callable\: :ref:`Callable<class_Callable>`\ ) :ref:`🔗<class_Signal_method_disconnect>`
  122. Disconnects this signal from the specified :ref:`Callable<class_Callable>`. If the connection does not exist, generates an error. Use :ref:`is_connected<class_Signal_method_is_connected>` to make sure that the connection exists.
  123. .. rst-class:: classref-item-separator
  124. ----
  125. .. _class_Signal_method_emit:
  126. .. rst-class:: classref-method
  127. |void| **emit**\ (\ ...\ ) |vararg| |const| :ref:`🔗<class_Signal_method_emit>`
  128. Emits this signal. All :ref:`Callable<class_Callable>`\ s connected to this signal will be triggered. This method supports a variable number of arguments, so parameters can be passed as a comma separated list.
  129. .. rst-class:: classref-item-separator
  130. ----
  131. .. _class_Signal_method_get_connections:
  132. .. rst-class:: classref-method
  133. :ref:`Array<class_Array>` **get_connections**\ (\ ) |const| :ref:`🔗<class_Signal_method_get_connections>`
  134. Returns an :ref:`Array<class_Array>` of connections for this signal. Each connection is represented as a :ref:`Dictionary<class_Dictionary>` that contains three entries:
  135. - ``signal`` is a reference to this signal;
  136. - ``callable`` is a reference to the connected :ref:`Callable<class_Callable>`;
  137. - ``flags`` is a combination of :ref:`ConnectFlags<enum_Object_ConnectFlags>`.
  138. .. rst-class:: classref-item-separator
  139. ----
  140. .. _class_Signal_method_get_name:
  141. .. rst-class:: classref-method
  142. :ref:`StringName<class_StringName>` **get_name**\ (\ ) |const| :ref:`🔗<class_Signal_method_get_name>`
  143. Returns the name of this signal.
  144. .. rst-class:: classref-item-separator
  145. ----
  146. .. _class_Signal_method_get_object:
  147. .. rst-class:: classref-method
  148. :ref:`Object<class_Object>` **get_object**\ (\ ) |const| :ref:`🔗<class_Signal_method_get_object>`
  149. Returns the object emitting this signal.
  150. .. rst-class:: classref-item-separator
  151. ----
  152. .. _class_Signal_method_get_object_id:
  153. .. rst-class:: classref-method
  154. :ref:`int<class_int>` **get_object_id**\ (\ ) |const| :ref:`🔗<class_Signal_method_get_object_id>`
  155. Returns the ID of the object emitting this signal (see :ref:`Object.get_instance_id<class_Object_method_get_instance_id>`).
  156. .. rst-class:: classref-item-separator
  157. ----
  158. .. _class_Signal_method_has_connections:
  159. .. rst-class:: classref-method
  160. :ref:`bool<class_bool>` **has_connections**\ (\ ) |const| :ref:`🔗<class_Signal_method_has_connections>`
  161. Returns ``true`` if any :ref:`Callable<class_Callable>` is connected to this signal.
  162. .. rst-class:: classref-item-separator
  163. ----
  164. .. _class_Signal_method_is_connected:
  165. .. rst-class:: classref-method
  166. :ref:`bool<class_bool>` **is_connected**\ (\ callable\: :ref:`Callable<class_Callable>`\ ) |const| :ref:`🔗<class_Signal_method_is_connected>`
  167. Returns ``true`` if the specified :ref:`Callable<class_Callable>` is connected to this signal.
  168. .. rst-class:: classref-item-separator
  169. ----
  170. .. _class_Signal_method_is_null:
  171. .. rst-class:: classref-method
  172. :ref:`bool<class_bool>` **is_null**\ (\ ) |const| :ref:`🔗<class_Signal_method_is_null>`
  173. Returns ``true`` if this **Signal** has no object and the signal name is empty. Equivalent to ``signal == Signal()``.
  174. .. rst-class:: classref-section-separator
  175. ----
  176. .. rst-class:: classref-descriptions-group
  177. Operator Descriptions
  178. ---------------------
  179. .. _class_Signal_operator_neq_Signal:
  180. .. rst-class:: classref-operator
  181. :ref:`bool<class_bool>` **operator !=**\ (\ right\: :ref:`Signal<class_Signal>`\ ) :ref:`🔗<class_Signal_operator_neq_Signal>`
  182. Returns ``true`` if the signals do not share the same object and name.
  183. .. rst-class:: classref-item-separator
  184. ----
  185. .. _class_Signal_operator_eq_Signal:
  186. .. rst-class:: classref-operator
  187. :ref:`bool<class_bool>` **operator ==**\ (\ right\: :ref:`Signal<class_Signal>`\ ) :ref:`🔗<class_Signal_operator_eq_Signal>`
  188. Returns ``true`` if both signals share the same object and name.
  189. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  190. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  191. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  192. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  193. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  194. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  195. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
  196. .. |void| replace:: :abbr:`void (No return value.)`