Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
pathfinding [2020/11/06 09:53] – [Dimensions] adminpathfinding [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Pathfinding ====== 
- 
-{{::pathfinding.jpg?nolink|}} 
- 
-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 ===== 
- 
-<file pascal> 
-FPathFinder := TGorillaPathfindingAStar.Create(nil); 
- 
-// apply the agent used as source (any TControl3D) 
-FPathFinder.Agent := FAgent; 
-</file> 
- 
-===== 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. 
- 
-<file pascal> 
-// add a dynamic obstacle - needs update 
-FPathFinder.AddObstacle(FObstacle1, false);  
- 
-// add a static obstacle 
-FPathFinder.AddObstacle(FObstacle2); 
-</file> 
- 
-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. 
- 
-<file pascal> 
-FPathFinder.ObstacleMargin := TPoint3D.Create(1, 1, 1); 
-</file> 
- 
-===== Dimensions ===== 
- 
-<file pascal> 
-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; 
-</file> 
- 
-===== Computation ===== 
- 
-<file pascal> 
-FPathFinder.FindPath(Point3D(-10, 0, 10)); 
-</file>