<?xml version="1.0" encoding="UTF-8" ?>
<class name="StreamPeerTCP" inherits="StreamPeer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A stream peer that handles TCP connections.
	</brief_description>
	<description>
		A stream peer that handles TCP connections. This object can be used to connect to TCP servers, or also is returned by a TCP server.
		[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="bind">
			<return type="int" enum="Error" />
			<param index="0" name="port" type="int" />
			<param index="1" name="host" type="String" default=""*"" />
			<description>
				Opens the TCP socket, and binds it to the specified local address.
				This method is generally not needed, and only used to force the subsequent call to [method connect_to_host] to use the specified [param host] and [param port] as source address. This can be desired in some NAT punchthrough techniques, or when forcing the source network interface.
			</description>
		</method>
		<method name="connect_to_host">
			<return type="int" enum="Error" />
			<param index="0" name="host" type="String" />
			<param index="1" name="port" type="int" />
			<description>
				Connects to the specified [code]host:port[/code] pair. A hostname will be resolved if valid. Returns [constant OK] on success.
			</description>
		</method>
		<method name="disconnect_from_host">
			<return type="void" />
			<description>
				Disconnects from host.
			</description>
		</method>
		<method name="get_connected_host" qualifiers="const">
			<return type="String" />
			<description>
				Returns the IP of this peer.
			</description>
		</method>
		<method name="get_connected_port" qualifiers="const">
			<return type="int" />
			<description>
				Returns the port of this peer.
			</description>
		</method>
		<method name="get_local_port" qualifiers="const">
			<return type="int" />
			<description>
				Returns the local port to which this peer is bound.
			</description>
		</method>
		<method name="get_status" qualifiers="const">
			<return type="int" enum="StreamPeerTCP.Status" />
			<description>
				Returns the status of the connection, see [enum Status].
			</description>
		</method>
		<method name="poll">
			<return type="int" enum="Error" />
			<description>
				Poll the socket, updating its state. See [method get_status].
			</description>
		</method>
		<method name="set_no_delay">
			<return type="void" />
			<param index="0" name="enabled" type="bool" />
			<description>
				If [param enabled] is [code]true[/code], packets will be sent immediately. If [param enabled] is [code]false[/code] (the default), packet transfers will be delayed and combined using [url=https://en.wikipedia.org/wiki/Nagle%27s_algorithm]Nagle's algorithm[/url].
				[b]Note:[/b] It's recommended to leave this disabled for applications that send large packets or need to transfer a lot of data, as enabling this can decrease the total available bandwidth.
			</description>
		</method>
	</methods>
	<constants>
		<constant name="STATUS_NONE" value="0" enum="Status">
			The initial status of the [StreamPeerTCP]. This is also the status after disconnecting.
		</constant>
		<constant name="STATUS_CONNECTING" value="1" enum="Status">
			A status representing a [StreamPeerTCP] that is connecting to a host.
		</constant>
		<constant name="STATUS_CONNECTED" value="2" enum="Status">
			A status representing a [StreamPeerTCP] that is connected to a host.
		</constant>
		<constant name="STATUS_ERROR" value="3" enum="Status">
			A status representing a [StreamPeerTCP] in error state.
		</constant>
	</constants>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="WorldBoundaryShape2D" inherits="Shape2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A 2D world boundary (half-plane) shape used for physics collision.
	</brief_description>
	<description>
		A 2D world boundary shape, intended for use in physics. [WorldBoundaryShape2D] works like an infinite straight line that forces all physics bodies to stay above it. The line's normal determines which direction is considered as "above" and in the editor, the smaller line over it represents this direction. It can for example be used for endless flat floors.
	</description>
	<tutorials>
	</tutorials>
	<members>
		<member name="distance" type="float" setter="set_distance" getter="get_distance" default="0.0">
			The distance from the origin to the line, expressed in terms of [member normal] (according to its direction and magnitude). Actual absolute distance from the origin to the line can be calculated as [code]abs(distance) / normal.length()[/code].
			In the scalar equation of the line [code]ax + by = d[/code], this is [code]d[/code], while the [code](a, b)[/code] coordinates are represented by the [member normal] property.
		</member>
		<member name="normal" type="Vector2" setter="set_normal" getter="get_normal" default="Vector2(0, -1)">
			The line's normal, typically a unit vector. Its direction indicates the non-colliding half-plane. Can be of any length but zero. Defaults to [constant Vector2.UP].
		</member>
	</members>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="PhysicsTestMotionResult2D" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Describes the motion and collision result from [method PhysicsServer2D.body_test_motion].
	</brief_description>
	<description>
		Describes the motion and collision result from [method PhysicsServer2D.body_test_motion].
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="get_collider" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the colliding body's attached [Object], if a collision occurred.
			</description>
		</method>
		<method name="get_collider_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the unique instance ID of the colliding body's attached [Object], if a collision occurred. See [method Object.get_instance_id].
			</description>
		</method>
		<method name="get_collider_rid" qualifiers="const">
			<return type="RID" />
			<description>
				Returns the colliding body's [RID] used by the [PhysicsServer2D], if a collision occurred.
			</description>
		</method>
		<method name="get_collider_shape" qualifiers="const">
			<return type="int" />
			<description>
				Returns the colliding body's shape index, if a collision occurred. See [CollisionObject2D].
			</description>
		</method>
		<method name="get_collider_velocity" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the colliding body's velocity, if a collision occurred.
			</description>
		</method>
		<method name="get_collision_depth" qualifiers="const">
			<return type="float" />
			<description>
				Returns the length of overlap along the collision normal, if a collision occurred.
			</description>
		</method>
		<method name="get_collision_local_shape" qualifiers="const">
			<return type="int" />
			<description>
				Returns the moving object's colliding shape, if a collision occurred.
			</description>
		</method>
		<method name="get_collision_normal" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the colliding body's shape's normal at the point of collision, if a collision occurred.
			</description>
		</method>
		<method name="get_collision_point" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the point of collision in global coordinates, if a collision occurred.
			</description>
		</method>
		<method name="get_collision_safe_fraction" qualifiers="const">
			<return type="float" />
			<description>
				Returns the maximum fraction of the motion that can occur without a collision, between [code]0[/code] and [code]1[/code].
			</description>
		</method>
		<method name="get_collision_unsafe_fraction" qualifiers="const">
			<return type="float" />
			<description>
				Returns the minimum fraction of the motion needed to collide, if a collision occurred, between [code]0[/code] and [code]1[/code].
			</description>
		</method>
		<method name="get_remainder" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the moving object's remaining movement vector.
			</description>
		</method>
		<method name="get_travel" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the moving object's travel before collision.
			</description>
		</method>
	</methods>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="Camera2D" inherits="Node2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Camera node for 2D scenes.
	</brief_description>
	<description>
		Camera node for 2D scenes. It forces the screen (current layer) to scroll following this node. This makes it easier (and faster) to program scrollable scenes than manually changing the position of [CanvasItem]-based nodes.
		Cameras register themselves in the nearest [Viewport] node (when ascending the tree). Only one camera can be active per viewport. If no viewport is available ascending the tree, the camera will register in the global viewport.
		This node is intended to be a simple helper to get things going quickly, but more functionality may be desired to change how the camera works. To make your own custom camera node, inherit it from [Node2D] and change the transform of the canvas by setting [member Viewport.canvas_transform] in [Viewport] (you can obtain the current [Viewport] by using [method Node.get_viewport]).
		Note that the [Camera2D] node's [code]position[/code] doesn't represent the actual position of the screen, which may differ due to applied smoothing or limits. You can use [method get_screen_center_position] to get the real position.
	</description>
	<tutorials>
		<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/2727</link>
		<link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/2718</link>
	</tutorials>
	<methods>
		<method name="align">
			<return type="void" />
			<description>
				Aligns the camera to the tracked node.
			</description>
		</method>
		<method name="force_update_scroll">
			<return type="void" />
			<description>
				Forces the camera to update scroll immediately.
			</description>
		</method>
		<method name="get_drag_margin" qualifiers="const">
			<return type="float" />
			<param index="0" name="margin" type="int" enum="Side" />
			<description>
				Returns the specified [enum Side]'s margin. See also [member drag_bottom_margin], [member drag_top_margin], [member drag_left_margin], and [member drag_right_margin].
			</description>
		</method>
		<method name="get_limit" qualifiers="const">
			<return type="int" />
			<param index="0" name="margin" type="int" enum="Side" />
			<description>
				Returns the camera limit for the specified [enum Side]. See also [member limit_bottom], [member limit_top], [member limit_left], and [member limit_right].
			</description>
		</method>
		<method name="get_screen_center_position" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the center of the screen from this camera's point of view, in global coordinates.
				[b]Note:[/b] The exact targeted position of the camera may be different. See [method get_target_position].
			</description>
		</method>
		<method name="get_target_position" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns this camera's target position, in global coordinates.
				[b]Note:[/b] The returned value is not the same as [member Node2D.global_position], as it is affected by the drag properties. It is also not the same as the current position if [member position_smoothing_enabled] is [code]true[/code] (see [method get_screen_center_position]).
			</description>
		</method>
		<method name="is_current" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this [Camera2D] is the active camera (see [method Viewport.get_camera_2d]).
			</description>
		</method>
		<method name="make_current">
			<return type="void" />
			<description>
				Forces this [Camera2D] to become the current active one. [member enabled] must be [code]true[/code].
			</description>
		</method>
		<method name="reset_smoothing">
			<return type="void" />
			<description>
				Sets the camera's position immediately to its current smoothing destination.
				This method has no effect if [member position_smoothing_enabled] is [code]false[/code].
			</description>
		</method>
		<method name="set_drag_margin">
			<return type="void" />
			<param index="0" name="margin" type="int" enum="Side" />
			<param index="1" name="drag_margin" type="float" />
			<description>
				Sets the specified [enum Side]'s margin. See also [member drag_bottom_margin], [member drag_top_margin], [member drag_left_margin], and [member drag_right_margin].
			</description>
		</method>
		<method name="set_limit">
			<return type="void" />
			<param index="0" name="margin" type="int" enum="Side" />
			<param index="1" name="limit" type="int" />
			<description>
				Sets the camera limit for the specified [enum Side]. See also [member limit_bottom], [member limit_top], [member limit_left], and [member limit_right].
			</description>
		</method>
	</methods>


<members>
		<member name="anchor_mode" type="int" setter="set_anchor_mode" getter="get_anchor_mode" enum="Camera2D.AnchorMode" default="1">
			The Camera2D's anchor point. See [enum AnchorMode] constants.
		</member>
		<member name="custom_viewport" type="Node" setter="set_custom_viewport" getter="get_custom_viewport">
			The custom [Viewport] node attached to the [Camera2D]. If [code]null[/code] or not a [Viewport], uses the default viewport instead.
		</member>
		<member name="drag_bottom_margin" type="float" setter="set_drag_margin" getter="get_drag_margin" default="0.2">
			Bottom margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the bottom edge of the screen.
		</member>
		<member name="drag_horizontal_enabled" type="bool" setter="set_drag_horizontal_enabled" getter="is_drag_horizontal_enabled" default="false">
			If [code]true[/code], the camera only moves when reaching the horizontal (left and right) drag margins. If [code]false[/code], the camera moves horizontally regardless of margins.
		</member>
		<member name="drag_horizontal_offset" type="float" setter="set_drag_horizontal_offset" getter="get_drag_horizontal_offset" default="0.0">
			The relative horizontal drag offset of the camera between the right ([code]-1[/code]) and left ([code]1[/code]) drag margins.
			[b]Note:[/b] Used to set the initial horizontal drag offset; determine the current offset; or force the current offset. It's not automatically updated when [member drag_horizontal_enabled] is [code]true[/code] or the drag margins are changed.
		</member>
		<member name="drag_left_margin" type="float" setter="set_drag_margin" getter="get_drag_margin" default="0.2">
			Left margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the left edge of the screen.
		</member>
		<member name="drag_right_margin" type="float" setter="set_drag_margin" getter="get_drag_margin" default="0.2">
			Right margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the right edge of the screen.
		</member>
		<member name="drag_top_margin" type="float" setter="set_drag_margin" getter="get_drag_margin" default="0.2">
			Top margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the top edge of the screen.
		</member>
		<member name="drag_vertical_enabled" type="bool" setter="set_drag_vertical_enabled" getter="is_drag_vertical_enabled" default="false">
			If [code]true[/code], the camera only moves when reaching the vertical (top and bottom) drag margins. If [code]false[/code], the camera moves vertically regardless of the drag margins.
		</member>
		<member name="drag_vertical_offset" type="float" setter="set_drag_vertical_offset" getter="get_drag_vertical_offset" default="0.0">
			The relative vertical drag offset of the camera between the bottom ([code]-1[/code]) and top ([code]1[/code]) drag margins.
			[b]Note:[/b] Used to set the initial vertical drag offset; determine the current offset; or force the current offset. It's not automatically updated when [member drag_vertical_enabled] is [code]true[/code] or the drag margins are changed.
		</member>
		<member name="editor_draw_drag_margin" type="bool" setter="set_margin_drawing_enabled" getter="is_margin_drawing_enabled" default="false">
			If [code]true[/code], draws the camera's drag margin rectangle in the editor.
		</member>
		<member name="editor_draw_limits" type="bool" setter="set_limit_drawing_enabled" getter="is_limit_drawing_enabled" default="false">
			If [code]true[/code], draws the camera's limits rectangle in the editor.
		</member>
		<member name="editor_draw_screen" type="bool" setter="set_screen_drawing_enabled" getter="is_screen_drawing_enabled" default="true">
			If [code]true[/code], draws the camera's screen rectangle in the editor.
		</member>
		<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
			Controls whether the camera can be active or not. If [code]true[/code], the [Camera2D] will become the main camera when it enters the scene tree and there is no active camera currently (see [method Viewport.get_camera_2d]).
			When the camera is currently active and [member enabled] is set to [code]false[/code], the next enabled [Camera2D] in the scene tree will become active.
		</member>
		<member name="ignore_rotation" type="bool" setter="set_ignore_rotation" getter="is_ignoring_rotation" default="true">
			If [code]true[/code], the camera's rendered view is not affected by its [member Node2D.rotation] and [member Node2D.global_rotation].
		</member>
		<member name="limit_bottom" type="int" setter="set_limit" getter="get_limit" default="10000000">
			Bottom scroll limit in pixels. The camera stops moving when reaching this value, but [member offset] can push the view past the limit.
		</member>
		<member name="limit_left" type="int" setter="set_limit" getter="get_limit" default="-10000000">
			Left scroll limit in pixels. The camera stops moving when reaching this value, but [member offset] can push the view past the limit.
		</member>
		<member name="limit_right" type="int" setter="set_limit" getter="get_limit" default="10000000">
			Right scroll limit in pixels. The camera stops moving when reaching this value, but [member offset] can push the view past the limit.
		</member>
		<member name="limit_smoothed" type="bool" setter="set_limit_smoothing_enabled" getter="is_limit_smoothing_enabled" default="false">
			If [code]true[/code], the camera smoothly stops when reaches its limits.
			This property has no effect if [member position_smoothing_enabled] is [code]false[/code].
			[b]Note:[/b] To immediately update the camera's position to be within limits without smoothing, even with this setting enabled, invoke [method reset_smoothing].
		</member>
		<member name="limit_top" type="int" setter="set_limit" getter="get_limit" default="-10000000">
			Top scroll limit in pixels. The camera stops moving when reaching this value, but [member offset] can push the view past the limit.
		</member>
		<member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2(0, 0)">
			The camera's relative offset. Useful for looking around or camera shake animations. The offsetted camera can go past the limits defined in [member limit_top], [member limit_bottom], [member limit_left] and [member limit_right].
		</member>
		<member name="position_smoothing_enabled" type="bool" setter="set_position_smoothing_enabled" getter="is_position_smoothing_enabled" default="false">
			If [code]true[/code], the camera's view smoothly moves towards its target position at [member position_smoothing_speed].
		</member>
		<member name="position_smoothing_speed" type="float" setter="set_position_smoothing_speed" getter="get_position_smoothing_speed" default="5.0">
			Speed in pixels per second of the camera's smoothing effect when [member position_smoothing_enabled] is [code]true[/code].
		</member>
		<member name="process_callback" type="int" setter="set_process_callback" getter="get_process_callback" enum="Camera2D.Camera2DProcessCallback" default="1">
			The camera's process callback. See [enum Camera2DProcessCallback].
		</member>
		<member name="rotation_smoothing_enabled" type="bool" setter="set_rotation_smoothing_enabled" getter="is_rotation_smoothing_enabled" default="false">
			If [code]true[/code], the camera's view smoothly rotates, via asymptotic smoothing, to align with its target rotation at [member rotation_smoothing_speed].
			[b]Note:[/b] This property has no effect if [member ignore_rotation] is [code]true[/code].
		</member>


<member name="rotation_smoothing_speed" type="float" setter="set_rotation_smoothing_speed" getter="get_rotation_smoothing_speed" default="5.0">
			The angular, asymptotic speed of the camera's rotation smoothing effect when [member rotation_smoothing_enabled] is [code]true[/code].
		</member>
		<member name="zoom" type="Vector2" setter="set_zoom" getter="get_zoom" default="Vector2(1, 1)">
			The camera's zoom. A zoom of [code]Vector(2, 2)[/code] doubles the size seen in the viewport. A zoom of [code]Vector(0.5, 0.5)[/code] halves the size seen in the viewport.
			[b]Note:[/b] [member FontFile.oversampling] does [i]not[/i] take [Camera2D] zoom into account. This means that zooming in/out will cause bitmap fonts and rasterized (non-MSDF) dynamic fonts to appear blurry or pixelated unless the font is part of a [CanvasLayer] that makes it ignore camera zoom. To ensure text remains crisp regardless of zoom, you can enable MSDF font rendering by enabling [member ProjectSettings.gui/theme/default_font_multichannel_signed_distance_field] (applies to the default project font only), or enabling [b]Multichannel Signed Distance Field[/b] in the import options of a DynamicFont for custom fonts. On system fonts, [member SystemFont.multichannel_signed_distance_field] can be enabled in the inspector.
		</member>
	</members>
	<constants>
		<constant name="ANCHOR_MODE_FIXED_TOP_LEFT" value="0" enum="AnchorMode">
			The camera's position is fixed so that the top-left corner is always at the origin.
		</constant>
		<constant name="ANCHOR_MODE_DRAG_CENTER" value="1" enum="AnchorMode">
			The camera's position takes into account vertical/horizontal offsets and the screen size.
		</constant>
		<constant name="CAMERA2D_PROCESS_PHYSICS" value="0" enum="Camera2DProcessCallback">
			The camera updates during physics frames (see [constant Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS]).
		</constant>
		<constant name="CAMERA2D_PROCESS_IDLE" value="1" enum="Camera2DProcessCallback">
			The camera updates during process frames (see [constant Node.NOTIFICATION_INTERNAL_PROCESS]).
		</constant>
	</constants>
</class>


<methods>
		<method name="get_date_dict_from_system" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="utc" type="bool" default="false" />
			<description>
				Returns the current date as a dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], and [code]weekday[/code].
				The returned values are in the system's local time when [param utc] is [code]false[/code], otherwise they are in UTC.
			</description>
		</method>
		<method name="get_date_dict_from_unix_time" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="unix_time_val" type="int" />
			<description>
				Converts the given Unix timestamp to a dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], and [code]weekday[/code].
			</description>
		</method>
		<method name="get_date_string_from_system" qualifiers="const">
			<return type="String" />
			<param index="0" name="utc" type="bool" default="false" />
			<description>
				Returns the current date as an ISO 8601 date string (YYYY-MM-DD).
				The returned values are in the system's local time when [param utc] is [code]false[/code], otherwise they are in UTC.
			</description>
		</method>
		<method name="get_date_string_from_unix_time" qualifiers="const">
			<return type="String" />
			<param index="0" name="unix_time_val" type="int" />
			<description>
				Converts the given Unix timestamp to an ISO 8601 date string (YYYY-MM-DD).
			</description>
		</method>
		<method name="get_datetime_dict_from_datetime_string" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="datetime" type="String" />
			<param index="1" name="weekday" type="bool" />
			<description>
				Converts the given ISO 8601 date and time string (YYYY-MM-DDTHH:MM:SS) to a dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], [code skip-lint]weekday[/code], [code]hour[/code], [code]minute[/code], and [code]second[/code].
				If [param weekday] is [code]false[/code], then the [code skip-lint]weekday[/code] entry is excluded (the calculation is relatively expensive).
				[b]Note:[/b] Any decimal fraction in the time string will be ignored silently.
			</description>
		</method>
		<method name="get_datetime_dict_from_system" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="utc" type="bool" default="false" />
			<description>
				Returns the current date as a dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], [code]weekday[/code], [code]hour[/code], [code]minute[/code], [code]second[/code], and [code]dst[/code] (Daylight Savings Time).
			</description>
		</method>
		<method name="get_datetime_dict_from_unix_time" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="unix_time_val" type="int" />
			<description>
				Converts the given Unix timestamp to a dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], [code]weekday[/code], [code]hour[/code], [code]minute[/code], and [code]second[/code].
				The returned Dictionary's values will be the same as the [method get_datetime_dict_from_system] if the Unix timestamp is the current time, with the exception of Daylight Savings Time as it cannot be determined from the epoch.
			</description>
		</method>
		<method name="get_datetime_string_from_datetime_dict" qualifiers="const">
			<return type="String" />
			<param index="0" name="datetime" type="Dictionary" />
			<param index="1" name="use_space" type="bool" />
			<description>
				Converts the given dictionary of keys to an ISO 8601 date and time string (YYYY-MM-DDTHH:MM:SS).
				The given dictionary can be populated with the following keys: [code]year[/code], [code]month[/code], [code]day[/code], [code]hour[/code], [code]minute[/code], and [code]second[/code]. Any other entries (including [code]dst[/code]) are ignored.
				If the dictionary is empty, [code]0[/code] is returned. If some keys are omitted, they default to the equivalent values for the Unix epoch timestamp 0 (1970-01-01 at 00:00:00).
				If [param use_space] is [code]true[/code], the date and time bits are separated by an empty space character instead of the letter T.
			</description>
		</method>
		<method name="get_datetime_string_from_system" qualifiers="const">
			<return type="String" />
			<param index="0" name="utc" type="bool" default="false" />
			<param index="1" name="use_space" type="bool" default="false" />
			<description>
				Returns the current date and time as an ISO 8601 date and time string (YYYY-MM-DDTHH:MM:SS).
				The returned values are in the system's local time when [param utc] is [code]false[/code], otherwise they are in UTC.
				If [param use_space] is [code]true[/code], the date and time bits are separated by an empty space character instead of the letter T.
			</description>
		</method>
		<method name="get_datetime_string_from_unix_time" qualifiers="const">
			<return type="String" />
			<param index="0" name="unix_time_val" type="int" />
			<param index="1" name="use_space" type="bool" default="false" />
			<description>
				Converts the given Unix timestamp to an ISO 8601 date and time string (YYYY-MM-DDTHH:MM:SS).
				If [param use_space] is [code]true[/code], the date and time bits are separated by an empty space character instead of the letter T.
			</description>
		</method>
		<method name="get_offset_string_from_offset_minutes" qualifiers="const">
			<return type="String" />
			<param index="0" name="offset_minutes" type="int" />
			<description>
				Converts the given timezone offset in minutes to a timezone offset string. For example, -480 returns "-08:00", 345 returns "+05:45", and 0 returns "+00:00".
			</description>
		</method>
		<method name="get_ticks_msec" qualifiers="const">
			<return type="int" />
			<description>
				Returns the amount of time passed in milliseconds since the engine started.
				Will always be positive or 0 and uses a 64-bit value (it will wrap after roughly 500 million years).
			</description>
		</method>
		<method name="get_ticks_usec" qualifiers="const">
			<return type="int" />
			<description>
				Returns the amount of time passed in microseconds since the engine started.
				Will always be positive or 0 and uses a 64-bit value (it will wrap after roughly half a million years).
			</description>
		</method>
		<method name="get_time_dict_from_system" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="utc" type="bool" default="false" />
			<description>
				Returns the current time as a dictionary of keys: [code]hour[/code], [code]minute[/code], and [code]second[/code].
				The returned values are in the system's local time when [param utc] is [code]false[/code], otherwise they are in UTC.
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="CollisionPolygon2D" inherits="Node2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A node that provides a polygon shape to a [CollisionObject2D] parent.
	</brief_description>
	<description>
		A node that provides a polygon shape to a [CollisionObject2D] parent and allows to edit it. The polygon can be concave or convex. This can give a detection shape to an [Area2D], turn [PhysicsBody2D] into a solid object, or give a hollow shape to a [StaticBody2D].
		[b]Warning:[/b] A non-uniformly scaled [CollisionShape2D] will likely not behave as expected. Make sure to keep its scale the same on all axes and adjust its shape resource instead.
	</description>
	<tutorials>
	</tutorials>
	<members>
		<member name="build_mode" type="int" setter="set_build_mode" getter="get_build_mode" enum="CollisionPolygon2D.BuildMode" default="0">
			Collision build mode. Use one of the [enum BuildMode] constants.
		</member>
		<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false" keywords="enabled">
			If [code]true[/code], no collisions will be detected.
		</member>
		<member name="one_way_collision" type="bool" setter="set_one_way_collision" getter="is_one_way_collision_enabled" default="false">
			If [code]true[/code], only edges that face up, relative to [CollisionPolygon2D]'s rotation, will collide with other objects.
			[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] 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 polygon at a high velocity.
		</member>
		<member name="polygon" type="PackedVector2Array" setter="set_polygon" getter="get_polygon" default="PackedVector2Array()">
			The polygon's list of vertices. Each point will be connected to the next, and the final point will be connected to the first.
			[b]Note:[/b] The returned vertices are in the local coordinate space of the given [CollisionPolygon2D].
		</member>
	</members>
	<constants>
		<constant name="BUILD_SOLIDS" value="0" enum="BuildMode">
			Collisions will include the polygon and its contained area. In this mode the node has the same effect as several [ConvexPolygonShape2D] nodes, one for each convex shape in the convex decomposition of the polygon (but without the overhead of multiple nodes).
		</constant>
		<constant name="BUILD_SEGMENTS" value="1" enum="BuildMode">
			Collisions will only include the polygon edges. In this mode the node has the same effect as a single [ConcavePolygonShape2D] made of segments, with the restriction that each segment (after the first one) starts where the previous one ends, and the last one ends where the first one starts (forming a closed but hollow polygon).
		</constant>
	</constants>
