Lua PathFinder: Difference between revisions

From Spring
Jump to navigationJump to search
Kloot (talk | contribs)
document the new LuaPathFinder callouts
Knorke (talk | contribs)
added a forum link
Line 43: Line 43:
'''Path.GetPathNodeCost'''
'''Path.GetPathNodeCost'''
   (number arrayID, number heightMapX, number heightMapZ) -> number nodeCost
   (number arrayID, number heightMapX, number heightMapZ) -> number nodeCost
==Further Reading==
{{forumlink|topic=22953&start=2|title=a forum thread}}


[[category: Lua]]
[[category: Lua]]

Revision as of 17:40, 8 July 2011

Development < Lua Scripting < Lua PathFinder

PathFinder

Path.RequestPath

 ( string "MoveTypeName" | number moveID,
   number start_x, number start_y, number start_z,
   number end_x,   number end_y,   number end_z
   [, number radius = 8 ]
 ) -> nil | pathObject path (see below)

Path UserData Object

Path:GetEstimatedPath

 ( ) -> nil | {
    [1] = { x,y,z }, ...
  },{
    [1] = startIdxOfDetailedPath,
    [2] = startIdxOfDetailedEstimatedPath1,
    [3] = startIdxOfDetailedEstimatedPath2,
  }

GetEstimatedPath() returns 2 tables: 1 table with the waypoints and 1 table with 3 indices (in the waypoint table) when a new (more lazy) pathfinding algorithm begins. So the waypoint table contains 3 different levels of details.

Path:Next

 ( number pos_x, number pos_y, number pos_z,
   [, number radius = 0 ]
 ) -> nil | number x, number y, number z

Path:Next() returns the next waypoint in the path. Unlike GetEstimatedPath() in which the resolution of the waypoints decreases, Next updates the path so the resolution will increase as it approaches the target.

Note that Path in Path:GetEstimatedPath and Path:Next is not part of the command, but rather a reference to the path Object created by Spring.RequestPath. It must match the path Object (case sensitive).


The following functions allow manipulating the cost of nodes visited by the pathfinding algorithm through numbered additive overlays (arrays). Only one overlay can be active at once, but as many as desired may be created with InitPathNodeCostsArray. The active layer is set by SetPathNodeCosts. IMPORTANT: the size of a newly created layer can be arbitrary, but ideally should match the heightmap dimensions. GetPathNodeCost ALWAYS takes heightmap coordinates as arguments, which are internally converted to the resolution of the active node-overlay (if any).

Path.InitPathNodeCostsArray

 (number arrayID, number numNodesX, number numNodesZ) -> boolean success

Path.FreePathNodeCostsArray

 (number arrayID) -> boolean success

Path.SetPathNodeCosts

 (number arrayID) -> boolean success

Path.SetPathNodeCost

 (number arrayID, number nodeArrayIndex, number cost) -> boolean success

Path.GetPathNodeCost

 (number arrayID, number heightMapX, number heightMapZ) -> number nodeCost

Further Reading

a forum thread