BaseCamera.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. //============================================================================================
  2. // Spirenkov Maxim
  3. //============================================================================================
  4. // BaseCamera
  5. //============================================================================================
  6. #ifndef _BaseCamera_h_
  7. #define _BaseCamera_h_
  8. #include "BaseCamera.h"
  9. #include "..\..\..\common_h\mission\Mission.h"
  10. #include "CamerasBlender.h"
  11. #define MOP_CAM_TARGET MOP_STRINGC("Target", "Player", "Mission object ID for use it as target") \
  12. MOP_POSITIONC("Target point", Vector(0.0f, 1.5f, 0.0f), "Relative local target point in object system")
  13. #define MOP_CAM_FOV MOP_FLOATEXC("Camera FOV", 1.25f*180.0f/PI, 10.0f, 140.0f, "Camera frustum angle in degrees")
  14. #define MOP_CAM_BLENDER MOP_FLOATEXC("Blend time", 0.0f, 0.0f, 10.0f, "Blend time from last camera position to current when activate it")
  15. #define MOP_CAM_LEVEL MOP_LONGEXC("Level", 0, 0, 10, "Set current priority level for camera")
  16. #define MOP_CAM_ACTIVATE MOP_BOOLC("Active", true, "Active camera in start mission time")
  17. #define MOP_CAM_PREVIEW MOP_BOOLC("Edit preview", false, "Preview camera from editor viewport")
  18. #define MOP_CAM_DRAWCAMERA MOP_BOOLC("Draw Camera", true, "Draw Camera in Edit Mode")
  19. #define MOP_CAM_STD MOP_CAM_TARGET \
  20. MOP_CAM_FOV \
  21. MOP_CAM_BLENDER \
  22. MOP_CAM_LEVEL \
  23. MOP_CAM_ACTIVATE \
  24. MOP_CAM_PREVIEW \
  25. MOP_CAM_DRAWCAMERA
  26. #define CAMERA_COMMENT(a) a##" Aviable commands list:\n Target targetID - set new target\n Reset - reset camera\n Blendtime Blendtime - set camera blending time\n ShockRND amplitude time itencity - shock camera \n ShockRND1\n ShockRND2\n ShockRND3\n ShockRND4\n ShockRND5\n ShockRND_H amplitude time itencity - shock camera \n ShockRND_V amplitude time itencity - shock camera \n ShockPolar amplitude time itencity - shock camera \n ShockPolar1\n ShockPolar2\n ShockPolar3\n ShockPolar4\n ShockPolar5\n resetShock - reset camera shock\n Attach mo_name - attach camera to object\n Teleport mo_name - teleport camera to object\n setFov fov time - set new fov\n AutoFocusParams Dist MinAngle MaxAngle MinSpeedAngle MaxSpeedAngle - AutoFocus Parameters\n AutoFocusOn - Turn On AutoFocus \n AutoFocusOff - Turn Off AutoFocus \n CrazyOn - Turn On Crazy \n CrazyOff - Turn Off Crazy \n CrazyParams Amp Speed - Crazy Parameters\n TimeScale fTimeScale\n AccelTimeScale fTimeScaleAccel\n BloodPuff\n EnableMotionBlur\n DisableMotionBlur\n MotionBlurChgSpeed: fMB_delta\n MotionBlurParams fImageK, fAfterImageK\n ChangeDist - change RotatedCam distance\n ChangeMinVAngle - change RotatedCam MinVertAngle\n ChangeMaxVAngle - change RotatedCam MaxVertAngle\n LockTarget - change RotatedCam LockTarget\n "
  27. #define CAMERAS_GROUP MG_CAMERA
  28. class CameraController;
  29. class BaseCamera : public MissionObject
  30. {
  31. //--------------------------------------------------------------------------------------------
  32. public:
  33. bool debugdraw_enbled;
  34. BaseCamera();
  35. virtual ~BaseCamera();
  36. //--------------------------------------------------------------------------------------------
  37. //Generic
  38. //--------------------------------------------------------------------------------------------
  39. protected:
  40. //--------------------------------------------------------------------------------------------
  41. //Параметры камеры
  42. //--------------------------------------------------------------------------------------------
  43. //Получить позицию камеры
  44. virtual void GetCameraPosition(Vector & position) = null;
  45. //Получить точку наблюдения камеры
  46. virtual bool GetCameraTarget(const Vector & position, Vector & target_pos, Vector & up);
  47. //--------------------------------------------------------------------------------------------
  48. //Работа с камерой
  49. //--------------------------------------------------------------------------------------------
  50. //Прочитать параметры идущие перед стандартным
  51. virtual bool CameraPreCreate(MOPReader & reader){ return true; };
  52. //Прочитать параметры идущие после стандартных
  53. virtual bool CameraPostCreate(MOPReader & reader){ return true; };
  54. //Сбросить состояние камеры в исходное
  55. virtual void Reset() { blender.ResetShock(); fovChgCurTime = -1.0f; fov = init_fov; fCurFOV = init_fov; fovLast = fov; };
  56. //Обновить состояние камеры
  57. virtual void WorkUpdate(float dltTime){};
  58. //Обновить состояние для предпросмотра
  59. virtual void SelectedUpdate(float dltTime);
  60. //Нарисовать дополнительную информацию нри селекте
  61. virtual void SelectedDraw(float dltTime);
  62. //--------------------------------------------------------------------------------------------
  63. protected:
  64. //Инициализировать объект
  65. virtual bool Create(MOPReader & reader);
  66. //Получить матрицу объекта
  67. virtual Matrix & GetMatrix(Matrix & mtx);
  68. public:
  69. virtual void InitParams();
  70. //Обработчик команд для объекта
  71. virtual void Command(const char * id, dword numParams, const char ** params);
  72. virtual long GetCameraLevel() { return level; };
  73. //Получить FoV камеры
  74. virtual float GetCameraFoV();
  75. //Пересоздать объект
  76. virtual void Restart();
  77. virtual bool CheckCommand(const char * id);
  78. //Отрисовка в выделеном режиме
  79. virtual void _cdecl DebugDraw(float dltTime, long level);
  80. void GetTargetPos(Vector& pos) { pos = targetPos; };
  81. void GetBlenderMatrix(Matrix& mat, float fov) { blender.GetMatrix(mat,fov,true); };
  82. virtual bool AllowZooming() { return true; };
  83. protected:
  84. //Инициализировать объект
  85. virtual bool EditMode_Create(MOPReader & reader);
  86. //Обновить параметры
  87. virtual bool EditMode_Update(MOPReader & reader);
  88. //Получить размеры описывающего ящика
  89. virtual void EditMode_GetSelectBox(Vector & min, Vector & max);
  90. #ifndef MIS_STOP_EDIT_FUNCS
  91. //Выделить объект
  92. virtual void EditMode_Select(bool isSelect);
  93. #endif
  94. //Активировать/деактивировать объект
  95. virtual void Activate(bool isActive);
  96. //Автоматический расчет FOV
  97. virtual void AutoFocusCam(float dltTime);
  98. //Работа
  99. virtual void _cdecl Work(float dltTime, long level);
  100. //Работа в режиме редактирования
  101. virtual void _cdecl EditModeWork(float dltTime, long level);
  102. //virtual void _cdecl CameraDebugDraw(float dltTime, long level);
  103. //Отрисовка в выделеном режиме
  104. virtual void _cdecl EditModeDrawSelected(float dltTime, long level);
  105. protected:
  106. //Получить указатель на контролер камеры
  107. CameraController * GetCameraController();
  108. protected:
  109. /*
  110. float debugCamFov;
  111. float debugInputFov;
  112. float debugFovToPrint;
  113. */
  114. MOSafePointer target; //Наблюдение за целью
  115. ConstString targetID; //Идентификатор цели
  116. Vector targetPos; //Локальная позиция
  117. float fov; //Угол зрения
  118. long level; //Уровень исполнения камеры
  119. MissionCamerasBlender blender; //Блендер позиций
  120. IGMXScene * model; //Моделька для редактирования
  121. bool isPreview; //Вид из камеры
  122. bool bDrawCamera;
  123. MOSafePointer attachedobj;
  124. string attachedobjID;
  125. dword attachedobjIDhash;
  126. Matrix cam_offset;
  127. Matrix offset_matrix;
  128. int attach_mode;
  129. bool AutoZoom;
  130. float fCurFOV;
  131. float fNeededDist;
  132. float fMinAngle;
  133. float fMaxAngle;
  134. float fMinSpeedAngle;
  135. float fMaxSpeedAngle;
  136. float fovChgTime;
  137. float fovChgCurTime;
  138. float fovChgTarget;
  139. float fovLast;
  140. float init_fov;
  141. };
  142. #endif