Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

OpenRaider.h 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /*!
  2. * \file include/OpenRaider.h
  3. * \brief Main Game Singleton
  4. *
  5. * \author Mongoose
  6. */
  7. #ifndef _OPENRAIDER_H_
  8. #define _OPENRAIDER_H_
  9. #include <map>
  10. #include "Config.h"
  11. #include "TombRaider.h"
  12. #include "Camera.h"
  13. #include "Render.h"
  14. #include "Sound.h"
  15. #include "SDLSystem.h"
  16. #include "World.h"
  17. #include "templates/List.h"
  18. #include "templates/Vector.h"
  19. #include "utils/strings.h"
  20. /*!
  21. * \brief OpenRaider key events.
  22. *
  23. * 0 event reserved for console in System.
  24. */
  25. typedef enum {
  26. OpenRaiderKey_console = 1, //!< Toggle console
  27. OpenRaiderKey_attack, //!< Attack
  28. OpenRaiderKey_forward, //!< Move forward
  29. OpenRaiderKey_left, //!< Move left
  30. OpenRaiderKey_right, //!< Move right
  31. OpenRaiderKey_backward, //!< Move backward
  32. OpenRaiderKey_jump, //!< Jump
  33. OpenRaiderKey_tiltUp, //!< Tilt camera up
  34. OpenRaiderKey_tiltDown, //!< Tilt camera down
  35. OpenRaiderKey_panLeft, //!< Pan camera left
  36. OpenRaiderKey_panRight, //!< Pan camera right
  37. OpenRaiderKey_crouch //!< Crouch
  38. } OpenRaider_KeyEvent;
  39. typedef enum {
  40. OpenRaider_ShowFPS = (1 << 0),
  41. OpenRaider_DebugMap = (1 << 1),
  42. OpenRaider_DebugModel = (1 << 2),
  43. OpenRaider_EnableSound = (1 << 3),
  44. OpenRaider_DumpTexture = (1 << 4),
  45. OpenRaider_FullScreen = (1 << 5),
  46. OpenRaider_Loading = (1 << 6)
  47. } OpenRaider_Flags;
  48. /*!
  49. * \brief Main Game Singleton
  50. */
  51. class OpenRaider : public SDLSystem {
  52. public:
  53. /*!
  54. * \brief Constructs or returns the OpenRaider Singleton
  55. * \returns OpenRaider Singleton
  56. */
  57. static OpenRaider *Instance();
  58. /*!
  59. * \brief Deconstructs an object of OpenRaider
  60. */
  61. ~OpenRaider();
  62. /*!
  63. * \brief Initialize the Game
  64. */
  65. void start();
  66. /*!
  67. * \brief Resizes game window and updated renderer
  68. * \param width new width
  69. * \param height new height
  70. */
  71. virtual void resize(unsigned int width, unsigned int height);
  72. /*!
  73. * \brief Mouse motion input
  74. * \param x relative x motion
  75. * \param y relative y motion
  76. */
  77. void handleMouseMotionEvent(float x, float y);
  78. /*!
  79. * \brief Receives `Event` bound to `Cmd` from `Key` press
  80. * \param key valid keyboard code
  81. */
  82. void handleBoundKeyPressEvent(unsigned int key);
  83. /*!
  84. * \brief Receives `Event` bound to `Cmd` from `Key` release
  85. * \param key valid keyboard code
  86. */
  87. void handleBoundKeyReleaseEvent(unsigned int key);
  88. /*!
  89. * \brief Executes valid command based on keyword
  90. * \param command valid keyword optionally followed by space separated arguments
  91. * \param mode current type or resource mode
  92. */
  93. void handleCommand(char *command, unsigned int mode);
  94. /*!
  95. * \brief Receives `Key` code from text input in console mode
  96. * \param key valid keyboard code
  97. * \param mod valid modifier code
  98. */
  99. void handleConsoleKeyPressEvent(unsigned int key, unsigned int mod);
  100. /*!
  101. * \brief Executes command associated with key press, if any
  102. * \param key valid keyboard code
  103. * \param mod valid modifier code
  104. */
  105. void handleKeyPressEvent(unsigned int key, unsigned int mod);
  106. /*!
  107. * \brief Executes command associated with key release, if any
  108. * \param key valid keyboard code
  109. * \param mod valid modifier code
  110. */
  111. void handleKeyReleaseEvent(unsigned int key, unsigned int mod);
  112. /*!
  113. * \brief Pass a time frame and render a new frame
  114. */
  115. void gameFrame();
  116. /*!
  117. * \brief Outputs message in game console
  118. * \param dump_stdout if true, also print to stdout
  119. * \param format printf() style format string
  120. */
  121. void print(bool dump_stdout, const char *format, ...) __attribute__((format(printf, 3, 4)));
  122. protected:
  123. /*!
  124. * \brief Constructs an object of OpenRaider
  125. */
  126. OpenRaider();
  127. private:
  128. void consoleCommand(char *cmd);
  129. void soundEvent(int type, int id, vec3_t pos, vec3_t angles);
  130. //void entityEvent(entity_t &e, RaiderEvent event);
  131. void processPakSounds();
  132. /*!
  133. * \brief Loads and positions level sounds and music.
  134. *
  135. * Sound system has to be initialized.
  136. */
  137. void initSound();
  138. /*!
  139. * \brief Generates textures or mipmaps for fonts, splash,
  140. * external particles.
  141. */
  142. void initTextures();
  143. /*!
  144. * \brief Generates tombraider textures or mipmaps for sprites,
  145. * rooms and models.
  146. */
  147. void processTextures();
  148. /*!
  149. * \brief Generates render sprite sequences
  150. */
  151. void processSprites();
  152. void processMoveables();
  153. void processMoveable(int index, int i, int *ent, List <skeletal_model_t *> &cache2, List <unsigned int> &cache, int object_id);
  154. /*!
  155. * \brief Generates render mesh and any textures needed
  156. * for the specified model.
  157. * \param index valid model index
  158. */
  159. void processModel(int index);
  160. /*!
  161. * \brief Generates render mesh and any textures needed
  162. * for the specified room
  163. * \param index valid room index
  164. */
  165. void processRoom(int index);
  166. /*!
  167. * \brief Loads validated level pak from diskfile using maplist
  168. * \param filename level pak file name
  169. */
  170. void loadLevel(char *filename);
  171. void loadPakFolderRecursive(const char *dir);
  172. void menuMapListMove(char dir, bool show);
  173. static OpenRaider *mInstance; //!< Singleton use
  174. TombRaider m_tombraider; //!< Tombraider data support
  175. Sound mSound; //!< 3d Audio support
  176. Render m_render; //!< Rendering support
  177. Camera m_camera; //!< Client camera support
  178. GLString *mText; //!< Hook to textbox like output
  179. // RC vars
  180. unsigned int mMode[8]; //!< Translate System's mode ids to OR's
  181. unsigned int m_flags; //!< Set options by flags
  182. int m_testSFX; //!< Used for mixed channel sound tests
  183. float m_mouseX, m_mouseY; //!< XY axis rotation deltas
  184. unsigned int m_texOffset; //!< Offset of TombRaider textures in list
  185. unsigned int mLevelTextureOffset;
  186. // Game vars
  187. Vector <char *> mMusicList; //!< List of game level music
  188. Vector <char *> mMapList; //!< List of game maps
  189. char m_mapName[32]; //!< Current map filename
  190. char *m_pakDir; //!< Current pak directory
  191. char *m_audioDir; //!< Current audio directory
  192. char *m_homeDir; //!< Current home directory
  193. };
  194. #endif