//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef CAMERA3D_H #define CAMERA3D_H #pragma once #include "Tool3D.h" #include "ToolInterface.h" #include "utlvector.h" #pragma warning(push, 1) #pragma warning(disable:4701 4702 4530) #include #pragma warning(pop) class CChunkFile; class CSaveInfo; enum ChunkFileResult_t; // // Defines a camera position/look pair. // struct CAMSTRUCT { // index 0 = camera origin, 1 = pos look to Vector position[2]; }; class Camera3D : public Tool3D { public: Camera3D(void); enum SNCTYPE { sncNext = -1, sncFirst = 0, sncPrev = 1 }; int GetActiveCamera(void) { return m_iActiveCamera; } void GetCameraPos(Vector &vViewPos, Vector &vLookAt); void UpdateActiveCamera(Vector &vViewPos, Vector &vLookAt); // // Serialization. // const char *GetVMFChunkName() { return "cameras"; } ChunkFileResult_t LoadVMF(CChunkFile *pFile); ChunkFileResult_t SaveVMF(CChunkFile *pFile, CSaveInfo *pSaveInfo); void SerializeRMF(std::fstream &file, BOOL fIsStoring); // // Tool3D implementation. // virtual bool IsEmpty(void); virtual void SetEmpty(void); virtual unsigned int GetConstraints(unsigned int nKeyFlags); // // CBaseTool implementation. // virtual ToolID_t GetToolID(void) { return TOOL_CAMERA; } virtual bool OnKeyDown2D(CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags); virtual bool OnLMouseDown2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnLMouseUp2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnMouseMove2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnLMouseDown3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnLMouseUp3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnRMouseDown3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnRMouseUp3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint); virtual bool OnKeyDown3D(CMapView3D *pView, UINT nChar, UINT nRepCnt, UINT nFlags); virtual void RenderTool2D(CRender2D *pRender); protected: // // Tool3D implementation. // virtual int HitTest(CMapView *pView, const Vector2D &vPoint, bool bTestHandles = false); virtual bool UpdateTranslation(const Vector &vUpdate, UINT flags = 0); virtual void FinishTranslation(bool bSave); private: int GetCameraCount() { return Cameras.Count(); } void AddCamera(CAMSTRUCT &pCamPos); void SetNextCamera(SNCTYPE next); void DeleteActiveCamera(void); void OnEscape(void); void EnsureMaxCameras(); static ChunkFileResult_t LoadCameraKeyCallback(const char *szKey, const char *szValue, CAMSTRUCT *pCam); static ChunkFileResult_t LoadCamerasKeyCallback(const char *szKey, const char *szValue, Camera3D *pCameras); static ChunkFileResult_t LoadCameraCallback(CChunkFile *pFile, Camera3D *pCameras); CUtlVector Cameras; // The cameras that have been created. CAMSTRUCT m_MoveCamera; enum { MovePos = 0, MoveLook = 1, }; int m_iActiveCamera; int m_nMovePositionIndex; Vector m_vOrgPos; }; #endif // CAMERA3D_H