This is an old revision of the document!


Pathfinding

Pathfinding is of course a very popular mechanism used in many games. Developers very often use it in controlling enemies or opponents. Gorilla3D provides an easy to use component based on AStar algorithm. The TGorillaPathfindingAStar component helps you manage those automated movements. It abstracts your 3D world and obstacles into a 2D-Plane to compute a path from a starting point to a destination.

You can update obstacles at runtime and recompute the map to simulate a dynamic environment.

Each Pathfinder is working on a single so called agent, which is the object to be moved on computed path.

Setup

FPathFinder := TGorillaPathfindingAStar.Create(nil);
 
// apply the agent used as source (any TControl3D)
FPathFinder.Agent := FAgent;

Obstacles

Obstacles are restricted areas on the pathfinding map, where an agent can't walk onto, so the algorithm will find a way around this obstacle. You can add static or dynamic obstacles to the system.

// add a dynamic obstacle - needs update
FPathFinder.AddObstacle(FObstacle1, false); 
 
// add a static obstacle
FPathFinder.AddObstacle(FObstacle2);

When adding an obstacle to the pathfinder you can define a margin. Those margins are useful if space between to obstacles is very tight. To prevent the agent to run into a narrow area, where it looks like he won't fit.

FPathFinder.ObstacleMargin := TPoint3D.Create(1, 1, 1);

Dimensions

var LGridSize : TPoint;
    LSize3D : TPointF;
 
[...]
 
// set dimensions of grid and used 3D space
LGridSize := TPoint.Create(PATHFINDING_GRID_X, PATHFINDING_GRID_Z);
FPathFinder.GridDimensions := LGridSize;
 
LSize3D := TPointF.Create(PATHFINDING_3DSIZE_X, PATHFINDING_3DSIZE_Z);
FPathFinder.Size3D := LSize3D;

Computation

FPathFinder.FindPath(Point3D(-10, 0, 10));