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.
238 lines
5.4 KiB
238 lines
5.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef BASEMODELPANEL_H |
|
#define BASEMODELPANEL_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <vgui/IScheme.h> |
|
#include <vgui_controls/ImagePanel.h> |
|
#include <vgui_controls/EditablePanel.h> |
|
#include "GameEventListener.h" |
|
#include "KeyValues.h" |
|
|
|
class C_SceneEntity; |
|
|
|
|
|
class CModelPanelModel : public C_BaseFlex |
|
{ |
|
public: |
|
CModelPanelModel(){} |
|
DECLARE_CLASS( CModelPanelModel, C_BaseFlex ); |
|
|
|
virtual bool IsMenuModel() const{ return true; } |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CModelPanelModelAnimation |
|
{ |
|
public: |
|
CModelPanelModelAnimation() |
|
{ |
|
m_pszName = NULL; |
|
m_pszSequence = NULL; |
|
m_pszActivity = NULL; |
|
m_pPoseParameters = NULL; |
|
m_bDefault = false; |
|
} |
|
|
|
~CModelPanelModelAnimation() |
|
{ |
|
if ( m_pszName && m_pszName[0] ) |
|
{ |
|
delete [] m_pszName; |
|
m_pszName = NULL; |
|
} |
|
|
|
if ( m_pszSequence && m_pszSequence[0] ) |
|
{ |
|
delete [] m_pszSequence; |
|
m_pszSequence = NULL; |
|
} |
|
|
|
if ( m_pszActivity && m_pszActivity[0] ) |
|
{ |
|
delete [] m_pszActivity; |
|
m_pszActivity = NULL; |
|
} |
|
|
|
if ( m_pPoseParameters ) |
|
{ |
|
m_pPoseParameters->deleteThis(); |
|
m_pPoseParameters = NULL; |
|
} |
|
} |
|
|
|
public: |
|
const char *m_pszName; |
|
const char *m_pszSequence; |
|
const char *m_pszActivity; |
|
KeyValues *m_pPoseParameters; |
|
bool m_bDefault; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CModelPanelAttachedModelInfo |
|
{ |
|
public: |
|
CModelPanelAttachedModelInfo() |
|
{ |
|
m_pszModelName = NULL; |
|
m_nSkin = 0; |
|
} |
|
|
|
~CModelPanelAttachedModelInfo() |
|
{ |
|
if ( m_pszModelName && m_pszModelName[0] ) |
|
{ |
|
delete [] m_pszModelName; |
|
m_pszModelName = NULL; |
|
} |
|
} |
|
|
|
public: |
|
const char *m_pszModelName; |
|
int m_nSkin; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CModelPanelModelInfo |
|
{ |
|
public: |
|
CModelPanelModelInfo() |
|
: m_mapBodygroupValues( DefLessFunc( int ) ) |
|
{ |
|
m_pszModelName = NULL; |
|
m_pszModelName_HWM = NULL; |
|
m_nSkin = -1; |
|
m_vecAbsAngles.Init(); |
|
m_vecOriginOffset.Init(); |
|
m_vecFramedOriginOffset.Init(); |
|
m_bUseSpotlight = false; |
|
} |
|
|
|
~CModelPanelModelInfo() |
|
{ |
|
if ( m_pszModelName && m_pszModelName[0] ) |
|
{ |
|
delete [] m_pszModelName; |
|
m_pszModelName = NULL; |
|
} |
|
|
|
if ( m_pszModelName_HWM && m_pszModelName_HWM[0] ) |
|
{ |
|
delete [] m_pszModelName_HWM; |
|
m_pszModelName_HWM = NULL; |
|
} |
|
|
|
if ( m_pszVCD && m_pszVCD[0] ) |
|
{ |
|
delete [] m_pszVCD; |
|
m_pszVCD = NULL; |
|
} |
|
|
|
m_Animations.PurgeAndDeleteElements(); |
|
m_AttachedModelsInfo.PurgeAndDeleteElements(); |
|
} |
|
|
|
public: |
|
const char *m_pszModelName; |
|
const char *m_pszModelName_HWM; |
|
int m_nSkin; |
|
const char *m_pszVCD; |
|
Vector m_vecAbsAngles; |
|
Vector m_vecOriginOffset; |
|
Vector2D m_vecViewportOffset; |
|
Vector m_vecFramedOriginOffset; |
|
bool m_bUseSpotlight; |
|
CUtlMap< int, int > m_mapBodygroupValues; |
|
|
|
CUtlVector<CModelPanelModelAnimation*> m_Animations; |
|
CUtlVector<CModelPanelAttachedModelInfo*> m_AttachedModelsInfo; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CModelPanel : public vgui::EditablePanel, public CGameEventListener |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CModelPanel, vgui::EditablePanel ); |
|
|
|
CModelPanel( vgui::Panel *parent, const char *name ); |
|
virtual ~CModelPanel(); |
|
|
|
virtual void Paint(); |
|
virtual void ApplySettings( KeyValues *inResourceData ); |
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
virtual void DeleteVCDData( void ); |
|
virtual void DeleteModelData( void ); |
|
|
|
virtual void SetFOV( int nFOV ){ m_nFOV = nFOV; } |
|
virtual void SetPanelDirty( void ){ m_bPanelDirty = true; } |
|
virtual bool SetSequence( const char *pszSequence ); |
|
virtual void SetSkin( int nSkin ); |
|
void SetBodyGroup( const char* pszBodyGroupName, int nGroup ); |
|
|
|
MESSAGE_FUNC_PARAMS( OnAddAnimation, "AddAnimation", data ); |
|
MESSAGE_FUNC_PARAMS( OnSetAnimation, "SetAnimation", data ); |
|
|
|
void SetDefaultAnimation( const char *pszName ); |
|
void SwapModel( const char *pszName, const char *pszAttached = NULL ); |
|
|
|
virtual void ParseModelInfo( KeyValues *inResourceData ); |
|
|
|
void ClearAttachedModelInfos( void ); |
|
|
|
void CalculateFrameDistance( void ); |
|
void ZoomToFrameDistance( void ); |
|
|
|
void UpdateModel(); |
|
public: // IGameEventListener: |
|
virtual void FireGameEvent( IGameEvent * event ); |
|
|
|
protected: |
|
virtual void SetupModel( void ); |
|
virtual void SetupVCD( void ); |
|
virtual const char *GetModelName( void ); |
|
|
|
private: |
|
void InitCubeMaps(); |
|
int FindAnimByName( const char *pszName ); |
|
void CalculateFrameDistanceInternal( const model_t *pModel ); |
|
|
|
public: |
|
int m_nFOV; |
|
float m_flFrameDistance; |
|
bool m_bStartFramed; |
|
CModelPanelModelInfo *m_pModelInfo; |
|
|
|
CHandle<CModelPanelModel> m_hModel; |
|
CUtlVector<CHandle<C_BaseAnimating> > m_AttachedModels; |
|
|
|
CHandle<C_SceneEntity> m_hScene; |
|
|
|
private: |
|
bool m_bPanelDirty; |
|
int m_iDefaultAnimation; |
|
|
|
bool m_bAllowOffscreen; |
|
|
|
CTextureReference m_DefaultEnvCubemap; |
|
CTextureReference m_DefaultHDREnvCubemap; |
|
}; |
|
|
|
|
|
#endif // BASEMODELPANEL_H
|
|
|