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.
194 lines
4.7 KiB
194 lines
4.7 KiB
5 years ago
|
//========= 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
|