| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- //============================================================================================
- // Spirenkov Maxim
- //============================================================================================
- // BaseCamera
- //============================================================================================
- #ifndef _BaseCamera_h_
- #define _BaseCamera_h_
- #include "BaseCamera.h"
- #include "..\..\..\common_h\mission\Mission.h"
- #include "CamerasBlender.h"
- #define MOP_CAM_TARGET MOP_STRINGC("Target", "Player", "Mission object ID for use it as target") \
- MOP_POSITIONC("Target point", Vector(0.0f, 1.5f, 0.0f), "Relative local target point in object system")
- #define MOP_CAM_FOV MOP_FLOATEXC("Camera FOV", 1.25f*180.0f/PI, 10.0f, 140.0f, "Camera frustum angle in degrees")
- #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")
- #define MOP_CAM_LEVEL MOP_LONGEXC("Level", 0, 0, 10, "Set current priority level for camera")
- #define MOP_CAM_ACTIVATE MOP_BOOLC("Active", true, "Active camera in start mission time")
- #define MOP_CAM_PREVIEW MOP_BOOLC("Edit preview", false, "Preview camera from editor viewport")
- #define MOP_CAM_DRAWCAMERA MOP_BOOLC("Draw Camera", true, "Draw Camera in Edit Mode")
- #define MOP_CAM_STD MOP_CAM_TARGET \
- MOP_CAM_FOV \
- MOP_CAM_BLENDER \
- MOP_CAM_LEVEL \
- MOP_CAM_ACTIVATE \
- MOP_CAM_PREVIEW \
- MOP_CAM_DRAWCAMERA
- #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 "
- #define CAMERAS_GROUP MG_CAMERA
- class CameraController;
- class BaseCamera : public MissionObject
- {
- //--------------------------------------------------------------------------------------------
- public:
- bool debugdraw_enbled;
- BaseCamera();
- virtual ~BaseCamera();
- //--------------------------------------------------------------------------------------------
- //Generic
- //--------------------------------------------------------------------------------------------
- protected:
- //--------------------------------------------------------------------------------------------
- //Параметры камеры
- //--------------------------------------------------------------------------------------------
- //Получить позицию камеры
- virtual void GetCameraPosition(Vector & position) = null;
- //Получить точку наблюдения камеры
- virtual bool GetCameraTarget(const Vector & position, Vector & target_pos, Vector & up);
- //--------------------------------------------------------------------------------------------
- //Работа с камерой
- //--------------------------------------------------------------------------------------------
- //Прочитать параметры идущие перед стандартным
- virtual bool CameraPreCreate(MOPReader & reader){ return true; };
- //Прочитать параметры идущие после стандартных
- virtual bool CameraPostCreate(MOPReader & reader){ return true; };
- //Сбросить состояние камеры в исходное
- virtual void Reset() { blender.ResetShock(); fovChgCurTime = -1.0f; fov = init_fov; fCurFOV = init_fov; fovLast = fov; };
- //Обновить состояние камеры
- virtual void WorkUpdate(float dltTime){};
- //Обновить состояние для предпросмотра
- virtual void SelectedUpdate(float dltTime);
- //Нарисовать дополнительную информацию нри селекте
- virtual void SelectedDraw(float dltTime);
- //--------------------------------------------------------------------------------------------
- protected:
- //Инициализировать объект
- virtual bool Create(MOPReader & reader);
- //Получить матрицу объекта
- virtual Matrix & GetMatrix(Matrix & mtx);
-
- public:
- virtual void InitParams();
- //Обработчик команд для объекта
- virtual void Command(const char * id, dword numParams, const char ** params);
- virtual long GetCameraLevel() { return level; };
- //Получить FoV камеры
- virtual float GetCameraFoV();
- //Пересоздать объект
- virtual void Restart();
- virtual bool CheckCommand(const char * id);
- //Отрисовка в выделеном режиме
- virtual void _cdecl DebugDraw(float dltTime, long level);
- void GetTargetPos(Vector& pos) { pos = targetPos; };
- void GetBlenderMatrix(Matrix& mat, float fov) { blender.GetMatrix(mat,fov,true); };
- virtual bool AllowZooming() { return true; };
- protected:
- //Инициализировать объект
- virtual bool EditMode_Create(MOPReader & reader);
- //Обновить параметры
- virtual bool EditMode_Update(MOPReader & reader);
- //Получить размеры описывающего ящика
- virtual void EditMode_GetSelectBox(Vector & min, Vector & max);
- #ifndef MIS_STOP_EDIT_FUNCS
- //Выделить объект
- virtual void EditMode_Select(bool isSelect);
- #endif
- //Активировать/деактивировать объект
- virtual void Activate(bool isActive);
- //Автоматический расчет FOV
- virtual void AutoFocusCam(float dltTime);
- //Работа
- virtual void _cdecl Work(float dltTime, long level);
- //Работа в режиме редактирования
- virtual void _cdecl EditModeWork(float dltTime, long level);
- //virtual void _cdecl CameraDebugDraw(float dltTime, long level);
- //Отрисовка в выделеном режиме
- virtual void _cdecl EditModeDrawSelected(float dltTime, long level);
-
- protected:
- //Получить указатель на контролер камеры
- CameraController * GetCameraController();
- protected:
-
- /*
- float debugCamFov;
- float debugInputFov;
- float debugFovToPrint;
- */
- MOSafePointer target; //Наблюдение за целью
- ConstString targetID; //Идентификатор цели
- Vector targetPos; //Локальная позиция
- float fov; //Угол зрения
- long level; //Уровень исполнения камеры
- MissionCamerasBlender blender; //Блендер позиций
- IGMXScene * model; //Моделька для редактирования
- bool isPreview; //Вид из камеры
- bool bDrawCamera;
- MOSafePointer attachedobj;
- string attachedobjID;
- dword attachedobjIDhash;
- Matrix cam_offset;
- Matrix offset_matrix;
- int attach_mode;
- bool AutoZoom;
- float fCurFOV;
- float fNeededDist;
- float fMinAngle;
- float fMaxAngle;
- float fMinSpeedAngle;
- float fMaxSpeedAngle;
-
- float fovChgTime;
- float fovChgCurTime;
- float fovChgTarget;
- float fovLast;
- float init_fov;
- };
- #endif
|