Counter Strike : Global Offensive Source Code
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.
 
 
 
 
 
 

277 lines
9.0 KiB

//====== 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