</class>


<methods>
		<method name="assign">
			<return type="void" />
			<param index="0" name="dictionary" type="Dictionary" />
			<description>
				Assigns elements of another [param dictionary] into the dictionary. Resizes the dictionary to match [param dictionary]. Performs type conversions if the dictionary is typed.
			</description>
		</method>
		<method name="clear">
			<return type="void" />
			<description>
				Clears the dictionary, removing all entries from it.
			</description>
		</method>
		<method name="duplicate" qualifiers="const">
			<return type="Dictionary" />
			<param index="0" name="deep" type="bool" default="false" />
			<description>
				Creates and returns a new copy of the dictionary. If [param deep] is [code]true[/code], inner [Dictionary] and [Array] keys and values are also copied, recursively.
			</description>
		</method>
		<method name="erase">
			<return type="bool" />
			<param index="0" name="key" type="Variant" />
			<description>
				Removes the dictionary entry by key, if it exists. Returns [code]true[/code] if the given [param key] existed in the dictionary, otherwise [code]false[/code].
				[b]Note:[/b] Do not erase entries while iterating over the dictionary. You can iterate over the [method keys] array instead.
			</description>
		</method>
		<method name="find_key" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="value" type="Variant" />
			<description>
				Finds and returns the first key whose associated value is equal to [param value], or [code]null[/code] if it is not found.
				[b]Note:[/b] [code]null[/code] is also a valid key. If inside the dictionary, [method find_key] may give misleading results.
			</description>
		</method>
		<method name="get" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="key" type="Variant" />
			<param index="1" name="default" type="Variant" default="null" />
			<description>
				Returns the corresponding value for the given [param key] in the dictionary. If the [param key] does not exist, returns [param default], or [code]null[/code] if the parameter is omitted.
			</description>
		</method>
		<method name="get_or_add">
			<return type="Variant" />
			<param index="0" name="key" type="Variant" />
			<param index="1" name="default" type="Variant" default="null" />
			<description>
				Gets a value and ensures the key is set. If the [param key] exists in the dictionary, this behaves like [method get]. Otherwise, the [param default] value is inserted into the dictionary and returned.
			</description>
		</method>
		<method name="get_typed_key_builtin" qualifiers="const">
			<return type="int" />
			<description>
				Returns the built-in [Variant] type of the typed dictionary's keys as a [enum Variant.Type] constant. If the keys are not typed, returns [constant TYPE_NIL]. See also [method is_typed_key].
			</description>
		</method>
		<method name="get_typed_key_class_name" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the [b]built-in[/b] class name of the typed dictionary's keys, if the built-in [Variant] type is [constant TYPE_OBJECT]. Otherwise, returns an empty [StringName]. See also [method is_typed_key] and [method Object.get_class].
			</description>
		</method>
		<method name="get_typed_key_script" qualifiers="const">
			<return type="Variant" />
			<description>
				Returns the [Script] instance associated with this typed dictionary's keys, or [code]null[/code] if it does not exist. See also [method is_typed_key].
			</description>
		</method>
		<method name="get_typed_value_builtin" qualifiers="const">
			<return type="int" />
			<description>
				Returns the built-in [Variant] type of the typed dictionary's values as a [enum Variant.Type] constant. If the values are not typed, returns [constant TYPE_NIL]. See also [method is_typed_value].
			</description>
		</method>
		<method name="get_typed_value_class_name" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the [b]built-in[/b] class name of the typed dictionary's values, if the built-in [Variant] type is [constant TYPE_OBJECT]. Otherwise, returns an empty [StringName]. See also [method is_typed_value] and [method Object.get_class].
			</description>
		</method>
		<method name="get_typed_value_script" qualifiers="const">
			<return type="Variant" />
			<description>
				Returns the [Script] instance associated with this typed dictionary's values, or [code]null[/code] if it does not exist. See also [method is_typed_value].
			</description>
		</method>
		<method name="has" qualifiers="const">
			<return type="bool" />
			<param index="0" name="key" type="Variant" />
			<description>
				Returns [code]true[/code] if the dictionary contains an entry with the given [param key].
				[codeblocks]
				[gdscript]
				var my_dict = {
				    "Godot" : 4,
				    210 : null,
				}

				print(my_dict.has("Godot")) # Prints true
				print(my_dict.has(210))     # Prints true
				print(my_dict.has(4))       # Prints false
				[/gdscript]
				[csharp]
				var myDict = new Godot.Collections.Dictionary
				{
				    { "Godot", 4 },
				    { 210, default },
				};

				GD.Print(myDict.ContainsKey("Godot")); // Prints true
				GD.Print(myDict.ContainsKey(210));     // Prints true
				GD.Print(myDict.ContainsKey(4));       // Prints false
				[/csharp]
				[/codeblocks]
				In GDScript, this is equivalent to the [code]in[/code] operator:
				[codeblock]
				if "Godot" in {"Godot": 4}:
				    print("The key is here!") # Will be printed.
				[/codeblock]
				[b]Note:[/b] This method returns [code]true[/code] as long as the [param key] exists, even if its corresponding value is [code]null[/code].
			</description>
		</method>
		<method name="has_all" qualifiers="const">
			<return type="bool" />
			<param index="0" name="keys" type="Array" />
			<description>
				Returns [code]true[/code] if the dictionary contains all keys in the given [param keys] array.
				[codeblock]
				var data = {"width" : 10, "height" : 20}
				data.has_all(["height", "width"]) # Returns true
				[/codeblock]
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="VBoxContainer" inherits="BoxContainer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A container that arranges its child controls vertically.
	</brief_description>
	<description>
		A variant of [BoxContainer] that can only arrange its child controls vertically. Child controls are rearranged automatically when their minimum size changes.
	</description>
	<tutorials>
		<link title="Using Containers">$DOCS_URL/tutorials/ui/gui_containers.html</link>
		<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/2755</link>
	</tutorials>
