<?xml version="1.0" encoding="UTF-8" ?>
<class name="Engine" inherits="Object" version="3.3">
	<brief_description>
		Access to engine properties.
	</brief_description>
	<description>
		The [Engine] singleton allows you to query and modify the project's run-time parameters, such as frames per second, time scale, and others.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="get_author_info" qualifiers="const">
			<return type="Dictionary" />
			<description>
				Returns engine author information in a Dictionary.
				[code]lead_developers[/code]    - Array of Strings, lead developer names
				[code]founders[/code]           - Array of Strings, founder names
				[code]project_managers[/code]   - Array of Strings, project manager names
				[code]developers[/code]         - Array of Strings, developer names
			</description>
		</method>
		<method name="get_copyright_info" qualifiers="const">
			<return type="Array" />
			<description>
				Returns an Array of copyright information Dictionaries.
				[code]name[/code]    - String, component name
				[code]parts[/code]   - Array of Dictionaries {[code]files[/code], [code]copyright[/code], [code]license[/code]} describing subsections of the component
			</description>
		</method>
		<method name="get_donor_info" qualifiers="const">
			<return type="Dictionary" />
			<description>
				Returns a Dictionary of Arrays of donor names.
				{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], [code]silver_sponsors[/code], [code]bronze_sponsors[/code], [code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/code], [code]bronze_donors[/code]}
			</description>
		</method>
		<method name="get_frames_drawn">
			<return type="int" />
			<description>
				Returns the total number of frames drawn. On headless platforms, or if the render loop is disabled with [code]--disable-render-loop[/code] via command line, [method get_frames_drawn] always returns [code]0[/code]. See [method get_idle_frames].
			</description>
		</method>
		<method name="get_frames_per_second" qualifiers="const">
			<return type="float" />
			<description>
				Returns the frames per second of the running game.
			</description>
		</method>
		<method name="get_idle_frames" qualifiers="const">
			<return type="int" />
			<description>
				Returns the total number of frames passed since engine initialization which is advanced on each [b]idle frame[/b], regardless of whether the render loop is enabled. See also [method get_frames_drawn] and [method get_physics_frames].
				[method get_idle_frames] can be used to run expensive logic less often without relying on a [Timer]:
				[codeblock]
				func _process(_delta):
				    if Engine.get_idle_frames() % 2 == 0:
				        pass  # Run expensive logic only once every 2 idle (render) frames here.
				[/codeblock]
			</description>
		</method>
		<method name="get_license_info" qualifiers="const">
			<return type="Dictionary" />
			<description>
				Returns Dictionary of licenses used by Godot and included third party components.
			</description>
		</method>
		<method name="get_license_text" qualifiers="const">
			<return type="String" />
			<description>
				Returns Godot license text.
			</description>
		</method>
		<method name="get_main_loop" qualifiers="const">
			<return type="MainLoop" />
			<description>
				Returns the main loop object (see [MainLoop] and [SceneTree]).
			</description>
		</method>
		<method name="get_physics_frames" qualifiers="const">
			<return type="int" />
			<description>
				Returns the total number of frames passed since engine initialization which is advanced on each [b]physics frame[/b]. See also [method get_idle_frames].
				[method get_physics_frames] can be used to run expensive logic less often without relying on a [Timer]:
				[codeblock]
				func _physics_process(_delta):
				    if Engine.get_physics_frames() % 2 == 0:
				        pass  # Run expensive logic only once every 2 physics frames here.
				[/codeblock]
			</description>
		</method>
		<method name="get_physics_interpolation_fraction" qualifiers="const">
			<return type="float" />
			<description>
				Returns the fraction through the current physics tick we are at the time of rendering the frame. This can be used to implement fixed timestep interpolation.
			</description>
		</method>
		<method name="get_singleton" qualifiers="const">
			<return type="Object" />
			<argument index="0" name="name" type="String" />
			<description>
				Returns a global singleton with given [code]name[/code]. Often used for plugins, e.g. [code]GodotPayment[/code] on Android.
			</description>
		</method>
		<method name="get_version_info" qualifiers="const">
			<return type="Dictionary" />
			<description>
				Returns the current engine version information in a Dictionary.
				[code]major[/code]    - Holds the major version number as an int
				[code]minor[/code]    - Holds the minor version number as an int
				[code]patch[/code]    - Holds the patch version number as an int
				[code]hex[/code]      - Holds the full version number encoded as a hexadecimal int with one byte (2 places) per number (see example below)
				[code]status[/code]   - Holds the status (e.g. "beta", "rc1", "rc2", ... "stable") as a String
				[code]build[/code]    - Holds the build name (e.g. "custom_build") as a String
				[code]hash[/code]     - Holds the full Git commit hash as a String
				[code]year[/code]     - Holds the year the version was released in as an int
				[code]string[/code]   - [code]major[/code] + [code]minor[/code] + [code]patch[/code] + [code]status[/code] + [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] It's still an int internally, and printing it will give you its decimal representation, which is not particularly meaningful. Use hexadecimal literals for easy version comparisons from code:
				[codeblock]
				if Engine.get_version_info().hex &gt;= 0x030200:
				    # Do things specific to version 3.2 or later
				else:
				    # Do things specific to versions before 3.2
				[/codeblock]
			</description>
		</method>
		<method name="has_singleton" qualifiers="const">
			<return type="bool" />
			<argument index="0" name="name" type="String" />
			<description>
				Returns [code]true[/code] if a singleton with given [code]name[/code] exists in global scope.
			</description>
		</method>
		<method name="is_in_physics_frame" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the game is inside the fixed process and physics phase of the game loop.
			</description>
		</method>
	</methods>
	<members>
		<member name="editor_hint" type="bool" setter="set_editor_hint" getter="is_editor_hint" default="true">
			If [code]true[/code], the script is currently running inside the editor. 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:
			[codeblock]
			if Engine.editor_hint:
			    draw_gizmos()
			else:
			    simulate_physics()
			[/codeblock]
			See [url=https://docs.godotengine.org/en/3.3/tutorials/misc/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 run from an editor [i]build[/i] (e.g. when pressing [code]F5[/code]), use [method OS.has_feature] with the [code]"editor"[/code] argument instead. [code]OS.has_feature("editor")[/code] will evaluate to [code]true[/code] both when the code is running in the editor and when running the project from the editor, but it will evaluate to [code]false[/code] when the code is run from an exported project.
		</member>
		<member name="iterations_per_second" type="int" setter="set_iterations_per_second" getter="get_iterations_per_second" default="60">
			The number of fixed iterations per second. This controls how often physics simulation and [method Node._physics_process] methods are run. This value should generally always be set to [code]60[/code] or above, as Godot doesn't interpolate the physics step. As a result, values lower than [code]60[/code] will look stuttery. This value can be increased to make input more reactive or work around tunneling issues, but keep in mind doing so will increase CPU usage.
		</member>
		<member name="physics_jitter_fix" type="float" setter="set_physics_jitter_fix" getter="get_physics_jitter_fix" default="0.5">
			Controls how much physics ticks are synchronized with real time. For 0 or less, the ticks are synchronized. Such values are recommended for network games, where clock synchronization matters. Higher values cause higher deviation of the in-game clock and real clock but smooth out framerate jitters. The default value of 0.5 should be fine for most; values above 2 could cause the game to react to dropped frames with a noticeable delay and are not recommended.
			[b]Note:[/b] For best results, when using a custom physics interpolation solution, the physics jitter fix should be disabled by setting [member physics_jitter_fix] to [code]0[/code].
		</member>
		<member name="target_fps" type="int" setter="set_target_fps" getter="get_target_fps" default="0">
			The desired frames per second. If the hardware cannot keep up, this setting may not be respected. A value of 0 means no limit.
		</member>
		<member name="time_scale" type="float" setter="set_time_scale" getter="get_time_scale" default="1.0">
			Controls how fast or slow the in-game clock ticks versus the real life one. It defaults to 1.0. A value of 2.0 means the game moves twice as fast as real life, whilst a value of 0.5 means the game moves at half the regular speed.
		</member>
	</members>
	<constants>
	</constants>
</class>
