Module jumper.grid
The grid class API.
Implementation of a grid class, which represents the 2D map (graph) on which a pathfinder will perform.
During a search, the pathfinder evaluates costs values for each node being processed, in order to select, after each step of iteration, what node should be expanded next to reach the target optimally. Those values are cached within an array of nodes inside the grid object.
Usage:
-- Usage Example
-- First, set a collision map
local map = {
{0,1,0,1,0},
{0,1,0,1,0},
{0,1,1,1,0},
{0,0,0,0,0},
}
-- Value for walkable tiles
local walkable = 0
-- Library setup
local Grid = require ("jumper.grid") -- The grid class
-- Creates a grid object
local grid = Grid(map)
Info:
- Copyright: 2012-2013
- License: MIT
- Author: Roland Yonaba
Functions
| grid:new (map[, processOnDemand]) | Inits a new grid object |
| grid:isWalkableAt (x, y, walkable) | Checks walkability. |
| grid:getWidth () | Gets the grid width. |
| grid:getHeight () | Gets the grid height. |
| grid:getMap () | Gets the collision map. |
| grid:getNodes () | Gets the grid nodes. |
| grid:getNeighbours (node, walkable[, allowDiagonal[, tunnel]]) | Returns the neighbours of a given node on a grid |
| grid:iter ([lx[, ly[, ex[, ey]]]]) | Iterates on nodes on the grid. |
| grid:each (f[, ...]) | Each transformation. |
| grid:eachRange (lx, ly, ex, ey, f[, ...]) | Each in range transformation. |
| grid:imap (f[, ...]) | Map transformation. |
| grid:imapRange (lx, ly, ex, ey, f[, ...]) | Map in range transformation. |
| grid:getNodeAt (x, y) | Returns the node[x,y] on a grid . |
Tables
| grid | The grid class |
Functions
- grid:new (map[, processOnDemand])
-
Inits a new grid object
Parameters:
- map table or string A collision map - (2D array) with consecutive integer indices or a string with line-break symbol as a row delimiter.
- processOnDemand bool whether or not caching nodes in the internal grid should be processed on-demand
Returns:
- grid:isWalkableAt (x, y, walkable)
-
Checks walkability. Tests if
node[x,y] exists on the collision map and is walkableParameters:
- x int the x-coordinate of the node
- y int the y-coordinate of the node
- walkable
string, int or function
the value for walkable nodes on the passed-in map array.
If this parameter is a function, it should be prototyped as
f(value), returning a boolean:truewhen value matches a walkable node,falseotherwise. If this parameter is not given and node [x,y] exists, this function returntrue.
Returns:
-
bool
trueif the node exist and is walkable,falseotherwise - grid:getWidth ()
-
Gets the grid width.
Returns:
-
int
the grid object width
- grid:getHeight ()
-
Gets the grid height.
Returns:
-
int
the grid object height
- grid:getMap ()
-
Gets the collision map.
Returns:
-
{{value},...}
the collision map previously passed to the grid object on initalization
- grid:getNodes ()
-
Gets the grid nodes.
Returns:
-
{{node},...}
the grid nodes
- grid:getNeighbours (node, walkable[, allowDiagonal[, tunnel]])
-
Returns the neighbours of a given
nodeon a gridParameters:
- node
node
nodeobject - walkable
string, int or function
the value for walkable nodes on the passed-in map array.
If this parameter is a function, it should be prototyped as
f(value), returning a boolean:truewhen value matches a walkable node,falseotherwise. - allowDiagonal bool whether or not adjacent nodes (8-directions moves) are allowed
- tunnel bool Whether or not the pathfinder can tunnel though walls diagonally
Returns:
-
{node,...}
an array of nodes neighbouring a passed-in node on the collision map
- node
node
- grid:iter ([lx[, ly[, ex[, ey]]]])
-
Iterates on nodes on the grid. When given no args, will iterate on every single node
on the grid, in case the grid is pre-processed. Passing
lx, ly, ex, eyargs will iterate on nodes inside a bounding-rectangle delimited by those coordinates.Parameters:
- lx int the leftmost x-coordinate coordinate of the rectangle
- ly int the topmost y-coordinate of the rectangle
- ex int the rightmost x-coordinate of the rectangle
- ey int the bottom-most y-coordinate of the rectangle
Returns:
-
node
a node on the collision map, upon each iteration step
- grid:each (f[, ...])
-
Each transformation. Executes a function on each
nodein the grid , passing thenodeas the first arg to functionf.Parameters:
- f
function
a function prototyped as
f(node,...) - ...
vararg
args to be passed to function
f
- f
function
a function prototyped as
- grid:eachRange (lx, ly, ex, ey, f[, ...])
-
Each in range transformation. Executes a function on each
nodein the range of a rectangle of cells, passing thenodeas the first arg to functionf.Parameters:
- lx int the leftmost x-coordinate coordinate of the rectangle
- ly int the topmost y-coordinate of the rectangle
- ex int the rightmost x-coordinate of the rectangle
- ey int the bottom-most y-coordinate of the rectangle
- f
function
a function prototyped as
f(node,...) - ...
vararg
args to be passed to function
f
- grid:imap (f[, ...])
-
Map transformation. Maps function
f(node,...)on eachnodein a given range, passing thenodeas the first arg to functionf. The passed-in function should return anodeobject.Parameters:
- f
function
a function prototyped as
f(node,...) - ...
vararg
args to be passed to function
f
- f
function
a function prototyped as
- grid:imapRange (lx, ly, ex, ey, f[, ...])
-
Map in range transformation. Maps
f(node,...)on eachnode in the range of a rectangle of cells, passing thenodeas the first arg to functionf. The passed-in function should return anodeobject.Parameters:
- lx int the leftmost x-coordinate coordinate of the rectangle
- ly int the topmost y-coordinate of the rectangle
- ex int the rightmost x-coordinate of the rectangle
- ey int the bottom-most y-coordinate of the rectangle
- f
function
a function prototyped as
f(node,...) - ...
vararg
args to be passed to function
f
- grid:getNodeAt (x, y)
-
Returns the
node[x,y] on a grid .Parameters:
- x int the x-coordinate coordinate
- y int the y-coordinate coordinate
Returns:
-
node
a
nodeobject Gets the node at locationon a preprocessed grid
Tables
- grid
-
The grid class
Fields:
- width The grid width
- height The grid height
- map A reference to the collision map
- nodes A 2D array of nodes, each node matching a cell on the collision map