<method name="_iter_next" qualifiers="virtual">
			<return type="bool" />
			<param index="0" name="iter" type="Array" />
			<description>
				Moves the iterator to the next iteration. [param iter] stores the iteration state. Since GDScript does not support passing arguments by reference, a single-element array is used as a wrapper. Returns [code]true[/code] so long as the iterator has not reached the end.
			</description>
		</method>
		<method name="_notification" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="what" type="int" />
			<description>
				Called when the object receives a notification, which can be identified in [param what] by comparing it with a constant. See also [method notification].
				[codeblocks]
				[gdscript]
				func _notification(what):
				    if what == NOTIFICATION_PREDELETE:
				        print("Goodbye!")
				[/gdscript]
				[csharp]
				public override void _Notification(int what)
				{
				    if (what == NotificationPredelete)
				    {
				        GD.Print("Goodbye!");
				    }
				}
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] The base [Object] defines a few notifications ([constant NOTIFICATION_POSTINITIALIZE] and [constant NOTIFICATION_PREDELETE]). Inheriting classes such as [Node] define a lot more notifications, which are also received by this method.
			</description>
		</method>
		<method name="_property_can_revert" qualifiers="virtual">
			<return type="bool" />
			<param index="0" name="property" type="StringName" />
			<description>
				Override this method to customize the given [param property]'s revert behavior. Should return [code]true[/code] if the [param property] has a custom default value and is revertible in the Inspector dock. Use [method _property_get_revert] to specify the [param property]'s default value.
				[b]Note:[/b] This method must return consistently, regardless of the current value of the [param property].
			</description>
		</method>
		<method name="_property_get_revert" qualifiers="virtual">
			<return type="Variant" />
			<param index="0" name="property" type="StringName" />
			<description>
				Override this method to customize the given [param property]'s revert behavior. Should return the default value for the [param property]. If the default value differs from the [param property]'s current value, a revert icon is displayed in the Inspector dock.
				[b]Note:[/b] [method _property_can_revert] must also be overridden for this method to be called.
			</description>
		</method>
		<method name="_set" qualifiers="virtual">
			<return type="bool" />
			<param index="0" name="property" type="StringName" />
			<param index="1" name="value" type="Variant" />
			<description>
				Override this method to customize the behavior of [method set]. Should set the [param property] to [param value] and return [code]true[/code], or [code]false[/code] if the [param property] should be handled normally. The [i]exact[/i] way to set the [param property] is up to this method's implementation.
				Combined with [method _get] and [method _get_property_list], this method allows defining custom properties, which is particularly useful for editor plugins. Note that a property [i]must[/i] be present in [method get_property_list], otherwise this method will not be called.
				[codeblocks]
				[gdscript]
				var internal_data = {}

				func _set(property, value):
				    if property == "fake_property":
				        # Storing the value in the fake property.
				        internal_data["fake_property"] = value
				        return true
				    return false

				func _get_property_list():
				    return [
				        { "name": "fake_property", "type": TYPE_INT }
				    ]
				[/gdscript]
				[csharp]
				private Godot.Collections.Dictionary _internalData = new Godot.Collections.Dictionary();

				public override bool _Set(StringName property, Variant value)
				{
				    if (property == "FakeProperty")
				    {
				        // Storing the value in the fake property.
				        _internalData["FakeProperty"] = value;
				        return true;
				    }

				    return false;
				}

				public override Godot.Collections.Array<Godot.Collections.Dictionary> _GetPropertyList()
				{
				    return new Godot.Collections.Array<Godot.Collections.Dictionary>()
				    {
				        new Godot.Collections.Dictionary()
				        {
				            { "name", "FakeProperty" },
				            { "type", (int)Variant.Type.Int }
				        }
				    };
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="_to_string" qualifiers="virtual">
			<return type="String" />
			<description>
				Override this method to customize the return value of [method to_string], and therefore the object's representation as a [String].
				[codeblock]
				func _to_string():
				    return "Welcome to Godot 4!"

				func _init():
				    print(self)       # Prints Welcome to Godot 4!"
				    var a = str(self) # a is "Welcome to Godot 4!"
				[/codeblock]
			</description>
		</method>
		<method name="_validate_property" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="property" type="Dictionary" />
			<description>
				Override this method to customize existing properties. Every property info goes through this method, except properties added with [method _get_property_list]. The dictionary contents is the same as in [method _get_property_list].
				[codeblocks]
				[gdscript]
				@tool
				extends Node

				@export var is_number_editable: bool:
				    set(value):
				        is_number_editable = value
				        notify_property_list_changed()
				@export var number: int

				func _validate_property(property: Dictionary):
				    if property.name == "number" and not is_number_editable:
				        property.usage |= PROPERTY_USAGE_READ_ONLY
				[/gdscript]
				[csharp]
				[Tool]
				public partial class MyNode : Node
				{
				    private bool _isNumberEditable;

				    [Export]
				    public bool IsNumberEditable
				    {
				        get => _isNumberEditable;
				        set
				        {
				            _isNumberEditable = value;
				            NotifyPropertyListChanged();
				        }
				    }

				    [Export]
				    public int Number { get; set; }

				    public override void _ValidateProperty(Godot.Collections.Dictionary property)
				    {
				        if (property["name"].AsStringName() == PropertyName.Number && !IsNumberEditable)
				        {
				            var usage = property["usage"].As<PropertyUsageFlags>() | PropertyUsageFlags.ReadOnly;
				            property["usage"] = (int)usage;
				        }
				    }
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="add_user_signal">
			<return type="void" />
			<param index="0" name="signal" type="String" />
			<param index="1" name="arguments" type="Array" default="[]" />
			<description>
				Adds a user-defined [param signal]. Optional arguments for the signal can be added as an [Array] of dictionaries, each defining a [code]name[/code] [String] and a [code]type[/code] [int] (see [enum Variant.Type]). See also [method has_user_signal] and [method remove_user_signal].
				[codeblocks]
				[gdscript]
				add_user_signal("hurt", [
				    { "name": "damage", "type": TYPE_INT },
				    { "name": "source", "type": TYPE_OBJECT }
				])
				[/gdscript]
				[csharp]
				AddUserSignal("Hurt", new Godot.Collections.Array()
				{
				    new Godot.Collections.Dictionary()
				    {
				        { "name", "damage" },
				        { "type", (int)Variant.Type.Int }
				    },
				    new Godot.Collections.Dictionary()
				    {
				        { "name", "source" },
				        { "type", (int)Variant.Type.Object }
				    }
				});
				[/csharp]
				[/codeblocks]
			</description>
		</method>


<method name="connect">
			<return type="int" enum="Error" />
			<param index="0" name="signal" type="StringName" />
			<param index="1" name="callable" type="Callable" />
			<param index="2" name="flags" type="int" default="0" />
			<description>
				Connects a [param signal] by name to a [param callable]. Optional [param flags] can be also added to configure the connection's behavior (see [enum ConnectFlags] constants).
				A signal can only be connected once to the same [Callable]. If the signal is already connected, this method returns [constant ERR_INVALID_PARAMETER] and pushes an error message, unless the signal is connected with [constant CONNECT_REFERENCE_COUNTED]. To prevent this, use [method is_connected] first to check for existing connections.
				If the [param callable]'s object is freed, the connection will be lost.
				[b]Examples with recommended syntax:[/b]
				Connecting signals is one of the most common operations in Godot and the API gives many options to do so, which are described further down. The code block below shows the recommended approach.
				[codeblocks]
				[gdscript]
				func _ready():
				    var button = Button.new()
				    # `button_down` here is a Signal variant type, and we thus call the Signal.connect() method, not Object.connect().
				    # See discussion below for a more in-depth overview of the API.
				    button.button_down.connect(_on_button_down)

				    # This assumes that a `Player` class exists, which defines a `hit` signal.
				    var player = Player.new()
				    # We use Signal.connect() again, and we also use the Callable.bind() method,
				    # which returns a new Callable with the parameter binds.
				    player.hit.connect(_on_player_hit.bind("sword", 100))

				func _on_button_down():
				    print("Button down!")

				func _on_player_hit(weapon_type, damage):
				    print("Hit with weapon %s for %d damage." % [weapon_type, damage])
				[/gdscript]
				[csharp]
				public override void _Ready()
				{
				    var button = new Button();
				    // C# supports passing signals as events, so we can use this idiomatic construct:
				    button.ButtonDown += OnButtonDown;

				    // This assumes that a `Player` class exists, which defines a `Hit` signal.
				    var player = new Player();
				    // We can use lambdas when we need to bind additional parameters.
				    player.Hit += () => OnPlayerHit("sword", 100);
				}

				private void OnButtonDown()
				{
				    GD.Print("Button down!");
				}

				private void OnPlayerHit(string weaponType, int damage)
				{
				    GD.Print($"Hit with weapon {weaponType} for {damage} damage.");
				}
				[/csharp]
				[/codeblocks]
				[b][code skip-lint]Object.connect()[/code] or [code skip-lint]Signal.connect()[/code]?[/b]
				As seen above, the recommended method to connect signals is not [method Object.connect]. The code block below shows the four options for connecting signals, using either this legacy method or the recommended [method Signal.connect], and using either an implicit [Callable] or a manually defined one.
				[codeblocks]
				[gdscript]
				func _ready():
				    var button = Button.new()
				    # Option 1: Object.connect() with an implicit Callable for the defined function.
				    button.connect("button_down", _on_button_down)
				    # Option 2: Object.connect() with a constructed Callable using a target object and method name.
				    button.connect("button_down", Callable(self, "_on_button_down"))
				    # Option 3: Signal.connect() with an implicit Callable for the defined function.
				    button.button_down.connect(_on_button_down)
				    # Option 4: Signal.connect() with a constructed Callable using a target object and method name.
				    button.button_down.connect(Callable(self, "_on_button_down"))

				func _on_button_down():
				    print("Button down!")
				[/gdscript]
				[csharp]
				public override void _Ready()
				{
				    var button = new Button();
				    // Option 1: In C#, we can use signals as events and connect with this idiomatic syntax:
				    button.ButtonDown += OnButtonDown;
				    // Option 2: GodotObject.Connect() with a constructed Callable from a method group.
				    button.Connect(Button.SignalName.ButtonDown, Callable.From(OnButtonDown));
				    // Option 3: GodotObject.Connect() with a constructed Callable using a target object and method name.
				    button.Connect(Button.SignalName.ButtonDown, new Callable(this, MethodName.OnButtonDown));
				}

				private void OnButtonDown()
				{
				    GD.Print("Button down!");
				}
				[/csharp]
				[/codeblocks]
				While all options have the same outcome ([code]button[/code]'s [signal BaseButton.button_down] signal will be connected to [code]_on_button_down[/code]), [b]option 3[/b] offers the best validation: it will print a compile-time error if either the [code]button_down[/code] [Signal] or the [code]_on_button_down[/code] [Callable] are not defined. On the other hand, [b]option 2[/b] only relies on string names and will only be able to validate either names at runtime: it will print a runtime error if [code]"button_down"[/code] doesn't correspond to a signal, or if [code]"_on_button_down"[/code] is not a registered method in the object [code]self[/code]. The main reason for using options 1, 2, or 4 would be if you actually need to use strings (e.g. to connect signals programmatically based on strings read from a configuration file). Otherwise, option 3 is the recommended (and fastest) method.
				[b]Binding and passing parameters:[/b]
				The syntax to bind parameters is through [method Callable.bind], which returns a copy of the [Callable] with its parameters bound.
				When calling [method emit_signal] or [method Signal.emit], the signal parameters can be also passed. The examples below show the relationship between these signal parameters and bound parameters.
				[codeblocks]
				[gdscript]
				func _ready():
				    # This assumes that a `Player` class exists, which defines a `hit` signal.
				    var player = Player.new()
				    # Using Callable.bind().
				    player.hit.connect(_on_player_hit.bind("sword", 100))

				    # Parameters added when emitting the signal are passed first.
				    player.hit.emit("Dark lord", 5)

				# We pass two arguments when emitting (`hit_by`, `level`),
				# and bind two more arguments when connecting (`weapon_type`, `damage`).
				func _on_player_hit(hit_by, level, weapon_type, damage):
				    print("Hit by %s (level %d) with weapon %s for %d damage." % [hit_by, level, weapon_type, damage])
				[/gdscript]
				[csharp]
				public override void _Ready()
				{
				    // This assumes that a `Player` class exists, which defines a `Hit` signal.
				    var player = new Player();
				    // Using lambda expressions that create a closure that captures the additional parameters.
				    // The lambda only receives the parameters defined by the signal's delegate.
				    player.Hit += (hitBy, level) => OnPlayerHit(hitBy, level, "sword", 100);

				    // Parameters added when emitting the signal are passed first.
				    player.EmitSignal(SignalName.Hit, "Dark lord", 5);
				}

				// We pass two arguments when emitting (`hit_by`, `level`),
				// and bind two more arguments when connecting (`weapon_type`, `damage`).
				private void OnPlayerHit(string hitBy, int level, string weaponType, int damage)
				{
				    GD.Print($"Hit by {hitBy} (level {level}) with weapon {weaponType} for {damage} damage.");
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="disconnect">
			<return type="void" />
			<param index="0" name="signal" type="StringName" />
			<param index="1" name="callable" type="Callable" />
			<description>
				Disconnects a [param signal] by name from a given [param 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_signal" qualifiers="vararg">
			<return type="int" enum="Error" />
			<param index="0" name="signal" type="StringName" />
			<description>
				Emits the given [param signal] by name. The signal must exist, so it should be a built-in signal of this class or one of its inherited classes, or a user-defined signal (see [method add_user_signal]). This method supports a variable number of arguments, so parameters can be passed as a comma separated list.
				Returns [constant ERR_UNAVAILABLE] if [param signal] does not exist or the parameters are invalid.
				[codeblocks]
				[gdscript]
				emit_signal("hit", "sword", 100)
				emit_signal("game_over")
				[/gdscript]
				[csharp]
				EmitSignal(SignalName.Hit, "sword", 100);
				EmitSignal(SignalName.GameOver);
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] In C#, [param signal] must be in snake_case when referring to built-in Godot signals. Prefer using the names exposed in the [code]SignalName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>
		<method name="free" keywords="delete, remove, kill, die">
			<return type="void" />
			<description>
				Deletes the object from memory. Pre-existing references to the object become invalid, and any attempt to access them will result in a run-time error. Checking the references with [method @GlobalScope.is_instance_valid] will return [code]false[/code].
			</description>
		</method>
		<method name="get" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="property" type="StringName" />
			<description>
				Returns the [Variant] value of the given [param property]. If the [param property] does not exist, this method returns [code]null[/code].
				[codeblocks]
				[gdscript]
				var node = Node2D.new()
				node.rotation = 1.5
				var a = node.get("rotation") # a is 1.5
				[/gdscript]
				[csharp]
				var node = new Node2D();
				node.Rotation = 1.5f;
				var a = node.Get(Node2D.PropertyName.Rotation); // a is 1.5
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] In C#, [param property] must be in snake_case when referring to built-in Godot properties. Prefer using the names exposed in the [code]PropertyName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>
		<method name="get_class" qualifiers="const">
			<return type="String" />
			<description>
				Returns the object's built-in class name, as a [String]. See also [method is_class].
				[b]Note:[/b] This method ignores [code]class_name[/code] declarations. If this object's script has defined a [code]class_name[/code], the base, built-in class name is returned instead.
			</description>
		</method>
		<method name="get_incoming_connections" qualifiers="const">
			<return type="Dictionary[]" />
			<description>
				Returns an [Array] of signal connections received by this object. Each connection is represented as a [Dictionary] that contains three entries:
				- [code]signal[/code] is a reference to the [Signal];
				- [code]callable[/code] is a reference to the [Callable];
				- [code]flags[/code] is a combination of [enum ConnectFlags].
			</description>
		</method>
		<method name="get_indexed" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="property_path" type="NodePath" />
			<description>
				Gets the object's property indexed by the given [param property_path]. The path should be a [NodePath] relative to the current object and can use the colon character ([code]:[/code]) to access nested properties.
				[b]Examples:[/b] [code]"position:x"[/code] or [code]"material:next_pass:blend_mode"[/code].
				[codeblocks]
				[gdscript]
				var node = Node2D.new()
				node.position = Vector2(5, -10)
				var a = node.get_indexed("position")   # a is Vector2(5, -10)
				var b = node.get_indexed("position:y") # b is -10
				[/gdscript]
				[csharp]
				var node = new Node2D();
				node.Position = new Vector2(5, -10);
				var a = node.GetIndexed("position");   // a is Vector2(5, -10)
				var b = node.GetIndexed("position:y"); // b is -10
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] In C#, [param property_path] must be in snake_case when referring to built-in Godot properties. Prefer using the names exposed in the [code]PropertyName[/code] class to avoid allocating a new [StringName] on each call.
				[b]Note:[/b] This method does not support actual paths to nodes in the [SceneTree], only sub-property paths. In the context of nodes, use [method Node.get_node_and_resource] instead.
			</description>
		</method>
		<method name="get_instance_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the object's unique instance ID. This ID can be saved in [EncodedObjectAsID], and can be used to retrieve this object instance with [method @GlobalScope.instance_from_id].
				[b]Note:[/b] This ID is only useful during the current session. It won't correspond to a similar object if the ID is sent over a network, or loaded from a file at a later time.
			</description>
		</method>
		<method name="get_meta" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="default" type="Variant" default="null" />
			<description>
				Returns the object's metadata value for the given entry [param name]. If the entry does not exist, returns [param default]. If [param default] is [code]null[/code], an error is also generated.
				[b]Note:[/b] A metadata's name must be a valid identifier as per [method StringName.is_valid_identifier] method.
				[b]Note:[/b] Metadata that has a name starting with an underscore ([code]_[/code]) is considered editor-only. Editor-only metadata is not displayed in the Inspector and should not be edited, although it can still be found by this method.
			</description>
		</method>
		<method name="get_meta_list" qualifiers="const">
			<return type="StringName[]" />
			<description>
				Returns the object's metadata entry names as a [PackedStringArray].
			</description>
		</method>
		<method name="get_method_argument_count" qualifiers="const">
			<return type="int" />
			<param index="0" name="method" type="StringName" />
			<description>
				Returns the number of arguments of the given [param method] by name.
				[b]Note:[/b] In C#, [param method] must be in snake_case when referring to built-in Godot methods. Prefer using the names exposed in the [code]MethodName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>


<method name="get_method_list" qualifiers="const">
			<return type="Dictionary[]" />
			<description>
				Returns this object's methods and their signatures as an [Array] of dictionaries. Each [Dictionary] contains the following entries:
				- [code]name[/code] is the name of the method, as a [String];
				- [code]args[/code] is an [Array] of dictionaries representing the arguments;
				- [code]default_args[/code] is the default arguments as an [Array] of variants;
				- [code]flags[/code] is a combination of [enum MethodFlags];
				- [code]id[/code] is the method's internal identifier [int];
				- [code]return[/code] is the returned value, as a [Dictionary];
				[b]Note:[/b] The dictionaries of [code]args[/code] and [code]return[/code] are formatted identically to the results of [method get_property_list], although not all entries are used.
			</description>
		</method>
		<method name="get_property_list" qualifiers="const">
			<return type="Dictionary[]" />
			<description>
				Returns the object's property list as an [Array] of dictionaries. Each [Dictionary] contains the following entries:
				- [code]name[/code] is the property's name, as a [String];
				- [code]class_name[/code] is an empty [StringName], unless the property is [constant TYPE_OBJECT] and it inherits from a class;
				- [code]type[/code] is the property's type, as an [int] (see [enum Variant.Type]);
				- [code]hint[/code] is [i]how[/i] the property is meant to be edited (see [enum PropertyHint]);
				- [code]hint_string[/code] depends on the hint (see [enum PropertyHint]);
				- [code]usage[/code] is a combination of [enum PropertyUsageFlags].
				[b]Note:[/b] In GDScript, all class members are treated as properties. In C# and GDExtension, it may be necessary to explicitly mark class members as Godot properties using decorators or attributes.
			</description>
		</method>
		<method name="get_script" qualifiers="const">
			<return type="Variant" />
			<description>
				Returns the object's [Script] instance, or [code]null[/code] if no script is attached.
			</description>
		</method>
		<method name="get_signal_connection_list" qualifiers="const">
			<return type="Dictionary[]" />
			<param index="0" name="signal" type="StringName" />
			<description>
				Returns an [Array] of connections for the given [param signal] name. Each connection is represented as a [Dictionary] that contains three entries:
				- [code skip-lint]signal[/code] is a reference to the [Signal];
				- [code]callable[/code] is a reference to the connected [Callable];
				- [code]flags[/code] is a combination of [enum ConnectFlags].
			</description>
		</method>
		<method name="get_signal_list" qualifiers="const">
			<return type="Dictionary[]" />
			<description>
				Returns the list of existing signals as an [Array] of dictionaries.
				[b]Note:[/b] Due of the implementation, each [Dictionary] is formatted very similarly to the returned values of [method get_method_list].
			</description>
		</method>
		<method name="get_translation_domain" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the name of the translation domain used by [method tr] and [method tr_n]. See also [TranslationServer].
			</description>
		</method>
		<method name="has_connections" qualifiers="const">
			<return type="bool" />
			<param index="0" name="signal" type="StringName" />
			<description>
				Returns [code]true[/code] if any connection exists on the given [param signal] name.
				[b]Note:[/b] In C#, [param signal] must be in snake_case when referring to built-in Godot methods. Prefer using the names exposed in the [code]SignalName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>
		<method name="has_meta" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if a metadata entry is found with the given [param name]. See also [method get_meta], [method set_meta] and [method remove_meta].
				[b]Note:[/b] A metadata's name must be a valid identifier as per [method StringName.is_valid_identifier] method.
				[b]Note:[/b] Metadata that has a name starting with an underscore ([code]_[/code]) is considered editor-only. Editor-only metadata is not displayed in the Inspector and should not be edited, although it can still be found by this method.
			</description>
		</method>
		<method name="has_method" qualifiers="const">
			<return type="bool" />
			<param index="0" name="method" type="StringName" />
			<description>
				Returns [code]true[/code] if the given [param method] name exists in the object.
				[b]Note:[/b] In C#, [param method] must be in snake_case when referring to built-in Godot methods. Prefer using the names exposed in the [code]MethodName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>
		<method name="has_signal" qualifiers="const">
			<return type="bool" />
			<param index="0" name="signal" type="StringName" />
			<description>
				Returns [code]true[/code] if the given [param signal] name exists in the object.
				[b]Note:[/b] In C#, [param signal] must be in snake_case when referring to built-in Godot methods. Prefer using the names exposed in the [code]SignalName[/code] class to avoid allocating a new [StringName] on each call.
			</description>
		</method>
		<method name="has_user_signal" qualifiers="const">
			<return type="bool" />
			<param index="0" name="signal" type="StringName" />
			<description>
				Returns [code]true[/code] if the given user-defined [param signal] name exists. Only signals added with [method add_user_signal] are included. See also [method remove_user_signal].
			</description>
		</method>
		<method name="is_blocking_signals" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the object is blocking its signals from being emitted. See [method set_block_signals].
			</description>
		</method>
		<method name="is_class" qualifiers="const">
			<return type="bool" />
			<param index="0" name="class" type="String" />
			<description>
				Returns [code]true[/code] if the object inherits from the given [param class]. See also [method get_class].
				[codeblocks]
				[gdscript]
				var sprite2d = Sprite2D.new()
				sprite2d.is_class("Sprite2D") # Returns true
				sprite2d.is_class("Node")     # Returns true
				sprite2d.is_class("Node3D")   # Returns false
				[/gdscript]
				[csharp]
				var sprite2D = new Sprite2D();
				sprite2D.IsClass("Sprite2D"); // Returns true
				sprite2D.IsClass("Node");     // Returns true
				sprite2D.IsClass("Node3D");   // Returns false
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] This method ignores [code]class_name[/code] declarations in the object's script.
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="Script" inherits="Resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A class stored as a resource.
	</brief_description>
	<description>
		A class stored as a resource. A script extends the functionality of all objects that instantiate it.
		This is the base class for all scripts and should not be used directly. Trying to create a new script with this class will result in an error.
		The [code]new[/code] method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes.
	</description>
	<tutorials>
		<link title="Scripting documentation index">$DOCS_URL/tutorials/scripting/index.html</link>
	</tutorials>
	<methods>
		<method name="can_instantiate" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the script can be instantiated.
			</description>
		</method>
		<method name="get_base_script" qualifiers="const">
			<return type="Script" />
			<description>
				Returns the script directly inherited by this script.
			</description>
		</method>
		<method name="get_global_name" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the class name associated with the script, if there is one. Returns an empty string otherwise.
				To give the script a global name, you can use the [code]class_name[/code] keyword in GDScript and the [code][GlobalClass][/code] attribute in C#.
				[codeblocks]
				[gdscript]
				class_name MyNode
				extends Node
				[/gdscript]
				[csharp]
				using Godot;

				[GlobalClass]
				public partial class MyNode : Node
				{
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="get_instance_base_type" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the script's base type.
			</description>
		</method>
		<method name="get_property_default_value">
			<return type="Variant" />
			<param index="0" name="property" type="StringName" />
			<description>
				Returns the default value of the specified property.
			</description>
		</method>
		<method name="get_rpc_config" qualifiers="const">
			<return type="Variant" />
			<description>
				Returns a [Dictionary] mapping method names to their RPC configuration defined by this script.
			</description>
		</method>
		<method name="get_script_constant_map">
			<return type="Dictionary" />
			<description>
				Returns a dictionary containing constant names and their values.
			</description>
		</method>
		<method name="get_script_method_list">
			<return type="Dictionary[]" />
			<description>
				Returns the list of methods in this [Script].
			</description>
		</method>
		<method name="get_script_property_list">
			<return type="Dictionary[]" />
			<description>
				Returns the list of properties in this [Script].
			</description>
		</method>
		<method name="get_script_signal_list">
			<return type="Dictionary[]" />
			<description>
				Returns the list of user signals defined in this [Script].
			</description>
		</method>
		<method name="has_script_signal" qualifiers="const">
			<return type="bool" />
			<param index="0" name="signal_name" type="StringName" />
			<description>
				Returns [code]true[/code] if the script, or a base class, defines a signal with the given name.
			</description>
		</method>
		<method name="has_source_code" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the script contains non-empty source code.
				[b]Note:[/b] If a script does not have source code, this does not mean that it is invalid or unusable. For example, a [GDScript] that was exported with binary tokenization has no source code, but still behaves as expected and could be instantiated. This can be checked with [method can_instantiate].
			</description>
		</method>
		<method name="instance_has" qualifiers="const">
			<return type="bool" />
			<param index="0" name="base_object" type="Object" />
			<description>
				Returns [code]true[/code] if [param base_object] is an instance of this script.
			</description>
		</method>
		<method name="is_abstract" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the script is an abstract script. An abstract script does not have a constructor and cannot be instantiated.
			</description>
		</method>
		<method name="is_tool" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the script is a tool script. A tool script can run in the editor.
			</description>
		</method>
		<method name="reload">
			<return type="int" enum="Error" />
			<param index="0" name="keep_state" type="bool" default="false" />
			<description>
				Reloads the script's class implementation. Returns an error code.
			</description>
		</method>
	</methods>
	<members>
		<member name="source_code" type="String" setter="set_source_code" getter="get_source_code">
			The script source code or an empty string if source code is not available. When set, does not reload the class implementation automatically.
		</member>
	</members>
</class>


<brief_description>
		A 2D physics body that is moved by a physics simulation.
	</brief_description>
	<description>
		[RigidBody2D] implements full 2D physics. It cannot be controlled directly, instead, you must apply forces to it (gravity, impulses, etc.), and the physics simulation will calculate the resulting movement, rotation, react to collisions, and affect other physics bodies in its path.
		The body's behavior can be adjusted via [member lock_rotation], [member freeze], and [member freeze_mode]. By changing various properties of the object, such as [member mass], you can control how the physics simulation acts on it.
		A rigid body will always maintain its shape and size, even when forces are applied to it. It is useful for objects that can be interacted with in an environment, such as a tree that can be knocked over or a stack of crates that can be pushed around.
		If you need to override the default physics behavior, you can write a custom force integration function. See [member custom_integrator].
		[b]Note:[/b] Changing the 2D transform or [member linear_velocity] of a [RigidBody2D] very often may lead to some unpredictable behaviors. If you need to directly affect the body, prefer [method _integrate_forces] as it allows you to directly access the physics state.
	</description>
	<tutorials>
		<link title="2D Physics Platformer Demo">https://godotengine.org/asset-library/asset/2725</link>
		<link title="Instancing Demo">https://godotengine.org/asset-library/asset/2716</link>
	</tutorials>
	<methods>
		<method name="_integrate_forces" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="state" type="PhysicsDirectBodyState2D" />
			<description>
				Called during physics processing, allowing you to read and safely modify the simulation state for the object. By default, it is called before the standard force integration, but the [member custom_integrator] property allows you to disable the standard force integration and do fully custom force integration for a body.
			</description>
		</method>
		<method name="add_constant_central_force">
			<return type="void" />
			<param index="0" name="force" type="Vector2" />
			<description>
				Adds a constant directional force without affecting rotation that keeps being applied over time until cleared with [code]constant_force = Vector2(0, 0)[/code].
				This is equivalent to using [method add_constant_force] at the body's center of mass.
			</description>
		</method>
		<method name="add_constant_force">
			<return type="void" />
			<param index="0" name="force" type="Vector2" />
			<param index="1" name="position" type="Vector2" default="Vector2(0, 0)" />
			<description>
				Adds a constant positioned force to the body that keeps being applied over time until cleared with [code]constant_force = Vector2(0, 0)[/code].
				[param position] is the offset from the body origin in global coordinates.
			</description>
		</method>
		<method name="add_constant_torque">
			<return type="void" />
			<param index="0" name="torque" type="float" />
			<description>
				Adds a constant rotational force without affecting position that keeps being applied over time until cleared with [code]constant_torque = 0[/code].
			</description>
		</method>
		<method name="apply_central_force">
			<return type="void" />
			<param index="0" name="force" type="Vector2" />
			<description>
				Applies a directional force without affecting rotation. A force is time dependent and meant to be applied every physics update.
				This is equivalent to using [method apply_force] at the body's center of mass.
			</description>
		</method>
		<method name="apply_central_impulse">
			<return type="void" />
			<param index="0" name="impulse" type="Vector2" default="Vector2(0, 0)" />
			<description>
				Applies a directional impulse without affecting rotation.
				An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).
				This is equivalent to using [method apply_impulse] at the body's center of mass.
			</description>
		</method>
		<method name="apply_force">
			<return type="void" />
			<param index="0" name="force" type="Vector2" />
			<param index="1" name="position" type="Vector2" default="Vector2(0, 0)" />
			<description>
				Applies a positioned force to the body. A force is time dependent and meant to be applied every physics update.
				[param position] is the offset from the body origin in global coordinates.
			</description>
		</method>
		<method name="apply_impulse">
			<return type="void" />
			<param index="0" name="impulse" type="Vector2" />
			<param index="1" name="position" type="Vector2" default="Vector2(0, 0)" />
			<description>
				Applies a positioned impulse to the body.
				An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).
				[param position] is the offset from the body origin in global coordinates.
			</description>
		</method>
		<method name="apply_torque">
			<return type="void" />
			<param index="0" name="torque" type="float" />
			<description>
				Applies a rotational force without affecting position. A force is time dependent and meant to be applied every physics update.
				[b]Note:[/b] [member inertia] is required for this to work. To have [member inertia], an active [CollisionShape2D] must be a child of the node, or you can manually set [member inertia].
			</description>
		</method>
		<method name="apply_torque_impulse">
			<return type="void" />
			<param index="0" name="torque" type="float" />
			<description>
				Applies a rotational impulse to the body without affecting the position.
				An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).
				[b]Note:[/b] [member inertia] is required for this to work. To have [member inertia], an active [CollisionShape2D] must be a child of the node, or you can manually set [member inertia].
			</description>
		</method>
		<method name="get_colliding_bodies" qualifiers="const">
			<return type="Node2D[]" />
			<description>
				Returns a list of the bodies colliding with this one. Requires [member contact_monitor] to be set to [code]true[/code] and [member max_contacts_reported] to be set high enough to detect all the collisions.
				[b]Note:[/b] The result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead.
			</description>
		</method>
		<method name="get_contact_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of contacts this body has with other bodies. By default, this returns 0 unless bodies are configured to monitor contacts (see [member contact_monitor]).
				[b]Note:[/b] To retrieve the colliding bodies, use [method get_colliding_bodies].
			</description>
		</method>
		<method name="set_axis_velocity">
			<return type="void" />
			<param index="0" name="axis_velocity" type="Vector2" />
			<description>
				Sets the body's velocity on the given axis. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior.
			</description>
		</method>
	</methods>


