source-engine/hammer/ToolCamera.h

133 lines
3.2 KiB
C
Raw Normal View History

2020-04-23 00:56:21 +08:00
//========= 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