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.
193 lines
4.7 KiB
193 lines
4.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef FACEPOSER_MODELS_H |
|
#define FACEPOSER_MODELS_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
class StudioModel; |
|
|
|
#include "mxbitmaptools.h" |
|
|
|
typedef unsigned int CRC32_t; |
|
|
|
class IFaceposerModels |
|
{ |
|
public: |
|
IFaceposerModels(); |
|
virtual ~IFaceposerModels(); |
|
|
|
virtual int Count( void ) const; |
|
virtual char const *GetModelName( int index ); |
|
virtual char const *GetModelFileName( int index ); |
|
virtual int GetActiveModelIndex( void ) const; |
|
virtual char const *GetActiveModelName( void ); |
|
virtual StudioModel *GetActiveStudioModel( void ); |
|
virtual void ForceActiveModelIndex( int index ); |
|
virtual void UnForceActiveModelIndex(); |
|
virtual int FindModelByFilename( char const *filename ); |
|
|
|
virtual int LoadModel( char const *filename ); |
|
virtual void FreeModel( int index ); |
|
|
|
virtual void CloseAllModels( void ); |
|
|
|
virtual StudioModel *GetStudioModel( int index ); |
|
virtual CStudioHdr *GetStudioHeader( int index ); |
|
virtual int GetIndexForStudioModel( StudioModel *model ); |
|
|
|
virtual int GetModelIndexForActor( char const *actorname ); |
|
virtual StudioModel *GetModelForActor( char const *actorname ); |
|
|
|
virtual char const *GetActorNameForModel( int modelindex ); |
|
virtual void SetActorNameForModel( int modelindex, char const *actorname ); |
|
|
|
virtual int CountVisibleModels( void ); |
|
virtual void ShowModelIn3DView( int modelindex, bool show ); |
|
virtual bool IsModelShownIn3DView( int modelindex ); |
|
|
|
virtual void SaveModelList( void ); |
|
virtual void LoadModelList( void ); |
|
|
|
virtual void ReleaseModels( void ); |
|
virtual void RestoreModels( void ); |
|
|
|
//virtual void RefreshModels( void ); |
|
|
|
virtual void CheckResetFlexes( void ); |
|
virtual void ClearOverlaysSequences( void ); |
|
|
|
virtual mxbitmapdata_t *GetBitmapForSequence( int modelindex, int sequence ); |
|
|
|
virtual void RecreateAllAnimationBitmaps( int modelindex ); |
|
virtual void RecreateAnimationBitmap( int modelindex, int sequence ); |
|
|
|
virtual void CreateNewBitmap( int modelindex, char const *pchBitmapFilename, int sequence, int nSnapShotSize, bool bZoomInOnFace, class CExpression *pExpression, mxbitmapdata_t *bitmap ); |
|
|
|
virtual int CountActiveSources(); |
|
|
|
virtual void SetSolveHeadTurn( int solve ); |
|
|
|
virtual void ClearModelTargets( bool force = false ); |
|
|
|
private: |
|
class CFacePoserModel |
|
{ |
|
public: |
|
CFacePoserModel( char const *modelfile, StudioModel *model ); |
|
~CFacePoserModel(); |
|
|
|
void LoadBitmaps(); |
|
void FreeBitmaps(); |
|
mxbitmapdata_t *GetBitmapForSequence( int sequence ); |
|
|
|
const char *GetBitmapChecksum( int sequence ); |
|
CRC32_t GetBitmapCRC( int sequence ); |
|
const char *GetBitmapFilename( int sequence ); |
|
void RecreateAllAnimationBitmaps(); |
|
void RecreateAnimationBitmap( int sequence, bool reconcile ); |
|
|
|
|
|
void SetActorName( char const *actorname ) |
|
{ |
|
strcpy( m_szActorName, actorname ); |
|
} |
|
|
|
char const *GetActorName( void ) const |
|
{ |
|
return m_szActorName; |
|
} |
|
|
|
StudioModel *GetModel( void ) const |
|
{ |
|
return m_pModel; |
|
} |
|
|
|
char const *GetModelFileName( void ) const |
|
{ |
|
return m_szModelFileName; |
|
} |
|
|
|
char const *GetShortModelName( void ) const |
|
{ |
|
return m_szShortName; |
|
} |
|
|
|
void SetVisibleIn3DView( bool visible ) |
|
{ |
|
m_bVisibileIn3DView = visible; |
|
} |
|
|
|
bool GetVisibleIn3DView( void ) const |
|
{ |
|
return m_bVisibileIn3DView; |
|
} |
|
|
|
// For material system purposes |
|
void Release( void ); |
|
void Restore( void ); |
|
|
|
void Refresh( void ) |
|
{ |
|
// Forces a reload from disk |
|
Release(); |
|
Restore(); |
|
} |
|
|
|
void CreateNewBitmap( char const *pchBitmapFilename, int sequence, int nSnapShotSize, bool bZoomInOnFace, class CExpression *pExpression, mxbitmapdata_t *bitmap ); |
|
|
|
private: |
|
|
|
void LoadBitmapForSequence( mxbitmapdata_t *bitmap, int sequence ); |
|
|
|
void ReconcileAnimationBitmaps(); |
|
void BuildValidChecksums( CUtlRBTree< CRC32_t > &tree ); |
|
|
|
enum |
|
{ |
|
MAX_ACTOR_NAME = 64, |
|
MAX_MODEL_FILE = 128, |
|
MAX_SHORT_NAME = 32, |
|
}; |
|
|
|
char m_szActorName[ MAX_ACTOR_NAME ]; |
|
char m_szModelFileName[ MAX_MODEL_FILE ]; |
|
char m_szShortName[ MAX_SHORT_NAME ]; |
|
StudioModel *m_pModel; |
|
bool m_bVisibileIn3DView; |
|
|
|
struct AnimBitmap |
|
{ |
|
AnimBitmap() |
|
{ |
|
needsload = false; |
|
bitmap = 0; |
|
} |
|
bool needsload; |
|
mxbitmapdata_t *bitmap; |
|
}; |
|
|
|
CUtlVector< AnimBitmap * > m_AnimationBitmaps; |
|
bool m_bFirstBitmapLoad; |
|
}; |
|
|
|
CFacePoserModel *GetEntry( int index ); |
|
|
|
CUtlVector< CFacePoserModel * > m_Models; |
|
|
|
int m_nLastRenderFrame; |
|
int m_nForceModelIndex; |
|
}; |
|
|
|
extern IFaceposerModels *models; |
|
|
|
void EnableStickySnapshotMode( void ); |
|
void DisableStickySnapshotMode( void ); |
|
|
|
#endif // FACEPOSER_MODELS_H
|
|
|