|
|
//========= 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 <fstream>
#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<CAMSTRUCT> 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
|