|
|
//====== Copyright � 1996-2004, Valve Corporation, All rights reserved. =====//
//
// Dme representation of QC: $sequence
//
//===========================================================================//
#ifndef DMESEQUENCE_H
#define DMESEQUENCE_H
#ifdef _WIN32
#pragma once
#endif
// Valve includes
#include "datamodel/dmattributevar.h"
#include "datamodel/dmelement.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CDmeDag; class CDmeAnimationList; class CDmeIkRule; class CDmeIkLock; class CDmeAnimCmd; class CDmeEvent; class CDmeMotionControl; class CDmeSequenceBase; class CDmeChannelsClip; class CDmeBoneMask;
//-----------------------------------------------------------------------------
// Animation event
//-----------------------------------------------------------------------------
class CDmeAnimationEvent : public CDmElement { DEFINE_ELEMENT( CDmeAnimationEvent, CDmElement );
public: // Name is the event name
CDmaVar< int > m_nFrame; CDmaString m_sDataString; };
//-----------------------------------------------------------------------------
//
// QC $sequence activity <name> <weight>
//
// .name = <name>
// .weight = <weight>
// .modifierList = $QC activityModifier
//-----------------------------------------------------------------------------
#ifdef SWIG
%ignore CDmeSequenceActivity::m_sModifierList; #endif // #ifdef SWIG
class CDmeSequenceActivity : public CDmElement { DEFINE_ELEMENT( CDmeSequenceActivity, CDmElement );
public: CDmaVar< int > m_nWeight; CDmaStringArray m_sModifierList; };
//-----------------------------------------------------------------------------
// CDmeSequenceLayerBase
//-----------------------------------------------------------------------------
class CDmeSequenceLayerBase : public CDmElement { DEFINE_ELEMENT( CDmeSequenceLayerBase, CDmElement );
public: CDmaElement< CDmeSequenceBase > m_eAnimation;
};
//-----------------------------------------------------------------------------
// CDmeSequenceAddLayer
//-----------------------------------------------------------------------------
class CDmeSequenceAddLayer : public CDmeSequenceLayerBase { DEFINE_ELEMENT( CDmeSequenceAddLayer, CDmeSequenceLayerBase );
public: };
//-----------------------------------------------------------------------------
// CDmeSequenceBlendLayer
//-----------------------------------------------------------------------------
class CDmeSequenceBlendLayer : public CDmeSequenceLayerBase { DEFINE_ELEMENT( CDmeSequenceBlendLayer, CDmeSequenceLayerBase );
public: CDmaVar< float > m_flStartFrame; CDmaVar< float > m_flPeakFrame; CDmaVar< float > m_flTailFrame; CDmaVar< float > m_flEndFrame; CDmaVar< bool > m_bSpline; CDmaVar< bool > m_bCrossfade; CDmaVar< bool > m_bNoBlend; CDmaVar< bool > m_bLocal; CDmaString m_sPoseParameterName; };
//-----------------------------------------------------------------------------
// QC seq blend/calcblend base class
//-----------------------------------------------------------------------------
class CDmeSequenceBlendBase : public CDmElement { DEFINE_ELEMENT( CDmeSequenceBlendBase, CDmElement );
public: CDmaString m_sPoseParameterName;
};
//-----------------------------------------------------------------------------
// QC seq blend
//-----------------------------------------------------------------------------
class CDmeSequenceBlend : public CDmeSequenceBlendBase { DEFINE_ELEMENT( CDmeSequenceBlend, CDmeSequenceBlendBase );
public: CDmaVar< float > m_flParamStart; CDmaVar< float > m_flParamEnd; };
//-----------------------------------------------------------------------------
// QC seq calcblend
//-----------------------------------------------------------------------------
class CDmeSequenceCalcBlend : public CDmeSequenceBlendBase { DEFINE_ELEMENT( CDmeSequenceCalcBlend, CDmeSequenceBlendBase );
public: CDmaString m_sAttachmentName; CDmaElement< CDmeMotionControl > m_eMotionControl; };
//-----------------------------------------------------------------------------
// CDmeSequenceBase - Base Class For CDmeSequence & CDmeMultiSequence
//-----------------------------------------------------------------------------
class CDmeSequenceBase : public CDmElement { DEFINE_ELEMENT( CDmeSequenceBase, CDmElement );
public: CDmaElement< CDmeSequenceActivity > m_eActivity; // QC activity
CDmaVar< bool > m_bHidden; // QC hidden
CDmaVar< bool > m_bDelta; // QC delta
CDmaVar< bool > m_bWorldSpace; // QC worldspace
CDmaVar< bool > m_bPreDelta; // QC predelta
CDmaVar< bool > m_bAutoPlay; // QC autoplay
CDmaVar< bool > m_bRealtime; // QC realtime
CDmaVar< float > m_flFadeIn; // QC fadein
CDmaVar< float > m_flFadeOut; // QC fadeout
CDmaString m_sEntryNode; // QC node, transition, rtransition
CDmaString m_sExitNode; // QC node, transition, rtransition
CDmaVar< bool > m_bReverseNodeTransition; // QC rtransition
CDmaVar< bool > m_bSnap; // QC snap - Both Sequence & Animation
CDmaVar< bool > m_bPost; // QC post - Both Sequence & Animation
CDmaVar< bool > m_bLoop; // QC loop - Both Sequence & Animation
CDmaElementArray< CDmeIkLock > m_eIkLockList; CDmaElementArray< CDmeAnimationEvent > m_eAnimationEventList; CDmaElementArray< CDmeSequenceLayerBase > m_eLayerList; CDmaString m_sKeyValues; // Sequence KeyValues
//-----------------------------------------------------------------------------
// qsort function for sorting DmeBaseSequence elements based on type and
// sequence references.
//
// * A DmeBaseSequence must be either a DmeSequence or a DmeMultiSequence
// They are mutually exclusive, cannot be both
// * DmeMultiSequence refer to DmeSequence's so should always go last
// * DmeMultiSequence cannot refer to other DmeMultiSequence so they are
// considered equal
// * DmeSequence can refer to other DmeSequence elements via DmeAnimCmd's
// but circular references are not allowed. If a DmeSequence refers
// to another, the DmeSequence being referenced needs to be before the
// DmeSequence doing the referring
// * If no referrals between two DmeSequence's, sort based on DmeAnimCmd count
// so DmeSequence's with fewer DmeAnimCmd's go first
//-----------------------------------------------------------------------------
static int QSortFunction( const void *pVoidSeq1, const void *pVoidSeq2 ); };
//-----------------------------------------------------------------------------
// Animation data
//
// QC $sequence
//
//-----------------------------------------------------------------------------
class CDmeSequence : public CDmeSequenceBase { DEFINE_ELEMENT( CDmeSequence, CDmeSequenceBase );
public: CDmaElement< CDmeDag > m_eSkeleton; CDmaElement< CDmeAnimationList > m_eAnimationList; // QC animation file
CDmaVar< float > m_flFPS; // QC fps
CDmaVar< Vector > m_vOrigin; // QC origin
CDmaVar< float > m_flScale; // QC scale
CDmaVar< int > m_nStartLoop; // QC startloop
CDmaVar< bool > m_bForceLoop; // QC !( noforceloop )
CDmaVar< bool > m_bAutoIk; // QC autoik / noautoik
CDmaVar< float > m_flMotionRollback; // QC motionrollback
CDmaVar< bool > m_bAnimBlocks; // QC !( noanimblock )
CDmaVar< bool > m_bAnimBlockStall; // QC !( noanimblockstalls )
CDmaElement< CDmeMotionControl > m_eMotionControl; // QC STUDIO_X, etc...
CDmaElementArray< CDmeAnimCmd > m_eAnimationCommandList; CDmaElementArray< CDmeIkRule > m_eIkRuleList; CDmaElement< CDmeBoneMask > m_eBoneMask;
CDmeChannelsClip *GetDmeChannelsClip() const;
DmeFramerate_t GetFrameRate( DmeFramerate_t fallbackFrameRate = DmeFramerate_t( 30 ), bool bForceFallback = false ) const;
// Gets the maximum frame count from all animations in the DmeSequence
int GetFrameCount( DmeFramerate_t fallbackFrameRate = DmeFramerate_t( 30 ), bool bForceFallback = false ) const;
// Put all DmeChannel's in this DmeSequence to CM_PLAY
void PrepareChannels( CUtlVector< IDmeOperator * > &dmeOperatorList );
// Operate all DmeChannel's in this DmeSequence
// Pass the dmeOperatorList returned by PrepareChannels
void UpdateChannels( CUtlVector< IDmeOperator * > &dmeOperatorList, DmeTime_t nClipTime );
void GetDependentOperators( CUtlVector< IDmeOperator * > &operatorList, CDmeOperator *pDmeOperator ) const; };
//-----------------------------------------------------------------------------
// Animation data
//
// QC $sequence
//
//-----------------------------------------------------------------------------
class CDmeMultiSequence : public CDmeSequenceBase { DEFINE_ELEMENT( CDmeMultiSequence, CDmeSequenceBase );
public:
CDmaVar< int > m_nBlendWidth; // QC blendwidth
CDmaElement< CDmeSequence > m_eBlendRef; // QC blendref
CDmaElement< CDmeSequence > m_eBlendComp; // QC blendcomp
CDmaElement< CDmeSequence > m_eBlendCenter; // QC blendcenter
CDmaElementArray< CDmeSequence > m_eSequenceList; CDmaElementArray< CDmeSequenceBlendBase > m_eBlendList; };
#endif // DMESEQUENCE_H
|