<?xml version="1.0" encoding="UTF-8" ?>
<class name="NavigationPolygon" inherits="Resource" version="4.0">
	<brief_description>
		A node that has methods to draw outlines or use indices of vertices to create navigation polygons.
	</brief_description>
	<description>
		There are two ways to create polygons. Either by using the [method add_outline] method, or using the [method add_polygon] method.
		Using [method add_outline]:
		[codeblocks]
		[gdscript]
		var polygon = NavigationPolygon.new()
		var outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
		polygon.add_outline(outline)
		polygon.make_polygons_from_outlines()
		$NavigationRegion2D.navpoly = polygon
		[/gdscript]
		[csharp]
		var polygon = new NavigationPolygon();
		var outline = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
		polygon.AddOutline(outline);
		polygon.MakePolygonsFromOutlines();
		GetNode&lt;NavigationRegion2D&gt;("NavigationRegion2D").Navpoly = polygon;
		[/csharp]
		[/codeblocks]
		Using [method add_polygon] and indices of the vertices array.
		[codeblocks]
		[gdscript]
		var polygon = NavigationPolygon.new()
		var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
		polygon.vertices = vertices
		var indices = PackedInt32Array(0, 3, 1)
		polygon.add_polygon(indices)
		$NavigationRegion2D.navpoly = polygon
		[/gdscript]
		[csharp]
		var polygon = new NavigationPolygon();
		var vertices = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
		polygon.Vertices = vertices;
		var indices = new int[] { 0, 3, 1 };
		polygon.AddPolygon(indices);
		GetNode&lt;NavigationRegion2D&gt;("NavigationRegion2D").Navpoly = polygon;
		[/csharp]
		[/codeblocks]
	</description>
	<tutorials>
		<link title="2D Navigation Demo">https://godotengine.org/asset-library/asset/117</link>
	</tutorials>
	<methods>
		<method name="add_outline">
			<return type="void">
			</return>
			<argument index="0" name="outline" type="PackedVector2Array">
			</argument>
			<description>
				Appends a [PackedVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines. You have to call [method make_polygons_from_outlines] in order for this array to be converted to polygons that the engine will use.
			</description>
		</method>
		<method name="add_outline_at_index">
			<return type="void">
			</return>
			<argument index="0" name="outline" type="PackedVector2Array">
			</argument>
			<argument index="1" name="index" type="int">
			</argument>
			<description>
				Adds a [PackedVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines at a fixed position. You have to call [method make_polygons_from_outlines] in order for this array to be converted to polygons that the engine will use.
			</description>
		</method>
		<method name="add_polygon">
			<return type="void">
			</return>
			<argument index="0" name="polygon" type="PackedInt32Array">
			</argument>
			<description>
				Adds a polygon using the indices of the vertices you get when calling [method get_vertices].
			</description>
		</method>
		<method name="clear_outlines">
			<return type="void">
			</return>
			<description>
				Clears the array of the outlines, but it doesn't clear the vertices and the polygons that were created by them.
			</description>
		</method>
		<method name="clear_polygons">
			<return type="void">
			</return>
			<description>
				Clears the array of polygons, but it doesn't clear the array of outlines and vertices.
			</description>
		</method>
		<method name="get_outline" qualifiers="const">
			<return type="PackedVector2Array">
			</return>
			<argument index="0" name="idx" type="int">
			</argument>
			<description>
				Returns a [PackedVector2Array] containing the vertices of an outline that was created in the editor or by script.
			</description>
		</method>
		<method name="get_outline_count" qualifiers="const">
			<return type="int">
			</return>
			<description>
				Returns the number of outlines that were created in the editor or by script.
			</description>
		</method>
		<method name="get_polygon">
			<return type="PackedInt32Array">
			</return>
			<argument index="0" name="idx" type="int">
			</argument>
			<description>
				Returns a [PackedInt32Array] containing the indices of the vertices of a created polygon.
			</description>
		</method>
		<method name="get_polygon_count" qualifiers="const">
			<return type="int">
			</return>
			<description>
				Returns the count of all polygons.
			</description>
		</method>
		<method name="get_vertices" qualifiers="const">
			<return type="PackedVector2Array">
			</return>
			<description>
				Returns a [PackedVector2Array] containing all the vertices being used to create the polygons.
			</description>
		</method>
		<method name="make_polygons_from_outlines">
			<return type="void">
			</return>
			<description>
				Creates polygons from the outlines added in the editor or by script.
			</description>
		</method>
		<method name="remove_outline">
			<return type="void">
			</return>
			<argument index="0" name="idx" type="int">
			</argument>
			<description>
				Removes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update.
			</description>
		</method>
		<method name="set_outline">
			<return type="void">
			</return>
			<argument index="0" name="idx" type="int">
			</argument>
			<argument index="1" name="outline" type="PackedVector2Array">
			</argument>
			<description>
				Changes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update.
			</description>
		</method>
		<method name="set_vertices">
			<return type="void">
			</return>
			<argument index="0" name="vertices" type="PackedVector2Array">
			</argument>
			<description>
				Sets the vertices that can be then indexed to create polygons with the [method add_polygon] method.
			</description>
		</method>
	</methods>
	<constants>
	</constants>
</class>