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.
144 lines
3.9 KiB
144 lines
3.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#ifndef STUDIOMODEL_H |
|
#define STUDIOMODEL_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#ifndef byte |
|
typedef unsigned char byte; |
|
#endif // byte |
|
|
|
#include "hammer_mathlib.h" |
|
#include "studio.h" |
|
#include "utlvector.h" |
|
#include "datacache/imdlcache.h" |
|
#include "FileChangeWatcher.h" |
|
|
|
|
|
class StudioModel; |
|
class CMaterial; |
|
class CRender3D; |
|
class CRender2D; |
|
|
|
|
|
struct ModelCache_t |
|
{ |
|
StudioModel *pModel; |
|
char *pszPath; |
|
int nRefCount; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Defines an interface to a cache of studio models. |
|
//----------------------------------------------------------------------------- |
|
class CStudioModelCache |
|
{ |
|
public: |
|
|
|
static StudioModel *FindModel(const char *pszModelPath); |
|
static StudioModel *CreateModel(const char *pszModelPath); |
|
static void AddRef(StudioModel *pModel); |
|
static void Release(StudioModel *pModel); |
|
static void AdvanceAnimation(float flInterval); |
|
|
|
protected: |
|
|
|
static BOOL AddModel(StudioModel *pModel, const char *pszModelPath); |
|
static void RemoveModel(StudioModel *pModel); |
|
|
|
static ModelCache_t m_Cache[1024]; |
|
static int m_nItems; |
|
}; |
|
|
|
|
|
// Calling these will monitor the filesystem for changes to model files and automatically |
|
// incorporate changes to the models. |
|
void InitStudioFileChangeWatcher(); |
|
void UpdateStudioFileChangeWatcher(); |
|
|
|
|
|
class StudioModel |
|
{ |
|
public: |
|
|
|
static bool Initialize( void ); |
|
static void Shutdown( void ); // garymcthack - need to call this. |
|
|
|
StudioModel(void); |
|
~StudioModel(void); |
|
|
|
void FreeModel (); |
|
bool LoadModel( const char *modelname ); |
|
bool PostLoadModel ( const char *modelname ); |
|
void DrawModel3D( CRender3D *pRender, float flAlpha, bool bWireframe); |
|
void DrawModel2D( CRender2D *pRender, float flAlpha, bool bWireFrame); |
|
void AdvanceFrame( float dt ); |
|
|
|
void ExtractBbox( Vector &mins, Vector &maxs ); |
|
void ExtractClippingBbox( Vector &mins, Vector &maxs ); |
|
void ExtractMovementBbox( Vector &mins, Vector &maxs ); |
|
void RotateBbox( Vector &Mins, Vector &Maxs, const QAngle &Angles ); |
|
|
|
int SetSequence( int iSequence ); |
|
int GetSequence( void ); |
|
int GetSequenceCount( void ); |
|
void GetSequenceName( int nIndex, char *szName ); |
|
void GetSequenceInfo( float *pflFrameRate, float *pflGroundSpeed ); |
|
|
|
int SetBodygroup( int iGroup, int iValue ); |
|
int SetSkin( int iValue ); |
|
void SetOrigin( float x, float y, float z ); |
|
void GetOrigin( float &x, float &y, float &z ); |
|
void SetOrigin( const Vector &v ); |
|
void GetOrigin( Vector &v ); |
|
void SetAngles( QAngle& pfAngles ); |
|
bool IsTranslucent(); |
|
|
|
private: |
|
CStudioHdr *m_pStudioHdr; |
|
CStudioHdr *GetStudioHdr() const; |
|
studiohdr_t* GetStudioRenderHdr() const; |
|
studiohwdata_t* GetHardwareData(); |
|
|
|
// entity settings |
|
Vector m_origin; |
|
QAngle m_angles; |
|
int m_sequence; // sequence index |
|
float m_cycle; // pos in animation cycle |
|
int m_bodynum; // bodypart selection |
|
int m_skinnum; // skin group selection |
|
byte m_controller[MAXSTUDIOBONECTRLS]; // bone controllers |
|
float m_poseParameter[MAXSTUDIOPOSEPARAM]; // animation blending |
|
byte m_mouth; // mouth position |
|
char* m_pModelName; // model file name |
|
|
|
Vector *m_pPosePos; |
|
Quaternion *m_pPoseAng; |
|
|
|
// internal data |
|
MDLHandle_t m_MDLHandle; |
|
mstudiomodel_t *m_pModel; |
|
|
|
void SetUpBones ( bool bUpdatePose, matrix3x4_t* pBoneToWorld ); |
|
void SetupModel ( int bodypart ); |
|
|
|
void LoadStudioRender( void ); |
|
|
|
bool LoadVVDFile( const char *modelname ); |
|
bool LoadVTXFile( const char *modelname ); |
|
}; |
|
|
|
|
|
extern Vector g_vright; // needs to be set to viewer's right in order for chrome to work |
|
extern float g_lambert; // modifier for pseudo-hemispherical lighting |
|
|
|
|
|
#endif // STUDIOMODEL_H
|
|
|