Browse Source

Add documentation for NavigationPathQuery objects

Adds documentation how to use the NavigationPathQueryParameters and NavigationPathQueryResult objects.
smix8 2 years ago
parent
commit
0833423019

+ 1 - 0
tutorials/navigation/index.rst

@@ -12,6 +12,7 @@ Navigation
    navigation_using_navigationregions
    navigation_using_navigationregions
    navigation_using_navigationmeshes
    navigation_using_navigationmeshes
    navigation_using_navigationpaths
    navigation_using_navigationpaths
+   navigation_using_navigationpathqueryobjects
    navigation_using_navigationagents
    navigation_using_navigationagents
    navigation_using_navigationobstacles
    navigation_using_navigationobstacles
    navigation_using_navigationlinks
    navigation_using_navigationlinks

+ 62 - 0
tutorials/navigation/navigation_using_navigationpathqueryobjects.rst

@@ -0,0 +1,62 @@
+.. _doc_navigation_using_navigationpathqueryobjects:
+
+Using NavigationPathQueryObjects
+================================
+
+``NavigationPathQueryObjects`` can be used together with ``NavigationServer.query_path()`` 
+to obtain a heavily **customized** navigation path including optional **meta data** about the path.
+
+This requires more setup compared to obtaining a normal NavigationPath but lets you tailor 
+the pathfinding and provided path data to the different needs of a project.
+
+NavigationPathQueryObjects consist of a pair of objects, a ``NavigationPathQueryParameters`` object holding the customization options 
+for the query and a ``NavigationPathQueryResult`` that receives (regular) updates with the resulting path and meta data from the query.
+
+2D and 3D versions of ``NavigationPathQueryParameters`` are available as 
+:ref:`NavigationPathQueryParameters2D<class_NavigationPathQueryParameters2D>` and 
+:ref:`NavigationPathQueryParameters3D<class_NavigationPathQueryParameters3D>` respectively.
+
+2D and 3D versions of ``NavigationPathQueryResult`` are available as 
+:ref:`NavigationPathQuerResult2D<class_NavigationPathQueryResult2D>` and 
+:ref:`NavigationPathQueryResult3D<class_NavigationPathQueryResult3D>` respectively.
+
+Both parameters and result are used as a pair with the ``NavigationServer.query_path()`` function.
+
+For the available customization options and their use see the class doc of the parameters.
+
+While not a strict requirement, both objects are intended to be created once in advance, stored in a 
+persistent variable for the agent and reused for every followup path query with updated parameters. 
+This reuse avoids performance implications from frequent object creation if a project 
+has a large quantity of simultaneous agents that regularly update their paths.
+
+.. tabs::
+ .. code-tab:: gdscript GDScript
+
+    # prepare query objects
+    var query_parameters = NavigationPathQueryParameters2D.new()
+    var query_result  = NavigationPathQueryResult2D.new()
+
+    # update parameters object
+    query_parameters.map = get_world_2d().get_navigation_map()
+    query_parameters.start_position = agent2d_current_global_position
+    query_parameters.target_position = agent2d_target_global_position
+
+    # update result object
+    NavigationServer2D.query_path(query_parameters, query_result)
+    var path : PackedVector2Array = query_result.get_path()
+
+.. tabs::
+ .. code-tab:: gdscript GDScript
+
+    # prepare query objects
+    var query_parameters = NavigationPathQueryParameters3D.new()
+    var query_result  = NavigationPathQueryResult3D.new()
+
+    # update parameters object
+    query_parameters.map = get_world_3d().get_navigation_map()
+    query_parameters.start_position = agent3d_current_global_position
+    query_parameters.target_position = agent3d_target_global_position
+
+    # update result object
+    NavigationServer3D.query_path(query_parameters, query_result)
+    var path : PackedVector3Array = query_result.get_path()

+ 2 - 0
tutorials/navigation/navigation_using_navigationpaths.rst

@@ -13,6 +13,8 @@ To obtain a 2D path, use ``NavigationServer2D.map_get_path(map, from, to, optimi
 
 
 To obtain a 3D path, use ``NavigationServer3D.map_get_path(map, from, to, optimize, navigation_layers)``.
 To obtain a 3D path, use ``NavigationServer3D.map_get_path(map, from, to, optimize, navigation_layers)``.
 
 
+For more customizable navigation path queries that require additional setup see :ref:`doc_navigation_using_navigationpathqueryobjects`.
+
 One of the required parameters for the query is the RID of the navigation map. 
 One of the required parameters for the query is the RID of the navigation map. 
 Each game ``World`` has a default navigation map automatically created. 
 Each game ``World`` has a default navigation map automatically created. 
 The default navigation maps can be retrieved with ``get_world_2d().get_navigation_map()`` from 
 The default navigation maps can be retrieved with ``get_world_2d().get_navigation_map()`` from