<method name="save">
			<return type="int" enum="Error" />
			<description>
				Saves the configuration to the [code]project.godot[/code] file.
				[b]Note:[/b] This method is intended to be used by editor plugins, as modified [ProjectSettings] can't be loaded back in the running app. If you want to change project settings in exported projects, use [method save_custom] to save [code]override.cfg[/code] file.
			</description>
		</method>
		<method name="save_custom">
			<return type="int" enum="Error" />
			<param index="0" name="file" type="String" />
			<description>
				Saves the configuration to a custom file. The file extension must be [code].godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/code] (to save in binary format). You can also save [code]override.cfg[/code] file, which is also text, but can be used in exported projects unlike other formats.
			</description>
		</method>
		<method name="set_as_basic">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="basic" type="bool" />
			<description>
				Defines if the specified setting is considered basic or advanced. Basic settings will always be shown in the project settings. Advanced settings will only be shown if the user enables the "Advanced Settings" option.
			</description>
		</method>
		<method name="set_as_internal">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="internal" type="bool" />
			<description>
				Defines if the specified setting is considered internal. An internal setting won't show up in the Project Settings dialog. This is mostly useful for addons that need to store their own internal settings without exposing them directly to the user.
			</description>
		</method>
		<method name="set_initial_value">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="value" type="Variant" />
			<description>
				Sets the specified setting's initial value. This is the value the setting reverts to.
			</description>
		</method>
		<method name="set_order">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="position" type="int" />
			<description>
				Sets the order of a configuration value (influences when saved to the config file).
			</description>
		</method>
		<method name="set_restart_if_changed">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="restart" type="bool" />
			<description>
				Sets whether a setting requires restarting the editor to properly take effect.
				[b]Note:[/b] This is just a hint to display to the user that the editor must be restarted for changes to take effect. Enabling [method set_restart_if_changed] does [i]not[/i] delay the setting being set when changed.
			</description>
		</method>
		<method name="set_setting">
			<return type="void" />
			<param index="0" name="name" type="String" />
			<param index="1" name="value" type="Variant" />
			<description>
				Sets the value of a setting.
				[codeblocks]
				[gdscript]
				ProjectSettings.set_setting("application/config/name", "Example")
				[/gdscript]
				[csharp]
				ProjectSettings.SetSetting("application/config/name", "Example");
				[/csharp]
				[/codeblocks]
				This can also be used to erase custom project settings. To do this change the setting value to [code]null[/code].
			</description>
		</method>
	</methods>


