Files
recastnavigation/group__crowd.html

389 lines
26 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Recast Navigation: Crowd</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Recast Navigation
</div>
<div id="projectbrief">Navigation-mesh Toolset for Games</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__crowd.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">Crowd</div> </div>
</div><!--header-->
<div class="contents">
<p>Members in this module implement local steering and dynamic avoidance features.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdtCrowdNeighbour.html">dtCrowdNeighbour</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides neighbor data for agents managed by the crowd. <a href="structdtCrowdNeighbour.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdtCrowdAgentParams.html">dtCrowdAgentParams</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configuration parameters for a crowd agent. <a href="structdtCrowdAgentParams.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdtCrowdAgent.html">dtCrowdAgent</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents an agent managed by a <a class="el" href="classdtCrowd.html" title="Provides local steering behaviors for a group of agents.">dtCrowd</a> object. <a href="structdtCrowdAgent.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdtCrowd.html">dtCrowd</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides local steering behaviors for a group of agents. <a href="classdtCrowd.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdtPathCorridor.html">dtPathCorridor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a dynamic polygon corridor used to plan agent movement. <a href="classdtPathCorridor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga59bc9aa54705292d8f0f1ad9ca48ca82"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#ga59bc9aa54705292d8f0f1ad9ca48ca82">CrowdAgentState</a> { <a class="el" href="group__crowd.html#gga59bc9aa54705292d8f0f1ad9ca48ca82ac2abcf7abcdba5abeda5801fc771baa8">DT_CROWDAGENT_STATE_INVALID</a>
, <a class="el" href="group__crowd.html#gga59bc9aa54705292d8f0f1ad9ca48ca82ab165ebb808ee9390c7f7ec9f5ea277ec">DT_CROWDAGENT_STATE_WALKING</a>
, <a class="el" href="group__crowd.html#gga59bc9aa54705292d8f0f1ad9ca48ca82a4194d4934f447526177f505e93c96fec">DT_CROWDAGENT_STATE_OFFMESH</a>
}</td></tr>
<tr class="memdesc:ga59bc9aa54705292d8f0f1ad9ca48ca82"><td class="mdescLeft">&#160;</td><td class="mdescRight">The type of navigation mesh polygon the agent is currently traversing. <a href="group__crowd.html#ga59bc9aa54705292d8f0f1ad9ca48ca82">More...</a><br /></td></tr>
<tr class="separator:ga59bc9aa54705292d8f0f1ad9ca48ca82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa94b67d2fdcc390690c523f28019e52f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#gaa94b67d2fdcc390690c523f28019e52f">UpdateFlags</a> { <br />
&#160;&#160;<a class="el" href="group__crowd.html#ggaa94b67d2fdcc390690c523f28019e52fafeecd3363350e50041dca39352c3e268">DT_CROWD_ANTICIPATE_TURNS</a> = 1
, <a class="el" href="group__crowd.html#ggaa94b67d2fdcc390690c523f28019e52fad5d5d50e0b623e78e0dd68eb816bcc00">DT_CROWD_OBSTACLE_AVOIDANCE</a> = 2
, <a class="el" href="group__crowd.html#ggaa94b67d2fdcc390690c523f28019e52fa07d463e4e35cd6ca1f16e6bede02856e">DT_CROWD_SEPARATION</a> = 4
, <a class="el" href="group__crowd.html#ggaa94b67d2fdcc390690c523f28019e52fad11f447facf1bf42c09de64e9483f3aa">DT_CROWD_OPTIMIZE_VIS</a> = 8
, <br />
&#160;&#160;<a class="el" href="group__crowd.html#ggaa94b67d2fdcc390690c523f28019e52fa89c6f7f2e49254e775cb2b85259a0a93">DT_CROWD_OPTIMIZE_TOPO</a> = 16
<br />
}</td></tr>
<tr class="memdesc:gaa94b67d2fdcc390690c523f28019e52f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Crowd agent update flags. <a href="group__crowd.html#gaa94b67d2fdcc390690c523f28019e52f">More...</a><br /></td></tr>
<tr class="separator:gaa94b67d2fdcc390690c523f28019e52f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga01a53c9d76d1b61678ab1944dfbfac55"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classdtCrowd.html">dtCrowd</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#ga01a53c9d76d1b61678ab1944dfbfac55">dtAllocCrowd</a> ()</td></tr>
<tr class="memdesc:ga01a53c9d76d1b61678ab1944dfbfac55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a crowd object using the Detour allocator. <a href="group__crowd.html#ga01a53c9d76d1b61678ab1944dfbfac55">More...</a><br /></td></tr>
<tr class="separator:ga01a53c9d76d1b61678ab1944dfbfac55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9475313642645070e78c359e0fc02b7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#ga9475313642645070e78c359e0fc02b7a">dtFreeCrowd</a> (<a class="el" href="classdtCrowd.html">dtCrowd</a> *ptr)</td></tr>
<tr class="memdesc:ga9475313642645070e78c359e0fc02b7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the specified crowd object using the Detour allocator. <a href="group__crowd.html#ga9475313642645070e78c359e0fc02b7a">More...</a><br /></td></tr>
<tr class="separator:ga9475313642645070e78c359e0fc02b7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:ga70106a906d993ec6c39ef91d81c0f40e"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#ga70106a906d993ec6c39ef91d81c0f40e">DT_CROWDAGENT_MAX_NEIGHBOURS</a> = 6</td></tr>
<tr class="memdesc:ga70106a906d993ec6c39ef91d81c0f40e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of neighbors that a crowd agent can take into account for steering decisions. <a href="group__crowd.html#ga70106a906d993ec6c39ef91d81c0f40e">More...</a><br /></td></tr>
<tr class="separator:ga70106a906d993ec6c39ef91d81c0f40e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab745b43d81519294efcfe7449faff3de"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#gab745b43d81519294efcfe7449faff3de">DT_CROWDAGENT_MAX_CORNERS</a> = 4</td></tr>
<tr class="memdesc:gab745b43d81519294efcfe7449faff3de"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of corners a crowd agent will look ahead in the path. <a href="group__crowd.html#gab745b43d81519294efcfe7449faff3de">More...</a><br /></td></tr>
<tr class="separator:gab745b43d81519294efcfe7449faff3de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaca1e1a9395fd4406de712dc4330c60c5"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#gaca1e1a9395fd4406de712dc4330c60c5">DT_CROWD_MAX_OBSTAVOIDANCE_PARAMS</a> = 8</td></tr>
<tr class="memdesc:gaca1e1a9395fd4406de712dc4330c60c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of crowd avoidance configurations supported by the crowd manager. <a href="group__crowd.html#gaca1e1a9395fd4406de712dc4330c60c5">More...</a><br /></td></tr>
<tr class="separator:gaca1e1a9395fd4406de712dc4330c60c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1686003d07121541db2ee11074e1b3af"><td class="memItemLeft" align="right" valign="top">static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crowd.html#ga1686003d07121541db2ee11074e1b3af">DT_CROWD_MAX_QUERY_FILTER_TYPE</a> = 16</td></tr>
<tr class="memdesc:ga1686003d07121541db2ee11074e1b3af"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of query filter types supported by the crowd manager. <a href="group__crowd.html#ga1686003d07121541db2ee11074e1b3af">More...</a><br /></td></tr>
<tr class="separator:ga1686003d07121541db2ee11074e1b3af"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
<p>Members in this module implement local steering and dynamic avoidance features. </p>
<p>The crowd is the big beast of the navigation features. It not only handles a lot of the path management for you, but also local steering and dynamic avoidance between members of the crowd. I.e. It can keep your agents from running into each other.</p>
<p>Main class: <a class="el" href="classdtCrowd.html" title="Provides local steering behaviors for a group of agents.">dtCrowd</a></p>
<p>The <a class="el" href="classdtNavMeshQuery.html" title="Provides the ability to perform pathfinding related queries against a navigation mesh.">dtNavMeshQuery</a> and <a class="el" href="classdtPathCorridor.html" title="Represents a dynamic polygon corridor used to plan agent movement.">dtPathCorridor</a> classes provide perfectly good, easy to use path planning features. But in the end they only give you points that your navigation client should be moving toward. When it comes to deciding things like agent velocity and steering to avoid other agents, that is up to you to implement. Unless, of course, you decide to use <a class="el" href="classdtCrowd.html" title="Provides local steering behaviors for a group of agents.">dtCrowd</a>.</p>
<p>Basically, you add an agent to the crowd, providing various configuration settings such as maximum speed and acceleration. You also provide a local target to more toward. The crowd manager then provides, with every update, the new agent position and velocity for the frame. The movement will be constrained to the navigation mesh, and steering will be applied to ensure agents managed by the crowd do not collide with each other.</p>
<p>This is very powerful feature set. But it comes with limitations.</p>
<p>The biggest limitation is that you must give control of the agent's position completely over to the crowd manager. You can update things like maximum speed and acceleration. But in order for the crowd manager to do its thing, it can't allow you to constantly be giving it overrides to position and velocity. So you give up direct control of the agent's movement. It belongs to the crowd.</p>
<p>The second biggest limitation revolves around the fact that the crowd manager deals with local planning. So the agent's target should never be more than 256 polygons aways from its current position. If it is, you risk your agent failing to reach its target. So you may still need to do long distance planning and provide the crowd manager with intermediate targets.</p>
<p>Other significant limitations:</p>
<ul>
<li>All agents using the crowd manager will use the same <a class="el" href="classdtQueryFilter.html" title="Defines polygon filtering and traversal costs for navigation mesh query operations.">dtQueryFilter</a>.</li>
<li>Crowd management is relatively expensive. The maximum agents under crowd management at any one time is between 20 and 30. A good place to start is a maximum of 25 agents for 0.5ms per frame.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>This is a summary list of members. Use the index or search feature to find minor members. </dd></dl>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga59bc9aa54705292d8f0f1ad9ca48ca82"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga59bc9aa54705292d8f0f1ad9ca48ca82">&#9670;&nbsp;</a></span>CrowdAgentState</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__crowd.html#ga59bc9aa54705292d8f0f1ad9ca48ca82">CrowdAgentState</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>The type of navigation mesh polygon the agent is currently traversing. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga59bc9aa54705292d8f0f1ad9ca48ca82ac2abcf7abcdba5abeda5801fc771baa8"></a>DT_CROWDAGENT_STATE_INVALID&#160;</td><td class="fielddoc"><p>The agent is not in a valid state. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga59bc9aa54705292d8f0f1ad9ca48ca82ab165ebb808ee9390c7f7ec9f5ea277ec"></a>DT_CROWDAGENT_STATE_WALKING&#160;</td><td class="fielddoc"><p>The agent is traversing a normal navigation mesh polygon. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga59bc9aa54705292d8f0f1ad9ca48ca82a4194d4934f447526177f505e93c96fec"></a>DT_CROWDAGENT_STATE_OFFMESH&#160;</td><td class="fielddoc"><p>The agent is traversing an off-mesh connection. </p>
</td></tr>
</table>
</div>
</div>
<a id="gaa94b67d2fdcc390690c523f28019e52f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa94b67d2fdcc390690c523f28019e52f">&#9670;&nbsp;</a></span>UpdateFlags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__crowd.html#gaa94b67d2fdcc390690c523f28019e52f">UpdateFlags</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Crowd agent update flags. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structdtCrowdAgentParams.html#a7066a4477bbfa53fc1c983e17aa3e5ae" title="Flags that impact steering behavior. (See: UpdateFlags)">dtCrowdAgentParams::updateFlags</a> </dd></dl>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fafeecd3363350e50041dca39352c3e268"></a>DT_CROWD_ANTICIPATE_TURNS&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fad5d5d50e0b623e78e0dd68eb816bcc00"></a>DT_CROWD_OBSTACLE_AVOIDANCE&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fa07d463e4e35cd6ca1f16e6bede02856e"></a>DT_CROWD_SEPARATION&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fad11f447facf1bf42c09de64e9483f3aa"></a>DT_CROWD_OPTIMIZE_VIS&#160;</td><td class="fielddoc"><p>Use <a class="el" href="classdtPathCorridor.html#a3970b6cd229731debe6beb41d9885463" title="Attempts to optimize the path if the specified point is visible from the current position.">dtPathCorridor::optimizePathVisibility()</a> to optimize the agent path. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fa89c6f7f2e49254e775cb2b85259a0a93"></a>DT_CROWD_OPTIMIZE_TOPO&#160;</td><td class="fielddoc"><p>Use <a class="el" href="classdtPathCorridor.html#a69288d28ab5d23b2c2654e45c5a33c25" title="Attempts to optimize the path using a local area search.">dtPathCorridor::optimizePathTopology()</a> to optimize the agent path. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga01a53c9d76d1b61678ab1944dfbfac55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga01a53c9d76d1b61678ab1944dfbfac55">&#9670;&nbsp;</a></span>dtAllocCrowd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classdtCrowd.html">dtCrowd</a>* dtAllocCrowd </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a crowd object using the Detour allocator. </p>
<dl class="section return"><dt>Returns</dt><dd>A crowd object that is ready for initialization, or null on failure. </dd></dl>
</div>
</div>
<a id="ga9475313642645070e78c359e0fc02b7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9475313642645070e78c359e0fc02b7a">&#9670;&nbsp;</a></span>dtFreeCrowd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void dtFreeCrowd </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classdtCrowd.html">dtCrowd</a> *&#160;</td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Frees the specified crowd object using the Detour allocator. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>A crowd object allocated using <a class="el" href="group__crowd.html#ga01a53c9d76d1b61678ab1944dfbfac55" title="Allocates a crowd object using the Detour allocator.">dtAllocCrowd</a> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="gaca1e1a9395fd4406de712dc4330c60c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaca1e1a9395fd4406de712dc4330c60c5">&#9670;&nbsp;</a></span>DT_CROWD_MAX_OBSTAVOIDANCE_PARAMS</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int DT_CROWD_MAX_OBSTAVOIDANCE_PARAMS = 8</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The maximum number of crowd avoidance configurations supported by the crowd manager. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structdtObstacleAvoidanceParams.html">dtObstacleAvoidanceParams</a>, <a class="el" href="classdtCrowd.html#a96338b9a99e8d58a3051a9ce7934e8b1" title="Sets the shared avoidance configuration for the specified index.">dtCrowd::setObstacleAvoidanceParams()</a>, <a class="el" href="classdtCrowd.html#a4da076dabe04b63d801c63c99d2fb5bb" title="Gets the shared avoidance configuration for the specified index.">dtCrowd::getObstacleAvoidanceParams()</a>, <a class="el" href="structdtCrowdAgentParams.html#ae8be062f1d9616d17d8b536f7a501498" title="The index of the avoidance configuration to use for the agent.">dtCrowdAgentParams::obstacleAvoidanceType</a> </dd></dl>
</div>
</div>
<a id="ga1686003d07121541db2ee11074e1b3af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1686003d07121541db2ee11074e1b3af">&#9670;&nbsp;</a></span>DT_CROWD_MAX_QUERY_FILTER_TYPE</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int DT_CROWD_MAX_QUERY_FILTER_TYPE = 16</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The maximum number of query filter types supported by the crowd manager. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classdtQueryFilter.html" title="Defines polygon filtering and traversal costs for navigation mesh query operations.">dtQueryFilter</a>, <a class="el" href="classdtCrowd.html#ae712fb6e6e907454ec0a827d11957373" title="Gets the filter used by the crowd.">dtCrowd::getFilter()</a> <a class="el" href="classdtCrowd.html#a170a9c4cc9f88a7ee3d560abce9ad552" title="Gets the filter used by the crowd.">dtCrowd::getEditableFilter()</a>, <a class="el" href="structdtCrowdAgentParams.html#af5d15cba10237592b1766d7d82da1420" title="The index of the query filter used by this agent.">dtCrowdAgentParams::queryFilterType</a> </dd></dl>
</div>
</div>
<a id="gab745b43d81519294efcfe7449faff3de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab745b43d81519294efcfe7449faff3de">&#9670;&nbsp;</a></span>DT_CROWDAGENT_MAX_CORNERS</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int DT_CROWDAGENT_MAX_CORNERS = 4</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The maximum number of corners a crowd agent will look ahead in the path. </p>
<p>This value is used for sizing the crowd agent corner buffers. Due to the behavior of the crowd manager, the actual number of useful corners will be one less than this number. </p>
</div>
</div>
<a id="ga70106a906d993ec6c39ef91d81c0f40e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga70106a906d993ec6c39ef91d81c0f40e">&#9670;&nbsp;</a></span>DT_CROWDAGENT_MAX_NEIGHBOURS</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const int DT_CROWDAGENT_MAX_NEIGHBOURS = 6</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The maximum number of neighbors that a crowd agent can take into account for steering decisions. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
&nbsp;&nbsp;<a href="https://github.com/recastnavigation/recastnavigation">Project Home</a>
| <a href="./License.txt">Licence (ZLib)</a>
| Copyright 2009 Mikko Mononen
</ul>
</div>
</body>
</html>