player_controller.xml 8.8 KB

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