demo_character.hpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /* License Notice:
  2. **
  3. ** This program is free software: you can redistribute it and/or modify
  4. ** it under the terms of the GNU General Public License as published by
  5. ** the Free Software Foundation, either version 3 of the License, or
  6. ** (at your option) any later version.
  7. ** This program is distributed in the hope that it will be useful,
  8. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. ** GNU General Public License for more details.
  11. ** You should have received a copy of the GNU General Public License
  12. ** along with this program. If not, see <https://www.gnu.org/licenses/>.
  13. */
  14. /**
  15. * @file demo_character.hpp
  16. * @author TooOld2Rock'nRoll
  17. * @date 2024/03/06
  18. * @brief A example character for the ArcadeFighter Library.
  19. *
  20. * @todo Use the loading thread for resources....
  21. * @todo When jumping from running, use air spin!!
  22. * @todo Import character statistics from a file.
  23. * @todo Import character animations from a file.
  24. */
  25. #ifndef _DEMO_CHARACTER_HPP_
  26. #define _DEMO_CHARACTER_HPP_
  27. /*---- Includes ----*/
  28. #include "event_manager.hpp"
  29. #include "character.hpp"
  30. #include "global.hpp"
  31. /*---- Enums ----*/
  32. extern "C" {
  33. typedef enum _extended_commands_
  34. {
  35. LIGHT_PUNCH = character_commands_t::_command_max, //<-- your enumeration will start where character_commands ended
  36. HARD_PUNCH,
  37. _extend_command_max
  38. } extended_character_commands_e;
  39. typedef enum _extended_char_state_
  40. {
  41. ROLLING = character_state_t::_state_max, //<-- enumeration will start where character_state ended
  42. CROUCH_WALKING,
  43. _extend_state_max
  44. } extended_character_state_e;
  45. }//end extern "C"
  46. /*---- Class Declaration ----*/
  47. /**
  48. * @brief A example of how a character could be implemented extending the Character class.
  49. * @extends Character
  50. */
  51. class DemoCharacter : public Character
  52. {
  53. public:
  54. enum animation_list_e
  55. {
  56. LOADING = 0,
  57. OPENING_ANIME, //no animation yet!
  58. WIN, //no animation yet!
  59. LOSE,
  60. IDLE,
  61. WALKING,
  62. RUNNING,
  63. DASHING, //no animation yet!
  64. ROLLING,
  65. CROUCH_IDLE,
  66. CROUCH_WALKING,
  67. JUMP,
  68. AIR_SPIN,
  69. LAND,
  70. BLOCK,
  71. JAB,
  72. CROSS,
  73. _anime_max ///< Just to keep count of enum size.
  74. };//end animation_list
  75. enum audio_effect_list_e
  76. {
  77. SOUND_LIGHT_PUNCH = 0,
  78. SOUND_HARD_PUNCH,
  79. SOUND_JUMP,
  80. SOUND_LAND,
  81. _audio_effect_max ///< Just to keep count of enum size.
  82. };//end audio_effect_list_e
  83. private:
  84. Audio::Effect *punch = nullptr;
  85. void _populateDefaultCommandList ();
  86. void _populateDefaultStatesList ();
  87. protected:
  88. public:
  89. DemoCharacter (DomainID_t domain_id, Shader *sh);
  90. virtual void load () override final;
  91. };//END DemoCharacter
  92. /*---- Custom Commands ----*/
  93. /** @brief Command that makes the Character walk to the left of the screen. */
  94. class WalkLeftCommand : public Command<DemoCharacter>
  95. { virtual void execute (DemoCharacter &puppet, double delta_t) override; };
  96. /** @brief Command that makes the Character walk to the right of the screen. */
  97. class WalkRightCommand : public Command<DemoCharacter>
  98. { virtual void execute (DemoCharacter &puppet, double delta_t) override; };
  99. /** @brief Command that makes the Character jump. */
  100. class JumpCommand : public Command<DemoCharacter>
  101. { virtual void execute (DemoCharacter &puppet, double delta_t) override; };
  102. /** @brief Command that makes the Character attack with a light punch. */
  103. class LightPunchCommand : public Command<DemoCharacter>
  104. { void execute (DemoCharacter &puppet, double delta_t) override final; };
  105. /** @brief Command that makes the Character attack with a hard punch. */
  106. class HardPunchCommand : public Command<DemoCharacter>
  107. { void execute (DemoCharacter &puppet, double delta_t) override final; };
  108. /*---- Custom States ----*/
  109. /** @brief A state to uso on loading screens. */
  110. class LoadingState : public State<DemoCharacter, character_state_t>
  111. {
  112. public:
  113. void enter (DemoCharacter &puppet) override final
  114. { puppet.setActiveSprite (DemoCharacter::animation_list_e::LOADING); }
  115. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final
  116. { return true; }
  117. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final
  118. { /* ignore all */ }
  119. void update (DemoCharacter &puppet, double delta_t) override final
  120. { puppet.getActiveSprite().update (delta_t); }
  121. };//END IdleState
  122. /** @brief A basic Idle state. */
  123. class IdleState : public State<DemoCharacter, character_state_t>
  124. {
  125. public:
  126. void enter (DemoCharacter &puppet) override final
  127. { puppet.setActiveSprite (DemoCharacter::animation_list_e::IDLE); }
  128. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final
  129. { return true; }
  130. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  131. void update (DemoCharacter &puppet, double delta_t) override final;
  132. };//END IdleState
  133. /** @brief A basic walking state. */
  134. class WalkingState : public State<DemoCharacter, character_state_t>
  135. {
  136. public:
  137. void enter (DemoCharacter &puppet) override final;
  138. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final;
  139. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  140. void update (DemoCharacter &puppet, double delta_t) override final;
  141. };//END WalkingState
  142. /** @brief A basic crouch state. */
  143. class CrouchState : public State<DemoCharacter, character_state_t>
  144. {
  145. public:
  146. void enter (DemoCharacter &puppet) override final
  147. { puppet.setActiveSprite (DemoCharacter::animation_list_e::CROUCH_IDLE); }
  148. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final;
  149. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  150. void update (DemoCharacter &puppet, double delta_t) override final;
  151. };//END CrouchState
  152. /** @brief A basic jumping state. */
  153. class JumpingState : public State<DemoCharacter, character_state_t>
  154. {
  155. public:
  156. void enter (DemoCharacter &puppet) override final
  157. { puppet.setActiveSprite (DemoCharacter::animation_list_e::JUMP); }
  158. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final;
  159. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  160. void update (DemoCharacter &puppet, double delta_t) override final;
  161. };//END CrouchState
  162. /** @brief A basic attack state. */
  163. class AttackState : public State<DemoCharacter, character_state_t>
  164. {
  165. public:
  166. void enter (DemoCharacter &puppet) override final { /*changes depending on the attack command!*/ }
  167. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final;
  168. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  169. void update (DemoCharacter &puppet, double delta_t) override final;
  170. };//END AttackState
  171. /** @brief A basic blocking state. */
  172. class BlockState : public State<DemoCharacter, character_state_t>
  173. {
  174. public:
  175. void enter (DemoCharacter &puppet) override final
  176. { puppet.setActiveSprite (DemoCharacter::animation_list_e::BLOCK); }
  177. bool checkStateChange (DemoCharacter &puppet, character_state_t new_state) override final;
  178. void handleInput (DemoCharacter &puppet, input_map_t input, key_state input_st, double delta_t) override final;
  179. void update (DemoCharacter &puppet, double delta_t) override final;
  180. };//END BlockState
  181. #endif //_DEMO_CHARACTER_HPP_