You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.2 KiB
132 lines
3.2 KiB
//========= 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
|
|
|