</class>


<signals>
		<signal name="request_completed">
			<param index="0" name="result" type="int" />
			<param index="1" name="response_code" type="int" />
			<param index="2" name="headers" type="PackedStringArray" />
			<param index="3" name="body" type="PackedByteArray" />
			<description>
				Emitted when a request is completed.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="RESULT_SUCCESS" value="0" enum="Result">
			Request successful.
		</constant>
		<constant name="RESULT_CHUNKED_BODY_SIZE_MISMATCH" value="1" enum="Result">
			Request failed due to a mismatch between the expected and actual chunked body size during transfer. Possible causes include network errors, server misconfiguration, or issues with chunked encoding.
		</constant>
		<constant name="RESULT_CANT_CONNECT" value="2" enum="Result">
			Request failed while connecting.
		</constant>
		<constant name="RESULT_CANT_RESOLVE" value="3" enum="Result">
			Request failed while resolving.
		</constant>
		<constant name="RESULT_CONNECTION_ERROR" value="4" enum="Result">
			Request failed due to connection (read/write) error.
		</constant>
		<constant name="RESULT_TLS_HANDSHAKE_ERROR" value="5" enum="Result">
			Request failed on TLS handshake.
		</constant>
		<constant name="RESULT_NO_RESPONSE" value="6" enum="Result">
			Request does not have a response (yet).
		</constant>
		<constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7" enum="Result">
			Request exceeded its maximum size limit, see [member body_size_limit].
		</constant>
		<constant name="RESULT_BODY_DECOMPRESS_FAILED" value="8" enum="Result">
			Request failed due to an error while decompressing the response body. Possible causes include unsupported or incorrect compression format, corrupted data, or incomplete transfer.
		</constant>
		<constant name="RESULT_REQUEST_FAILED" value="9" enum="Result">
			Request failed (currently unused).
		</constant>
		<constant name="RESULT_DOWNLOAD_FILE_CANT_OPEN" value="10" enum="Result">
			HTTPRequest couldn't open the download file.
		</constant>
		<constant name="RESULT_DOWNLOAD_FILE_WRITE_ERROR" value="11" enum="Result">
			HTTPRequest couldn't write to the download file.
		</constant>
		<constant name="RESULT_REDIRECT_LIMIT_REACHED" value="12" enum="Result">
			Request reached its maximum redirect limit, see [member max_redirects].
		</constant>
		<constant name="RESULT_TIMEOUT" value="13" enum="Result">
			Request failed due to a timeout. If you expect requests to take a long time, try increasing the value of [member timeout] or setting it to [code]0.0[/code] to remove the timeout completely.
		</constant>
	</constants>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A set of [AnimationRootNode]s placed on 2D coordinates, crossfading between the three adjacent ones. Used by [AnimationTree].
	</brief_description>
	<description>
		A resource used by [AnimationNodeBlendTree].
		[AnimationNodeBlendSpace2D] represents a virtual 2D space on which [AnimationRootNode]s are placed. Outputs the linear blend of the three adjacent animations using a [Vector2] weight. Adjacent in this context means the three [AnimationRootNode]s making up the triangle that contains the current value.
		You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to triangulate the blend space by hand.
	</description>
	<tutorials>
		<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
		<link title="Third Person Shooter (TPS) Demo">https://godotengine.org/asset-library/asset/2710</link>
	</tutorials>
	<methods>
		<method name="add_blend_point">
			<return type="void" />
			<param index="0" name="node" type="AnimationRootNode" />
			<param index="1" name="pos" type="Vector2" />
			<param index="2" name="at_index" type="int" default="-1" />
			<description>
				Adds a new point that represents a [param node] at the position set by [param pos]. You can insert it at a specific index using the [param at_index] argument. If you use the default value for [param at_index], the point is inserted at the end of the blend points array.
			</description>
		</method>
		<method name="add_triangle">
			<return type="void" />
			<param index="0" name="x" type="int" />
			<param index="1" name="y" type="int" />
			<param index="2" name="z" type="int" />
			<param index="3" name="at_index" type="int" default="-1" />
			<description>
				Creates a new triangle using three points [param x], [param y], and [param z]. Triangles can overlap. You can insert the triangle at a specific index using the [param at_index] argument. If you use the default value for [param at_index], the point is inserted at the end of the blend points array.
			</description>
		</method>
		<method name="get_blend_point_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of points in the blend space.
			</description>
		</method>
		<method name="get_blend_point_node" qualifiers="const">
			<return type="AnimationRootNode" />
			<param index="0" name="point" type="int" />
			<description>
				Returns the [AnimationRootNode] referenced by the point at index [param point].
			</description>
		</method>
		<method name="get_blend_point_position" qualifiers="const">
			<return type="Vector2" />
			<param index="0" name="point" type="int" />
			<description>
				Returns the position of the point at index [param point].
			</description>
		</method>
		<method name="get_triangle_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of triangles in the blend space.
			</description>
		</method>
		<method name="get_triangle_point">
			<return type="int" />
			<param index="0" name="triangle" type="int" />
			<param index="1" name="point" type="int" />
			<description>
				Returns the position of the point at index [param point] in the triangle of index [param triangle].
			</description>
		</method>
		<method name="remove_blend_point">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<description>
				Removes the point at index [param point] from the blend space.
			</description>
		</method>
		<method name="remove_triangle">
			<return type="void" />
			<param index="0" name="triangle" type="int" />
			<description>
				Removes the triangle at index [param triangle] from the blend space.
			</description>
		</method>
		<method name="set_blend_point_node">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<param index="1" name="node" type="AnimationRootNode" />
			<description>
				Changes the [AnimationNode] referenced by the point at index [param point].
			</description>
		</method>
		<method name="set_blend_point_position">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<param index="1" name="pos" type="Vector2" />
			<description>
				Updates the position of the point at index [param point] in the blend space.
			</description>
		</method>
	</methods>
	<members>
		<member name="auto_triangles" type="bool" setter="set_auto_triangles" getter="get_auto_triangles" default="true">
			If [code]true[/code], the blend space is triangulated automatically. The mesh updates every time you add or remove points with [method add_blend_point] and [method remove_blend_point].
		</member>
		<member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="AnimationNodeBlendSpace2D.BlendMode" default="0">
			Controls the interpolation between animations. See [enum BlendMode] constants.
		</member>
		<member name="max_space" type="Vector2" setter="set_max_space" getter="get_max_space" default="Vector2(1, 1)">
			The blend space's X and Y axes' upper limit for the points' position. See [method add_blend_point].
		</member>
		<member name="min_space" type="Vector2" setter="set_min_space" getter="get_min_space" default="Vector2(-1, -1)">
			The blend space's X and Y axes' lower limit for the points' position. See [method add_blend_point].
		</member>
		<member name="snap" type="Vector2" setter="set_snap" getter="get_snap" default="Vector2(0.1, 0.1)">
			Position increment to snap to when moving a point.
		</member>
		<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
			If [code]false[/code], the blended animations' frame are stopped when the blend value is [code]0[/code].
			If [code]true[/code], forcing the blended animations to advance frame.
		</member>
		<member name="x_label" type="String" setter="set_x_label" getter="get_x_label" default=""x"">
			Name of the blend space's X axis.
		</member>
		<member name="y_label" type="String" setter="set_y_label" getter="get_y_label" default=""y"">
			Name of the blend space's Y axis.
		</member>
	</members>
	<signals>
		<signal name="triangles_updated">
			<description>
				Emitted every time the blend space's triangles are created, removed, or when one of their vertices changes position.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode">
			The interpolation between animations is linear.
		</constant>
		<constant name="BLEND_MODE_DISCRETE" value="1" enum="BlendMode">
			The blend space plays the animation of the animation node which blending position is closest to. Useful for frame-by-frame 2D animations.
		</constant>
		<constant name="BLEND_MODE_DISCRETE_CARRY" value="2" enum="BlendMode">
			Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at the last animation's playback position.
		</constant>
	</constants>