<member name="debug/shader_language/warnings/magic_position_write" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when the shader contains [code]POSITION = vec4(vertex,[/code] as this was very common code written in Godot 4.2 and earlier that was paired with a QuadMesh to produce a full screen post processes pass. With the switch to reversed z in 4.3, this trick no longer works, as it implicitly relied on the [code]VERTEX.z[/code] being 0.
		</member>
		<member name="debug/shader_language/warnings/treat_warnings_as_errors" type="bool" setter="" getter="" default="false">
			When set to [code]true[/code], warnings are treated as errors.
		</member>
		<member name="debug/shader_language/warnings/unused_constant" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a constant is never used.
		</member>
		<member name="debug/shader_language/warnings/unused_function" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a function is never used.
		</member>
		<member name="debug/shader_language/warnings/unused_local_variable" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a local variable is never used.
		</member>
		<member name="debug/shader_language/warnings/unused_struct" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a struct is never used.
		</member>
		<member name="debug/shader_language/warnings/unused_uniform" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a uniform is never used.
		</member>
		<member name="debug/shader_language/warnings/unused_varying" type="bool" setter="" getter="" default="true">
			When set to [code]true[/code], produces a warning when a varying is never used.
		</member>
		<member name="debug/shapes/avoidance/agents_radius_color" type="Color" setter="" getter="" default="Color(1, 1, 0, 0.25)">
			Color of the avoidance agents radius, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/enable_agents_radius" type="bool" setter="" getter="" default="true">
			If enabled, displays avoidance agents radius when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/enable_obstacles_radius" type="bool" setter="" getter="" default="true">
			If enabled, displays avoidance obstacles radius when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/enable_obstacles_static" type="bool" setter="" getter="" default="true">
			If enabled, displays static avoidance obstacles when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/obstacles_radius_color" type="Color" setter="" getter="" default="Color(1, 0.5, 0, 0.25)">
			Color of the avoidance obstacles radius, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/obstacles_static_edge_pushin_color" type="Color" setter="" getter="" default="Color(1, 0, 0, 1)">
			Color of the static avoidance obstacles edges when their vertices are winded in order to push agents in, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/obstacles_static_edge_pushout_color" type="Color" setter="" getter="" default="Color(1, 1, 0, 1)">
			Color of the static avoidance obstacles edges when their vertices are winded in order to push agents out, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/obstacles_static_face_pushin_color" type="Color" setter="" getter="" default="Color(1, 0, 0, 0)">
			Color of the static avoidance obstacles faces when their vertices are winded in order to push agents in, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/avoidance/obstacles_static_face_pushout_color" type="Color" setter="" getter="" default="Color(1, 1, 0, 0.5)">
			Color of the static avoidance obstacles faces when their vertices are winded in order to push agents out, visible when "Visible Avoidance" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/collision/contact_color" type="Color" setter="" getter="" default="Color(1, 0.2, 0.1, 0.8)">
			Color of the contact points between collision shapes, visible when "Visible Collision Shapes" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/collision/draw_2d_outlines" type="bool" setter="" getter="" default="true">
			Sets whether 2D physics will display collision outlines in game when "Visible Collision Shapes" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/collision/max_contacts_displayed" type="int" setter="" getter="" default="10000">
			Maximum number of contact points between collision shapes to display when "Visible Collision Shapes" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/collision/shape_color" type="Color" setter="" getter="" default="Color(0, 0.6, 0.7, 0.42)">
			Color of the collision shapes, visible when "Visible Collision Shapes" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/navigation/agent_path_color" type="Color" setter="" getter="" default="Color(1, 0, 0, 1)">
			Color to display enabled navigation agent paths when an agent has debug enabled.
		</member>
		<member name="debug/shapes/navigation/agent_path_point_size" type="float" setter="" getter="" default="4.0">
			Rasterized size (pixel) used to render navigation agent path points when an agent has debug enabled.
		</member>
		<member name="debug/shapes/navigation/edge_connection_color" type="Color" setter="" getter="" default="Color(1, 0, 1, 1)">
			Color to display edge connections between navigation regions, visible when "Visible Navigation" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/navigation/enable_agent_paths" type="bool" setter="" getter="" default="true">
			If enabled, displays navigation agent paths when an agent has debug enabled.
		</member>
		<member name="debug/shapes/navigation/enable_agent_paths_xray" type="bool" setter="" getter="" default="true">
			If enabled, displays navigation agent paths through geometry when an agent has debug enabled.
		</member>
		<member name="debug/shapes/navigation/enable_edge_connections" type="bool" setter="" getter="" default="true">
			If enabled, displays edge connections between navigation regions when "Visible Navigation" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/navigation/enable_edge_connections_xray" type="bool" setter="" getter="" default="true">
			If enabled, displays edge connections between navigation regions through geometry when "Visible Navigation" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/navigation/enable_edge_lines" type="bool" setter="" getter="" default="true">
			If enabled, displays navigation mesh polygon edges when "Visible Navigation" is enabled in the Debug menu.
		</member>
		<member name="debug/shapes/navigation/enable_edge_lines_xray" type="bool" setter="" getter="" default="true">
			If enabled, displays navigation mesh polygon edges through geometry when "Visible Navigation" is enabled in the Debug menu.
		</member>


member name="display/window/size/borderless" type="bool" setter="" getter="" default="false">
			Forces the main window to be borderless.
			[b]Note:[/b] This setting is ignored on iOS, Android, and Web.
		</member>
		<member name="display/window/size/extend_to_title" type="bool" setter="" getter="" default="false">
			Main window content is expanded to the full size of the window. Unlike a borderless window, the frame is left intact and can be used to resize the window, and the title bar is transparent, but has minimize/maximize/close buttons.
			[b]Note:[/b] This setting is implemented only on macOS.
		</member>
		<member name="display/window/size/initial_position" type="Vector2i" setter="" getter="" default="Vector2i(0, 0)">
			Main window initial position (in virtual desktop coordinates), this setting is used only if [member display/window/size/initial_position_type] is set to "Absolute" ([code]0[/code]).
			[b]Note:[/b] This setting only affects the exported project, or when the project is run from the command line. In the editor, the value of [member EditorSettings.run/window_placement/rect_custom_position] is used instead.
		</member>
		<member name="display/window/size/initial_position_type" type="int" setter="" getter="" default="1">
			Main window initial position.
			[code]0[/code] - "Absolute", [member display/window/size/initial_position] is used to set window position.
			[code]1[/code] - "Primary Screen Center".
			[code]2[/code] - "Other Screen Center", [member display/window/size/initial_screen] is used to set the screen.
			[b]Note:[/b] This setting only affects the exported project, or when the project is run from the command line. In the editor, the value of [member EditorSettings.run/window_placement/rect] is used instead.
		</member>
		<member name="display/window/size/initial_screen" type="int" setter="" getter="" default="0">
			Main window initial screen, this setting is used only if [member display/window/size/initial_position_type] is set to "Other Screen Center" ([code]2[/code]).
			[b]Note:[/b] This setting only affects the exported project, or when the project is run from the command line. In the editor, the value of [member EditorSettings.run/window_placement/screen] is used instead.
		</member>
		<member name="display/window/size/mode" type="int" setter="" getter="" default="0">
			Main window mode. See [enum DisplayServer.WindowMode] for possible values and how each mode behaves.
		</member>
		<member name="display/window/size/no_focus" type="bool" setter="" getter="" default="false">
			Main window can't be focused. No-focus window will ignore all input, except mouse clicks.
		</member>
		<member name="display/window/size/resizable" type="bool" setter="" getter="" default="true">
			If [code]true[/code], allows the window to be resizable by default.
			[b]Note:[/b] This property is only read when the project starts. To change whether the window is resizable at runtime, set [member Window.unresizable] instead on the root Window, which can be retrieved using [code]get_viewport().get_window()[/code]. [member Window.unresizable] takes the opposite value of this setting.
			[b]Note:[/b] Certain window managers can be configured to ignore the non-resizable status of a window. Do not rely on this setting as a guarantee that the window will [i]never[/i] be resizable.
			[b]Note:[/b] This setting is ignored on iOS.
		</member>
		<member name="display/window/size/sharp_corners" type="bool" setter="" getter="" default="false">
			If [code]true[/code], the main window uses sharp corners by default.
			[b]Note:[/b] This property is implemented only on Windows (11).
		</member>
		<member name="display/window/size/transparent" type="bool" setter="" getter="" default="false">
			If [code]true[/code], enables a window manager hint that the main window background [i]can[/i] be transparent. This does not make the background actually transparent. For the background to be transparent, the root viewport must also be made transparent by enabling [member rendering/viewport/transparent_background].
			[b]Note:[/b] To use a transparent splash screen, set [member application/boot_splash/bg_color] to [code]Color(0, 0, 0, 0)[/code].
			[b]Note:[/b] This setting has no effect if [member display/window/per_pixel_transparency/allowed] is set to [code]false[/code].
		</member>
		<member name="display/window/size/viewport_height" type="int" setter="" getter="" default="648">
			Sets the game's main viewport height. On desktop platforms, this is also the initial window height, represented by an indigo-colored rectangle in the 2D editor. Stretch mode settings also use this as a reference when using the [code]canvas_items[/code] or [code]viewport[/code] stretch modes. See also [member display/window/size/viewport_width], [member display/window/size/window_width_override] and [member display/window/size/window_height_override].
		</member>
		<member name="display/window/size/viewport_width" type="int" setter="" getter="" default="1152">
			Sets the game's main viewport width. On desktop platforms, this is also the initial window width, represented by an indigo-colored rectangle in the 2D editor. Stretch mode settings also use this as a reference when using the [code]canvas_items[/code] or [code]viewport[/code] stretch modes. See also [member display/window/size/viewport_height], [member display/window/size/window_width_override] and [member display/window/size/window_height_override].
		</member>
		<member name="display/window/size/window_height_override" type="int" setter="" getter="" default="0">
			On desktop platforms, overrides the game's initial window height. See also [member display/window/size/window_width_override], [member display/window/size/viewport_width] and [member display/window/size/viewport_height].
			[b]Note:[/b] By default, or when set to [code]0[/code], the initial window height is the [member display/window/size/viewport_height]. This setting is ignored on iOS, Android, and Web.
		</member>
		<member name="display/window/size/window_width_override" type="int" setter="" getter="" default="0">
			On desktop platforms, overrides the game's initial window width. See also [member display/window/size/window_height_override], [member display/window/size/viewport_width] and [member display/window/size/viewport_height].
			[b]Note:[/b] By default, or when set to [code]0[/code], the initial window width is the [member display/window/size/viewport_width]. This setting is ignored on iOS, Android, and Web.
		</member>
		<member name="display/window/stretch/aspect" type="String" setter="" getter="" default=""keep"">
		</member>
		<member name="display/window/stretch/mode" type="String" setter="" getter="" default=""disabled"">
			Defines how the base size is stretched to fit the resolution of the window or screen.
			[b]"disabled"[/b]: No stretching happens. One unit in the scene corresponds to one pixel on the screen. In this mode, [member display/window/stretch/aspect] has no effect. Recommended for non-game applications.
			[b]"canvas_items"[/b]: The base size specified in width and height in the project settings is stretched to cover the whole screen (taking [member display/window/stretch/aspect] into account). This means that everything is rendered directly at the target resolution. 3D is unaffected, while in 2D, there is no longer a 1:1 correspondence between sprite pixels and screen pixels, which may result in scaling artifacts. Recommended for most games that don't use a pixel art aesthetic, although it is possible to use this stretch mode for pixel art games too (especially in 3D).
			[b]"viewport"[/b]: The size of the root [Viewport] is set precisely to the base size specified in the Project Settings' Display section. The scene is rendered to this viewport first. Finally, this viewport is scaled to fit the screen (taking [member display/window/stretch/aspect] into account). Recommended for games that use a pixel art aesthetic.
		</member>
		<


member name="display/window/stretch/scale" type="float" setter="" getter="" default="1.0">
			The scale factor multiplier to use for 2D elements. This multiplies the final scale factor determined by [member display/window/stretch/mode]. If using the [b]Disabled[/b] stretch mode, this scale factor is applied as-is. This can be adjusted to make the UI easier to read on certain displays.
		</member>
		<member name="display/window/stretch/scale_mode" type="String" setter="" getter="" default=""fractional"">
			The policy to use to determine the final scale factor for 2D elements. This affects how [member display/window/stretch/scale] is applied, in addition to the automatic scale factor determined by [member display/window/stretch/mode].
			[b]"fractional"[/b]: The scale factor will not be modified.
			[b]"integer"[/b]: The scale factor will be floored to an integer value, which means that the screen size will always be an integer multiple of the base viewport size. This provides a crisp pixel art appearance.
			[b]Note:[/b] When using integer scaling with a stretch mode, resizing the window to be smaller than the base viewport size will clip the contents. Consider preventing that by setting [member Window.min_size] to the same value as the base viewport size defined in [member display/window/size/viewport_width] and [member display/window/size/viewport_height].
		</member>
		<member name="display/window/subwindows/embed_subwindows" type="bool" setter="" getter="" default="true">
			If [code]true[/code], subwindows are embedded in the main window (this is also called single-window mode). Single-window mode can be faster as it does not need to create a separate window for every popup and tooltip, which can be a slow operation depending on the operating system and rendering method in use.
			If [code]false[/code], subwindows are created as separate windows (this is also called multi-window mode). This allows them to be moved outside the main window and use native operating system window decorations.
			This is equivalent to [member EditorSettings.interface/editor/single_window_mode] in the editor, except the setting's value is inverted.
		</member>
		<member name="display/window/vsync/vsync_mode" type="int" setter="" getter="" default="1">
			Sets the V-Sync mode for the main game window. The editor's own V-Sync mode can be set using [member EditorSettings.interface/editor/vsync_mode].
			See [enum DisplayServer.VSyncMode] for possible values and how they affect the behavior of your application.
			Depending on the platform and rendering method, the engine will fall back to [b]Enabled[/b] if the desired mode is not supported.
			V-Sync can be disabled on the command line using the [code]--disable-vsync[/code] [url=$DOCS_URL/tutorials/editor/command_line_tutorial.html]command line argument[/url].
			[b]Note:[/b] The [b]Adaptive[/b] and [b]Mailbox[/b] V-Sync modes are only supported in the Forward+ and Mobile rendering methods, not Compatibility.
			[b]Note:[/b] This property is only read when the project starts. To change the V-Sync mode at runtime, call [method DisplayServer.window_set_vsync_mode] instead.
		</member>
		<member name="dotnet/project/assembly_name" type="String" setter="" getter="" default="""">
			Name of the .NET assembly. This name is used as the name of the [code].csproj[/code] and [code].sln[/code] files. By default, it's set to the name of the project ([member application/config/name]) allowing to change it in the future without affecting the .NET assembly.
		</member>
		<member name="dotnet/project/assembly_reload_attempts" type="int" setter="" getter="" default="3">
			Number of times to attempt assembly reloading after rebuilding .NET assemblies. Effectively also the timeout in seconds to wait for unloading of script assemblies to finish.
		</member>
		<member name="dotnet/project/solution_directory" type="String" setter="" getter="" default="""">
			Directory that contains the [code].sln[/code] file. By default, the [code].sln[/code] files is in the root of the project directory, next to the [code]project.godot[/code] and [code].csproj[/code] files.
			Changing this value allows setting up a multi-project scenario where there are multiple [code].csproj[/code]. Keep in mind that the Godot project is considered one of the C# projects in the workspace and it's root directory should contain the [code]project.godot[/code] and [code].csproj[/code] next to each other.
		</member>
		<member name="editor/export/convert_text_resources_to_binary" type="bool" setter="" getter="" default="true">
			If [code]true[/code], text resource ([code]tres[/code]) and text scene ([code]tscn[/code]) files are converted to their corresponding binary format on export. This decreases file sizes and speeds up loading slightly.
			[b]Note:[/b] Because a resource's file extension may change in an exported project, it is heavily recommended to use [method @GDScript.load] or [ResourceLoader] instead of [FileAccess] to load resources dynamically.
			[b]Note:[/b] The project settings file ([code]project.godot[/code]) will always be converted to binary on export, regardless of this setting.
		</member>
		<member name="editor/import/atlas_max_width" type="int" setter="" getter="" default="2048">
			The maximum width to use when importing textures as an atlas. The value will be rounded to the nearest power of two when used. Use this to prevent imported textures from growing too large in the other direction.
		</member>
		<member name="editor/import/reimport_missing_imported_files" type="bool" setter="" getter="" default="true">
		</member>
		<member name="editor/import/use_multiple_threads" type="bool" setter="" getter="" default="true">
			If [code]true[/code] importing of resources is run on multiple threads.
		</member>
		<member name="editor/movie_writer/disable_vsync" type="bool" setter="" getter="" default="false">
			If [code]true[/code], requests V-Sync to be disabled when writing a movie (similar to setting [member display/window/vsync/vsync_mode] to [b]Disabled[/b]). This can speed up video writing if the hardware is fast enough to render, encode and save the video at a framerate higher than the monitor's refresh rate.
			[b]Note:[/b] [member editor/movie_writer/disable_vsync] has no effect if the operating system or graphics driver forces V-Sync with no way for applications to disable it.
		</member>
		<member name="editor/movie_writer/fps" type="int" setter="" getter="" default="60">
			The number of frames per second to record in the video when writing a movie. Simulation speed will adjust to always match the specified framerate, which means the engine will appear to run slower at higher [member editor/movie_writer/fps] values. Certain FPS values will require you to adjust [member editor/movie_writer/mix_rate] to prevent audio from desynchronizing over time.
			This can be specified manually on the command line using the [code]--fixed-fps <fps>[/code] [url=$DOCS_URL/tutorials/editor/command_line_tutorial.html]command line argument[/url].
		</member>
		<member name="editor/movie_writer/mix_rate" type="int" setter="" getter="" default="48000">
			The audio mix rate to use in the recorded audio when writing a movie (in Hz). This can be different from [member audio/driver/mix_rate], but this value must be divisible by [member editor/movie_writer/fps] to prevent audio from desynchronizing over time.
		</member>
		<member name="editor/movie_writer/mjpeg_quality" type="float" setter="" getter="" default="0.75">
			The JPEG quality to use when writing a video to an AVI file, between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger file sizes. Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.9[/code]. Even at quality [code]1.0[/code], JPEG compression remains lossy.
			[b]Note:[/b] This does not affect the audio quality or writing PNG image sequences.
		</member>
		<


member name="rendering/2d/snap/snap_2d_transforms_to_pixel" type="bool" setter="" getter="" default="false">
			If [code]true[/code], [CanvasItem] nodes will internally snap to full pixels. Useful for low-resolution pixel art games. Their position can still be sub-pixel, but the decimals will not have effect as the position is rounded. This can lead to a crisper appearance at the cost of less smooth movement, especially when [Camera2D] smoothing is enabled.
			[b]Note:[/b] This property is only read when the project starts. To toggle 2D transform snapping at runtime, use [method RenderingServer.viewport_set_snap_2d_transforms_to_pixel] on the root [Viewport] instead.
			[b]Note:[/b] [Control] nodes are snapped to the nearest pixel by default. This is controlled by [member gui/common/snap_controls_to_pixels].
			[b]Note:[/b] It is not recommended to use this setting together with [member rendering/2d/snap/snap_2d_vertices_to_pixel], as movement may appear even less smooth. Prefer only enabling this setting instead.
		</member>
		<member name="rendering/2d/snap/snap_2d_vertices_to_pixel" type="bool" setter="" getter="" default="false">
			If [code]true[/code], vertices of [CanvasItem] nodes will snap to full pixels. Useful for low-resolution pixel art games. Only affects the final vertex positions, not the transforms. This can lead to a crisper appearance at the cost of less smooth movement, especially when [Camera2D] smoothing is enabled.
			[b]Note:[/b] This property is only read when the project starts. To toggle 2D vertex snapping at runtime, use [method RenderingServer.viewport_set_snap_2d_vertices_to_pixel] on the root [Viewport] instead.
			[b]Note:[/b] [Control] nodes are snapped to the nearest pixel by default. This is controlled by [member gui/common/snap_controls_to_pixels].
			[b]Note:[/b] It is not recommended to use this setting together with [member rendering/2d/snap/snap_2d_transforms_to_pixel], as movement may appear even less smooth. Prefer only enabling that setting instead.
		</member>
		<member name="rendering/anti_aliasing/quality/msaa_2d" type="int" setter="" getter="" default="0">
			Sets the number of multisample antialiasing (MSAA) samples to use for 2D/Canvas rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. This has no effect on shader-induced aliasing or texture aliasing.
			[b]Note:[/b] MSAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
			[b]Note:[/b] This property is only read when the project starts. To set the number of 2D MSAA samples at runtime, set [member Viewport.msaa_2d] or use [method RenderingServer.viewport_set_msaa_2d].
		</member>
		<member name="rendering/anti_aliasing/quality/msaa_3d" type="int" setter="" getter="" default="0">
			Sets the number of multisample antialiasing (MSAA) samples to use for 3D rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. See also [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive. This has no effect on shader-induced aliasing or texture aliasing.
			[b]Note:[/b] This property is only read when the project starts. To set the number of 3D MSAA samples at runtime, set [member Viewport.msaa_3d] or use [method RenderingServer.viewport_set_msaa_3d].
		</member>
		<member name="rendering/anti_aliasing/quality/screen_space_aa" type="int" setter="" getter="" default="0">
			Sets the screen-space antialiasing mode for the default screen [Viewport]. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry. The blurriness is partially counteracted by automatically using a negative mipmap LOD bias (see [member rendering/textures/default_filters/texture_mipmap_bias]).
			Another way to combat specular aliasing is to enable [member rendering/anti_aliasing/screen_space_roughness_limiter/enabled].
			[b]Note:[/b] Screen-space antialiasing is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
			[b]Note:[/b] This property is only read when the project starts. To set the screen-space antialiasing mode at runtime, set [member Viewport.screen_space_aa] on the root [Viewport] instead, or use [method RenderingServer.viewport_set_screen_space_aa].
		</member>
		<member name="rendering/anti_aliasing/quality/use_debanding" type="bool" setter="" getter="" default="false">
			If [code]true[/code], uses a fast post-processing filter to make banding significantly less visible in 3D. 2D rendering is [i]not[/i] affected by debanding unless the [member Environment.background_mode] is [constant Environment.BG_CANVAS].
			In some cases, debanding may introduce a slightly noticeable dithering pattern. It's recommended to enable debanding only when actually needed since the dithering pattern will make lossless-compressed screenshots larger.
			[b]Note:[/b] This property is only read when the project starts. To set debanding at runtime, set [member Viewport.use_debanding] on the root [Viewport] instead, or use [method RenderingServer.viewport_set_use_debanding].
		</member>
		<member name="rendering/anti_aliasing/quality/use_taa" type="bool" setter="" getter="" default="false">
			Enables temporal antialiasing for the default screen [Viewport]. TAA works by jittering the camera and accumulating the images of the last rendered frames, motion vector rendering is used to account for camera and object motion. Enabling TAA can make the image blurrier, which is partially counteracted by automatically using a negative mipmap LOD bias (see [member rendering/textures/default_filters/texture_mipmap_bias]).
			[b]Note:[/b] The implementation is not complete yet. Some visual instances such as particles and skinned meshes may show ghosting artifacts in motion.
			[b]Note:[/b] TAA is only supported in the Forward+ rendering method, not Mobile or Compatibility.
			[b]Note:[/b] This property is only read when the project starts. To set TAA at runtime, set [member Viewport.use_taa] on the root [Viewport] instead, or use [method RenderingServer.viewport_set_use_taa].
		</member>
		<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.25">
			[b]Note:[/b] This property is only read when the project starts. To control the screen-space roughness limiter at runtime, call [method RenderingServer.screen_space_roughness_limiter_set_active] instead.
		</member>
		<member name="rendering/anti_aliasing/screen_space_roughness_limiter/enabled" type="bool" setter="" getter="" default="true">
			If [code]true[/code], enables a spatial filter to limit roughness in areas with high-frequency detail. This can help reduce specular aliasing to an extent, though not as much as enabling [member rendering/anti_aliasing/quality/use_taa]. This filter has a small performance cost, so consider disabling it if it doesn't benefit your scene noticeably.
			[b]Note:[/b] The screen-space roughness limiter is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
			[b]Note:[/b] This property is only read when the project starts. To control the screen-space roughness limiter at runtime, call [method RenderingServer.screen_space_roughness_limiter_set_active] instead.
		</member>
		<


<?xml version="1.0" encoding="UTF-8" ?>
<class name="CanvasLayer" inherits="Node" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A node used for independent rendering of objects within a 2D scene.
	</brief_description>
	<description>
		[CanvasItem]-derived nodes that are direct or indirect children of a [CanvasLayer] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index [code]0[/code], so a [CanvasLayer] with index [code]-1[/code] will be drawn below, and a [CanvasLayer] with index [code]1[/code] will be drawn above. This order will hold regardless of the [member CanvasItem.z_index] of the nodes within each layer.
		[CanvasLayer]s can be hidden and they can also optionally follow the viewport. This makes them useful for HUDs like health bar overlays (on layers [code]1[/code] and higher) or backgrounds (on layers [code]-1[/code] and lower).
		[b]Note:[/b] Embedded [Window]s are placed on layer [code]1024[/code]. [CanvasItem]s on layers [code]1025[/code] and higher appear in front of embedded windows.
		[b]Note:[/b] Each [CanvasLayer] is drawn on one specific [Viewport] and cannot be shared between multiple [Viewport]s, see [member custom_viewport]. When using multiple [Viewport]s, for example in a split-screen game, you need create an individual [CanvasLayer] for each [Viewport] you want it to be drawn on.
	</description>
	<tutorials>
		<link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
		<link title="Canvas layers">$DOCS_URL/tutorials/2d/canvas_layers.html</link>
		<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/2712</link>
	</tutorials>
	<methods>
		<method name="get_canvas" qualifiers="const">
			<return type="RID" />
			<description>
				Returns the RID of the canvas used by this layer.
			</description>
		</method>
		<method name="get_final_transform" qualifiers="const">
			<return type="Transform2D" />
			<description>
				Returns the transform from the [CanvasLayer]s coordinate system to the [Viewport]s coordinate system.
			</description>
		</method>
		<method name="hide">
			<return type="void" />
			<description>
				Hides any [CanvasItem] under this [CanvasLayer]. This is equivalent to setting [member visible] to [code]false[/code].
			</description>
		</method>
		<method name="show">
			<return type="void" />
			<description>
				Shows any [CanvasItem] under this [CanvasLayer]. This is equivalent to setting [member visible] to [code]true[/code].
			</description>
		</method>
	</methods>
	<members>
		<member name="custom_viewport" type="Node" setter="set_custom_viewport" getter="get_custom_viewport">
			The custom [Viewport] node assigned to the [CanvasLayer]. If [code]null[/code], uses the default viewport instead.
		</member>
		<member name="follow_viewport_enabled" type="bool" setter="set_follow_viewport" getter="is_following_viewport" default="false">
			If enabled, the [CanvasLayer] will use the viewport's transform, so it will move when camera moves instead of being anchored in a fixed position on the screen.
			Together with [member follow_viewport_scale] it can be used for a pseudo 3D effect.
		</member>
		<member name="follow_viewport_scale" type="float" setter="set_follow_viewport_scale" getter="get_follow_viewport_scale" default="1.0">
			Scales the layer when using [member follow_viewport_enabled]. Layers moving into the foreground should have increasing scales, while layers moving into the background should have decreasing scales.
		</member>
		<member name="layer" type="int" setter="set_layer" getter="get_layer" default="1">
			Layer index for draw order. Lower values are drawn behind higher values.
			[b]Note:[/b] If multiple CanvasLayers have the same layer index, [CanvasItem] children of one CanvasLayer are drawn behind the [CanvasItem] children of the other CanvasLayer. Which CanvasLayer is drawn in front is non-deterministic.
		</member>
		<member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2(0, 0)">
			The layer's base offset.
		</member>
		<member name="rotation" type="float" setter="set_rotation" getter="get_rotation" default="0.0">
			The layer's rotation in radians.
		</member>
		<member name="scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)">
			The layer's scale.
		</member>
		<member name="transform" type="Transform2D" setter="set_transform" getter="get_transform" default="Transform2D(1, 0, 0, 1, 0, 0)">
			The layer's transform.
		</member>
		<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
			If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be hidden.
			Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't propagated to underlying layers.
		</member>
	</members>
	<signals>
		<signal name="visibility_changed">
			<description>
				Emitted when visibility of the layer is changed. See [member visible].
			</description>
		</signal>
	</signals>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="NodePath" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A pre-parsed scene tree path.
	</brief_description>
	<description>
		The [NodePath] built-in [Variant] type represents a path to a node or property in a hierarchy of nodes. It is designed to be efficiently passed into many built-in methods (such as [method Node.get_node], [method Object.set_indexed], [method Tween.tween_property], etc.) without a hard dependence on the node or property they point to.
		A node path is represented as a [String] composed of slash-separated ([code]/[/code]) node names and colon-separated ([code]:[/code]) property names (also called "subnames"). Similar to a filesystem path, [code]".."[/code] and [code]"."[/code] are special node names. They refer to the parent node and the current node, respectively.
		The following examples are paths relative to the current node:
		[codeblock]
		^"A"     # Points to the direct child A.
		^"A/B"   # Points to A's child B.
		^"."     # Points to the current node.
		^".."    # Points to the parent node.
		^"../C"  # Points to the sibling node C.
		^"../.." # Points to the grandparent node.
		[/codeblock]
		A leading slash means the path is absolute, and begins from the [SceneTree]:
		[codeblock]
		^"/root"            # Points to the SceneTree's root Window.
		^"/root/Title"      # May point to the main scene's root node named "Title".
		^"/root/Global"     # May point to an autoloaded node or scene named "Global".
		[/codeblock]
		Despite their name, node paths may also point to a property:
		[codeblock]
		^":position"           # Points to this object's position.
		^":position:x"         # Points to this object's position in the x axis.
		^"Camera3D:rotation:y" # Points to the child Camera3D and its y rotation.
		^"/root:size:x"        # Points to the root Window and its width.
		[/codeblock]
		In some situations, it's possible to omit the leading [code]:[/code] when pointing to an object's property. As an example, this is the case with [method Object.set_indexed] and [method Tween.tween_property], as those methods call [method NodePath.get_as_property_path] under the hood. However, it's generally recommended to keep the [code]:[/code] prefix.
		Node paths cannot check whether they are valid and may point to nodes or properties that do not exist. Their meaning depends entirely on the context in which they're used.
		You usually do not have to worry about the [NodePath] type, as strings are automatically converted to the type when necessary. There are still times when defining node paths is useful. For example, exported [NodePath] properties allow you to easily select any node within the currently edited scene. They are also automatically updated when moving, renaming or deleting nodes in the scene tree editor. See also [annotation @GDScript.@export_node_path].
		See also [StringName], which is a similar type designed for optimized strings.
		[b]Note:[/b] In a boolean context, a [NodePath] will evaluate to [code]false[/code] if it is empty ([code]NodePath("")[/code]). Otherwise, a [NodePath] will always evaluate to [code]true[/code].
	</description>
	<tutorials>
		<link title="2D Role Playing Game (RPG) Demo">https://godotengine.org/asset-library/asset/2729</link>
	</tutorials>
	<constructors>
		<constructor name="NodePath">
			<return type="NodePath" />
			<description>
				Constructs an empty [NodePath].
			</description>
		</constructor>
		<constructor name="NodePath">
			<return type="NodePath" />
			<param index="0" name="from" type="NodePath" />
			<description>
				Constructs a [NodePath] as a copy of the given [NodePath].
			</description>
		</constructor>
		<constructor name="NodePath">
			<return type="NodePath" />
			<param index="0" name="from" type="String" />
			<description>
				Constructs a [NodePath] from a [String]. The created path is absolute if prefixed with a slash (see [method is_absolute]).
				The "subnames" optionally included after the path to the target node can point to properties, and can also be nested.
				Examples of strings that could be node paths:
				[codeblock]
				# Points to the Sprite2D node.
				"Level/RigidBody2D/Sprite2D"

				# Points to the Sprite2D node and its "texture" resource.
				# get_node() would retrieve the Sprite2D, while get_node_and_resource()
				# would retrieve both the Sprite2D node and the "texture" resource.
				"Level/RigidBody2D/Sprite2D:texture"

				# Points to the Sprite2D node and its "position" property.
				"Level/RigidBody2D/Sprite2D:position"

				# Points to the Sprite2D node and the "x" component of its "position" property.
				"Level/RigidBody2D/Sprite2D:position:x"

				# Points to the RigidBody2D node as an absolute path beginning from the SceneTree.
				"/root/Level/RigidBody2D"
				[/codeblock]
				[b]Note:[/b] In GDScript, it's also possible to convert a constant string into a node path by prefixing it with [code]^[/code]. [code]^"path/to/node"[/code] is equivalent to [code]NodePath("path/to/node")[/code].
			</description>
		</constructor>
	</constructors>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="Container" inherits="Control" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Base class for all GUI containers.
	</brief_description>
	<description>
		Base class for all GUI containers. A [Container] automatically arranges its child controls in a certain way. This class can be inherited to make custom container types.
	</description>
	<tutorials>
		<link title="Using Containers">$DOCS_URL/tutorials/ui/gui_containers.html</link>
	</tutorials>
	<methods>
		<method name="_get_allowed_size_flags_horizontal" qualifiers="virtual const">
			<return type="PackedInt32Array" />
			<description>
				Implement to return a list of allowed horizontal [enum Control.SizeFlags] for child nodes. This doesn't technically prevent the usages of any other size flags, if your implementation requires that. This only limits the options available to the user in the Inspector dock.
				[b]Note:[/b] Having no size flags is equal to having [constant Control.SIZE_SHRINK_BEGIN]. As such, this value is always implicitly allowed.
			</description>
		</method>
		<method name="_get_allowed_size_flags_vertical" qualifiers="virtual const">
			<return type="PackedInt32Array" />
			<description>
				Implement to return a list of allowed vertical [enum Control.SizeFlags] for child nodes. This doesn't technically prevent the usages of any other size flags, if your implementation requires that. This only limits the options available to the user in the Inspector dock.
				[b]Note:[/b] Having no size flags is equal to having [constant Control.SIZE_SHRINK_BEGIN]. As such, this value is always implicitly allowed.
			</description>
		</method>
		<method name="fit_child_in_rect">
			<return type="void" />
			<param index="0" name="child" type="Control" />
			<param index="1" name="rect" type="Rect2" />
			<description>
				Fit a child control in a given rect. This is mainly a helper for creating custom container classes.
			</description>
		</method>
		<method name="queue_sort">
			<return type="void" />
			<description>
				Queue resort of the contained children. This is called automatically anyway, but can be called upon request.
			</description>
		</method>
	</methods>
	<members>
		<member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" overrides="Control" enum="Control.MouseFilter" default="1" />
	</members>
	<signals>
		<signal name="pre_sort_children">
			<description>
				Emitted when children are going to be sorted.
			</description>
		</signal>
		<signal name="sort_children">
			<description>
				Emitted when sorting the children is needed.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="NOTIFICATION_PRE_SORT_CHILDREN" value="50">
			Notification just before children are going to be sorted, in case there's something to process beforehand.
		</constant>
		<constant name="NOTIFICATION_SORT_CHILDREN" value="51">
			Notification for when sorting the children, it must be obeyed immediately.
		</constant>
	</constants>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="ImageTexture" inherits="Texture2D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A [Texture2D] based on an [Image].
	</brief_description>
	<description>
		A [Texture2D] based on an [Image]. For an image to be displayed, an [ImageTexture] has to be created from it using the [method create_from_image] method:
		[codeblock]
		var image = Image.load_from_file("res://icon.svg")
		var texture = ImageTexture.create_from_image(image)
		$Sprite2D.texture = texture
		[/codeblock]
		This way, textures can be created at run-time by loading images both from within the editor and externally.
		[b]Warning:[/b] Prefer to load imported textures with [method @GDScript.load] over loading them from within the filesystem dynamically with [method Image.load], as it may not work in exported projects:
		[codeblock]
		var texture = load("res://icon.svg")
		$Sprite2D.texture = texture
		[/codeblock]
		This is because images have to be imported as a [CompressedTexture2D] first to be loaded with [method @GDScript.load]. If you'd still like to load an image file just like any other [Resource], import it as an [Image] resource instead, and then load it normally using the [method @GDScript.load] method.
		[b]Note:[/b] The image can be retrieved from an imported texture using the [method Texture2D.get_image] method, which returns a copy of the image:
		[codeblock]
		var texture = load("res://icon.svg")
		var image: Image = texture.get_image()
		[/codeblock]
		An [ImageTexture] is not meant to be operated from within the editor interface directly, and is mostly useful for rendering images on screen dynamically via code. If you need to generate images procedurally from within the editor, consider saving and importing images as custom texture resources implementing a new [EditorImportPlugin].
		[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations.
	</description>
	<tutorials>
		<link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link>
	</tutorials>
	<methods>
		<method name="create_from_image" qualifiers="static">
			<return type="ImageTexture" />
			<param index="0" name="image" type="Image" />
			<description>
				Creates a new [ImageTexture] and initializes it by allocating and setting the data from an [Image].
			</description>
		</method>
		<method name="get_format" qualifiers="const">
			<return type="int" enum="Image.Format" />
			<description>
				Returns the format of the texture, one of [enum Image.Format].
			</description>
		</method>
		<method name="set_image">
			<return type="void" />
			<param index="0" name="image" type="Image" />
			<description>
				Replaces the texture's data with a new [Image]. This will re-allocate new memory for the texture.
				If you want to update the image, but don't need to change its parameters (format, size), use [method update] instead for better performance.
			</description>
		</method>
		<method name="set_size_override">
			<return type="void" />
			<param index="0" name="size" type="Vector2i" />
			<description>
				Resizes the texture to the specified dimensions.
			</description>
		</method>
		<method name="update">
			<return type="void" />
			<param index="0" name="image" type="Image" />
			<description>
				Replaces the texture's data with a new [Image].
				[b]Note:[/b] The texture has to be created using [method create_from_image] or initialized first with the [method set_image] method before it can be updated. The new image dimensions, format, and mipmaps configuration should match the existing texture's image configuration.
				Use this method over [method set_image] if you need to update the texture frequently, which is faster than allocating additional memory for a new texture each time.
			</description>
		</method>
	</methods>
	<members>
		<member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" overrides="Resource" default="false" />
	</members>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="SeparationRayShape3D" inherits="Shape3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A 3D ray shape used for physics collision that tries to separate itself from any collider.
	</brief_description>
	<description>
		A 3D ray shape, intended for use in physics. Usually used to provide a shape for a [CollisionShape3D]. When a [SeparationRayShape3D] collides with an object, it tries to separate itself from it by moving its endpoint to the collision point. For example, a [SeparationRayShape3D] next to a character can allow it to instantly move up when touching stairs.
	</description>
	<tutorials>
	</tutorials>
	<members>
		<member name="length" type="float" setter="set_length" getter="get_length" default="1.0">
			The ray's length.
		</member>
		<member name="slide_on_slope" type="bool" setter="set_slide_on_slope" getter="get_slide_on_slope" default="false">
			If [code]false[/code] (default), the shape always separates and returns a normal along its own direction.
			If [code]true[/code], the shape can return the correct normal and separate in any direction, allowing sliding motion on slopes.
		</member>
	</members>
</class>


<brief_description>
		Texture for 2D and 3D.
	</brief_description>
	<description>
		A texture works by registering an image in the video hardware, which then can be used in 3D models or 2D [Sprite2D] or GUI [Control].
		Textures are often created by loading them from a file. See [method @GDScript.load].
		[Texture2D] is a base for other resources. It cannot be used directly.
		[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations. Larger textures may fail to import.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="_draw" qualifiers="virtual const">
			<return type="void" />
			<param index="0" name="to_canvas_item" type="RID" />
			<param index="1" name="pos" type="Vector2" />
			<param index="2" name="modulate" type="Color" />
			<param index="3" name="transpose" type="bool" />
			<description>
				Called when the entire [Texture2D] is requested to be drawn over a [CanvasItem], with the top-left offset specified in [param pos]. [param modulate] specifies a multiplier for the colors being drawn, while [param transpose] specifies whether drawing should be performed in column-major order instead of row-major order (resulting in 90-degree clockwise rotation).
				[b]Note:[/b] This is only used in 2D rendering, not 3D.
			</description>
		</method>
		<method name="_draw_rect" qualifiers="virtual const">
			<return type="void" />
			<param index="0" name="to_canvas_item" type="RID" />
			<param index="1" name="rect" type="Rect2" />
			<param index="2" name="tile" type="bool" />
			<param index="3" name="modulate" type="Color" />
			<param index="4" name="transpose" type="bool" />
			<description>
				Called when the [Texture2D] is requested to be drawn onto [CanvasItem]'s specified [param rect]. [param modulate] specifies a multiplier for the colors being drawn, while [param transpose] specifies whether drawing should be performed in column-major order instead of row-major order (resulting in 90-degree clockwise rotation).
				[b]Note:[/b] This is only used in 2D rendering, not 3D.
			</description>
		</method>
		<method name="_draw_rect_region" qualifiers="virtual const">
			<return type="void" />
			<param index="0" name="to_canvas_item" type="RID" />
			<param index="1" name="rect" type="Rect2" />
			<param index="2" name="src_rect" type="Rect2" />
			<param index="3" name="modulate" type="Color" />
			<param index="4" name="transpose" type="bool" />
			<param index="5" name="clip_uv" type="bool" />
			<description>
				Called when a part of the [Texture2D] specified by [param src_rect]'s coordinates is requested to be drawn onto [CanvasItem]'s specified [param rect]. [param modulate] specifies a multiplier for the colors being drawn, while [param transpose] specifies whether drawing should be performed in column-major order instead of row-major order (resulting in 90-degree clockwise rotation).
				[b]Note:[/b] This is only used in 2D rendering, not 3D.
			</description>
		</method>
		<method name="_get_height" qualifiers="virtual const">
			<return type="int" />
			<description>
				Called when the [Texture2D]'s height is queried.
			</description>
		</method>
		<method name="_get_width" qualifiers="virtual const">
			<return type="int" />
			<description>
				Called when the [Texture2D]'s width is queried.
			</description>
		</method>
		<method name="_has_alpha" qualifiers="virtual const">
			<return type="bool" />
			<description>
				Called when the presence of an alpha channel in the [Texture2D] is queried.
			</description>
		</method>
		<method name="_is_pixel_opaque" qualifiers="virtual const">
			<return type="bool" />
			<param index="0" name="x" type="int" />
			<param index="1" name="y" type="int" />
			<description>
				Called when a pixel's opaque state in the [Texture2D] is queried at the specified [code](x, y)[/code] position.
			</description>
		</method>
		<method name="create_placeholder" qualifiers="const">
			<return type="Resource" />
			<description>
				Creates a placeholder version of this resource ([PlaceholderTexture2D]).
			</description>
		</method>
		<method name="draw" qualifiers="const">
			<return type="void" />
			<param index="0" name="canvas_item" type="RID" />
			<param index="1" name="position" type="Vector2" />
			<param index="2" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
			<param index="3" name="transpose" type="bool" default="false" />
			<description>
				Draws the texture using a [CanvasItem] with the [RenderingServer] API at the specified [param position].
			</description>
		</method>
		<method name="draw_rect" qualifiers="const">
			<return type="void" />
			<param index="0" name="canvas_item" type="RID" />
			<param index="1" name="rect" type="Rect2" />
			<param index="2" name="tile" type="bool" />
			<param index="3" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
			<param index="4" name="transpose" type="bool" default="false" />
			<description>
				Draws the texture using a [CanvasItem] with the [RenderingServer] API.
			</description>
		</method>
		<method name="draw_rect_region" qualifiers="const">
			<return type="void" />
			<param index="0" name="canvas_item" type="RID" />
			<param index="1" name="rect" type="Rect2" />
			<param index="2" name="src_rect" type="Rect2" />
			<param index="3" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
			<param index="4" name="transpose" type="bool" default="false" />
			<param index="5" name="clip_uv" type="bool" default="true" />
			<description>
				Draws a part of the texture using a [CanvasItem] with the [RenderingServer] API.
			</description>
		</method>
		<method name="get_height" qualifiers="const">
			<return type="int" />
			<description>
				Returns the texture height in pixels.
			</description>
		</method>
		<method name="get_image" qualifiers="const">
			<return type="Image" />
			<description>
				Returns an [Image] that is a copy of data from this [Texture2D] (a new [Image] is created each time). [Image]s can be accessed and manipulated directly.
				[b]Note:[/b] This will return [code]null[/code] if this [Texture2D] is invalid.
				[b]Note:[/b] This will fetch the texture data from the GPU, which might cause performance problems when overused.
			</description>
		</method>
		<method name="get_size" qualifiers="const">
			<return type="Vector2" />
			<description>
				Returns the texture size in pixels.
			</description>
		</method>
		<method name="get_width" qualifiers="const">
			<return type="int" />
			<description>
				Returns the texture width in pixels.
			</description>
		</method>
		<method name="has_alpha" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this [Texture2D] has an alpha channel.
			</description>
		</method>
	</methods>
<


<?xml version="1.0" encoding="UTF-8" ?>
<class name="PackedByteArray" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A packed array of bytes.
	</brief_description>
	<description>
		An array specifically designed to hold bytes. Packs data tightly, so it saves memory for large array sizes.
		[PackedByteArray] also provides methods to encode/decode various types to/from bytes. The way values are encoded is an implementation detail and shouldn't be relied upon when interacting with external apps.
		[b]Note:[/b] Packed arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use [method duplicate]. This is [i]not[/i] the case for built-in properties and methods. The returned packed array of these are a copies, and changing it will [i]not[/i] affect the original value. To update a built-in property you need to modify the returned array, and then assign it to the property again.
	</description>
	<tutorials>
	</tutorials>
	<constructors>
		<constructor name="PackedByteArray">
			<return type="PackedByteArray" />
			<description>
				Constructs an empty [PackedByteArray].
			</description>
		</constructor>
		<constructor name="PackedByteArray">
			<return type="PackedByteArray" />
			<param index="0" name="from" type="PackedByteArray" />
			<description>
				Constructs a [PackedByteArray] as a copy of the given [PackedByteArray].
			</description>
		</constructor>
		<constructor name="PackedByteArray">
			<return type="PackedByteArray" />
			<param index="0" name="from" type="Array" />
			<description>
				Constructs a new [PackedByteArray]. Optionally, you can pass in a generic [Array] that will be converted.
			</description>
		</constructor>
	</constructors>


<method name="fill">
			<return type="void" />
			<param index="0" name="value" type="int" />
			<description>
				Assigns the given value to all elements in the array. This can typically be used together with [method resize] to create an array with a given size and initialized elements.
			</description>
		</method>
		<method name="find" qualifiers="const">
			<return type="int" />
			<param index="0" name="value" type="int" />
			<param index="1" name="from" type="int" default="0" />
			<description>
				Searches the array for a value and returns its index or [code]-1[/code] if not found. Optionally, the initial search index can be passed.
			</description>
		</method>
		<method name="get" qualifiers="const">
			<return type="int" />
			<param index="0" name="index" type="int" />
			<description>
				Returns the byte at the given [param index] in the array. This is the same as using the [code][][/code] operator ([code]array[index][/code]).
			</description>
		</method>
		<method name="get_string_from_ascii" qualifiers="const">
			<return type="String" />
			<description>
				Converts ASCII/Latin-1 encoded array to [String]. Fast alternative to [method get_string_from_utf8] if the content is ASCII/Latin-1 only. Unlike the UTF-8 function this function maps every byte to a character in the array. Multibyte sequences will not be interpreted correctly. For parsing user input always use [method get_string_from_utf8]. This is the inverse of [method String.to_ascii_buffer].
			</description>
		</method>
		<method name="get_string_from_utf8" qualifiers="const">
			<return type="String" />
			<description>
				Converts UTF-8 encoded array to [String]. Slower than [method get_string_from_ascii] but supports UTF-8 encoded data. Use this function if you are unsure about the source of the data. For user input this function should always be preferred. Returns empty string if source array is not valid UTF-8 string. This is the inverse of [method String.to_utf8_buffer].
			</description>
		</method>
		<method name="get_string_from_utf16" qualifiers="const">
			<return type="String" />
			<description>
				Converts UTF-16 encoded array to [String]. If the BOM is missing, system endianness is assumed. Returns empty string if source array is not valid UTF-16 string. This is the inverse of [method String.to_utf16_buffer].
			</description>
		</method>
		<method name="get_string_from_utf32" qualifiers="const">
			<return type="String" />
			<description>
				Converts UTF-32 encoded array to [String]. System endianness is assumed. Returns empty string if source array is not valid UTF-32 string. This is the inverse of [method String.to_utf32_buffer].
			</description>
		</method>
		<method name="get_string_from_wchar" qualifiers="const">
			<return type="String" />
			<description>
				Converts wide character ([code]wchar_t[/code], UTF-16 on Windows, UTF-32 on other platforms) encoded array to [String]. Returns empty string if source array is not valid wide string. This is the inverse of [method String.to_wchar_buffer].
			</description>
		</method>
		<method name="has" qualifiers="const">
			<return type="bool" />
			<param index="0" name="value" type="int" />
			<description>
				Returns [code]true[/code] if the array contains [param value].
			</description>
		</method>
		<method name="has_encoded_var" qualifiers="const">
			<return type="bool" />
			<param index="0" name="byte_offset" type="int" />
			<param index="1" name="allow_objects" type="bool" default="false" />
			<description>
				Returns [code]true[/code] if a valid [Variant] value can be decoded at the [param byte_offset]. Returns [code]false[/code] otherwise or when the value is [Object]-derived and [param allow_objects] is [code]false[/code].
			</description>
		</method>
		<method name="hex_encode" qualifiers="const">
			<return type="String" />
			<description>
				Returns a hexadecimal representation of this array as a [String].
				[codeblocks]
				[gdscript]
				var array = PackedByteArray([11, 46, 255])
				print(array.hex_encode()) # Prints: 0b2eff
				[/gdscript]
				[csharp]
				var array = new byte[] {11, 46, 255};
				GD.Print(array.HexEncode()); // Prints: 0b2eff
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="insert">
			<return type="int" />
			<param index="0" name="at_index" type="int" />
			<param index="1" name="value" type="int" />
			<description>
				Inserts a new element at a given position in the array. The position must be valid, or at the end of the array ([code]idx == size()[/code]).
			</description>
		</method>
		<method name="is_empty" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the array is empty.
			</description>
		</method>
		<method name="push_back">
			<return type="bool" />
			<param index="0" name="value" type="int" />
			<description>
				Appends an element at the end of the array.
			</description>
		</method>
		<method name="remove_at">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<description>
				Removes an element from the array by index.
			</description>
		</method>
		<method name="resize">
			<return type="int" />
			<param index="0" name="new_size" type="int" />
			<description>
				Sets the size of the array. If the array is grown, reserves elements at the end of the array. If the array is shrunk, truncates the array to the new size. Calling [method resize] once and assigning the new values is faster than adding new elements one by one.
			</description>
		</method>
		<method name="reverse">
			<return type="void" />
			<description>
				Reverses the order of the elements in the array.
			</description>
		</method>
		<method name="rfind" qualifiers="const">
			<return type="int" />
			<param index="0" name="value" type="int" />
			<param index="1" name="from" type="int" default="-1" />
			<description>
				Searches the array in reverse order. Optionally, a start search index can be passed. If negative, the start index is considered relative to the end of the array.
			</description>
		</method>
		<method name="set">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<param index="1" name="value" type="int" />
			<description>
				Changes the byte at the given index.
			</description>
		</method>
		<method name="size" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of elements in the array.
			</description>
		</method>


<method name="get_singleton" qualifiers="const">
			<return type="Object" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns the global singleton with the given [param name], or [code]null[/code] if it does not exist. Often used for plugins. See also [method has_singleton] and [method get_singleton_list].
				[b]Note:[/b] Global singletons are not the same as autoloaded nodes, which are configurable in the project settings.
			</description>
		</method>
		<method name="get_singleton_list" qualifiers="const">
			<return type="PackedStringArray" />
			<description>
				Returns a list of names of all available global singletons. See also [method get_singleton].
			</description>
		</method>
		<method name="get_version_info" qualifiers="const">
			<return type="Dictionary" />
			<description>
				Returns the current engine version information as a [Dictionary] containing the following entries:
				- [code]major[/code] - Major version number as an int;
				- [code]minor[/code] - Minor version number as an int;
				- [code]patch[/code] - Patch version number as an int;
				- [code]hex[/code] - Full version encoded as a hexadecimal int with one byte (2 hex digits) per number (see example below);
				- [code]status[/code] - Status (such as "beta", "rc1", "rc2", "stable", etc.) as a String;
				- [code]build[/code] - Build name (e.g. "custom_build") as a String;
				- [code]hash[/code] - Full Git commit hash as a String;
				- [code]timestamp[/code] - Holds the Git commit date UNIX timestamp in seconds as an int, or [code]0[/code] if unavailable;
				- [code]string[/code] - [code]major[/code], [code]minor[/code], [code]patch[/code], [code]status[/code], and [code]build[/code] in a single String.
				The [code]hex[/code] value is encoded as follows, from left to right: one byte for the major, one byte for the minor, one byte for the patch version. For example, "3.1.12" would be [code]0x03010C[/code].
				[b]Note:[/b] The [code]hex[/code] value is still an [int] internally, and printing it will give you its decimal representation, which is not particularly meaningful. Use hexadecimal literals for quick version comparisons from code:
				[codeblocks]
				[gdscript]
				if Engine.get_version_info().hex >= 0x040100:
				    pass # Do things specific to version 4.1 or later.
				else:
				    pass # Do things specific to versions before 4.1.
				[/gdscript]
				[csharp]
				if ((int)Engine.GetVersionInfo()["hex"] >= 0x040100)
				{
				    // Do things specific to version 4.1 or later.
				}
				else
				{
				    // Do things specific to versions before 4.1.
				}
				[/csharp]
				[/codeblocks]
			</description>
		</method>
		<method name="get_write_movie_path" qualifiers="const">
			<return type="String" />
			<description>
				Returns the path to the [MovieWriter]'s output file, or an empty string if the engine wasn't started in Movie Maker mode. The default path can be changed in [member ProjectSettings.editor/movie_writer/movie_file].
			</description>
		</method>
		<method name="has_singleton" qualifiers="const">
			<return type="bool" />
			<param index="0" name="name" type="StringName" />
			<description>
				Returns [code]true[/code] if a singleton with the given [param name] exists in the global scope. See also [method get_singleton].
				[codeblocks]
				[gdscript]
				print(Engine.has_singleton("OS"))          # Prints true
				print(Engine.has_singleton("Engine"))      # Prints true
				print(Engine.has_singleton("AudioServer")) # Prints true
				print(Engine.has_singleton("Unknown"))     # Prints false
				[/gdscript]
				[csharp]
				GD.Print(Engine.HasSingleton("OS"));          // Prints true
				GD.Print(Engine.HasSingleton("Engine"));      // Prints true
				GD.Print(Engine.HasSingleton("AudioServer")); // Prints true
				GD.Print(Engine.HasSingleton("Unknown"));     // Prints false
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] Global singletons are not the same as autoloaded nodes, which are configurable in the project settings.
			</description>
		</method>
		<method name="is_editor_hint" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the script is currently running inside the editor, otherwise returns [code]false[/code]. This is useful for [code]@tool[/code] scripts to conditionally draw editor helpers, or prevent accidentally running "game" code that would affect the scene state while in the editor:
				[codeblocks]
				[gdscript]
				if Engine.is_editor_hint():
				    draw_gizmos()
				else:
				    simulate_physics()
				[/gdscript]
				[csharp]
				if (Engine.IsEditorHint())
				    DrawGizmos();
				else
				    SimulatePhysics();
				[/csharp]
				[/codeblocks]
				See [url=$DOCS_URL/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information.
				[b]Note:[/b] To detect whether the script is running on an editor [i]build[/i] (such as when pressing [kbd]F5[/kbd]), use [method OS.has_feature] with the [code]"editor"[/code] argument instead. [code]OS.has_feature("editor")[/code] evaluate to [code]true[/code] both when the script is running in the editor and when running the project from the editor, but returns [code]false[/code] when run from an exported project.
			</description>
		</method>
		<method name="is_in_physics_frame" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the engine is inside the fixed physics process step of the main loop.
				[codeblock]
				func _enter_tree():
				    # Depending on when the node is added to the tree,
				    # prints either "true" or "false".
				    print(Engine.is_in_physics_frame())

				func _process(delta):
				    print(Engine.is_in_physics_frame()) # Prints false

				func _physics_process(delta):
				    print(Engine.is_in_physics_frame()) # Prints true
				[/codeblock]
			</description>
		</method>
		<method name="register_script_language">
			<return type="int" enum="Error" />
			<param index="0" name="language" type="ScriptLanguage" />
			<description>
				Registers a [ScriptLanguage] instance to be available with [code]ScriptServer[/code].
				Returns:
				- [constant OK] on success;
				- [constant ERR_UNAVAILABLE] if [code]ScriptServer[/code] has reached the limit and cannot register any new language;
				- [constant ERR_ALREADY_EXISTS] if [code]ScriptServer[/code] already contains a language with similar extension/name/type.
			</description>
		</method>
		<method name="register_singleton">
			<return type="void" />
			<param index="0" name="name" type="StringName" />
			<param index="1" name="instance" type="Object" />
			<description>
				Registers the given [Object] [param instance] as a singleton, available globally under [param name]. Useful for plugins.
			</description>
		</method>
		<method name="unregister_script_language">
			<return type="int" enum="Error" />
			<param index="0" name="language" type="ScriptLanguage" />
			<description>
				Unregisters the [ScriptLanguage] instance from [code]ScriptServer[/code].
				Returns:
				- [constant OK] on success;
				- [constant ERR_DOES_NOT_EXIST] if the language is not registered in [code]ScriptServer[/code].
			</description>
		</method>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="Camera3D" inherits="Node3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Camera node, displays from a point of view.
	</brief_description>
	<description>
		[Camera3D] is a special node that displays what is visible from its current location. 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. In other words, a camera just provides 3D display capabilities to a [Viewport], and, without one, a scene registered in that [Viewport] (or higher viewports) can't be displayed.
	</description>
	<tutorials>
		<link title="Third Person Shooter (TPS) Demo">https://godotengine.org/asset-library/asset/2710</link>
	</tutorials>


<method name="unproject_position" qualifiers="const">
			<return type="Vector2" />
			<param index="0" name="world_point" type="Vector3" />
			<description>
				Returns the 2D coordinate in the [Viewport] rectangle that maps to the given 3D point in world space.
				[b]Note:[/b] When using this to position GUI elements over a 3D viewport, use [method is_position_behind] to prevent them from appearing if the 3D point is behind the camera:
				[codeblock]
				# This code block is part of a script that inherits from Node3D.
				# `control` is a reference to a node inheriting from Control.
				control.visible = not get_viewport().get_camera_3d().is_position_behind(global_transform.origin)
				control.position = get_viewport().get_camera_3d().unproject_position(global_transform.origin)
				[/codeblock]
			</description>
		</method>
	</methods>
	<members>
		<member name="attributes" type="CameraAttributes" setter="set_attributes" getter="get_attributes">
			The [CameraAttributes] to use for this camera.
		</member>
		<member name="compositor" type="Compositor" setter="set_compositor" getter="get_compositor">
			The [Compositor] to use for this camera.
		</member>
		<member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="1048575">
			The culling mask that describes which [member VisualInstance3D.layers] are rendered by this camera. By default, all 20 user-visible layers are rendered.
			[b]Note:[/b] Since the [member cull_mask] allows for 32 layers to be stored in total, there are an additional 12 layers that are only used internally by the engine and aren't exposed in the editor. Setting [member cull_mask] using a script allows you to toggle those reserved layers, which can be useful for editor plugins.
			To adjust [member cull_mask] more easily using a script, use [method get_cull_mask_value] and [method set_cull_mask_value].
			[b]Note:[/b] [VoxelGI], SDFGI and [LightmapGI] will always take all layers into account to determine what contributes to global illumination. If this is an issue, set [member GeometryInstance3D.gi_mode] to [constant GeometryInstance3D.GI_MODE_DISABLED] for meshes and [member Light3D.light_bake_mode] to [constant Light3D.BAKE_DISABLED] for lights to exclude them from global illumination.
		</member>
		<member name="current" type="bool" setter="set_current" getter="is_current" default="false">
			If [code]true[/code], the ancestor [Viewport] is currently using this camera.
			If multiple cameras are in the scene, one will always be made current. For example, if two [Camera3D] nodes are present in the scene and only one is current, setting one camera's [member current] to [code]false[/code] will cause the other camera to be made current.
		</member>
		<member name="doppler_tracking" type="int" setter="set_doppler_tracking" getter="get_doppler_tracking" enum="Camera3D.DopplerTracking" default="0">
			If not [constant DOPPLER_TRACKING_DISABLED], this camera will simulate the [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] for objects changed in particular [code]_process[/code] methods. See [enum DopplerTracking] for possible values.
		</member>
		<member name="environment" type="Environment" setter="set_environment" getter="get_environment">
			The [Environment] to use for this camera.
		</member>
		<member name="far" type="float" setter="set_far" getter="get_far" default="4000.0">
			The distance to the far culling boundary for this camera relative to its local Z axis. Higher values allow the camera to see further away, while decreasing [member far] can improve performance if it results in objects being partially or fully culled.
		</member>
		<member name="fov" type="float" setter="set_fov" getter="get_fov" default="75.0">
			The camera's field of view angle (in degrees). Only applicable in perspective mode. Since [member keep_aspect] locks one axis, [member fov] sets the other axis' field of view angle.
			For reference, the default vertical field of view value ([code]75.0[/code]) is equivalent to a horizontal FOV of:
			- ~91.31 degrees in a 4:3 viewport
			- ~101.67 degrees in a 16:10 viewport
			- ~107.51 degrees in a 16:9 viewport
			- ~121.63 degrees in a 21:9 viewport
		</member>
		<member name="frustum_offset" type="Vector2" setter="set_frustum_offset" getter="get_frustum_offset" default="Vector2(0, 0)">
			The camera's frustum offset. This can be changed from the default to create "tilted frustum" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-shearing[/url].
			[b]Note:[/b] Only effective if [member projection] is [constant PROJECTION_FRUSTUM].
		</member>
		<member name="h_offset" type="float" setter="set_h_offset" getter="get_h_offset" default="0.0">
			The horizontal (X) offset of the camera viewport.
		</member>
		<member name="keep_aspect" type="int" setter="set_keep_aspect_mode" getter="get_keep_aspect_mode" enum="Camera3D.KeepAspect" default="1">
			The axis to lock during [member fov]/[member size] adjustments. Can be either [constant KEEP_WIDTH] or [constant KEEP_HEIGHT].
		</member>
		<member name="near" type="float" setter="set_near" getter="get_near" default="0.05">
			The distance to the near culling boundary for this camera relative to its local Z axis. Lower values allow the camera to see objects more up close to its origin, at the cost of lower precision across the [i]entire[/i] range. Values lower than the default can lead to increased Z-fighting.
		</member>
		<member name="projection" type="int" setter="set_projection" getter="get_projection" enum="Camera3D.ProjectionType" default="0">
			The camera's projection mode. In [constant PROJECTION_PERSPECTIVE] mode, objects' Z distance from the camera's local space scales their perceived size.
		</member>
		<member name="size" type="float" setter="set_size" getter="get_size" default="1.0">
			The camera's size in meters measured as the diameter of the width or height, depending on [member keep_aspect]. Only applicable in orthogonal and frustum modes.
		</member>
		<member name="v_offset" type="float" setter="set_v_offset" getter="get_v_offset" default="0.0">
			The vertical (Y) offset of the camera viewport.
		</member>
	</members>


<constants>
		<constant name="PROJECTION_PERSPECTIVE" value="0" enum="ProjectionType">
			Perspective projection. Objects on the screen becomes smaller when they are far away.
		</constant>
		<constant name="PROJECTION_ORTHOGONAL" value="1" enum="ProjectionType">
			Orthogonal projection, also known as orthographic projection. Objects remain the same size on the screen no matter how far away they are.
		</constant>
		<constant name="PROJECTION_FRUSTUM" value="2" enum="ProjectionType">
			Frustum projection. This mode allows adjusting [member frustum_offset] to create "tilted frustum" effects.
		</constant>
		<constant name="KEEP_WIDTH" value="0" enum="KeepAspect">
			Preserves the horizontal aspect ratio; also known as Vert- scaling. This is usually the best option for projects running in portrait mode, as taller aspect ratios will benefit from a wider vertical FOV.
		</constant>
		<constant name="KEEP_HEIGHT" value="1" enum="KeepAspect">
			Preserves the vertical aspect ratio; also known as Hor+ scaling. This is usually the best option for projects running in landscape mode, as wider aspect ratios will automatically benefit from a wider horizontal FOV.
		</constant>
		<constant name="DOPPLER_TRACKING_DISABLED" value="0" enum="DopplerTracking">
			Disables [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] simulation (default).
		</constant>
		<constant name="DOPPLER_TRACKING_IDLE_STEP" value="1" enum="DopplerTracking">
			Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] by tracking positions of objects that are changed in [code]_process[/code]. Changes in the relative velocity of this camera compared to those objects affect how audio is perceived (changing the audio's [member AudioStreamPlayer3D.pitch_scale]).
		</constant>
		<constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2" enum="DopplerTracking">
			Simulate [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] by tracking positions of objects that are changed in [code]_physics_process[/code]. Changes in the relative velocity of this camera compared to those objects affect how audio is perceived (changing the audio's [member AudioStreamPlayer3D.pitch_scale]).
		</constant>
	</constants>
</class>


<?xml version="1.0" encoding="UTF-8" ?>
<class name="Callable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A built-in type representing a method or a standalone function.
	</brief_description>
	<description>
		[Callable] is a built-in [Variant] type that represents a function. It can either be a method within an [Object] instance, or a custom callable used for different purposes (see [method is_custom]). Like all [Variant] types, it can be stored in variables and passed to other functions. It is most commonly used for signal callbacks.
		[codeblocks]
		[gdscript]
		func print_args(arg1, arg2, arg3 = ""):
		    prints(arg1, arg2, arg3)

		func test():
		    var callable = Callable(self, "print_args")
		    callable.call("hello", "world")  # Prints "hello world ".
		    callable.call(Vector2.UP, 42, callable)  # Prints "(0, -1) 42 Node(node.gd)::print_args".
		    callable.call("invalid")  # Invalid call, should have at least 2 arguments.
		[/gdscript]
		[csharp]
		// Default parameter values are not supported.
		public void PrintArgs(Variant arg1, Variant arg2, Variant arg3 = default)
		{
		    GD.PrintS(arg1, arg2, arg3);
		}

		public void Test()
		{
		    // Invalid calls fail silently.
		    Callable callable = new Callable(this, MethodName.PrintArgs);
		    callable.Call("hello", "world"); // Default parameter values are not supported, should have 3 arguments.
		    callable.Call(Vector2.Up, 42, callable); // Prints "(0, -1) 42 Node(Node.cs)::PrintArgs".
		    callable.Call("invalid"); // Invalid call, should have 3 arguments.
		}
		[/csharp]
		[/codeblocks]
		In GDScript, it's possible to create lambda functions within a method. Lambda functions are custom callables that are not associated with an [Object] instance. Optionally, lambda functions can also be named. The name will be displayed in the debugger, or when calling [method get_method].
		[codeblock]
		func _init():
		    var my_lambda = func (message):
		        print(message)

		    # Prints Hello everyone!
		    my_lambda.call("Hello everyone!")

		    # Prints "Attack!", when the button_pressed signal is emitted.
		    button_pressed.connect(func(): print("Attack!"))
		[/codeblock]
		In GDScript, you can access methods and global functions as [Callable]s:
		[codeblock]
		tween.tween_callback(node.queue_free)  # Object methods.
		tween.tween_callback(array.clear)  # Methods of built-in types.
		tween.tween_callback(print.bind("Test"))  # Global functions.
		[/codeblock]
		[b]Note:[/b] [Dictionary] does not support the above due to ambiguity with keys.
		[codeblock]
		var dictionary = {"hello": "world"}

		# This will not work, `clear` is treated as a key.
		tween.tween_callback(dictionary.clear)

		# This will work.
		tween.tween_callback(Callable.create(dictionary, "clear"))
		[/codeblock]
	</description>
	<tutorials>
	</tutorials>
	<constructors>
		<constructor name="Callable">
			<return type="Callable" />
			<description>
				Constructs an empty [Callable], with no object nor method bound.
			</description>
		</constructor>
		<constructor name="Callable">
			<return type="Callable" />
			<param index="0" name="from" type="Callable" />
			<description>
				Constructs a [Callable] as a copy of the given [Callable].
			</description>
		</constructor>
		<constructor name="Callable">
			<return type="Callable" />
			<param index="0" name="object" type="Object" />
			<param index="1" name="method" type="StringName" />
			<description>
				Creates a new [Callable] for the method named [param method] in the specified [param object].
				[b]Note:[/b] For methods of built-in [Variant] types, use [method create] instead.
			</description>
		</constructor>
	</constructors>


<methods>
		<method name="bind" qualifiers="vararg const">
			<return type="Callable" />
			<description>
				Returns a copy of this [Callable] with one or more arguments bound. When called, the bound arguments are passed [i]after[/i] the arguments supplied by [method call]. See also [method unbind].
				[b]Note:[/b] When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
			</description>
		</method>
		<method name="bindv">
			<return type="Callable" />
			<param index="0" name="arguments" type="Array" />
			<description>
				Returns a copy of this [Callable] with one or more arguments bound, reading them from an array. When called, the bound arguments are passed [i]after[/i] the arguments supplied by [method call]. See also [method unbind].
				[b]Note:[/b] When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
			</description>
		</method>
		<method name="call" qualifiers="vararg const">
			<return type="Variant" />
			<description>
				Calls the method represented by this [Callable]. Arguments can be passed and should match the method's signature.
			</description>
		</method>
		<method name="call_deferred" qualifiers="vararg const">
			<return type="void" />
			<description>
				Calls the method represented by this [Callable] in deferred mode, i.e. at the end of the current frame. Arguments can be passed and should match the method's signature.
				[codeblocks]
				[gdscript]
				func _ready():
				    grab_focus.call_deferred()
				[/gdscript]
				[csharp]
				public override void _Ready()
				{
				    Callable.From(GrabFocus).CallDeferred();
				}
				[/csharp]
				[/codeblocks]
				[b]Note:[/b] Deferred calls are processed at idle time. Idle time happens mainly at the end of process and physics frames. In it, deferred calls will be run until there are none left, which means you can defer calls from other deferred calls and they'll still be run in the current idle time cycle. This means you should not call a method deferred from itself (or from a method called by it), as this causes infinite recursion the same way as if you had called the method directly.
				See also [method Object.call_deferred].
			</description>
		</method>
		<method name="callv" qualifiers="const">
			<return type="Variant" />
			<param index="0" name="arguments" type="Array" />
			<description>
				Calls the method represented by this [Callable]. Unlike [method call], this method expects all arguments to be contained inside the [param arguments] [Array].
			</description>
		</method>
		<method name="create" qualifiers="static">
			<return type="Callable" />
			<param index="0" name="variant" type="Variant" />
			<param index="1" name="method" type="StringName" />
			<description>
				Creates a new [Callable] for the method named [param method] in the specified [param variant]. To represent a method of a built-in [Variant] type, a custom callable is used (see [method is_custom]). If [param variant] is [Object], then a standard callable will be created instead.
				[b]Note:[/b] This method is always necessary for the [Dictionary] type, as property syntax is used to access its entries. You may also use this method when [param variant]'s type is not known in advance (for polymorphism).
			</description>
		</method>
		<method name="get_argument_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the total number of arguments this [Callable] should take, including optional arguments. This means that any arguments bound with [method bind] are [i]subtracted[/i] from the result, and any arguments unbound with [method unbind] are [i]added[/i] to the result.
			</description>
		</method>
		<method name="get_bound_arguments" qualifiers="const">
			<return type="Array" />
			<description>
				Return the bound arguments (as long as [method get_bound_arguments_count] is greater than zero), or empty (if [method get_bound_arguments_count] is less than or equal to zero).
			</description>
		</method>
		<method name="get_bound_arguments_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the total amount of arguments bound (or unbound) via successive [method bind] or [method unbind] calls. If the amount of arguments unbound is greater than the ones bound, this function returns a value less than zero.
			</description>
		</method>
		<method name="get_method" qualifiers="const">
			<return type="StringName" />
			<description>
				Returns the name of the method represented by this [Callable]. If the callable is a GDScript lambda function, returns the function's name or [code]"<anonymous lambda>"[/code].
			</description>
		</method>
		<method name="get_object" qualifiers="const">
			<return type="Object" />
			<description>
				Returns the object on which this [Callable] is called.
			</description>
		</method>
		<method name="get_object_id" qualifiers="const">
			<return type="int" />
			<description>
				Returns the ID of this [Callable]'s object (see [method Object.get_instance_id]).
			</description>
		</method>
		<method name="hash" qualifiers="const">
			<return type="int" />
			<description>
				Returns the 32-bit hash value of this [Callable]'s object.
				[b]Note:[/b] [Callable]s with equal content will always produce identical hash values. However, the reverse is not true. Returning identical hash values does [i]not[/i] imply the callables are equal, because different callables can have identical hash values due to hash collisions. The engine uses a 32-bit hash algorithm for [method hash].
			</description>
		</method>
		<method name="is_custom" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this [Callable] is a custom callable. Custom callables are used:
				- for binding/unbinding arguments (see [method bind] and [method unbind]);
				- for representing methods of built-in [Variant] types (see [method create]);
				- for representing global, lambda, and RPC functions in GDScript;
				- for other purposes in the core, GDExtension, and C#.
			</description>
		</method>
		<method name="is_null" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this [Callable] has no target to call the method on. Equivalent to [code]callable == Callable()[/code].
				[b]Note:[/b] This is [i]not[/i] the same as [code]not is_valid()[/code] and using [code]not is_null()[/code] will [i]not[/i] guarantee that this callable can be called. Use [method is_valid] instead.
			</description>
		</method>
		<method name="is_standard" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this [Callable] is a standard callable. This method is the opposite of [method is_custom]. Returns [code]false[/code] if this callable is a lambda function.
			</description>
		</method>
		<method name="is_valid" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the callable's object exists and has a valid method name assigned, or is a custom callable.
			</description>
		</method>


<method name="rpc" qualifiers="vararg const">
			<return type="void" />
			<description>
				Perform an RPC (Remote Procedure Call) on all connected peers. This is used for multiplayer and is normally not available, unless the function being called has been marked as [i]RPC[/i] (using [annotation @GDScript.@rpc] or [method Node.rpc_config]). Calling this method on unsupported functions will result in an error. See [method Node.rpc].
			</description>
		</method>
		<method name="rpc_id" qualifiers="vararg const">
			<return type="void" />
			<param index="0" name="peer_id" type="int" />
			<description>
				Perform an RPC (Remote Procedure Call) on a specific peer ID (see multiplayer documentation for reference). This is used for multiplayer and is normally not available unless the function being called has been marked as [i]RPC[/i] (using [annotation @GDScript.@rpc] or [method Node.rpc_config]). Calling this method on unsupported functions will result in an error. See [method Node.rpc_id].
			</description>
		</method>
		<method name="unbind" qualifiers="const">
			<return type="Callable" />
			<param index="0" name="argcount" type="int" />
			<description>
				Returns a copy of this [Callable] with a number of arguments unbound. In other words, when the new callable is called the last few arguments supplied by the user are ignored, according to [param argcount]. The remaining arguments are passed to the callable. This allows to use the original callable in a context that attempts to pass more arguments than this callable can handle, e.g. a signal with a fixed number of arguments. See also [method bind].
				[b]Note:[/b] When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
				[codeblock]
				func _ready():
				    foo.unbind(1).call(1, 2) # Calls foo(1).
				    foo.bind(3, 4).unbind(1).call(1, 2) # Calls foo(1, 3, 4), note that it does not change the arguments from bind.
				[/codeblock]
			</description>
		</method>
	</methods>
	<operators>
		<operator name="operator !=">
			<return type="bool" />
			<param index="0" name="right" type="Callable" />
			<description>
				Returns [code]true[/code] if both [Callable]s invoke different targets.
			</description>
		</operator>
		<operator name="operator ==">
			<return type="bool" />
			<param index="0" name="right" type="Callable" />
			<description>
				Returns [code]true[/code] if both [Callable]s invoke the same custom target.
			</description>
		</operator>
	</operators>
</class>