CameraMgr.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : LevelEdit *
  23. * *
  24. * $Archive:: /Commando/Code/Tools/LevelEdit/CameraMgr.h $*
  25. * *
  26. * Author:: Patrick Smith *
  27. * *
  28. * $Modtime:: 11/02/00 5:57p $*
  29. * *
  30. * $Revision:: 11 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #if defined(_MSC_VER)
  36. #pragma once
  37. #endif
  38. #ifndef __CAMERAMGR_H
  39. #define __CAMERAMGR_H
  40. #include "refcount.h"
  41. #include "utils.h"
  42. #include "rendobj.h"
  43. #include "assetmgr.h"
  44. #include "camera.h"
  45. #include "physcontrol.h"
  46. #include "hermitespline.h"
  47. // Forward declarations
  48. class NodeClass;
  49. class SoldierGameObj;
  50. class SoldierGameObjDef;
  51. /*class CamaraCharPhys : public CharPhysClass
  52. {
  53. public:
  54. CamaraCharPhys (void);
  55. virtual ~CamaraCharPhys (void);
  56. protected:
  57. RenderObjClass * m_pRenderObj;
  58. };*/
  59. ///////////////////////////////////////////////////////////////
  60. //
  61. // CameraMgr
  62. //
  63. ///////////////////////////////////////////////////////////////
  64. class CameraMgr
  65. {
  66. public:
  67. ///////////////////////////////////////////////////
  68. // Public constructors/destructors
  69. ///////////////////////////////////////////////////
  70. CameraMgr (void);
  71. virtual ~CameraMgr (void);
  72. ///////////////////////////////////////////////////
  73. // Public data types
  74. ///////////////////////////////////////////////////
  75. typedef enum
  76. {
  77. MODE_MOVE_PLANE = 0,
  78. MODE_MOVE_UPDOWN = 1,
  79. MODE_FLY_THROUGH = 2,
  80. MODE_WALK_THROUGH = 3,
  81. MODE_ROTATE_FREE = 4,
  82. MODE_ROTATE_X = 5,
  83. MODE_ROTATE_Y = 6,
  84. MODE_ROTATE_Z = 7,
  85. MODE_ORBIT = 8,
  86. MODE_FLYTO = 9,
  87. MODE_COUNT
  88. } CAMERA_MODE;
  89. typedef enum
  90. {
  91. CAMERA_FRONT = 1,
  92. CAMERA_BACK,
  93. CAMERA_TOP,
  94. CAMERA_BOTTOM,
  95. CAMERA_LEFT,
  96. CAMERA_RIGHT,
  97. CAMERA_COUNT
  98. } CAMERA_POS;
  99. ///////////////////////////////////////////////////
  100. // Public methods
  101. ///////////////////////////////////////////////////
  102. CameraMgr::CAMERA_MODE Get_Camera_Mode (void) const { return m_CameraMode; }
  103. void Set_Camera_Mode (CAMERA_MODE new_mode);
  104. void Update_Camera (float deltax, float deltay);
  105. void Update_Camera_Animation (void);
  106. void On_Frame (void);
  107. Matrix3D Get_Character_TM (void);
  108. //
  109. // Position methods
  110. //
  111. void Set_Camera_Pos (CAMERA_POS position);
  112. void Set_Transform (const Matrix3D &transform);
  113. void Set_Position (const Vector3 &position);
  114. void Move_Fwd (void) {}
  115. void Move_Bkwd (void) {}
  116. void Turn_Left (void) {}
  117. void Turn_Right (void) {}
  118. void Look_Up (void) {}
  119. void Look_Dn (void) {}
  120. void Look_Center (void) {}
  121. void Increase_Speed (void);
  122. void Decrease_Speed (void);
  123. void Level_Camera (void);
  124. void Goto_Node (NodeClass *node);
  125. void Goto_Group (GroupMgrClass *pgroup);
  126. void Fly_To_Transform (const Matrix3D &transform);
  127. //
  128. // Inline accessors
  129. //
  130. CameraClass * Get_Camera (void) const { return m_pCamera; }
  131. //CamaraCharPhys * Get_Walkthru_Character (void) const { return m_pWalkThroughPhys; }
  132. float Get_Speed_Modifier (void) const { return m_SpeedModifier; }
  133. protected:
  134. ///////////////////////////////////////////////////
  135. // Friends
  136. ///////////////////////////////////////////////////
  137. friend LRESULT CALLBACK fnCameraKeyboardHook (int code, WPARAM wParam, LPARAM lParam);
  138. friend class CLevelEditView;
  139. ///////////////////////////////////////////////////
  140. // Protected methods
  141. ///////////////////////////////////////////////////
  142. void Init_Camera (void);
  143. void Auto_Level (void);
  144. void Update_Fly_To (void);
  145. static void Update_Camera_MOVE_ZOOM (CameraClass &camera, float deltax, float deltay);
  146. static void Update_Camera_MOVE_PLANE (CameraClass &camera, float deltax, float deltay);
  147. static void Update_Camera_FLY_THROUGH (CameraClass &camera, float deltax, float deltay);
  148. static void Update_Camera_WALK_THROUGH (CameraClass &camera, float deltax, float deltay);
  149. static void Update_Camera_ROTATE_FREE (CameraClass &camera, float deltax, float deltay);
  150. static void Update_Camera_ROTATE_X (CameraClass &camera, float deltax, float deltay);
  151. static void Update_Camera_ROTATE_Y (CameraClass &camera, float deltax, float deltay);
  152. static void Update_Camera_ROTATE_Z (CameraClass &camera, float deltax, float deltay);
  153. static void Update_Camera_ORBIT (CameraClass &camera, float deltax, float deltay);
  154. static void Update_Camera_FLY_TO (CameraClass &camera, float deltax, float deltay);
  155. ///////////////////////////////////////////////////
  156. // Protected data types
  157. ///////////////////////////////////////////////////
  158. typedef void (*UPDATE_CAMERA_FN) (CameraClass &camera, float deltax, float deltay);
  159. ///////////////////////////////////////////////////
  160. // Static member data
  161. ///////////////////////////////////////////////////
  162. static bool _pKeyboardState[256];
  163. static UPDATE_CAMERA_FN _pfnUpdateMethods[CAMERA_MODE::MODE_COUNT];
  164. static HHOOK _hHook;
  165. private:
  166. ///////////////////////////////////////////////////
  167. // Private member data
  168. ///////////////////////////////////////////////////
  169. bool m_bAutoLevel;
  170. CameraClass * m_pCamera;
  171. CAMERA_MODE m_CameraMode;
  172. Matrix3D m_AutoLevelInitalMatrix;
  173. Matrix3D m_AutoLevelEndMatrix;
  174. double m_AutoLevelPercent;
  175. //CamaraCharPhys * m_pWalkThroughPhys;
  176. PhysControllerClass m_VJoystick;
  177. float m_SpeedModifier;
  178. HermiteSpline3DClass m_FlyToSpline;
  179. Matrix3D m_FlyToStartTransform;
  180. Matrix3D m_FlyToEndTransform;
  181. DWORD m_FlyToStartTime;
  182. SoldierGameObj * m_WalkThruObj;
  183. SoldierGameObjDef * m_WalkThruDef;
  184. };
  185. #endif //__CAMERAMGR_H