163 lines
5.2 KiB
C++
163 lines
5.2 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef MDLPANEL_H
|
|
#define MDLPANEL_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "datacache/imdlcache.h"
|
|
#include "materialsystem/MaterialSystemUtil.h"
|
|
#include "matsys_controls/potterywheelpanel.h"
|
|
#include "tier3/mdlutils.h"
|
|
#include "vgui_controls/Panel.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
namespace vgui {
|
|
class IScheme;
|
|
}
|
|
|
|
//
|
|
struct MDLAnimEventState_t {
|
|
int m_nEventSequence;
|
|
float m_flPrevEventCycle;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// MDL Viewer Panel
|
|
//-----------------------------------------------------------------------------
|
|
class CMDLPanel : public CPotteryWheelPanel {
|
|
DECLARE_CLASS_SIMPLE(CMDLPanel, CPotteryWheelPanel);
|
|
|
|
public:
|
|
// constructor, destructor
|
|
CMDLPanel(vgui::Panel *pParent, const char *pName);
|
|
virtual ~CMDLPanel();
|
|
|
|
// Overriden methods of vgui::Panel
|
|
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
|
|
|
|
virtual void OnTick();
|
|
|
|
virtual void Paint();
|
|
|
|
// Sets the current mdl
|
|
virtual void SetMDL(MDLHandle_t handle, void *pProxyData = NULL);
|
|
virtual void SetMDL(const char *pMDLName, void *pProxyData = NULL);
|
|
|
|
// Sets the camera to look at the model
|
|
void LookAtMDL();
|
|
|
|
// Sets the current LOD
|
|
void SetLOD(int nLOD);
|
|
|
|
// Sets the current sequence
|
|
void SetSequence(int nSequence, bool bResetSequence = false);
|
|
|
|
// Set the pose parameters
|
|
void SetPoseParameters(const float *pPoseParameters, int nCount);
|
|
bool SetPoseParameterByName(const char *pszName, float fValue);
|
|
|
|
// Set the overlay sequence layers
|
|
void SetSequenceLayers(const MDLSquenceLayer_t *pSequenceLayers,
|
|
int nCount);
|
|
|
|
void SetCollsionModel(bool bVisible);
|
|
void SetGroundGrid(bool bVisible);
|
|
void SetWireFrame(bool bVisible);
|
|
void SetLockView(bool bLocked);
|
|
void SetSkin(int nSkin);
|
|
void SetLookAtCamera(bool bLookAtCamera);
|
|
void SetIgnoreDoubleClick(bool bState);
|
|
void SetThumbnailSafeZone(bool bVisible);
|
|
|
|
// Bounds.
|
|
bool GetBoundingBox(Vector &vecBoundsMin, Vector &vecBoundsMax);
|
|
bool GetBoundingSphere(Vector &vecCenter, float &flRadius);
|
|
|
|
virtual void SetModelAnglesAndPosition(const QAngle &angRot,
|
|
const Vector &vecPos);
|
|
|
|
// Attached models.
|
|
void SetMergeMDL(MDLHandle_t handle, void *pProxyData = NULL,
|
|
int nSkin = -1);
|
|
MDLHandle_t SetMergeMDL(const char *pMDLName, void *pProxyData = NULL,
|
|
int nSkin = -1);
|
|
int GetMergeMDLIndex(void *pProxyData);
|
|
int GetMergeMDLIndex(MDLHandle_t handle);
|
|
CMDL *GetMergeMDL(MDLHandle_t handle);
|
|
void ClearMergeMDLs(void);
|
|
|
|
virtual void SetupFlexWeights(void) { return; }
|
|
|
|
// Events
|
|
void DoAnimationEvents();
|
|
void DoAnimationEvents(CStudioHdr *pStudioHdr, int nSeqNum, float flTime,
|
|
bool bNoLoop, MDLAnimEventState_t *pEventState);
|
|
virtual void FireEvent(const char *pszEventName,
|
|
const char *pszEventOptions) {}
|
|
void ResetAnimationEventState(MDLAnimEventState_t *pEventState);
|
|
|
|
protected:
|
|
virtual void SetupRenderState(int nDisplayWidth,
|
|
int nDisplayHeight) OVERRIDE;
|
|
|
|
struct MDLData_t {
|
|
CMDL m_MDL;
|
|
matrix3x4_t m_MDLToWorld;
|
|
bool m_bDisabled;
|
|
float m_flCycleStartTime;
|
|
};
|
|
|
|
MDLData_t m_RootMDL;
|
|
CUtlVector<MDLData_t> m_aMergeMDLs;
|
|
|
|
static const int MAX_SEQUENCE_LAYERS = 8;
|
|
int m_nNumSequenceLayers;
|
|
MDLSquenceLayer_t m_SequenceLayers[MAX_SEQUENCE_LAYERS];
|
|
|
|
MDLAnimEventState_t m_EventState;
|
|
MDLAnimEventState_t m_SequenceLayerEventState[MAX_SEQUENCE_LAYERS];
|
|
|
|
private:
|
|
// paint it!
|
|
virtual void OnPaint3D();
|
|
virtual void PrePaint3D(IMatRenderContext *pRenderContext){};
|
|
virtual void PostPaint3D(IMatRenderContext *pRenderContext){};
|
|
virtual void RenderingRootModel(IMatRenderContext *pRenderContext,
|
|
CStudioHdr *pStudioHdr,
|
|
MDLHandle_t mdlHandle,
|
|
matrix3x4_t *pWorldMatrix){};
|
|
virtual void RenderingMergedModel(IMatRenderContext *pRenderContext,
|
|
CStudioHdr *pStudioHdr,
|
|
MDLHandle_t mdlHandle,
|
|
matrix3x4_t *pWorldMatrix){};
|
|
|
|
void OnMouseDoublePressed(vgui::MouseCode code);
|
|
|
|
void DrawCollisionModel();
|
|
void UpdateStudioRenderConfig(void);
|
|
|
|
CTextureReference m_DefaultEnvCubemap;
|
|
CTextureReference m_DefaultHDREnvCubemap;
|
|
|
|
bool m_bDrawCollisionModel : 1;
|
|
bool m_bGroundGrid : 1;
|
|
bool m_bLockView : 1;
|
|
bool m_bWireFrame : 1;
|
|
bool m_bLookAtCamera : 1;
|
|
bool m_bIgnoreDoubleClick : 1;
|
|
bool m_bThumbnailSafeZone : 1;
|
|
|
|
float m_PoseParameters[MAXSTUDIOPOSEPARAM];
|
|
};
|
|
|
|
#endif // MDLPANEL_H
|