Counter Strike : Global Offensive Source Code
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.
|
|
//========= Copyright � 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
|