//========= 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