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.
184 lines
5.7 KiB
184 lines
5.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Dme version of a game model (MDL) |
|
// |
|
//============================================================================= |
|
|
|
#ifndef DMEGAMEMODEL_H |
|
#define DMEGAMEMODEL_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "movieobjects/dmedag.h" |
|
#include "movieobjects/dmeoperator.h" |
|
#include "tier1/utldict.h" |
|
|
|
struct studiohdr_t; |
|
|
|
// Fixme, this might not be the best spot for this |
|
class IGlobalFlexController |
|
{ |
|
public: |
|
virtual int FindGlobalFlexController( char const *name ) = 0; |
|
virtual char const *GetGlobalFlexControllerName( int idx ) = 0; |
|
}; |
|
|
|
class CDmeGameModel; |
|
|
|
// Mapping from name to dest index |
|
class CDmeGlobalFlexControllerOperator : public CDmeOperator |
|
{ |
|
DEFINE_ELEMENT( CDmeGlobalFlexControllerOperator, CDmeOperator ); |
|
|
|
public: |
|
|
|
void SetGameModel( CDmeGameModel *gameModel ); |
|
|
|
virtual void Resolve(); |
|
virtual void Operate(); |
|
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs ); |
|
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs ); |
|
|
|
void SetWeight( float flWeight ); |
|
void SetMapping( int globalIndex ); |
|
void SetupToAttribute(); |
|
|
|
int GetGlobalIndex() const; |
|
|
|
virtual void OnAttributeChanged( CDmAttribute *pAttribute ); |
|
CDmaVar< float > m_flexWeight; |
|
CDmaElement< CDmeGameModel > m_gameModel; |
|
|
|
DmAttributeHandle_t m_ToAttributeHandle; |
|
|
|
private: |
|
int FindGlobalFlexControllerIndex() const; |
|
|
|
int m_nFlexControllerIndex; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// A class representing a game model |
|
//----------------------------------------------------------------------------- |
|
class CDmeGameModel : public CDmeDag |
|
{ |
|
DEFINE_ELEMENT( CDmeGameModel, CDmeDag ); |
|
|
|
public: |
|
void AddBone( CDmeTransform* pTransform ); |
|
void AddBones( studiohdr_t *pStudioHdr, const char *pBaseName, int nFirstBone, int nCount ); |
|
void SetBone( uint index, const Vector& pos, const Quaternion& rot ); |
|
uint NumBones() const; |
|
CDmeTransform *GetBone( uint index ) const; |
|
int FindBone( CDmeTransform *pTransform ) const; |
|
void RemoveAllBones(); |
|
|
|
// A src bone transform transforms pre-compiled data (.dmx or .smd files, for example) |
|
// into post-compiled data (.mdl or .ani files) |
|
// Returns false if there is no transform (or if the transforms are identity) |
|
bool GetSrcBoneTransforms( matrix3x4_t *pPreTransform, matrix3x4_t *pPostTransform, int nBoneIndex ) const; |
|
|
|
bool IsRootTransform( int nBoneIndex ) const; |
|
|
|
uint NumFlexWeights() const; |
|
const CUtlVector< float >& GetFlexWeights() const; |
|
// We drive these through the operators instead |
|
// void SetFlexWeights( uint nFlexWeights, const float* flexWeights ); |
|
void SetNumFlexWeights( uint nFlexWeights ); |
|
void SetFlexWeights( uint nFlexWeights, const float* flexWeights ); |
|
|
|
const Vector& GetViewTarget() const; |
|
void SetViewTarget( const Vector &viewTarget ); |
|
|
|
void SetFlags( int nFlags ); |
|
|
|
void SetSkin( int nSkin ); |
|
void SetBody( int nBody ); |
|
void SetSequence( int nSequence ); |
|
|
|
int GetSkin() const; |
|
int GetBody() const; |
|
int GetSequence() const; |
|
const char *GetModelName() const; |
|
|
|
CDmeGlobalFlexControllerOperator *AddGlobalFlexController( char const *controllerName, int globalIndex ); |
|
CDmeGlobalFlexControllerOperator *FindGlobalFlexController( int nGlobalIndex ); |
|
void RemoveGlobalFlexController( CDmeGlobalFlexControllerOperator *controller ); |
|
|
|
int NumGlobalFlexControllers() const; |
|
CDmeGlobalFlexControllerOperator *GetGlobalFlexController( int localIndex ); // localIndex is in order of calls to AddGlobalFlexController |
|
|
|
void AppendGlobalFlexControllerOperators( CUtlVector< IDmeOperator * >& list ); |
|
studiohdr_t* GetStudioHdr() const; |
|
|
|
public: |
|
CDmaVar< bool > m_bComputeBounds; |
|
|
|
protected: |
|
void PopulateExistingDagList( CDmeDag** pDags, int nCount ); |
|
|
|
// This holds the operators which map to the m_flexWeights below |
|
CDmaElementArray< CDmeGlobalFlexControllerOperator > m_globalFlexControllers; |
|
|
|
CDmaArray< float > m_flexWeights; // These are global flex weights (so there can be gaps, unused indices) |
|
CDmaVar< Vector > m_viewTarget; |
|
CDmaString m_modelName; |
|
CDmaVar< int > m_skin; |
|
CDmaVar< int > m_body; |
|
CDmaVar< int > m_sequence; |
|
CDmaVar< int > m_flags; |
|
|
|
// this is different than m_Children - this is ALL transforms in the tree that are used by the model |
|
// m_Children holds the roots of that tree |
|
CDmaElementArray< CDmeTransform > m_bones; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// A class representing a game sprite |
|
//----------------------------------------------------------------------------- |
|
class CDmeGameSprite : public CDmeDag |
|
{ |
|
DEFINE_ELEMENT( CDmeGameSprite, CDmeDag ); |
|
|
|
public: |
|
const char *GetModelName() const; |
|
|
|
float GetScale() const; |
|
float GetFrame() const; |
|
int GetRenderMode() const; |
|
int GetRenderFX() const; |
|
const Color &GetColor() const; |
|
float GetProxyRadius() const; |
|
|
|
void SetState( bool bVisible, float nFrame, int nRenderMode, int nRenderFX, float flRenderScale, float flProxyRadius, const Vector &pos, const Quaternion &rot, const Color &color ); |
|
|
|
protected: |
|
CDmaString m_modelName; |
|
CDmaVar< float > m_frame; |
|
CDmaVar< int > m_rendermode; |
|
CDmaVar< int > m_renderfx; |
|
CDmaVar< float > m_renderscale; |
|
CDmaVar< Color > m_color; |
|
CDmaVar< float > m_proxyRadius; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// A class representing a game portal |
|
//----------------------------------------------------------------------------- |
|
class CDmeGamePortal : public CDmeDag |
|
{ |
|
DEFINE_ELEMENT( CDmeGamePortal, CDmeDag ); |
|
|
|
public: |
|
CDmaVar< int > m_nPortalId; |
|
CDmaVar< int > m_nLinkedPortalId; |
|
CDmaVar< float > m_flStaticAmount; |
|
CDmaVar< float > m_flSecondaryStaticAmount; |
|
CDmaVar< float > m_flOpenAmount; |
|
CDmaVar< bool > m_bIsPortal2; |
|
}; |
|
|
|
#endif // DMEGAMEMODEL_H
|
|
|