83 lines
2.8 KiB
C++
83 lines
2.8 KiB
C++
//===== Copyright (c) 1996-2009, Valve Corporation, All rights reserved. =====
|
|
//
|
|
// Purpose:
|
|
//
|
|
//============================================================================
|
|
|
|
|
|
#ifndef MDLOBJECTS_UTILS_H
|
|
#define MDLOBJECTS_UTILS_H
|
|
|
|
|
|
#if defined( _WIN32 )
|
|
#pragma once
|
|
#endif
|
|
|
|
|
|
// Valve includes
|
|
#include "movieobjects/dmechannel.h"
|
|
#include "movieobjects/dmemodel.h"
|
|
#include "mdlobjects/dmeasset.h"
|
|
#include "mdlobjects/dmesequence.h"
|
|
#include "tier1/utlvector.h"
|
|
#include "tier1/utlstring.h"
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Ok to pass NULL
|
|
//-----------------------------------------------------------------------------
|
|
void ReorientMppFile( CDmElement *pDmElementRoot, bool bMakeZUp );
|
|
void MppReorient( CDmElement *pDmElementRoot, bool bMakeZUp );
|
|
|
|
void GetAbsMotion( CDmeChannel **ppDmePChannel, CDmeChannel **ppDmeOChannel, CDmeDag *pDmeDag );
|
|
bool SetAbsMotion( CDmeDag *pDmeDag, CDmeChannel *pDmePositionChannel, CDmeChannel *pDmeOrientationChannel );
|
|
|
|
// Creates a guaranteed unique DmFileId_t
|
|
DmFileId_t CreateUniqueDmFileId();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Iterates over all CDmeSequence's in the MPP File (Not CDmeMultiSequence)
|
|
// Get() only returns NULL if IsDone() also returns true so this usage is safe
|
|
//
|
|
// for ( MppSequenceIt sIt( pDmeAssetRoot ); !sIt.IsDone(); sIt.Next() )
|
|
// {
|
|
// sIt.Get()->SomeFunctionOnCDmeSequence()
|
|
// }
|
|
//-----------------------------------------------------------------------------
|
|
class MppSequenceIt
|
|
{
|
|
public:
|
|
MppSequenceIt( CDmeAssetRoot *pDmeAssetRoot );
|
|
CDmeSequence *Get() const;
|
|
bool IsDone() const;
|
|
void Next();
|
|
void Reset();
|
|
|
|
protected:
|
|
CUtlVector< DmElementHandle_t > m_hDmeSequenceList;
|
|
int m_nSequenceIndex;
|
|
};
|
|
|
|
// Masks for MppGetSkeletonLIst
|
|
enum MppSkeletonMask_t
|
|
{
|
|
MPP_ANIM_SKELETON_MASK = 1 << 0,
|
|
MPP_PHYSICS_SKELETON_MASK = 1 << 1,
|
|
MPP_MODEL_SKELETON_MASK = 1 << 2,
|
|
MPP_ALL_SKELETON_MASK = MPP_ANIM_SKELETON_MASK | MPP_PHYSICS_SKELETON_MASK | MPP_MODEL_SKELETON_MASK
|
|
};
|
|
|
|
// Returns a list of all unique skeletons under the specified MPP DmeAssetRoot
|
|
void MppGetSkeletonList( CUtlVector< CDmeModel * > &skeletonList, CDmeAssetRoot *pDmeAssetRoot, int nMppSkeletonMask = MPP_ALL_SKELETON_MASK );
|
|
|
|
// Connects all of the non-animation skeletons to each animation skeleton via DmeConnectionOperators
|
|
DmFileId_t MppConnectSkeletonsForAnimation( CDmeAssetRoot *pDmeAssetRoot );
|
|
|
|
// Disconnects all of the non-animation skeletons from each animation skeleton
|
|
// and destroys the elements created by MppConnectSkeletonsForAnimation
|
|
void MppDisconnectSkeletonsFromAnimation( CDmeAssetRoot *pDmeAssetRoot );
|
|
|
|
// Utility to return DmElement id as name:string
|
|
CUtlString ComputeDmElementIdStr( const CDmElement *pDmElement );
|
|
|
|
#endif // MDLOBJECTS_UTILS_H
|