1 /* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ 2 3 #ifndef _CAMERA_HANDLER_H 4 #define _CAMERA_HANDLER_H 5 6 #include <vector> 7 #include <map> 8 #include <string> 9 #include <stack> 10 11 #include "Console.h" 12 #include "Camera/CameraController.h" 13 #include "Game/Camera.h" 14 15 16 class CCameraHandler : public CommandReceiver 17 { 18 public: 19 typedef CCameraController::StateMap ViewData; 20 21 public: 22 CCameraHandler(); 23 ~CCameraHandler(); 24 25 void UpdateCam(); 26 void SetCameraMode(unsigned int mode); 27 void SetCameraMode(const std::string& mode); 28 void PushMode(); 29 void PopMode(); 30 void CameraTransition(float nsecs); 31 32 void ToggleState(); 33 void ToggleOverviewCamera(); 34 35 void SaveView(const std::string& name); 36 bool LoadView(const std::string& name); 37 38 int GetModeIndex(const std::string& modeName) const; 39 40 /** 41 * @brief write current camera settings in a vector 42 */ 43 void GetState(CCameraController::StateMap& sm) const; 44 45 /** 46 * @brief restore a camera state 47 * @param sm the state to set 48 * @return false when vector has wrong size or garbage data, true when aplied without errors 49 */ 50 bool SetState(const CCameraController::StateMap& sm); 51 GetCurrentController()52 CCameraController& GetCurrentController() { return *currCamCtrl; } GetCurrentControllerNum()53 int GetCurrentControllerNum() const { return currCamCtrlNum; } 54 const std::string GetCurrentControllerName() const; GetAvailableControllers()55 const std::vector<CCameraController*>& GetAvailableControllers() const { return camControllers; } 56 57 virtual void PushAction(const Action&); 58 59 enum { 60 CAMERA_MODE_FIRSTPERSON = 0, 61 CAMERA_MODE_OVERHEAD = 1, 62 CAMERA_MODE_TOTALWAR = 2, 63 CAMERA_MODE_ROTOVERHEAD = 3, 64 CAMERA_MODE_FREE = 4, 65 CAMERA_MODE_SMOOTH = 5, 66 CAMERA_MODE_ORBIT = 6, 67 CAMERA_MODE_OVERVIEW = 7, 68 CAMERA_MODE_LAST = 8, 69 }; 70 71 private: 72 std::vector<CCameraController*> camControllers; 73 std::stack<unsigned int> controllerStack; 74 CCameraController* currCamCtrl; 75 unsigned int currCamCtrlNum; 76 77 struct { 78 float3 pos; 79 float3 dir; 80 float fov; 81 } startCam; 82 83 float cameraTimeStart; 84 float cameraTimeEnd; 85 float cameraTimeFactor; 86 float cameraTimeExponent; 87 88 bool LoadViewData(const ViewData& vd); 89 std::map<std::string, ViewData> views; 90 std::map<std::string, unsigned int> nameMap; 91 }; 92 93 extern CCameraHandler* camHandler; 94 95 #endif // _CAMERA_HANDLER_H 96