This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
gamedev:navigation [2012/12/01 17:45] – dragonlord | gamedev:navigation [2012/12/01 17:54] – dragonlord | ||
---|---|---|---|
Line 102: | Line 102: | ||
<WRAP clear></ | <WRAP clear></ | ||
- | ===== Navigators ===== | + | ====== Navigators |
<WRAP box 250px right :en>{{ : | <WRAP box 250px right :en>{{ : | ||
While the navigation spaces define the space in which navigation takes pace it is the navigators that determine which path to choose across such a space. Navigators are also also all-round class and can thus be used on all kinds of navigation spaces. To use a navigator you have to first set the **layer number** and the **space type**. The navigator is going to determine a path only using navigation spaces having the same layer and space type. If navigation does not work properly check first if these two parameters are set correctly. Once this is done you can set a **start position** and a **goal position**. Call then **update path**“ and the AI module calculates a path for you. The path is stored as a list of points (DVector) in world space. If no path is found the list of points is 0. Otherwise the list of points defines the path starting with the first path point to head towards. The list does not start with the **start position** but with the first path point. The last point in the list is the **goal position**. The list stays intact until the next time **update path** is called. | While the navigation spaces define the space in which navigation takes pace it is the navigators that determine which path to choose across such a space. Navigators are also also all-round class and can thus be used on all kinds of navigation spaces. To use a navigator you have to first set the **layer number** and the **space type**. The navigator is going to determine a path only using navigation spaces having the same layer and space type. If navigation does not work properly check first if these two parameters are set correctly. Once this is done you can set a **start position** and a **goal position**. Call then **update path**“ and the AI module calculates a path for you. The path is stored as a list of points (DVector) in world space. If no path is found the list of points is 0. Otherwise the list of points defines the path starting with the first path point to head towards. The list does not start with the **start position** but with the first path point. The last point in the list is the **goal position**. The list stays intact until the next time **update path** is called. | ||
- | ==== Cost Functions ==== | + | ===== Cost Functions |
Cost functions allow you to influence the path the AI module calculates for you. As mentioned at the beginning navigation spaces define a **type number** for individual space elements. The navigator stores a list of **Navigation Type** objects. A navigation type stores a **type number**, a **fix cost** and a **cost per meter** parameter. The type number is used to match the navigation type with the navigation space elements. If no match can be found the default parameters for fix cost and cost per meter are used as stored in the navigator. Depending on the navigation space in use the costs are calculated differently using these parameters. **distance** is the distance in meters traveled along a navigation space element. | Cost functions allow you to influence the path the AI module calculates for you. As mentioned at the beginning navigation spaces define a **type number** for individual space elements. The navigator stores a list of **Navigation Type** objects. A navigation type stores a **type number**, a **fix cost** and a **cost per meter** parameter. The type number is used to match the navigation type with the navigation space elements. If no match can be found the default parameters for fix cost and cost per meter are used as stored in the navigator. Depending on the navigation space in use the costs are calculated differently using these parameters. **distance** is the distance in meters traveled along a navigation space element. | ||
Line 121: | Line 121: | ||
<WRAP clear></ | <WRAP clear></ | ||
- | **Example**\\ | + | <WRAP boxheader> |
+ | <WRAP boxcontent> | ||
<WRAP box 250px right :en>{{ : | <WRAP box 250px right :en>{{ : | ||
An example for the use of cost functions is given in the images on the right. The first image shows a sample path through the world. In this case the path leads through the office of a coworker. This is indeed the shortest possible path if we assume doors are automatically opening not hampering your progress. Yet in reality this path is not a realistic one as strolling through an office like that is not considered to be polite. We need thus a way to penalize this route without preventing the path to end up in the office should this be our destination. For this costs functions can be used. In the example the "Type Numbers" | An example for the use of cost functions is given in the images on the right. The first image shows a sample path through the world. In this case the path leads through the office of a coworker. This is indeed the shortest possible path if we assume doors are automatically opening not hampering your progress. Yet in reality this path is not a realistic one as strolling through an office like that is not considered to be polite. We need thus a way to penalize this route without preventing the path to end up in the office should this be our destination. For this costs functions can be used. In the example the "Type Numbers" | ||
- | |||
<WRAP clear></ | <WRAP clear></ | ||
+ | |||
<WRAP box 250px right :en>{{ : | <WRAP box 250px right :en>{{ : | ||
The first solution using doors requires us to create a " | The first solution using doors requires us to create a " | ||
Line 133: | Line 134: | ||
Which method is the better depends on the situation. The solution with the added fix cost is usually better though as it does not increase the costs too much while still delivering the desired result. | Which method is the better depends on the situation. The solution with the added fix cost is usually better though as it does not increase the costs too much while still delivering the desired result. | ||
<WRAP clear></ | <WRAP clear></ | ||
+ | </ | ||
- | ==== Parameter Summary ==== | + | ===== Parameter Summary |
<WRAP column 45%> | <WRAP column 45%> | ||
- | **Navigator** | + | <WRAP boxheader> |
+ | <WRAP boxcontent> | ||
^Name^Description^Value^ | ^Name^Description^Value^ | ||
|Layer|Layer this navigator uses to find a path|Integer| | |Layer|Layer this navigator uses to find a path|Integer| | ||
Line 144: | Line 147: | ||
|Blocking Cost|Path with costs larger than this value are considered unwalkable|Float| | |Blocking Cost|Path with costs larger than this value are considered unwalkable|Float| | ||
</ | </ | ||
+ | </ | ||
+ | |||
<WRAP column 45%> | <WRAP column 45%> | ||
- | **Navigation Type** | + | <WRAP boxheader> |
+ | <WRAP boxcontent> | ||
^Name^Description^Value^ | ^Name^Description^Value^ | ||
|Type Number|Type number matching this cost function|Unsigned Short| | |Type Number|Type number matching this cost function|Unsigned Short| | ||
|Fix Cost|Fix cost to use|Float| | |Fix Cost|Fix cost to use|Float| | ||
|Cost Per Meter|Cost Per Meter to use|Float| | |Cost Per Meter|Cost Per Meter to use|Float| | ||
+ | </ | ||
</ | </ | ||
<WRAP clear></ | <WRAP clear></ | ||
- | ===== Steering and Collision Avoidance ===== | + | ====== Steering and Collision Avoidance |
The navigation system provides you only with the path to take along the world. After this task navigation typically consists also of the process of **steering** and **collision avoidance**. These tasks though depend heavily on the game in question and are thus not provided by the AI Module. This is though not a problem since the Physics Module provides you already with collision detection to implement your steering and collision avoidance of choice. | The navigation system provides you only with the path to take along the world. After this task navigation typically consists also of the process of **steering** and **collision avoidance**. These tasks though depend heavily on the game in question and are thus not provided by the AI Module. This is though not a problem since the Physics Module provides you already with collision detection to implement your steering and collision avoidance of choice. |