player_controller.xml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?xml version="1.0" ?>
  2. <diagram author="Glenn De Jonghe" name="Player Tank">
  3. <description>
  4. Handling the player tank.
  5. </description>
  6. <inport name="engine" />
  7. <inport name="input" />
  8. <outport name="gui" />
  9. <class name="Main" default="true">
  10. <attribute name="tank" type="PlayerTank"/>
  11. <method name="Main">
  12. <parameter type="PlayerTank" name="tank"></parameter>
  13. <body>
  14. self.tank = tank
  15. </body>
  16. </method>
  17. <relationships>
  18. <association class="Cannon" name="cannon" min="1" max="1"/>
  19. <association class="Body" name="body" min="1" max="1"/>
  20. </relationships>
  21. <scxml initial="state_1">
  22. <state id="state_1">
  23. <transition target="../state_2">
  24. <raise event="create_instance" scope="CD">
  25. <parameter expr="'cannon'"/>
  26. <parameter expr="'Cannon'"/>
  27. <parameter expr="SELF.tank"/>
  28. </raise>
  29. </transition>
  30. </state>
  31. <state id="state_2">
  32. <transition event="instance_created" target="../state_3"/>
  33. </state>
  34. <state id="state_3">
  35. <transition target="../state_4">
  36. <raise event="create_instance" scope="CD">
  37. <parameter expr="'body'"/>
  38. <parameter expr="'Body'"/>
  39. <parameter expr="SELF.tank"/>
  40. </raise>
  41. </transition>
  42. </state>
  43. <state id="state_4">
  44. <transition event="instance_created" target="../end">
  45. <raise event="start_instance" scope="CD">
  46. <parameter expr="'cannon'"/>
  47. </raise>
  48. <raise event="start_instance" scope="CD">
  49. <parameter expr="'body'"/>
  50. </raise>
  51. </transition>
  52. </state>
  53. <state id="end"/>
  54. </scxml>
  55. </class>
  56. <class name="Cannon">
  57. <attribute name="tank" type="PlayerTank"/>
  58. <attribute name="reload_time" type="float"/>
  59. <method name="Cannon">
  60. <parameter type="PlayerTank" name="tank"></parameter>
  61. <body>
  62. self.tank = tank
  63. self.reload_time = tank.getReloadTime()
  64. </body>
  65. </method>
  66. <scxml>
  67. <parallel id="container">
  68. <state id="rotating" initial="none">
  69. <state id="none">
  70. <transition port="input" event="cannon-left-pressed" target="../left"/>
  71. <transition port="input" event="cannon-right-pressed" target="../right"/>
  72. </state>
  73. <state id="left">
  74. <transition port="input" event="cannon-left-released" target="../none"/>
  75. <transition port="input" event="cannon-right-pressed" target="../both"/>
  76. <transition port="engine" event="update" target=".">
  77. <script>
  78. self.tank.turnCannonLeft()
  79. </script>
  80. </transition>
  81. </state>
  82. <state id="both">
  83. <transition port="input" event="cannon-left-released" target="../right"/>
  84. <transition port="input" event="cannon-right-released" target="../left"/>
  85. </state>
  86. <state id="right">
  87. <transition port="input" event="cannon-left-pressed" target="../both"/>
  88. <transition port="input" event="cannon-right-released" target="../none"/>
  89. <transition port="engine" event="update" target=".">
  90. <script>
  91. self.tank.turnCannonRight()
  92. </script>
  93. </transition>
  94. </state>
  95. </state>
  96. <state id="shoot" initial="hold">
  97. <state id="hold">
  98. <transition port="input" event="shoot-pressed" target="../shoot">
  99. <raise event="shoot"/>
  100. </transition>
  101. </state>
  102. <state id="shoot">
  103. <transition port="input" event="shoot-released" target="../hold"/>
  104. <transition event="loaded" target=".">
  105. <raise event="shoot"/>
  106. </transition>
  107. </state>
  108. </state>
  109. <state id="ammo" initial="loaded">
  110. <state id="loaded">
  111. <transition event="shoot" target="../unloaded">
  112. <script>
  113. self.tank.shoot()
  114. </script>
  115. <raise port="gui" event="reloading"/>
  116. </transition>
  117. </state>
  118. <state id="unloaded">
  119. <transition after="SELF.reload_time" target="../loaded">
  120. <raise event="loaded"/>
  121. <raise port="gui" event="loaded"/>
  122. </transition>
  123. </state>
  124. </state>
  125. </parallel>
  126. </scxml>
  127. </class>
  128. <class name="Body">
  129. <attribute name="tank" type="PlayerTank"/>
  130. <method name="Body">
  131. <parameter type="PlayerTank" name="tank"></parameter>
  132. <body>
  133. self.tank = tank
  134. </body>
  135. </method>
  136. <scxml>
  137. <parallel id="container">
  138. <state id="horizontal" initial="none">
  139. <state id="none">
  140. <transition port="input" event="left-pressed" target="../left"/>
  141. <transition port="input" event="right-pressed" target="../right"/>
  142. </state>
  143. <state id="left">
  144. <transition port="input" event="left-released" target="../none"/>
  145. <transition port="input" event="right-pressed" target="../both"/>
  146. <transition port="engine" event="update" target=".">
  147. <script>
  148. self.tank.turnLeft()
  149. </script>
  150. </transition>
  151. </state>
  152. <state id="both">
  153. <transition port="input" event="left-released" target="../right"/>
  154. <transition port="input" event="right-released" target="../left"/>
  155. </state>
  156. <state id="right">
  157. <transition port="input" event="left-pressed" target="../both"/>
  158. <transition port="input" event="right-released" target="../none"/>
  159. <transition port="engine" event="update" target=".">
  160. <script>
  161. self.tank.turnRight()
  162. </script>
  163. </transition>
  164. </state>
  165. </state>
  166. <state id="vertical" initial="none">
  167. <state id="none">
  168. <transition port="input" event="down-pressed" target="../down"/>
  169. <transition port="input" event="up-pressed" target="../up"/>
  170. </state>
  171. <state id="down">
  172. <transition port="input" event="down-released" target="../none"/>
  173. <transition port="input" event="up-pressed" target="../both"/>
  174. <transition port="engine" event="update" target=".">
  175. <script>
  176. self.tank.moveDown()
  177. </script>
  178. </transition>
  179. </state>
  180. <state id="both">
  181. <transition port="input" event="down-released" target="../up"/>
  182. <transition port="input" event="up-released" target="../down"/>
  183. </state>
  184. <state id="up">
  185. <transition port="input" event="down-pressed" target="../both"/>
  186. <transition port="input" event="up-released" target="../none"/>
  187. <transition port="engine" event="update" target=".">
  188. <script>
  189. self.tank.moveUp()
  190. </script>
  191. </transition>
  192. </state>
  193. </state>
  194. </parallel>
  195. </scxml>
  196. </class>
  197. </diagram>