</class>


<methods>
		<method name="add_gizmo">
			<return type="void" />
			<param index="0" name="gizmo" type="Node3DGizmo" />
			<description>
				Attach an editor gizmo to this [Node3D].
				[b]Note:[/b] The gizmo object would typically be an instance of [EditorNode3DGizmo], but the argument type is kept generic to avoid creating a dependency on editor classes in [Node3D].
			</description>
		</method>
		<method name="clear_gizmos">
			<return type="void" />
			<description>
				Clear all gizmos attached to this [Node3D].
			</description>
		</method>
		<method name="clear_subgizmo_selection">
			<return type="void" />
			<description>
				Clears subgizmo selection for this node in the editor. Useful when subgizmo IDs become invalid after a property change.
			</description>
		</method>
		<method name="force_update_transform">
			<return type="void" />
			<description>
				Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations.
			</description>
		</method>
		<method name="get_gizmos" qualifiers="const">
			<return type="Node3DGizmo[]" />
			<description>
				Returns all the gizmos attached to this [Node3D].
			</description>
		</method>
		<method name="get_global_transform_interpolated">
			<return type="Transform3D" />
			<description>
				When using physics interpolation, there will be circumstances in which you want to know the interpolated (displayed) transform of a node rather than the standard transform (which may only be accurate to the most recent physics tick).
				This is particularly important for frame-based operations that take place in [method Node._process], rather than [method Node._physics_process]. Examples include [Camera3D]s focusing on a node, or finding where to fire lasers from on a frame rather than physics tick.
				[b]Note:[/b] This function creates an interpolation pump on the [Node3D] the first time it is called, which can respond to physics interpolation resets. If you get problems with "streaking" when initially following a [Node3D], be sure to call [method get_global_transform_interpolated] at least once [i]before[/i] resetting the [Node3D] physics interpolation.
			</description>
		</method>
		<method name="get_parent_node_3d" qualifiers="const">
			<return type="Node3D" />
			<description>
				Returns the parent [Node3D], or [code]null[/code] if no parent exists, the parent is not of type [Node3D], or [member top_level] is [code]true[/code].
				[b]Note:[/b] Calling this method is not equivalent to [code]get_parent() as Node3D[/code], which does not take [member top_level] into account.
			</description>
		</method>
		<method name="get_world_3d" qualifiers="const">
			<return type="World3D" />
			<description>
				Returns the current [World3D] resource this [Node3D] node is registered to.
			</description>
		</method>
		<method name="global_rotate">
			<return type="void" />
			<param index="0" name="axis" type="Vector3" />
			<param index="1" name="angle" type="float" />
			<description>
				Rotates the global (world) transformation around axis, a unit [Vector3], by specified angle in radians. The rotation axis is in global coordinate system.
			</description>
		</method>
		<method name="global_scale">
			<return type="void" />
			<param index="0" name="scale" type="Vector3" />
			<description>
				Scales the global (world) transformation by the given [Vector3] scale factors.
			</description>
		</method>
		<method name="global_translate">
			<return type="void" />
			<param index="0" name="offset" type="Vector3" />
			<description>
				Moves the global (world) transformation by [Vector3] offset. The offset is in global coordinate system.
			</description>
		</method>
		<method name="hide">
			<return type="void" />
			<description>
				Disables rendering of this node. Changes [member visible] to [code]false[/code].
			</description>
		</method>
		<method name="is_local_transform_notification_enabled" qualifiers="const">
			<return type="bool" />
			<description>
				Returns whether node notifies about its local transformation changes. [Node3D] will not propagate this by default.
			</description>
		</method>
		<method name="is_scale_disabled" qualifiers="const">
			<return type="bool" />
			<description>
				Returns whether this node uses a scale of [code](1, 1, 1)[/code] or its local transformation scale.
			</description>
		</method>
		<method name="is_transform_notification_enabled" qualifiers="const">
			<return type="bool" />
			<description>
				Returns whether the node notifies about its global and local transformation changes. [Node3D] will not propagate this by default.
			</description>
		</method>
		<method name="is_visible_in_tree" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its ancestors are also visible. If any ancestor is hidden, this node will not be visible in the scene tree.
			</description>
		</method>
		<method name="look_at">
			<return type="void" />
			<param index="0" name="target" type="Vector3" />
			<param index="1" name="up" type="Vector3" default="Vector3(0, 1, 0)" />
			<param index="2" name="use_model_front" type="bool" default="false" />
			<description>
				Rotates the node so that the local forward axis (-Z, [constant Vector3.FORWARD]) points toward the [param target] position.
				The local up axis (+Y) points as close to the [param up] vector as possible while staying perpendicular to the local forward axis. The resulting transform is orthogonal, and the scale is preserved. Non-uniform scaling may not work correctly.
				The [param target] position cannot be the same as the node's position, the [param up] vector cannot be zero, and the direction from the node's position to the [param target] vector cannot be parallel to the [param up] vector.
				Operations take place in global space, which means that the node must be in the scene tree.
				If [param use_model_front] is [code]true[/code], the +Z axis (asset front) is treated as forward (implies +X is left) and points toward the [param target] position. By default, the -Z axis (camera forward) is treated as forward (implies +X is right).
			</description>
		</method>
		<method name="look_at_from_position">
			<return type="void" />
			<param index="0" name="position" type="Vector3" />
			<param index="1" name="target" type="Vector3" />
			<param index="2" name="up" type="Vector3" default="Vector3(0, 1, 0)" />
			<param index="3" name="use_model_front" type="bool" default="false" />
			<description>
				Moves the node to the specified [param position], and then rotates the node to point toward the [param target] as per [method look_at]. Operations take place in global space.
			</description>
		</method>
		<method name="orthonormalize">
			<return type="void" />
			<description>
				Resets this node's transformations (like scale, skew and taper) preserving its rotation and translation by performing Gram-Schmidt orthonormalization on this node's [Transform3D].
			</description>
		</method>


