initial
This commit is contained in:
151
hammer/studiomodel.h
Normal file
151
hammer/studiomodel.h
Normal file
@@ -0,0 +1,151 @@
|
||||
//========= Copyright <20> 1996-2005, 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;
|
||||
};
|
||||
|
||||
#define MAX_STUDIOMODELCACHE 2048
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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 ReloadModel( 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[MAX_STUDIOMODELCACHE];
|
||||
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, const Color &color, 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 );
|
||||
|
||||
void SetFrame( int nFrame );
|
||||
int GetMaxFrame( void );
|
||||
|
||||
int SetSequence( int iSequence );
|
||||
int GetSequence( void );
|
||||
int GetSequenceCount( void );
|
||||
void GetSequenceName( int nIndex, char *szName );
|
||||
void GetSequenceInfo( float *pflFrameRate, float *pflGroundSpeed );
|
||||
const char *GetModelName( void );
|
||||
int SetBodygroup( int iGroup, int iValue );
|
||||
int SetBodygroups( 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;
|
||||
QuaternionAligned *m_pPoseAng;
|
||||
|
||||
// internal data
|
||||
MDLHandle_t m_MDLHandle;
|
||||
mstudiomodel_t *m_pModel;
|
||||
|
||||
void SetUpBones ( bool bUpdatePose, matrix3x4a_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
|
||||
Reference in New Issue
Block a user