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.
147 lines
4.5 KiB
147 lines
4.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef MAPSTUDIOMODEL_H |
|
#define MAPSTUDIOMODEL_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "MapHelper.h" |
|
#include "StudioModel.h" |
|
|
|
|
|
class CRender2D; |
|
class CRender3D; |
|
|
|
|
|
class CMapStudioModel : public CMapHelper |
|
{ |
|
public: |
|
|
|
// |
|
// Factories. |
|
// |
|
static CMapClass *CreateMapStudioModel(CHelperInfo *pHelperInfo, CMapEntity *pParent); |
|
static CMapStudioModel *CreateMapStudioModel(const char *pszModelPath, bool bOrientedBBox, bool bReversePitch); |
|
|
|
static void AdvanceAnimation(float flInterval); |
|
|
|
// |
|
// Construction/destruction: |
|
// |
|
CMapStudioModel(void); |
|
~CMapStudioModel(void); |
|
|
|
DECLARE_MAPCLASS(CMapStudioModel,CMapHelper) |
|
|
|
void CalcBounds(BOOL bFullUpdate = FALSE); |
|
|
|
virtual CMapClass *Copy(bool bUpdateDependencies); |
|
virtual CMapClass *CopyFrom(CMapClass *pFrom, bool bUpdateDependencies); |
|
|
|
void Initialize(void); |
|
|
|
void Render2D(CRender2D *pRender); |
|
void Render3D(CRender3D *pRender); |
|
|
|
void GetAngles(QAngle& pfAngles); |
|
void SetAngles(QAngle& fAngles); |
|
|
|
void OnParentKeyChanged(const char* szKey, const char* szValue); |
|
|
|
bool RenderPreload(CRender3D *pRender, bool bNewContext); |
|
|
|
int SerializeRMF(std::fstream &File, BOOL bRMF); |
|
int SerializeMAP(std::fstream &File, BOOL bRMF); |
|
|
|
static void SetRenderDistance(float fRenderDistance); |
|
static void EnableAnimation(BOOL bEnable); |
|
|
|
bool IsVisualElement(void) { return(true); } |
|
|
|
bool ShouldRenderLast(); |
|
|
|
const char* GetDescription() { return("Studio model"); } |
|
|
|
int GetFrame(void); |
|
void SetFrame(int nFrame); |
|
|
|
int GetSequence(void); |
|
int GetSequenceCount(void); |
|
void GetSequenceName(int nIndex, char *szName); |
|
void SetSequence(int nIndex); |
|
|
|
// Returns the index of the sequence (does a case-insensitive search). |
|
// Returns -1 if the sequence doesn't exist. |
|
int GetSequenceIndex( const char *pSequenceName ) const; |
|
|
|
protected: |
|
|
|
inline float ComputeFade( CRender3D *pRender ) const; |
|
inline float ComputeDistanceFade( CRender3D *pRender ) const; |
|
inline float ComputeScreenFade( CRender3D *pRender ) const; |
|
|
|
void GetRenderAngles(QAngle &Angles); |
|
|
|
// |
|
// Implements CMapAtom transformation functions. |
|
// |
|
void DoTransform(const VMatrix &matrix); |
|
|
|
inline void ReversePitch(bool bReversePitch); |
|
inline void SetOrientedBounds(bool bOrientedBounds); |
|
|
|
StudioModel *m_pStudioModel; // Pointer to a studio model in the model cache. |
|
QAngle m_Angles; // Euler angles of this studio model. |
|
float m_flPitch; // Pitch (stored separately for lights -- yuck!) |
|
bool m_bPitchSet; |
|
|
|
int m_Skin; // the model skin |
|
|
|
bool m_bOrientedBounds; // Whether the bounding box should consider the orientation of the model. |
|
// Note that this is not a true oriented bounding box, but an axial box |
|
// indicating the extents of the oriented model. |
|
|
|
bool m_bReversePitch; // Lights negate pitch, so models representing light sources in Hammer |
|
// must do so as well. |
|
|
|
bool m_bScreenSpaceFade; // If true, min & max dist are pixel size in screen space. |
|
float m_flFadeScale; // Multiplied by distance to camera before calculating fade. |
|
float m_flFadeMinDist; // The distance/pixels at which this model is fully visible. |
|
float m_flFadeMaxDist; // The distance/pixels at which this model is fully invisible. |
|
int m_iSolid; // The collision setting of this model: 0 = not solid, 2 = bounding box, 6 = vphysics |
|
|
|
// |
|
// Data that is common to all studio models. |
|
// |
|
static float m_fRenderDistance; // Distance beyond which studio models render as bounding boxes. |
|
static BOOL m_bAnimateModels; // Whether to animate studio models. |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets whether this object has an oriented or axial bounding box. |
|
// Note that this is not a true oriented bounding box, but an axial box |
|
// indicating the extents of the oriented model. |
|
//----------------------------------------------------------------------------- |
|
void CMapStudioModel::SetOrientedBounds(bool bOrientedBounds) |
|
{ |
|
m_bOrientedBounds = bOrientedBounds; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets whether this object negates pitch. |
|
//----------------------------------------------------------------------------- |
|
void CMapStudioModel::ReversePitch(bool bReversePitch) |
|
{ |
|
m_bReversePitch = bReversePitch; |
|
} |
|
|
|
|
|
#endif // MAPSTUDIOMODEL_H
|
|
|