<members>
		<member name="basis" type="Basis" setter="set_basis" getter="get_basis">
			Basis of the [member transform] property. Represents the rotation, scale, and shear of this node.
		</member>
		<member name="global_basis" type="Basis" setter="set_global_basis" getter="get_global_basis">
			Global basis of this node. This is equivalent to [code]global_transform.basis[/code].
		</member>
		<member name="global_position" type="Vector3" setter="set_global_position" getter="get_global_position">
			Global position of this node. This is equivalent to [code]global_transform.origin[/code].
		</member>
		<member name="global_rotation" type="Vector3" setter="set_global_rotation" getter="get_global_rotation">
			Rotation part of the global transformation in radians, specified in terms of YXZ-Euler angles in the format (X angle, Y angle, Z angle).
			[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a vector. The three Euler angles, which are the three independent parameters of the Euler-angle parametrization of the rotation matrix, are stored in a [Vector3] data structure not because the rotation is a vector, but only because [Vector3] exists as a convenient data-structure to store 3 floating-point numbers. Therefore, applying affine operations on the rotation "vector" is not meaningful.
		</member>
		<member name="global_rotation_degrees" type="Vector3" setter="set_global_rotation_degrees" getter="get_global_rotation_degrees">
			Helper property to access [member global_rotation] in degrees instead of radians.
		</member>
		<member name="global_transform" type="Transform3D" setter="set_global_transform" getter="get_global_transform">
			World3D space (global) [Transform3D] of this node.
		</member>
		<member name="position" type="Vector3" setter="set_position" getter="get_position" default="Vector3(0, 0, 0)">
			Local position or translation of this node relative to the parent. This is equivalent to [code]transform.origin[/code].
		</member>
		<member name="quaternion" type="Quaternion" setter="set_quaternion" getter="get_quaternion">
			Access to the node rotation as a [Quaternion]. This property is ideal for tweening complex rotations.
		</member>
		<member name="rotation" type="Vector3" setter="set_rotation" getter="get_rotation" default="Vector3(0, 0, 0)">
			Rotation part of the local transformation in radians, specified in terms of Euler angles. The angles construct a rotation in the order specified by the [member rotation_order] property.
			[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a vector. The three Euler angles, which are the three independent parameters of the Euler-angle parametrization of the rotation matrix, are stored in a [Vector3] data structure not because the rotation is a vector, but only because [Vector3] exists as a convenient data-structure to store 3 floating-point numbers. Therefore, applying affine operations on the rotation "vector" is not meaningful.
			[b]Note:[/b] This property is edited in the inspector in degrees. If you want to use degrees in a script, use [member rotation_degrees].
		</member>
		<member name="rotation_degrees" type="Vector3" setter="set_rotation_degrees" getter="get_rotation_degrees">
			Helper property to access [member rotation] in degrees instead of radians.
		</member>
		<member name="rotation_edit_mode" type="int" setter="set_rotation_edit_mode" getter="get_rotation_edit_mode" enum="Node3D.RotationEditMode" default="0">
			Specify how rotation (and scale) will be presented in the editor.
		</member>
		<member name="rotation_order" type="int" setter="set_rotation_order" getter="get_rotation_order" enum="EulerOrder" default="2">
			Specify the axis rotation order of the [member rotation] property. The final orientation is constructed by rotating the Euler angles in the order specified by this property.
		</member>
		<member name="scale" type="Vector3" setter="set_scale" getter="get_scale" default="Vector3(1, 1, 1)">
			Scale part of the local transformation.
			[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, the scale values will either be all positive or all negative.
			[b]Note:[/b] Not all nodes are visually scaled by the [member scale] property. For example, [Light3D]s are not visually affected by [member scale].
		</member>
		<member name="top_level" type="bool" setter="set_as_top_level" getter="is_set_as_top_level" default="false">
			If [code]true[/code], the node will not inherit its transformations from its parent. Node transformations are only in global space.
		</member>
		<member name="transform" type="Transform3D" setter="set_transform" getter="get_transform" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
			Local space [Transform3D] of this node, with respect to the parent node.
		</member>
		<member name="visibility_parent" type="NodePath" setter="set_visibility_parent" getter="get_visibility_parent" default="NodePath("")">
			Defines the visibility range parent for this node and its subtree. The visibility parent must be a GeometryInstance3D. Any visual instance will only be visible if the visibility parent (and all of its visibility ancestors) is hidden by being closer to the camera than its own [member GeometryInstance3D.visibility_range_begin]. Nodes hidden via the [member Node3D.visible] property are essentially removed from the visibility dependency tree, so dependent instances will not take the hidden node or its ancestors into account.
		</member>
		<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
			If [code]true[/code], this node is drawn. The node is only visible if all of its ancestors are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
		</member>
	</members>
	<signals>
		<signal name="visibility_changed">
			<description>
				Emitted when node visibility changes.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="NOTIFICATION_TRANSFORM_CHANGED" value="2000">
			[Node3D] nodes receive this notification when their global transform changes. This means that either the current or a parent node changed its transform.
			In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first need to ask for it, with [method set_notify_transform]. The notification is also sent if the node is in the editor context and it has at least one valid gizmo.
		</constant>
		<constant name="NOTIFICATION_ENTER_WORLD" value="41">
			[Node3D] nodes receive this notification when they are registered to new [World3D] resource.
		</constant>
		<constant name="NOTIFICATION_EXIT_WORLD" value="42">
			[Node3D] nodes receive this notification when they are unregistered from current [World3D] resource.
		</constant>
		<constant name="NOTIFICATION_VISIBILITY_CHANGED" value="43">
			[Node3D] nodes receive this notification when their visibility changes.
		</constant>
		<constant name="NOTIFICATION_LOCAL_TRANSFORM_CHANGED" value="44">
			[Node3D] nodes receive this notification when their local transform changes. This is not received when the transform of a parent node is changed.
			In order for [constant NOTIFICATION_LOCAL_TRANSFORM_CHANGED] to work, users first need to ask for it, with [method set_notify_local_transform].
		</constant>
		<constant name="ROTATION_EDIT_MODE_EULER" value="0" enum="RotationEditMode">
			The rotation is edited using [Vector3] Euler angles.
		</constant>
		<constant name="ROTATION_EDIT_MODE_QUATERNION" value="1" enum="RotationEditMode">
			The rotation is edited using a [Quaternion].
		</constant>
		<constant name="ROTATION_EDIT_MODE_BASIS" value="2" enum="RotationEditMode">
			The rotation is edited using a [Basis]. In this mode, [member scale] can't be edited separately.
		</constant>
	</constants>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="ConfigFile" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Helper class to handle INI-style files.
	</brief_description>
	<description>
		This helper class can be used to store [Variant] values on the filesystem using INI-style formatting. The stored values are identified by a section and a key:
		[codeblock lang=text]
		[section]
		some_key=42
		string_example="Hello World3D!"
		a_vector=Vector3(1, 0, 2)
		[/codeblock]
		The stored data can be saved to or parsed from a file, though ConfigFile objects can also be used directly without accessing the filesystem.
		The following example shows how to create a simple [ConfigFile] and save it on disc:
		[codeblocks]
		[gdscript]
		# Create new ConfigFile object.
		var config = ConfigFile.new()

		# Store some values.
		config.set_value("Player1", "player_name", "Steve")
		config.set_value("Player1", "best_score", 10)
		config.set_value("Player2", "player_name", "V3geta")
		config.set_value("Player2", "best_score", 9001)

		# Save it to a file (overwrite if already exists).
		config.save("user://scores.cfg")
		[/gdscript]
		[csharp]
		// Create new ConfigFile object.
		var config = new ConfigFile();

		// Store some values.
		config.SetValue("Player1", "player_name", "Steve");
		config.SetValue("Player1", "best_score", 10);
		config.SetValue("Player2", "player_name", "V3geta");
		config.SetValue("Player2", "best_score", 9001);

		// Save it to a file (overwrite if already exists).
		config.Save("user://scores.cfg");
		[/csharp]
		[/codeblocks]
		This example shows how the above file could be loaded:
		[codeblocks]
		[gdscript]
		var score_data = {}
		var config = ConfigFile.new()

		# Load data from a file.
		var err = config.load("user://scores.cfg")

		# If the file didn't load, ignore it.
		if err != OK:
		    return

		# Iterate over all sections.
		for player in config.get_sections():
		    # Fetch the data for each section.
		    var player_name = config.get_value(player, "player_name")
		    var player_score = config.get_value(player, "best_score")
		    score_data[player_name] = player_score
		[/gdscript]
		[csharp]
		var score_data = new Godot.Collections.Dictionary();
		var config = new ConfigFile();

		// Load data from a file.
		Error err = config.Load("user://scores.cfg");

		// If the file didn't load, ignore it.
		if (err != Error.Ok)
		{
		    return;
		}

		// Iterate over all sections.
		foreach (String player in config.GetSections())
		{
		    // Fetch the data for each section.
		    var player_name = (String)config.GetValue(player, "player_name");
		    var player_score = (int)config.GetValue(player, "best_score");
		    score_data[player_name] = player_score;
		}
		[/csharp]
		[/codeblocks]
		Any operation that mutates the ConfigFile such as [method set_value], [method clear], or [method erase_section], only changes what is loaded in memory. If you want to write the change to a file, you have to save the changes with [method save], [method save_encrypted], or [method save_encrypted_pass].
		Keep in mind that section and property names can't contain spaces. Anything after a space will be ignored on save and on load.
		ConfigFiles can also contain manually written comment lines starting with a semicolon ([code];[/code]). Those lines will be ignored when parsing the file. Note that comments will be lost when saving the ConfigFile. This can still be useful for dedicated server configuration files, which are typically never overwritten without explicit user action.
		[b]Note:[/b] The file extension given to a ConfigFile does not have any impact on its formatting or behavior. By convention, the [code].cfg[/code] extension is used here, but any other extension such as [code].ini[/code] is also valid. Since neither [code].cfg[/code] nor [code].ini[/code] are standardized, Godot's ConfigFile formatting may differ from files written by other programs.
	</description>
	<tutorials>
	</tutorials>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="JSON" inherits="Resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Helper class for creating and parsing JSON data.
	</brief_description>
	<description>
		The [JSON] class enables all data types to be converted to and from a JSON string. This is useful for serializing data, e.g. to save to a file or send over the network.
		[method stringify] is used to convert any data type into a JSON string.
		[method parse] is used to convert any existing JSON data into a [Variant] that can be used within Godot. If successfully parsed, use [member data] to retrieve the [Variant], and use [method @GlobalScope.typeof] to check if the Variant's type is what you expect. JSON Objects are converted into a [Dictionary], but JSON data can be used to store [Array]s, numbers, [String]s and even just a boolean.
		[codeblock]
		var data_to_send = ["a", "b", "c"]
		var json_string = JSON.stringify(data_to_send)
		# Save data
		# ...
		# Retrieve data
		var json = JSON.new()
		var error = json.parse(json_string)
		if error == OK:
		    var data_received = json.data
		    if typeof(data_received) == TYPE_ARRAY:
		        print(data_received) # Prints array
		    else:
		        print("Unexpected data")
		else:
		    print("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
		[/codeblock]
		Alternatively, you can parse strings using the static [method parse_string] method, but it doesn't handle errors.
		[codeblock]
		var data = JSON.parse_string(json_string) # Returns null if parsing failed.
		[/codeblock]
		[b]Note:[/b] Both parse methods do not fully comply with the JSON specification:
		- Trailing commas in arrays or objects are ignored, instead of causing a parser error.
		- New line and tab characters are accepted in string literals, and are treated like their corresponding escape sequences [code]\n[/code] and [code]\t[/code].
		- Numbers are parsed using [method String.to_float] which is generally more lax than the JSON specification.
		- Certain errors, such as invalid Unicode sequences, do not cause a parser error. Instead, the string is cleaned up and an error is logged to the console.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="from_native" qualifiers="static">
			<return type="Variant" />
			<param index="0" name="variant" type="Variant" />
			<param index="1" name="allow_classes" type="bool" default="false" />
			<param index="2" name="allow_scripts" type="bool" default="false" />
			<description>
				Converts a native engine type to a JSON-compliant dictionary.
				By default, classes and scripts are ignored for security reasons, unless [param allow_classes] or [param allow_scripts] are specified.
			</description>
		</method>
		<method name="get_error_line" qualifiers="const">
			<return type="int" />
			<description>
				Returns [code]0[/code] if the last call to [method parse] was successful, or the line number where the parse failed.
			</description>
		</method>
		<method name="get_error_message" qualifiers="const">
			<return type="String" />
			<description>
				Returns an empty string if the last call to [method parse] was successful, or the error message if it failed.
			</description>
		</method>
		<method name="get_parsed_text" qualifiers="const">
			<return type="String" />
			<description>
				Return the text parsed by [method parse] (requires passing [code]keep_text[/code] to [method parse]).
			</description>
		</method>
		<method name="parse">
			<return type="int" enum="Error" />
			<param index="0" name="json_text" type="String" />
			<param index="1" name="keep_text" type="bool" default="false" />
			<description>
				Attempts to parse the [param json_text] provided.
				Returns an [enum Error]. If the parse was successful, it returns [constant OK] and the result can be retrieved using [member data]. If unsuccessful, use [method get_error_line] and [method get_error_message] to identify the source of the failure.
				Non-static variant of [method parse_string], if you want custom error handling.
				The optional [param keep_text] argument instructs the parser to keep a copy of the original text. This text can be obtained later by using the [method get_parsed_text] function and is used when saving the resource (instead of generating new text from [member data]).
			</description>
		</method>
		<method name="parse_string" qualifiers="static">
			<return type="Variant" />
			<param index="0" name="json_string" type="String" />
			<description>
				Attempts to parse the [param json_string] provided and returns the parsed data. Returns [code]null[/code] if parse failed.
			</description>
		</method>
		<method name="stringify" qualifiers="static">
			<return type="String" />
			<param index="0" name="data" type="Variant" />
			<param index="1" name="indent" type="String" default="""" />
			<param index="2" name="sort_keys" type="bool" default="true" />
			<param index="3" name="full_precision" type="bool" default="false" />
			<description>
				Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network.
				[b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a Variant to JSON text will convert all numerical values to [float] types.
				[b]Note:[/b] If [param full_precision] is [code]true[/code], when stringifying floats, the unreliable digits are stringified in addition to the reliable digits to guarantee exact decoding.
				The [param indent] parameter controls if and how something is indented; its contents will be used where there should be an indent in the output. Even spaces like [code]"   "[/code] will work. [code]\t[/code] and [code]\n[/code] can also be used for a tab indent, or to make a newline for each indent respectively.
				[b]Example output:[/b]
				[codeblock]
				## JSON.stringify(my_dictionary)
				{"name":"my_dictionary","version":"1.0.0","entities":[{"name":"entity_0","value":"value_0"},{"name":"entity_1","value":"value_1"}]}

				## JSON.stringify(my_dictionary, "\t")
				{
				    "name": "my_dictionary",
				    "version": "1.0.0",
				    "entities": [
				        {
				            "name": "entity_0",
				            "value": "value_0"
				        },
				        {
				            "name": "entity_1",
				            "value": "value_1"
				        }
				    ]
				}

				## JSON.stringify(my_dictionary, "...")
				{
				..."name": "my_dictionary",
				..."version": "1.0.0",
				..."entities": [
				......{
				........."name": "entity_0",
				........."value": "value_0"
				......},
				......{
				........."name": "entity_1",
				........."value": "value_1"
				......}
				...]
				}
				[/codeblock]
			</description>
		</method>
		<method name="to_native" qualifiers="static">
			<return type="Variant" />
			<param index="0" name="json" type="Variant" />
			<param index="1" name="allow_classes" type="bool" default="false" />
			<param index="2" name="allow_scripts" type="bool" default="false" />
			<description>
				Converts a JSON-compliant dictionary that was created with [method from_native] back to native engine types.
				By default, classes and scripts are ignored for security reasons, unless [param allow_classes] or [param allow_scripts] are specified.
			</description>
		</method>
	</methods>
	<members>
		<member name="data" type="Variant" setter="set_data" getter="get_data" default="null">
			Contains the parsed JSON data in [Variant] form.
		</member>
	</members>
</class>


<methods>
		<method name="close">
			<return type="void" />
			<description>
				Closes the currently opened file and prevents subsequent read/write operations. Use [method flush] to persist the data to disk without closing the file.
				[b]Note:[/b] [FileAccess] will automatically close when it's freed, which happens when it goes out of scope or when it gets assigned with [code]null[/code]. In C# the reference must be disposed after we are done using it, this can be done with the [code]using[/code] statement or calling the [code]Dispose[/code] method directly.
			</description>
		</method>
		<method name="eof_reached" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the file cursor has already read past the end of the file.
				[b]Note:[/b] [code]eof_reached() == false[/code] cannot be used to check whether there is more data available. To loop while there is more data available, use:
				[codeblocks]
				[gdscript]
				while file.get_position() < file.get_length():
				    # Read data
				[/gdscript]
				[csharp]
				while (file.GetPosition() < file.GetLength())
				{
				    // Read data
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="file_exists" qualifiers="static">
			<return type="bool" />
			<param index="0" name="path" type="String" />
			<description>
				Returns [code]true[/code] if the file exists in the given path.
				[b]Note:[/b] Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. See [method ResourceLoader.exists] for an alternative approach that takes resource remapping into account.
				For a non-static, relative equivalent, use [method DirAccess.file_exists].
			</description>
		</method>
		<method name="flush">
			<return type="void" />
			<description>
				Writes the file's buffer to disk. Flushing is automatically performed when the file is closed. This means you don't need to call [method flush] manually before closing a file. Still, calling [method flush] can be used to ensure the data is safe even if the project crashes instead of being closed gracefully.
				[b]Note:[/b] Only call [method flush] when you actually need it. Otherwise, it will decrease performance due to constant disk writes.
			</description>
		</method>
		<method name="get_8" qualifiers="const">
			<return type="int" />
			<description>
				Returns the next 8 bits from the file as an integer. See [method store_8] for details on what values can be stored and retrieved this way.
			</description>
		</method>
		<method name="get_16" qualifiers="const">
			<return type="int" />
			<description>
				Returns the next 16 bits from the file as an integer. See [method store_16] for details on what values can be stored and retrieved this way.
			</description>
		</method>
		<method name="get_32" qualifiers="const">
			<return type="int" />
			<description>
				Returns the next 32 bits from the file as an integer. See [method store_32] for details on what values can be stored and retrieved this way.
			</description>
		</method>
		<method name="get_64" qualifiers="const">
			<return type="int" />
			<description>
				Returns the next 64 bits from the file as an integer. See [method store_64] for details on what values can be stored and retrieved this way.
			</description>
		</method>
		<method name="get_as_text" qualifiers="const">
			<return type="String" />
			<param index="0" name="skip_cr" type="bool" default="false" />
			<description>
				Returns the whole file as a [String]. Text is interpreted as being UTF-8 encoded.
				If [param skip_cr] is [code]true[/code], carriage return characters ([code]\r[/code], CR) will be ignored when parsing the UTF-8, so that only line feed characters ([code]\n[/code], LF) represent a new line (Unix convention).
			</description>
		</method>
		<method name="get_buffer" qualifiers="const">
			<return type="PackedByteArray" />
			<param index="0" name="length" type="int" />
			<description>
				Returns next [param length] bytes of the file as a [PackedByteArray].
			</description>
		</method>
		<method name="get_csv_line" qualifiers="const">
			<return type="PackedStringArray" />
			<param index="0" name="delim" type="String" default="","" />
			<description>
				Returns the next value of the file in CSV (Comma-Separated Values) format. You can pass a different delimiter [param delim] to use other than the default [code]","[/code] (comma). This delimiter must be one-character long, and cannot be a double quotation mark.
				Text is interpreted as being UTF-8 encoded. Text values must be enclosed in double quotes if they include the delimiter character. Double quotes within a text value can be escaped by doubling their occurrence.
				For example, the following CSV lines are valid and will be properly parsed as two strings each:
				[codeblock lang=text]
				Alice,"Hello, Bob!"
				Bob,Alice! What a surprise!
				Alice,"I thought you'd reply with ""Hello, world""."
				[/codeblock]
				Note how the second line can omit the enclosing quotes as it does not include the delimiter. However it [i]could[/i] very well use quotes, it was only written without for demonstration purposes. The third line must use [code]""[/code] for each quotation mark that needs to be interpreted as such instead of the end of a text value.
			</description>
		</method>
		<method name="get_double" qualifiers="const">
			<return type="float" />
			<description>
				Returns the next 64 bits from the file as a floating-point number.
			</description>
		</method>
		<method name="get_error" qualifiers="const">
			<return type="int" enum="Error" />
			<description>
				Returns the last error that happened when trying to perform operations. Compare with the [code]ERR_FILE_*[/code] constants from [enum Error].
			</description>
		</method>
		<method name="get_file_as_bytes" qualifiers="static">
			<return type="PackedByteArray" />
			<param index="0" name="path" type="String" />
			<description>
				Returns the whole [param path] file contents as a [PackedByteArray] without any decoding.
				Returns an empty [PackedByteArray] if an error occurred while opening the file. You can use [method get_open_error] to check the error that occurred.
			</description>
		</method>
		<method name="get_file_as_string" qualifiers="static">
			<return type="String" />
			<param index="0" name="path" type="String" />
			<description>
				Returns the whole [param path] file contents as a [String]. Text is interpreted as being UTF-8 encoded.
				Returns an empty [String] if an error occurred while opening the file. You can use [method get_open_error] to check the error that occurred.
			</description>
		</method>
		<method name="get_float" qualifiers="const">
			<return type="float" />
			<description>
				Returns the next 32 bits from the file as a floating-point number.
			</description>
		</method>
		<method name="get_hidden_attribute" qualifiers="static">
			<return type="bool" />
			<param index="0" name="file" type="String" />
			<description>
				Returns [code]true[/code], if file [code]hidden[/code] attribute is set.
				[b]Note:[/b] This method is implemented on iOS, BSD, macOS, and Windows.
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="AnimatedSprite2D" inherits="Node2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Sprite node that contains multiple textures as frames to play for animation.
	</brief_description>
	<description>
		[AnimatedSprite2D] is similar to the [Sprite2D] node, except it carries multiple textures as animation frames. Animations are created using a [SpriteFrames] resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The [SpriteFrames] resource can be configured in the editor via the SpriteFrames bottom panel.
	</description>
	<tutorials>
		<link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
		<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/2712</link>
	</tutorials>
	<methods>
		<method name="get_playing_speed" qualifiers="const">
			<return type="float" />
			<description>
				Returns the actual playing speed of current animation or [code]0[/code] if not playing. This speed is the [member speed_scale] property multiplied by [code]custom_speed[/code] argument specified when calling the [method play] method.
				Returns a negative value if the current animation is playing backwards.
			</description>
		</method>
		<method name="is_playing" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if an animation is currently playing (even if [member speed_scale] and/or [code]custom_speed[/code] are [code]0[/code]).
			</description>
		</method>
		<method name="pause">
			<return type="void" />
			<description>
				Pauses the currently playing animation. The [member frame] and [member frame_progress] will be kept and calling [method play] or [method play_backwards] without arguments will resume the animation from the current playback position.
				See also [method stop].
			</description>
		</method>
		<method name="play">
			<return type="void" />
			<param index="0" name="name" type="StringName" default="&""" />
			<param index="1" name="custom_speed" type="float" default="1.0" />
			<param index="2" name="from_end" type="bool" default="false" />
			<description>
				Plays the animation with key [param name]. If [param custom_speed] is negative and [param from_end] is [code]true[/code], the animation will play backwards (which is equivalent to calling [method play_backwards]).
				If this method is called with that same animation [param name], or with no [param name] parameter, the assigned animation will resume playing if it was paused.
			</description>
		</method>
		<method name="play_backwards">
			<return type="void" />
			<param index="0" name="name" type="StringName" default="&""" />
			<description>
				Plays the animation with key [param name] in reverse.
				This method is a shorthand for [method play] with [code]custom_speed = -1.0[/code] and [code]from_end = true[/code], so see its description for more information.
			</description>
		</method>
		<method name="set_frame_and_progress">
			<return type="void" />
			<param index="0" name="frame" type="int" />
			<param index="1" name="progress" type="float" />
			<description>
				Sets [member frame] the [member frame_progress] to the given values. Unlike setting [member frame], this method does not reset the [member frame_progress] to [code]0.0[/code] implicitly.
				[b]Example:[/b] Change the animation while keeping the same [member frame] and [member frame_progress].
				[codeblocks]
				[gdscript]
				var current_frame = animated_sprite.get_frame()
				var current_progress = animated_sprite.get_frame_progress()
				animated_sprite.play("walk_another_skin")
				animated_sprite.set_frame_and_progress(current_frame, current_progress)
				[/gdscript]
				[/codeblocks]
			</description>
		</method>
		<method name="stop">
			<return type="void" />
			<description>
				Stops the currently playing animation. The animation position is reset to [code]0[/code] and the [code]custom_speed[/code] is reset to [code]1.0[/code]. See also [method pause].
			</description>
		</method>
	</methods>
	<members>
		<member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&"default"">
			The current animation from the [member sprite_frames] resource. If this value is changed, the [member frame] counter and the [member frame_progress] are reset.
		</member>
		<member name="autoplay" type="String" setter="set_autoplay" getter="get_autoplay" default="""">
			The key of the animation to play when the scene loads.
		</member>
		<member name="centered" type="bool" setter="set_centered" getter="is_centered" default="true">
			If [code]true[/code], texture will be centered.
			[b]Note:[/b] For games with a pixel art aesthetic, textures may appear deformed when centered. This is caused by their position being between pixels. To prevent this, set this property to [code]false[/code], or consider enabling [member ProjectSettings.rendering/2d/snap/snap_2d_vertices_to_pixel] and [member ProjectSettings.rendering/2d/snap/snap_2d_transforms_to_pixel].
		</member>
		<member name="flip_h" type="bool" setter="set_flip_h" getter="is_flipped_h" default="false">
			If [code]true[/code], texture is flipped horizontally.
		</member>
		<member name="flip_v" type="bool" setter="set_flip_v" getter="is_flipped_v" default="false">
			If [code]true[/code], texture is flipped vertically.
		</member>
		<member name="frame" type="int" setter="set_frame" getter="get_frame" default="0">
			The displayed animation frame's index. Setting this property also resets [member frame_progress]. If this is not desired, use [method set_frame_and_progress].
		</member>
		<member name="frame_progress" type="float" setter="set_frame_progress" getter="get_frame_progress" default="0.0">
			The progress value between [code]0.0[/code] and [code]1.0[/code] until the current frame transitions to the next frame. If the animation is playing backwards, the value transitions from [code]1.0[/code] to [code]0.0[/code].
		</member>
		<member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2(0, 0)">
			The texture's drawing offset.
		</member>
		<member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale" default="1.0">
			The speed scaling ratio. For example, if this value is [code]1[/code], then the animation plays at normal speed. If it's [code]0.5[/code], then it plays at half speed. If it's [code]2[/code], then it plays at double speed.
			If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation will not advance.
		</member>
		<member name="sprite_frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames">
			The [SpriteFrames] resource containing the animation(s). Allows you the option to load, edit, clear, make unique and save the states of the [SpriteFrames] resource.
		</member>
	</members>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="KinematicCollision2D" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Holds collision data from the movement of a [PhysicsBody2D].
	</brief_description>
	<description>
		Holds collision data from the movement of a [PhysicsBody2D], usually from [method PhysicsBody2D.move_and_collide]. When a [PhysicsBody2D] is moved, it stops if it detects a collision with another body. If a collision is detected, a [KinematicCollision2D] object is returned.
		The collision data includes the colliding object, the remaining motion, and the collision position. This data can be used to determine a custom response to the collision.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="get_angle" qualifiers="const">
			<return type="float" />
			<param index="0" name="up_direction" type="Vector2" default="Vector2(0, -1)" />
			<description>
				Returns the collision angle according to [param up_direction], which is [constant Vector2.UP] by default. This value is always positive.
			</description>
		</method>
		<method name="get_collider" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the colliding body's attached [Object].
			</description>
		</method>
		<method name="get_collider_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the unique instance ID of the colliding body's attached [Object]. See [method Object.get_instance_id].
			</description>
		</method>
		<method name="get_collider_rid" qualifiers="const">
			<return type="RID" />
			<description>
				Returns the colliding body's [RID] used by the [PhysicsServer2D].
			</description>
		</method>
		<method name="get_collider_shape" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the colliding body's shape.
			</description>
		</method>
		<method name="get_collider_shape_index" qualifiers="const">
			<return type="int" />
			<description>
				Returns the colliding body's shape index. See [CollisionObject2D].
			</description>
		</method>
		<method name="get_collider_velocity" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the colliding body's velocity.
			</description>
		</method>
		<method name="get_depth" qualifiers="const">
			<return type="float" />
			<description>
				Returns the colliding body's length of overlap along the collision normal.
			</description>
		</method>
		<method name="get_local_shape" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the moving object's colliding shape.
			</description>
		</method>
		<method name="get_normal" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the colliding body's shape's normal at the point of collision.
			</description>
		</method>
		<method name="get_position" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the point of collision in global coordinates.
			</description>
		</method>
		<method name="get_remainder" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the moving object's remaining movement vector.
			</description>
		</method>
		<method name="get_travel" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the moving object's travel before collision.
			</description>
		</method>
	</methods>
</class>