summaryrefslogtreecommitdiff
path: root/doc/classes/Signal.xml
blob: ce2d443ba77fb020394b8acaedddef39bcb50be9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?xml version="1.0" encoding="UTF-8" ?>
<class name="Signal" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Built-in type representing a signal defined in an object.
	</brief_description>
	<description>
		[Signal] is a built-in [Variant] type that represents a signal of an [Object] instance. Like all [Variant] types, it can be stored in variables and passed to functions. Signals allow all connected [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.
		In GDScript, signals can be declared with the [code]signal[/code] keyword. In C#, you may use the [code][Signal][/code] attribute on a delegate.
		[codeblock]
		[gdscript]
		signal attacked

		# Additional arguments may be declared.
		# These arguments must be passed when the signal is emitted.
		signal item_dropped(item_name, amount)
		[/gdscript]
		[csharp]
		[Signal]
		delegate void Attacked();

		// Additional arguments may be declared.
		// These arguments must be passed when the signal is emitted.
		[Signal]
		delegate void ItemDropped(itemName: string, amount: int);
		[/csharp]
		[/codeblock]
	</description>
	<tutorials>
		<link title="Using Signals">$DOCS_URL/getting_started/step_by_step/signals.html</link>
		<link title="GDScript Basics">$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#signals</link>
	</tutorials>
	<constructors>
		<constructor name="Signal">
			<return type="Signal" />
			<description>
				Constructs an empty [Signal] with no object nor signal name bound.
			</description>
		</constructor>
		<constructor name="Signal">
			<return type="Signal" />
			<param index="0" name="from" type="Signal" />
			<description>
				Constructs a [Signal] as a copy of the given [Signal].
			</description>
		</constructor>
		<constructor name="Signal">
			<return type="Signal" />
			<param index="0" name="object" type="Object" />
			<param index="1" name="signal" type="StringName" />
			<description>
				Creates a new [Signal] named [param signal] in the specified [param object].
			</description>
		</constructor>
	</constructors>
	<methods>
		<method name="connect">
			<return type="int" />
			<param index="0" name="callable" type="Callable" />
			<param index="1" name="flags" type="int" default="0" />
			<description>
				Connects this signal to the specified [param callable]. Optional [param flags] can be also added to configure the connection's behavior (see [enum Object.ConnectFlags] constants). You can provide additional arguments to the connected [param callable] by using [method Callable.bind].
				A signal can only be connected once to the same [Callable]. If the signal is already connected, returns [constant ERR_INVALID_PARAMETER] and pushes an error message, unless the signal is connected with [constant Object.CONNECT_REFERENCE_COUNTED]. To prevent this, use [method is_connected] first to check for existing connections.
				[codeblock]
				for button in $Buttons.get_children():
				    button.pressed.connect(_on_pressed.bind(button))

				func _on_pressed(button):
				    print(button.name, " was pressed")
				[/codeblock]
			</description>
		</method>
		<method name="disconnect">
			<return type="void" />
			<param index="0" name="callable" type="Callable" />
			<description>
				Disconnects this signal from the specified [Callable]. If the connection does not exist, generates an error. Use [method is_connected] to make sure that the connection exists.
			</description>
		</method>
		<method name="emit" qualifiers="vararg const">
			<return type="void" />
			<description>
				Emits this signal. All [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.
			</description>
		</method>
		<method name="get_connections" qualifiers="const">
			<return type="Array" />
			<description>
				Returns the list of [Callable]s connected to this signal.
			</description>
		</method>
		<method name="get_name" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the name of this signal.
			</description>
		</method>
		<method name="get_object" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the object emitting this signal.
			</description>
		</method>
		<method name="get_object_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the ID of the object emitting this signal (see [method Object.get_instance_id]).
			</description>
		</method>
		<method name="is_connected" qualifiers="const">
			<return type="bool" />
			<param index="0" name="callable" type="Callable" />
			<description>
				Returns [code]true[/code] if the specified [Callable] is connected to this signal.
			</description>
		</method>
		<method name="is_null" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the signal's name does not exist in its object, or the object is not valid.
			</description>
		</method>
	</methods>
	<operators>
		<operator name="operator !=">
			<return type="bool" />
			<param index="0" name="right" type="Signal" />
			<description>
				Returns [code]true[/code] if the signals do not share the same object and name.
			</description>
		</operator>
		<operator name="operator ==">
			<return type="bool" />
			<param index="0" name="right" type="Signal" />
			<description>
				Returns [code]true[/code] if both signals share the same object and name.
			</description>
		</operator>
	</operators>
</class>