<?xml version="1.0" encoding="UTF-8" ?>
<class name="CanvasLayer" inherits="Node" api_type="core" 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 to 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] maintains its position in world space. If disabled, the [CanvasLayer] stays in a fixed position on the screen.
			Together with [member follow_viewport_scale], this 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.
			[b]Note:[/b] The layer index should be between [constant RenderingServer.CANVAS_LAYER_MIN] and [constant RenderingServer.CANVAS_LAYER_MAX] (inclusive). Any other value will wrap around.
		</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>
