classgameplay_1_1_a_i_state_machine.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <title>AIStateMachine Class Reference</title>
  7. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  8. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  9. <link href="custom.css" rel="stylesheet" type="text/css" />
  10. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  11. <script type="text/javascript" src="jquery.js"></script>
  12. <script type="text/javascript" src="search/search.js"></script>
  13. <script type="text/javascript">
  14. $(document).ready(function() { searchBox.OnSelectItem(0); });
  15. </script>
  16. </head>
  17. <body>
  18. <div id="top"><!-- do not remove this div! -->
  19. <table class="header" border="0">
  20. <tbody>
  21. <tr>
  22. <td id="logo"><a href="http://gameplay3d.io/"><img src="images/logo.png" alt="gameplay" border="0" height="64px"/></a></td>
  23. <td width="100%"/>
  24. <td><a href="http://gameplay3d.io/"><span class="button">overview</span></a></td><td width="12px"/>
  25. <td><a href="https://github.com/gameplay3d/GamePlay/wiki"><span class="button">wiki</span></a></td><td width="12px"/>
  26. <td><a href="http://gameplay3d.github.com/GamePlay/api/index.html"><span class="button">api&nbsp;reference</span></a></td><td width="12px"/>
  27. <td><a href="https://github.com/gameplay3d/GamePlay"><span class="button">download</span></a></td>
  28. </tr>
  29. </tbody>
  30. </table>
  31. <!-- Generated by Doxygen 1.7.6.1 -->
  32. <script type="text/javascript">
  33. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  34. </script>
  35. <div id="navrow1" class="tabs">
  36. <ul class="tablist">
  37. <li><a href="index.html"><span>Main&#160;Page</span></a></li>
  38. <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
  39. <li>
  40. <div id="MSearchBox" class="MSearchBoxInactive">
  41. <span class="left">
  42. <img id="MSearchSelect" src="search/mag_sel.png"
  43. onmouseover="return searchBox.OnSearchSelectShow()"
  44. onmouseout="return searchBox.OnSearchSelectHide()"
  45. alt=""/>
  46. <input type="text" id="MSearchField" value="Search" accesskey="S"
  47. onfocus="searchBox.OnSearchFieldFocus(true)"
  48. onblur="searchBox.OnSearchFieldFocus(false)"
  49. onkeyup="searchBox.OnSearchFieldChange(event)"/>
  50. </span><span class="right">
  51. <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
  52. </span>
  53. </div>
  54. </li>
  55. </ul>
  56. </div>
  57. <div id="navrow2" class="tabs2">
  58. <ul class="tablist">
  59. <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
  60. <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
  61. <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
  62. <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
  63. </ul>
  64. </div>
  65. <!-- window showing the filter options -->
  66. <div id="MSearchSelectWindow"
  67. onmouseover="return searchBox.OnSearchSelectShow()"
  68. onmouseout="return searchBox.OnSearchSelectHide()"
  69. onkeydown="return searchBox.OnSearchSelectKey(event)">
  70. <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a></div>
  71. <!-- iframe showing the search results (closed by default) -->
  72. <div id="MSearchResultsWindow">
  73. <iframe src="javascript:void(0)" frameborder="0"
  74. name="MSearchResults" id="MSearchResults">
  75. </iframe>
  76. </div>
  77. <div id="nav-path" class="navpath">
  78. <ul>
  79. <li class="navelem"><b>gameplay</b> </li>
  80. <li class="navelem"><a class="el" href="classgameplay_1_1_a_i_state_machine.html">AIStateMachine</a> </li>
  81. </ul>
  82. </div>
  83. </div>
  84. <div class="header">
  85. <div class="summary">
  86. <a href="#pub-methods">Public Member Functions</a> </div>
  87. <div class="headertitle">
  88. <div class="title">gameplay::AIStateMachine Class Reference</div> </div>
  89. </div><!--header-->
  90. <div class="contents">
  91. <!-- doxytag: class="gameplay::AIStateMachine" -->
  92. <p><code>#include &lt;AIStateMachine.h&gt;</code></p>
  93. <p><a href="classgameplay_1_1_a_i_state_machine-members.html">List of all members.</a></p>
  94. <table class="memberdecls">
  95. <tr><td colspan="2"><h2><a name="pub-methods"></a>
  96. Public Member Functions</h2></td></tr>
  97. <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgameplay_1_1_a_i_agent.html">AIAgent</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#a08ee93ba3ed65aee7a97529dbdff24d8">getAgent</a> () const </td></tr>
  98. <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#a529c47a950791a47c947e5ab312ff8be">addState</a> (const char *id)</td></tr>
  99. <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#abe55041cba5e256c9ec21c8f49a94853">addState</a> (<a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *state)</td></tr>
  100. <tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#aff0cc3defda356f840bd107d57990d0e">removeState</a> (<a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *state)</td></tr>
  101. <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#ace2bcbc691e632e81c5ea2efc9d882e3">getState</a> (const char *id) const </td></tr>
  102. <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#a1642b512a2c9b145448b44278107fd2a">getActiveState</a> () const </td></tr>
  103. <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#a91750e879146f9f3a40dd576b5ad1f1e">setState</a> (const char *id)</td></tr>
  104. <tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgameplay_1_1_a_i_state_machine.html#ab413de56ce6a0c982266308a4c7cedfe">setState</a> (<a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *state)</td></tr>
  105. </table>
  106. <hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
  107. <div class="textblock"><p>Defines a simple AI state machine that can be used to program logic for an <a class="el" href="classgameplay_1_1_a_i_agent.html">AIAgent</a> in a game.</p>
  108. <p>A state machine uses <a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> objects to represent different states of an object in the game. The state machine provides access to the current state of an AI agent and it controls state changes as well. When a new state is set, the stateExited event will be called for the previous state, the stateEntered event will be called for the new state and then the stateUpdate event will begin to be called each frame while the new state is active.</p>
  109. <p>Communication of state changes is facilitated through the <a class="el" href="classgameplay_1_1_a_i_message.html">AIMessage</a> class. Messages are dispatched by the <a class="el" href="classgameplay_1_1_a_i_controller.html">AIController</a> and can be used for purposes other than state changes as well. Messages may be sent to the state machines of any other agents in a game and can contain any arbitrary information. This mechanism provides a simple, flexible and easily debuggable method for communicating between AI objects in a game. </p>
  110. </div><hr/><h2>Member Function Documentation</h2>
  111. <a class="anchor" id="a529c47a950791a47c947e5ab312ff8be"></a><!-- doxytag: member="gameplay::AIStateMachine::addState" ref="a529c47a950791a47c947e5ab312ff8be" args="(const char *id)" -->
  112. <div class="memitem">
  113. <div class="memproto">
  114. <table class="memname">
  115. <tr>
  116. <td class="memname"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a>* <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a529c47a950791a47c947e5ab312ff8be">gameplay::AIStateMachine::addState</a> </td>
  117. <td>(</td>
  118. <td class="paramtype">const char *&#160;</td>
  119. <td class="paramname"><em>id</em></td><td>)</td>
  120. <td></td>
  121. </tr>
  122. </table>
  123. </div>
  124. <div class="memdoc">
  125. <p>Creates and adds a new state to the state machine.</p>
  126. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  127. <table class="params">
  128. <tr><td class="paramname">id</td><td>ID of the new state.</td></tr>
  129. </table>
  130. </dd>
  131. </dl>
  132. <dl class="return"><dt><b>Returns:</b></dt><dd>The newly created and added state. </dd></dl>
  133. </div>
  134. </div>
  135. <a class="anchor" id="abe55041cba5e256c9ec21c8f49a94853"></a><!-- doxytag: member="gameplay::AIStateMachine::addState" ref="abe55041cba5e256c9ec21c8f49a94853" args="(AIState *state)" -->
  136. <div class="memitem">
  137. <div class="memproto">
  138. <table class="memname">
  139. <tr>
  140. <td class="memname">void <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a529c47a950791a47c947e5ab312ff8be">gameplay::AIStateMachine::addState</a> </td>
  141. <td>(</td>
  142. <td class="paramtype"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td>
  143. <td class="paramname"><em>state</em></td><td>)</td>
  144. <td></td>
  145. </tr>
  146. </table>
  147. </div>
  148. <div class="memdoc">
  149. <p>Adds a state to the state machine.</p>
  150. <p>The specified state may be shared by other state machines. Its reference count is increased while it is held by this state machine.</p>
  151. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  152. <table class="params">
  153. <tr><td class="paramname">state</td><td>The state to add. </td></tr>
  154. </table>
  155. </dd>
  156. </dl>
  157. </div>
  158. </div>
  159. <a class="anchor" id="a1642b512a2c9b145448b44278107fd2a"></a><!-- doxytag: member="gameplay::AIStateMachine::getActiveState" ref="a1642b512a2c9b145448b44278107fd2a" args="() const " -->
  160. <div class="memitem">
  161. <div class="memproto">
  162. <table class="memname">
  163. <tr>
  164. <td class="memname"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a>* <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a1642b512a2c9b145448b44278107fd2a">gameplay::AIStateMachine::getActiveState</a> </td>
  165. <td>(</td>
  166. <td class="paramname"></td><td>)</td>
  167. <td> const</td>
  168. </tr>
  169. </table>
  170. </div>
  171. <div class="memdoc">
  172. <p>Returns the active state for this state machine.</p>
  173. <dl class="return"><dt><b>Returns:</b></dt><dd>The active state for this state machine. </dd></dl>
  174. </div>
  175. </div>
  176. <a class="anchor" id="a08ee93ba3ed65aee7a97529dbdff24d8"></a><!-- doxytag: member="gameplay::AIStateMachine::getAgent" ref="a08ee93ba3ed65aee7a97529dbdff24d8" args="() const " -->
  177. <div class="memitem">
  178. <div class="memproto">
  179. <table class="memname">
  180. <tr>
  181. <td class="memname"><a class="el" href="classgameplay_1_1_a_i_agent.html">AIAgent</a>* <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a08ee93ba3ed65aee7a97529dbdff24d8">gameplay::AIStateMachine::getAgent</a> </td>
  182. <td>(</td>
  183. <td class="paramname"></td><td>)</td>
  184. <td> const</td>
  185. </tr>
  186. </table>
  187. </div>
  188. <div class="memdoc">
  189. <p>Returns the <a class="el" href="classgameplay_1_1_a_i_agent.html">AIAgent</a> that owns this state machine.</p>
  190. <dl class="return"><dt><b>Returns:</b></dt><dd>The <a class="el" href="classgameplay_1_1_a_i_agent.html">AIAgent</a> that owns this state machine. </dd></dl>
  191. </div>
  192. </div>
  193. <a class="anchor" id="ace2bcbc691e632e81c5ea2efc9d882e3"></a><!-- doxytag: member="gameplay::AIStateMachine::getState" ref="ace2bcbc691e632e81c5ea2efc9d882e3" args="(const char *id) const " -->
  194. <div class="memitem">
  195. <div class="memproto">
  196. <table class="memname">
  197. <tr>
  198. <td class="memname"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a>* <a class="el" href="classgameplay_1_1_a_i_state_machine.html#ace2bcbc691e632e81c5ea2efc9d882e3">gameplay::AIStateMachine::getState</a> </td>
  199. <td>(</td>
  200. <td class="paramtype">const char *&#160;</td>
  201. <td class="paramname"><em>id</em></td><td>)</td>
  202. <td> const</td>
  203. </tr>
  204. </table>
  205. </div>
  206. <div class="memdoc">
  207. <p>Returns a state registered with this state machine.</p>
  208. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  209. <table class="params">
  210. <tr><td class="paramname">id</td><td>The ID of the state to return.</td></tr>
  211. </table>
  212. </dd>
  213. </dl>
  214. <dl class="return"><dt><b>Returns:</b></dt><dd>The state with the given ID, or NULL if no such state exists. </dd></dl>
  215. </div>
  216. </div>
  217. <a class="anchor" id="aff0cc3defda356f840bd107d57990d0e"></a><!-- doxytag: member="gameplay::AIStateMachine::removeState" ref="aff0cc3defda356f840bd107d57990d0e" args="(AIState *state)" -->
  218. <div class="memitem">
  219. <div class="memproto">
  220. <table class="memname">
  221. <tr>
  222. <td class="memname">void <a class="el" href="classgameplay_1_1_a_i_state_machine.html#aff0cc3defda356f840bd107d57990d0e">gameplay::AIStateMachine::removeState</a> </td>
  223. <td>(</td>
  224. <td class="paramtype"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td>
  225. <td class="paramname"><em>state</em></td><td>)</td>
  226. <td></td>
  227. </tr>
  228. </table>
  229. </div>
  230. <div class="memdoc">
  231. <p>Removes a state from the state machine.</p>
  232. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  233. <table class="params">
  234. <tr><td class="paramname">state</td><td>The state to remove. </td></tr>
  235. </table>
  236. </dd>
  237. </dl>
  238. </div>
  239. </div>
  240. <a class="anchor" id="a91750e879146f9f3a40dd576b5ad1f1e"></a><!-- doxytag: member="gameplay::AIStateMachine::setState" ref="a91750e879146f9f3a40dd576b5ad1f1e" args="(const char *id)" -->
  241. <div class="memitem">
  242. <div class="memproto">
  243. <table class="memname">
  244. <tr>
  245. <td class="memname"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a>* <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a91750e879146f9f3a40dd576b5ad1f1e">gameplay::AIStateMachine::setState</a> </td>
  246. <td>(</td>
  247. <td class="paramtype">const char *&#160;</td>
  248. <td class="paramname"><em>id</em></td><td>)</td>
  249. <td></td>
  250. </tr>
  251. </table>
  252. </div>
  253. <div class="memdoc">
  254. <p>Changes the state of this state machine to the given state.</p>
  255. <p>If no state with the given ID exists within this state machine, this method does nothing.</p>
  256. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  257. <table class="params">
  258. <tr><td class="paramname">id</td><td>The ID of the new state.</td></tr>
  259. </table>
  260. </dd>
  261. </dl>
  262. <dl class="return"><dt><b>Returns:</b></dt><dd>The new state, or NULL if no matching state could be found. </dd></dl>
  263. </div>
  264. </div>
  265. <a class="anchor" id="ab413de56ce6a0c982266308a4c7cedfe"></a><!-- doxytag: member="gameplay::AIStateMachine::setState" ref="ab413de56ce6a0c982266308a4c7cedfe" args="(AIState *state)" -->
  266. <div class="memitem">
  267. <div class="memproto">
  268. <table class="memname">
  269. <tr>
  270. <td class="memname">bool <a class="el" href="classgameplay_1_1_a_i_state_machine.html#a91750e879146f9f3a40dd576b5ad1f1e">gameplay::AIStateMachine::setState</a> </td>
  271. <td>(</td>
  272. <td class="paramtype"><a class="el" href="classgameplay_1_1_a_i_state.html">AIState</a> *&#160;</td>
  273. <td class="paramname"><em>state</em></td><td>)</td>
  274. <td></td>
  275. </tr>
  276. </table>
  277. </div>
  278. <div class="memdoc">
  279. <p>Changes the state of this state machine to the given state.</p>
  280. <p>If the given state is not registered with this state machine, this method does nothing.</p>
  281. <dl class="params"><dt><b>Parameters:</b></dt><dd>
  282. <table class="params">
  283. <tr><td class="paramname">state</td><td>The new state.</td></tr>
  284. </table>
  285. </dd>
  286. </dl>
  287. <dl class="return"><dt><b>Returns:</b></dt><dd>true if the state is successfully changed, false otherwise. </dd></dl>
  288. </div>
  289. </div>
  290. </div><!-- contents -->
  291. <!-- window showing the filter options -->
  292. <div id="MSearchSelectWindow"
  293. onmouseover="return searchBox.OnSearchSelectShow()"
  294. onmouseout="return searchBox.OnSearchSelectHide()"
  295. onkeydown="return searchBox.OnSearchSelectKey(event)">
  296. <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a></div>
  297. <!-- iframe showing the search results (closed by default) -->
  298. <div id="MSearchResultsWindow">
  299. <iframe src="javascript:void(0)" frameborder="0"
  300. name="MSearchResults" id="MSearchResults">
  301. </iframe>
  302. </div>
  303. <hr class="footer"/><address class="footer"><small>
  304. Generated on Sat Jan 24 2015 15:29:41 for gameplay by &#160;<a href="http://www.doxygen.org/index.html">
  305. <img class="footer" src="doxygen.png" alt="doxygen"/>
  306. </a> 1.7.6.1
  307. </small></address>
  308. </body>
  309. </html>