<method name="area_set_monitor_callback">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="callback" type="Callable" />
			<description>
				Sets the area's body monitor callback. This callback will be called when any other (shape of a) body enters or exits (a shape of) the given area, and must take the following five parameters:
				1. an integer [code]status[/code]: either [constant AREA_BODY_ADDED] or [constant AREA_BODY_REMOVED] depending on whether the other body shape entered or exited the area,
				2. an [RID] [code]body_rid[/code]: the [RID] of the body that entered or exited the area,
				3. an integer [code]instance_id[/code]: the [code]ObjectID[/code] attached to the body,
				4. an integer [code]body_shape_idx[/code]: the index of the shape of the body that entered or exited the area,
				5. an integer [code]self_shape_idx[/code]: the index of the shape of the area where the body entered or exited.
				By counting (or keeping track of) the shapes that enter and exit, it can be determined if a body (with all its shapes) is entering for the first time or exiting for the last time.
			</description>
		</method>
		<method name="area_set_monitorable">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="monitorable" type="bool" />
			<description>
			</description>
		</method>
		<method name="area_set_param">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="param" type="int" enum="PhysicsServer3D.AreaParameter" />
			<param index="2" name="value" type="Variant" />
			<description>
				Sets the value for an area parameter. A list of available parameters is on the [enum AreaParameter] constants.
			</description>
		</method>
		<method name="area_set_ray_pickable">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="enable" type="bool" />
			<description>
				Sets object pickable with rays.
			</description>
		</method>
		<method name="area_set_shape">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="shape_idx" type="int" />
			<param index="2" name="shape" type="RID" />
			<description>
				Substitutes a given area shape by another. The old shape is selected by its index, the new one by its [RID].
			</description>
		</method>
		<method name="area_set_shape_disabled">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="shape_idx" type="int" />
			<param index="2" name="disabled" type="bool" />
			<description>
			</description>
		</method>
		<method name="area_set_shape_transform">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="shape_idx" type="int" />
			<param index="2" name="transform" type="Transform3D" />
			<description>
				Sets the transform matrix for an area shape.
			</description>
		</method>
		<method name="area_set_space">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="space" type="RID" />
			<description>
				Assigns a space to the area.
			</description>
		</method>
		<method name="area_set_transform">
			<return type="void" />
			<param index="0" name="area" type="RID" />
			<param index="1" name="transform" type="Transform3D" />
			<description>
				Sets the transform matrix for an area.
			</description>
		</method>
		<method name="body_add_collision_exception">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="excepted_body" type="RID" />
			<description>
				Adds a body to the list of bodies exempt from collisions.
			</description>
		</method>
		<method name="body_add_constant_central_force">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="force" type="Vector3" />
			<description>
				Adds a constant directional force without affecting rotation that keeps being applied over time until cleared with [code]body_set_constant_force(body, Vector3(0, 0, 0))[/code].
				This is equivalent to using [method body_add_constant_force] at the body's center of mass.
			</description>
		</method>
		<method name="body_add_constant_force">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="force" type="Vector3" />
			<param index="2" name="position" type="Vector3" default="Vector3(0, 0, 0)" />
			<description>
				Adds a constant positioned force to the body that keeps being applied over time until cleared with [code]body_set_constant_force(body, Vector3(0, 0, 0))[/code].
				[param position] is the offset from the body origin in global coordinates.
			</description>
		</method>
		<method name="body_add_constant_torque">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="torque" type="Vector3" />
			<description>
				Adds a constant rotational force without affecting position that keeps being applied over time until cleared with [code]body_set_constant_torque(body, Vector3(0, 0, 0))[/code].
			</description>
		</method>
		<method name="body_add_shape">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="shape" type="RID" />
			<param index="2" name="transform" type="Transform3D" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)" />
			<param index="3" name="disabled" type="bool" default="false" />
			<description>
				Adds a shape to the body, along with a transform matrix. Shapes are usually referenced by their index, so you should track which shape has a given index.
			</description>
		</method>
		<method name="body_apply_central_force">
			<return type="void" />
			<param index="0" name="body" type="RID" />
			<param index="1" name="force" type="Vector3" />
			<description>
				Applies a directional force without affecting rotation. A force is time dependent and meant to be applied every physics update.
				This is equivalent to using [method body_apply_force] at the body's center of mass.
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="CollisionShape2D" inherits="Node2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A node that provides a [Shape2D] to a [CollisionObject2D] parent.
	</brief_description>
	<description>
		A node that provides a [Shape2D] to a [CollisionObject2D] parent and allows to edit it. This can give a detection shape to an [Area2D] or turn a [PhysicsBody2D] into a solid object.
	</description>
	<tutorials>
		<link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
		<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/2712</link>
		<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/2728</link>
		<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/2719</link>
	</tutorials>
	<members>
		<member name="debug_color" type="Color" setter="set_debug_color" getter="get_debug_color" default="Color(0, 0, 0, 1)">
			The collision shape debug color.
			[b]Note:[/b] The default value is [member ProjectSettings.debug/shapes/collision/shape_color]. The [code]Color(0, 0, 0, 1)[/code] value documented here is a placeholder, and not the actual default debug color.
		</member>
		<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false" keywords="enabled">
			A disabled collision shape has no effect in the world. This property should be changed with [method Object.set_deferred].
		</member>
		<member name="one_way_collision" type="bool" setter="set_one_way_collision" getter="is_one_way_collision_enabled" default="false">
			Sets whether this collision shape should only detect collision on one side (top or bottom).
			[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a child of an [Area2D] node.
		</member>
		<member name="one_way_collision_margin" type="float" setter="set_one_way_collision_margin" getter="get_one_way_collision_margin" default="1.0">
			The margin used for one-way collision (in pixels). Higher values will make the shape thicker, and work better for colliders that enter the shape at a high velocity.
		</member>
		<member name="shape" type="Shape2D" setter="set_shape" getter="get_shape">
			The actual shape owned by this collision shape.
		</member>
	</members>
</class>


<methods>
		<method name="_input_event" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="camera" type="Camera3D" />
			<param index="1" name="event" type="InputEvent" />
			<param index="2" name="event_position" type="Vector3" />
			<param index="3" name="normal" type="Vector3" />
			<param index="4" name="shape_idx" type="int" />
			<description>
				Receives unhandled [InputEvent]s. [param event_position] is the location in world space of the mouse pointer on the surface of the shape with index [param shape_idx] and [param normal] is the normal vector of the surface at that point. Connect to the [signal input_event] signal to easily pick up these events.
				[b]Note:[/b] [method _input_event] requires [member input_ray_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
			</description>
		</method>
		<method name="_mouse_enter" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when the mouse pointer enters any of this object's shapes. Requires [member input_ray_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject3D] won't cause this function to be called.
			</description>
		</method>
		<method name="_mouse_exit" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when the mouse pointer exits all this object's shapes. Requires [member input_ray_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject3D] won't cause this function to be called.
			</description>
		</method>
		<method name="create_shape_owner">
			<return type="int" />
			<param index="0" name="owner" type="Object" />
			<description>
				Creates a new shape owner for the given object. Returns [code]owner_id[/code] of the new owner for future reference.
			</description>
		</method>
		<method name="get_collision_layer_value" qualifiers="const">
			<return type="bool" />
			<param index="0" name="layer_number" type="int" />
			<description>
				Returns whether or not the specified layer of the [member collision_layer] is enabled, given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="get_collision_mask_value" qualifiers="const">
			<return type="bool" />
			<param index="0" name="layer_number" type="int" />
			<description>
				Returns whether or not the specified layer of the [member collision_mask] is enabled, given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="get_rid" qualifiers="const">
			<return type="RID" />
			<description>
				Returns the object's [RID].
			</description>
		</method>
		<method name="get_shape_owners">
			<return type="PackedInt32Array" />
			<description>
				Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument.
			</description>
		</method>
		<method name="is_shape_owner_disabled" qualifiers="const">
			<return type="bool" />
			<param index="0" name="owner_id" type="int" />
			<description>
				If [code]true[/code], the shape owner and its shapes are disabled.
			</description>
		</method>
		<method name="remove_shape_owner">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Removes the given shape owner.
			</description>
		</method>
		<method name="set_collision_layer_value">
			<return type="void" />
			<param index="0" name="layer_number" type="int" />
			<param index="1" name="value" type="bool" />
			<description>
				Based on [param value], enables or disables the specified layer in the [member collision_layer], given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="set_collision_mask_value">
			<return type="void" />
			<param index="0" name="layer_number" type="int" />
			<param index="1" name="value" type="bool" />
			<description>
				Based on [param value], enables or disables the specified layer in the [member collision_mask], given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="shape_find_owner" qualifiers="const">
			<return type="int" />
			<param index="0" name="shape_index" type="int" />
			<description>
				Returns the [code]owner_id[/code] of the given shape.
			</description>
		</method>
		<method name="shape_owner_add_shape">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape" type="Shape3D" />
			<description>
				Adds a [Shape3D] to the shape owner.
			</description>
		</method>
		<method name="shape_owner_clear_shapes">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Removes all shapes from the shape owner.
			</description>
		</method>
		<method name="shape_owner_get_owner" qualifiers="const">
			<return type="Object" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the parent object of the given shape owner.
			</description>
		</method>
		<method name="shape_owner_get_shape" qualifiers="const">
			<return type="Shape3D" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Returns the [Shape3D] with the given ID from the given shape owner.
			</description>
		</method>
		<method name="shape_owner_get_shape_count" qualifiers="const">
			<return type="int" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the number of shapes the given shape owner contains.
			</description>
		</method>
		<method name="shape_owner_get_shape_index" qualifiers="const">
			<return type="int" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Returns the child index of the [Shape3D] with the given ID from the given shape owner.
			</description>
		</method>
		<method name="shape_owner_get_transform" qualifiers="const">
			<return type="Transform3D" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the shape owner's [Transform3D].
			</description>
		</method>
		<method name="shape_owner_remove_shape">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Removes a shape from the given shape owner.
			</description>
		</method>


<method name="shape_owner_set_disabled">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="disabled" type="bool" />
			<description>
				If [code]true[/code], disables the given shape owner.
			</description>
		</method>
		<method name="shape_owner_set_transform">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="transform" type="Transform3D" />
			<description>
				Sets the [Transform3D] of the given shape owner.
			</description>
		</method>
	</methods>
	<members>
		<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
			The physics layers this CollisionObject3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
			[b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
		</member>
		<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
			The physics layers this CollisionObject3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
			[b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
		</member>
		<member name="collision_priority" type="float" setter="set_collision_priority" getter="get_collision_priority" default="1.0">
			The priority used to solve colliding when occurring penetration. The higher the priority is, the lower the penetration into the object will be. This can for example be used to prevent the player from breaking through the boundaries of a level.
		</member>
		<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject3D.DisableMode" default="0">
			Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
		</member>
		<member name="input_capture_on_drag" type="bool" setter="set_capture_input_on_drag" getter="get_capture_input_on_drag" default="false">
			If [code]true[/code], the [CollisionObject3D] will continue to receive input events as the mouse is dragged across its shapes.
		</member>
		<member name="input_ray_pickable" type="bool" setter="set_ray_pickable" getter="is_ray_pickable" default="true">
			If [code]true[/code], this object is pickable. A pickable object can detect the mouse pointer entering/leaving, and if the mouse is inside it, report input events. Requires at least one [member collision_layer] bit to be set.
		</member>
	</members>
	<signals>
		<signal name="input_event">
			<param index="0" name="camera" type="Node" />
			<param index="1" name="event" type="InputEvent" />
			<param index="2" name="event_position" type="Vector3" />
			<param index="3" name="normal" type="Vector3" />
			<param index="4" name="shape_idx" type="int" />
			<description>
				Emitted when the object receives an unhandled [InputEvent]. [param event_position] is the location in world space of the mouse pointer on the surface of the shape with index [param shape_idx] and [param normal] is the normal vector of the surface at that point.
			</description>
		</signal>
		<signal name="mouse_entered">
			<description>
				Emitted when the mouse pointer enters any of this object's shapes. Requires [member input_ray_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
				[b]Note:[/b] Due to the lack of continuous collision detection, this signal may not be emitted in the expected order if the mouse moves fast enough and the [CollisionObject3D]'s area is small. This signal may also not be emitted if another [CollisionObject3D] is overlapping the [CollisionObject3D] in question.
			</description>
		</signal>
		<signal name="mouse_exited">
			<description>
				Emitted when the mouse pointer exits all this object's shapes. Requires [member input_ray_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
				[b]Note:[/b] Due to the lack of continuous collision detection, this signal may not be emitted in the expected order if the mouse moves fast enough and the [CollisionObject3D]'s area is small. This signal may also not be emitted if another [CollisionObject3D] is overlapping the [CollisionObject3D] in question.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="DISABLE_MODE_REMOVE" value="0" enum="DisableMode">
			When [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED], remove from the physics simulation to stop all physics interactions with this [CollisionObject3D].
			Automatically re-added to the physics simulation when the [Node] is processed again.
		</constant>
		<constant name="DISABLE_MODE_MAKE_STATIC" value="1" enum="DisableMode">
			When [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED], make the body static. Doesn't affect [Area3D]. [PhysicsBody3D] can't be affected by forces or other bodies while static.
			Automatically set [PhysicsBody3D] back to its original mode when the [Node] is processed again.
		</constant>
		<constant name="DISABLE_MODE_KEEP_ACTIVE" value="2" enum="DisableMode">
			When [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED], do not affect the physics simulation.
		</constant>
	</constants>
</class>


<method name="get_theme_default_font_size" qualifiers="const">
			<return type="int" />
			<description>
				Returns the default font size value from the first matching [Theme] in the tree if that [Theme] has a valid [member Theme.default_font_size] value.
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="get_theme_font" qualifiers="const">
			<return type="Font" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns a [Font] from the first matching [Theme] in the tree if that [Theme] has a font item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="get_theme_font_size" qualifiers="const">
			<return type="int" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns a font size from the first matching [Theme] in the tree if that [Theme] has a font size item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="get_theme_icon" qualifiers="const">
			<return type="Texture2D" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns an icon from the first matching [Theme] in the tree if that [Theme] has an icon item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="get_theme_stylebox" qualifiers="const">
			<return type="StyleBox" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns a [StyleBox] from the first matching [Theme] in the tree if that [Theme] has a stylebox item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="get_window_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the ID of the window.
			</description>
		</method>
		<method name="grab_focus">
			<return type="void" />
			<description>
				Causes the window to grab focus, allowing it to receive user input.
			</description>
		</method>
		<method name="has_focus" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the window is focused.
			</description>
		</method>
		<method name="has_theme_color" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns [code]true[/code] if there is a matching [Theme] in the tree that has a color item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="has_theme_color_override" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if there is a local override for a theme [Color] with the specified [param name] in this [Control] node.
				See [method add_theme_color_override].
			</description>
		</method>
		<method name="has_theme_constant" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns [code]true[/code] if there is a matching [Theme] in the tree that has a constant item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="has_theme_constant_override" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if there is a local override for a theme constant with the specified [param name] in this [Control] node.
				See [method add_theme_constant_override].
			</description>
		</method>
		<method name="has_theme_font" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns [code]true[/code] if there is a matching [Theme] in the tree that has a font item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="has_theme_font_override" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if there is a local override for a theme [Font] with the specified [param name] in this [Control] node.
				See [method add_theme_font_override].
			</description>
		</method>
		<method name="has_theme_font_size" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns [code]true[/code] if there is a matching [Theme] in the tree that has a font size item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="has_theme_font_size_override" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if there is a local override for a theme font size with the specified [param name] in this [Control] node.
				See [method add_theme_font_size_override].
			</description>
		</method>
		<method name="has_theme_icon" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="theme_type" type="StringName" default="&""" />
			<description>
				Returns [code]true[/code] if there is a matching [Theme] in the tree that has an icon item with the specified [param name] and [param theme_type].
				See [method Control.get_theme_color] for details.
			</description>
		</method>
		<method name="has_theme_icon_override" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if there is a local override for a theme icon with the specified [param name] in this [Control] node.
				See [method add_theme_icon_override].
			</description>
		</method>


<members>
		<member name="always_on_top" type="bool" setter="set_flag" getter="get_flag" default="false">
			If [code]true[/code], the window will be on top of all other windows. Does not work if [member transient] is enabled.
		</member>
		<member name="auto_translate" type="bool" setter="set_auto_translate" getter="is_auto_translating" default="true" deprecated="Use [member Node.auto_translate_mode] instead.">
			Toggles if any text should automatically change to its translated version depending on the current locale.
		</member>
		<member name="borderless" type="bool" setter="set_flag" getter="get_flag" default="false">
			If [code]true[/code], the window will have no borders.
		</member>
		<member name="content_scale_aspect" type="int" setter="set_content_scale_aspect" getter="get_content_scale_aspect" enum="Window.ContentScaleAspect" default="0">
			Specifies how the content's aspect behaves when the [Window] is resized. The base aspect is determined by [member content_scale_size].
		</member>
		<member name="content_scale_factor" type="float" setter="set_content_scale_factor" getter="get_content_scale_factor" default="1.0">
			Specifies the base scale of [Window]'s content when its [member size] is equal to [member content_scale_size].
		</member>
		<member name="content_scale_mode" type="int" setter="set_content_scale_mode" getter="get_content_scale_mode" enum="Window.ContentScaleMode" default="0">
			Specifies how the content is scaled when the [Window] is resized.
		</member>
		<member name="content_scale_size" type="Vector2i" setter="set_content_scale_size" getter="get_content_scale_size" default="Vector2i(0, 0)">
			Base size of the content (i.e. nodes that are drawn inside the window). If non-zero, [Window]'s content will be scaled when the window is resized to a different size.
		</member>
		<member name="content_scale_stretch" type="int" setter="set_content_scale_stretch" getter="get_content_scale_stretch" enum="Window.ContentScaleStretch" default="0">
			The policy to use to determine the final scale factor for 2D elements. This affects how [member content_scale_factor] is applied, in addition to the automatic scale factor determined by [member content_scale_size].
		</member>
		<member name="current_screen" type="int" setter="set_current_screen" getter="get_current_screen">
			The screen the window is currently on.
		</member>
		<member name="exclusive" type="bool" setter="set_exclusive" getter="is_exclusive" default="false">
			If [code]true[/code], the [Window] will be in exclusive mode. Exclusive windows are always on top of their parent and will block all input going to the parent [Window].
			Needs [member transient] enabled to work.
		</member>
		<member name="extend_to_title" type="bool" setter="set_flag" getter="get_flag" default="false">
			If [code]true[/code], the [Window] contents is expanded to the full size of the window, window title bar is transparent.
			[b]Note:[/b] This property is implemented only on macOS.
			[b]Note:[/b] This property only works with native windows.
		</member>
		<member name="force_native" type="bool" setter="set_force_native" getter="get_force_native" default="false">
			If [code]true[/code], native window will be used regardless of parent viewport and project settings.
		</member>
		<member name="initial_position" type="int" setter="set_initial_position" getter="get_initial_position" enum="Window.WindowInitialPosition" default="0">
			Specifies the initial type of position for the [Window]. See [enum WindowInitialPosition] constants.
		</member>
		<member name="keep_title_visible" type="bool" setter="set_keep_title_visible" getter="get_keep_title_visible" default="false">
			If [code]true[/code], the [Window] width is expanded to keep the title bar text fully visible.
		</member>
		<member name="max_size" type="Vector2i" setter="set_max_size" getter="get_max_size" default="Vector2i(0, 0)">
			If non-zero, the [Window] can't be resized to be bigger than this size.
			[b]Note:[/b] This property will be ignored if the value is lower than [member min_size].
		</member>
		<member name="min_size" type="Vector2i" setter="set_min_size" getter="get_min_size" default="Vector2i(0, 0)">
			If non-zero, the [Window] can't be resized to be smaller than this size.
			[b]Note:[/b] This property will be ignored in favor of [method get_contents_minimum_size] if [member wrap_controls] is enabled and if its size is bigger.
		</member>
		<member name="mode" type="int" setter="set_mode" getter="get_mode" enum="Window.Mode" default="0">
			Set's the window's current mode.
			[b]Note:[/b] Fullscreen mode is not exclusive full screen on Windows and Linux.
			[b]Note:[/b] This method only works with native windows, i.e. the main window and [Window]-derived nodes when [member Viewport.gui_embed_subwindows] is disabled in the main viewport.
		</member>
		<member name="mouse_passthrough" type="bool" setter="set_flag" getter="get_flag" default="false">
			If [code]true[/code], all mouse events will be passed to the underlying window of the same application. See also [member mouse_passthrough_polygon].
			[b]Note:[/b] This property is implemented on Linux (X11), macOS and Windows.
			[b]Note:[/b] This property only works with native windows.
		</member>
		<member name="mouse_passthrough_polygon" type="PackedVector2Array" setter="set_mouse_passthrough_polygon" getter="get_mouse_passthrough_polygon" default="PackedVector2Array()">
			Sets a polygonal region of the window which accepts mouse events. Mouse events outside the region will be passed through.
			Passing an empty array will disable passthrough support (all mouse events will be intercepted by the window, which is the default behavior).
			[codeblocks]
			[gdscript]
			# Set region, using Path2D node.
			$Window.mouse_passthrough_polygon = $Path2D.curve.get_baked_points()

			# Set region, using Polygon2D node.
			$Window.mouse_passthrough_polygon = $Polygon2D.polygon

			# Reset region to default.
			$Window.mouse_passthrough_polygon = []
			[/gdscript]
			[csharp]
			// Set region, using Path2D node.
			GetNode<Window>("Window").MousePassthrough = GetNode<Path2D>("Path2D").Curve.GetBakedPoints();

			// Set region, using Polygon2D node.
			GetNode<Window>("Window").MousePassthrough = GetNode<Polygon2D>("Polygon2D").Polygon;

			// Reset region to default.
			GetNode<Window>("Window").MousePassthrough = new Vector2[] {};
			[/csharp]
			[/codeblocks]
			[b]Note:[/b] This property is ignored if [member mouse_passthrough] is set to [code]true[/code].
			[b]Note:[/b] On Windows, the portion of a window that lies outside the region is not drawn, while on Linux (X11) and macOS it is.
			[b]Note:[/b] This property is implemented on Linux (X11), macOS and Windows.
		</member>
		<member name="popup_window" type="bool" setter="set_flag" getter="get_flag" default="false">
			If [code]true[/code], the [Window] will be considered a popup. Popups are sub-windows that don't show as separate windows in system's window manager's window list and will send close request when anything is clicked outside of them (unless [member exclusive] is enabled).
		</member>


<signals>
		<signal name="about_to_popup">
			<description>
				Emitted right after [method popup] call, before the [Window] appears or does anything.
			</description>
		</signal>
		<signal name="close_requested">
			<description>
				Emitted when the [Window]'s close button is pressed or when [member popup_window] is enabled and user clicks outside the window.
				This signal can be used to handle window closing, e.g. by connecting it to [method hide].
			</description>
		</signal>
		<signal name="dpi_changed">
			<description>
				Emitted when the [Window]'s DPI changes as a result of OS-level changes (e.g. moving the window from a Retina display to a lower resolution one).
				[b]Note:[/b] Only implemented on macOS.
			</description>
		</signal>
		<signal name="files_dropped">
			<param index="0" name="files" type="PackedStringArray" />
			<description>
				Emitted when files are dragged from the OS file manager and dropped in the game window. The argument is a list of file paths.
				Note that this method only works with native windows, i.e. the main window and [Window]-derived nodes when [member Viewport.gui_embed_subwindows] is disabled in the main viewport.
				Example usage:
				[codeblock]
				func _ready():
				    get_viewport().files_dropped.connect(on_files_dropped)

				func on_files_dropped(files):
				    print(files)
				[/codeblock]
			</description>
		</signal>
		<signal name="focus_entered">
			<description>
				Emitted when the [Window] gains focus.
			</description>
		</signal>
		<signal name="focus_exited">
			<description>
				Emitted when the [Window] loses its focus.
			</description>
		</signal>
		<signal name="go_back_requested">
			<description>
				Emitted when a go back request is sent (e.g. pressing the "Back" button on Android), right after [constant Node.NOTIFICATION_WM_GO_BACK_REQUEST].
			</description>
		</signal>
		<signal name="mouse_entered">
			<description>
				Emitted when the mouse cursor enters the [Window]'s visible area, that is not occluded behind other [Control]s or windows, provided its [member Viewport.gui_disable_input] is [code]false[/code] and regardless if it's currently focused or not.
			</description>
		</signal>
		<signal name="mouse_exited">
			<description>
				Emitted when the mouse cursor leaves the [Window]'s visible area, that is not occluded behind other [Control]s or windows, provided its [member Viewport.gui_disable_input] is [code]false[/code] and regardless if it's currently focused or not.
			</description>
		</signal>
		<signal name="theme_changed">
			<description>
				Emitted when the [constant NOTIFICATION_THEME_CHANGED] notification is sent.
			</description>
		</signal>
		<signal name="titlebar_changed">
			<description>
				Emitted when window title bar decorations are changed, e.g. macOS window enter/exit full screen mode, or extend-to-title flag is changed.
			</description>
		</signal>
		<signal name="visibility_changed">
			<description>
				Emitted when [Window] is made visible or disappears.
			</description>
		</signal>
		<signal name="window_input">
			<param index="0" name="event" type="InputEvent" />
			<description>
				Emitted when the [Window] is currently focused and receives any input, passing the received event as an argument. The event's position, if present, is in the embedder's coordinate system.
			</description>
		</signal>
	</signals>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="InputEventMouse" inherits="InputEventWithModifiers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Base input event type for mouse events.
	</brief_description>
	<description>
		Stores general information about mouse events.
	</description>
	<tutorials>
		<link title="Using InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
	</tutorials>
	<members>
		<member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButtonMask" is_bitfield="true" default="0">
			The mouse button mask identifier, one of or a bitwise combination of the [enum MouseButton] button masks.
		</member>
		<member name="global_position" type="Vector2" setter="set_global_position" getter="get_global_position" default="Vector2(0, 0)">
			When received in [method Node._input] or [method Node._unhandled_input], returns the mouse's position in the root [Viewport] using the coordinate system of the root [Viewport].
			When received in [method Control._gui_input], returns the mouse's position in the [CanvasLayer] that the [Control] is in using the coordinate system of the [CanvasLayer].
		</member>
		<member name="position" type="Vector2" setter="set_position" getter="get_position" default="Vector2(0, 0)">
			When received in [method Node._input] or [method Node._unhandled_input], returns the mouse's position in the [Viewport] this [Node] is in using the coordinate system of this [Viewport].
			When received in [method Control._gui_input], returns the mouse's position in the [Control] using the local coordinate system of the [Control].
		</member>
	</members>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="CollisionObject2D" inherits="Node2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Abstract base class for 2D physics objects.
	</brief_description>
	<description>
		Abstract base class for 2D physics objects. [CollisionObject2D] can hold any number of [Shape2D]s for collision. Each shape must be assigned to a [i]shape owner[/i]. Shape owners are not nodes and do not appear in the editor, but are accessible through code using the [code]shape_owner_*[/code] methods.
		[b]Note:[/b] Only collisions between objects within the same canvas ([Viewport] canvas or [CanvasLayer]) are supported. The behavior of collisions between objects in different canvases is undefined.
	</description>
	<tutorials>
	</tutorials>


<methods>
		<method name="_input_event" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="viewport" type="Viewport" />
			<param index="1" name="event" type="InputEvent" />
			<param index="2" name="shape_idx" type="int" />
			<description>
				Accepts unhandled [InputEvent]s. [param shape_idx] is the child index of the clicked [Shape2D]. Connect to [signal input_event] to easily pick up these events.
				[b]Note:[/b] [method _input_event] requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
			</description>
		</method>
		<method name="_mouse_enter" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when the mouse pointer enters any of this object's shapes. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject2D] won't cause this function to be called.
			</description>
		</method>
		<method name="_mouse_exit" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when the mouse pointer exits all this object's shapes. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject2D] won't cause this function to be called.
			</description>
		</method>
		<method name="_mouse_shape_enter" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="shape_idx" type="int" />
			<description>
				Called when the mouse pointer enters any of this object's shapes or moves from one shape to another. [param shape_idx] is the child index of the newly entered [Shape2D]. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be called.
			</description>
		</method>
		<method name="_mouse_shape_exit" qualifiers="virtual">
			<return type="void" />
			<param index="0" name="shape_idx" type="int" />
			<description>
				Called when the mouse pointer exits any of this object's shapes. [param shape_idx] is the child index of the exited [Shape2D]. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be called.
			</description>
		</method>
		<method name="create_shape_owner">
			<return type="int" />
			<param index="0" name="owner" type="Object" />
			<description>
				Creates a new shape owner for the given object. Returns [code]owner_id[/code] of the new owner for future reference.
			</description>
		</method>
		<method name="get_collision_layer_value" qualifiers="const">
			<return type="bool" />
			<param index="0" name="layer_number" type="int" />
			<description>
				Returns whether or not the specified layer of the [member collision_layer] is enabled, given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="get_collision_mask_value" qualifiers="const">
			<return type="bool" />
			<param index="0" name="layer_number" type="int" />
			<description>
				Returns whether or not the specified layer of the [member collision_mask] is enabled, given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="get_rid" qualifiers="const">
			<return type="RID" />
			<description>
				Returns the object's [RID].
			</description>
		</method>
		<method name="get_shape_owner_one_way_collision_margin" qualifiers="const">
			<return type="float" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the [code]one_way_collision_margin[/code] of the shape owner identified by given [param owner_id].
			</description>
		</method>
		<method name="get_shape_owners">
			<return type="PackedInt32Array" />
			<description>
				Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument.
			</description>
		</method>
		<method name="is_shape_owner_disabled" qualifiers="const">
			<return type="bool" />
			<param index="0" name="owner_id" type="int" />
			<description>
				If [code]true[/code], the shape owner and its shapes are disabled.
			</description>
		</method>
		<method name="is_shape_owner_one_way_collision_enabled" qualifiers="const">
			<return type="bool" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns [code]true[/code] if collisions for the shape owner originating from this [CollisionObject2D] will not be reported to collided with [CollisionObject2D]s.
			</description>
		</method>
		<method name="remove_shape_owner">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Removes the given shape owner.
			</description>
		</method>
		<method name="set_collision_layer_value">
			<return type="void" />
			<param index="0" name="layer_number" type="int" />
			<param index="1" name="value" type="bool" />
			<description>
				Based on [param value], enables or disables the specified layer in the [member collision_layer], given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="set_collision_mask_value">
			<return type="void" />
			<param index="0" name="layer_number" type="int" />
			<param index="1" name="value" type="bool" />
			<description>
				Based on [param value], enables or disables the specified layer in the [member collision_mask], given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="shape_find_owner" qualifiers="const">
			<return type="int" />
			<param index="0" name="shape_index" type="int" />
			<description>
				Returns the [code]owner_id[/code] of the given shape.
			</description>
		</method>
		<method name="shape_owner_add_shape">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape" type="Shape2D" />
			<description>
				Adds a [Shape2D] to the shape owner.
			</description>
		</method>
		<method name="shape_owner_clear_shapes">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Removes all shapes from the shape owner.
			</description>
		</method>
		<method name="shape_owner_get_owner" qualifiers="const">
			<return type="Object" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the parent object of the given shape owner.
			</description>
		</method>
		<method name="shape_owner_get_shape" qualifiers="const">
			<return type="Shape2D" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Returns the [Shape2D] with the given ID from the given shape owner.
			</description>
		</method>


<method name="shape_owner_get_shape_count" qualifiers="const">
			<return type="int" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the number of shapes the given shape owner contains.
			</description>
		</method>
		<method name="shape_owner_get_shape_index" qualifiers="const">
			<return type="int" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Returns the child index of the [Shape2D] with the given ID from the given shape owner.
			</description>
		</method>
		<method name="shape_owner_get_transform" qualifiers="const">
			<return type="Transform2D" />
			<param index="0" name="owner_id" type="int" />
			<description>
				Returns the shape owner's [Transform2D].
			</description>
		</method>
		<method name="shape_owner_remove_shape">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="shape_id" type="int" />
			<description>
				Removes a shape from the given shape owner.
			</description>
		</method>
		<method name="shape_owner_set_disabled">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="disabled" type="bool" />
			<description>
				If [code]true[/code], disables the given shape owner.
			</description>
		</method>
		<method name="shape_owner_set_one_way_collision">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="enable" type="bool" />
			<description>
				If [param enable] is [code]true[/code], collisions for the shape owner originating from this [CollisionObject2D] will not be reported to collided with [CollisionObject2D]s.
			</description>
		</method>
		<method name="shape_owner_set_one_way_collision_margin">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="margin" type="float" />
			<description>
				Sets the [code]one_way_collision_margin[/code] of the shape owner identified by given [param owner_id] to [param margin] pixels.
			</description>
		</method>
		<method name="shape_owner_set_transform">
			<return type="void" />
			<param index="0" name="owner_id" type="int" />
			<param index="1" name="transform" type="Transform2D" />
			<description>
				Sets the [Transform2D] of the given shape owner.
			</description>
		</method>
	</methods>
	<members>
		<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
			The physics layers this CollisionObject2D is in. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
			[b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
		</member>
		<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
			The physics layers this CollisionObject2D scans. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
			[b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
		</member>
		<member name="collision_priority" type="float" setter="set_collision_priority" getter="get_collision_priority" default="1.0">
			The priority used to solve colliding when occurring penetration. The higher the priority is, the lower the penetration into the object will be. This can for example be used to prevent the player from breaking through the boundaries of a level.
		</member>
		<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject2D.DisableMode" default="0">
			Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
		</member>
		<member name="input_pickable" type="bool" setter="set_pickable" getter="is_pickable" default="true">
			If [code]true[/code], this object is pickable. A pickable object can detect the mouse pointer entering/leaving, and if the mouse is inside it, report input events. Requires at least one [member collision_layer] bit to be set.
		</member>
	</members>
	<signals>
		<signal name="input_event">
			<param index="0" name="viewport" type="Node" />
			<param index="1" name="event" type="InputEvent" />
			<param index="2" name="shape_idx" type="int" />
			<description>
				Emitted when an input event occurs. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. See [method _input_event] for details.
			</description>
		</signal>
		<signal name="mouse_entered">
			<description>
				Emitted when the mouse pointer enters any of this object's shapes. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject2D] won't cause this signal to be emitted.
				[b]Note:[/b] Due to the lack of continuous collision detection, this signal may not be emitted in the expected order if the mouse moves fast enough and the [CollisionObject2D]'s area is small. This signal may also not be emitted if another [CollisionObject2D] is overlapping the [CollisionObject2D] in question.
			</description>
		</signal>
		<signal name="mouse_exited">
			<description>
				Emitted when the mouse pointer exits all this object's shapes. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set. Note that moving between different shapes within a single [CollisionObject2D] won't cause this signal to be emitted.
				[b]Note:[/b] Due to the lack of continuous collision detection, this signal may not be emitted in the expected order if the mouse moves fast enough and the [CollisionObject2D]'s area is small. This signal may also not be emitted if another [CollisionObject2D] is overlapping the [CollisionObject2D] in question.
			</description>
		</signal>
		<signal name="mouse_shape_entered">
			<param index="0" name="shape_idx" type="int" />
			<description>
				Emitted when the mouse pointer enters any of this object's shapes or moves from one shape to another. [param shape_idx] is the child index of the newly entered [Shape2D]. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
			</description>
		</signal>
		<signal name="mouse_shape_exited">
			<param index="0" name="shape_idx" type="int" />
			<description>
				Emitted when the mouse pointer exits any of this object's shapes. [param shape_idx] is the child index of the exited [Shape2D]. Requires [member input_pickable] to be [code]true[/code] and at least one [member collision_layer] bit to be set.
			</description>
		</signal>
	</signals>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="CollisionShape3D" inherits="Node3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A node that provides a [Shape3D] to a [CollisionObject3D] parent.
	</brief_description>
	<description>
		A node that provides a [Shape3D] to a [CollisionObject3D] parent and allows to edit it. This can give a detection shape to an [Area3D] or turn a [PhysicsBody3D] into a solid object.
		[b]Warning:[/b] A non-uniformly scaled [CollisionShape3D] will likely not behave as expected. Make sure to keep its scale the same on all axes and adjust its [member shape] resource instead.
	</description>
	<tutorials>
		<link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
		<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/2739</link>
		<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/2748</link>
		<link title="Third Person Shooter (TPS) Demo">https://godotengine.org/asset-library/asset/2710</link>
	</tutorials>
	<methods>
		<method name="make_convex_from_siblings">
			<return type="void" />
			<description>
				Sets the collision shape's shape to the addition of all its convexed [MeshInstance3D] siblings geometry.
			</description>
		</method>
		<method name="resource_changed" deprecated="Use [signal Resource.changed] instead.">
			<return type="void" />
			<param index="0" name="resource" type="Resource" />
			<description>
				This method does nothing.
			</description>
		</method>
	</methods>
	<members>
		<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false" keywords="enabled">
			A disabled collision shape has no effect in the world.
		</member>
		<member name="shape" type="Shape3D" setter="set_shape" getter="get_shape">
			The actual shape owned by this collision shape.
		</member>
	</members>
</class>