mirror of
https://github.com/celisej567/cool-source-archive.git
synced 2025-12-31 17:48:37 +03:00
fixed compile 4
This commit is contained in:
172
networksystem/networksystem.h
Normal file
172
networksystem/networksystem.h
Normal file
@@ -0,0 +1,172 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef NETWORKSYSTEM_H
|
||||
#define NETWORKSYSTEM_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "networksystem/inetworksystem.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/bitbuf.h"
|
||||
#include "sm_protocol.h"
|
||||
#include "networksystem/inetworkmessage.h"
|
||||
#include "tier1/netadr.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "tier2/tier2.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CNetworkServer;
|
||||
class CNetworkClient;
|
||||
class IConnectionlessPacketHandler;
|
||||
class CNetChannel;
|
||||
enum SystemNetworkMessageType_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Global interfaces
|
||||
//-----------------------------------------------------------------------------
|
||||
class CNetworkSystem;
|
||||
extern CNetworkSystem *g_pNetworkSystemImp;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Implementation of the network system
|
||||
//-----------------------------------------------------------------------------
|
||||
class CNetworkSystem : public CTier2AppSystem< INetworkSystem >
|
||||
{
|
||||
typedef CTier2AppSystem< INetworkSystem > BaseClass;
|
||||
|
||||
public:
|
||||
// Constructor, destructor
|
||||
CNetworkSystem();
|
||||
virtual ~CNetworkSystem();
|
||||
|
||||
// Inherited from IAppSystem
|
||||
virtual bool Connect( CreateInterfaceFn factory );
|
||||
virtual InitReturnVal_t Init();
|
||||
virtual void Shutdown();
|
||||
|
||||
// Inherited from INetworkSystem
|
||||
virtual bool RegisterMessage( INetworkMessage *msg );
|
||||
virtual bool StartServer( unsigned short nServerListenPort );
|
||||
virtual void ShutdownServer( );
|
||||
virtual void ServerReceiveMessages();
|
||||
virtual void ServerSendMessages();
|
||||
|
||||
virtual bool StartClient( unsigned short nClientListenPort );
|
||||
virtual void ShutdownClient( );
|
||||
virtual void ClientSendMessages();
|
||||
virtual void ClientReceiveMessages();
|
||||
virtual INetChannel* ConnectClientToServer( const char *pServer, int nServerListenPort );
|
||||
virtual void DisconnectClientFromServer( INetChannel* pChan );
|
||||
virtual NetworkEvent_t *FirstNetworkEvent( );
|
||||
virtual NetworkEvent_t *NextNetworkEvent( );
|
||||
virtual const char* GetLocalHostName( void ) const;
|
||||
virtual const char* GetLocalAddress( void ) const;
|
||||
|
||||
// Methods internal for use in networksystem library
|
||||
|
||||
// Method to allow systems to add network events received
|
||||
NetworkEvent_t* CreateNetworkEvent( int nSizeInBytes );
|
||||
template< class T > T* CreateNetworkEvent();
|
||||
bool IsNetworkEventCreated();
|
||||
|
||||
// Finds a network message given a particular message type
|
||||
INetworkMessage* FindNetworkMessage( int group, int type );
|
||||
|
||||
// Returns the number of bits to encode the type + group with
|
||||
int GetTypeBitCount() const;
|
||||
int GetGroupBitCount() const;
|
||||
|
||||
// Returns the current time
|
||||
float GetTime( void );
|
||||
|
||||
// Converts a string to a socket address
|
||||
bool StringToSockaddr( const char *s, struct sockaddr *sadr );
|
||||
|
||||
// Queues up a network packet
|
||||
void EnqueueConnectionlessNetworkPacket( CNetPacket *pPacket, IConnectionlessPacketHandler *pHandler );
|
||||
void EnqueueNetworkPacket( CNetPacket *pPacket, CNetChannel *pNetChannel );
|
||||
|
||||
private:
|
||||
struct PacketInfo_t
|
||||
{
|
||||
CNetPacket *m_pPacket;
|
||||
IConnectionlessPacketHandler *m_pHandler;
|
||||
CNetChannel *m_pNetChannel;
|
||||
};
|
||||
|
||||
// Network event iteration helpers
|
||||
bool StartProcessingNewPacket();
|
||||
bool AdvanceProcessingNetworkPacket( );
|
||||
void CleanupNetworkMessages( );
|
||||
|
||||
bool m_bWinsockInitialized : 1;
|
||||
bool m_bNetworkEventCreated : 1;
|
||||
bool m_bInMidPacket : 1;
|
||||
int m_nTypeBits;
|
||||
int m_nGroupBits;
|
||||
netadr_t m_LocalAddress;
|
||||
CUtlString m_LocalAddressString;
|
||||
CUtlString m_LocalHostName;
|
||||
CNetworkServer *m_pServer;
|
||||
CNetworkClient *m_pClient;
|
||||
unsigned char m_EventMessageBuffer[256];
|
||||
CUtlVector<PacketInfo_t> m_PacketQueue;
|
||||
int m_nProcessingPacket;
|
||||
CUtlVector<INetworkMessage*> m_NetworkMessages;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
T* CNetworkSystem::CreateNetworkEvent()
|
||||
{
|
||||
// Increase the size of m_EventMessageBuffer if this assertion fails
|
||||
COMPILE_TIME_ASSERT( sizeof(T) <= sizeof( m_EventMessageBuffer ) );
|
||||
return (T*)CreateNetworkEvent( sizeof(T) );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns the number of bits to encode the type + group with
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CNetworkSystem::GetTypeBitCount() const
|
||||
{
|
||||
return m_nTypeBits;
|
||||
}
|
||||
|
||||
inline int CNetworkSystem::GetGroupBitCount() const
|
||||
{
|
||||
return m_nGroupBits;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Writes a system network message
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void WriteSystemNetworkMessage( bf_write &msg, SystemNetworkMessageType_t type )
|
||||
{
|
||||
msg.WriteUBitLong( net_group_networksystem, g_pNetworkSystemImp->GetGroupBitCount() );
|
||||
msg.WriteUBitLong( type, g_pNetworkSystemImp->GetTypeBitCount() );
|
||||
}
|
||||
|
||||
inline void WriteNetworkMessage( bf_write &msg, INetworkMessage *pNetworkMessage )
|
||||
{
|
||||
msg.WriteUBitLong( pNetworkMessage->GetGroup(), g_pNetworkSystemImp->GetGroupBitCount() );
|
||||
msg.WriteUBitLong( pNetworkMessage->GetType(), g_pNetworkSystemImp->GetTypeBitCount() );
|
||||
}
|
||||
|
||||
#endif // NETWORKSYSTEM_H
|
||||
|
||||
59
public/movieobjects/dmeanimationlist.h
Normal file
59
public/movieobjects/dmeanimationlist.h
Normal file
@@ -0,0 +1,59 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Snapshot of
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEANIMATIONLIST_H
|
||||
#define DMEANIMATIONLIST_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeChannelsClip;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a list of animations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeAnimationList : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeAnimationList, CDmElement );
|
||||
|
||||
public:
|
||||
int GetAnimationCount() const;
|
||||
CDmeChannelsClip *GetAnimation( int nIndex );
|
||||
int FindAnimation( const char *pAnimName );
|
||||
void SetAnimation( int nIndex, CDmeChannelsClip *pAnimation );
|
||||
int AddAnimation( CDmeChannelsClip *pAnimation );
|
||||
void RemoveAnimation( int nIndex );
|
||||
|
||||
private:
|
||||
CDmaElementArray<CDmeChannelsClip> m_Animations;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeAnimationList::GetAnimationCount() const
|
||||
{
|
||||
return m_Animations.Count();
|
||||
}
|
||||
|
||||
inline CDmeChannelsClip *CDmeAnimationList::GetAnimation( int nIndex )
|
||||
{
|
||||
return m_Animations[nIndex];
|
||||
}
|
||||
|
||||
|
||||
#endif // DMEANIMATIONLIST_H
|
||||
237
public/movieobjects/dmeanimationset.h
Normal file
237
public/movieobjects/dmeanimationset.h
Normal file
@@ -0,0 +1,237 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEANIMATIONSET_H
|
||||
#define DMEANIMATIONSET_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmephonememapping.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
#include "movieobjects/proceduralpresets.h"
|
||||
|
||||
class CDmeBookmark;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A preset is a list of values to be applied to named controls in the animation set
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePreset : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePreset, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaElementArray< CDmElement > &GetControlValues();
|
||||
const CDmaElementArray< CDmElement > &GetControlValues() const;
|
||||
|
||||
CDmElement *FindControlValue( const char *pControlName );
|
||||
CDmElement *FindOrAddControlValue( const char *pControlName );
|
||||
void RemoveControlValue( const char *pControlName );
|
||||
bool IsReadOnly();
|
||||
void CopyControlValuesFrom( CDmePreset *pSource );
|
||||
|
||||
// See the enumeration above
|
||||
void SetProceduralPresetType( int nType );
|
||||
bool IsProcedural() const;
|
||||
int GetProceduralPresetType() const;
|
||||
|
||||
private:
|
||||
int FindControlValueIndex( const char *pControlName );
|
||||
|
||||
CDmaElementArray< CDmElement > m_ControlValues;
|
||||
CDmaVar< int > m_nProceduralType;
|
||||
};
|
||||
|
||||
|
||||
class CDmeProceduralPresetSettings : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeProceduralPresetSettings, CDmElement );
|
||||
public:
|
||||
|
||||
CDmaVar< float > m_flJitterScale;
|
||||
CDmaVar< float > m_flSmoothScale;
|
||||
CDmaVar< float > m_flSharpenScale;
|
||||
CDmaVar< float > m_flSoftenScale;
|
||||
|
||||
CDmaVar< int > m_nJitterIterations;
|
||||
CDmaVar< int > m_nSmoothIterations;
|
||||
CDmaVar< int > m_nSharpenIterations;
|
||||
CDmaVar< int > m_nSoftenIterations;
|
||||
|
||||
CDmaVar< int > m_nStaggerInterval;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class used to copy preset values from one preset group to another
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePresetRemap : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePresetRemap, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaString m_SourcePresetGroup;
|
||||
|
||||
const char *FindSourcePreset( const char *pDestPresetName );
|
||||
int GetRemapCount();
|
||||
const char *GetRemapSource( int i );
|
||||
const char *GetRemapDest( int i );
|
||||
void AddRemap( const char *pSourcePresetName, const char *pDestPresetName );
|
||||
void RemoveAll();
|
||||
|
||||
private:
|
||||
CDmaStringArray m_SrcPresets;
|
||||
CDmaStringArray m_DestPresets;
|
||||
};
|
||||
|
||||
|
||||
class CDmeAnimationSet;
|
||||
class CDmeCombinationOperator;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A preset group is a list of presets, with shared visibility + readonly settings
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePresetGroup : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePresetGroup, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaElementArray< CDmePreset > &GetPresets(); // raw access to the array
|
||||
const CDmaElementArray< CDmePreset > &GetPresets() const;
|
||||
CDmePreset *FindPreset( const char *pPresetName );
|
||||
CDmePreset *FindOrAddPreset( const char *pPresetName, int nProceduralType = PROCEDURAL_PRESET_NOT );
|
||||
bool RemovePreset( CDmePreset *pPreset );
|
||||
void MovePresetUp( CDmePreset *pPreset );
|
||||
void MovePresetDown( CDmePreset *pPreset );
|
||||
void MovePresetInFrontOf( CDmePreset *pPreset, CDmePreset *pInFrontOf );
|
||||
CDmePresetRemap *GetPresetRemap();
|
||||
CDmePresetRemap *GetOrAddPresetRemap();
|
||||
|
||||
CDmaVar< bool > m_bIsVisible;
|
||||
CDmaVar< bool > m_bIsReadOnly;
|
||||
|
||||
// Exports this preset group to a faceposer .txt expression file
|
||||
bool ExportToTXT( const char *pFilename, CDmeAnimationSet *pAnimationSet = NULL, CDmeCombinationOperator *pComboOp = NULL ) const;
|
||||
|
||||
// Exports this preset group to a faceposer .vfe expression file
|
||||
bool ExportToVFE( const char *pFilename, CDmeAnimationSet *pAnimationSet = NULL, CDmeCombinationOperator *pComboOp = NULL ) const;
|
||||
|
||||
private:
|
||||
int FindPresetIndex( CDmePreset *pGroupName );
|
||||
|
||||
CDmaElementArray< CDmePreset > m_Presets; // "presets"
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// The main controlbox for controlling animation
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeAnimationSet : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeAnimationSet, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaElementArray< CDmElement > &GetControls(); // raw access to the array
|
||||
CDmaElementArray< CDmElement > &GetSelectionGroups(); // raw access to the array
|
||||
CDmaElementArray< CDmePresetGroup > &GetPresetGroups(); // raw access to the array
|
||||
CDmaElementArray< CDmePhonemeMapping > &GetPhonemeMap(); // raw access to the array
|
||||
CDmaElementArray< CDmeOperator > &GetOperators(); // raw access to the array
|
||||
|
||||
void RestoreDefaultPhonemeMap();
|
||||
|
||||
CDmePhonemeMapping *FindMapping( const char *pRawPhoneme );
|
||||
CDmElement *FindControl( const char *pControlName );
|
||||
CDmElement *FindOrAddControl( const char *pControlName );
|
||||
|
||||
// Methods pertaining to preset groups
|
||||
CDmePresetGroup *FindPresetGroup( const char *pGroupName );
|
||||
CDmePresetGroup *FindOrAddPresetGroup( const char *pGroupName );
|
||||
bool RemovePresetGroup( CDmePresetGroup *pPresetGroup );
|
||||
void MovePresetGroupUp( CDmePresetGroup *pPresetGroup );
|
||||
void MovePresetGroupDown( CDmePresetGroup *pPresetGroup );
|
||||
void MovePresetGroupInFrontOf( CDmePresetGroup *pPresetGroup, CDmePresetGroup *pInFrontOf );
|
||||
|
||||
CDmePreset *FindOrAddPreset( const char *pGroupName, const char *pPresetName, int nProceduralType = PROCEDURAL_PRESET_NOT );
|
||||
bool RemovePreset( CDmePreset *pPreset );
|
||||
|
||||
const CDmaElementArray< CDmeBookmark > &GetBookmarks() const;
|
||||
CDmaElementArray< CDmeBookmark > &GetBookmarks();
|
||||
|
||||
CDmElement *FindSelectionGroup( const char *pSelectionGroupName );
|
||||
CDmElement *FindOrAddSelectionGroup( const char *pSelectionGroupName );
|
||||
|
||||
virtual void OnElementUnserialized();
|
||||
|
||||
void CollectOperators( CUtlVector< DmElementHandle_t > &operators );
|
||||
void AddOperator( CDmeOperator *pOperator );
|
||||
void RemoveOperator( CDmeOperator *pOperator );
|
||||
|
||||
void EnsureProceduralPresets();
|
||||
|
||||
private:
|
||||
int FindPresetGroupIndex( CDmePresetGroup *pGroup );
|
||||
int FindPresetGroupIndex( const char *pGroupName );
|
||||
|
||||
CDmaElementArray< CDmElement > m_Controls; // "controls"
|
||||
CDmaElementArray< CDmElement > m_SelectionGroups; // "selectionGroups"
|
||||
CDmaElementArray< CDmePresetGroup > m_PresetGroups; // "presetGroups"
|
||||
CDmaElementArray< CDmePhonemeMapping > m_PhonemeMap; // "phonememap"
|
||||
CDmaElementArray< CDmeOperator > m_Operators; // "operators"
|
||||
CDmaElementArray< CDmeBookmark > m_Bookmarks; // "bookmarks"
|
||||
|
||||
friend class CModelPresetGroupManager;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utility methods to convert between L/R and V/B
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void ValueBalanceToLeftRight( float *pLeft, float *pRight, float flValue, float flBalance )
|
||||
{
|
||||
*pLeft = ( flBalance <= 0.5f ) ? 1.0f : ( ( 1.0f - flBalance ) / 0.5f );
|
||||
*pLeft *= flValue;
|
||||
*pRight = ( flBalance >= 0.5f ) ? 1.0f : ( flBalance / 0.5f );
|
||||
*pRight *= flValue;
|
||||
}
|
||||
|
||||
inline void LeftRightToValueBalance( float *pValue, float *pBalance, float flLeft, float flRight, float flDefaultBalance = 0.5f )
|
||||
{
|
||||
*pValue = max( flRight, flLeft );
|
||||
if ( *pValue <= 1e-6 )
|
||||
{
|
||||
// Leave target balance at input value if target == 0 and on the dest side of blending
|
||||
*pBalance = flDefaultBalance;
|
||||
return;
|
||||
}
|
||||
|
||||
if ( flRight < flLeft )
|
||||
{
|
||||
*pBalance = 0.5f * flRight / flLeft;
|
||||
}
|
||||
else
|
||||
{
|
||||
*pBalance = 1.0f - ( 0.5f * flLeft / flRight );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A cache of preset groups to be associated with specific models
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IModelPresetGroupManager
|
||||
{
|
||||
public:
|
||||
virtual void AssociatePresetsWithFile( DmFileId_t fileId ) = 0;
|
||||
virtual void ApplyModelPresets( const char *pModelName, CDmeAnimationSet *pAnimationSet ) = 0;
|
||||
};
|
||||
|
||||
|
||||
extern IModelPresetGroupManager *g_pModelPresetGroupMgr;
|
||||
|
||||
|
||||
#endif // DMEANIMATIONSET_H
|
||||
41
public/movieobjects/dmeattachment.h
Normal file
41
public/movieobjects/dmeattachment.h
Normal file
@@ -0,0 +1,41 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Dme version of a model attachment point
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEATTACHMENT_H
|
||||
#define DMEATTACHMENT_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward Declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDrawSettings;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing an attachment point
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeAttachment : public CDmeShape
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeAttachment, CDmeShape );
|
||||
|
||||
public:
|
||||
virtual void Draw( const matrix3x4_t &shapeToWorld, CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
CDmaVar< bool > m_bIsRigid; // Does the attachment animate?
|
||||
CDmaVar< bool > m_bIsWorldAligned; // Is the attachment world-aligned?
|
||||
|
||||
private:
|
||||
CMaterialReference m_AttachmentMaterial;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEATTACHMENT_H
|
||||
45
public/movieobjects/dmebalancetostereocalculatoroperator.h
Normal file
45
public/movieobjects/dmebalancetostereocalculatoroperator.h
Normal file
@@ -0,0 +1,45 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEBALANCETOSTEREOCALCULATOROPERATOR_H
|
||||
#define DMEBALANCETOSTEREOCALCULATOROPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
|
||||
class CDmeBalanceToStereoCalculatorOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeBalanceToStereoCalculatorOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
void SetSpewResult( bool state );
|
||||
|
||||
protected:
|
||||
float ComputeDefaultValue();
|
||||
|
||||
CDmaVar< float > m_result_left;
|
||||
CDmaVar< float > m_result_right;
|
||||
CDmaVar< float > m_result_multi;
|
||||
|
||||
CDmaVar< float > m_value; // input value
|
||||
CDmaVar< float > m_balance; // balance value
|
||||
CDmaVar< float > m_multilevel; // multilevel value
|
||||
|
||||
// Debuggin
|
||||
CDmaVar< bool > m_bSpewResult;
|
||||
|
||||
float m_flDefaultValue;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEBALANCETOSTEREOCALCULATOROPERATOR_H
|
||||
35
public/movieobjects/dmebookmark.h
Normal file
35
public/movieobjects/dmebookmark.h
Normal file
@@ -0,0 +1,35 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEBOOKMARK_H
|
||||
#define DMEBOOKMARK_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
|
||||
class CDmeBookmark : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeBookmark, CDmElement );
|
||||
|
||||
public:
|
||||
const char *GetNote() const { return m_Note; }
|
||||
DmeTime_t GetTime() const { return DmeTime_t( m_Time ); }
|
||||
DmeTime_t GetDuration() const { return DmeTime_t( m_Duration ); }
|
||||
|
||||
void SetNote( const char *pNote ) { m_Note = pNote; }
|
||||
void SetTime( DmeTime_t time ) { m_Time = time.GetTenthsOfMS(); }
|
||||
void SetDuration( DmeTime_t duration ) { m_Duration = duration.GetTenthsOfMS(); }
|
||||
|
||||
private:
|
||||
CDmaString m_Note;
|
||||
CDmaVar< int > m_Time;
|
||||
CDmaVar< int > m_Duration;
|
||||
};
|
||||
|
||||
#endif // DMEBOOKMARK_H
|
||||
91
public/movieobjects/dmecamera.h
Normal file
91
public/movieobjects/dmecamera.h
Normal file
@@ -0,0 +1,91 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a camera
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECAMERA_H
|
||||
#define DMECAMERA_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeCamera : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCamera, CDmeDag );
|
||||
|
||||
public:
|
||||
// Sets up render state in the material system for rendering
|
||||
// This includes the view matrix and the projection matrix
|
||||
void SetupRenderState( int nDisplayWidth, int nDisplayHeight, bool bUseEngineCoordinateSystem = false );
|
||||
|
||||
// accessors for generated matrices
|
||||
void GetViewMatrix( VMatrix &view, bool bUseEngineCoordinateSystem = false );
|
||||
void GetProjectionMatrix( VMatrix &proj, int width, int height );
|
||||
void GetViewProjectionInverse( VMatrix &viewprojinv, int width, int height );
|
||||
void ComputeScreenSpacePosition( const Vector &vecWorldPosition, int width, int height, Vector2D *pScreenPosition );
|
||||
|
||||
// Returns the x FOV (the full angle)
|
||||
float GetFOVx() const;
|
||||
void SetFOVx( float fov );
|
||||
|
||||
// Returns the focal distance in inches
|
||||
float GetFocalDistance() const;
|
||||
|
||||
// Sets the focal distance in inches
|
||||
void SetFocalDistance( const float &fFocalDistance );
|
||||
|
||||
// Returns the aperture size in inches
|
||||
float GetAperture() const;
|
||||
|
||||
// Returns the shutter speed in seconds
|
||||
float GetShutterSpeed() const;
|
||||
|
||||
// Returns the tone map scale
|
||||
float GetToneMapScale() const;
|
||||
|
||||
// Returns the tone map scale
|
||||
float GetBloomScale() const;
|
||||
|
||||
// Returns the view direction
|
||||
void GetViewDirection( Vector *pDirection );
|
||||
|
||||
// Returns Depth of Field quality level
|
||||
int GetDepthOfFieldQuality() const;
|
||||
|
||||
// Returns the Motion Blur quality level
|
||||
int GetMotionBlurQuality() const;
|
||||
|
||||
private:
|
||||
// Loads the material system view matrix based on the transform
|
||||
void LoadViewMatrix( bool bUseEngineCoordinateSystem );
|
||||
|
||||
// Loads the material system projection matrix based on the fov, etc.
|
||||
void LoadProjectionMatrix( int nDisplayWidth, int nDisplayHeight );
|
||||
|
||||
// Sets the studiorender state
|
||||
void LoadStudioRenderCameraState();
|
||||
|
||||
CDmaVar< float > m_fieldOfView;
|
||||
CDmaVar< float > m_zNear;
|
||||
CDmaVar< float > m_zFar;
|
||||
|
||||
CDmaVar< float > m_fFocalDistance;
|
||||
CDmaVar< float > m_fAperture;
|
||||
CDmaVar< float > m_fShutterSpeed;
|
||||
CDmaVar< float > m_fToneMapScale;
|
||||
CDmaVar< float > m_fBloomScale;
|
||||
|
||||
CDmaVar< int > m_nDoFQuality;
|
||||
CDmaVar< int > m_nMotionBlurQuality;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMECAMERA_H
|
||||
283
public/movieobjects/dmechannel.h
Normal file
283
public/movieobjects/dmechannel.h
Normal file
@@ -0,0 +1,283 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The channel class - connects elements together, and allows for logging of data
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECHANNEL_H
|
||||
#define DMECHANNEL_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
#include "movieobjects/dmelog.h"
|
||||
#include "movieobjects/dmeclip.h"
|
||||
#include "movieobjects/proceduralpresets.h"
|
||||
#include "datamodel/idatamodel.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeClip;
|
||||
class CDmeChannel;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// different channel modes of operation
|
||||
//-----------------------------------------------------------------------------
|
||||
enum ChannelMode_t
|
||||
{
|
||||
CM_OFF,
|
||||
CM_PASS,
|
||||
CM_RECORD,
|
||||
CM_PLAY,
|
||||
};
|
||||
|
||||
enum PlayMode_t
|
||||
{
|
||||
PM_HOLD,
|
||||
PM_LOOP,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class managing channel recording
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeChannelRecordingMgr
|
||||
{
|
||||
public:
|
||||
// constructor
|
||||
CDmeChannelRecordingMgr();
|
||||
|
||||
// Activates, deactivates layer recording.
|
||||
void StartLayerRecording( const char *pUndoRedoDesc, const DmeLog_TimeSelection_t *pTimeSelection = NULL );
|
||||
void FinishLayerRecording( float flThreshold, bool bFlattenLayers = true );
|
||||
|
||||
// Adds a channel to the recording layer
|
||||
void AddChannelToRecordingLayer( CDmeChannel *pChannel, CDmeClip *pRoot = NULL, CDmeClip *pShot = NULL );
|
||||
|
||||
// Used to iterate over all channels currently being recorded
|
||||
// NOTE: Use CDmeChannel::AddToRecordingLayer to add a channel to the recording layer
|
||||
int GetLayerRecordingChannelCount();
|
||||
CDmeChannel* GetLayerRecordingChannel( int nIndex );
|
||||
|
||||
// Computes time selection info in log time for a particular recorded channel
|
||||
// NOTE: Only valid if IsUsingTimeSelection() returns true
|
||||
void GetLocalTimeSelection( DmeLog_TimeSelection_t& selection, int nIndex );
|
||||
|
||||
// Methods which control various aspects of recording
|
||||
void UpdateTimeAdvancing( bool bPaused, DmeTime_t tCurTime );
|
||||
void UpdateRecordingTimeSelectionTimes( const DmeLog_TimeSelection_t& timeSelection );
|
||||
void SetIntensityOnAllLayers( float flIntensity );
|
||||
void SetRecordingMode( RecordingMode_t mode );
|
||||
void SetPresetValue( CDmeChannel* pChannel, CDmAttribute *pPresetValue );
|
||||
|
||||
void SetProceduralTarget( int nProceduralMode, const CDmAttribute *pTarget );
|
||||
void SetProceduralTarget( int nProceduralMode, const CUtlVector< KeyValues * >& list );
|
||||
int GetProceduralType() const;
|
||||
const CDmAttribute *GetProceduralTarget() const;
|
||||
const CUtlVector< KeyValues * > &GetPasteTarget() const;
|
||||
|
||||
// Methods to query aspects of recording
|
||||
bool IsTimeAdvancing() const;
|
||||
bool IsUsingDetachedTimeSelection() const;
|
||||
bool IsUsingTimeSelection() const;
|
||||
|
||||
private:
|
||||
struct LayerChannelInfo_t
|
||||
{
|
||||
LayerChannelInfo_t() : m_pPresetValue( 0 ) {}
|
||||
|
||||
CDmeHandle< CDmeChannel > m_Channel;
|
||||
DmeClipStack_t m_ClipStack;
|
||||
CDmAttribute* m_pPresetValue;
|
||||
};
|
||||
|
||||
// Methods available for CDmeChannel
|
||||
bool ShouldRecordUsingTimeSelection() const;
|
||||
|
||||
// Internal methods
|
||||
void FlattenLayers( float flThreshhold );
|
||||
void RemoveAllChannelsFromRecordingLayer( );
|
||||
|
||||
bool m_bActive : 1;
|
||||
bool m_bSavedUndoState : 1;
|
||||
bool m_bUseTimeSelection : 1;
|
||||
CUtlVector< LayerChannelInfo_t > m_LayerChannels;
|
||||
DmeLog_TimeSelection_t m_TimeSelection;
|
||||
int m_nRevealType;
|
||||
const CDmAttribute *m_pRevealTarget;
|
||||
CUtlVector< KeyValues * > m_PasteTarget;
|
||||
|
||||
friend CDmeChannel;
|
||||
};
|
||||
|
||||
// Singleton
|
||||
extern CDmeChannelRecordingMgr *g_pChannelRecordingMgr;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a channel
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeChannel : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeChannel, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
void SetInput ( CDmElement* pElement, const char* pAttribute, int index = 0 );
|
||||
void SetOutput( CDmElement* pElement, const char* pAttribute, int index = 0 );
|
||||
|
||||
void SetInput( CDmAttribute *pAttribute, int index = 0 );
|
||||
void SetOutput( CDmAttribute *pAttribute, int index = 0 );
|
||||
|
||||
CDmElement *GetFromElement() const;
|
||||
CDmElement *GetToElement() const;
|
||||
|
||||
CDmAttribute *GetFromAttribute();
|
||||
CDmAttribute *GetToAttribute();
|
||||
|
||||
int GetFromArrayIndex() const;
|
||||
int GetToArrayIndex() const;
|
||||
|
||||
ChannelMode_t GetMode();
|
||||
void SetMode( ChannelMode_t mode );
|
||||
|
||||
void ClearLog();
|
||||
CDmeLog *GetLog();
|
||||
void SetLog( CDmeLog *pLog );
|
||||
CDmeLog *CreateLog( DmAttributeType_t type );
|
||||
template < class T > CDmeTypedLog<T> *CreateLog();
|
||||
|
||||
void ClearTimeMetric();
|
||||
void SetCurrentTime( DmeTime_t time, DmeTime_t start, DmeTime_t end );
|
||||
void SetCurrentTime( DmeTime_t time ); // Simple version. Only works if multiple active channels clips do not reference the same channels
|
||||
DmeTime_t GetCurrentTime() const;
|
||||
|
||||
void SetChannelToPlayToSelf( const char *outputAttributeName, float defaultValue, bool force = false );
|
||||
|
||||
// need this until we have the EditApply message queue
|
||||
void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
template< class T >
|
||||
bool GetCurrentPlaybackValue( T& value );
|
||||
template< class T >
|
||||
bool GetPlaybackValueAtTime( DmeTime_t time, T& value );
|
||||
|
||||
void Play();
|
||||
|
||||
void SetNextKeyCurveType( int nCurveType );
|
||||
|
||||
// Builds a clip stack for the channel
|
||||
CDmeClip* FindOwnerClipForChannel( CDmeClip *pRoot );
|
||||
bool BuildClipStack( DmeClipStack_t *pClipStack, CDmeClip *pRoot, CDmeClip *pShot );
|
||||
|
||||
protected:
|
||||
// Used to cache off handles to attributes
|
||||
CDmAttribute* SetupFromAttribute();
|
||||
CDmAttribute* SetupToAttribute();
|
||||
|
||||
void Record();
|
||||
void Pass();
|
||||
|
||||
CDmaElement< CDmElement > m_fromElement;
|
||||
CDmaString m_fromAttribute;
|
||||
CDmaVar< int > m_fromIndex;
|
||||
CDmaElement< CDmElement > m_toElement;
|
||||
CDmaString m_toAttribute;
|
||||
CDmaVar< int > m_toIndex;
|
||||
CDmaVar< int > m_mode;
|
||||
CDmaElement< CDmeLog > m_log;
|
||||
|
||||
DmAttributeHandle_t m_FromAttributeHandle;
|
||||
DmAttributeHandle_t m_ToAttributeHandle;
|
||||
|
||||
DmeTime_t m_timeOutsideTimeframe;
|
||||
DmeTime_t m_tCurrentTime;
|
||||
DmeTime_t m_tPreviousTime;
|
||||
|
||||
int m_nRecordLayerIndex;
|
||||
int m_nNextCurveType;
|
||||
|
||||
friend class CDmeChannelRecordingMgr;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
template < class T >
|
||||
inline CDmeTypedLog<T> *CDmeChannel::CreateLog()
|
||||
{
|
||||
return CastElement< CDmeTypedLog<T> >( CreateLog( CDmAttributeInfo<T>::AttributeType() ) );
|
||||
}
|
||||
|
||||
inline CDmAttribute *CDmeChannel::GetFromAttribute()
|
||||
{
|
||||
CDmAttribute *pAttribute = g_pDataModel->GetAttribute( m_FromAttributeHandle );
|
||||
if ( !pAttribute )
|
||||
{
|
||||
pAttribute = SetupFromAttribute();
|
||||
}
|
||||
return pAttribute;
|
||||
}
|
||||
|
||||
inline CDmAttribute *CDmeChannel::GetToAttribute()
|
||||
{
|
||||
CDmAttribute *pAttribute = g_pDataModel->GetAttribute( m_ToAttributeHandle );
|
||||
if ( !pAttribute )
|
||||
{
|
||||
pAttribute = SetupToAttribute();
|
||||
}
|
||||
return pAttribute;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
inline bool CDmeChannel::GetPlaybackValueAtTime( DmeTime_t time, T& value )
|
||||
{
|
||||
CDmeTypedLog< T > *pLog = CastElement< CDmeTypedLog< T > >( GetLog() );
|
||||
if ( !pLog || pLog->IsEmpty() )
|
||||
return false;
|
||||
|
||||
DmeTime_t t0 = pLog->GetBeginTime();
|
||||
DmeTime_t tn = pLog->GetEndTime();
|
||||
|
||||
PlayMode_t pmode = PM_HOLD;
|
||||
switch ( pmode )
|
||||
{
|
||||
case PM_HOLD:
|
||||
time = clamp( time, t0, tn );
|
||||
break;
|
||||
|
||||
case PM_LOOP:
|
||||
if ( tn == t0 )
|
||||
{
|
||||
time = t0;
|
||||
}
|
||||
else
|
||||
{
|
||||
time -= t0;
|
||||
time = time % ( tn - t0 );
|
||||
time += t0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
value = pLog->GetValue( time );
|
||||
return true;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
inline bool CDmeChannel::GetCurrentPlaybackValue( T& value )
|
||||
{
|
||||
return GetPlaybackValueAtTime( GetCurrentTime(), value );
|
||||
}
|
||||
|
||||
#endif // DMECHANNEL_H
|
||||
544
public/movieobjects/dmeclip.h
Normal file
544
public/movieobjects/dmeclip.h
Normal file
@@ -0,0 +1,544 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECLIP_H
|
||||
#define DMECLIP_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "video/ivideoservices.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
#include "tier1/utlmap.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeClip;
|
||||
class CDmeTimeFrame;
|
||||
class CDmeBookmark;
|
||||
class CDmeSound;
|
||||
class CDmeChannel;
|
||||
class CDmeCamera;
|
||||
class CDmeLight;
|
||||
class CDmeDag;
|
||||
class CDmeInput;
|
||||
class CDmeOperator;
|
||||
class CDmeMaterial;
|
||||
class CDmeTrack;
|
||||
class CDmeTrackGroup;
|
||||
class IMaterial;
|
||||
class CDmeChannelsClip;
|
||||
class CDmeAnimationSet;
|
||||
class CDmeMaterialOverlayFXClip;
|
||||
class DmeLog_TimeSelection_t;
|
||||
struct Rect_t;
|
||||
|
||||
|
||||
enum DmeClipSkipFlag_t
|
||||
{
|
||||
DMESKIP_NONE = 0,
|
||||
DMESKIP_MUTED = 1,
|
||||
DMESKIP_INVISIBLE = 2,
|
||||
};
|
||||
DEFINE_ENUM_BITWISE_OPERATORS( DmeClipSkipFlag_t )
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Clip types
|
||||
//-----------------------------------------------------------------------------
|
||||
enum DmeClipType_t
|
||||
{
|
||||
DMECLIP_UNKNOWN = -1,
|
||||
|
||||
DMECLIP_FIRST = 0,
|
||||
|
||||
DMECLIP_CHANNEL = 0,
|
||||
DMECLIP_SOUND,
|
||||
DMECLIP_FX,
|
||||
DMECLIP_FILM,
|
||||
|
||||
DMECLIP_LAST = DMECLIP_FILM,
|
||||
|
||||
DMECLIP_TYPE_COUNT
|
||||
};
|
||||
DEFINE_ENUM_INCREMENT_OPERATORS( DmeClipType_t )
|
||||
|
||||
|
||||
typedef CUtlVector< CDmeHandle< CDmeClip > > DmeClipStack_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Is a particular clip type non-overlapping?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool IsNonoverlapping( DmeClipType_t type )
|
||||
{
|
||||
return ( type == DMECLIP_FILM );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// String to clip type + back
|
||||
//-----------------------------------------------------------------------------
|
||||
DmeClipType_t ClipTypeFromString( const char *pName );
|
||||
const char *ClipTypeToString( DmeClipType_t type );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Used to move clips in non-film track groups with film clips
|
||||
//-----------------------------------------------------------------------------
|
||||
struct ClipAssociation_t
|
||||
{
|
||||
enum AssociationType_t
|
||||
{
|
||||
HAS_CLIP = 0,
|
||||
BEFORE_START,
|
||||
AFTER_END,
|
||||
NO_MOVEMENT,
|
||||
};
|
||||
|
||||
AssociationType_t m_nType;
|
||||
CDmeHandle< CDmeClip > m_hClip;
|
||||
CDmeHandle< CDmeClip > m_hAssociation;
|
||||
DmeTime_t m_offset;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Constructor, destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeClip : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeClip, CDmElement );
|
||||
|
||||
public:
|
||||
// Inherited from IDmElement
|
||||
virtual void OnAttributeArrayElementAdded( CDmAttribute *pAttribute, int nFirstElem, int nLastElem );
|
||||
virtual void OnAttributeArrayElementRemoved( CDmAttribute *pAttribute, int nFirstElem, int nLastElem );
|
||||
|
||||
// Returns the time frame
|
||||
CDmeTimeFrame *GetTimeFrame() const;
|
||||
DmeTime_t ToChildMediaTime ( DmeTime_t t, bool bClamp = true ) const;
|
||||
DmeTime_t FromChildMediaTime( DmeTime_t t, bool bClamp = true ) const;
|
||||
DmeTime_t ToChildMediaDuration ( DmeTime_t dt ) const;
|
||||
DmeTime_t FromChildMediaDuration( DmeTime_t dt ) const;
|
||||
DmeTime_t GetStartTime() const;
|
||||
DmeTime_t GetEndTime() const;
|
||||
DmeTime_t GetDuration() const;
|
||||
DmeTime_t GetTimeOffset() const;
|
||||
DmeTime_t GetStartInChildMediaTime() const;
|
||||
DmeTime_t GetEndInChildMediaTime() const;
|
||||
float GetTimeScale() const;
|
||||
void SetStartTime ( DmeTime_t t );
|
||||
void SetDuration ( DmeTime_t t );
|
||||
void SetTimeOffset( DmeTime_t t );
|
||||
void SetTimeScale ( float s );
|
||||
|
||||
// Given a root clip and a child (or grandchild) clip, builds the stack
|
||||
// from root on down to the destination clip. If shot is specified, then it
|
||||
// must build a clip stack that passes through the shot
|
||||
bool BuildClipStack( DmeClipStack_t* pStack, CDmeClip *pRoot, CDmeClip *pShot = NULL );
|
||||
|
||||
// Clip stack versions of time conversion
|
||||
static DmeTime_t ToChildMediaTime ( const DmeClipStack_t& stack, DmeTime_t globalTime, bool bClamp = true );
|
||||
static DmeTime_t FromChildMediaTime ( const DmeClipStack_t& stack, DmeTime_t localTime, bool bClamp = true );
|
||||
static DmeTime_t ToChildMediaDuration ( const DmeClipStack_t& stack, DmeTime_t globalDuration );
|
||||
static DmeTime_t FromChildMediaDuration( const DmeClipStack_t& stack, DmeTime_t localDuration );
|
||||
static void ToChildMediaTime( DmeLog_TimeSelection_t ¶ms, const DmeClipStack_t& stack );
|
||||
|
||||
void SetClipColor( const Color& clr );
|
||||
Color GetClipColor() const;
|
||||
|
||||
void SetClipText( const char *pText );
|
||||
const char* GetClipText() const;
|
||||
|
||||
// Clip type
|
||||
virtual DmeClipType_t GetClipType() { return DMECLIP_UNKNOWN; }
|
||||
|
||||
// Track group iteration methods
|
||||
int GetTrackGroupCount() const;
|
||||
CDmeTrackGroup *GetTrackGroup( int nIndex ) const;
|
||||
const CUtlVector< DmElementHandle_t > &GetTrackGroups( ) const;
|
||||
|
||||
// Track group addition/removal
|
||||
void AddTrackGroup( CDmeTrackGroup *pTrackGroup );
|
||||
void AddTrackGroupBefore( CDmeTrackGroup *pTrackGroup, CDmeTrackGroup *pBefore );
|
||||
CDmeTrackGroup *AddTrackGroup( const char *pTrackGroupName );
|
||||
void RemoveTrackGroup( int nIndex );
|
||||
void RemoveTrackGroup( CDmeTrackGroup *pTrackGroup );
|
||||
void RemoveTrackGroup( const char *pTrackGroupName );
|
||||
|
||||
// Track group finding
|
||||
CDmeTrackGroup *FindTrackGroup( const char *pTrackGroupName ) const;
|
||||
int GetTrackGroupIndex( CDmeTrackGroup *pTrack ) const;
|
||||
CDmeTrackGroup *FindOrAddTrackGroup( const char *pTrackGroupName );
|
||||
|
||||
// Swap track groups
|
||||
void SwapOrder( CDmeTrackGroup *pTrackGroup1, CDmeTrackGroup *pTrackGroup2 );
|
||||
|
||||
// Clip finding
|
||||
virtual CDmeTrack *FindTrackForClip( CDmeClip *pClip, CDmeTrackGroup **ppTrackGroup = NULL ) const;
|
||||
bool FindMultiTrackGroupForClip( CDmeClip *pClip, int *pTrackGroupIndex, int *pTrackIndex = NULL, int *pClipIndex = NULL ) const;
|
||||
|
||||
// Finding clips in tracks by time
|
||||
virtual void FindClipsAtTime( DmeClipType_t clipType, DmeTime_t time, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
virtual void FindClipsWithinTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
|
||||
// Is a particular clip typed able to be added?
|
||||
bool IsSubClipTypeAllowed( DmeClipType_t type ) const;
|
||||
|
||||
// Returns the special film track group
|
||||
virtual CDmeTrackGroup *GetFilmTrackGroup() const { return NULL; }
|
||||
virtual CDmeTrack *GetFilmTrack() const { return NULL; }
|
||||
|
||||
// Checks for muteness
|
||||
void SetMute( bool state );
|
||||
bool IsMute( ) const;
|
||||
|
||||
protected:
|
||||
virtual int AllowedClipTypes() const { return 1 << DMECLIP_CHANNEL; }
|
||||
|
||||
// Is a track group valid to add?
|
||||
bool IsTrackGroupValid( CDmeTrackGroup *pTrackGroup );
|
||||
|
||||
CDmaElementArray< CDmeTrackGroup > m_TrackGroups;
|
||||
|
||||
CDmaElement< CDmeTimeFrame > m_TimeFrame;
|
||||
CDmaVar< Color > m_ClipColor;
|
||||
CDmaVar< bool > m_bMute;
|
||||
CDmaString m_ClipText;
|
||||
};
|
||||
|
||||
inline bool CDmeClip::IsSubClipTypeAllowed( DmeClipType_t type ) const
|
||||
{
|
||||
return ( AllowedClipTypes() & ( 1 << type ) ) != 0;
|
||||
}
|
||||
|
||||
inline void CDmeClip::SetMute( bool state )
|
||||
{
|
||||
m_bMute = state;
|
||||
}
|
||||
|
||||
inline bool CDmeClip::IsMute( ) const
|
||||
{
|
||||
return m_bMute;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sound clip
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSoundClip : public CDmeClip
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSoundClip, CDmeClip );
|
||||
|
||||
public:
|
||||
virtual DmeClipType_t GetClipType() { return DMECLIP_SOUND; }
|
||||
|
||||
void SetShowWave( bool state );
|
||||
bool ShouldShowWave( ) const;
|
||||
|
||||
CDmaElement< CDmeSound > m_Sound;
|
||||
CDmaVar< bool > m_bShowWave;
|
||||
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Clip containing recorded data from the game
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeChannelsClip : public CDmeClip
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeChannelsClip, CDmeClip );
|
||||
|
||||
public:
|
||||
virtual DmeClipType_t GetClipType() { return DMECLIP_CHANNEL; }
|
||||
|
||||
CDmeChannel *CreatePassThruConnection
|
||||
(
|
||||
char const *passThruName,
|
||||
CDmElement *pFrom,
|
||||
char const *pFromAttribute,
|
||||
CDmElement *pTo,
|
||||
char const *pToAttribute,
|
||||
int index = 0
|
||||
);
|
||||
|
||||
void RemoveChannel( CDmeChannel *pChannel );
|
||||
|
||||
CDmaElementArray< CDmeChannel > m_Channels;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// An effect clip
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeFXClip : public CDmeClip
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeFXClip, CDmeClip );
|
||||
|
||||
public:
|
||||
virtual DmeClipType_t GetClipType() { return DMECLIP_FX; }
|
||||
|
||||
enum
|
||||
{
|
||||
MAX_FX_INPUT_TEXTURES = 2
|
||||
};
|
||||
|
||||
// All effects must be able to apply their effect
|
||||
virtual void ApplyEffect( DmeTime_t time, Rect_t ¤tRect, Rect_t &totalRect, ITexture *pTextures[MAX_FX_INPUT_TEXTURES] ) {}
|
||||
|
||||
// Global list of FX clip types
|
||||
static void InstallFXClipType( const char *pElementType, const char *pDescription );
|
||||
static int FXClipTypeCount();
|
||||
static const char *FXClipType( int nIndex );
|
||||
static const char *FXClipDescription( int nIndex );
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
MAX_FXCLIP_TYPES = 16
|
||||
};
|
||||
static const char *s_pFXClipTypes[MAX_FXCLIP_TYPES];
|
||||
static const char *s_pFXClipDescriptions[MAX_FXCLIP_TYPES];
|
||||
static int s_nFXClipTypeCount;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helper Template factory for simple creation of factories
|
||||
//-----------------------------------------------------------------------------
|
||||
template <class T>
|
||||
class CDmFXClipFactory : public CDmElementFactory<T>
|
||||
{
|
||||
public:
|
||||
CDmFXClipFactory( const char *pLookupName, const char *pDescription ) : CDmElementFactory<T>( pLookupName )
|
||||
{
|
||||
CDmeFXClip::InstallFXClipType( pLookupName, pDescription );
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// All effects must use IMPLEMENT_FX_CLIP_ELEMENT_FACTORY instead of IMPLEMENT_ELEMENT_FACTORY
|
||||
//-----------------------------------------------------------------------------
|
||||
#if defined( MOVIEOBJECTS_LIB ) || defined ( DATAMODEL_LIB ) || defined ( DMECONTROLS_LIB )
|
||||
|
||||
#define IMPLEMENT_FX_CLIP_ELEMENT_FACTORY( lookupName, className, description ) \
|
||||
IMPLEMENT_ELEMENT( className ) \
|
||||
CDmFXClipFactory< className > g_##className##_Factory( #lookupName, description ); \
|
||||
CDmElementFactoryHelper g_##className##_Helper( #lookupName, &g_##className##_Factory, true ); \
|
||||
className *g_##className##LinkerHack = NULL;
|
||||
|
||||
#else
|
||||
|
||||
#define IMPLEMENT_FX_CLIP_ELEMENT_FACTORY( lookupName, className, description ) \
|
||||
IMPLEMENT_ELEMENT( className ) \
|
||||
CDmFXClipFactory< className > g_##className##_Factory( #lookupName, description ); \
|
||||
CDmElementFactoryHelper g_##className##_Helper( #lookupName, &g_##className##_Factory, false ); \
|
||||
className *g_##className##LinkerHack = NULL;
|
||||
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Film clip
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeFilmClip : public CDmeClip
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeFilmClip, CDmeClip );
|
||||
|
||||
public:
|
||||
virtual DmeClipType_t GetClipType() { return DMECLIP_FILM; }
|
||||
|
||||
// Attribute changed
|
||||
virtual void OnElementUnserialized( );
|
||||
virtual void PreAttributeChanged( CDmAttribute *pAttribute );
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
// Resolve
|
||||
virtual void Resolve();
|
||||
|
||||
// Returns the special film track group
|
||||
virtual CDmeTrackGroup *GetFilmTrackGroup() const;
|
||||
virtual CDmeTrack *GetFilmTrack() const;
|
||||
|
||||
CDmeTrackGroup *FindOrCreateFilmTrackGroup();
|
||||
CDmeTrack *FindOrCreateFilmTrack();
|
||||
|
||||
// Clip finding
|
||||
virtual CDmeTrack *FindTrackForClip( CDmeClip *pClip, CDmeTrackGroup **ppTrackGroup = NULL ) const;
|
||||
|
||||
// Finding clips in tracks by time
|
||||
virtual void FindClipsAtTime( DmeClipType_t clipType, DmeTime_t time, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
virtual void FindClipsWithinTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
|
||||
// mapname helper methods
|
||||
const char *GetMapName();
|
||||
void SetMapName( const char *pMapName );
|
||||
|
||||
// Returns the camera associated with the clip
|
||||
CDmeCamera *GetCamera();
|
||||
void SetCamera( CDmeCamera *pCamera );
|
||||
|
||||
// Audio volume
|
||||
void SetVolume( float state );
|
||||
float GetVolume() const;
|
||||
|
||||
// Returns the monitor camera associated with the clip (for now, only 1 supported)
|
||||
CDmeCamera *GetMonitorCamera();
|
||||
void AddMonitorCamera( CDmeCamera *pCamera );
|
||||
void RemoveMonitorCamera( CDmeCamera *pCamera );
|
||||
void SelectMonitorCamera( CDmeCamera *pCamera );
|
||||
int FindMonitorCamera( CDmeCamera *pCamera );
|
||||
|
||||
// Light helper methods
|
||||
int GetLightCount();
|
||||
CDmeLight *GetLight( int nIndex );
|
||||
void AddLight( CDmeLight *pLight );
|
||||
|
||||
// Scene / Dag helper methods
|
||||
void SetScene( CDmeDag *pDag );
|
||||
CDmeDag *GetScene();
|
||||
|
||||
// helper for inputs and operators
|
||||
int GetInputCount();
|
||||
CDmeInput *GetInput( int nIndex );
|
||||
void AddInput( CDmeInput *pInput );
|
||||
void RemoveAllInputs();
|
||||
void AddOperator( CDmeOperator *pOperator );
|
||||
void CollectOperators( CUtlVector< DmElementHandle_t > &operators );
|
||||
|
||||
// Helper for overlays
|
||||
// FIXME: Change this to use CDmeMaterials
|
||||
IMaterial *GetOverlayMaterial();
|
||||
void SetOverlay( const char *pMaterialName );
|
||||
float GetOverlayAlpha();
|
||||
void SetOverlayAlpha( float alpha );
|
||||
void DrawOverlay( DmeTime_t time, Rect_t ¤tRect, Rect_t &totalRect );
|
||||
bool HasOpaqueOverlay();
|
||||
|
||||
// AVI tape out
|
||||
void UseCachedVersion( bool bUseCachedVersion );
|
||||
bool IsUsingCachedVersion() const;
|
||||
IVideoMaterial *GetCachedVideoMaterial();
|
||||
void SetCachedAVI( const char *pAVIFile );
|
||||
|
||||
int GetAnimationSetCount();
|
||||
CDmeAnimationSet *GetAnimationSet( int idx );
|
||||
void AddAnimationSet( CDmeAnimationSet *element );
|
||||
void RemoveAllAnimationSets();
|
||||
CDmaElementArray< CDmElement > &GetAnimationSets(); // raw access to the array
|
||||
const CDmaElementArray< CDmElement > &GetAnimationSets() const;
|
||||
|
||||
const CDmaElementArray< CDmeBookmark > &GetBookmarks() const;
|
||||
CDmaElementArray< CDmeBookmark > &GetBookmarks();
|
||||
|
||||
void SetFadeTimes( DmeTime_t fadeIn, DmeTime_t fadeOut ) { m_fadeInDuration = fadeIn.GetTenthsOfMS(); m_fadeOutDuration = fadeOut.GetTenthsOfMS(); }
|
||||
void SetFadeInTime( DmeTime_t t ) { m_fadeInDuration = t.GetTenthsOfMS(); }
|
||||
void SetFadeOutTime( DmeTime_t t ) { m_fadeOutDuration = t.GetTenthsOfMS(); }
|
||||
DmeTime_t GetFadeInTime() const { return DmeTime_t( m_fadeInDuration.Get() ); }
|
||||
DmeTime_t GetFadeOutTime() const { return DmeTime_t( m_fadeOutDuration.Get() ); }
|
||||
|
||||
// Used to move clips in non-film track groups with film clips
|
||||
// Call BuildClipAssociations before modifying the film track,
|
||||
// then UpdateAssociatedClips after modifying it.
|
||||
void BuildClipAssociations( CUtlVector< ClipAssociation_t > &association, bool bHandleGaps = true );
|
||||
void UpdateAssociatedClips( CUtlVector< ClipAssociation_t > &association );
|
||||
|
||||
// Rolls associated clips so they remain in the same relative time
|
||||
void RollAssociatedClips( CDmeClip *pClip, CUtlVector< ClipAssociation_t > &association, DmeTime_t dt );
|
||||
|
||||
// Shifts associated clips so they remain in the same relative time when pClip is scaled
|
||||
void ScaleAssociatedClips( CDmeClip *pClip, CUtlVector< ClipAssociation_t > &association, float ratio, DmeTime_t oldOffset );
|
||||
|
||||
private:
|
||||
virtual int AllowedClipTypes() const { return (1 << DMECLIP_CHANNEL) | (1 << DMECLIP_SOUND) | (1 << DMECLIP_FX) | (1 << DMECLIP_FILM); }
|
||||
|
||||
CDmaElement< CDmeTrackGroup > m_FilmTrackGroup;
|
||||
|
||||
CDmaString m_MapName;
|
||||
CDmaElement < CDmeCamera > m_Camera;
|
||||
CDmaElementArray< CDmeCamera > m_MonitorCameras;
|
||||
CDmaVar< int > m_nActiveMonitor;
|
||||
CDmaElement < CDmeDag > m_Scene;
|
||||
CDmaElementArray< CDmeLight > m_Lights;
|
||||
|
||||
CDmaElementArray< CDmeInput > m_Inputs;
|
||||
CDmaElementArray< CDmeOperator > m_Operators;
|
||||
|
||||
CDmaString m_AVIFile;
|
||||
|
||||
CDmaVar< int > m_fadeInDuration;
|
||||
CDmaVar< int > m_fadeOutDuration;
|
||||
|
||||
CDmaElement< CDmeMaterialOverlayFXClip >m_MaterialOverlayEffect;
|
||||
CDmaVar< bool > m_bIsUsingCachedVersion;
|
||||
|
||||
CDmaElementArray< CDmElement > m_AnimationSets; // "animationSets"
|
||||
CDmaElementArray< CDmeBookmark > m_Bookmarks;
|
||||
|
||||
CDmaVar< float > m_Volume;
|
||||
|
||||
IVideoMaterial *m_pCachedVersion;
|
||||
bool m_bReloadCachedVersion;
|
||||
CMaterialReference m_FadeMaterial;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Fast type conversions
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool IsFilmClip( CDmeClip *pClip )
|
||||
{
|
||||
return pClip && pClip->IsA( CDmeFilmClip::GetStaticTypeSymbol() );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Creates a slug clip
|
||||
//-----------------------------------------------------------------------------
|
||||
CDmeFilmClip *CreateSlugClip( const char *pClipName, DmeTime_t startTime, DmeTime_t endTime, DmFileId_t fileid );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// For use in template functions
|
||||
//-----------------------------------------------------------------------------
|
||||
template <class T>
|
||||
class CDmeClipInfo
|
||||
{
|
||||
public:
|
||||
static DmeClipType_t ClipType( ) { return DMECLIP_UNKNOWN; }
|
||||
};
|
||||
|
||||
#define DECLARE_DMECLIP_TYPE( _className, _dmeClipType ) \
|
||||
template< > class CDmeClipInfo< _className > \
|
||||
{ \
|
||||
public: \
|
||||
static DmeClipType_t ClipType() { return _dmeClipType; } \
|
||||
};
|
||||
|
||||
DECLARE_DMECLIP_TYPE( CDmeSoundClip, DMECLIP_SOUND )
|
||||
DECLARE_DMECLIP_TYPE( CDmeChannelsClip, DMECLIP_CHANNEL )
|
||||
DECLARE_DMECLIP_TYPE( CDmeFXClip, DMECLIP_FX )
|
||||
DECLARE_DMECLIP_TYPE( CDmeFilmClip, DMECLIP_FILM )
|
||||
|
||||
#define DMECLIP_TYPE( _className ) CDmeClipInfo<T>::ClipType()
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// helper methods
|
||||
//-----------------------------------------------------------------------------
|
||||
CDmeTrack *GetParentTrack( CDmeClip *pClip );
|
||||
CDmeChannel *FindChannelTargetingElement( CDmeChannelsClip *pChannelsClip, CDmElement *pElement, const char *pAttributeName = NULL );
|
||||
CDmeChannel *FindChannelTargetingElement( CDmeFilmClip *pClip, CDmElement *pElement, const char *pAttributeName, CDmeChannelsClip **ppChannelsClip, CDmeTrack **ppTrack = NULL, CDmeTrackGroup **ppTrackGroup = NULL );
|
||||
|
||||
#endif // DMECLIP_H
|
||||
459
public/movieobjects/dmecombinationoperator.h
Normal file
459
public/movieobjects/dmecombinationoperator.h
Normal file
@@ -0,0 +1,459 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Operators that generate combinations
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECOMBINATIONOPERATOR_H
|
||||
#define DMECOMBINATIONOPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
#include "movieobjects/dmeexpressionoperator.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Expression operator
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeChannel;
|
||||
class CDmeDag;
|
||||
class CDmElement;
|
||||
class CDmeChannelsClip;
|
||||
class CDmeShape;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Control handles
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef int ControlIndex_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Basic version..
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeCombinationInputControl : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCombinationInputControl, CDmElement );
|
||||
|
||||
public:
|
||||
virtual void OnElementUnserialized();
|
||||
|
||||
// Adds a control, returns the control index,
|
||||
// returns true if remapped control lists need updating
|
||||
bool AddRawControl( const char *pRawControlName );
|
||||
|
||||
// Removes controls
|
||||
// returns true if remapped control lists need updating
|
||||
bool RemoveRawControl( const char *pRawControlName );
|
||||
void RemoveAllRawControls();
|
||||
|
||||
// Iterates remapped controls
|
||||
int RawControlCount() const;
|
||||
const char *RawControlName( int nIndex ) const;
|
||||
|
||||
// Do we have a raw control?
|
||||
bool HasRawControl( const char *pRawControlName ) const;
|
||||
|
||||
// Reordering controls
|
||||
void MoveRawControlUp( const char *pRawControlName );
|
||||
void MoveRawControlDown( const char *pRawControlName );
|
||||
|
||||
// Is this control a stereo control?
|
||||
bool IsStereo() const;
|
||||
void SetStereo( bool bStereo );
|
||||
|
||||
// Is this control an eyelid control?
|
||||
bool IsEyelid() const;
|
||||
void SetEyelid( bool bEyelid );
|
||||
|
||||
// Returns the name of the eyeball
|
||||
const char *GetEyesUpDownFlexName() const;
|
||||
|
||||
// Returns the wrinkle scale for a particular control
|
||||
float WrinkleScale( const char *pRawControlName );
|
||||
float WrinkleScale( int nIndex );
|
||||
void SetWrinkleScale( const char *pRawControlName, float flWrinkleScale );
|
||||
|
||||
float GetDefaultValue() const;
|
||||
float GetBaseValue() const;
|
||||
|
||||
private:
|
||||
int FindRawControl( const char *pRawControlName );
|
||||
|
||||
CDmaStringArray m_RawControlNames;
|
||||
CDmaVar<bool> m_bIsStereo;
|
||||
CDmaVar< bool > m_bIsEyelid;
|
||||
|
||||
// FIXME! Remove soon! Used to autogenerate wrinkle deltas
|
||||
CDmaArray< float > m_WrinkleScales;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Basic version..
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeCombinationDominationRule : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCombinationDominationRule, CDmElement );
|
||||
|
||||
public:
|
||||
// Methods of IDmElement
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
// Adds a dominating control
|
||||
void AddDominator( const char *pDominatorControl );
|
||||
|
||||
// Add a suppressed control
|
||||
void AddSuppressed( const char *pSuppressedControl );
|
||||
|
||||
// Remove all dominatior + suppressed controls
|
||||
void RemoveAllDominators();
|
||||
void RemoveAllSuppressed();
|
||||
|
||||
// Iteration
|
||||
int DominatorCount() const;
|
||||
const char *GetDominator( int i ) const;
|
||||
|
||||
int SuppressedCount() const;
|
||||
const char *GetSuppressed( int i ) const;
|
||||
|
||||
// Search
|
||||
bool HasDominatorControl( const char *pDominatorControl ) const;
|
||||
bool HasSuppressedControl( const char *pSuppressedControl ) const;
|
||||
|
||||
private:
|
||||
bool HasString( const char *pString, const CDmaStringArray& attr );
|
||||
|
||||
CDmaStringArray m_Dominators;
|
||||
CDmaStringArray m_Suppressed;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Basic version.. needs channels to copy the data out of its output attributes
|
||||
//-----------------------------------------------------------------------------
|
||||
enum CombinationControlType_t
|
||||
{
|
||||
COMBO_CONTROL_FIRST = 0,
|
||||
|
||||
COMBO_CONTROL_NORMAL = 0,
|
||||
COMBO_CONTROL_LAGGED,
|
||||
|
||||
COMBO_CONTROL_TYPE_COUNT,
|
||||
};
|
||||
|
||||
class CDmeCombinationOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCombinationOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
// Methods of IDmElement
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
virtual void OnElementUnserialized();
|
||||
|
||||
// Adds a control, returns the control index. Also adds a raw control with the same name to this control
|
||||
ControlIndex_t FindOrCreateControl( const char *pControlName, bool bStereo, bool bAutoAddRawControl = false );
|
||||
|
||||
// Finds the index of the control with the specified name
|
||||
ControlIndex_t FindControlIndex( const char *pControlName );
|
||||
|
||||
// Changes a control's name
|
||||
void SetControlName( ControlIndex_t nControl, const char *pControlName );
|
||||
|
||||
// Removes a control
|
||||
void RemoveControl( const char *pControlName );
|
||||
void RemoveAllControls();
|
||||
|
||||
// Adds a remapped control to a input control
|
||||
void AddRawControl( ControlIndex_t nControl, const char *pRawControlName );
|
||||
|
||||
// Removes an remapped control from a control
|
||||
void RemoveRawControl( ControlIndex_t nControl, const char *pRawControlName );
|
||||
void RemoveAllRawControls( ControlIndex_t nControl );
|
||||
|
||||
// Iterates output controls associated with an input control
|
||||
int GetRawControlCount( ControlIndex_t nControl ) const;
|
||||
const char *GetRawControlName( ControlIndex_t nControl, int nIndex ) const;
|
||||
float GetRawControlWrinkleScale( ControlIndex_t nControl, int nIndex ) const;
|
||||
float GetRawControlWrinkleScale( ControlIndex_t nControl, const char *pRawControlName ) const;
|
||||
|
||||
// Iterates a global list of output controls
|
||||
int GetRawControlCount( ) const;
|
||||
const char *GetRawControlName( int nIndex ) const;
|
||||
float GetRawControlWrinkleScale( int nIndex ) const;
|
||||
bool IsStereoRawControl( int nIndex ) const;
|
||||
bool IsEyelidRawControl( int nIndex ) const;
|
||||
|
||||
// Gets Input Control Default & Base Values
|
||||
float GetControlDefaultValue( ControlIndex_t nControl ) const;
|
||||
float GetControlBaseValue( ControlIndex_t nControl ) const;
|
||||
|
||||
// Do we have a raw control?
|
||||
bool HasRawControl( const char *pRawControlName ) const;
|
||||
|
||||
// Sets the wrinkle scale for a particular raw control
|
||||
void SetWrinkleScale( ControlIndex_t nControlIndex, const char *pRawControlName, float flWrinkleScale );
|
||||
|
||||
// Sets the value of a control
|
||||
void SetControlValue( ControlIndex_t nControlIndex, float flValue, CombinationControlType_t type = COMBO_CONTROL_NORMAL );
|
||||
|
||||
// Sets the value of a stereo control
|
||||
void SetControlValue( ControlIndex_t nControlIndex, float flLevel, float flBalance, CombinationControlType_t type = COMBO_CONTROL_NORMAL );
|
||||
void SetControlValue( ControlIndex_t nControlIndex, const Vector2D& vec, CombinationControlType_t type = COMBO_CONTROL_NORMAL );
|
||||
|
||||
// Returns true if a control is a stereo control
|
||||
void SetStereoControl( ControlIndex_t nControlIndex, bool bIsStereo );
|
||||
bool IsStereoControl( ControlIndex_t nControlIndex ) const;
|
||||
|
||||
// Sets the level of a control (only used by controls w/ 3 or more remappings)
|
||||
void SetMultiControlLevel( ControlIndex_t nControlIndex, float flLevel, CombinationControlType_t type = COMBO_CONTROL_NORMAL );
|
||||
float GetMultiControlLevel( ControlIndex_t nControlIndex, CombinationControlType_t type = COMBO_CONTROL_NORMAL ) const;
|
||||
|
||||
// Reordering controls
|
||||
void MoveControlUp( const char *pControlName );
|
||||
void MoveControlDown( const char *pControlName );
|
||||
void MoveControlBefore( const char *pDragControlName, const char *pDropControlName );
|
||||
void MoveControlAfter( const char *pDragControlName, const char *pDropControlName );
|
||||
|
||||
void MoveRawControlUp( ControlIndex_t nControlIndex, const char *pRawControlName );
|
||||
void MoveRawControlDown( ControlIndex_t nControlIndex, const char *pRawControlName );
|
||||
|
||||
// Returns true if a control is a multi control (a control w/ 3 or more remappings)
|
||||
bool IsMultiControl( ControlIndex_t nControlIndex ) const;
|
||||
|
||||
// Returns true if a control is a multi-control which controls eyelids
|
||||
void SetEyelidControl( ControlIndex_t nControlIndex, bool bIsEyelid );
|
||||
bool IsEyelidControl( ControlIndex_t nControlIndex ) const;
|
||||
const char *GetEyesUpDownFlexName( ControlIndex_t nControlIndex ) const;
|
||||
|
||||
// Sets the value of a control
|
||||
float GetControlValue( ControlIndex_t nControlIndex, CombinationControlType_t type = COMBO_CONTROL_NORMAL ) const;
|
||||
const Vector2D& GetStereoControlValue( ControlIndex_t nControlIndex, CombinationControlType_t type = COMBO_CONTROL_NORMAL ) const;
|
||||
|
||||
// Iterates controls
|
||||
int GetControlCount() const;
|
||||
const char *GetControlName( ControlIndex_t i ) const;
|
||||
|
||||
// Attaches a channel to an input
|
||||
void AttachChannelToControlValue( ControlIndex_t nControlIndex, CombinationControlType_t type, CDmeChannel *pChannel );
|
||||
|
||||
// Adds a domination rule. Domination rules are specified using raw control names
|
||||
CDmeCombinationDominationRule *AddDominationRule( );
|
||||
CDmeCombinationDominationRule *AddDominationRule( int nDominatorCount, const char **ppDominatorOutputControlNames, int nSuppressedCount, const char **ppSuppressedOutputControlNames );
|
||||
CDmeCombinationDominationRule *AddDominationRule( const CUtlVector< const char * > dominators, const CUtlVector< const char * > suppressed );
|
||||
CDmeCombinationDominationRule *AddDominationRule( CDmeCombinationDominationRule *pSrcRule );
|
||||
|
||||
// Removes a domination rule
|
||||
void RemoveDominationRule( int nIndex );
|
||||
void RemoveDominationRule( CDmeCombinationDominationRule *pRule );
|
||||
void RemoveAllDominationRules();
|
||||
|
||||
// Iteration
|
||||
int DominationRuleCount() const;
|
||||
CDmeCombinationDominationRule *GetDominationRule( int i );
|
||||
|
||||
// Rule reordering
|
||||
void MoveDominationRuleUp( CDmeCombinationDominationRule* pRule );
|
||||
void MoveDominationRuleDown( CDmeCombinationDominationRule* pRule );
|
||||
|
||||
// Indicates we're using lagged control values
|
||||
void UsingLaggedData( bool bEnable );
|
||||
bool IsUsingLaggedData() const;
|
||||
|
||||
// Adds a target model/arbitrary element to perform the combinations on
|
||||
// The arbitrary element must have two attributes
|
||||
// "deltaStates", which is an array of elements
|
||||
// "deltaStateWeights", which is an array of floats
|
||||
// In the case of the model, it will look for all shapes in the dag hierarchy
|
||||
// and attempt to add that shape as a target
|
||||
// NOTE: Targets are not saved
|
||||
void AddTarget( CDmeDag *pDag );
|
||||
void AddTarget( CDmElement *pElement );
|
||||
void RemoveAllTargets();
|
||||
|
||||
// Used by studiomdl to discover the various combination rules
|
||||
int GetOperationTargetCount() const;
|
||||
CDmElement *GetOperationTarget( int nTargetIndex );
|
||||
int GetOperationCount( int nTargetIndex ) const;
|
||||
CDmElement *GetOperationDeltaState( int nTargetIndex, int nOpIndex );
|
||||
const CUtlVector< int > &GetOperationControls( int nTargetIndex, int nOpIndex ) const;
|
||||
int GetOperationDominatorCount( int nTargetIndex, int nOpIndex ) const;
|
||||
const CUtlVector< int > &GetOperationDominator( int nTargetIndex, int nOpIndex, int nDominatorIndex ) const;
|
||||
|
||||
// Does one of the targets we refer to contain a particular delta state?
|
||||
bool DoesTargetContainDeltaState( const char *pDeltaStateName );
|
||||
|
||||
virtual void Operate();
|
||||
|
||||
virtual void Resolve();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
// Would a particular delta state attached to this combination operator end up stero?
|
||||
bool IsDeltaStateStereo( const char *pDeltaStateName );
|
||||
|
||||
void CopyControls( CDmeCombinationOperator *pSrc );
|
||||
|
||||
// FIXME: Remove soon!
|
||||
// This is a very short-term solution to the problem of autogenerating
|
||||
// wrinkle data; when we have real editors we can remove it
|
||||
void GenerateWrinkleDeltas( bool bOverwrite = true );
|
||||
|
||||
void SetToDefault();
|
||||
|
||||
// The base values are different from the default values see CDmeCombinationInputControl
|
||||
void SetToBase();
|
||||
|
||||
// Remove all controls and domination rules which are not referring to anything
|
||||
void Purge();
|
||||
|
||||
protected:
|
||||
void ComputeCombinationInfo( int nIndex );
|
||||
|
||||
private:
|
||||
typedef int RawControlIndex_t;
|
||||
|
||||
struct DominatorInfo_t
|
||||
{
|
||||
CUtlVector< RawControlIndex_t > m_DominantIndices;
|
||||
CUtlVector< RawControlIndex_t > m_SuppressedIndices;
|
||||
};
|
||||
|
||||
struct CombinationOperation_t
|
||||
{
|
||||
int m_nDeltaStateIndex;
|
||||
CUtlVector< RawControlIndex_t > m_ControlIndices;
|
||||
CUtlVector< RawControlIndex_t > m_DominatorIndices;
|
||||
};
|
||||
|
||||
struct CombinationInfo_t
|
||||
{
|
||||
DmAttributeHandle_t m_hDestAttribute[COMBO_CONTROL_TYPE_COUNT];
|
||||
CUtlVector< CombinationOperation_t > m_Outputs;
|
||||
};
|
||||
|
||||
struct RawControlInfo_t
|
||||
{
|
||||
CUtlString m_Name;
|
||||
bool m_bIsDefaultControl;
|
||||
ControlIndex_t m_InputControl;
|
||||
float m_flWrinkleScale;
|
||||
bool m_bLowerEyelid;
|
||||
Vector4D m_FilterRamp; // [0] = point at which ramp starts going up
|
||||
// [1] = point at which ramp hits 1.0
|
||||
// [2] = point at which ramp stops holding at 1.0
|
||||
// [3] = point at which ramp starts going down
|
||||
};
|
||||
|
||||
void ComputeCombinationInfo();
|
||||
void CleanUpCombinationInfo( int nIndex );
|
||||
void CleanUpCombinationInfo();
|
||||
|
||||
// Is a particular remapped control stereo?
|
||||
bool IsRawControlStereo( const char *pRawControlName );
|
||||
|
||||
// Determines the weighting of input controls based on the deltaState name
|
||||
int FindDeltaStateIndex( CDmAttribute *pDeltaArray, const char *pDeltaStateName );
|
||||
|
||||
// Determines which combination to use based on the deltaState name
|
||||
int ParseDeltaName( const char *pDeltaStateName, int *pControlIndices );
|
||||
|
||||
// Finds dominators
|
||||
void FindDominators( CombinationOperation_t& op );
|
||||
|
||||
// Computes lists of dominators and suppressors
|
||||
void RebuildDominatorInfo();
|
||||
|
||||
// Computes list of all remapped controls
|
||||
void RebuildRawControlList();
|
||||
|
||||
// Remaps non-stereo -> stereo, stereo ->left/right
|
||||
void ComputeInternalControlValue( RawControlIndex_t nRawControlIndex, CombinationControlType_t type, Vector2D &value );
|
||||
|
||||
// Computes lagged input values from non-lagged input
|
||||
void ComputeLaggedInputValues();
|
||||
|
||||
// Finds the index of the remapped control with the specified name
|
||||
RawControlIndex_t FindRawControlIndex( const char *pControlName, bool bIgnoreDefaultControls = false ) const;
|
||||
|
||||
// Updates the default value associated with a control
|
||||
void UpdateDefaultValue( ControlIndex_t nControlIndex );
|
||||
|
||||
// Finds a domination rule
|
||||
int FindDominationRule( CDmeCombinationDominationRule *pRule );
|
||||
|
||||
// Generates wrinkle deltas for a dag hierarchy
|
||||
void GenerateWrinkleDeltas( CDmeShape *pShape, bool bOverwrite );
|
||||
|
||||
CDmaElementArray< CDmeCombinationInputControl > m_InputControls;
|
||||
CDmaArray< Vector > m_ControlValues[COMBO_CONTROL_TYPE_COUNT];
|
||||
CDmaVar< bool > m_bSpecifyingLaggedData;
|
||||
|
||||
CDmaElementArray< CDmeCombinationDominationRule > m_Dominators;
|
||||
|
||||
CDmaElementArray< CDmElement > m_Targets;
|
||||
|
||||
CUtlVector< bool > m_IsDefaultValue; // one per control value
|
||||
CUtlVector< RawControlInfo_t > m_RawControlInfo;
|
||||
CUtlVector< CombinationInfo_t > m_CombinationInfo;
|
||||
CUtlVector< DominatorInfo_t > m_DominatorInfo;
|
||||
|
||||
float m_flLastLaggedComputationTime;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Indicates we're using lagged control values
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeCombinationOperator::UsingLaggedData( bool bEnable )
|
||||
{
|
||||
m_bSpecifyingLaggedData = bEnable;
|
||||
}
|
||||
|
||||
inline bool CDmeCombinationOperator::IsUsingLaggedData() const
|
||||
{
|
||||
return m_bSpecifyingLaggedData;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helper method to create a lagged version of channel data from source data
|
||||
//-----------------------------------------------------------------------------
|
||||
void CreateLaggedVertexAnimation( CDmeChannelsClip *pClip, int nSamplesPerSec );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// A class used to edit combination operators in Maya.. doesn't connect to targets
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMayaCombinationOperator : public CDmeCombinationOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMayaCombinationOperator, CDmeCombinationOperator );
|
||||
|
||||
public:
|
||||
void AddDeltaState( const char *pDeltaStateName );
|
||||
void RemoveDeltaState( const char *pDeltaStateName );
|
||||
void RemoveAllDeltaStates();
|
||||
|
||||
int FindDeltaState( const char *pDeltaStateName );
|
||||
|
||||
int DeltaStateCount() const;
|
||||
const char *GetDeltaState( int nIndex ) const;
|
||||
const Vector2D& GetDeltaStateWeight( int nIndex, CombinationControlType_t type ) const;
|
||||
|
||||
private:
|
||||
CDmaElementArray< CDmElement > m_DeltaStates;
|
||||
CDmaArray< Vector2D > m_DeltaStateWeights[COMBO_CONTROL_TYPE_COUNT];
|
||||
};
|
||||
|
||||
|
||||
#endif // DMECOMBINATIONOPERATOR_H
|
||||
107
public/movieobjects/dmedag.h
Normal file
107
public/movieobjects/dmedag.h
Normal file
@@ -0,0 +1,107 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a Dag (directed acyclic graph) node used for holding transforms, lights, cameras and shapes
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEDAG_H
|
||||
#define DMEDAG_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/utlstack.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "movieobjects/dmetransform.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform;
|
||||
class CDmeShape;
|
||||
class CDmeDrawSettings;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDag : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeDag, CDmElement );
|
||||
|
||||
public:
|
||||
// Accessors
|
||||
CDmeTransform *GetTransform();
|
||||
CDmeShape *GetShape();
|
||||
|
||||
// Changes the shage
|
||||
void SetShape( CDmeShape *pShape );
|
||||
|
||||
bool IsVisible() const;
|
||||
void SetVisible( bool bVisible = true );
|
||||
|
||||
// child helpers
|
||||
const CUtlVector< DmElementHandle_t > &GetChildren() const;
|
||||
int GetChildCount() const;
|
||||
CDmeDag *GetChild( int i ) const;
|
||||
void AddChild( CDmeDag* pDag );
|
||||
void RemoveChild( int i );
|
||||
void RemoveChild( const CDmeDag *pChild, bool bRecurse = false );
|
||||
int FindChild( const CDmeDag *pChild ) const;
|
||||
int FindChild( CDmeDag *&pParent, const CDmeDag *pChild );
|
||||
int FindChild( const char *name ) const;
|
||||
CDmeDag *FindOrAddChild( const char *name );
|
||||
|
||||
// Recursively render the Dag hierarchy
|
||||
virtual void Draw( CDmeDrawSettings *pDrawSettings = NULL );
|
||||
void GetBoundingSphere( Vector ¢er, float &radius ) const
|
||||
{
|
||||
matrix3x4_t identity;
|
||||
SetIdentityMatrix( identity );
|
||||
GetBoundingSphere( center, radius, identity );
|
||||
}
|
||||
|
||||
void GetShapeToWorldTransform( matrix3x4_t &mat );
|
||||
|
||||
void GetLocalMatrix( matrix3x4_t &mat );
|
||||
|
||||
void GetWorldMatrix( matrix3x4_t &mat );
|
||||
|
||||
void GetParentWorldMatrix( matrix3x4_t &mat );
|
||||
|
||||
static void DrawUsingEngineCoordinates( bool bEnable );
|
||||
|
||||
// Transform from DME to engine coordinates
|
||||
static void DmeToEngineMatrix( matrix3x4_t& dmeToEngine );
|
||||
static void EngineToDmeMatrix( matrix3x4_t& engineToDme );
|
||||
|
||||
protected:
|
||||
void GetBoundingSphere( Vector ¢er, float &radius, const matrix3x4_t &pMat ) const;
|
||||
|
||||
void PushDagTransform();
|
||||
void PopDagTransform();
|
||||
CDmAttribute *GetVisibilityAttribute();
|
||||
|
||||
CDmaVar< bool > m_Visible;
|
||||
CDmaElement< CDmeTransform > m_Transform;
|
||||
CDmaElement< CDmeShape > m_Shape;
|
||||
CDmaElementArray< CDmeDag > m_Children;
|
||||
|
||||
private:
|
||||
struct TransformInfo_t
|
||||
{
|
||||
CDmeTransform *m_pTransform;
|
||||
matrix3x4_t m_DagToWorld;
|
||||
bool m_bComputedDagToWorld;
|
||||
};
|
||||
|
||||
static CUtlStack<TransformInfo_t> s_TransformStack;
|
||||
static bool s_bDrawUsingEngineCoordinates;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEDAG_H
|
||||
131
public/movieobjects/dmedccmakefile.h
Normal file
131
public/movieobjects/dmedccmakefile.h
Normal file
@@ -0,0 +1,131 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Describes the way to compile data in DCC files (describes an export step)
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEDCCMAKEFILE_H
|
||||
#define DMEDCCMAKEFILE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmemakefile.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a source for DCC makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSourceDCCFile : public CDmeSource
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceDCCFile, CDmeSource );
|
||||
|
||||
public:
|
||||
CDmaStringArray m_RootDCCObjects;
|
||||
CDmaVar< int > m_ExportType; // 0 == model, 1 == skeletal animation
|
||||
CDmaVar< float > m_FrameStart;
|
||||
CDmaVar< float > m_FrameEnd;
|
||||
CDmaVar< float > m_FrameIncrement;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Strictly here to customize OpenEditor
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSourceMayaFile : public CDmeSourceDCCFile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceMayaFile, CDmeSourceDCCFile );
|
||||
};
|
||||
|
||||
class CDmeSourceMayaModelFile : public CDmeSourceMayaFile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceMayaModelFile, CDmeSourceMayaFile );
|
||||
};
|
||||
|
||||
class CDmeSourceMayaAnimationFile : public CDmeSourceMayaFile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceMayaAnimationFile, CDmeSourceMayaFile );
|
||||
};
|
||||
|
||||
class CDmeSourceXSIFile : public CDmeSourceDCCFile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceXSIFile, CDmeSourceDCCFile );
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a DCC asset
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDCCMakefile : public CDmeMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeDCCMakefile, CDmeMakefile );
|
||||
|
||||
public:
|
||||
virtual void GetOutputs( CUtlVector<CUtlString> &fullPaths );
|
||||
|
||||
private:
|
||||
virtual CDmElement *CreateOutputElement( );
|
||||
virtual void DestroyOutputElement( CDmElement *pOutput );
|
||||
virtual const char *GetOutputDirectoryID() { return "makefiledir:..\\dmx"; }
|
||||
bool m_bFlushFile;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a Maya asset
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMayaMakefile : public CDmeDCCMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMayaMakefile, CDmeDCCMakefile );
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a XSI asset
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeXSIMakefile : public CDmeDCCMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeXSIMakefile, CDmeDCCMakefile );
|
||||
|
||||
public:
|
||||
// Compiling is just exporting the data in the file
|
||||
virtual DmeMakefileType_t *GetMakefileType();
|
||||
virtual DmeMakefileType_t* GetSourceTypes();
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a Maya model/animation asset
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMayaModelMakefile : public CDmeMayaMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMayaModelMakefile, CDmeMayaMakefile );
|
||||
|
||||
public:
|
||||
// Compiling is just exporting the data in the file
|
||||
virtual DmeMakefileType_t *GetMakefileType();
|
||||
virtual DmeMakefileType_t* GetSourceTypes();
|
||||
};
|
||||
|
||||
class CDmeMayaAnimationMakefile : public CDmeMayaMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMayaAnimationMakefile, CDmeMayaMakefile );
|
||||
|
||||
public:
|
||||
// Compiling is just exporting the data in the file
|
||||
virtual DmeMakefileType_t *GetMakefileType();
|
||||
virtual DmeMakefileType_t* GetSourceTypes();
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a XSI animation asset
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeXSIAnimationMakefile : public CDmeXSIMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeXSIAnimationMakefile, CDmeXSIMakefile );
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEDCCMAKEFILE_H
|
||||
195
public/movieobjects/dmedrawsettings.h
Normal file
195
public/movieobjects/dmedrawsettings.h
Normal file
@@ -0,0 +1,195 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing draw settings for Dme things
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEDRAWSETTINGS_H
|
||||
#define DMEDRAWSETTINGS_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
#include "tier1/utlstack.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDag;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDrawSettings : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeDrawSettings, CDmElement );
|
||||
|
||||
public:
|
||||
|
||||
enum DrawType_t
|
||||
{
|
||||
DRAW_INVALID = -1,
|
||||
|
||||
DRAW_SMOOTH,
|
||||
DRAW_FLAT,
|
||||
DRAW_WIREFRAME,
|
||||
DRAW_BOUNDINGBOX,
|
||||
|
||||
STANDARD_DRAW_COUNT
|
||||
};
|
||||
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
DrawType_t GetDrawType() const;
|
||||
DrawType_t SetDrawType( int drawType );
|
||||
void PushDrawType();
|
||||
void PopDrawType();
|
||||
|
||||
bool Shaded() const {
|
||||
const DrawType_t drawType = GetDrawType();
|
||||
return drawType == DRAW_SMOOTH || drawType == DRAW_FLAT;
|
||||
}
|
||||
|
||||
bool GetBackfaceCulling() const { return m_bBackfaceCulling.Get(); }
|
||||
void SetBackfaceCulling( bool val ) { m_bBackfaceCulling.Set( val ); }
|
||||
|
||||
bool GetWireframeOnShaded() const { return m_bWireframeOnShaded.Get(); }
|
||||
void SetWireframeOnShaded( bool val ) { m_bWireframeOnShaded.Set( val ); }
|
||||
|
||||
bool GetXRay() const { return m_bXRay.Get(); }
|
||||
void SetXRay( bool val ) { m_bXRay.Set( val ); }
|
||||
|
||||
bool GetGrayShade() const { return m_bGrayShade.Get(); }
|
||||
void SetGrayShade( bool val ) { m_bGrayShade.Set( val ); }
|
||||
|
||||
bool GetNormals() const { return m_bNormals.Get(); }
|
||||
void SetNormals( bool val ) { m_bNormals.Set( val ); }
|
||||
|
||||
float GetNormalLength() const { return m_NormalLength.Get(); }
|
||||
void SetNormalLength( float val ) { m_NormalLength.Set( val ); }
|
||||
|
||||
const Color &GetColor() const { return m_Color.Get(); }
|
||||
void SetColor( Color val ) { m_Color.Set( val ); }
|
||||
|
||||
bool Drawable( CDmElement *pElement );
|
||||
|
||||
void BindWireframe();
|
||||
|
||||
void BindWireframeOnShaded();
|
||||
|
||||
void BindGray();
|
||||
|
||||
void BindUnlitGray();
|
||||
|
||||
bool GetDeltaHighlight() const { return m_bDeltaHighlight; }
|
||||
void SetDeltaHighlight( bool bDeltaHighlight ) { m_bDeltaHighlight.Set( bDeltaHighlight ); }
|
||||
|
||||
bool IsAMaterialBound() const {
|
||||
return m_IsAMaterialBound;
|
||||
}
|
||||
|
||||
void DrawDag( CDmeDag *pDag );
|
||||
|
||||
CUtlVector< Vector > &GetHighlightPoints() { return m_vHighlightPoints; }
|
||||
|
||||
public:
|
||||
|
||||
CDmaVar< int > m_DrawType;
|
||||
CDmaVar< bool > m_bBackfaceCulling;
|
||||
CDmaVar< bool > m_bWireframeOnShaded;
|
||||
CDmaVar< bool > m_bXRay;
|
||||
CDmaVar< bool > m_bGrayShade;
|
||||
CDmaVar< bool > m_bNormals;
|
||||
CDmaVar< float > m_NormalLength;
|
||||
CDmaVar< Color > m_Color;
|
||||
CDmaVar< bool > m_bDeltaHighlight;
|
||||
CDmaVar< float > m_flHighlightSize;
|
||||
CDmaVar< Color > m_cHighlightColor;
|
||||
|
||||
protected:
|
||||
|
||||
void BuildKnownDrawableTypes();
|
||||
|
||||
static bool s_bWireframeMaterialInitialized;
|
||||
static CMaterialReference s_WireframeMaterial;
|
||||
|
||||
static bool s_bWireframeOnShadedMaterialInitialized;
|
||||
static CMaterialReference s_WireframeOnShadedMaterial;
|
||||
|
||||
static bool s_bFlatGrayMaterial;
|
||||
static CMaterialReference s_FlatGrayMaterial;
|
||||
|
||||
static bool s_bUnlitGrayMaterial;
|
||||
static CMaterialReference s_UnlitGrayMaterial;
|
||||
|
||||
static CUtlRBTree< CUtlSymbol > s_KnownDrawableTypes;
|
||||
CUtlRBTree< CUtlSymbol > m_NotDrawable;
|
||||
|
||||
CUtlStack< DrawType_t > m_drawTypeStack;
|
||||
bool m_IsAMaterialBound;
|
||||
|
||||
// Points to highlight
|
||||
CUtlVector< Vector > m_vHighlightPoints;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmeDrawSettings::DrawType_t CDmeDrawSettings::SetDrawType( int drawType )
|
||||
{
|
||||
if ( drawType < 0 || drawType >= STANDARD_DRAW_COUNT )
|
||||
{
|
||||
drawType = DRAW_SMOOTH;
|
||||
}
|
||||
|
||||
m_DrawType.Set( drawType );
|
||||
|
||||
return GetDrawType();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmeDrawSettings::DrawType_t CDmeDrawSettings::GetDrawType() const
|
||||
{
|
||||
const int drawType( m_DrawType.Get() );
|
||||
if ( drawType < 0 || drawType >= STANDARD_DRAW_COUNT )
|
||||
return DRAW_SMOOTH;
|
||||
|
||||
return static_cast< DrawType_t >( drawType );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeDrawSettings::PushDrawType()
|
||||
{
|
||||
m_drawTypeStack.Push( GetDrawType() );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeDrawSettings::PopDrawType()
|
||||
{
|
||||
if ( m_drawTypeStack.Count() )
|
||||
{
|
||||
DrawType_t drawType = GetDrawType();
|
||||
m_drawTypeStack.Pop( drawType );
|
||||
SetDrawType( drawType );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // DMEDRAWSETTINGS_H
|
||||
132
public/movieobjects/dmeeditortypedictionary.h
Normal file
132
public/movieobjects/dmeeditortypedictionary.h
Normal file
@@ -0,0 +1,132 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Contains a bunch of information about editor types
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef DMEEDITORTYPEDICTIONARY_H
|
||||
#define DMEEDITORTYPEDICTIONARY_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Contains all attributes related to a particular attribute on a particular editor type
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEditorAttributeInfo : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEditorAttributeInfo, CDmElement );
|
||||
|
||||
public:
|
||||
// Returns the attribute name this info is associated with
|
||||
const char *GetAttributeName() const;
|
||||
|
||||
// Returns the widget name to create
|
||||
const char *GetWidgetName() const;
|
||||
|
||||
// Sets the info for an entry in an attribute array
|
||||
void SetArrayInfo( CDmeEditorAttributeInfo *pInfo );
|
||||
|
||||
// Returns the info for a entry in an attribute array, if this attribute is an array type
|
||||
CDmeEditorAttributeInfo *GetArrayInfo();
|
||||
|
||||
// NOTE: The name field of the widget element is the widget type
|
||||
// The attributes of the widget element are data for the widget to initialize
|
||||
CDmaString m_Widget;
|
||||
CDmaVar< bool > m_bIsVisible;
|
||||
CDmaVar< bool > m_bIsReadOnly;
|
||||
CDmaVar< bool > m_bHideType;
|
||||
CDmaVar< bool > m_bHideValue;
|
||||
CDmaString m_Help;
|
||||
|
||||
private:
|
||||
// If this attribute is an array attribute, how do we edit the array entries?
|
||||
CDmaElement< CDmeEditorAttributeInfo > m_ArrayEntries;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Base class for configuration for choices
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEditorChoicesInfo : public CDmeEditorAttributeInfo
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEditorChoicesInfo, CDmeEditorAttributeInfo );
|
||||
|
||||
public:
|
||||
void SetChoiceType( const char *pChoiceType );
|
||||
|
||||
// Gets the choices
|
||||
int GetChoiceCount() const;
|
||||
const char *GetChoiceString( int nIndex ) const;
|
||||
const char *GetChoiceType() const;
|
||||
bool HasChoiceType() const;
|
||||
|
||||
protected:
|
||||
CDmElement *CreateChoice( const char *pChoiceString );
|
||||
|
||||
CDmaElementArray< CDmElement > m_Choices;
|
||||
CDmaString m_ChoiceType;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A single editor type
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEditorType : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEditorType, CDmElement );
|
||||
|
||||
public:
|
||||
// Adds a editor type to be associated with a particular attribute
|
||||
void AddAttributeInfo( const char *pAttributeName, CDmeEditorAttributeInfo *pInfo );
|
||||
|
||||
// Removes a editor type associated with a particular attribute
|
||||
void RemoveAttributeInfo( const char *pAttributeName );
|
||||
|
||||
// Returns the editor info associated with an editor type
|
||||
CDmeEditorAttributeInfo *GetAttributeInfo( const char *pAttributeName );
|
||||
|
||||
// Returns the editor info associated with a single entry in an attribute array
|
||||
CDmeEditorAttributeInfo *GetAttributeArrayInfo( const char *pAttributeName );
|
||||
|
||||
private:
|
||||
// Computes the actual attribute name stored in the type
|
||||
const char *GetActualAttributeName( const char *pAttributeName );
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A dictionary of all editor types
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEditorTypeDictionary : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEditorTypeDictionary, CDmElement );
|
||||
|
||||
public:
|
||||
void AddEditorTypesFromFile( const char *pFileName, const char *pPathID );
|
||||
void AddEditorType( CDmeEditorType *pEditorType );
|
||||
|
||||
// Returns the editor info associated with an editor type
|
||||
CDmeEditorAttributeInfo *GetAttributeInfo( CDmElement *pElement, const char *pAttributeName );
|
||||
|
||||
// Returns the editor info associated with a single entry in an attribute array
|
||||
CDmeEditorAttributeInfo *GetAttributeArrayInfo( CDmElement *pElement, const char *pAttributeName );
|
||||
|
||||
private:
|
||||
// Returns the editor type to use with an element
|
||||
CDmeEditorType *GetEditorType( CDmElement *pElement );
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEEDITORTYPEDICTIONARY_H
|
||||
|
||||
|
||||
|
||||
106
public/movieobjects/dmeexpressionoperator.h
Normal file
106
public/movieobjects/dmeexpressionoperator.h
Normal file
@@ -0,0 +1,106 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The expression operator class - scalar math calculator
|
||||
// for a good list of operators and simple functions, see:
|
||||
// \\fileserver\user\MarcS\boxweb\aliveDistLite\v4.2.0\doc\alive\functions.txt
|
||||
// (although we'll want to implement elerp as the standard 3x^2 - 2x^3 with rescale)
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEEXPRESSIONOPERATOR_H
|
||||
#define DMEEXPRESSIONOPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
#include "tier1/utlstack.h" // for calculator
|
||||
#include "tier1/utlvector.h" // for calculator
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Calculator Parsing class
|
||||
// precedence order:
|
||||
// unary operators: + - ! func var
|
||||
// * / %
|
||||
// + -
|
||||
// < > <= >=
|
||||
// == !=
|
||||
// &&
|
||||
// ||
|
||||
// ?:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CExpressionCalculator
|
||||
{
|
||||
public:
|
||||
CExpressionCalculator( const char *expr = NULL ) : m_expr( expr ) {}
|
||||
void SetExpression( const char *expr )
|
||||
{
|
||||
m_expr = expr;
|
||||
}
|
||||
|
||||
void SetVariable( const char *var, float value );
|
||||
void SetVariable( int nVariableIndex, float value );
|
||||
int FindVariableIndex( const char *var );
|
||||
|
||||
bool Evaluate( float &value );
|
||||
|
||||
// Builds a list of variable names from the expression
|
||||
bool BuildVariableListFromExpression( );
|
||||
|
||||
// Iterate over variables
|
||||
int VariableCount();
|
||||
const char *VariableName( int nIndex );
|
||||
|
||||
private:
|
||||
bool ParseExpr ( const char *&expr );
|
||||
bool ParseConditional( const char *&expr );
|
||||
bool ParseOr ( const char *&expr );
|
||||
bool ParseAnd ( const char *&expr );
|
||||
bool ParseEquality ( const char *&expr );
|
||||
bool ParseLessGreater( const char *&expr );
|
||||
bool ParseAddSub ( const char *&expr );
|
||||
bool ParseDivMul ( const char *&expr );
|
||||
bool ParseUnary ( const char *&expr );
|
||||
bool ParsePrimary ( const char *&expr );
|
||||
bool Parse1ArgFunc ( const char *&expr );
|
||||
bool Parse2ArgFunc ( const char *&expr );
|
||||
bool Parse3ArgFunc ( const char *&expr );
|
||||
// bool Parse4ArgFunc ( const char *&expr );
|
||||
bool Parse5ArgFunc ( const char *&expr );
|
||||
|
||||
CUtlString m_expr;
|
||||
CUtlVector< CUtlString > m_varNames;
|
||||
CUtlVector<float> m_varValues;
|
||||
CUtlStack<float> m_stack;
|
||||
bool m_bIsBuildingArgumentList;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// An operator which computes the value of expressions
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeExpressionOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeExpressionOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
void SetSpewResult( bool state );
|
||||
|
||||
protected:
|
||||
bool Parse( const char *expr );
|
||||
|
||||
bool IsInputAttribute( CDmAttribute *pAttribute );
|
||||
|
||||
CDmaVar< float > m_result;
|
||||
CDmaString m_expr;
|
||||
CDmaVar< bool > m_bSpewResult;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEEXPRESSIONOPERATOR_H
|
||||
76
public/movieobjects/dmeeyeball.h
Normal file
76
public/movieobjects/dmeeyeball.h
Normal file
@@ -0,0 +1,76 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Model eyeposition node, kind of a top level
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEEYEBALL_H
|
||||
#define DMEEYEBALL_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
|
||||
/*
|
||||
$eyeposition 0 83.274592 0
|
||||
$attachment "eyes" "bip_head" 0 83.274592 1.41954 absolute
|
||||
$attachment "righteye" "bip_head" -1.425952 83.274592 1.41954 absolute
|
||||
$attachment "lefteye" "bip_head" 1.425952 83.274592 1.41954 absolute
|
||||
|
||||
$cdmaterials "models/player/hvyweapon/"
|
||||
$model heavy "parts/dmx/heavy_reference_lo.dmx"{
|
||||
|
||||
eyeball righteye "bip_head" -1.425952 83.274592 1.41954 "eyeball_r" 1.80
|
||||
356 -1 "pupil_r" 0.6
|
||||
eyeball lefteye "bip_head" 1.425952 83.274592 1.41954 "eyeball_l" 1.80
|
||||
356 1 "pupil_l" 0.6
|
||||
|
||||
localvar %dummy_eyelid_flex
|
||||
|
||||
flexcontroller eyes range -30 30 eyes_updown
|
||||
flexcontroller eyes range -30 30 eyes_rightleft
|
||||
|
||||
}
|
||||
|
||||
$model eyeball
|
||||
|
||||
(name) Name of eyeball, used to match eyelid rules.
|
||||
|
||||
(bone name) Name of bone that the eye is parented to, typically the head.
|
||||
|
||||
(X) (Y) (Z) World location of the center of the ball of the eye.
|
||||
|
||||
(material name) Material name to use when searching for vertices to consider as the <20>white<74> of the eye (used in dynamically texture mapping the iris and cornea onto the eye).
|
||||
|
||||
(diameter) Diameter of the ball of the eye
|
||||
|
||||
(angle) Default yaw offset from <20>forward<72> for iris. Humans are typically 2-4 degrees walleyed. Not setting this correctly will result in your either characters appearing cross-eyed, or if you<6F>ve compensated by misplacing the ball of the eye, them not tracking side to side.
|
||||
|
||||
(iris material) no longer used but still in the option list.
|
||||
|
||||
(pupil scale) World scale of the iris texture
|
||||
[edit]
|
||||
Syntax
|
||||
|
||||
eyeball (name) (bone name) (X) (Y) (Z) (material name) (diameter) (angle) (iris material) (pupil scale)
|
||||
|
||||
*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a transformation matrix
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEyeball : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEyeball, CDmeDag );
|
||||
|
||||
public:
|
||||
void GetWorldPosition( Vector &worldPosition );
|
||||
|
||||
CDmaVar< float > m_flDiameter; // Diameter of the ball of the eye
|
||||
CDmaVar< float > m_flYawAngle; // Yaw offset from "forward" for iris. Humans are typically 2-4 degrees walleyed.
|
||||
CDmaVar< float > m_flPupilScale; // Scale of the iris texture
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEEYEBALL_H
|
||||
73
public/movieobjects/dmeeyeposition.h
Normal file
73
public/movieobjects/dmeeyeposition.h
Normal file
@@ -0,0 +1,73 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Model eyeposition node
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEEYEPOSITION_H
|
||||
#define DMEEYEPOSITION_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/*
|
||||
$eyeposition 0 83.274592 0
|
||||
$attachment "eyes" "bip_head" 0 83.274592 1.41954 absolute
|
||||
$attachment "righteye" "bip_head" -1.425952 83.274592 1.41954 absolute
|
||||
$attachment "lefteye" "bip_head" 1.425952 83.274592 1.41954 absolute
|
||||
|
||||
$cdmaterials "models/player/hvyweapon/"
|
||||
$model heavy "parts/dmx/heavy_reference_lo.dmx"{
|
||||
|
||||
eyeball righteye "bip_head" -1.425952 83.274592 1.41954 "eyeball_r" 1.80
|
||||
356 -1 "pupil_r" 0.6
|
||||
eyeball lefteye "bip_head" 1.425952 83.274592 1.41954 "eyeball_l" 1.80
|
||||
356 1 "pupil_l" 0.6
|
||||
|
||||
localvar %dummy_eyelid_flex
|
||||
|
||||
flexcontroller eyes range -30 30 eyes_updown
|
||||
flexcontroller eyes range -30 30 eyes_rightleft
|
||||
|
||||
}
|
||||
|
||||
$model eyeball
|
||||
|
||||
(name) Name of eyeball, used to match eyelid rules.
|
||||
|
||||
(bone name) Name of bone that the eye is parented to, typically the head.
|
||||
|
||||
(X) (Y) (Z) World location of the center of the ball of the eye.
|
||||
|
||||
(material name) Material name to use when searching for vertices to consider as the <20>white<74> of the eye (used in dynamically texture mapping the iris and cornea onto the eye).
|
||||
|
||||
(diameter) Diameter of the ball of the eye
|
||||
|
||||
(angle) Default yaw offset from <20>forward<72> for iris. Humans are typically 2-4 degrees walleyed. Not setting this correctly will result in your either characters appearing cross-eyed, or if you<6F>ve compensated by misplacing the ball of the eye, them not tracking side to side.
|
||||
|
||||
(iris material) no longer used but still in the option list.
|
||||
|
||||
(pupil scale) World scale of the iris texture
|
||||
[edit]
|
||||
Syntax
|
||||
|
||||
eyeball (name) (bone name) (X) (Y) (Z) (material name) (diameter) (angle) (iris material) (pupil scale)
|
||||
|
||||
*/
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEyePosition : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeEyePosition, CDmeDag );
|
||||
|
||||
public:
|
||||
|
||||
void GetWorldPosition( Vector &worldPosition );
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEEYEPOSITION_H
|
||||
87
public/movieobjects/dmefaceset.h
Normal file
87
public/movieobjects/dmefaceset.h
Normal file
@@ -0,0 +1,87 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing an abstract shape (ie drawable object)
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEFACESET_H
|
||||
#define DMEFACESET_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "tier1/utlvector.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMaterial;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a face of a polygonal mesh
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeFaceSet : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeFaceSet, CDmElement );
|
||||
|
||||
public:
|
||||
// material accessors
|
||||
CDmeMaterial *GetMaterial();
|
||||
void SetMaterial( CDmeMaterial *pMaterial );
|
||||
|
||||
// Total number of indices in the face set including the -1 end of face designators
|
||||
int NumIndices() const;
|
||||
const int *GetIndices() const;
|
||||
int AddIndices( int nCount );
|
||||
void SetIndex( int i, int nValue );
|
||||
void SetIndices( int nFirstIndex, int nCount, int *pIndices );
|
||||
int GetIndex( int i ) const;
|
||||
|
||||
// Returns the number of vertices in the next polygon
|
||||
int GetNextPolygonVertexCount( int nFirstIndex ) const;
|
||||
|
||||
// Returns the number of triangulated indices total
|
||||
int GetTriangulatedIndexCount() const;
|
||||
|
||||
// Total number of indices in the face set excluding the -1 end of face designators
|
||||
int GetIndexCount() const;
|
||||
|
||||
// Removes multiple faces from the face set
|
||||
void RemoveMultiple( int elem, int num );
|
||||
|
||||
// Returns the number of faces in total... This should be the number of -1 indices in the face set
|
||||
// Which should equal NumIndices() - GetIndexCount() but this function accounts for
|
||||
// empty faces (which aren't counted as faces) and a missing -1 terminator at the end
|
||||
int GetFaceCount() const;
|
||||
|
||||
private:
|
||||
CDmaArray< int > m_indices;
|
||||
CDmaElement< CDmeMaterial > m_material;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeFaceSet::NumIndices() const
|
||||
{
|
||||
return m_indices.Count();
|
||||
}
|
||||
|
||||
inline const int *CDmeFaceSet::GetIndices() const
|
||||
{
|
||||
return m_indices.Base();
|
||||
}
|
||||
|
||||
inline int CDmeFaceSet::GetIndex( int i ) const
|
||||
{
|
||||
return m_indices[i];
|
||||
}
|
||||
|
||||
|
||||
#endif // DMEFACESET_H
|
||||
184
public/movieobjects/dmegamemodel.h
Normal file
184
public/movieobjects/dmegamemodel.h
Normal file
@@ -0,0 +1,184 @@
|
||||
//========= 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
|
||||
112
public/movieobjects/dmegamemodelinput.h
Normal file
112
public/movieobjects/dmegamemodelinput.h
Normal file
@@ -0,0 +1,112 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// game model input - gets its values from an MDL within the game
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEGAMEMODELINPUT_H
|
||||
#define DMEGAMEMODELINPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmeinput.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeGameModelInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeGameModelInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
public:
|
||||
void AddBone( const Vector& pos, const Quaternion& rot );
|
||||
void SetBone( uint index, const Vector& pos, const Quaternion& rot );
|
||||
void SetRootBone( const Vector& pos, const Quaternion& rot );
|
||||
uint NumBones() const;
|
||||
|
||||
void SetFlexWeights( uint nFlexWeights, const float* flexWeights );
|
||||
uint NumFlexWeights() const;
|
||||
|
||||
const Vector& GetViewTarget() const;
|
||||
void SetViewTarget( const Vector &viewTarget );
|
||||
|
||||
void SetFlags( int nFlags );
|
||||
|
||||
public:
|
||||
CDmaVar< int > m_skin;
|
||||
CDmaVar< int > m_body;
|
||||
CDmaVar< int > m_sequence;
|
||||
CDmaVar< bool > m_visible;
|
||||
|
||||
protected:
|
||||
CDmaVar< int > m_flags;
|
||||
CDmaArray< float > m_flexWeights;
|
||||
CDmaVar< Vector > m_viewTarget;
|
||||
CDmaArray< Vector > m_bonePositions;
|
||||
CDmaArray< Quaternion > m_boneRotations;
|
||||
CDmaVar< Vector > m_position;
|
||||
CDmaVar< Quaternion > m_rotation;
|
||||
};
|
||||
|
||||
|
||||
class CDmeGameSpriteInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeGameSpriteInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
public:
|
||||
void SetState( bool bVisible, float nFrame, int nRenderMode, int nRenderFX, float flRenderScale, float flProxyRadius, const Vector &pos, const Quaternion &rot, const Color &color );
|
||||
|
||||
protected:
|
||||
|
||||
CDmaVar< bool > m_visible;
|
||||
CDmaVar< float > m_frame;
|
||||
CDmaVar< int > m_rendermode;
|
||||
CDmaVar< int > m_renderfx;
|
||||
CDmaVar< float > m_renderscale;
|
||||
CDmaVar< float > m_proxyRadius;
|
||||
CDmaVar< Vector > m_position;
|
||||
CDmaVar< Quaternion > m_rotation;
|
||||
CDmaVar< Color > m_color;
|
||||
};
|
||||
|
||||
|
||||
class CDmeGameCameraInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeGameCameraInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
public:
|
||||
void SetPosition( const Vector& pos );
|
||||
void SetOrientation( const Quaternion& rot );
|
||||
void SetFOV( float fov );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector > m_position;
|
||||
CDmaVar< Quaternion > m_rotation;
|
||||
CDmaVar< float > m_fov;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEGAMEMODELINPUT_H
|
||||
57
public/movieobjects/dmeimage.h
Normal file
57
public/movieobjects/dmeimage.h
Normal file
@@ -0,0 +1,57 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing an image
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEIMAGE_H
|
||||
#define DMEIMAGE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
enum ImageFormat;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing an image (2d or 3d bitmap)
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeImage : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeImage, CDmElement );
|
||||
|
||||
public:
|
||||
// Methods related to image format
|
||||
ImageFormat Format() const;
|
||||
const char *FormatName() const;
|
||||
|
||||
// returns a pointer to the image bits buffer
|
||||
const void *ImageBits() const;
|
||||
|
||||
public:
|
||||
CDmAttributeVar<int> m_Width;
|
||||
CDmAttributeVar<int> m_Height;
|
||||
CDmAttributeVar<int> m_Depth;
|
||||
|
||||
private:
|
||||
CDmAttributeVar<int> m_Format;
|
||||
CDmAttributeVarBinaryBlock m_Bits;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// returns a pointer to the image bits buffer
|
||||
//-----------------------------------------------------------------------------
|
||||
inline const void *CDmeImage::ImageBits() const
|
||||
{
|
||||
return m_Bits.Get();
|
||||
}
|
||||
|
||||
|
||||
#endif // DMEIMAGE_H
|
||||
28
public/movieobjects/dmeinput.h
Normal file
28
public/movieobjects/dmeinput.h
Normal file
@@ -0,0 +1,28 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The abstract base operator class - all actions within the scenegraph happen via operators
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEINPUT_H
|
||||
#define DMEINPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeInput : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeInput, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEINPUT_H
|
||||
39
public/movieobjects/dmejoint.h
Normal file
39
public/movieobjects/dmejoint.h
Normal file
@@ -0,0 +1,39 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Dme version of a joint of a skeletal model (gets compiled into a MDL)
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEJOINT_H
|
||||
#define DMEJOINT_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
|
||||
class CDmeDrawSettings;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a skeletal model
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeJoint : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeJoint, CDmeDag );
|
||||
|
||||
public:
|
||||
virtual void Draw( CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
static void DrawJointHierarchy( bool bDrawJoints );
|
||||
|
||||
private:
|
||||
void DrawJoints();
|
||||
|
||||
CMaterialReference m_JointMaterial;
|
||||
static bool s_bDrawJoints;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEJOINT_H
|
||||
36
public/movieobjects/dmekeyboardinput.h
Normal file
36
public/movieobjects/dmekeyboardinput.h
Normal file
@@ -0,0 +1,36 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The keyboard input class
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEKEYBOARDINPUT_H
|
||||
#define DMEKEYBOARDINPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeinput.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeKeyboardInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeKeyboardInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< bool > *m_keys;
|
||||
|
||||
bool GetKeyStatus( uint ki );
|
||||
};
|
||||
|
||||
#endif // DMEKEYBOARDINPUT_H
|
||||
135
public/movieobjects/dmelight.h
Normal file
135
public/movieobjects/dmelight.h
Normal file
@@ -0,0 +1,135 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a light
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMELIGHT_H
|
||||
#define DMELIGHT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declaration
|
||||
//-----------------------------------------------------------------------------
|
||||
struct LightDesc_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A base class for lights
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeLight : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeLight, CDmeDag );
|
||||
|
||||
public:
|
||||
// Sets the color and intensity
|
||||
// NOTE: Color is specified 0-255 floating point.
|
||||
void SetColor( const Color &color );
|
||||
void SetIntensity( float flIntensity );
|
||||
|
||||
// Sets up render state in the material system for rendering
|
||||
virtual void SetupRenderState( int nLightIndex );
|
||||
virtual bool GetLightDesc( LightDesc_t *pDesc ) { return false; }
|
||||
|
||||
protected:
|
||||
// Sets up render state in the material system for rendering
|
||||
void SetupRenderStateInternal( LightDesc_t &desc, float flAtten0, float flAtten1, float flAtten2 );
|
||||
|
||||
CDmaVar< Color > m_Color;
|
||||
CDmaVar< float > m_flIntensity;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A directional light
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDirectionalLight : public CDmeLight
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeDirectionalLight, CDmeLight );
|
||||
|
||||
public:
|
||||
void SetDirection( const Vector &direction );
|
||||
const Vector &GetDirection() const { return m_Direction; }
|
||||
|
||||
// Sets up render state in the material system for rendering
|
||||
virtual bool GetLightDesc( LightDesc_t *pDesc );
|
||||
|
||||
private:
|
||||
CDmaVar<Vector> m_Direction;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A point light
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePointLight : public CDmeLight
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePointLight, CDmeLight );
|
||||
|
||||
public:
|
||||
void SetPosition( const Vector &pos ) { m_Position = pos; }
|
||||
const Vector &GetPosition() const { return m_Position; }
|
||||
|
||||
// Sets the attenuation factors
|
||||
void SetAttenuation( float flConstant, float flLinear, float flQuadratic );
|
||||
|
||||
// Sets the maximum range
|
||||
void SetMaxDistance( float flMaxDistance );
|
||||
|
||||
// Sets up render state in the material system for rendering
|
||||
virtual bool GetLightDesc( LightDesc_t *pDesc );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector > m_Position;
|
||||
CDmaVar< float > m_flAttenuation0;
|
||||
CDmaVar< float > m_flAttenuation1;
|
||||
CDmaVar< float > m_flAttenuation2;
|
||||
CDmaVar< float > m_flMaxDistance;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A spot light
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSpotLight : public CDmePointLight
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSpotLight, CDmePointLight );
|
||||
|
||||
public:
|
||||
// Sets the spotlight direction
|
||||
void SetDirection( const Vector &direction );
|
||||
|
||||
// Sets the spotlight angle factors
|
||||
// Angles are specified in degrees, as full angles (as opposed to half-angles)
|
||||
void SetAngles( float flInnerAngle, float flOuterAngle, float flAngularFalloff );
|
||||
|
||||
// Sets up render state in the material system for rendering
|
||||
virtual bool GetLightDesc( LightDesc_t *pDesc );
|
||||
|
||||
private:
|
||||
CDmaVar<Vector> m_Direction;
|
||||
CDmaVar<float> m_flSpotInnerAngle;
|
||||
CDmaVar<float> m_flSpotOuterAngle;
|
||||
CDmaVar<float> m_flSpotAngularFalloff;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// An ambient light
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeAmbientLight : public CDmeLight
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeAmbientLight, CDmeLight );
|
||||
|
||||
public:
|
||||
// Sets up render state in the material system for rendering
|
||||
virtual void SetupRenderState( int nLightIndex );
|
||||
};
|
||||
|
||||
|
||||
#endif // DMELIGHT_H
|
||||
918
public/movieobjects/dmelog.h
Normal file
918
public/movieobjects/dmelog.h
Normal file
@@ -0,0 +1,918 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMELOG_H
|
||||
#define DMELOG_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "interpolatortypes.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
#include "movieobjects/dmetimeselectiontimes.h"
|
||||
|
||||
class IUniformRandomStream;
|
||||
|
||||
template < class T > class CDmeTypedLog;
|
||||
|
||||
enum
|
||||
{
|
||||
FILTER_SMOOTH = 0,
|
||||
FILTER_JITTER,
|
||||
FILTER_SHARPEN,
|
||||
FILTER_SOFTEN,
|
||||
|
||||
NUM_FILTERS
|
||||
};
|
||||
|
||||
enum RecordingMode_t
|
||||
{
|
||||
RECORD_PRESET = 0, // Preset/fader slider being dragged
|
||||
RECORD_ATTRIBUTESLIDER, // Single attribute slider being dragged
|
||||
};
|
||||
|
||||
#define DMELOG_DEFAULT_THRESHHOLD 0.0001f
|
||||
|
||||
class DmeLog_TimeSelection_t
|
||||
{
|
||||
public:
|
||||
DmeLog_TimeSelection_t() :
|
||||
m_flIntensity( 1.0f ),
|
||||
m_bAttachedMode( true ),
|
||||
m_bTimeAdvancing( false ),
|
||||
m_bResampleMode( true ),
|
||||
m_nResampleInterval( DmeTime_t( .05f ) ),// 50 msec sampling interval by default
|
||||
m_flThreshold( DMELOG_DEFAULT_THRESHHOLD ),
|
||||
m_pPresetValue( 0 ),
|
||||
m_RecordingMode( RECORD_PRESET )
|
||||
{
|
||||
m_nTimes[ TS_LEFT_FALLOFF ] = m_nTimes[ TS_LEFT_HOLD ] =
|
||||
m_nTimes[ TS_RIGHT_HOLD ] = m_nTimes[ TS_RIGHT_FALLOFF ] = DmeTime_t( 0 );
|
||||
m_nFalloffInterpolatorTypes[ 0 ] = m_nFalloffInterpolatorTypes[ 1 ] = INTERPOLATE_LINEAR_INTERP;
|
||||
}
|
||||
|
||||
inline void ResetTimeAdvancing()
|
||||
{
|
||||
// Reset the time advancing flag
|
||||
m_bTimeAdvancing = false;
|
||||
}
|
||||
|
||||
inline void StartTimeAdvancing()
|
||||
{
|
||||
m_bTimeAdvancing = true;
|
||||
}
|
||||
|
||||
inline bool IsTimeAdvancing() const
|
||||
{
|
||||
return m_bTimeAdvancing;
|
||||
}
|
||||
|
||||
inline RecordingMode_t GetRecordingMode() const
|
||||
{
|
||||
return m_RecordingMode;
|
||||
}
|
||||
|
||||
void SetRecordingMode( RecordingMode_t mode )
|
||||
{
|
||||
m_RecordingMode = mode;
|
||||
}
|
||||
|
||||
float GetAmountForTime( DmeTime_t curtime ) const;
|
||||
float AdjustFactorForInterpolatorType( float factor, int side ) const;
|
||||
|
||||
// NOTE: See DmeTimeSelectionTimes_t for return values, 0 means before, 1= left fallof, 2=hold, 3=right falloff, 4=after
|
||||
int ComputeRegionForTime( DmeTime_t curtime ) const;
|
||||
|
||||
DmeTime_t m_nTimes[ TS_TIME_COUNT ];
|
||||
int m_nFalloffInterpolatorTypes[ 2 ];
|
||||
DmeTime_t m_nResampleInterval; // Only used if m_bResampleMode is true
|
||||
float m_flIntensity; // How much to drive values toward m_HeadValue (generally 1.0f)
|
||||
float m_flThreshold;
|
||||
CDmAttribute* m_pPresetValue;
|
||||
|
||||
bool m_bAttachedMode : 1; // Is the current time "attached" to the head position
|
||||
|
||||
// Adds new, evenly spaced samples based on m_nResampleInterval
|
||||
// Also adds zero intensity samples at the falloff edges
|
||||
bool m_bResampleMode : 1;
|
||||
|
||||
private:
|
||||
bool m_bTimeAdvancing : 1; // Has time ever been advancing
|
||||
RecordingMode_t m_RecordingMode;
|
||||
};
|
||||
|
||||
class CDmeChannel;
|
||||
class CDmeChannelsClip;
|
||||
class CDmeFilmClip;
|
||||
class CDmeLog;
|
||||
class CDmeLogLayer;
|
||||
|
||||
struct LayerSelectionData_t
|
||||
{
|
||||
LayerSelectionData_t();
|
||||
void Release();
|
||||
|
||||
CDmeHandle< CDmeChannel > m_hChannel;
|
||||
CDmeHandle< CDmeChannelsClip > m_hOwner;
|
||||
CDmeHandle< CDmeFilmClip > m_hShot;
|
||||
CDmeHandle< CDmeLog > m_hLog;
|
||||
DmAttributeType_t m_DataType;
|
||||
int m_nDuration;
|
||||
int m_nHoldTimes[ 2 ];
|
||||
DmeTime_t m_tStartOffset;
|
||||
|
||||
// This is dynamic and needs to be released
|
||||
struct DataLayer_t
|
||||
{
|
||||
DataLayer_t( float frac, CDmeLogLayer *layer );
|
||||
|
||||
float m_flStartFraction;
|
||||
CDmeHandle< CDmeLogLayer, true > m_hData;
|
||||
};
|
||||
|
||||
CUtlVector< DataLayer_t > m_vecData;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeLogLayer - abstract base class
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class CDmeLogLayer : public CDmElement
|
||||
{
|
||||
friend class CDmeLog;
|
||||
|
||||
DEFINE_ELEMENT( CDmeLogLayer, CDmElement );
|
||||
|
||||
public:
|
||||
virtual void CopyLayer( const CDmeLogLayer *src ) = 0;
|
||||
virtual void CopyPartialLayer( const CDmeLogLayer *src, DmeTime_t startTime, DmeTime_t endTime, bool bRebaseTimestamps ) = 0;
|
||||
virtual void ExplodeLayer( const CDmeLogLayer *src, DmeTime_t startTime, DmeTime_t endTime, bool bRebaseTimestamps, DmeTime_t tResampleInterval ) = 0;
|
||||
virtual void InsertKeyFromLayer( DmeTime_t keyTime, const CDmeLogLayer *src, DmeTime_t srcKeyTime ) = 0;
|
||||
|
||||
DmeTime_t GetBeginTime() const;
|
||||
DmeTime_t GetEndTime() const;
|
||||
int GetKeyCount() const;
|
||||
|
||||
// Returns the index of a key closest to this time, within tolerance
|
||||
// NOTE: Insertion or removal may change this index!
|
||||
// Returns -1 if the time isn't within tolerance.
|
||||
int FindKeyWithinTolerance( DmeTime_t time, DmeTime_t nTolerance );
|
||||
|
||||
// Returns the type of attribute being logged
|
||||
virtual DmAttributeType_t GetDataType() const = 0;
|
||||
|
||||
// Sets a key, removes all keys after this time
|
||||
virtual void SetKey( DmeTime_t time, const CDmAttribute *pAttr, uint index = 0, int curveType = CURVE_DEFAULT ) = 0;
|
||||
virtual bool SetDuplicateKeyAtTime( DmeTime_t time ) = 0;
|
||||
// This inserts a key using the current values to construct the proper value for the time
|
||||
virtual int InsertKeyAtTime( DmeTime_t nTime, int curveType = CURVE_DEFAULT ) = 0;
|
||||
|
||||
// Sets the interpolated value of the log at the specified time into the attribute
|
||||
virtual void GetValue( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const = 0;
|
||||
|
||||
virtual float GetComponent( DmeTime_t time, int componentIndex ) const = 0;
|
||||
|
||||
// Returns the time at which a particular key occurs
|
||||
DmeTime_t GetKeyTime( int nKeyIndex ) const;
|
||||
void SetKeyTime( int nKeyIndex, DmeTime_t keyTime );
|
||||
|
||||
// Scale + bias key times
|
||||
void ScaleBiasKeyTimes( double flScale, DmeTime_t nBias );
|
||||
|
||||
// Removes a single key by index
|
||||
virtual void RemoveKey( int nKeyIndex, int nNumKeysToRemove = 1 ) = 0;
|
||||
|
||||
// Removes all keys
|
||||
virtual void ClearKeys() = 0;
|
||||
|
||||
virtual bool IsConstantValued() const = 0;
|
||||
virtual void RemoveRedundantKeys() = 0;
|
||||
virtual void RemoveRedundantKeys( float threshold ) = 0;
|
||||
|
||||
// resampling and filtering
|
||||
virtual void Resample( DmeFramerate_t samplerate ) = 0;
|
||||
virtual void Filter( int nSampleRadius ) = 0;
|
||||
virtual void Filter2( DmeTime_t sampleRadius ) = 0;
|
||||
|
||||
virtual void SetOwnerLog( CDmeLog *owner ) = 0;
|
||||
CDmeLog *GetOwnerLog();
|
||||
const CDmeLog *GetOwnerLog() const;
|
||||
|
||||
bool IsUsingCurveTypes() const;
|
||||
int GetDefaultCurveType() const;
|
||||
|
||||
// Override curvetype for specific key
|
||||
void SetKeyCurveType( int nKeyIndex, int curveType );
|
||||
int GetKeyCurveType( int nKeyIndex ) const;
|
||||
|
||||
// Validates that all keys are correctly sorted in time
|
||||
bool ValidateKeys() const;
|
||||
|
||||
// Removes all keys outside the specified time range
|
||||
void RemoveKeysOutsideRange( DmeTime_t tStart, DmeTime_t tEnd );
|
||||
|
||||
protected:
|
||||
int FindKey( DmeTime_t time ) const;
|
||||
|
||||
void OnUsingCurveTypesChanged();
|
||||
|
||||
CDmeLog *m_pOwnerLog;
|
||||
|
||||
mutable int m_lastKey;
|
||||
CDmaArray< int > m_times;
|
||||
CDmaArray< int > m_CurveTypes;
|
||||
};
|
||||
|
||||
template< class T >
|
||||
CDmeLogLayer *CreateLayer( CDmeTypedLog< T > *ownerLog );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeLogLayer - abstract base class
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class CDmeCurveInfo : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCurveInfo, CDmElement );
|
||||
|
||||
public:
|
||||
// Global override for all keys unless overriden by specific key
|
||||
void SetDefaultCurveType( int curveType );
|
||||
int GetDefaultCurveType() const;
|
||||
|
||||
void SetMinValue( float val );
|
||||
float GetMinValue() const;
|
||||
void SetMaxValue( float val );
|
||||
float GetMaxValue() const;
|
||||
|
||||
protected:
|
||||
CDmaVar< int > m_DefaultCurveType;
|
||||
|
||||
CDmaVar< float > m_MinValue;
|
||||
CDmaVar< float > m_MaxValue;
|
||||
};
|
||||
|
||||
template <class T > class CDmeTypedLogLayer;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeLog - abstract base class
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class CDmeLog : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeLog, CDmElement );
|
||||
|
||||
public:
|
||||
int FindLayerForTime( DmeTime_t time ) const;
|
||||
int FindLayerForTimeSkippingTopmost( DmeTime_t time ) const;
|
||||
void FindLayersForTime( DmeTime_t time, CUtlVector< int >& list ) const;
|
||||
|
||||
virtual void FinishTimeSelection( DmeTime_t tHeadPosition, DmeLog_TimeSelection_t& params ) = 0; // in attached, timeadvancing mode, we need to blend out of the final sample over the fadeout interval
|
||||
virtual void StampKeyAtHead( DmeTime_t tHeadPosition, DmeTime_t tPreviousHeadPosition, const DmeLog_TimeSelection_t& params, const CDmAttribute *pAttr, uint index = 0 ) = 0;
|
||||
virtual void FilterUsingTimeSelection( IUniformRandomStream *random, float flScale, const DmeLog_TimeSelection_t& params, int filterType, bool bResample, bool bApplyFalloff, const CDmeLogLayer *baseLayer, CDmeLogLayer *writeLayer ) = 0;
|
||||
virtual void FilterUsingTimeSelection( IUniformRandomStream *random, const DmeLog_TimeSelection_t& params, int filterType, bool bResample, bool bApplyFalloff ) = 0;
|
||||
virtual void StaggerUsingTimeSelection( const DmeLog_TimeSelection_t& params, DmeTime_t tStaggerAmount, const CDmeLogLayer *baseLayer, CDmeLogLayer *writeLayer ) = 0;
|
||||
virtual void RevealUsingTimeSelection( const DmeLog_TimeSelection_t ¶ms, CDmeLogLayer *savedLayer ) = 0;
|
||||
virtual void BlendLayersUsingTimeSelection( const DmeLog_TimeSelection_t ¶ms ) = 0;
|
||||
virtual void BlendLayersUsingTimeSelection( const CDmeLogLayer *firstLayer, const CDmeLogLayer *secondLayer, CDmeLogLayer *outputLayer, const DmeLog_TimeSelection_t ¶ms, bool bUseBaseLayerSamples, DmeTime_t tStartOffset ) = 0;
|
||||
virtual void BlendTimesUsingTimeSelection( const CDmeLogLayer *firstLayer, const CDmeLogLayer *secondLayer, CDmeLogLayer *outputLayer, const DmeLog_TimeSelection_t ¶ms, DmeTime_t tStartOffset ) = 0;
|
||||
virtual void PasteAndRescaleSamples( const CDmeLogLayer *src, const DmeLog_TimeSelection_t& srcParams, const DmeLog_TimeSelection_t& destParams, bool bBlendAreaInFalloffRegion ) = 0;
|
||||
virtual void PasteAndRescaleSamples( const CDmeLogLayer *pBaseLayer, const CDmeLogLayer *pDataLayer, CDmeLogLayer *pOutputLayer, const DmeLog_TimeSelection_t& srcParams, const DmeLog_TimeSelection_t& destParams, bool bBlendAreaInFalloffRegion ) = 0;
|
||||
virtual void BuildNormalizedLayer( CDmeTypedLogLayer< float > *target ) = 0;
|
||||
virtual void BuildCorrespondingLayer( const CDmeLogLayer *pReferenceLayer, const CDmeLogLayer *pDataLayer, CDmeLogLayer *pOutputLayer ) = 0;
|
||||
|
||||
int GetTopmostLayer() const;
|
||||
int GetNumLayers() const;
|
||||
CDmeLogLayer *GetLayer( int index );
|
||||
const CDmeLogLayer *GetLayer( int index ) const;
|
||||
|
||||
DmeTime_t GetBeginTime() const;
|
||||
DmeTime_t GetEndTime() const;
|
||||
int GetKeyCount() const;
|
||||
|
||||
bool IsEmpty() const;
|
||||
|
||||
// Returns the index of a key closest to this time, within tolerance
|
||||
// NOTE: Insertion or removal may change this index!
|
||||
// Returns -1 if the time isn't within tolerance.
|
||||
virtual int FindKeyWithinTolerance( DmeTime_t time, DmeTime_t nTolerance ) = 0;
|
||||
|
||||
// Returns the type of attribute being logged
|
||||
virtual DmAttributeType_t GetDataType() const = 0;
|
||||
|
||||
// Sets a key, removes all keys after this time
|
||||
virtual void SetKey( DmeTime_t time, const CDmAttribute *pAttr, uint index = 0, int curveType = CURVE_DEFAULT ) = 0;
|
||||
virtual bool SetDuplicateKeyAtTime( DmeTime_t time ) = 0;
|
||||
virtual int InsertKeyAtTime( DmeTime_t nTime, int curveType = CURVE_DEFAULT ) = 0;
|
||||
// Sets the interpolated value of the log at the specified time into the attribute
|
||||
virtual void GetValue( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const = 0;
|
||||
virtual void GetValueSkippingTopmostLayer( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const = 0;
|
||||
|
||||
virtual float GetComponent( DmeTime_t time, int componentIndex ) const = 0;
|
||||
|
||||
// Returns the time at which a particular key occurs
|
||||
virtual DmeTime_t GetKeyTime( int nKeyIndex ) const = 0;
|
||||
virtual void SetKeyTime( int nKeyIndex, DmeTime_t keyTime ) = 0;
|
||||
|
||||
// Override curvetype for specific key
|
||||
void SetKeyCurveType( int nKeyIndex, int curveType );
|
||||
int GetKeyCurveType( int nKeyIndex ) const;
|
||||
|
||||
// Removes a single key by index
|
||||
virtual void RemoveKey( int nKeyIndex, int nNumKeysToRemove = 1 ) = 0;
|
||||
|
||||
// Removes all keys within the time range, returns true if keys were removed
|
||||
bool RemoveKeys( DmeTime_t tStartTime, DmeTime_t tEndTime );
|
||||
|
||||
// Removes all keys
|
||||
virtual void ClearKeys() = 0;
|
||||
|
||||
// Scale + bias key times
|
||||
void ScaleBiasKeyTimes( double flScale, DmeTime_t nBias );
|
||||
|
||||
virtual float GetValueThreshold() const = 0;
|
||||
virtual void SetValueThreshold( float thresh ) = 0;
|
||||
virtual bool IsConstantValued() const = 0;
|
||||
virtual void RemoveRedundantKeys() = 0;
|
||||
virtual void RemoveRedundantKeys( float threshold ) = 0;
|
||||
|
||||
// resampling and filtering
|
||||
virtual void Resample( DmeFramerate_t samplerate ) = 0;
|
||||
virtual void Filter( int nSampleRadius ) = 0;
|
||||
virtual void Filter2( DmeTime_t sampleRadius ) = 0;
|
||||
|
||||
// Creates a log of a requested type
|
||||
static CDmeLog *CreateLog( DmAttributeType_t type, DmFileId_t fileid );
|
||||
|
||||
virtual CDmeLogLayer *AddNewLayer() = 0;
|
||||
enum
|
||||
{
|
||||
FLATTEN_NODISCONTINUITY_FIXUP = (1<<0), // Don't add "helper" samples to preserve discontinuities. This occurs when the time selection is "detached" from the head position
|
||||
FLATTEN_SPEW = (1<<1),
|
||||
};
|
||||
virtual void FlattenLayers( float threshold, int flags ) = 0;
|
||||
|
||||
// Only used by undo system!!!
|
||||
virtual void AddLayerToTail( CDmeLogLayer *layer ) = 0;
|
||||
virtual CDmeLogLayer *RemoveLayerFromTail() = 0;
|
||||
virtual CDmeLogLayer *RemoveLayer( int iLayer ) = 0;
|
||||
|
||||
|
||||
// Resolve
|
||||
virtual void Resolve();
|
||||
|
||||
// curve info helpers
|
||||
bool IsUsingCurveTypes() const;
|
||||
const CDmeCurveInfo *GetCurveInfo() const;
|
||||
CDmeCurveInfo *GetCurveInfo();
|
||||
virtual CDmeCurveInfo *GetOrCreateCurveInfo() = 0;
|
||||
virtual void SetCurveInfo( CDmeCurveInfo *pCurveInfo ) = 0;
|
||||
|
||||
// accessors for CurveInfo data
|
||||
int GetDefaultCurveType() const;
|
||||
|
||||
// FIXME - this should really be in the CurveInfo
|
||||
// but the animset editor currently asks for these, without having set a curveinfo...
|
||||
void SetMinValue( float val );
|
||||
void SetMaxValue( float val );
|
||||
float GetMinValue() const;
|
||||
float GetMaxValue() const;
|
||||
|
||||
virtual bool HasDefaultValue() const = 0;
|
||||
|
||||
|
||||
protected:
|
||||
// int FindKey( DmeTime_t time ) const;
|
||||
|
||||
void OnUsingCurveTypesChanged();
|
||||
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
CDmaElementArray< CDmeLogLayer > m_Layers;
|
||||
CDmaElement< CDmeCurveInfo > m_CurveInfo;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeTypedCurveInfo - implementation class for all logs
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
class CDmeTypedCurveInfo : public CDmeCurveInfo
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTypedCurveInfo, CDmeCurveInfo );
|
||||
|
||||
public:
|
||||
// For "faceposer" style left/right edges, this controls whether interpolators try to mimic faceposer left/right edge behavior
|
||||
void SetUseEdgeInfo( bool state );
|
||||
bool IsUsingEdgeInfo() const;
|
||||
|
||||
void SetEdgeInfo( int edge, bool active, const T& val, int curveType );
|
||||
void GetEdgeInfo( int edge, bool& active, T& val, int& curveType ) const;
|
||||
|
||||
void SetDefaultEdgeZeroValue( const T& val );
|
||||
const T& GetDefaultEdgeZeroValue() const;
|
||||
|
||||
void SetRightEdgeTime( DmeTime_t time );
|
||||
DmeTime_t GetRightEdgeTime() const;
|
||||
|
||||
bool IsEdgeActive( int edge ) const;
|
||||
void GetEdgeValue( int edge, T& value ) const;
|
||||
|
||||
int GetEdgeCurveType( int edge ) const;
|
||||
void GetZeroValue( int side, T& val ) const;
|
||||
|
||||
protected:
|
||||
CDmaVar< bool > m_bUseEdgeInfo;
|
||||
// Array of 2 for left/right edges...
|
||||
CDmaVar< bool > m_bEdgeActive[ 2 ];
|
||||
CDmaVar< T > m_EdgeValue[ 2 ];
|
||||
CDmaVar< int > m_EdgeCurveType[ 2 ];
|
||||
CDmaVar< int > m_RightEdgeTime;
|
||||
CDmaVar< T > m_DefaultEdgeValue;
|
||||
};
|
||||
|
||||
|
||||
// forward declaration
|
||||
template< class T > class CDmeTypedLog;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeTypedLogLayer - implementation class for all logs
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
class CDmeTypedLogLayer : public CDmeLogLayer
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTypedLogLayer, CDmeLogLayer );
|
||||
|
||||
public:
|
||||
virtual void CopyLayer( const CDmeLogLayer *src );
|
||||
virtual void CopyPartialLayer( const CDmeLogLayer *src, DmeTime_t startTime, DmeTime_t endTime, bool bRebaseTimestamps );
|
||||
virtual void ExplodeLayer( const CDmeLogLayer *src, DmeTime_t startTime, DmeTime_t endTime, bool bRebaseTimestamps, DmeTime_t tResampleInterval );
|
||||
virtual void InsertKeyFromLayer( DmeTime_t keyTime, const CDmeLogLayer *src, DmeTime_t srcKeyTime );
|
||||
|
||||
// Finds a key within tolerance, or adds one. Unlike SetKey, this will *not* delete keys after the specified time
|
||||
int FindOrAddKey( DmeTime_t nTime, DmeTime_t nTolerance, const T& value, int curveType = CURVE_DEFAULT );
|
||||
|
||||
// Sets a key, removes all keys after this time
|
||||
void SetKey( DmeTime_t time, const T& value, int curveType = CURVE_DEFAULT );
|
||||
// This inserts a key using the current values to construct the proper value for the time
|
||||
virtual int InsertKeyAtTime( DmeTime_t nTime, int curveType = CURVE_DEFAULT );
|
||||
|
||||
void SetKeyValue( int nKey, const T& value );
|
||||
|
||||
const T& GetValue( DmeTime_t time ) const;
|
||||
|
||||
const T& GetKeyValue( int nKeyIndex ) const;
|
||||
const T& GetValueSkippingKey( int nKeyToSkip ) const;
|
||||
|
||||
// This inserts a key. Unlike SetKey, this will *not* delete keys after the specified time
|
||||
int InsertKey( DmeTime_t nTime, const T& value, int curveType = CURVE_DEFAULT );
|
||||
|
||||
// inherited from CDmeLog
|
||||
virtual void ClearKeys();
|
||||
virtual void SetKey( DmeTime_t time, const CDmAttribute *pAttr, uint index = 0, int curveType = CURVE_DEFAULT );
|
||||
virtual bool SetDuplicateKeyAtTime( DmeTime_t time );
|
||||
virtual void GetValue( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const;
|
||||
virtual float GetComponent( DmeTime_t time, int componentIndex ) const;
|
||||
virtual DmAttributeType_t GetDataType() const;
|
||||
virtual bool IsConstantValued() const;
|
||||
virtual void RemoveRedundantKeys();
|
||||
virtual void RemoveRedundantKeys( float threshold );
|
||||
|
||||
virtual void RemoveKey( int nKeyIndex, int nNumKeysToRemove = 1 );
|
||||
virtual void Resample( DmeFramerate_t samplerate );
|
||||
virtual void Filter( int nSampleRadius );
|
||||
virtual void Filter2( DmeTime_t sampleRadius );
|
||||
|
||||
void RemoveKeys( DmeTime_t starttime );
|
||||
|
||||
// curve info helpers
|
||||
const CDmeTypedCurveInfo< T > *GetTypedCurveInfo() const;
|
||||
CDmeTypedCurveInfo< T > *GetTypedCurveInfo();
|
||||
|
||||
bool IsUsingEdgeInfo() const;
|
||||
void GetEdgeInfo( int edge, bool& active, T& val, int& curveType ) const;
|
||||
const T& GetDefaultEdgeZeroValue() const;
|
||||
DmeTime_t GetRightEdgeTime() const;
|
||||
|
||||
void SetOwnerLog( CDmeLog *owner );
|
||||
|
||||
CDmeTypedLog< T > *GetTypedOwnerLog();
|
||||
const CDmeTypedLog< T > *GetTypedOwnerLog() const;
|
||||
|
||||
protected:
|
||||
|
||||
int GetEdgeCurveType( int edge ) const;
|
||||
void GetZeroValue( int side, T& val ) const;
|
||||
|
||||
void GetValueUsingCurveInfo( DmeTime_t time, T& out ) const;
|
||||
void GetValueUsingCurveInfoSkippingKey( int nKeyToSkip, T& out ) const;
|
||||
void GetBoundedSample( int keyindex, DmeTime_t& time, T& val, int& curveType ) const;
|
||||
|
||||
void CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< T > *output );
|
||||
|
||||
friend CDmeTypedLog< T >;
|
||||
|
||||
protected:
|
||||
CDmaArray< T > m_values;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeTypedLog - implementation class for all logs
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
class CDmeTypedLog : public CDmeLog
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTypedLog, CDmeLog );
|
||||
|
||||
public:
|
||||
|
||||
virtual void OnAttributeArrayElementAdded( CDmAttribute *pAttribute, int nFirstElem, int nLastElem );
|
||||
|
||||
CDmeTypedLogLayer< T > *GetLayer( int index );
|
||||
const CDmeTypedLogLayer< T > *GetLayer( int index ) const;
|
||||
|
||||
void StampKeyAtHead( DmeTime_t tHeadPosition, DmeTime_t tPreviousHeadPosition, const DmeLog_TimeSelection_t& params, const T& value );
|
||||
void StampKeyAtHead( DmeTime_t tHeadPosition, DmeTime_t tPreviousHeadPosition, const DmeLog_TimeSelection_t& params, const CDmAttribute *pAttr, uint index = 0 );
|
||||
void FinishTimeSelection( DmeTime_t tHeadPosition, DmeLog_TimeSelection_t& params ); // in attached, timeadvancing mode, we need to blend out of the final sample over the fadeout interval
|
||||
void FilterUsingTimeSelection( IUniformRandomStream *random, float flScale, const DmeLog_TimeSelection_t& params, int filterType, bool bResample, bool bApplyFalloff, const CDmeLogLayer *baseLayer, CDmeLogLayer *writeLayer );
|
||||
void FilterUsingTimeSelection( IUniformRandomStream *random, const DmeLog_TimeSelection_t& params, int filterType, bool bResample, bool bApplyFalloff );
|
||||
void StaggerUsingTimeSelection( const DmeLog_TimeSelection_t& params, DmeTime_t tStaggerAmount, const CDmeLogLayer *baseLayer, CDmeLogLayer *writeLayer );
|
||||
void RevealUsingTimeSelection( const DmeLog_TimeSelection_t ¶ms, CDmeLogLayer *savedLayer );
|
||||
void BlendLayersUsingTimeSelection( const DmeLog_TimeSelection_t ¶ms );
|
||||
void BlendLayersUsingTimeSelection( const CDmeLogLayer *firstLayer, const CDmeLogLayer *secondLayer, CDmeLogLayer *outputLayer, const DmeLog_TimeSelection_t ¶ms, bool bUseBaseLayerSamples, DmeTime_t tStartOffset );
|
||||
void BlendTimesUsingTimeSelection( const CDmeLogLayer *firstLayer, const CDmeLogLayer *secondLayer, CDmeLogLayer *outputLayer, const DmeLog_TimeSelection_t ¶ms, DmeTime_t tStartOffset );
|
||||
|
||||
virtual void PasteAndRescaleSamples( const CDmeLogLayer *src, const DmeLog_TimeSelection_t& srcParams, const DmeLog_TimeSelection_t& destParams, bool bBlendAreaInFalloffRegion );
|
||||
virtual void PasteAndRescaleSamples( const CDmeLogLayer *pBaseLayer, const CDmeLogLayer *pDataLayer, CDmeLogLayer *pOutputLayer, const DmeLog_TimeSelection_t& srcParams, const DmeLog_TimeSelection_t& destParams, bool bBlendAreaInFalloffRegion );
|
||||
virtual void BuildCorrespondingLayer( const CDmeLogLayer *pReferenceLayer, const CDmeLogLayer *pDataLayer, CDmeLogLayer *pOutputLayer );
|
||||
|
||||
virtual void BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
|
||||
// Finds a key within tolerance, or adds one. Unlike SetKey, this will *not* delete keys after the specified time
|
||||
int FindOrAddKey( DmeTime_t nTime, DmeTime_t nTolerance, const T& value, int curveType = CURVE_DEFAULT );
|
||||
|
||||
// Sets a key, removes all keys after this time
|
||||
void SetKey( DmeTime_t time, const T& value, int curveType = CURVE_DEFAULT );
|
||||
int InsertKeyAtTime( DmeTime_t nTime, int curveType = CURVE_DEFAULT );
|
||||
bool ValuesDiffer( const T& a, const T& b ) const;
|
||||
const T& GetValue( DmeTime_t time ) const;
|
||||
const T& GetValueSkippingTopmostLayer( DmeTime_t time ) const;
|
||||
|
||||
const T& GetKeyValue( int nKeyIndex ) const;
|
||||
|
||||
// This inserts a key. Unlike SetKey, this will *not* delete keys after the specified time
|
||||
int InsertKey( DmeTime_t nTime, const T& value, int curveType = CURVE_DEFAULT );
|
||||
|
||||
// inherited from CDmeLog
|
||||
virtual void ClearKeys();
|
||||
virtual void SetKey( DmeTime_t time, const CDmAttribute *pAttr, uint index = 0, int curveType = CURVE_DEFAULT );
|
||||
virtual bool SetDuplicateKeyAtTime( DmeTime_t time );
|
||||
virtual void GetValue( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const;
|
||||
virtual void GetValueSkippingTopmostLayer( DmeTime_t time, CDmAttribute *pAttr, uint index = 0 ) const;
|
||||
virtual float GetComponent( DmeTime_t time, int componentIndex ) const;
|
||||
virtual DmAttributeType_t GetDataType() const;
|
||||
virtual float GetValueThreshold() const { return m_threshold; }
|
||||
virtual void SetValueThreshold( float thresh );
|
||||
virtual bool IsConstantValued() const;
|
||||
virtual void RemoveRedundantKeys();
|
||||
virtual void RemoveRedundantKeys( float threshold );
|
||||
virtual void RemoveKey( int nKeyIndex, int nNumKeysToRemove = 1 );
|
||||
virtual void Resample( DmeFramerate_t samplerate );
|
||||
virtual void Filter( int nSampleRadius );
|
||||
virtual void Filter2( DmeTime_t sampleRadius );
|
||||
|
||||
virtual int FindKeyWithinTolerance( DmeTime_t time, DmeTime_t nTolerance );
|
||||
virtual DmeTime_t GetKeyTime( int nKeyIndex ) const;
|
||||
virtual void SetKeyTime( int nKeyIndex, DmeTime_t keyTime );
|
||||
|
||||
virtual CDmeLogLayer *AddNewLayer();
|
||||
virtual void FlattenLayers( float threshhold, int flags );
|
||||
|
||||
// Only used by undo system!!!
|
||||
virtual void AddLayerToTail( CDmeLogLayer *layer );
|
||||
virtual CDmeLogLayer *RemoveLayerFromTail();
|
||||
virtual CDmeLogLayer *RemoveLayer( int iLayer );
|
||||
|
||||
// curve info helpers
|
||||
const CDmeTypedCurveInfo< T > *GetTypedCurveInfo() const;
|
||||
CDmeTypedCurveInfo< T > *GetTypedCurveInfo();
|
||||
virtual CDmeCurveInfo *GetOrCreateCurveInfo();
|
||||
virtual void SetCurveInfo( CDmeCurveInfo *pCurveInfo );
|
||||
|
||||
// For "faceposer" style left/right edges, this controls whether interpolators try to mimic faceposer left/right edge behavior
|
||||
void SetUseEdgeInfo( bool state );
|
||||
bool IsUsingEdgeInfo() const;
|
||||
|
||||
void SetEdgeInfo( int edge, bool active, const T& val, int curveType );
|
||||
void GetEdgeInfo( int edge, bool& active, T& val, int& curveType ) const;
|
||||
|
||||
void SetDefaultEdgeZeroValue( const T& val );
|
||||
const T& GetDefaultEdgeZeroValue() const;
|
||||
|
||||
void SetRightEdgeTime( DmeTime_t time );
|
||||
DmeTime_t GetRightEdgeTime() const;
|
||||
|
||||
bool IsEdgeActive( int edge ) const;
|
||||
void GetEdgeValue( int edge, T& value ) const;
|
||||
|
||||
int GetEdgeCurveType( int edge ) const;
|
||||
void GetZeroValue( int side, T& val ) const;
|
||||
|
||||
T ClampValue( const T& value );
|
||||
|
||||
void SetDefaultValue( const T& value );
|
||||
const T& GetDefaultValue() const;
|
||||
bool HasDefaultValue() const;
|
||||
void ClearDefaultValue();
|
||||
|
||||
static void SetDefaultValueThreshold( float thresh );
|
||||
static float GetDefaultValueThreshold();
|
||||
|
||||
static float s_defaultThreshold;
|
||||
|
||||
protected:
|
||||
void RemoveKeys( DmeTime_t starttime );
|
||||
|
||||
void _StampKeyAtHeadResample( DmeTime_t tHeadPosition, const DmeLog_TimeSelection_t & params, const T& value, bool bSkipToHead, bool bClearPreviousKeys );
|
||||
void _StampKeyAtHeadFilteredByTimeSelection( DmeTime_t tHeadPosition, DmeTime_t tPreviousHeadPosition, const DmeLog_TimeSelection_t & params, const T& value );
|
||||
void _StampKeyFilteredByTimeSelection( CDmeTypedLogLayer< T > *pWriteLayer, DmeTime_t t, const DmeLog_TimeSelection_t ¶ms, const T& value, bool bForce = false );
|
||||
|
||||
protected:
|
||||
// this really only makes sense for some of our subclasses, basically those which have float data
|
||||
// anything else's threshhold is almost certainly 0, and that class just ignores m_threshold
|
||||
float m_threshold;
|
||||
|
||||
CDmaVar< bool > m_UseDefaultValue;
|
||||
CDmaVar< T > m_DefaultValue;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Template methods
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
DmAttributeType_t CDmeTypedLogLayer<T>::GetDataType() const
|
||||
{
|
||||
return CDmAttributeInfo< T >::AttributeType();
|
||||
}
|
||||
|
||||
template< class T >
|
||||
bool CDmeTypedLogLayer<T>::IsConstantValued() const
|
||||
{
|
||||
if ( m_values.Count() < 2 )
|
||||
return true;
|
||||
|
||||
if ( m_values.Count() == 2 && !GetTypedOwnerLog()->ValuesDiffer( m_values[ 0 ], m_values[ 1 ] ) )
|
||||
return true;
|
||||
|
||||
// we're throwing away duplicate values during recording, so this is generally correct
|
||||
// although there are paths to set keys that don't use the duplicate test, so it's not 100%
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Template methods
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
DmAttributeType_t CDmeTypedLog<T>::GetDataType() const
|
||||
{
|
||||
return CDmAttributeInfo< T >::AttributeType();
|
||||
}
|
||||
|
||||
template< class T >
|
||||
void CDmeTypedLog<T>::SetDefaultValueThreshold( float thresh )
|
||||
{
|
||||
s_defaultThreshold = thresh;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
float CDmeTypedLog<T>::GetDefaultValueThreshold()
|
||||
{
|
||||
return s_defaultThreshold;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
void CDmeTypedLog<T>::SetValueThreshold( float thresh )
|
||||
{
|
||||
m_threshold = thresh;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
bool CDmeTypedLog<T>::IsConstantValued() const
|
||||
{
|
||||
int c = m_Layers.Count();
|
||||
for ( int i = 0; i < c; ++i )
|
||||
{
|
||||
if ( !GetLayer( i )->IsConstantValued() )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template< class T >
|
||||
void CDmeTypedLog<T>::RemoveRedundantKeys()
|
||||
{
|
||||
int bestLayer = GetTopmostLayer();
|
||||
if ( bestLayer < 0 )
|
||||
return;
|
||||
|
||||
GetLayer( bestLayer )->RemoveRedundantKeys();
|
||||
}
|
||||
|
||||
template< class T >
|
||||
inline float Normalize( const T& val )
|
||||
{
|
||||
Assert( 0 );
|
||||
return 0.5f;
|
||||
}
|
||||
|
||||
// AT_INT
|
||||
// AT_FLOAT
|
||||
// AT_VECTOR*
|
||||
|
||||
template<>
|
||||
inline float Normalize( const bool& val )
|
||||
{
|
||||
return val ? 1.0f : 0.0f;
|
||||
}
|
||||
|
||||
template<>
|
||||
inline float Normalize( const Color& val )
|
||||
{
|
||||
float sum = 0.0f;
|
||||
for ( int i = 0 ; i < 4; ++i )
|
||||
{
|
||||
sum += val[ i ];
|
||||
}
|
||||
sum /= 4.0f;
|
||||
return clamp( sum / 255.0f, 0.0f, 1.0f );
|
||||
}
|
||||
|
||||
template<>
|
||||
inline float Normalize( const QAngle& val )
|
||||
{
|
||||
float sum = 0.0f;
|
||||
for ( int i = 0 ; i < 3; ++i )
|
||||
{
|
||||
float ang = val[ i ];
|
||||
if ( ang < 0.0f )
|
||||
{
|
||||
ang += 360.0f;
|
||||
}
|
||||
|
||||
sum += ang;
|
||||
}
|
||||
return clamp( ( sum / 3.0f ) / 360.0f, 0.0f, 1.0f );
|
||||
}
|
||||
|
||||
template<>
|
||||
inline float Normalize( const Quaternion& val )
|
||||
{
|
||||
QAngle angle;
|
||||
QuaternionAngles( val, angle );
|
||||
return Normalize( angle );
|
||||
}
|
||||
|
||||
template< class T >
|
||||
inline void CDmeTypedLog< T >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *pTarget )
|
||||
{
|
||||
Assert( pTarget );
|
||||
Assert( GetDataType() != AT_FLOAT );
|
||||
|
||||
CDmeTypedLogLayer< T > *pBaseLayer = static_cast< CDmeTypedLogLayer< T > * >( GetLayer( 0 ) );
|
||||
if ( !pBaseLayer )
|
||||
return;
|
||||
|
||||
int kc = pBaseLayer->GetKeyCount();
|
||||
for ( int i = 0; i < kc; ++i )
|
||||
{
|
||||
DmeTime_t tKeyTime = pBaseLayer->GetKeyTime( i );
|
||||
T keyValue = pBaseLayer->GetKeyValue( i );
|
||||
float flNormalized = Normalize( keyValue );
|
||||
|
||||
pTarget->InsertKey( tKeyTime, flNormalized );
|
||||
}
|
||||
|
||||
if ( HasDefaultValue() )
|
||||
{
|
||||
pTarget->GetTypedOwnerLog()->SetDefaultValue( Normalize( GetDefaultValue() ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Generic implementations all stubbed
|
||||
// Forward declare specific typed instantiations for float types
|
||||
|
||||
template< class T > T CDmeTypedLog< T >::ClampValue( const T& value ) { return value; }
|
||||
template<> float CDmeTypedLog< float >::ClampValue( const float& value );
|
||||
|
||||
|
||||
template< class T > void CDmeTypedCurveInfo< T >::GetZeroValue( int side, T& val ) const{ Assert( 0 ); }
|
||||
template< class T > bool CDmeTypedCurveInfo< T >::IsEdgeActive( int edge ) const{ Assert( 0 ); return false; }
|
||||
template< class T > void CDmeTypedCurveInfo< T >::GetEdgeValue( int edge, T &value ) const{ Assert( 0 ); }
|
||||
|
||||
template<> void CDmeTypedCurveInfo< float >::GetZeroValue( int side, float& val ) const;
|
||||
template<> bool CDmeTypedCurveInfo< float >::IsEdgeActive( int edge ) const;
|
||||
template<> void CDmeTypedCurveInfo< float >::GetEdgeValue( int edge, float &value ) const;
|
||||
|
||||
template<> void CDmeTypedCurveInfo< Vector >::GetZeroValue( int side, Vector& val ) const;
|
||||
template<> void CDmeTypedCurveInfo< Quaternion >::GetZeroValue( int side, Quaternion& val ) const;
|
||||
|
||||
template< class T > void CDmeTypedLogLayer< T >::GetValueUsingCurveInfo( DmeTime_t time, T& out ) const { Assert( 0 ); }
|
||||
template< class T > void CDmeTypedLogLayer< T >::GetValueUsingCurveInfoSkippingKey( int nKeyToSkip, T& out ) const { Assert( 0 ); }
|
||||
template<> void CDmeTypedLogLayer< float >::GetValueUsingCurveInfo( DmeTime_t time, float& out ) const;
|
||||
template<> void CDmeTypedLogLayer< float >::GetValueUsingCurveInfoSkippingKey( int nKeyToSkip, float& out ) const;
|
||||
|
||||
template<> void CDmeTypedLogLayer< Vector >::GetValueUsingCurveInfo( DmeTime_t time, Vector& out ) const;
|
||||
template<> void CDmeTypedLogLayer< Vector >::GetValueUsingCurveInfoSkippingKey( int nKeyToSkip, Vector& out ) const;
|
||||
|
||||
template<> void CDmeTypedLogLayer< Quaternion >::GetValueUsingCurveInfo( DmeTime_t time, Quaternion& out ) const;
|
||||
template<> void CDmeTypedLogLayer< Quaternion >::GetValueUsingCurveInfoSkippingKey( int nKeyToSkip, Quaternion& out ) const;
|
||||
|
||||
template<class T> void CDmeTypedLogLayer< T >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< T > *output );
|
||||
template<> void CDmeTypedLogLayer< bool >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< bool > *output );
|
||||
template<> void CDmeTypedLogLayer< int >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< int > *output );
|
||||
template<> void CDmeTypedLogLayer< Color >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< Color > *output );
|
||||
template<> void CDmeTypedLogLayer< Quaternion >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< Quaternion > *output );
|
||||
template<> void CDmeTypedLogLayer< VMatrix >::CurveSimplify_R( float thresholdSqr, int startPoint, int endPoint, CDmeTypedLogLayer< VMatrix > *output );
|
||||
|
||||
template<> void CDmeTypedLog< Vector >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
template<> void CDmeTypedLog< Vector2D >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
template<> void CDmeTypedLog< Vector4D >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
template<> void CDmeTypedLog< float >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
template<> void CDmeTypedLog< int >::BuildNormalizedLayer( CDmeTypedLogLayer< float > *target );
|
||||
|
||||
//template<> void CDmeTypedLog< float >::FinishTimeSelection( DmeTime_t tHeadPosition, DmeLog_TimeSelection_t& params );
|
||||
//template<> void CDmeTypedLog< bool >::_StampKeyAtHeadResample( const DmeLog_TimeSelection_t& params, const bool& value ) { Assert( 0 ); }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// typedefs for convenience (and so the user-supplied names match the programmer names)
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef CDmeTypedLog<int> CDmeIntLog;
|
||||
typedef CDmeTypedLog<float> CDmeFloatLog;
|
||||
typedef CDmeTypedLog<bool> CDmeBoolLog;
|
||||
typedef CDmeTypedLog<Color> CDmeColorLog;
|
||||
typedef CDmeTypedLog<Vector2D> CDmeVector2Log;
|
||||
typedef CDmeTypedLog<Vector> CDmeVector3Log;
|
||||
typedef CDmeTypedLog<Vector4D> CDmeVector4Log;
|
||||
typedef CDmeTypedLog<QAngle> CDmeQAngleLog;
|
||||
typedef CDmeTypedLog<Quaternion> CDmeQuaternionLog;
|
||||
typedef CDmeTypedLog<VMatrix> CDmeVMatrixLog;
|
||||
typedef CDmeTypedLog<CUtlString> CDmeStringLog;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// typedefs for convenience (and so the user-supplied names match the programmer names)
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef CDmeTypedLogLayer<int> CDmeIntLogLayer;
|
||||
typedef CDmeTypedLogLayer<float> CDmeFloatLogLayer;
|
||||
typedef CDmeTypedLogLayer<bool> CDmeBoolLogLayer;
|
||||
typedef CDmeTypedLogLayer<Color> CDmeColorLogLayer;
|
||||
typedef CDmeTypedLogLayer<Vector2D> CDmeVector2LogLayer;
|
||||
typedef CDmeTypedLogLayer<Vector> CDmeVector3LogLayer;
|
||||
typedef CDmeTypedLogLayer<Vector4D> CDmeVector4LogLayer;
|
||||
typedef CDmeTypedLogLayer<QAngle> CDmeQAngleLogLayer;
|
||||
typedef CDmeTypedLogLayer<Quaternion> CDmeQuaternionLogLayer;
|
||||
typedef CDmeTypedLogLayer<VMatrix> CDmeVMatrixLogLayer;
|
||||
typedef CDmeTypedLogLayer<CUtlString> CDmeStringLogLayer;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// typedefs for convenience (and so the user-supplied names match the programmer names)
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef CDmeTypedCurveInfo<int> CDmeIntCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<float> CDmeFloatCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<bool> CDmeBoolCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<Color> CDmeColorCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<Vector2D> CDmeVector2CurveInfo;
|
||||
typedef CDmeTypedCurveInfo<Vector> CDmeVector3CurveInfo;
|
||||
typedef CDmeTypedCurveInfo<Vector4D> CDmeVector4CurveInfo;
|
||||
typedef CDmeTypedCurveInfo<QAngle> CDmeQAngleCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<Quaternion> CDmeQuaternionCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<VMatrix> CDmeVMatrixCurveInfo;
|
||||
typedef CDmeTypedCurveInfo<CUtlString> CDmeStringCurveInfo;
|
||||
|
||||
// the following types are not supported
|
||||
// AT_ELEMENT,
|
||||
// AT_VOID,
|
||||
// AT_OBJECTID,
|
||||
// <all array types>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helpers for particular types of log layers
|
||||
//-----------------------------------------------------------------------------
|
||||
void GenerateRotationLog( CDmeQuaternionLogLayer *pLayer, const Vector &vecAxis, DmeTime_t pTime[4], float pRevolutionsPerSec[4] );
|
||||
|
||||
// rotates a position log
|
||||
void RotatePositionLog( CDmeVector3LogLayer *pPositionLog, const matrix3x4_t& matrix );
|
||||
|
||||
// rotates an orientation log
|
||||
void RotateOrientationLog( CDmeQuaternionLogLayer *pOrientationLog, const matrix3x4_t& matrix, bool bPreMultiply );
|
||||
|
||||
|
||||
#endif // DMELOG_H
|
||||
237
public/movieobjects/dmemakefile.h
Normal file
237
public/movieobjects/dmemakefile.h
Normal file
@@ -0,0 +1,237 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Describes the way to compile a MDL file (eventual replacement for qc)
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEMAKEFILE_H
|
||||
#define DMEMAKEFILE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "vstdlib/iprocessutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMakefile;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns a list of source types and whether there can be only 1 or not
|
||||
//-----------------------------------------------------------------------------
|
||||
struct DmeMakefileType_t
|
||||
{
|
||||
const char *m_pTypeName;
|
||||
const char *m_pHumanReadableName;
|
||||
bool m_bIsSingleton;
|
||||
const char *m_pDefaultDirectoryID; // NOTE: Use CDmeMakefile::GetDefaultDirectory, passing this in to crack it.
|
||||
const char *m_pFileFilter;
|
||||
const char *m_pFileFilterString;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes an asset source; contains a source name + options
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSource : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSource, CDmElement );
|
||||
|
||||
public:
|
||||
// NOTE: Filenames are stored as relative file names in dmesource
|
||||
// To resolve them to full paths, use CDmeMakefile::GetSourceFullPath
|
||||
const char *GetRelativeFileName() const;
|
||||
void SetRelativeFileName( const char *pFileName );
|
||||
|
||||
// If this source can be built by another makefile, return the type of makefile
|
||||
// NOTE: This can be a base class of a number of makefile types
|
||||
virtual const char **GetSourceMakefileTypes() { return NULL; }
|
||||
|
||||
// Sets/gets the makefile that was used to build this source
|
||||
// NOTE: This information isn't saved and must be reconstructed each frame
|
||||
void SetDependentMakefile( CDmeMakefile *pMakeFile );
|
||||
CDmeMakefile *GetDependentMakefile();
|
||||
|
||||
// Call this to open the source file in an editor
|
||||
void OpenEditor();
|
||||
|
||||
private:
|
||||
// The makefile that built this source
|
||||
CDmeHandle< CDmeMakefile > m_DependentMakefile;
|
||||
};
|
||||
|
||||
|
||||
inline const char *CDmeSource::GetRelativeFileName() const
|
||||
{
|
||||
return m_Name;
|
||||
}
|
||||
|
||||
inline void CDmeSource::SetRelativeFileName( const char *pName )
|
||||
{
|
||||
m_Name = pName;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes an asset: something that is compiled from sources
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMakefile : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMakefile, CDmElement );
|
||||
|
||||
public:
|
||||
// NOTE: Adding or removing sources of the specified type will invalidate the index
|
||||
// NOTE: This index is the same index used in GetSources()
|
||||
CDmeSource *AddSource( const char *pSourceType, const char *pFullPath );
|
||||
template< class T >
|
||||
T* AddSource( const char *pFullPath );
|
||||
CDmeSource *SetSingleSource( const char *pSourceType, const char *pFullPath );
|
||||
template< class T >
|
||||
T* SetSingleSource( const char *pFullPath );
|
||||
CDmeSource *FindSource( const char *pSourceType, const char *pFullPath );
|
||||
void RemoveSource( const char *pSourceType, const char *pFullPath );
|
||||
void RemoveSource( CDmeSource *pSource );
|
||||
void RemoveAllSources( const char *pSourceType );
|
||||
bool HasSourceOfType( const char *pSourceType );
|
||||
|
||||
// Gets/sets paths associated with sources
|
||||
void SetSourceFullPath( CDmeSource *pSource, const char *pFullPath );
|
||||
void GetSourceFullPath( CDmeSource *pSource, char *pFullPath, int nBufLen );
|
||||
|
||||
// Returns the output directory we expect to compile files into
|
||||
bool GetOutputDirectory( char *pFullPath, int nBufLen );
|
||||
|
||||
// Returns the output name (output directory + filename, no extension)
|
||||
bool GetOutputName( char *pFullPath, int nBufLen );
|
||||
|
||||
// Call this to change the file the makefile is stored in
|
||||
// Will make all sources be relative to this path
|
||||
bool SetFileName( const char *pFileName );
|
||||
const char *GetFileName() const;
|
||||
|
||||
// Gets a list of all sources of a particular type
|
||||
void GetSources( const char *pSourceType, CUtlVector< CDmeHandle< CDmeSource > > &sources );
|
||||
template< class T >
|
||||
void GetSources( CUtlVector< CDmeHandle<T> > &sources );
|
||||
|
||||
// Gets a list of all sources, regardless of type
|
||||
int GetSourceCount();
|
||||
CDmeSource *GetSource( int nIndex );
|
||||
|
||||
virtual DmeMakefileType_t *GetMakefileType() { return NULL; }
|
||||
virtual DmeMakefileType_t* GetSourceTypes() { Assert(0); return NULL; }
|
||||
|
||||
// FIXME: Should we have output types? Not sure...
|
||||
virtual void GetOutputs( CUtlVector<CUtlString> &fullPaths ) { Assert(0); }
|
||||
|
||||
// Converts the m_pDefaultDirectoryID field of the DmeMakefileType_t to a full path
|
||||
bool GetDefaultDirectory( const char *pDefaultDirectoryID, char *pFullPath, int nBufLen );
|
||||
|
||||
// These methods are used to help traverse a dependency graph.
|
||||
// They work with information that is not saved.
|
||||
void SetAssociation( CDmeSource *pSource, CDmeMakefile *pSourceMakefile );
|
||||
CDmeMakefile *FindDependentMakefile( CDmeSource *pSource );
|
||||
CDmeSource *FindAssociatedSource( CDmeMakefile *pChildMakefile );
|
||||
CDmElement *GetOutputElement( bool bCreateIfNecessary = false );
|
||||
|
||||
// Performs compilation steps
|
||||
void PreCompile( );
|
||||
void PostCompile( );
|
||||
|
||||
// Dirty, dirty!
|
||||
bool IsDirty() const;
|
||||
void SetDirty( bool bDirty );
|
||||
|
||||
protected:
|
||||
// Make all outputs writeable
|
||||
void MakeOutputsWriteable( );
|
||||
|
||||
// Gets the path of the makefile
|
||||
void GetMakefilePath( char *pFullPath, int nBufLen );
|
||||
|
||||
private:
|
||||
// Inherited classes should re-implement these methods
|
||||
virtual CDmElement *CreateOutputElement( ) { return NULL; }
|
||||
virtual void DestroyOutputElement( CDmElement *pOutput ) { }
|
||||
virtual ProcessHandle_t PerformCompilation() { Assert(0); return PROCESS_HANDLE_INVALID; }
|
||||
virtual const char *GetOutputDirectoryID() { return "makefilegamedir:"; }
|
||||
|
||||
private:
|
||||
// Relative path to full path
|
||||
void RelativePathToFullPath( const char *pRelativePath, char *pFullPath, int nBufLen );
|
||||
|
||||
// Fullpath to relative path
|
||||
void FullPathToRelativePath( const char *pFullPath, char *pRelativePath, int nBufLen );
|
||||
|
||||
// Updates the source names to be relative to a particular path
|
||||
bool UpdateSourceNames( const char *pOldRootDir, const char *pNewRootDir, bool bApplyChanges );
|
||||
|
||||
CDmaElementArray< CDmeSource > m_Sources;
|
||||
CDmeHandle< CDmElement > m_hOutput;
|
||||
ProcessHandle_t m_hCompileProcess;
|
||||
bool m_bIsDirty;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Dirty, dirty!
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeMakefile::IsDirty() const
|
||||
{
|
||||
return m_bIsDirty;
|
||||
}
|
||||
|
||||
inline void CDmeMakefile::SetDirty( bool bDirty )
|
||||
{
|
||||
m_bIsDirty = bDirty;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Gets a list of all sources of a particular type
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
void CDmeMakefile::GetSources( CUtlVector< CDmeHandle<T> > &sources )
|
||||
{
|
||||
int nCount = m_Sources.Count();
|
||||
sources.EnsureCapacity( nCount );
|
||||
for ( int i = 0; i < nCount; ++i )
|
||||
{
|
||||
if ( m_Sources[i]->IsA( T::GetStaticTypeSymbol() ) )
|
||||
{
|
||||
int j = sources.AddToTail();
|
||||
sources[j] = CastElement<T>( m_Sources[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Template version to add a source
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
T* CDmeMakefile::AddSource( const char *pFullPath )
|
||||
{
|
||||
return CastElement< T >( AddSource( g_pDataModel->GetString( T::GetStaticTypeSymbol() ), pFullPath ) );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Template version to set a single source
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
T* CDmeMakefile::SetSingleSource( const char *pFullPath )
|
||||
{
|
||||
return CastElement< T >( SetSingleSource( g_pDataModel->GetString( T::GetStaticTypeSymbol() ), pFullPath ) );
|
||||
}
|
||||
|
||||
|
||||
#endif // DMEMAKEFILE_H
|
||||
301
public/movieobjects/dmemakefileutils.h
Normal file
301
public/movieobjects/dmemakefileutils.h
Normal file
@@ -0,0 +1,301 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Interface for makefiles to build differently depending on where they are run from
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEMAKEFILEUTILS_H
|
||||
#define DMEMAKEFILEUTILS_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "movieobjects/idmemakefileutils.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "tier1/utlsymbol.h"
|
||||
#include "tier3/tier3.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMakefileUtils;
|
||||
class CDmeMDLMakefile;
|
||||
class CDmeMayaMakefile;
|
||||
class CDmeSourceMayaFile;
|
||||
class CDmeMakefile;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// This glue code here is to make it easy to create methods using various DmElement types
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Compilation steps
|
||||
//-----------------------------------------------------------------------------
|
||||
enum CompilationStep_t
|
||||
{
|
||||
BUILDING_STANDARD_DEPENDENCIES = 0,
|
||||
BUILDING_ALL_DEPENDENCIES,
|
||||
BEFORE_COMPILATION,
|
||||
PERFORMING_COMPILATION,
|
||||
AFTER_COMPILATION_FAILED,
|
||||
AFTER_COMPILATION_SUCCEEDED,
|
||||
NOT_COMPILING,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utility adapter class to hook compile funcs into the map
|
||||
//-----------------------------------------------------------------------------
|
||||
class CCompileFuncAdapterBase
|
||||
{
|
||||
public:
|
||||
virtual void InitializeAdapter( ) = 0;
|
||||
virtual bool PerformCompilationStep( CDmElement *pElement, CompilationStep_t step ) = 0;
|
||||
|
||||
protected:
|
||||
// Constructor, protected because these should never be instanced directly
|
||||
CCompileFuncAdapterBase( ) {}
|
||||
|
||||
public:
|
||||
CUtlSymbol m_ElementType;
|
||||
|
||||
CCompileFuncAdapterBase *m_pNext;
|
||||
};
|
||||
|
||||
|
||||
template< class U, class T >
|
||||
class CCompileFuncAdapter : public CCompileFuncAdapterBase
|
||||
{
|
||||
typedef CCompileFuncAdapterBase BaseClass;
|
||||
|
||||
public:
|
||||
CCompileFuncAdapter( )
|
||||
{
|
||||
// Hook into the list
|
||||
m_pNext = U::m_CompileFuncTree.m_pFirstAdapter;
|
||||
U::m_CompileFuncTree.m_pFirstAdapter = this;
|
||||
}
|
||||
|
||||
virtual void InitializeAdapter( )
|
||||
{
|
||||
m_ElementType = T::GetStaticTypeSymbol();
|
||||
if ( m_pNext )
|
||||
{
|
||||
m_pNext->InitializeAdapter();
|
||||
}
|
||||
}
|
||||
|
||||
virtual bool PerformCompilationStep( CDmElement *pElement, CompilationStep_t step )
|
||||
{
|
||||
T *pConverted = CastElement< T >( pElement );
|
||||
if ( pConverted )
|
||||
return U::m_pSingleton->PerformCompilationStep( pConverted, step );
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utility adapter class to hook editor opening funcs into the map
|
||||
//-----------------------------------------------------------------------------
|
||||
class COpenEditorFuncAdapterBase
|
||||
{
|
||||
public:
|
||||
virtual void InitializeAdapter( ) = 0;
|
||||
virtual void OpenEditor( CDmElement *pElement ) = 0;
|
||||
|
||||
protected:
|
||||
// Constructor, protected because these should never be instanced directly
|
||||
COpenEditorFuncAdapterBase( ) {}
|
||||
|
||||
public:
|
||||
CUtlSymbol m_ElementType;
|
||||
COpenEditorFuncAdapterBase *m_pNext;
|
||||
};
|
||||
|
||||
|
||||
template< class U, class T >
|
||||
class COpenEditorFuncAdapter : public COpenEditorFuncAdapterBase
|
||||
{
|
||||
typedef COpenEditorFuncAdapterBase BaseClass;
|
||||
|
||||
public:
|
||||
COpenEditorFuncAdapter( )
|
||||
{
|
||||
// Hook into the list
|
||||
m_pNext = U::m_OpenEditorFuncTree.m_pFirstAdapter;
|
||||
U::m_OpenEditorFuncTree.m_pFirstAdapter = this;
|
||||
}
|
||||
|
||||
virtual void InitializeAdapter( )
|
||||
{
|
||||
m_ElementType = T::GetStaticTypeSymbol();
|
||||
if ( m_pNext )
|
||||
{
|
||||
m_pNext->InitializeAdapter();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OpenEditor( CDmElement *pElement )
|
||||
{
|
||||
T *pConverted = CastElement< T >( pElement );
|
||||
if ( pConverted )
|
||||
{
|
||||
U::m_pSingleton->OpenEditor( pConverted );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#define DECLARE_DMEMAKEFILE_UTIL_CLASS_BASE( _className ) \
|
||||
protected: \
|
||||
typedef _className ThisClass; \
|
||||
static CompileFuncTree_t m_CompileFuncTree; \
|
||||
static OpenEditorFuncTree_t m_OpenEditorFuncTree; \
|
||||
static _className *m_pSingleton; \
|
||||
template< typename U, typename T > friend class CCompileFuncAdapter; \
|
||||
template< typename U, typename T > friend class COpenEditorFuncAdapter; \
|
||||
virtual CompileFuncTree_t* GetCompileTree() \
|
||||
{ \
|
||||
return &m_CompileFuncTree; \
|
||||
} \
|
||||
virtual OpenEditorFuncTree_t* GetOpenEditorTree() \
|
||||
{ \
|
||||
return &m_OpenEditorFuncTree; \
|
||||
} \
|
||||
|
||||
|
||||
#define DECLARE_DMEMAKEFILE_UTIL_CLASS( _className, _baseClass ) \
|
||||
DECLARE_DMEMAKEFILE_UTIL_CLASS_BASE( _className ) \
|
||||
typedef _baseClass BaseClass; \
|
||||
protected: \
|
||||
virtual void InitializeFuncMaps() \
|
||||
{ \
|
||||
m_pSingleton = this; \
|
||||
m_CompileFuncTree.m_pBaseAdapterTree = &BaseClass::m_CompileFuncTree; \
|
||||
m_CompileFuncTree.m_pFirstAdapter->InitializeAdapter( ); \
|
||||
m_OpenEditorFuncTree.m_pBaseAdapterTree = &BaseClass::m_OpenEditorFuncTree; \
|
||||
m_OpenEditorFuncTree.m_pFirstAdapter->InitializeAdapter( ); \
|
||||
BaseClass::InitializeFuncMaps(); \
|
||||
} \
|
||||
|
||||
#define DECLARE_DMEMAKEFILE_UTIL_CLASS_ROOT( _className ) \
|
||||
DECLARE_DMEMAKEFILE_UTIL_CLASS_BASE( _className ) \
|
||||
protected: \
|
||||
virtual void InitializeFuncMaps() \
|
||||
{ \
|
||||
m_pSingleton = this; \
|
||||
m_CompileFuncTree.m_pBaseAdapterTree = NULL; \
|
||||
m_CompileFuncTree.m_pFirstAdapter->InitializeAdapter( ); \
|
||||
m_OpenEditorFuncTree.m_pBaseAdapterTree = NULL; \
|
||||
m_OpenEditorFuncTree.m_pFirstAdapter->InitializeAdapter( ); \
|
||||
} \
|
||||
|
||||
#define IMPLEMENT_DMEMAKEFILE_UTIL_CLASS( _className ) \
|
||||
CDmeMakefileUtils::CompileFuncTree_t _className::m_CompileFuncTree; \
|
||||
CDmeMakefileUtils::OpenEditorFuncTree_t _className::m_OpenEditorFuncTree; \
|
||||
_className *_className::m_pSingleton; \
|
||||
|
||||
#define DECLARE_COMPILEFUNC( _className ) \
|
||||
bool PerformCompilationStep( _className *pClassName, CompilationStep_t step ); \
|
||||
CCompileFuncAdapter< ThisClass, _className > m_##_className##CompileAdapter
|
||||
|
||||
#define DECLARE_OPENEDITORFUNC( _className ) \
|
||||
void OpenEditor( _className *pClassName ); \
|
||||
COpenEditorFuncAdapter< ThisClass, _className > m_##_className##OpenEditorAdapter
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Interface for makefiles to build differently depending on where they are run from
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMakefileUtils : public CTier3AppSystem<IDmeMakefileUtils>
|
||||
{
|
||||
protected:
|
||||
struct CompileFuncTree_t
|
||||
{
|
||||
CCompileFuncAdapterBase *m_pFirstAdapter;
|
||||
CompileFuncTree_t *m_pBaseAdapterTree;
|
||||
};
|
||||
|
||||
struct OpenEditorFuncTree_t
|
||||
{
|
||||
COpenEditorFuncAdapterBase *m_pFirstAdapter;
|
||||
OpenEditorFuncTree_t *m_pBaseAdapterTree;
|
||||
};
|
||||
|
||||
typedef CTier3AppSystem< IDmeMakefileUtils > BaseClass;
|
||||
|
||||
DECLARE_DMEMAKEFILE_UTIL_CLASS_ROOT( CDmeMakefileUtils );
|
||||
|
||||
public:
|
||||
// Constructor, destructor
|
||||
CDmeMakefileUtils();
|
||||
virtual ~CDmeMakefileUtils();
|
||||
|
||||
// Inherited from IAppSystem
|
||||
virtual void *QueryInterface( const char *pInterfaceName );
|
||||
virtual InitReturnVal_t Init();
|
||||
|
||||
// Inherited from IDmeMakefileUtils
|
||||
virtual void PerformCompile( CDmElement *pElement, bool bBuildAllDependencies );
|
||||
virtual bool IsCurrentlyCompiling( );
|
||||
virtual int GetCompileOutputSize();
|
||||
virtual CompilationState_t UpdateCompilation( char *pOutputBuf, int nBufLen );
|
||||
virtual void AbortCurrentCompilation();
|
||||
virtual void PerformOpenEditor( CDmElement *pElement );
|
||||
virtual int GetExitCode();
|
||||
|
||||
protected:
|
||||
// Compile functions + editor functions
|
||||
DECLARE_COMPILEFUNC( CDmElement );
|
||||
DECLARE_COMPILEFUNC( CDmeMakefile );
|
||||
DECLARE_COMPILEFUNC( CDmeMDLMakefile );
|
||||
DECLARE_COMPILEFUNC( CDmeMayaMakefile );
|
||||
DECLARE_OPENEDITORFUNC( CDmeSourceMayaFile );
|
||||
|
||||
// Queues up a compilation task
|
||||
// ( Call only in BUILDING_STANDARD_DEPENDENCIES or BUILDING_ALL_DEPENDENCIES )
|
||||
void AddCompilationTask( CDmElement* pElement );
|
||||
|
||||
// Sets the compilation process handle
|
||||
// ( Call only in PERFORMING_COMPILATION )
|
||||
void SetCompileProcess( ProcessHandle_t hProcess );
|
||||
|
||||
private:
|
||||
struct CompileInfo_t
|
||||
{
|
||||
CDmeHandle< CDmElement > m_hElement;
|
||||
CCompileFuncAdapterBase *m_pAdapter;
|
||||
};
|
||||
|
||||
// Finds the adapter class associated with a particular element type
|
||||
CCompileFuncAdapterBase *DetermineCompileAdapter( CDmElement *pElement );
|
||||
COpenEditorFuncAdapterBase *DetermineOpenEditorAdapter( CDmElement *pElement );
|
||||
|
||||
// Dequeue the first compile task and start it up
|
||||
void StartNextCompileTask();
|
||||
|
||||
// Performs the compilation step on all elements
|
||||
bool PerformCompilationStep( CompilationStep_t step );
|
||||
|
||||
// Queues up a compilation task
|
||||
void AddCompilationTask( CDmElement* pElement, CCompileFuncAdapterBase *pAdapter );
|
||||
|
||||
// Default implementatations for compile dependencies
|
||||
bool AddCompileDependencies( CDmeMakefile *pMakefile, bool bBuildAllDependencies );
|
||||
|
||||
CUtlVector< CompileInfo_t > m_CompileTasks;
|
||||
ProcessHandle_t m_hCompileProcess;
|
||||
int m_nCurrentCompileTask;
|
||||
int m_nExitCode;
|
||||
CompilationStep_t m_CompilationStep;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMAKEFILEUTILS_H
|
||||
41
public/movieobjects/dmematerial.h
Normal file
41
public/movieobjects/dmematerial.h
Normal file
@@ -0,0 +1,41 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a material
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMATERIAL_H
|
||||
#define DMEMATERIAL_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class IMaterial;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a material
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMaterial : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMaterial, CDmElement );
|
||||
|
||||
public:
|
||||
IMaterial *GetCachedMTL();
|
||||
void SetMaterial( const char *pMaterialName );
|
||||
const char *GetMaterialName() const;
|
||||
|
||||
virtual void Resolve();
|
||||
|
||||
private:
|
||||
IMaterial *m_pMTL;
|
||||
CDmaString m_mtlName;
|
||||
};
|
||||
|
||||
#endif // DMEMATERIAL_H
|
||||
59
public/movieobjects/dmematerialoverlayfxclip.h
Normal file
59
public/movieobjects/dmematerialoverlayfxclip.h
Normal file
@@ -0,0 +1,59 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMATERIALOVERLAYFXCLIP_H
|
||||
#define DMEMATERIALOVERLAYFXCLIP_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeclip.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
#include "datamodel/dmelementfactoryhelper.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// An effect clip
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMaterialOverlayFXClip : public CDmeFXClip
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMaterialOverlayFXClip, CDmeFXClip );
|
||||
|
||||
public:
|
||||
// All effects must be able to apply their effect
|
||||
virtual void ApplyEffect( DmeTime_t time, Rect_t ¤tRect, Rect_t &totalRect, ITexture *pTextures[MAX_FX_INPUT_TEXTURES] );
|
||||
|
||||
// Resolves changes
|
||||
virtual void Resolve();
|
||||
|
||||
// Sets the overlay material
|
||||
void SetOverlayEffect( const char *pMaterialName );
|
||||
void SetAlpha( float flAlpha );
|
||||
bool HasOpaqueOverlay();
|
||||
|
||||
IMaterial *GetMaterial();
|
||||
float GetAlpha();
|
||||
|
||||
private:
|
||||
CDmaString m_Material;
|
||||
CDmaColor m_Color;
|
||||
CDmaVar<int> m_nLeft;
|
||||
CDmaVar<int> m_nTop;
|
||||
CDmaVar<int> m_nWidth;
|
||||
CDmaVar<int> m_nHeight;
|
||||
CDmaVar<bool> m_bFullScreen;
|
||||
CDmaVar<bool> m_bUseSubRect;
|
||||
CDmaVar<int> m_nSubRectLeft;
|
||||
CDmaVar<int> m_nSubRectTop;
|
||||
CDmaVar<int> m_nSubRectWidth;
|
||||
CDmaVar<int> m_nSubRectHeight;
|
||||
CDmaVar<float> m_flMovementAngle;
|
||||
CDmaVar<float> m_flMovementSpeed;
|
||||
CMaterialReference m_OverlayMaterial;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMATERIALOVERLAYFXCLIP_H
|
||||
79
public/movieobjects/dmemdl.h
Normal file
79
public/movieobjects/dmemdl.h
Normal file
@@ -0,0 +1,79 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing an MDL
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMDL_H
|
||||
#define DMEMDL_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "datacache/imdlcache.h"
|
||||
#include "tier3/mdlutils.h"
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform;
|
||||
class IMorph;
|
||||
class IMaterial;
|
||||
struct SubdivMesh_t;
|
||||
class IMesh;
|
||||
class CDmeDrawSettings;
|
||||
struct matrix3x4_t;
|
||||
class CStudioHdr;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing an MDL
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMDL : public CDmeShape
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMDL, CDmeShape );
|
||||
|
||||
public:
|
||||
virtual void Draw( const matrix3x4_t& shapeToWorld, CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
void DrawInEngine( bool bDrawInEngine );
|
||||
bool IsDrawingInEngine() const;
|
||||
|
||||
void SetMDL( MDLHandle_t handle );
|
||||
MDLHandle_t GetMDL( ) const;
|
||||
float GetRadius() const; // NOTE: This radius is one that is centered at the origin
|
||||
void GetBoundingSphere( Vector &vecCenter, float &flRadius );
|
||||
void GetBoundingBox( Vector *pMins, Vector *pMaxs ) const;
|
||||
|
||||
// Computes bone-to-world transforms
|
||||
void SetUpBones( const matrix3x4_t& shapeToWorld, int nMaxBoneCount, matrix3x4_t *pOutputMatrices );
|
||||
|
||||
public:
|
||||
CDmaColor m_Color;
|
||||
CDmaVar<int> m_nSkin;
|
||||
CDmaVar<int> m_nBody;
|
||||
CDmaVar<int> m_nSequence;
|
||||
CDmaVar<int> m_nLOD;
|
||||
CDmaVar<float> m_flPlaybackRate;
|
||||
CDmaVar<float> m_flTime;
|
||||
CDmaVar<Vector> m_vecViewTarget;
|
||||
CDmaVar<bool> m_bWorldSpaceViewTarget;
|
||||
|
||||
private:
|
||||
void UpdateMDL();
|
||||
|
||||
CMDL m_MDL;
|
||||
bool m_bDrawInEngine;
|
||||
};
|
||||
|
||||
#endif // DMEMDL_H
|
||||
101
public/movieobjects/dmemdlmakefile.h
Normal file
101
public/movieobjects/dmemdlmakefile.h
Normal file
@@ -0,0 +1,101 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Describes the way to compile a MDL file (eventual replacement for qc)
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEMDLMAKEFILE_H
|
||||
#define DMEMDLMAKEFILE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmemakefile.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMDL;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a skin source for MDL makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSourceSkin : public CDmeSource
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceSkin, CDmeSource );
|
||||
|
||||
public:
|
||||
// These can be built from DCC makefiles
|
||||
virtual const char **GetSourceMakefileTypes();
|
||||
|
||||
CDmaString m_SkinName;
|
||||
CDmaVar<bool> m_bFlipTriangles;
|
||||
CDmaVar<float> m_flScale;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a skin source for MDL makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSourceCollisionModel : public CDmeSource
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceCollisionModel, CDmeSource );
|
||||
|
||||
public:
|
||||
// These can be built from DCC makefiles
|
||||
virtual const char **GetSourceMakefileTypes();
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes an animation source for MDL makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSourceAnimation : public CDmeSource
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSourceAnimation, CDmeSource );
|
||||
|
||||
public:
|
||||
// These can be built from DCC makefiles
|
||||
virtual const char **GetSourceMakefileTypes();
|
||||
|
||||
CDmaString m_AnimationName;
|
||||
CDmaString m_SourceAnimationName; // Name in the source file
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Describes a MDL asset: something that is compiled from sources
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMDLMakefile : public CDmeMakefile
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMDLMakefile, CDmeMakefile );
|
||||
|
||||
public:
|
||||
void SetSkin( const char *pFullPath );
|
||||
void AddAnimation( const char *pFullPath );
|
||||
void RemoveAnimation( const char *pFullPath );
|
||||
void RemoveAllAnimations( );
|
||||
|
||||
virtual DmeMakefileType_t *GetMakefileType();
|
||||
virtual DmeMakefileType_t* GetSourceTypes();
|
||||
virtual void GetOutputs( CUtlVector<CUtlString> &fullPaths );
|
||||
|
||||
private:
|
||||
// Inherited classes should re-implement these methods
|
||||
virtual CDmElement *CreateOutputElement( );
|
||||
virtual void DestroyOutputElement( CDmElement *pOutput );
|
||||
virtual const char *GetOutputDirectoryID() { return "makefilegamedir:.."; }
|
||||
|
||||
CDmeHandle< CDmeMDL > m_hMDL;
|
||||
bool m_bFlushMDL;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMDLMAKEFILE_H
|
||||
496
public/movieobjects/dmemesh.h
Normal file
496
public/movieobjects/dmemesh.h
Normal file
@@ -0,0 +1,496 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a mesh
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMESH_H
|
||||
#define DMEMESH_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "movieobjects/dmevertexdata.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
#include "mathlib/vector.h"
|
||||
#include "tier1/utllinkedlist.h"
|
||||
#include "Color.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmElement;
|
||||
class CDmeFaceSet;
|
||||
class CDmeVertexData;
|
||||
class IMaterial;
|
||||
class IMorph;
|
||||
class IMesh;
|
||||
class Vector;
|
||||
class Vector4D;
|
||||
class Color;
|
||||
class CDmeDag;
|
||||
class CMeshBuilder;
|
||||
class CDmeCombinationOperator;
|
||||
class CDmeSingleIndexedComponent;
|
||||
class CDmeDrawSettings;
|
||||
class CDmMeshComp;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Mesh weights
|
||||
//-----------------------------------------------------------------------------
|
||||
enum MeshDeltaWeightType_t
|
||||
{
|
||||
MESH_DELTA_WEIGHT_FIRST = 0,
|
||||
|
||||
MESH_DELTA_WEIGHT_NORMAL = 0,
|
||||
MESH_DELTA_WEIGHT_LAGGED,
|
||||
|
||||
MESH_DELTA_WEIGHT_TYPE_COUNT,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Mesh representation
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMesh : public CDmeShape
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMesh, CDmeShape );
|
||||
|
||||
public:
|
||||
// resolve internal data from changed attributes
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
void GetBoundingSphere( Vector &c, float &r, CDmeVertexData *pPassedBase, CDmeSingleIndexedComponent *pPassedSelection ) const;
|
||||
|
||||
virtual void GetBoundingSphere( Vector &c, float &r ) const { return GetBoundingSphere( c, r, NULL, NULL ); }
|
||||
|
||||
void GetBoundingBox( Vector &min, Vector &max, CDmeVertexData *pPassedBase /* = NULL */, CDmeSingleIndexedComponent *pPassedSelection /* = NULL */ ) const;
|
||||
|
||||
virtual void GetBoundingBox( Vector &min, Vector &max ) const { return GetBoundingBox( min, max, NULL, NULL ); }
|
||||
|
||||
// accessors
|
||||
int FaceSetCount() const;
|
||||
CDmeFaceSet *GetFaceSet( int nFaceSetIndex );
|
||||
const CDmeFaceSet *GetFaceSet( int nFaceSetIndex ) const;
|
||||
void AddFaceSet( CDmeFaceSet *faceSet );
|
||||
void RemoveFaceSet( int nFaceSetIndex );
|
||||
|
||||
// Base states
|
||||
int BaseStateCount() const;
|
||||
|
||||
CDmeVertexData *GetBaseState( int nBaseIndex ) const;
|
||||
|
||||
CDmeVertexData *FindBaseState( const char *pStateName ) const;
|
||||
|
||||
CDmeVertexData *FindOrCreateBaseState( const char *pStateName );
|
||||
bool DeleteBaseState( const char *pStateName );
|
||||
|
||||
// Selects a particular base state to be current state
|
||||
void SetCurrentBaseState( const char *pStateName );
|
||||
CDmeVertexData *GetCurrentBaseState();
|
||||
const CDmeVertexData *GetCurrentBaseState() const;
|
||||
|
||||
bool SetBindBaseState( CDmeVertexData *pBaseState );
|
||||
CDmeVertexData *GetBindBaseState();
|
||||
const CDmeVertexData *GetBindBaseState() const;
|
||||
|
||||
// Draws the mesh
|
||||
void Draw( const matrix3x4_t &shapeToWorld, CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
// Compute triangulated indices
|
||||
void ComputeTriangulatedIndices( const CDmeVertexData *pBaseState, CDmeFaceSet *pFaceSet, int nFirstIndex, int *pIndices, int nOutCount );
|
||||
|
||||
// Compute a default per-vertex tangent given normal data + uv data for all vertex data referenced by this mesh
|
||||
void ComputeDefaultTangentData( bool bSmoothTangents = false );
|
||||
|
||||
// Compute a default per-vertex tangent given normal data + uv data
|
||||
void ComputeDefaultTangentData( CDmeVertexData *pVertexData, bool bSmoothTangents = false );
|
||||
|
||||
// Delta states
|
||||
int DeltaStateCount() const;
|
||||
CDmeVertexDeltaData *GetDeltaState( int nDeltaIndex ) const;
|
||||
CDmeVertexDeltaData *FindDeltaState( const char *pDeltaName ) const;
|
||||
CDmeVertexDeltaData *FindOrCreateDeltaState( const char *pDeltaName );
|
||||
bool DeleteDeltaState( const char *pDeltaName );
|
||||
bool ResetDeltaState( const char *pDeltaName );
|
||||
int FindDeltaStateIndex( const char *pDeltaName ) const;
|
||||
void SetDeltaStateWeight( int nDeltaIndex, MeshDeltaWeightType_t type, float flMorphWeight );
|
||||
void SetDeltaStateWeight( int nDeltaIndex, MeshDeltaWeightType_t type, float flLeftWeight, float flRightWeight );
|
||||
CDmeVertexDeltaData *ModifyOrCreateDeltaStateFromBaseState( const char *pDeltaName, CDmeVertexData *pPassedBase = NULL, bool absolute = false );
|
||||
|
||||
// Sets all of the data in the current base state to be the bind state plus the corrected delta, if delta is NULL then it's set to the bind state
|
||||
bool SetBaseStateToDelta( const CDmeVertexDeltaData *pDelta, CDmeVertexData *pPassedBase = NULL );
|
||||
|
||||
// Selects the vertices from the delta that change position
|
||||
void SelectVerticesFromDelta( CDmeVertexDeltaData *pDelta, CDmeSingleIndexedComponent *pSelection );
|
||||
|
||||
// Selects all the vertices in the mesh
|
||||
void SelectAllVertices( CDmeSingleIndexedComponent *pSelection, CDmeVertexData *pPassedBase = NULL );
|
||||
|
||||
enum SelectHalfType_t
|
||||
{
|
||||
kLeft,
|
||||
kRight
|
||||
};
|
||||
|
||||
// Selects all the vertices in the mesh
|
||||
void SelectHalfVertices( SelectHalfType_t selectHalfType, CDmeSingleIndexedComponent *pSelection, CDmeVertexData *pPassedBase = NULL );
|
||||
|
||||
// Add the delta into the vertex data state weighted by the weight and masked by the weight map
|
||||
bool AddMaskedDelta(
|
||||
CDmeVertexDeltaData *pDelta,
|
||||
CDmeVertexData *pDst = NULL,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
// Interpolate between the current state and the specified delta by the specified percentage masked by the selection
|
||||
bool InterpMaskedDelta(
|
||||
CDmeVertexDeltaData *pDelta,
|
||||
CDmeVertexData *pDst = NULL,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
// Grows the selection by a specified amount
|
||||
void GrowSelection( int nSize, CDmeSingleIndexedComponent *pSelection, CDmMeshComp *pPassedMeshComp );
|
||||
|
||||
// Shrinks the selection by a specified amount
|
||||
void ShrinkSelection( int nSize, CDmeSingleIndexedComponent *pSelection, CDmMeshComp *pPassedMeshComp );
|
||||
|
||||
enum Falloff_t
|
||||
{
|
||||
STRAIGHT = 0,
|
||||
LINEAR = STRAIGHT,
|
||||
BELL,
|
||||
SMOOTH = BELL,
|
||||
SPIKE,
|
||||
DOME
|
||||
};
|
||||
|
||||
enum Distance_t
|
||||
{
|
||||
DIST_ABSOLUTE = 0,
|
||||
DIST_RELATIVE,
|
||||
DIST_DEFAULT
|
||||
};
|
||||
|
||||
CDmeSingleIndexedComponent *FeatherSelection( float falloffDistance, Falloff_t falloffType, Distance_t distanceType, CDmeSingleIndexedComponent *pSelection, CDmMeshComp *pPassedMeshComp );
|
||||
|
||||
// Computes new normal deltas for all states based on position deltas
|
||||
void ComputeDeltaStateNormals();
|
||||
|
||||
struct DeltaComputation_t
|
||||
{
|
||||
int m_nDeltaIndex;
|
||||
int m_nDimensionality;
|
||||
CUtlVector<int> m_DependentDeltas;
|
||||
};
|
||||
|
||||
// Construct list of all n-1 -> 1 dimensional delta states that will be active when this delta state is active
|
||||
void ComputeDependentDeltaStateList( CUtlVector< DeltaComputation_t > &compList );
|
||||
|
||||
// Construct list of all > n dimensional delta states that when active have the specified state as a dependent
|
||||
bool ComputeSuperiorDeltaStateList( const char *pDeltaName, CUtlVector< int > &superiorDeltaStates );
|
||||
|
||||
void SetDeltaNormalDataFromActualNormals( int nDeltaIndex, const CUtlVector<int> &deltaStateList, int nNormalCount, Vector *pNormals );
|
||||
|
||||
void ComputeAllCorrectedPositionsFromActualPositions();
|
||||
|
||||
// Computes adds a delta to the passed data weighted by the passed weight
|
||||
template < class T_t > void AddDelta(
|
||||
const CDmeVertexDeltaData *pDelta, T_t *pFullData, int nFullData, FieldIndex_t fieldIndex, float weight = 1.0f, const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
template < class T_t > void AddDelta(
|
||||
const CDmeVertexDeltaData *pDelta, T_t *pFullData, int nFullData, CDmeVertexData::StandardFields_t standardField, float weight = 1.0f, const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
bool SetBaseStateToDeltas( CDmeVertexData *pPassedBase = NULL );
|
||||
|
||||
template < class T_t >
|
||||
bool SetBaseDataToDeltas( CDmeVertexData *pBase, CDmeVertexData::StandardFields_t nStandardField, CDmrArrayConst< T_t > &srcData, CDmrArray< T_t > &dstData, bool bDoStereo, bool bDoLag );
|
||||
|
||||
// Replace all instances of a material with a different material
|
||||
void ReplaceMaterial( const char *pOldMaterialName, const char *pNewMaterialName );
|
||||
|
||||
// makes all the normals in the mesh unit length
|
||||
void NormalizeNormals();
|
||||
|
||||
// Collapses redundant normals in the model
|
||||
// flNormalBlend is the maximum difference in the dot product between two normals to consider them
|
||||
// to be the same normal, a value of cos( DEG2RAD( 2.0 ) ) is the default studiomdl uses, for example
|
||||
void CollapseRedundantNormals( float flNormalBlend );
|
||||
|
||||
// SWIG errors on the parsing of something in the private section of DmeMesh, it isn't exposed by SWIG anyway, so have SWIG ignore it
|
||||
#ifndef SWIG
|
||||
template < class T_t > static int GenerateCompleteDataForDelta( const CDmeVertexDeltaData *pDelta, T_t *pFullData, int nFullData, CDmeVertexData::StandardFields_t standardField );
|
||||
|
||||
private:
|
||||
friend class CDmMeshComp;
|
||||
|
||||
struct FaceSet_t
|
||||
{
|
||||
FaceSet_t() : m_bBuilt(false) {}
|
||||
IMesh *m_pMesh;
|
||||
bool m_bBuilt;
|
||||
};
|
||||
|
||||
struct Triangle_t
|
||||
{
|
||||
int m_nIndex[3];
|
||||
Vector m_vecTangentS;
|
||||
Vector m_vecTangentT;
|
||||
};
|
||||
|
||||
struct RenderVertexDelta_t
|
||||
{
|
||||
Vector m_vecDeltaPosition;
|
||||
Vector m_vecDeltaNormal;
|
||||
Vector2D m_vecDeltaUV;
|
||||
Vector4D m_vecDeltaColor;
|
||||
float m_flDeltaWrinkle;
|
||||
};
|
||||
|
||||
VertexFormat_t ComputeHwMeshVertexFormat( void );
|
||||
IMorph *CreateHwMorph( IMaterial *pMTL );
|
||||
IMesh *CreateHwMesh( CDmeFaceSet *pFaceSet );
|
||||
|
||||
// Draws the mesh when it uses too many bones
|
||||
void DrawDynamicMesh( CDmeFaceSet *pFaceSet, matrix3x4_t *pPoseToWorld, bool bHasActiveDeltaStates, CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
// Build a map from vertex index to a list of triangles that share the vert.
|
||||
void BuildTriangleMap( const CDmeVertexData *pBaseState, CDmeFaceSet* pFaceSet, CUtlVector<Triangle_t>& triangles, CUtlVector< CUtlVector<int> >* pVertToTriMap = NULL );
|
||||
|
||||
// Computes tangent space data for triangles
|
||||
void ComputeTriangleTangets( const CDmeVertexData *pVertexData, CUtlVector<Triangle_t>& triangles );
|
||||
|
||||
// Build a map from vertex index to a list of triangles that share the vert.
|
||||
void ComputeAverageTangent( CDmeVertexData *pVertexData, bool bSmoothTangents, CUtlVector< CUtlVector<int> >& vertToTriMap, CUtlVector<Triangle_t>& triangles );
|
||||
|
||||
// Do we have active delta state data?
|
||||
bool HasActiveDeltaStates() const;
|
||||
|
||||
// Adds deltas into a delta mesh
|
||||
template< class T > bool AddVertexDelta( CDmeVertexData *pBaseState, void *pVertexData, int nStride, CDmeVertexDataBase::StandardFields_t fieldId, int nIndex, bool bDoLag );
|
||||
template< class T > bool AddStereoVertexDelta( CDmeVertexData *pBaseState, void *pVertexData, int nStride, CDmeVertexDataBase::StandardFields_t fieldId, int nIndex, bool bDoLag );
|
||||
void AddTexCoordDelta( RenderVertexDelta_t *pRenderDelta, float flWeight, CDmeVertexDeltaData *pDeltaState );
|
||||
void AddColorDelta( RenderVertexDelta_t *pRenderDelta, float flWeight, CDmeVertexDeltaData *pDeltaState );
|
||||
|
||||
// Builds deltas based on the current deltas, returns true if there was delta wrinkle data
|
||||
bool BuildDeltaMesh( int nVertices, RenderVertexDelta_t *pDelta );
|
||||
|
||||
// Builds a map from vertex index to all triangles that use it
|
||||
void BuildVertToTriMap( const CDmeVertexData *pVertexData, CUtlVector<Triangle_t> &triangles, CUtlVector< CUtlVector<int> > &vertToTriMap );
|
||||
|
||||
// Compute the dimensionality of the delta state (how many inputs affect it)
|
||||
int ComputeDeltaStateDimensionality( int nDeltaIndex );
|
||||
|
||||
// Discovers the atomic controls used by the various delta states
|
||||
void BuildAtomicControlLists( int nCount, DeltaComputation_t *pInfo, CUtlVector< CUtlVector< int > > &deltaStateUsage );
|
||||
|
||||
// Computes the aggregate position for all vertices after applying a set of delta states
|
||||
void AddDelta( CDmeVertexData *pBaseState, Vector *pDeltaPosition, int nDeltaStateIndex, CDmeVertexData::StandardFields_t fieldId );
|
||||
|
||||
// Converts pose-space normals into deltas appropriate for correction delta states
|
||||
void ComputeCorrectedNormalsFromActualNormals( const CUtlVector<int> &deltaStateList, int nNormalCount, Vector *pNormals );
|
||||
|
||||
// Copies the corrected normal data into a delta state
|
||||
void SetDeltaNormalData( int nDeltaIndex, int nNormalCount, Vector *pNormals );
|
||||
// Renders normals
|
||||
void RenderNormals( matrix3x4_t *pPoseToWorld, RenderVertexDelta_t *pDelta );
|
||||
|
||||
// Writes triangulated indices for a face set into a meshbuilder
|
||||
void WriteTriangluatedIndices( const CDmeVertexData *pBaseState, CDmeFaceSet *pFaceSet, CMeshBuilder &meshBuilder );
|
||||
|
||||
// Initializes the normal material
|
||||
static void InitializeNormalMaterial();
|
||||
|
||||
// Sort function
|
||||
static int DeltaStateLessFunc( const void * lhs, const void * rhs );
|
||||
|
||||
// Computes a list of the delta states ordered by dimensionality
|
||||
void ComputeDeltaStateComputationList( CUtlVector< DeltaComputation_t > &compList );
|
||||
|
||||
// Compute the number of combinations of n items taken k at a time nCk - Probably doesn't belong here but it useful for combos
|
||||
static void Combinations( int n, int k, CUtlVector< CUtlVector< int > > &combos, int *pTmpArray = NULL, int start = 0, int currentK = 0 );
|
||||
|
||||
// Splits the passed delta state name on '_' and finds all of the control Delta states which make up the name
|
||||
bool GetControlDeltaIndices( CDmeVertexDeltaData *pDeltaState, CUtlVector< int > &controlDeltaIndices ) const;
|
||||
|
||||
// Splits the passed delta state name on '_' and finds all of the control Delta states which make up the name
|
||||
bool GetControlDeltaIndices( const char *pDeltaStateName, CUtlVector< int > &controlDeltaIndices ) const;
|
||||
|
||||
// Builds a complete list of all of the delta states expressed as the control indices
|
||||
bool BuildCompleteDeltaStateControlList( CUtlVector< CUtlVector< int > > &deltaStateControlList ) const;
|
||||
|
||||
// Given a list of control indices and a complete list of control indices for each delta state, returns the delta index or -1 if it doesn't exist
|
||||
int FindDeltaIndexFromControlIndices( const CUtlVector< int > &controlIndices, const CUtlVector< CUtlVector< int > > &controlList ) const;
|
||||
|
||||
// Builds a list of all of the dependent delta states that do not already exist
|
||||
bool BuildMissingDependentDeltaList( CDmeVertexDeltaData *pDeltaState, CUtlVector< int > &controlIndices, CUtlVector< CUtlVector< int > > &dependentStates ) const;
|
||||
|
||||
static void ComputeCorrectedPositionsFromActualPositions( const CUtlVector< int > &deltaStateList, int nPositionCount, Vector *pPositions );
|
||||
|
||||
template < class T_t > void AddCorrectedDelta(
|
||||
CDmrArray< T_t > &baseDataArray,
|
||||
const CUtlVector< int > &baseIndices,
|
||||
const DeltaComputation_t &deltaComputation,
|
||||
const char *pFieldName,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
template < class T_t > void AddCorrectedDelta(
|
||||
CUtlVector< T_t > &baseData,
|
||||
const CUtlVector< int > &baseIndices,
|
||||
const DeltaComputation_t &deltaComputation,
|
||||
const char *pFieldName,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
// Add the delta into the vertex data state weighted by the weight and masked by the weight map
|
||||
bool AddCorrectedMaskedDelta(
|
||||
CDmeVertexDeltaData *pDelta,
|
||||
CDmeVertexData *pDst = NULL,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
template < class T_t > void AddRawDelta(
|
||||
CDmeVertexDeltaData *pDelta,
|
||||
CDmrArray< T_t > &baseDataArray,
|
||||
FieldIndex_t nDeltaFieldIndex,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
template < class T_t > void AddRawDelta(
|
||||
CDmeVertexDeltaData *pDelta,
|
||||
CUtlVector< T_t > &baseData,
|
||||
FieldIndex_t nDeltaFieldIndex,
|
||||
float weight = 1.0f,
|
||||
const CDmeSingleIndexedComponent *pMask = NULL );
|
||||
|
||||
friend class CDmxEdit;
|
||||
bool RemoveBaseState( CDmeVertexData *pBase );
|
||||
CDmeVertexData *FindOrAddBaseState( CDmeVertexData *pBase );
|
||||
|
||||
// CFalloff functors map [0, 1] values to [0, 1] values
|
||||
template < int T >
|
||||
class CFalloff
|
||||
{
|
||||
public:
|
||||
virtual inline float operator()( float x ) { return 1 - x; }
|
||||
};
|
||||
|
||||
template<>
|
||||
class CFalloff< CDmeMesh::LINEAR >
|
||||
{
|
||||
public:
|
||||
virtual inline float operator()( float x ) { return 1 - x; }
|
||||
};
|
||||
|
||||
template<>
|
||||
class CFalloff< CDmeMesh::SMOOTH >
|
||||
{
|
||||
public:
|
||||
virtual inline float operator()( float x ) {
|
||||
return ( cosf( x * M_PI ) + 1.0f ) / 2.0f;
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
class CFalloff< CDmeMesh::DOME >
|
||||
{
|
||||
public:
|
||||
virtual inline float operator()( float x ) {
|
||||
return ( cosf( x * M_PI / 2.0 ) );
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
class CFalloff< CDmeMesh::SPIKE >
|
||||
{
|
||||
public:
|
||||
virtual inline float operator()( float x ) {
|
||||
return ( 1.0f - cosf( ( 1.0f - x ) * M_PI / 2.0 ) );
|
||||
}
|
||||
};
|
||||
|
||||
// Feather's the selection by a specified amount, creates a new CDmeSingleIndexedComponent or NULL if error
|
||||
template < int T >
|
||||
CDmeSingleIndexedComponent *FeatherSelection( float fFalloffDistance, Distance_t distanceType, CDmeSingleIndexedComponent *pSelection, CDmMeshComp *pPassedMeshComp );
|
||||
|
||||
bool CreateDeltaFieldFromBaseField( CDmeVertexData::StandardFields_t nStandardFieldIndex, const CDmrArrayConst< float > &baseArray, const CDmrArrayConst< float > &bindArray, CDmeVertexDeltaData *pDelta );
|
||||
bool CreateDeltaFieldFromBaseField( CDmeVertexData::StandardFields_t nStandardFieldIndex, const CDmrArrayConst< Vector2D > &baseArray, const CDmrArrayConst< Vector2D > &bindArray, CDmeVertexDeltaData *pDelta );
|
||||
bool CreateDeltaFieldFromBaseField( CDmeVertexData::StandardFields_t nStandardFieldIndex, const CDmrArrayConst< Vector > &baseArray, const CDmrArrayConst< Vector > &bindArray, CDmeVertexDeltaData *pDelta );
|
||||
|
||||
template< class T_t > bool InterpMaskedData(
|
||||
CDmrArray< T_t > &aData,
|
||||
const CUtlVector< T_t > &bData,
|
||||
float weight,
|
||||
const CDmeSingleIndexedComponent *pMask ) const;
|
||||
|
||||
// Interpolate between the current state and the specified delta by the specified percentage masked by the selection
|
||||
bool InterpMaskedData(
|
||||
CDmeVertexData *paData,
|
||||
const CDmeVertexData *pbData,
|
||||
float weight,
|
||||
const CDmeSingleIndexedComponent *pMask ) const;
|
||||
|
||||
// Find the closest vertex in the specified selection to the passed vertex in the specified base state, if the passed base state is NULL is the current base state
|
||||
int ClosestSelectedVertex( int vIndex, CDmeSingleIndexedComponent *pSelection, const CDmeVertexData *pPassedBase = NULL ) const;
|
||||
|
||||
// Return the distance between the two vertices in the specified base state, if the specified base state is NULL the current state is used
|
||||
float DistanceBetween( int vIndex0, int vIndex1, const CDmeVertexData *pPassedBase = NULL ) const;
|
||||
|
||||
void DrawWireframeFaceSet( CDmeFaceSet *pFaceSet, matrix3x4_t *pPoseToWorld, bool bHasActiveDeltaStates, CDmeDrawSettings *pDrawSettings );
|
||||
|
||||
void ComputeNormalsFromPositions( CDmeVertexData *pBase, const Vector *pPosition, const CUtlVector<Triangle_t> &triangles, int nNormalCount, Vector *pNormals );
|
||||
|
||||
CDmaElement< CDmeVertexData > m_BindBaseState;
|
||||
CDmaElement< CDmeVertexData > m_CurrentBaseState;
|
||||
CDmaElementArray< CDmeVertexData > m_BaseStates;
|
||||
CDmaElementArray< CDmeVertexDeltaData > m_DeltaStates;
|
||||
CDmaElementArray< CDmeFaceSet > m_FaceSets;
|
||||
|
||||
// x is left value, y is right value. If the delta state isn't split, they are the same value
|
||||
CDmaArray<Vector2D> m_DeltaStateWeights[MESH_DELTA_WEIGHT_TYPE_COUNT];
|
||||
|
||||
// Cached-off map of fields->
|
||||
CUtlVector< FaceSet_t > m_hwFaceSets;
|
||||
|
||||
// Normal rendering materials
|
||||
static bool s_bNormalMaterialInitialized;
|
||||
static CMaterialReference s_NormalMaterial;
|
||||
static CMaterialReference s_NormalErrorMaterial;
|
||||
|
||||
static bool s_bMaterialsInitialized;
|
||||
static CMaterialReference s_WireframeMaterial;
|
||||
static CMaterialReference s_WireframeOnShadedMaterial;
|
||||
|
||||
friend class CRenderInfo;
|
||||
|
||||
#endif // ndef SWIG
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeMesh::BaseStateCount() const
|
||||
{
|
||||
return m_BaseStates.Count();
|
||||
}
|
||||
|
||||
|
||||
inline CDmeVertexData *CDmeMesh::GetBaseState( int nBaseIndex ) const
|
||||
{
|
||||
return m_BaseStates[ nBaseIndex ];
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utility method to compute default tangent data on all meshes in the sub-dag hierarchy
|
||||
//-----------------------------------------------------------------------------
|
||||
void ComputeDefaultTangentData( CDmeDag *pDag, bool bSmoothTangents );
|
||||
|
||||
|
||||
#endif // DMEMESH_H
|
||||
94
public/movieobjects/dmemodel.h
Normal file
94
public/movieobjects/dmemodel.h
Normal file
@@ -0,0 +1,94 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Dme version of a skeletal model (gets compiled into a MDL)
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMEMODEL_H
|
||||
#define DMEMODEL_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/utlstack.h"
|
||||
#include "movieobjects/dmejoint.h"
|
||||
#include "movieobjects/dmetransformlist.h"
|
||||
|
||||
|
||||
class CDmeDrawSettings;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a skeletal model
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeModel : public CDmeDag
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeModel, CDmeDag );
|
||||
|
||||
public:
|
||||
// Add joint
|
||||
CDmeJoint *AddJoint( const char *pJointName, CDmeDag *pParent = NULL );
|
||||
int AddJoint( CDmeDag *pJoint );
|
||||
|
||||
// Returns the number of joint transforms we know about
|
||||
int GetJointTransformCount() const;
|
||||
|
||||
// Determines joint transform index given a joint name
|
||||
int GetJointTransformIndex( CDmeTransform *pTransform ) const;
|
||||
|
||||
// Determines joint transform index given a joint
|
||||
int GetJointTransformIndex( CDmeDag *pJoint ) const;
|
||||
|
||||
// Determines joint transform index given a joint name
|
||||
CDmeTransform *GetJointTransform( int nIndex );
|
||||
const CDmeTransform *GetJointTransform( int nIndex ) const;
|
||||
|
||||
// Captures the current joint transforms into a base state
|
||||
void CaptureJointsToBaseState( const char *pBaseStateName );
|
||||
|
||||
// Finds a base state by name, returns NULL if not found
|
||||
CDmeTransformList *FindBaseState( const char *pBaseStateName );
|
||||
|
||||
// Recursively render the Dag hierarchy
|
||||
virtual void Draw( CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
// Set if Z is the up axis of the model
|
||||
void ZUp( bool bYUp );
|
||||
|
||||
// Returns true if the DmeModel is Z Up.
|
||||
bool IsZUp() const;
|
||||
|
||||
protected:
|
||||
// The order in which the joint transform names appear in this list
|
||||
// indicates the joint index for each dag
|
||||
CDmaElementArray<CDmeTransform> m_JointTransforms;
|
||||
|
||||
// Stores a list of base poses for all the joint transforms
|
||||
CDmaElementArray<CDmeTransformList> m_BaseStates;
|
||||
|
||||
private:
|
||||
enum SetupBoneRetval_t
|
||||
{
|
||||
NO_SKIN_DATA = 0,
|
||||
TOO_MANY_BONES,
|
||||
BONES_SET_UP
|
||||
};
|
||||
|
||||
// Sets up the render state for the model
|
||||
SetupBoneRetval_t SetupBoneMatrixState( const matrix3x4_t& shapeToWorld, bool bForceSoftwareSkin );
|
||||
|
||||
// Loads up joint transforms for this model
|
||||
void LoadJointTransform( CDmeDag *pJoint, CDmeTransformList *pBindPose, const matrix3x4_t &parentToWorld, const matrix3x4_t &parentToBindPose, bool bSetHardwareState );
|
||||
|
||||
// Sets up the render state for the model
|
||||
static matrix3x4_t *SetupModelRenderState( const matrix3x4_t& shapeToWorld, bool bHasSkinningData, bool bForceSoftwareSkin );
|
||||
static void CleanupModelRenderState();
|
||||
|
||||
// Stack of DmeModels currently being rendered. Used to set up render state
|
||||
static CUtlStack< CDmeModel * > s_ModelStack;
|
||||
|
||||
friend class CDmeMesh;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMODEL_H
|
||||
53
public/movieobjects/dmemorphoperator.h
Normal file
53
public/movieobjects/dmemorphoperator.h
Normal file
@@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The morph operator class - sets morph target weights on meshes
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMORPHOPERATOR_H
|
||||
#define DMEMORPHOPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMesh;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMorphOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMorphOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual void Operate();
|
||||
|
||||
// need this until we have the EditApply message queue
|
||||
void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
// accessors
|
||||
uint NumDeltaStateWeights();
|
||||
CDmElement *GetDeltaStateWeight( uint i );
|
||||
CDmeMesh *GetMesh();
|
||||
|
||||
protected:
|
||||
CDmaElement< CDmeMesh > m_mesh;
|
||||
CDmaElementArray< CDmElement > m_deltaStateWeights;
|
||||
CDmaString m_baseStateName;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMORPHOPERATOR_H
|
||||
45
public/movieobjects/dmemouseinput.h
Normal file
45
public/movieobjects/dmemouseinput.h
Normal file
@@ -0,0 +1,45 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The abstract base operator class - all actions within the scenegraph happen via operators
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEMOUSEINPUT_H
|
||||
#define DMEMOUSEINPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeinput.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeMouseInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeMouseInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
// makes the current mouse position be the origin
|
||||
void ResetOrigin() { ResetOrigin( 0.0f, 0.0f ); }
|
||||
void ResetOrigin( float dx, float dy );
|
||||
|
||||
protected:
|
||||
void GetNormalizedCursorPos( float &flX, float &flY );
|
||||
|
||||
float m_xOrigin;
|
||||
float m_yOrigin;
|
||||
|
||||
CDmaVar< float > m_x;
|
||||
CDmaVar< float > m_y;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMOUSEINPUT_H
|
||||
34
public/movieobjects/dmeoperator.h
Normal file
34
public/movieobjects/dmeoperator.h
Normal file
@@ -0,0 +1,34 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The abstract base operator class - all actions within the scenegraph happen via operators
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEOPERATOR_H
|
||||
#define DMEOPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
#include "tier1/utlvector.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeOperator : public IDmeOperator, public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeOperator, CDmElement );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate() {}
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs ) {}
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs ) {}
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEOPERATOR_H
|
||||
164
public/movieobjects/dmepackoperators.h
Normal file
164
public/movieobjects/dmepackoperators.h
Normal file
@@ -0,0 +1,164 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The morph operator class - sets morph target weights on meshes
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEPACKOPERATORS_H
|
||||
#define DMEPACKOPERATORS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackColorOperator - combines floats into a color
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackColorOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackColorOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Color > m_color;
|
||||
CDmaVar< float> m_red;
|
||||
CDmaVar< float> m_green;
|
||||
CDmaVar< float> m_blue;
|
||||
CDmaVar< float> m_alpha;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackVector2Operator - combines floats into a vector2
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackVector2Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackVector2Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector2D > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackVector3Operator - combines floats into a vector
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackVector3Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackVector3Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackVector4Operator - combines floats into a vector4
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackVector4Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackVector4Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector4D > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
CDmaVar< float> m_w;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackQAngleOperator - combines floats into a qangle
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackQAngleOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackQAngleOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< QAngle > m_qangle;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackQuaternionOperator - combines floats into a quaternion
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackQuaternionOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackQuaternionOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Quaternion > m_quaternion;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
CDmaVar< float> m_w;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmePackVMatrixOperator - combines floats into a VMatrix
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmePackVMatrixOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePackVMatrixOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< VMatrix > m_vmatrix;
|
||||
CDmaVar< float > m_cells[ 16 ];
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEPACKOPERATORS_H
|
||||
165
public/movieobjects/dmeparticlesystemdefinition.h
Normal file
165
public/movieobjects/dmeparticlesystemdefinition.h
Normal file
@@ -0,0 +1,165 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: A particle system definition
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEPARTICLESYSTEMDEFINITION_H
|
||||
#define DMEPARTICLESYSTEMDEFINITION_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "particles/particles.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeEditorTypeDictionary;
|
||||
class CDmeParticleSystemDefinition;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Base class for particle functions inside a particle system definition
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeParticleFunction : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeParticleFunction, CDmElement );
|
||||
|
||||
public:
|
||||
virtual const char *GetFunctionType() const { return NULL; }
|
||||
virtual void Resolve();
|
||||
virtual void OnElementUnserialized();
|
||||
|
||||
// Used for backward compat
|
||||
void AddMissingFields( const DmxElementUnpackStructure_t *pUnpack );
|
||||
|
||||
// Returns the editor type dictionary
|
||||
CDmeEditorTypeDictionary* GetEditorTypeDictionary();
|
||||
|
||||
// Marks a particle system as a new instance
|
||||
// This is basically a workaround to prevent newly-copied particle functions
|
||||
// from recompiling themselves a zillion times
|
||||
void MarkNewInstance();
|
||||
|
||||
protected:
|
||||
void UpdateAttributes( const DmxElementUnpackStructure_t *pUnpack );
|
||||
|
||||
private:
|
||||
// Defines widgets to edit this bad boy
|
||||
CDmeHandle< CDmeEditorTypeDictionary > m_hTypeDictionary;
|
||||
bool m_bSkipNextResolve;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Something that updates particles
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeParticleOperator : public CDmeParticleFunction
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeParticleOperator, CDmeParticleFunction );
|
||||
|
||||
public:
|
||||
// Sets the particle operator
|
||||
void SetFunction( IParticleOperatorDefinition *pDefinition );
|
||||
|
||||
// Returns the function type
|
||||
virtual const char *GetFunctionType() const;
|
||||
|
||||
private:
|
||||
CDmaString m_FunctionName;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A child of a particle system
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeParticleChild : public CDmeParticleFunction
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeParticleChild, CDmeParticleFunction );
|
||||
|
||||
public:
|
||||
// Sets the particle operator
|
||||
void SetChildParticleSystem( CDmeParticleSystemDefinition *pDef, IParticleOperatorDefinition *pDefinition );
|
||||
|
||||
// Returns the function type
|
||||
virtual const char *GetFunctionType() const;
|
||||
|
||||
CDmaElement< CDmeParticleSystemDefinition > m_Child;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Represents an editable entity; draws its helpers
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeParticleSystemDefinition : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeParticleSystemDefinition, CDmElement );
|
||||
|
||||
public:
|
||||
virtual void OnElementUnserialized();
|
||||
virtual void Resolve();
|
||||
|
||||
// Add, remove
|
||||
CDmeParticleFunction* AddOperator( ParticleFunctionType_t type, const char *pFunctionName );
|
||||
CDmeParticleFunction* AddChild( CDmeParticleSystemDefinition *pChild );
|
||||
void RemoveFunction( ParticleFunctionType_t type, CDmeParticleFunction *pParticleFunction );
|
||||
void RemoveFunction( ParticleFunctionType_t type, int nIndex );
|
||||
|
||||
// Find
|
||||
int FindFunction( ParticleFunctionType_t type, CDmeParticleFunction *pParticleFunction );
|
||||
int FindFunction( ParticleFunctionType_t type, const char *pFunctionName );
|
||||
|
||||
// Iteration
|
||||
int GetParticleFunctionCount( ParticleFunctionType_t type ) const;
|
||||
CDmeParticleFunction *GetParticleFunction( ParticleFunctionType_t type, int nIndex );
|
||||
|
||||
// Reordering
|
||||
void MoveFunctionUp( ParticleFunctionType_t type, CDmeParticleFunction *pElement );
|
||||
void MoveFunctionDown( ParticleFunctionType_t type, CDmeParticleFunction *pElement );
|
||||
|
||||
// Returns the editor type dictionary
|
||||
CDmeEditorTypeDictionary* GetEditorTypeDictionary();
|
||||
|
||||
// Recompiles the particle system when a change occurs
|
||||
void RecompileParticleSystem();
|
||||
|
||||
// Marks a particle system as a new instance
|
||||
// This is basically a workaround to prevent newly-copied particle functions
|
||||
// from recompiling themselves a zillion times
|
||||
void MarkNewInstance();
|
||||
|
||||
// Should we use name-based lookup?
|
||||
bool UseNameBasedLookup() const;
|
||||
|
||||
private:
|
||||
CDmaElementArray< CDmeParticleFunction > m_ParticleFunction[PARTICLE_FUNCTION_COUNT];
|
||||
CDmaVar< bool > m_bPreventNameBasedLookup;
|
||||
|
||||
// Defines widgets to edit this bad boy
|
||||
CDmeHandle< CDmeEditorTypeDictionary > m_hTypeDictionary;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Should we use name-based lookup?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeParticleSystemDefinition::UseNameBasedLookup() const
|
||||
{
|
||||
return !m_bPreventNameBasedLookup;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Human readable string for the particle functions
|
||||
//-----------------------------------------------------------------------------
|
||||
const char *GetParticleFunctionTypeName( ParticleFunctionType_t type );
|
||||
|
||||
|
||||
#endif // DMEPARTICLESYSTEMDEFINITION_H
|
||||
24
public/movieobjects/dmephonememapping.h
Normal file
24
public/movieobjects/dmephonememapping.h
Normal file
@@ -0,0 +1,24 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEPHONEMEMAPPING_H
|
||||
#define DMEPHONEMEMAPPING_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
class CDmePhonemeMapping : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmePhonemeMapping, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaString m_Preset; // "preset" // map this item to this preset
|
||||
CDmaVar< float > m_Weight; // "weight" // using this weight
|
||||
};
|
||||
|
||||
#endif // DMEPHONEMEMAPPING_H
|
||||
200
public/movieobjects/dmeselection.h
Normal file
200
public/movieobjects/dmeselection.h
Normal file
@@ -0,0 +1,200 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a subselection of something like a mesh
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECOMPONENT_H
|
||||
#define DMECOMPONENT_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeComponent : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeComponent, CDmElement );
|
||||
|
||||
public:
|
||||
enum Component_t
|
||||
{
|
||||
COMP_INVALID = -1,
|
||||
|
||||
COMP_VTX,
|
||||
COMP_FACE,
|
||||
|
||||
STANDARD_COMP_COUNT
|
||||
};
|
||||
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
// What type of component is this
|
||||
Component_t Type() const;
|
||||
|
||||
// How many pieces are in this component
|
||||
virtual int Count() const;
|
||||
|
||||
// Are there no pieces in this component
|
||||
bool IsEmpty() const;
|
||||
|
||||
// Are all possible pieces in this component
|
||||
bool IsComplete() const;
|
||||
|
||||
// Is this an equivalent component to another component
|
||||
virtual bool IsEqual( const CDmeComponent *pRhs ) const;
|
||||
|
||||
// Reset to an empty selection
|
||||
virtual void Clear();
|
||||
|
||||
protected:
|
||||
|
||||
CDmaVar< int > m_Type;
|
||||
CDmaVar< bool > m_bComplete;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// The default type is invalid
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmeComponent::Component_t CDmeComponent::Type() const
|
||||
{
|
||||
const int type( m_Type.Get() );
|
||||
if ( type < 0 || type >= STANDARD_COMP_COUNT )
|
||||
return COMP_INVALID;
|
||||
|
||||
return static_cast< Component_t >( type );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are there no pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeComponent::Count() const
|
||||
{
|
||||
Assert( 0 );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are there no pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsEmpty() const
|
||||
{
|
||||
return Count() == 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are all possible pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsEqual( const CDmeComponent *pRhs ) const
|
||||
{
|
||||
return Type() == pRhs->Type() && Count() == pRhs->Count() && IsComplete() == pRhs->IsComplete();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are all possible pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsComplete() const
|
||||
{
|
||||
return m_bComplete.Get();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Reset to an empty selection
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeComponent::Clear()
|
||||
{
|
||||
m_bComplete.Set( false );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSingleIndexedComponent : public CDmeComponent
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSingleIndexedComponent, CDmeComponent );
|
||||
|
||||
public:
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
// From CDmeComponent
|
||||
virtual int Count() const;
|
||||
|
||||
bool SetType( Component_t type );
|
||||
|
||||
void AddComponent( int component, float weight = 1.0f );
|
||||
|
||||
void AddComponents( const CUtlVector< int > &components );
|
||||
|
||||
void AddComponents( const CUtlVector< int > &components, const CUtlVector< float > &weights );
|
||||
|
||||
void RemoveComponent( int component );
|
||||
|
||||
bool GetComponent( int index, int &component, float &weight ) const;
|
||||
|
||||
bool GetWeight( int component, float &weight ) const;
|
||||
|
||||
void GetComponents( CUtlVector< int > &components ) const;
|
||||
|
||||
void GetComponents( CUtlVector< int > &components, CUtlVector< float > &weights ) const;
|
||||
|
||||
void SetComplete( int nComplete );
|
||||
|
||||
int GetComplete() const;
|
||||
|
||||
bool HasComponent( int component ) const;
|
||||
|
||||
virtual void Clear();
|
||||
|
||||
void Add( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Add( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Add( *pRhs ); }
|
||||
|
||||
void Union( const CDmeSingleIndexedComponent &rhs ) { Add( rhs ); }
|
||||
|
||||
void Union( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Add( *pRhs ); }
|
||||
|
||||
CDmeSingleIndexedComponent &operator+=( const CDmeSingleIndexedComponent &rhs ) { Add( rhs ); return *this; }
|
||||
|
||||
void Subtract( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Subtract( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Subtract( *pRhs ); }
|
||||
|
||||
void Complement( const CDmeSingleIndexedComponent &rhs ) { Subtract( rhs ); }
|
||||
|
||||
void Complement( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Subtract( *pRhs ); }
|
||||
|
||||
CDmeSingleIndexedComponent &operator-=( const CDmeSingleIndexedComponent &rhs ) { Subtract( rhs ); return *this; }
|
||||
|
||||
void Intersection( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Intersection( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Intersection( *pRhs ); }
|
||||
|
||||
protected:
|
||||
int BinarySearch( int component ) const;
|
||||
|
||||
CDmaVar< int > m_CompleteCount;
|
||||
CDmaArray< int > m_Components;
|
||||
CDmaArray< float > m_Weights;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMECOMPONENT_H
|
||||
53
public/movieobjects/dmeshader.h
Normal file
53
public/movieobjects/dmeshader.h
Normal file
@@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a shader
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMESHADER_H
|
||||
#define DMESHADER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class IShader;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a material
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeShader : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeShader, CDmElement );
|
||||
|
||||
public:
|
||||
void SetShaderName( const char *pShaderName );
|
||||
const char *GetShaderName() const;
|
||||
|
||||
// Resolve
|
||||
virtual void Resolve();
|
||||
|
||||
private:
|
||||
// Finds a shader
|
||||
IShader *FindShader();
|
||||
|
||||
// Remove all shader parameters that don't exist in the new shader
|
||||
void RemoveUnusedShaderParams( IShader *pShader );
|
||||
|
||||
// Add all shader parameters that don't currently exist
|
||||
void AddNewShaderParams( IShader *pShader );
|
||||
|
||||
// Add attribute for shader parameter
|
||||
CDmAttribute* AddAttributeForShaderParameter( IShader *pShader, int nIndex );
|
||||
|
||||
IShader *m_pShader;
|
||||
CDmAttributeVarString m_ShaderName;
|
||||
};
|
||||
|
||||
#endif // DMESHADER_H
|
||||
53
public/movieobjects/dmeshape.h
Normal file
53
public/movieobjects/dmeshape.h
Normal file
@@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing an abstract shape (ie drawable object)
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMESHAPE_H
|
||||
#define DMESHAPE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "mathlib/mathlib.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform;
|
||||
class CDmeDrawSettings;
|
||||
class CDmeDag;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeShape : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeShape, CDmElement );
|
||||
|
||||
public:
|
||||
virtual void Draw( const matrix3x4_t &shapeToWorld, CDmeDrawSettings *pDmeDrawSettings = NULL );
|
||||
|
||||
virtual void GetBoundingSphere( Vector &c, float &r ) const;
|
||||
|
||||
// Find out how many DmeDag's have this DmeShape as their shape, could be 0
|
||||
int GetParentCount() const;
|
||||
|
||||
// Get the nth DmeDag that has this DmeShape as its shape. The order is defined by g_pDataModel->FirstAttributeReferencingElement/NextAttr...
|
||||
CDmeDag *GetParent( int nParentIndex = 0 ) const;
|
||||
|
||||
// Get the Nth World Matrix for the shape (the world matrix of the Nth DmeDag parent)
|
||||
void GetShapeToWorldTransform( matrix3x4_t &mat, int nParentIndex = 0 ) const;
|
||||
|
||||
protected:
|
||||
CDmaVar< bool > m_visible;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMESHAPE_H
|
||||
53
public/movieobjects/dmesound.h
Normal file
53
public/movieobjects/dmesound.h
Normal file
@@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a sound
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMESOUND_H
|
||||
#define DMESOUND_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSound : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSound, CDmElement );
|
||||
|
||||
public:
|
||||
CDmaString m_SoundName;
|
||||
CDmaString m_GameSoundName; // Only used if it's a gamesound
|
||||
|
||||
// Return false if it can't find the sound full path
|
||||
bool ComputeSoundFullPath( char *pBuf, int nBufLen );
|
||||
};
|
||||
|
||||
class CDmeGameSound : public CDmeSound
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeGameSound, CDmeSound );
|
||||
|
||||
public:
|
||||
|
||||
CDmElement *FindOrAddPhonemeExtractionSettings();
|
||||
|
||||
CDmaVar< float > m_Volume;
|
||||
CDmaVar< int > m_Level;
|
||||
CDmaVar< int > m_Pitch;
|
||||
|
||||
CDmaVar< bool > m_IsStatic;
|
||||
CDmaVar< int > m_Channel;
|
||||
CDmaVar< int > m_Flags;
|
||||
|
||||
// CDmaElement m_Source;
|
||||
// CDmaVar< bool > m_FollowSource;
|
||||
CDmaVar< Vector > m_Origin;
|
||||
CDmaVar< Vector > m_Direction;
|
||||
};
|
||||
|
||||
#endif // DMESOUND_H
|
||||
140
public/movieobjects/dmetestmesh.h
Normal file
140
public/movieobjects/dmetestmesh.h
Normal file
@@ -0,0 +1,140 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a mesh
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETESTMESH_H
|
||||
#define DMETESTMESH_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "datacache/imdlcache.h"
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform;
|
||||
class IMorph;
|
||||
class IMaterial;
|
||||
struct SubdivMesh_t;
|
||||
class IMesh;
|
||||
class CDmeDrawSettings;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// First attempt at making a hacky SMD loader - clean this up later
|
||||
//-----------------------------------------------------------------------------
|
||||
struct skinning_info_t
|
||||
{
|
||||
skinning_info_t() : index( -1 ), weight( 0.0f )
|
||||
{
|
||||
}
|
||||
skinning_info_t( int i, float w ) : index( i ), weight( w )
|
||||
{
|
||||
}
|
||||
int index;
|
||||
float weight;
|
||||
bool operator<( const skinning_info_t &info )
|
||||
{
|
||||
return weight < info.weight;
|
||||
}
|
||||
};
|
||||
|
||||
struct vertex_t
|
||||
{
|
||||
Vector coord;
|
||||
Vector normal;
|
||||
Vector2D texcoord;
|
||||
std::vector< skinning_info_t > skinning;
|
||||
|
||||
static float normal_tolerance;
|
||||
|
||||
bool operator==( const vertex_t &vert )
|
||||
{
|
||||
return
|
||||
// skinning == vert.skinning && // TODO - the original studiomdl doesn't do this, but...
|
||||
coord == vert.coord &&
|
||||
texcoord == vert.texcoord &&
|
||||
DotProduct( normal, vert.normal ) > normal_tolerance;
|
||||
}
|
||||
};
|
||||
|
||||
struct submesh_t
|
||||
{
|
||||
submesh_t( const std::string &texture_name ) : texname( texture_name )
|
||||
{
|
||||
}
|
||||
std::string texname;
|
||||
std::vector< int > indices;
|
||||
std::vector< vertex_t > vertices;
|
||||
std::vector< CDmeTransform* > bones;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a mesh
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTestMesh : public CDmeShape
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTestMesh, CDmeShape );
|
||||
|
||||
public:
|
||||
virtual void Draw( const matrix3x4_t& shapeToWorld, CDmeDrawSettings *pDrawSettings = NULL );
|
||||
|
||||
static CDmeTestMesh *ReadMeshFromSMD( char *pFilename, DmFileId_t fileid );
|
||||
|
||||
virtual void Resolve();
|
||||
|
||||
private:
|
||||
// Addref/Release the MDL handle
|
||||
void ReferenceMDL( const char *pMDLName );
|
||||
void UnreferenceMDL();
|
||||
|
||||
// Returns a mask indicating which bones to set up
|
||||
int BoneMask( );
|
||||
|
||||
// Sets up the bones
|
||||
void SetUpBones( CDmeTransform *pTransform, int nMaxBoneCount, matrix3x4_t *pBoneToWorld );
|
||||
|
||||
// For testing vertex textures
|
||||
void LoadMorphData( const char *pMorphFile, int nVertexCount );
|
||||
void UnloadMorphData();
|
||||
void LoadModelMatrix( CDmeTransform *pTransform );
|
||||
void DrawBox( CDmeTransform *pTransform );
|
||||
|
||||
// Draws a subdivided box
|
||||
void DrawSubdivMesh( const SubdivMesh_t &mesh );
|
||||
void DrawSubdividedBox();
|
||||
|
||||
// Creates/destroys the subdiv control cage
|
||||
void CreateControlCage( );
|
||||
void DestroyControlCage( );
|
||||
|
||||
// Creates/destroys the morphed mesh
|
||||
void CreateMesh( );
|
||||
void DestroyMesh( );
|
||||
|
||||
MDLHandle_t m_MDLHandle;
|
||||
IMaterial *m_pMaterial;
|
||||
IMesh *m_pMesh;
|
||||
IMorph *m_pMorph;
|
||||
SubdivMesh_t *m_pControlCage;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// First attempt at making a hacky SMD loader - clean this up later
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
std::vector< submesh_t* > m_submeshes;
|
||||
std::vector< CDmeTransform* > m_bones;
|
||||
};
|
||||
|
||||
#endif // DMETESTMESH_H
|
||||
184
public/movieobjects/dmetexture.h
Normal file
184
public/movieobjects/dmetexture.h
Normal file
@@ -0,0 +1,184 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a procedural texture
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETEXTURE_H
|
||||
#define DMETEXTURE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "materialsystem/MaterialSystemUtil.h"
|
||||
#include "movieobjects/dmeimage.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class ITexture;
|
||||
class IMesh;
|
||||
enum ImageFormat;
|
||||
class IVTFTexture;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Compression types
|
||||
//-----------------------------------------------------------------------------
|
||||
enum DmeTextureCompress_t
|
||||
{
|
||||
DMETEXTURE_COMPRESS_DEFAULT = 0,
|
||||
DMETEXTURE_COMPRESS_NONE,
|
||||
DMETEXTURE_COMPRESS_DXT1,
|
||||
DMETEXTURE_COMPRESS_DXT5,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Filter types
|
||||
//-----------------------------------------------------------------------------
|
||||
enum DmeTextureFilter_t
|
||||
{
|
||||
DMETEXTURE_FILTER_DEFAULT = 0,
|
||||
DMETEXTURE_FILTER_ANISOTROPIC,
|
||||
DMETEXTURE_FILTER_TRILINEAR,
|
||||
DMETEXTURE_FILTER_BILINEAR,
|
||||
DMETEXTURE_FILTER_POINT,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Mipmap types
|
||||
//-----------------------------------------------------------------------------
|
||||
enum DmeTextureMipmap_t
|
||||
{
|
||||
DMETEXTURE_MIPMAP_DEFAULT = 0,
|
||||
DMETEXTURE_MIPMAP_ALL_LEVELS,
|
||||
DMETEXTURE_MIPMAP_NONE,
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A base class for textures
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeBaseTexture : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeBaseTexture, CDmElement );
|
||||
|
||||
public:
|
||||
ITexture *GetCachedTexture();
|
||||
|
||||
// Compression type
|
||||
void SetCompressionType( DmeTextureCompress_t type );
|
||||
DmeTextureCompress_t GetCompressionType() const;
|
||||
|
||||
// Filter type
|
||||
void SetFilterType( DmeTextureFilter_t type );
|
||||
DmeTextureFilter_t GetFilterType() const;
|
||||
|
||||
// Mipmap type
|
||||
void SetMipmapType( DmeTextureMipmap_t type );
|
||||
DmeTextureMipmap_t GetMipmapType() const;
|
||||
|
||||
public:
|
||||
CDmAttributeVar<bool> m_bClampS;
|
||||
CDmAttributeVar<bool> m_bClampT;
|
||||
CDmAttributeVar<bool> m_bClampU;
|
||||
CDmAttributeVar<bool> m_bNoDebugOverride;
|
||||
CDmAttributeVar<bool> m_bNoLod;
|
||||
CDmAttributeVar<bool> m_bNiceFiltered;
|
||||
CDmAttributeVar<bool> m_bNormalMap;
|
||||
CDmAttributeVar<float> m_flBumpScale;
|
||||
|
||||
protected:
|
||||
// Computes texture flags
|
||||
int CalcTextureFlags( int nDepth ) const;
|
||||
|
||||
// Computes the desired texture format based on flags
|
||||
ImageFormat ComputeDesiredImageFormat( ImageFormat srcFormat, int nWidth, int nHeight, int nDepth, int nFlags );
|
||||
|
||||
CDmAttributeVar<int> m_nCompressType;
|
||||
CDmAttributeVar<int> m_nFilterType;
|
||||
CDmAttributeVar<int> m_nMipmapType;
|
||||
|
||||
// Computed values
|
||||
CTextureReference m_Texture;
|
||||
IVTFTexture *m_pVTFTexture;
|
||||
Vector m_vecReflectivity;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeBaseTexture::SetCompressionType( DmeTextureCompress_t type )
|
||||
{
|
||||
m_nCompressType = type;
|
||||
}
|
||||
|
||||
inline DmeTextureCompress_t CDmeBaseTexture::GetCompressionType() const
|
||||
{
|
||||
return (DmeTextureCompress_t)m_nCompressType.Get();
|
||||
}
|
||||
|
||||
inline void CDmeBaseTexture::SetFilterType( DmeTextureFilter_t type )
|
||||
{
|
||||
m_nFilterType = type;
|
||||
}
|
||||
|
||||
inline DmeTextureFilter_t CDmeBaseTexture::GetFilterType() const
|
||||
{
|
||||
return (DmeTextureFilter_t)m_nFilterType.Get();
|
||||
}
|
||||
|
||||
inline void CDmeBaseTexture::SetMipmapType( DmeTextureMipmap_t type )
|
||||
{
|
||||
m_nMipmapType = type;
|
||||
}
|
||||
|
||||
inline DmeTextureMipmap_t CDmeBaseTexture::GetMipmapType() const
|
||||
{
|
||||
return (DmeTextureMipmap_t)m_nMipmapType.Get();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a texture
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTexture : public CDmeBaseTexture
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTexture, CDmeBaseTexture );
|
||||
|
||||
public:
|
||||
virtual void Resolve();
|
||||
|
||||
private:
|
||||
// Array of images in an animated texture
|
||||
CDmAttributeVarElementArray< CDmeImage > m_Images;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a cube texture
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeCubeTexture : public CDmeBaseTexture
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeCubeTexture, CDmeBaseTexture );
|
||||
|
||||
public:
|
||||
virtual void Resolve();
|
||||
|
||||
private:
|
||||
// Array of images in an animated texture
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesPosX;
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesNegX;
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesPosY;
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesNegY;
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesPosZ;
|
||||
CDmAttributeVarElementArray< CDmeImage > m_ImagesNegZ;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMETEXTURE_H
|
||||
153
public/movieobjects/dmetimeframe.h
Normal file
153
public/movieobjects/dmetimeframe.h
Normal file
@@ -0,0 +1,153 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETIMEFRAME_H
|
||||
#define DMETIMEFRAME_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Time classes used to help disambiguate between local + parent time
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef int LocalTime_t;
|
||||
typedef int ParentTime_t;
|
||||
|
||||
class CDmeTimeFrame : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTimeFrame, CDmElement );
|
||||
|
||||
public:
|
||||
// Methods of IDmElement
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
DmeTime_t ToChildMediaTime( DmeTime_t t, bool bClamp = true ) const;
|
||||
DmeTime_t FromChildMediaTime( DmeTime_t t, bool bClamp = true ) const;
|
||||
DmeTime_t ToChildMediaDuration( DmeTime_t dt ) const;
|
||||
DmeTime_t FromChildMediaDuration( DmeTime_t dt ) const;
|
||||
|
||||
DmeTime_t GetStartTime() const;
|
||||
DmeTime_t GetDuration() const;
|
||||
DmeTime_t GetTimeOffset() const;
|
||||
float GetTimeScale() const;
|
||||
|
||||
DmeTime_t GetStartInChildMediaTime() const;
|
||||
DmeTime_t GetEndInChildMediaTime() const;
|
||||
|
||||
void SetStartTime( DmeTime_t startTime );
|
||||
void SetDuration( DmeTime_t duration );
|
||||
void SetTimeOffset( DmeTime_t offset );
|
||||
void SetTimeScale( float flScale );
|
||||
|
||||
void SetEndTime( DmeTime_t endTime, bool bChangeDuration );
|
||||
void SetTimeScale( float flScale, DmeTime_t scaleCenter, bool bChangeDuration );
|
||||
|
||||
private:
|
||||
CDmaVar< int > m_Start;
|
||||
CDmaVar< int > m_Duration;
|
||||
CDmaVar< int > m_Offset;
|
||||
CDmaVar< float > m_Scale;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline DmeTime_t CDmeTimeFrame::GetStartTime() const
|
||||
{
|
||||
return DmeTime_t( m_Start );
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::GetDuration() const
|
||||
{
|
||||
return DmeTime_t( m_Duration );
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::GetTimeOffset() const
|
||||
{
|
||||
return DmeTime_t( m_Offset );
|
||||
}
|
||||
|
||||
inline float CDmeTimeFrame::GetTimeScale() const
|
||||
{
|
||||
return m_Scale;
|
||||
}
|
||||
|
||||
inline void CDmeTimeFrame::SetStartTime( DmeTime_t flStartTime )
|
||||
{
|
||||
m_Start = flStartTime.GetTenthsOfMS();
|
||||
}
|
||||
|
||||
inline void CDmeTimeFrame::SetDuration( DmeTime_t flDuration )
|
||||
{
|
||||
Assert( m_Duration >= 0 ); // if you want a reversed clip, set the timescale negative
|
||||
m_Duration = flDuration.GetTenthsOfMS();
|
||||
}
|
||||
|
||||
inline void CDmeTimeFrame::SetTimeOffset( DmeTime_t flOffset )
|
||||
{
|
||||
m_Offset = flOffset.GetTenthsOfMS();
|
||||
}
|
||||
|
||||
inline void CDmeTimeFrame::SetTimeScale( float flScale )
|
||||
{
|
||||
m_Scale = flScale;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Convert back + forth between my media time and child media time
|
||||
//-----------------------------------------------------------------------------
|
||||
inline DmeTime_t CDmeTimeFrame::ToChildMediaTime( DmeTime_t t, bool bClamp ) const
|
||||
{
|
||||
t -= DmeTime_t( m_Start );
|
||||
if ( bClamp )
|
||||
{
|
||||
t.Clamp( DMETIME_ZERO, DmeTime_t( m_Duration ) );
|
||||
}
|
||||
return ( t + DmeTime_t( m_Offset ) ) * m_Scale;
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::FromChildMediaTime( DmeTime_t t, bool bClamp ) const
|
||||
{
|
||||
t = DmeTime_t( t ) / m_Scale - DmeTime_t( m_Offset );
|
||||
if ( bClamp )
|
||||
{
|
||||
t.Clamp( DMETIME_ZERO, DmeTime_t( m_Duration ) );
|
||||
}
|
||||
return t + DmeTime_t( m_Start );
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::ToChildMediaDuration( DmeTime_t dt ) const
|
||||
{
|
||||
return dt * m_Scale;
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::FromChildMediaDuration( DmeTime_t dt ) const
|
||||
{
|
||||
return dt / m_Scale;
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::GetStartInChildMediaTime() const
|
||||
{
|
||||
DmeTime_t time = DmeTime_t( m_Offset ) * m_Scale;
|
||||
Assert( time == ToChildMediaTime( GetStartTime() ) );
|
||||
return time;
|
||||
}
|
||||
|
||||
inline DmeTime_t CDmeTimeFrame::GetEndInChildMediaTime() const
|
||||
{
|
||||
DmeTime_t time = DmeTime_t( m_Offset + m_Duration ) * m_Scale;
|
||||
Assert( time == ToChildMediaTime( GetStartTime() + GetDuration() ) );
|
||||
return time;
|
||||
}
|
||||
|
||||
|
||||
#endif // DMETIMEFRAME_H
|
||||
72
public/movieobjects/dmetimeselection.h
Normal file
72
public/movieobjects/dmetimeselection.h
Normal file
@@ -0,0 +1,72 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETIMESELECTION_H
|
||||
#define DMETIMESELECTION_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
#include "movieobjects/dmetimeselectiontimes.h"
|
||||
|
||||
enum RecordingState_t;
|
||||
|
||||
class CDmeTimeSelection : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTimeSelection, CDmElement );
|
||||
|
||||
public:
|
||||
bool IsEnabled() const;
|
||||
void SetEnabled( bool state );
|
||||
|
||||
bool IsRelative() const;
|
||||
void SetRelative( DmeTime_t time, bool state );
|
||||
|
||||
DmeTime_t GetAbsFalloff( DmeTime_t time, int side );
|
||||
DmeTime_t GetAbsHold( DmeTime_t time, int side );
|
||||
|
||||
DmeTime_t GetRelativeFalloff( DmeTime_t time, int side );
|
||||
DmeTime_t GetRelativeHold( DmeTime_t time, int side );
|
||||
|
||||
void SetAbsFalloff( DmeTime_t time, int side, DmeTime_t absfallofftime );
|
||||
void SetAbsHold ( DmeTime_t time, int side, DmeTime_t absholdtime );
|
||||
|
||||
int GetFalloffInterpolatorType( int side );
|
||||
void SetFalloffInterpolatorType( int side, int interpolatorType );
|
||||
|
||||
void GetAlphaForTime( DmeTime_t t, DmeTime_t curtime, byte &alpha );
|
||||
float GetAmountForTime( DmeTime_t t, DmeTime_t curtime );
|
||||
float AdjustFactorForInterpolatorType( float factor, int side );
|
||||
|
||||
void CopyFrom( const CDmeTimeSelection &src );
|
||||
|
||||
void GetCurrent( DmeTime_t pTimes[TS_TIME_COUNT] );
|
||||
void SetCurrent( DmeTime_t* pTimes );
|
||||
|
||||
float GetThreshold();
|
||||
|
||||
void SetRecordingState( RecordingState_t state );
|
||||
RecordingState_t GetRecordingState() const;
|
||||
|
||||
private:
|
||||
CDmeTimeSelection & operator =( const CDmeTimeSelection& src );
|
||||
|
||||
void ConvertToRelative( DmeTime_t time );
|
||||
void ConvertToAbsolute( DmeTime_t time );
|
||||
|
||||
CDmaVar< bool > m_bEnabled;
|
||||
CDmaVar< bool > m_bRelative;
|
||||
// These are all offsets from the "current" head position in seconds, or they are absolute times if not using relative mode
|
||||
CDmaVar< int > m_falloff[ 2 ];
|
||||
CDmaVar< int > m_hold[ 2 ];
|
||||
CDmaVar< int > m_nFalloffInterpolatorType[ 2 ];
|
||||
CDmaVar< float > m_threshold;
|
||||
CDmaVar< int > m_nRecordingState;
|
||||
};
|
||||
|
||||
#endif // DMETIMESELECTION_H
|
||||
28
public/movieobjects/dmetimeselectiontimes.h
Normal file
28
public/movieobjects/dmetimeselectiontimes.h
Normal file
@@ -0,0 +1,28 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETIMESELECTIONTIMES_H
|
||||
#define DMETIMESELECTIONTIMES_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
enum DmeTimeSelectionTimes_t
|
||||
{
|
||||
TS_LEFT_FALLOFF = 0,
|
||||
TS_LEFT_HOLD,
|
||||
TS_RIGHT_HOLD,
|
||||
TS_RIGHT_FALLOFF,
|
||||
|
||||
TS_TIME_COUNT,
|
||||
};
|
||||
|
||||
// NOTE: _side == 0 means left, == 1 means right
|
||||
#define TS_FALLOFF( _side ) ( ( TS_TIME_COUNT - (_side) ) & 0x3 )
|
||||
#define TS_HOLD( _side ) ( TS_LEFT_HOLD + (_side) )
|
||||
|
||||
|
||||
#endif // DMETIMESELECTIONTIMES_H
|
||||
191
public/movieobjects/dmetrack.h
Normal file
191
public/movieobjects/dmetrack.h
Normal file
@@ -0,0 +1,191 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETRACK_H
|
||||
#define DMETRACK_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/utlflags.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "movieobjects/dmeclip.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeClip;
|
||||
enum DmeClipType_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Default track name
|
||||
//-----------------------------------------------------------------------------
|
||||
#define DMETRACK_DEFAULT_NAME "default"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Constructor, destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTrack : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTrack, CDmElement );
|
||||
|
||||
public:
|
||||
// Methods of IDmElement
|
||||
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
||||
|
||||
void SetCollapsed( bool state );
|
||||
bool IsCollapsed() const;
|
||||
|
||||
void SetVolume( float state );
|
||||
float GetVolume() const;
|
||||
|
||||
|
||||
void SetMute( bool state );
|
||||
bool IsMute( bool bCheckSoloing = true ) const;
|
||||
|
||||
// Is this track synched to the film track?
|
||||
void SetSynched( bool bState );
|
||||
bool IsSynched() const;
|
||||
|
||||
int GetClipCount() const;
|
||||
CDmeClip *GetClip( int i ) const;
|
||||
const CUtlVector< DmElementHandle_t > &GetClips( ) const;
|
||||
|
||||
void AddClip( CDmeClip *clip );
|
||||
bool RemoveClip( CDmeClip *clip );
|
||||
void RemoveClip( int i );
|
||||
void RemoveAllClips();
|
||||
int FindClip( CDmeClip *clip );
|
||||
CDmeClip *FindNamedClip( const char *name );
|
||||
|
||||
DmeClipType_t GetClipType() const;
|
||||
void SetClipType( DmeClipType_t type );
|
||||
|
||||
// Find clips at, intersecting or within a particular time interval
|
||||
void FindClipsAtTime( DmeTime_t time, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
void FindClipsIntersectingTime( DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
void FindClipsWithinTime( DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
|
||||
// Methods to shift clips around
|
||||
// These methods shift clips that straddle the start/end time (NOTE: time is measured in local time)
|
||||
// NOTE: bTestStartingTime true means if the starting time is after the start time, then shift
|
||||
// Setting it to false means if the clip intersects the time at all, then shift
|
||||
void ShiftAllClipsAfter ( DmeTime_t startTime, DmeTime_t dt, bool bTestStartingTime = true );
|
||||
void ShiftAllClipsBefore( DmeTime_t endTime, DmeTime_t dt, bool bTestEndingTime = true );
|
||||
void ShiftAllClips( DmeTime_t dt );
|
||||
|
||||
// A version that works only on film clips
|
||||
void ShiftAllFilmClipsAfter ( CDmeClip *pClip, DmeTime_t dt, bool bShiftClip = false );
|
||||
void ShiftAllFilmClipsBefore( CDmeClip *pClip, DmeTime_t dt, bool bShiftClip = false );
|
||||
|
||||
// Sorts all children so they ascend in time
|
||||
void SortClipsByStartTime( );
|
||||
|
||||
// Shifts all clips to be non-overlapping
|
||||
void FixOverlaps();
|
||||
|
||||
// Can this track contain clips that overlap in time?
|
||||
// NOTE: Non-overlapping clips will be
|
||||
bool IsNonoverlapping() const;
|
||||
|
||||
// Is this a film track?
|
||||
bool IsFilmTrack() const;
|
||||
|
||||
// Returns the next/previous clip in a film track
|
||||
CDmeClip* FindPrevFilmClip( CDmeClip *pClip );
|
||||
CDmeClip* FindNextFilmClip( CDmeClip *pClip );
|
||||
void FindAdjacentFilmClips( CDmeClip *pClip, CDmeClip *&pPrevClip, CDmeClip *&pNextClip );
|
||||
void FindAdjacentFilmClips( DmeTime_t localTime, CDmeClip *&pPrevClip, CDmeClip *&pNextClip );
|
||||
|
||||
// Finds a clip at a particular time
|
||||
CDmeClip* FindFilmClipAtTime( DmeTime_t localTime );
|
||||
|
||||
// Find first clip that intersects a specific time range
|
||||
CDmeClip* FindFirstFilmClipIntesectingTime( DmeTime_t localStartTime, DmeTime_t localEndTime );
|
||||
|
||||
// Inserts space in a film track for a film clip
|
||||
void InsertSpaceInFilmTrack( DmeTime_t localStartTime, DmeTime_t localEndTime );
|
||||
|
||||
// Singleton solo track (of the same clip type that this track is)
|
||||
CDmeTrack *GetSoloTrack( ) const;
|
||||
void SetSoloTrack( );
|
||||
bool IsSoloTrack() const;
|
||||
static CDmeTrack *GetSoloTrack( DmeClipType_t clipType );
|
||||
static void SetSoloTrack( DmeClipType_t clipType, CDmeTrack *pTrack );
|
||||
|
||||
// Fills all gaps in a film track with slugs
|
||||
void FillAllGapsWithSlugs( const char *pSlugName, DmeTime_t startTime, DmeTime_t endTime );
|
||||
|
||||
private:
|
||||
class CSuppressAutoFixup
|
||||
{
|
||||
public:
|
||||
CSuppressAutoFixup( CDmeTrack *pTrack, int nFlags ) : m_pTrack( pTrack ), m_nFlags( nFlags )
|
||||
{
|
||||
m_pTrack->m_Flags.SetFlag( m_nFlags );
|
||||
}
|
||||
|
||||
~CSuppressAutoFixup()
|
||||
{
|
||||
m_pTrack->m_Flags.ClearFlag( m_nFlags );
|
||||
}
|
||||
|
||||
private:
|
||||
CDmeTrack *m_pTrack;
|
||||
int m_nFlags;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
IS_SORTED = 0x1,
|
||||
SUPPRESS_OVERLAP_FIXUP = 0x2,
|
||||
SUPPRESS_DIRTY_ORDERING = 0x4,
|
||||
};
|
||||
|
||||
CDmaElementArray< CDmeClip > m_Clips;
|
||||
|
||||
CDmaVar< float > m_Volume;
|
||||
CDmaVar< bool > m_Collapsed;
|
||||
CDmaVar< bool > m_Mute;
|
||||
CDmaVar< bool > m_Synched;
|
||||
CDmaVar< int > m_ClipType;
|
||||
|
||||
CUtlFlags< unsigned char > m_Flags;
|
||||
DmElementHandle_t m_hOwner;
|
||||
|
||||
static DmElementHandle_t m_hSoloTrack[DMECLIP_TYPE_COUNT];
|
||||
|
||||
friend class CSuppressAutoFixup;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Indicates whether tracks contain clips that are non-overlapping in time
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeTrack::IsNonoverlapping() const
|
||||
{
|
||||
return m_ClipType == DMECLIP_FILM;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Is this a film track?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeTrack::IsFilmTrack() const
|
||||
{
|
||||
return m_ClipType == DMECLIP_FILM;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// helper methods
|
||||
//-----------------------------------------------------------------------------
|
||||
CDmeTrackGroup *GetParentTrackGroup( CDmeTrack *pTrack );
|
||||
|
||||
#endif // DMETRACK_H
|
||||
249
public/movieobjects/dmetrackgroup.h
Normal file
249
public/movieobjects/dmetrackgroup.h
Normal file
@@ -0,0 +1,249 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETRACKGROUP_H
|
||||
#define DMETRACKGROUP_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/utlflags.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "movieobjects/timeutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeClip;
|
||||
class CDmeFilmClip;
|
||||
class CDmeTrack;
|
||||
enum DmeClipType_t;
|
||||
enum DmeClipSkipFlag_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Default track group name
|
||||
//-----------------------------------------------------------------------------
|
||||
#define DMETRACKGROUP_DEFAULT_NAME "default"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A track group
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTrackGroup : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTrackGroup, CDmElement );
|
||||
|
||||
public:
|
||||
// Max track count
|
||||
void SetMaxTrackCount( int nCount );
|
||||
|
||||
// Owning clip
|
||||
CDmeClip *GetOwnerClip();
|
||||
void SetOwnerClip( CDmeClip *pClip );
|
||||
|
||||
// track helper methods
|
||||
void AddTrack( CDmeTrack *track );
|
||||
CDmeTrack* AddTrack( const char *pTrackName, DmeClipType_t trackType );
|
||||
CDmeTrack* FindOrAddTrack( const char *pTrackName, DmeClipType_t trackType );
|
||||
void RemoveTrack( CDmeTrack *track );
|
||||
void RemoveTrack( const char *pTrackName );
|
||||
void RemoveTrack( int nIndex );
|
||||
const CUtlVector< DmElementHandle_t > &GetTracks( ) const;
|
||||
int GetTrackCount( ) const;
|
||||
CDmeTrack *GetTrack( int nIndex ) const;
|
||||
CDmeTrack *FindTrack( const char *pTrackName ) const;
|
||||
int GetTrackIndex( CDmeTrack *pTrack ) const;
|
||||
|
||||
// Clip helper methods
|
||||
// AddClip/ChangeTrack returns non-NULL if it was successfully added
|
||||
CDmeTrack *AddClip( CDmeClip *pClip, const char *pTrackName );
|
||||
bool RemoveClip( CDmeClip *pClip );
|
||||
CDmeTrack *ChangeTrack( CDmeClip *pClip, const char *pNewTrack );
|
||||
CDmeTrack *FindTrackForClip( CDmeClip *pClip ) const;
|
||||
|
||||
bool FindTrackForClip( CDmeClip *pClip, int *pTrackIndex, int *pClipIndex = NULL ) const;
|
||||
|
||||
// Finding clips at a particular time
|
||||
void FindClipsAtTime( DmeClipType_t clipType, DmeTime_t time, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
void FindClipsIntersectingTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
void FindClipsWithinTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const;
|
||||
|
||||
// Are we a film track group?
|
||||
bool IsFilmTrackGroup();
|
||||
|
||||
// Gets the film track (if this is a film track group)
|
||||
CDmeTrack *GetFilmTrack();
|
||||
|
||||
// Is a particular clip typed able to be added?
|
||||
bool IsSubClipTypeAllowed( DmeClipType_t type );
|
||||
|
||||
// Is this track group visible?
|
||||
void SetVisible( bool bVisible );
|
||||
bool IsVisible() const;
|
||||
|
||||
// Is this track group minimized?
|
||||
void SetMinimized( bool bLocked );
|
||||
bool IsMinimized() const;
|
||||
|
||||
// Track group display size
|
||||
void SetDisplaySize( int nDisplaySize );
|
||||
int GetDisplaySize() const;
|
||||
|
||||
// Creates the film track group [for internal use only]
|
||||
CDmeTrack *CreateFilmTrack();
|
||||
|
||||
// Sort tracks by track type, then alphabetically
|
||||
void SortTracksByType();
|
||||
|
||||
// Removes empty tracks
|
||||
void RemoveEmptyTracks();
|
||||
|
||||
// Muting track groups
|
||||
void SetMute( bool state );
|
||||
bool IsMute( ) const;
|
||||
|
||||
// Volume for track group
|
||||
void SetVolume( float state );
|
||||
float GetVolume() const;
|
||||
|
||||
|
||||
// Returns the flattened clip count
|
||||
int GetSubClipCount() const;
|
||||
void GetSubClips( CDmeClip **ppClips );
|
||||
|
||||
private:
|
||||
CDmaElementArray< CDmeTrack > m_Tracks;
|
||||
CDmaVar<bool> m_bIsVisible;
|
||||
CDmaVar<bool> m_bMinimized;
|
||||
CDmaVar< bool > m_bMute;
|
||||
CDmaVar< float > m_Volume;
|
||||
CDmaVar<int> m_nDisplaySize;
|
||||
|
||||
DmElementHandle_t m_hOwner;
|
||||
int m_nMaxTrackCount;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeTrackGroup::GetTrackCount( ) const
|
||||
{
|
||||
return m_Tracks.Count();
|
||||
}
|
||||
|
||||
inline CDmeTrack *CDmeTrackGroup::GetTrack( int nIndex ) const
|
||||
{
|
||||
return m_Tracks[nIndex];
|
||||
}
|
||||
|
||||
inline const CUtlVector< DmElementHandle_t > &CDmeTrackGroup::GetTracks( ) const
|
||||
{
|
||||
return m_Tracks.Get();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Is this track group visible?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeTrackGroup::SetVisible( bool bVisible )
|
||||
{
|
||||
m_bIsVisible = bVisible;
|
||||
}
|
||||
|
||||
inline bool CDmeTrackGroup::IsVisible() const
|
||||
{
|
||||
return m_bIsVisible;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Is this track group minimized?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeTrackGroup::SetMinimized( bool bMinimized )
|
||||
{
|
||||
m_bMinimized = bMinimized;
|
||||
}
|
||||
|
||||
inline bool CDmeTrackGroup::IsMinimized() const
|
||||
{
|
||||
return m_bMinimized;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Track group display size
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeTrackGroup::SetDisplaySize( int nDisplaySize )
|
||||
{
|
||||
m_nDisplaySize = nDisplaySize;
|
||||
}
|
||||
|
||||
inline int CDmeTrackGroup::GetDisplaySize() const
|
||||
{
|
||||
return m_nDisplaySize;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Iterator macro
|
||||
//-----------------------------------------------------------------------------
|
||||
#define DMETRACKGROUP_FOREACH_CLIP_START( _dmeTrackGroup, _dmeTrack, _dmeClip ) \
|
||||
{ \
|
||||
int _tc = (_dmeTrackGroup)->GetTrackCount(); \
|
||||
for ( int _i = 0; _i < _tc; ++_i ) \
|
||||
{ \
|
||||
CDmeTrack *_dmeTrack = (_dmeTrackGroup)->GetTrack( _i ); \
|
||||
if ( !_dmeTrack ) \
|
||||
continue; \
|
||||
\
|
||||
int _cc = _dmeTrack->GetClipCount(); \
|
||||
for ( int _j = 0; _j < _cc; ++_j ) \
|
||||
{ \
|
||||
CDmeClip *_dmeClip = _dmeTrack->GetClip( _j ); \
|
||||
if ( !_dmeClip ) \
|
||||
continue;
|
||||
|
||||
#define DMETRACKGROUP_FOREACH_CLIP_END( ) \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DMETRACKGROUP_FOREACH_CLIP_TYPE_START( _clipType, _dmeTrackGroup, _dmeTrack, _dmeClip ) \
|
||||
{ \
|
||||
int _tc = (_dmeTrackGroup)->GetTrackCount(); \
|
||||
for ( int _i = 0; _i < _tc; ++_i ) \
|
||||
{ \
|
||||
CDmeTrack *_dmeTrack = (_dmeTrackGroup)->GetTrack( _i ); \
|
||||
if ( !_dmeTrack ) \
|
||||
continue; \
|
||||
\
|
||||
if ( _dmeTrack->GetClipType() != CDmeClipInfo< _clipType >::ClipType() ) \
|
||||
continue; \
|
||||
\
|
||||
int _cc = _dmeTrack->GetClipCount(); \
|
||||
for ( int _j = 0; _j < _cc; ++_j ) \
|
||||
{ \
|
||||
_clipType *_dmeClip = static_cast< _clipType* >( _dmeTrack->GetClip( _j ) ); \
|
||||
if ( !_dmeClip ) \
|
||||
continue;
|
||||
|
||||
#define DMETRACKGROUP_FOREACH_CLIP_TYPE_END( ) \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// helper methods
|
||||
//-----------------------------------------------------------------------------
|
||||
CDmeFilmClip *GetParentClip( CDmeTrackGroup *pTrackGroup );
|
||||
|
||||
#endif // DMETRACKGROUP_H
|
||||
49
public/movieobjects/dmetransform.h
Normal file
49
public/movieobjects/dmetransform.h
Normal file
@@ -0,0 +1,49 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing a transform
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETRANSFORM_H
|
||||
#define DMETRANSFORM_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
struct matrix3x4_t;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a transformation matrix
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTransform, CDmElement );
|
||||
|
||||
public:
|
||||
// FIXME: Replace this with actual methods to do editing
|
||||
// (scale/shear, etc.)
|
||||
void SetTransform( const matrix3x4_t &transform );
|
||||
void GetTransform( matrix3x4_t &transform );
|
||||
|
||||
const Vector &GetPosition() const;
|
||||
void SetPosition( const Vector &vecPosition );
|
||||
const Quaternion &GetOrientation() const;
|
||||
void SetOrientation( const Quaternion &orientation );
|
||||
|
||||
CDmAttribute *GetPositionAttribute();
|
||||
CDmAttribute *GetOrientationAttribute();
|
||||
|
||||
private:
|
||||
CDmaVar<Vector> m_Position;
|
||||
CDmaVar<Quaternion> m_Orientation;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMETRANSFORM_H
|
||||
59
public/movieobjects/dmetransforminput.h
Normal file
59
public/movieobjects/dmetransforminput.h
Normal file
@@ -0,0 +1,59 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// various transform-related inputs - translation, rotation, etc.
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETRANSFORMINPUT_H
|
||||
#define DMETRANSFORMINPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeinput.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// translation input
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTranslationInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTranslationInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector > m_translation;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// rotation input
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeRotationInput : public CDmeInput
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeRotationInput, CDmeInput );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
// these should only be used by the application - not other dme's!
|
||||
void SetRotation( const Quaternion& quat );
|
||||
void SetRotation( const QAngle& qangle );
|
||||
|
||||
protected:
|
||||
CDmaVar< Quaternion > m_orientation;
|
||||
CDmaVar< QAngle > m_angles;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMETRANSFORMINPUT_H
|
||||
47
public/movieobjects/dmetransformlist.h
Normal file
47
public/movieobjects/dmetransformlist.h
Normal file
@@ -0,0 +1,47 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Snapshot of
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef DMETRANSFORMLIST_H
|
||||
#define DMETRANSFORMLIST_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmedag.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a skeletal model
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransformList : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTransformList, CDmElement );
|
||||
|
||||
public:
|
||||
int GetTransformCount() const;
|
||||
CDmeTransform *GetTransform( int nIndex );
|
||||
void SetTransform( int nIndex, const matrix3x4_t& mat );
|
||||
|
||||
CDmaElementArray<CDmeTransform> m_Transforms;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inline methods
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeTransformList::GetTransformCount() const
|
||||
{
|
||||
return m_Transforms.Count();
|
||||
}
|
||||
|
||||
inline CDmeTransform *CDmeTransformList::GetTransform( int nIndex )
|
||||
{
|
||||
return m_Transforms[nIndex];
|
||||
}
|
||||
|
||||
|
||||
#endif // DMETRANSFORMLIST_H
|
||||
53
public/movieobjects/dmetransformoperator.h
Normal file
53
public/movieobjects/dmetransformoperator.h
Normal file
@@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The transform operator class - shortcut to setting transform values from floats
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMETRANSFORMOPERATOR_H
|
||||
#define DMETRANSFORMOPERATOR_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransform;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// A class representing a camera
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeTransformOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeTransformOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
void SetTransform( CDmeTransform *pTransform );
|
||||
const CDmeTransform *GetTransform() const;
|
||||
|
||||
protected:
|
||||
CDmaElement< CDmeTransform > m_transform;
|
||||
CDmaVar< float > m_positionX;
|
||||
CDmaVar< float > m_positionY;
|
||||
CDmaVar< float > m_positionZ;
|
||||
CDmaVar< float > m_orientationX;
|
||||
CDmaVar< float > m_orientationY;
|
||||
CDmaVar< float > m_orientationZ;
|
||||
CDmaVar< float > m_orientationW;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMETRANSFORMOPERATOR_H
|
||||
164
public/movieobjects/dmeunpackoperators.h
Normal file
164
public/movieobjects/dmeunpackoperators.h
Normal file
@@ -0,0 +1,164 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// The morph operator class - sets morph target weights on meshes
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEUNPACKOPERATORS_H
|
||||
#define DMEUNPACKOPERATORS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackColorOperator - extracts floats from a color
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackColorOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackColorOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Color > m_color;
|
||||
CDmaVar< float> m_red;
|
||||
CDmaVar< float> m_green;
|
||||
CDmaVar< float> m_blue;
|
||||
CDmaVar< float> m_alpha;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackVector2Operator - extracts floats from a vector2
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackVector2Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackVector2Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector2D > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackVector3Operator - extracts floats from a vector
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackVector3Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackVector3Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackVector4Operator - extracts floats from a vector4
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackVector4Operator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackVector4Operator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Vector4D > m_vector;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
CDmaVar< float> m_w;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackQAngleOperator - extracts floats from a qangle
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackQAngleOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackQAngleOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< QAngle > m_qangle;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackQuaternionOperator - extracts floats from a quaternion
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackQuaternionOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackQuaternionOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< Quaternion > m_quaternion;
|
||||
CDmaVar< float> m_x;
|
||||
CDmaVar< float> m_y;
|
||||
CDmaVar< float> m_z;
|
||||
CDmaVar< float> m_w;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CDmeUnpackVMatrixOperator - extracts floats from a VMatrix
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeUnpackVMatrixOperator : public CDmeOperator
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeUnpackVMatrixOperator, CDmeOperator );
|
||||
|
||||
public:
|
||||
virtual bool IsDirty(); // ie needs to operate
|
||||
virtual void Operate();
|
||||
|
||||
virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
|
||||
virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );
|
||||
|
||||
protected:
|
||||
CDmaVar< VMatrix > m_vmatrix;
|
||||
CDmaVar< float > m_cells[ 16 ];
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEUNPACKOPERATORS_H
|
||||
337
public/movieobjects/dmevertexdata.h
Normal file
337
public/movieobjects/dmevertexdata.h
Normal file
@@ -0,0 +1,337 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class representing vertex data
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMEVERTEXDATA_H
|
||||
#define DMEVERTEXDATA_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattribute.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
#include "mathlib/vector.h"
|
||||
#include "Color.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class Vector;
|
||||
class Vector4D;
|
||||
class Color;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Used to represent fields
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef int FieldIndex_t;
|
||||
|
||||
|
||||
class CDmeVertexDataBase : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeVertexDataBase, CDmElement );
|
||||
|
||||
public:
|
||||
// NOTE: If you add fields to this, add to g_pStandardFieldNames in dmevertexdata.cpp
|
||||
enum StandardFields_t
|
||||
{
|
||||
FIELD_POSITION,
|
||||
FIELD_NORMAL,
|
||||
FIELD_TANGENT,
|
||||
FIELD_TEXCOORD,
|
||||
FIELD_COLOR,
|
||||
FIELD_JOINT_WEIGHTS,
|
||||
FIELD_JOINT_INDICES,
|
||||
FIELD_BALANCE, // Used by left/right delta states
|
||||
FIELD_MORPH_SPEED, // Used to author morph speeds
|
||||
FIELD_WRINKLE, // Used to author morphed wrinklemaps
|
||||
FIELD_WEIGHT, // Weight is just the different between the base position and the delta position
|
||||
STANDARD_FIELD_COUNT,
|
||||
};
|
||||
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
// Returns the number of joints per vertex
|
||||
int JointCount() const;
|
||||
|
||||
// Vertex accessors
|
||||
int VertexCount() const;
|
||||
const Vector& GetPosition( int nVertexIndex ) const;
|
||||
const Vector& GetNormal( int nVertexIndex ) const;
|
||||
const Vector2D& GetTexCoord( int nVertexIndex ) const;
|
||||
const Vector4D& GetTangent( int nVertexIndex ) const;
|
||||
const Color& GetColor( int nVertexIndex ) const;
|
||||
const float *GetJointWeights( int nVertexIndex ) const;
|
||||
const float *GetJointPositionWeights( int nPositionIndex ) const;
|
||||
const int *GetJointIndices( int nVertexIndex ) const;
|
||||
const int *GetJointPositionIndices( int nPositionIndex ) const;
|
||||
float GetBalance( int nVertexIndex ) const;
|
||||
float GetMorphSpeed( int nVertexIndex ) const;
|
||||
float GetWrinkle( int nVertexIndex ) const;
|
||||
float GetWeight( int nVertexIndex ) const;
|
||||
|
||||
// Returns indices into the various fields
|
||||
int GetPositionIndex( int nVertexIndex ) const;
|
||||
int GetNormalIndex( int nVertexIndex ) const;
|
||||
int GetTangentIndex( int nVertexIndex ) const;
|
||||
int GetTexCoordIndex( int nVertexIndex ) const;
|
||||
int GetColorIndex( int nVertexIndex ) const;
|
||||
int GetBalanceIndex( int nVertexIndex ) const;
|
||||
int GetMorphSpeedIndex( int nVertexIndex ) const;
|
||||
int GetWrinkleIndex( int nVertexIndex ) const;
|
||||
int GetWeightIndex( int nVertexIndex ) const;
|
||||
|
||||
// Creates a new vertex field. NOTE: This cannot be used to create joint weights + indices
|
||||
template< class T >
|
||||
FieldIndex_t CreateField( const char *pFieldName );
|
||||
FieldIndex_t CreateField( const char *pFieldName, DmAttributeType_t type );
|
||||
FieldIndex_t CreateField( StandardFields_t fieldId );
|
||||
|
||||
// Use this to create vertex fields for joint weights + indices
|
||||
void CreateJointWeightsAndIndices( int nJointCount, FieldIndex_t *pJointWeightsField, FieldIndex_t *pJointIndicesField );
|
||||
|
||||
// Returns the field index of a particular field
|
||||
FieldIndex_t FindFieldIndex( const char *pFieldName ) const;
|
||||
FieldIndex_t FindFieldIndex( StandardFields_t nFieldIndex ) const;
|
||||
|
||||
// Adds a new vertex, returns the vertex index
|
||||
// NOTE: This will also add vertex indices for DmeMeshDeltaData
|
||||
int AddVertexData( FieldIndex_t nFieldIndex, int nCount );
|
||||
|
||||
// Sets vertex data
|
||||
void SetVertexData( FieldIndex_t nFieldIndex, int nFirstVertex, int nCount, DmAttributeType_t valueType, const void *pData );
|
||||
void SetVertexIndices( FieldIndex_t nFieldIndex, int nFirstIndex, int nCount, const int *pIndices );
|
||||
|
||||
// Removes all vertex data associated with a particular field
|
||||
void RemoveAllVertexData( FieldIndex_t nFieldIndex );
|
||||
|
||||
// Returns arbitrary vertex + index data
|
||||
CDmAttribute* GetVertexData( FieldIndex_t nFieldIndex );
|
||||
const CDmAttribute* GetVertexData( FieldIndex_t nFieldIndex ) const;
|
||||
CDmAttribute* GetIndexData( FieldIndex_t nFieldIndex );
|
||||
const CDmAttribute* GetIndexData( FieldIndex_t nFieldIndex ) const;
|
||||
|
||||
// Returns well-known vertex data
|
||||
const CUtlVector<Vector> &GetPositionData( ) const;
|
||||
const CUtlVector<Vector> &GetNormalData( ) const;
|
||||
const CUtlVector<Vector4D> &GetTangentData( ) const;
|
||||
const CUtlVector<Vector2D> &GetTextureCoordData( ) const;
|
||||
const CUtlVector<Color> &GetColorData( ) const;
|
||||
const float *GetJointWeightData( int nDataIndex ) const;
|
||||
const int *GetJointIndexData( int nDataIndex ) const;
|
||||
const CUtlVector<float> &GetBalanceData( ) const;
|
||||
const CUtlVector<float> &GetMorphSpeedData( ) const;
|
||||
const CUtlVector<float> &GetWrinkleData( ) const;
|
||||
const CUtlVector<float> &GetWeightData( ) const;
|
||||
|
||||
// Returns well-known index data
|
||||
const CUtlVector<int> &GetVertexIndexData( FieldIndex_t nFieldIndex ) const;
|
||||
const CUtlVector<int> &GetVertexIndexData( StandardFields_t fieldId ) const;
|
||||
|
||||
// Do we have skinning data?
|
||||
bool HasSkinningData() const;
|
||||
|
||||
// Do we need tangent data? (Utility method for applications to know if they should call ComputeDefaultTangentData)
|
||||
bool NeedsTangentData() const;
|
||||
|
||||
// Should we flip the V coordinates?
|
||||
bool IsVCoordinateFlipped() const;
|
||||
void FlipVCoordinate( bool bFlip );
|
||||
|
||||
// Returns an inverse map from vertex data index to vertex index
|
||||
const CUtlVector< int > &FindVertexIndicesFromDataIndex( FieldIndex_t nFieldIndex, int nDataIndex );
|
||||
const CUtlVector< int > &FindVertexIndicesFromDataIndex( StandardFields_t nFieldIndex, int nDataIndex );
|
||||
|
||||
int FieldCount() const;
|
||||
|
||||
const char *FieldName( int i ) const;
|
||||
|
||||
void CopyFrom( CDmeVertexDataBase *pSrc );
|
||||
|
||||
void CopyTo( CDmeVertexDataBase *pDst ) const;
|
||||
|
||||
protected:
|
||||
struct FieldInfo_t
|
||||
{
|
||||
CUtlString m_Name;
|
||||
CDmAttribute *m_pVertexData;
|
||||
CDmAttribute* m_pIndexData;
|
||||
CUtlVector< CUtlVector< int > > m_InverseMap;
|
||||
bool m_bInverseMapDirty;
|
||||
};
|
||||
|
||||
// Derived classes must inherit
|
||||
virtual bool IsVertexDeltaData() const { Assert(0); return false; }
|
||||
|
||||
// Computes the vertex count ( min of the index buffers )
|
||||
void ComputeFieldInfo();
|
||||
|
||||
// Computes the vertex count ( min of the index buffers )
|
||||
void ComputeVertexCount();
|
||||
|
||||
// Updates info for fast lookups for well-known fields
|
||||
void UpdateStandardFieldInfo( int nFieldIndex, const char *pFieldName, DmAttributeType_t attrType );
|
||||
|
||||
// Adds a field to the vertex format
|
||||
void FindOrAddVertexField( const char *pFieldName );
|
||||
|
||||
// Returns the index of a particular field
|
||||
int GetFieldIndex( int nVertexIndex, StandardFields_t nFieldIndex ) const;
|
||||
// List of names of attributes containing vertex data
|
||||
CDmaStringArray m_VertexFormat;
|
||||
|
||||
CDmaVar< int > m_nJointCount;
|
||||
CDmaVar< bool > m_bFlipVCoordinates;
|
||||
CUtlVector< FieldInfo_t > m_FieldInfo;
|
||||
FieldIndex_t m_pStandardFieldIndex[STANDARD_FIELD_COUNT];
|
||||
int m_nVertexCount;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Creates a particular vertex data field + associated index field
|
||||
//-----------------------------------------------------------------------------
|
||||
template< class T >
|
||||
inline FieldIndex_t CDmeVertexDataBase::CreateField( const char *pFieldName )
|
||||
{
|
||||
return CreateField( pFieldName, CDmAttributeInfo< CUtlVector<T> >::AttributeType() );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns a standard field index
|
||||
//-----------------------------------------------------------------------------
|
||||
inline FieldIndex_t CDmeVertexDataBase::FindFieldIndex( StandardFields_t nFieldIndex ) const
|
||||
{
|
||||
return m_pStandardFieldIndex[ nFieldIndex ];
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Vertex field accessors
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeVertexDataBase::VertexCount() const
|
||||
{
|
||||
return m_nVertexCount;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns the number of joints per vertex
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeVertexDataBase::JointCount() const
|
||||
{
|
||||
return m_nJointCount;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Should we flip the V coordinates?
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeVertexDataBase::IsVCoordinateFlipped() const
|
||||
{
|
||||
return m_bFlipVCoordinates;
|
||||
}
|
||||
|
||||
inline void CDmeVertexDataBase::FlipVCoordinate( bool bFlip )
|
||||
{
|
||||
m_bFlipVCoordinates = bFlip;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns arbitrary vertex data
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmAttribute* CDmeVertexDataBase::GetVertexData( FieldIndex_t nFieldIndex )
|
||||
{
|
||||
return m_FieldInfo[ nFieldIndex ].m_pVertexData;
|
||||
}
|
||||
|
||||
inline const CDmAttribute* CDmeVertexDataBase::GetVertexData( FieldIndex_t nFieldIndex ) const
|
||||
{
|
||||
return m_FieldInfo[ nFieldIndex ].m_pVertexData;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns arbitrary index data
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmAttribute* CDmeVertexDataBase::GetIndexData( FieldIndex_t nFieldIndex )
|
||||
{
|
||||
return m_FieldInfo[ nFieldIndex ].m_pIndexData;
|
||||
}
|
||||
|
||||
inline const CDmAttribute* CDmeVertexDataBase::GetIndexData( FieldIndex_t nFieldIndex ) const
|
||||
{
|
||||
return m_FieldInfo[ nFieldIndex ].m_pIndexData;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utility method for getting at various vertex field indices
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeVertexDataBase::GetFieldIndex( int nVertexIndex, StandardFields_t nFieldId ) const
|
||||
{
|
||||
Assert( nVertexIndex < m_nVertexCount );
|
||||
FieldIndex_t nFieldIndex = m_pStandardFieldIndex[nFieldId];
|
||||
if ( nFieldIndex < 0 )
|
||||
return -1;
|
||||
|
||||
CDmrArrayConst<int> indices( GetIndexData( nFieldIndex ) );
|
||||
return indices[ nVertexIndex ];
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Vertex Data for base states
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeVertexData : public CDmeVertexDataBase
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeVertexData, CDmeVertexDataBase );
|
||||
|
||||
public:
|
||||
// Adds a new vertex; creates a new entry in all vertex data fields
|
||||
int AddVertexIndices( int nCount );
|
||||
|
||||
private:
|
||||
virtual bool IsVertexDeltaData() const { return false; }
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Vertex Data for delta states
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeVertexDeltaData : public CDmeVertexDataBase
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeVertexDeltaData, CDmeVertexDataBase );
|
||||
|
||||
public:
|
||||
// Computes wrinkle data from position deltas
|
||||
// NOTE: Pass in negative scales to get 'compression', positive to get 'expansion'
|
||||
void GenerateWrinkleDelta( CDmeVertexData *pBindState, float flScale, bool bOverwrite );
|
||||
|
||||
// Computes a float map which is the distance between the base and delta position
|
||||
// The maximum distance any vertex is moved is returned
|
||||
float GenerateWeightDelta( CDmeVertexData *pBindState );
|
||||
|
||||
CDmaVar< bool > m_bCorrected;
|
||||
|
||||
private:
|
||||
virtual bool IsVertexDeltaData() const { return true; }
|
||||
|
||||
// Computes max positional delta length
|
||||
float ComputeMaxDeflection( );
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEVERTEXDATA_H
|
||||
126
public/movieobjects/dmmeshcomp.h
Normal file
126
public/movieobjects/dmmeshcomp.h
Normal file
@@ -0,0 +1,126 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// A class for computing things with CDmeMesh data
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMMESHCOMP_H
|
||||
#define DMMESHCOMP_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
// Valve includes
|
||||
#include "mathlib/mathlib.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/utllinkedlist.h"
|
||||
|
||||
|
||||
// Forward declarations
|
||||
class CDmeMesh;
|
||||
class CDmeVertexData;
|
||||
|
||||
|
||||
//=============================================================================
|
||||
// TODO: This works in the local space of the mesh... add option to transform
|
||||
// the positions into world space
|
||||
//=============================================================================
|
||||
class CDmMeshComp
|
||||
{
|
||||
public:
|
||||
CDmMeshComp( CDmeMesh *pMesh, CDmeVertexData *pPassedBase = NULL );
|
||||
|
||||
~CDmMeshComp();
|
||||
|
||||
class CVert;
|
||||
class CEdge;
|
||||
|
||||
class CVert
|
||||
{
|
||||
public:
|
||||
CVert( int nPositionIndex, const CUtlVector< int > *pVertexIndices, const Vector *pPosition );
|
||||
|
||||
CVert( const CVert &src );
|
||||
|
||||
int PositionIndex() const;
|
||||
|
||||
const Vector *Position() const;
|
||||
|
||||
const CUtlVector< int > *VertexIndices() const;
|
||||
|
||||
bool operator==( const CVert &rhs ) const;
|
||||
|
||||
protected:
|
||||
friend class CDmMeshComp;
|
||||
|
||||
int m_positionIndex; // Index in the position data
|
||||
const CUtlVector< int > *m_pVertexIndices; // Pointer to a list of the vertex indices for this vertex
|
||||
const Vector *m_pPosition;
|
||||
CUtlVector< CEdge * > m_edges; // An array of pointers to the edges containing this vertex
|
||||
|
||||
private:
|
||||
CVert(); // Not used
|
||||
};
|
||||
|
||||
class CEdge
|
||||
{
|
||||
public:
|
||||
CEdge();
|
||||
|
||||
int GetVertPositionIndex( int edgeRelativeVertexIndex ) const;
|
||||
|
||||
CVert *GetVert( int edgeRelativeVertexIndex ) const;
|
||||
|
||||
bool IsBorderEdge() const { return m_faceCount == 1; }
|
||||
|
||||
bool ConnectedTo( const CEdge *pEdge ) const { return m_pVert0 == pEdge->m_pVert0 || m_pVert0 == pEdge->m_pVert1 || m_pVert1 == pEdge->m_pVert0 || m_pVert1 == pEdge->m_pVert1; }
|
||||
|
||||
Vector EdgeVector() const;
|
||||
|
||||
// Returns true if the edge starts and stops at the same point in local space
|
||||
bool operator==( const CEdge &rhs ) const;
|
||||
|
||||
protected:
|
||||
friend class CDmMeshComp;
|
||||
|
||||
CVert *m_pVert0;
|
||||
CVert *m_pVert1;
|
||||
int m_faceCount;
|
||||
};
|
||||
|
||||
class CFace
|
||||
{
|
||||
public:
|
||||
protected:
|
||||
friend class CDmMeshComp;
|
||||
|
||||
CUtlVector< CVert * > m_verts;
|
||||
CUtlVector< CEdge * > m_edges;
|
||||
CUtlVector< bool > m_edgeReverseMap;
|
||||
};
|
||||
|
||||
CDmeVertexData *BaseState() { return m_pBase; }
|
||||
|
||||
CEdge *FindOrCreateEdge( int vIndex0, int vIndex1, bool *pReverse = NULL );
|
||||
|
||||
CEdge *FindEdge( int vIndex0, int vIndex1, bool *pReverse = NULL );
|
||||
|
||||
CFace *CreateFace( const CUtlVector< CVert * > &verts, const CUtlVector< CEdge * > &edges, const CUtlVector< bool > &edgeReverseMap );
|
||||
|
||||
int FindFacesWithVert( int vIndex, CUtlVector< CFace * > &faces );
|
||||
|
||||
int FindNeighbouringVerts( int vIndex, CUtlVector< CVert * > &verts );
|
||||
|
||||
int GetBorderEdges( CUtlVector< CUtlVector< CEdge * > > &borderEdges );
|
||||
|
||||
CDmeMesh *m_pMesh;
|
||||
CDmeVertexData *m_pBase;
|
||||
CUtlVector< CVert * > m_verts;
|
||||
CUtlVector< CEdge * > m_edges;
|
||||
CUtlFixedLinkedList< CFace > m_faces;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMEMESHCOMP_H
|
||||
199
public/movieobjects/dmmeshutils.h
Normal file
199
public/movieobjects/dmmeshutils.h
Normal file
@@ -0,0 +1,199 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Mesh Manipulation Utilities
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
|
||||
#ifndef DMMESHUTILS_H
|
||||
#define DMMESHUTILS_H
|
||||
|
||||
#if defined( _WIN32 )
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmevertexdata.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "tier1/UtlStringMap.h"
|
||||
#include "tier1/utlvector.h"
|
||||
|
||||
class CDmeMesh;
|
||||
class CDmMeshComp::CEdge;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Mesh Utility function class (more like a namespace)
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmMeshUtils
|
||||
{
|
||||
public:
|
||||
|
||||
static bool RemoveLargeAxisAlignedPlanarFaces( CDmeMesh *pMesh );
|
||||
|
||||
static bool RemoveFacesWithMaterial( CDmeMesh *pMesh, const char *pMaterialName );
|
||||
|
||||
static bool RemoveFacesWithMoreThanNVerts( CDmeMesh *pMesh, const int nVertexCount );
|
||||
|
||||
enum Axis_t
|
||||
{
|
||||
kXAxis,
|
||||
kYAxis,
|
||||
kZAxis
|
||||
};
|
||||
|
||||
static bool Mirror( CDmeMesh *pMesh, int axis = kXAxis );
|
||||
|
||||
static bool RemapMaterial( CDmeMesh *pMesh, const CUtlString &src, const CUtlString &dst );
|
||||
|
||||
static bool RemapMaterial( CDmeMesh *pMesh, const int nMaterialIndex, const CUtlString &dst );
|
||||
|
||||
// Merge the specified mesh onto the first mesh under pRoot that fits it
|
||||
static bool Merge( CDmeMesh *pSrcMesh, CDmElement *pRoot );
|
||||
|
||||
static bool Merge( CDmeMesh *pSrcMesh, CDmeMesh *pDstMesh, int nSkinningJointIndex );
|
||||
|
||||
static bool CreateDeltasFromPresets( CDmeMesh *pMesh, CDmeVertexData *pPassedDst, const CUtlStringMap< CUtlString > &presetMap, bool bPurge, const CUtlVector< CUtlString > *pPurgeAllButThese = NULL );
|
||||
|
||||
static bool PurgeUnusedDeltas( CDmeMesh *pMesh );
|
||||
|
||||
enum WrinkleOp
|
||||
{
|
||||
kReplace,
|
||||
kAdd
|
||||
};
|
||||
|
||||
static bool CreateWrinkleDeltaFromBaseState( CDmeVertexDeltaData *pDelta, float flScale = 1.0f, WrinkleOp wrinkleOp = kReplace, CDmeMesh *pMesh = NULL, CDmeVertexData *pBind = NULL, CDmeVertexData *pCurrent = NULL );
|
||||
|
||||
static int FindMergeSocket(
|
||||
const CUtlVector< CUtlVector< CDmMeshComp::CEdge * > > &srcBorderEdgesList,
|
||||
CDmeMesh *pDstMesh );
|
||||
|
||||
static bool Merge( CDmMeshComp &srcComp, const CUtlVector< CDmMeshComp::CEdge * > &edgeList, CDmeMesh *pDstMesh );
|
||||
|
||||
protected:
|
||||
static const int *BuildDataMirrorMap( CDmeVertexData *pBase, int axis, CDmeVertexData::StandardFields_t standardField, CUtlVector< int > &dataMirrorMap );
|
||||
|
||||
static bool MirrorVertices( CDmeMesh *pMesh, CDmeVertexData *pBase, int axis, CUtlVector< int > &mirrorMap );
|
||||
|
||||
static bool MirrorVertices( CDmeVertexData *pBase, int axis, int nOldVertexCount, int nMirrorCount, const CUtlVector< int > &mirrorMap, const CUtlVector< int > &posMirrorMap, const CUtlVector< int > &normalMirrorMap, const CUtlVector< int > &uvMirrorMap );
|
||||
|
||||
static void MirrorVertices( CDmeVertexData *pBase, FieldIndex_t fieldIndex, int nOldVertexCount, int nMirrorCount, const CUtlVector< int > &baseIndices, const CUtlVector< int > &mirrorMap );
|
||||
|
||||
static bool MirrorDelta( CDmeVertexDeltaData *pDelta, int axis, const CUtlVector< int > &posMirrorMap, const CUtlVector< int > &normalMirrorMap, const CUtlVector< int > &uvMirrorMap );
|
||||
|
||||
static bool PurgeUnusedData( CDmeMesh *pMesh );
|
||||
|
||||
static void CreateDeltasFromPresetGroup( CDmePresetGroup *pPresetGroup, CDmeCombinationOperator * pComboOp, const CUtlVector< CUtlString > * pPurgeAllButThese, CDmeMesh * pMesh, CDmeVertexData * pDst, CUtlStringMap< CUtlString > &conflictingNames, CUtlStringMap< CDmePreset * > &presetMap );
|
||||
|
||||
static void PurgeUnreferencedDeltas( CDmeMesh *pMesh, CUtlStringMap< CDmePreset * > &presetMap, const CUtlVector< CUtlString > *pPurgeAllButThese, CDmeCombinationOperator *pComboOp );
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Iterate over all of the faces in a mesh. Use it like this:
|
||||
//
|
||||
// for ( CDmMeshFaceIt fIt( pMesh ); !fIt.IsDone(); fIt.Next() )
|
||||
// {
|
||||
// }
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmMeshFaceIt
|
||||
{
|
||||
public:
|
||||
// Constructs a new face iterator for the specified mesh
|
||||
CDmMeshFaceIt( const CDmeMesh *pMesh, const CDmeVertexData *pVertexData = NULL );
|
||||
|
||||
// Resets the iterator to the start of the specified mesh or for another iteration of the
|
||||
// current mesh if the specified mesh is NULL
|
||||
bool Reset( const CDmeMesh *pMesh = NULL, const CDmeVertexData *pVertexData = NULL );
|
||||
|
||||
// Returns the total number of faces in the mesh
|
||||
int Count() const;
|
||||
|
||||
// The number of vertices in the face
|
||||
int VertexCount() const;
|
||||
|
||||
// Is the iterator at the end of the mesh?
|
||||
bool IsDone() const;
|
||||
|
||||
// Move the iterator to the next face
|
||||
bool Next();
|
||||
|
||||
// The face index of the current face in the range [ 0, Count() ]
|
||||
int Index() const;
|
||||
|
||||
// Returns opposite sense of IsDone(), i.e. !IsDone() so true if iterator still has stuff to do
|
||||
operator bool() const { return !IsDone(); }
|
||||
|
||||
// Prefix ++ which just calls Next() for syntax sugar
|
||||
CDmMeshFaceIt &operator ++() { Next(); return *this; }
|
||||
|
||||
// Postfix ++ which just calls Next() for syntax sugar
|
||||
CDmMeshFaceIt operator ++( int ) { const CDmMeshFaceIt thisCopy( *this ); ++( *this ); return thisCopy; }
|
||||
|
||||
// Gets the vertex indices for the vertices of this face
|
||||
bool GetVertexIndices( int *pIndices, int nIndices ) const;
|
||||
|
||||
// Gets the vertex indices for the vertices of this face
|
||||
bool GetVertexIndices( CUtlVector< int > &vertexIndices ) const;
|
||||
|
||||
// Gets the mesh relative vertex index given the face relative vertex index
|
||||
int GetVertexIndex( int nFaceRelativeVertexIndex ) const;
|
||||
|
||||
// Gets the specified vertex data for the vertices of this face (if it exists) and the type matches
|
||||
template < class T_t >
|
||||
bool GetVertexData(
|
||||
CUtlVector< T_t > &vertexData,
|
||||
CDmeVertexDataBase::StandardFields_t nStandardField,
|
||||
CDmeVertexData *pPassedBase = NULL ) const;
|
||||
|
||||
protected:
|
||||
bool SetFaceSet();
|
||||
|
||||
const CDmeMesh *m_pMesh; // Current Mesh
|
||||
const CDmeVertexData *m_pVertexData; // Current Vertex Data
|
||||
|
||||
int m_nFaceSetCount; // Number of face sets in current mesh: m_pMesh->FaceSetCount();
|
||||
int m_nFaceSetIndex; // Index of current face set: [ 0, m_nFaceSetCount ]
|
||||
|
||||
const CDmeFaceSet *m_pFaceSet; // Current face set: m_pMesh->GetFaceSet( m_nFaceSetIndex )
|
||||
|
||||
int m_nFaceSetIndexCount; // Number of indices in current face set: m_pFaceSet->NumIndices();
|
||||
int m_nFaceSetIndexIndex; // Index of current face set's indices: [ 0, m_nFaceSetIndexCount ]
|
||||
|
||||
int m_nFaceCount; // Number of faces in current mesh
|
||||
int m_nFaceIndex; // The current face in the iteration [ 0, m_nFaceCount ]
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
template < class T_t >
|
||||
inline bool CDmMeshFaceIt::GetVertexData(
|
||||
CUtlVector< T_t > &vertexData,
|
||||
CDmeVertexDataBase::StandardFields_t nStandardField,
|
||||
CDmeVertexData *pPassedBase /* = NULL */ ) const
|
||||
{
|
||||
vertexData.RemoveAll();
|
||||
|
||||
if ( IsDone() )
|
||||
return false;
|
||||
|
||||
CDmeVertexData *pBase = pPassedBase ? pPassedBase : m_pMesh->GetCurrentBaseState();
|
||||
if ( !pBase )
|
||||
return false;
|
||||
|
||||
const FieldIndex_t nFieldIndex = pBase->FindFieldIndex( nStandardField );
|
||||
if ( nFieldIndex < 0 )
|
||||
return false;
|
||||
|
||||
CDmAttribute *pDataAttr = pBase->GetVertexData( nFieldIndex );
|
||||
if ( pDataAttr->GetType() != CDmAttributeInfo< CUtlVector< T_t > >().AttributeType() )
|
||||
return false;
|
||||
|
||||
const CDmrArrayConst< T_t > data( pDataAttr );
|
||||
const CUtlVector< int > &indices( pBase->GetVertexIndexData( nFieldIndex ) );
|
||||
}
|
||||
|
||||
|
||||
#endif // DMMESHUTILS_H
|
||||
114
public/movieobjects/dmobjserializer.h
Normal file
114
public/movieobjects/dmobjserializer.h
Normal file
@@ -0,0 +1,114 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Serialize and Unserialize Wavefront OBJ <-> DME Data
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMOBJSERIALIZER_H
|
||||
#define DMOBJSERIALIZER_H
|
||||
|
||||
#if defined( _WIN32 )
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "datamodel/idatamodel.h"
|
||||
#include "tier1/utlbuffer.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/UtlStringMap.h"
|
||||
|
||||
class CDmeMesh;
|
||||
class CDmeDag;
|
||||
class CDmeVertexDeltaData;
|
||||
class CDmeCombinationOperator;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Serialization class for OBJ files
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmObjSerializer : public IDmSerializer
|
||||
{
|
||||
public:
|
||||
// Inherited from IDMSerializer
|
||||
virtual const char *GetName() const { return "obj"; }
|
||||
virtual const char *GetDescription() const { return "Wavefront OBJ"; }
|
||||
virtual bool IsBinaryFormat() const { return false; }
|
||||
virtual bool StoresVersionInFile() const { return false; }
|
||||
virtual int GetCurrentVersion() const { return 0; } // doesn't store a version
|
||||
virtual bool Serialize( CUtlBuffer &buf, CDmElement *pRoot );
|
||||
virtual bool Unserialize( CUtlBuffer &buf, const char *pEncodingName, int nEncodingVersion,
|
||||
const char *pSourceFormatName, int nSourceFormatVersion,
|
||||
DmFileId_t fileid, DmConflictResolution_t idConflictResolution, CDmElement **ppRoot );
|
||||
virtual const char *GetImportedFormat() const { return NULL; }
|
||||
virtual int GetImportedVersion() const { return 1; }
|
||||
|
||||
CDmElement *ReadOBJ( const char *pFilename, CDmeMesh **ppCreatedMesh = NULL, bool bLoadAllDeltas = true, bool bAbsolute = true );
|
||||
|
||||
bool WriteOBJ( const char *pFilename, CDmElement *pRoot, bool bWriteDeltas, const char *pDeltaName = NULL, bool absolute = true );
|
||||
|
||||
void MeshToObj( CUtlBuffer &b, const matrix3x4_t &parentWorldMatrix, CDmeMesh *pMesh, const char *pDeltaName = NULL, bool absolute = true );
|
||||
|
||||
CDmeVertexDeltaData *GetDelta( const char *pDeltaName, bool bAbsolute );
|
||||
|
||||
private:
|
||||
CDmElement *ReadOBJ(
|
||||
CUtlBuffer &buf,
|
||||
DmFileId_t dmFileId,
|
||||
const char *pName,
|
||||
const char *pFilename = NULL,
|
||||
CDmeMesh *pBaseMesh = NULL,
|
||||
CDmeMesh **ppCreatedMesh = NULL,
|
||||
bool bAbsolute = true );
|
||||
|
||||
static int OutputVectors( CUtlBuffer &b, const char *pPrefix, const CUtlVector< Vector > &vData, const matrix3x4_t &matrix );
|
||||
|
||||
static int OutputVectors( CUtlBuffer &b, const char *pPrefix, const CUtlVector< Vector2D > &vData );
|
||||
|
||||
static void DeltaToObj( CUtlBuffer &b, const matrix3x4_t &parentWorldMatrix, CDmeMesh *pMesh, const char *pDeltaName = NULL );
|
||||
|
||||
void ParseMtlLib( CUtlBuffer &buf );
|
||||
|
||||
const char *FindMtlEntry( const char *pTgaName );
|
||||
|
||||
static bool ParseVertex( CUtlBuffer& bufParse, characterset_t &breakSet, int &v, int &t, int &n );
|
||||
|
||||
static const char *SkipSpace( const char *pBuf );
|
||||
|
||||
void DagToObj( CUtlBuffer &b, const matrix3x4_t &parentWorldMatrix, CDmeDag *pDag, const char *pDeltaName = NULL, bool absolute = true );
|
||||
|
||||
static void FindDeltaMeshes( CDmeDag *pDag, CUtlVector< CDmeMesh * > &meshes );
|
||||
|
||||
bool LoadDependentDeltas( const char *pDeltaName );
|
||||
|
||||
struct MtlInfo_t
|
||||
{
|
||||
CUtlString m_MtlName;
|
||||
CUtlString m_TgaName;
|
||||
};
|
||||
|
||||
CUtlVector< MtlInfo_t > m_mtlLib;
|
||||
|
||||
CUtlString m_objDirectory;
|
||||
|
||||
struct DeltaInfo_t
|
||||
{
|
||||
DeltaInfo_t()
|
||||
: m_pComboOp( NULL )
|
||||
, m_pMesh( NULL )
|
||||
, m_pDeltaData( NULL )
|
||||
{}
|
||||
|
||||
CUtlString m_filename;
|
||||
CDmeMesh *m_pMesh;
|
||||
CDmeCombinationOperator *m_pComboOp;
|
||||
CDmeVertexDeltaData *m_pDeltaData;
|
||||
};
|
||||
|
||||
CUtlStringMap< DeltaInfo_t > m_deltas;
|
||||
|
||||
int m_nPositionOffset;
|
||||
int m_nTextureOffset;
|
||||
int m_nNormalOffset;
|
||||
};
|
||||
|
||||
#endif // DMOBJSERIALIZER_H
|
||||
188
public/movieobjects/dmsmdserializer.h
Normal file
188
public/movieobjects/dmsmdserializer.h
Normal file
@@ -0,0 +1,188 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Read SMD and create DMX data
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
|
||||
#ifndef DMSMDSERIALIZER_H
|
||||
#define DMSMDSERIALIZER_H
|
||||
|
||||
|
||||
#if defined( _WIN32 )
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
// Valve includes
|
||||
#include "datamodel/idatamodel.h"
|
||||
#include "tier1/utlbuffer.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "tier1/utlvector.h"
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeDag;
|
||||
class CDmeMesh;
|
||||
class CPolygonData;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Serialization class for SMD files
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmSmdSerializer : public IDmSerializer
|
||||
{
|
||||
public:
|
||||
enum Axis_t
|
||||
{
|
||||
X_AXIS = 0,
|
||||
Y_AXIS = 1,
|
||||
Z_AXIS = 2
|
||||
};
|
||||
|
||||
CDmSmdSerializer()
|
||||
: m_bOptAutoStripPrefix( false )
|
||||
, m_bOptImportSkeleton( true )
|
||||
, m_bOptAnimation( false )
|
||||
, m_flFrameRate( 30.0f )
|
||||
{
|
||||
SetUpAxis( Z_AXIS );
|
||||
}
|
||||
|
||||
// Inherited from IDMSerializer
|
||||
virtual const char *GetName() const { return "smd"; }
|
||||
virtual const char *GetDescription() const { return "VALVe SMD"; }
|
||||
virtual bool IsBinaryFormat() const { return false; }
|
||||
virtual bool StoresVersionInFile() const { return true; }
|
||||
virtual int GetCurrentVersion() const { return 1; }
|
||||
virtual bool Serialize( CUtlBuffer &buf, CDmElement *pRoot ) { return false; } // No DMX -> SMD support
|
||||
|
||||
virtual bool Unserialize(
|
||||
CUtlBuffer &utlBuf,
|
||||
const char *pszEncodingName,
|
||||
int nEncodingVersion,
|
||||
const char *pszSourceFormatName,
|
||||
int nSourceFormatVersion,
|
||||
DmFileId_t nDmFileId,
|
||||
DmConflictResolution_t nDmConflictResolution,
|
||||
CDmElement **ppDmRoot );
|
||||
|
||||
// Methods used for importing (only should return non-NULL for serializers that return false from StoresVersionInFile)
|
||||
virtual const char *GetImportedFormat() const { return NULL; }
|
||||
virtual int GetImportedVersion() const { return 1; }
|
||||
|
||||
// CDmSmdSerializer
|
||||
CDmElement *ReadSMD( const char *pszFilename, CDmeMesh **ppDmeMeshCreated = NULL );
|
||||
|
||||
void SetUpAxis( Axis_t nUpAxis );
|
||||
Axis_t GetUpAxis() const { return m_nUpAxis; }
|
||||
|
||||
void SetIsAnimation( bool bOptAnimation ) { m_bOptAnimation = bOptAnimation; }
|
||||
bool IsReadAnimation() const { return m_bOptAnimation; }
|
||||
|
||||
void SetFrameRate( float flFrameRate ) { m_flFrameRate = MAX( 0.1f, flFrameRate ); } // Don't allow 0 or negative frame rate
|
||||
float GetFrameRate() const { return m_flFrameRate; }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
struct SmdJoint_t
|
||||
{
|
||||
int m_nId; // The id parsed from the SMD file
|
||||
int m_nActualId; // The actual node id which is created after sorting and creating all joints in order with no gaps in numbering, corresponds to joitnIndex in DmeModel
|
||||
CUtlString m_sName;
|
||||
int m_nParentId;
|
||||
int m_nLineNumber;
|
||||
CDmeDag *m_pDmeDag;
|
||||
|
||||
SmdJoint_t()
|
||||
: m_nId( -1 )
|
||||
, m_nActualId( -1 )
|
||||
, m_nParentId( -1 )
|
||||
, m_nLineNumber( -1 )
|
||||
, m_pDmeDag( NULL )
|
||||
{}
|
||||
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef CUtlMap< int, SmdJoint_t > SmdJointMap_t;
|
||||
|
||||
protected:
|
||||
void ParserGetNodeName( const char *pszBuf, CUtlString &sName ) const;
|
||||
|
||||
bool ParserHandleSkeletonLine(
|
||||
const char *pszBuf,
|
||||
CUtlString &sName,
|
||||
int &nId,
|
||||
int &nParentId ) const;
|
||||
|
||||
CDmElement *CDmSmdSerializer::ReadSMD(
|
||||
CUtlBuffer &inUtlBuf,
|
||||
DmFileId_t nDmFileId,
|
||||
const char *pszFilename,
|
||||
CDmeMesh **ppDmeMeshCreated );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CNodeData
|
||||
{
|
||||
public:
|
||||
CNodeData()
|
||||
: m_nParentIndex( -1 )
|
||||
, m_bSkinned( false )
|
||||
, m_nInfluenceIndex( 0 )
|
||||
, m_pDmeDag( NULL )
|
||||
{
|
||||
}
|
||||
|
||||
bool Valid() const
|
||||
{
|
||||
return m_pDmeDag != NULL;
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
m_pDmeDag = NULL;
|
||||
}
|
||||
|
||||
int m_nParentIndex;
|
||||
bool m_bSkinned;
|
||||
int m_nInfluenceIndex;
|
||||
CDmeDag *m_pDmeDag;
|
||||
|
||||
CUtlVector< Vector > m_positions;
|
||||
};
|
||||
|
||||
void FixNodeName( CUtlString &sName ) const;
|
||||
|
||||
void ParserSetJoint(
|
||||
const SmdJointMap_t &smdJointMap,
|
||||
int nFrame, int nId,
|
||||
const Vector &vPosition, const RadianEuler &eRadianEulerXYZ,
|
||||
const char *pszFilename, int nLineNumber );
|
||||
|
||||
Axis_t m_nUpAxis; // 0 == X, 1 == Y, 2 == Z
|
||||
matrix3x4_t m_mAdj; // Matrix to adjust for SMD source orientation to DMX Y up
|
||||
matrix3x4_t m_mAdjNormal; // Matrix to adjust normals, inverse transpose of m_mAdj
|
||||
|
||||
public:
|
||||
bool m_bOptImportSkeleton;
|
||||
bool m_bOptAutoStripPrefix;
|
||||
bool m_bOptAnimation;
|
||||
float m_flFrameRate;
|
||||
CUtlString m_sNodeDelPrefix;
|
||||
CUtlString m_sNodeAddPrefix;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // DMSMDSERIALIZER_H
|
||||
22
public/movieobjects/dmx_to_vcd.h
Normal file
22
public/movieobjects/dmx_to_vcd.h
Normal file
@@ -0,0 +1,22 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMX_TO_VCD_H
|
||||
#define DMX_TO_VCD_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CDmeFilmClip;
|
||||
class CChoreoScene;
|
||||
|
||||
bool ConvertSceneToDmx( CChoreoScene *scene, CDmeFilmClip *dmx );
|
||||
bool ConvertDmxToScene( CDmeFilmClip *dmx, CChoreoScene *scene );
|
||||
|
||||
#define VCD_SCENE_RAMP_TRACK_GROUP_NAME "scene_ramp"
|
||||
#define VCD_GLOBAL_EVENTS_TRACK_GROUP_NAME "global_events"
|
||||
|
||||
#endif // DMX_TO_VCD_H
|
||||
75
public/movieobjects/idmemakefileutils.h
Normal file
75
public/movieobjects/idmemakefileutils.h
Normal file
@@ -0,0 +1,75 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Interface for makefiles to build differently depending on where they are run from
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef IDMEMAKEFILEUTILS_H
|
||||
#define IDMEMAKEFILEUTILS_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "appframework/IAppSystem.h"
|
||||
#include "vstdlib/iprocessutils.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmElement;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Interface version
|
||||
//-----------------------------------------------------------------------------
|
||||
#define DMEMAKEFILE_UTILS_INTERFACE_VERSION "VDmeMakeFileUtils001"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Interface for makefiles to build differently depending on where they are run from
|
||||
//-----------------------------------------------------------------------------
|
||||
enum CompilationState_t
|
||||
{
|
||||
COMPILATION_SUCCESSFUL = 0,
|
||||
COMPILATION_NOT_COMPLETE,
|
||||
COMPILATION_FAILED,
|
||||
};
|
||||
|
||||
abstract_class IDmeMakefileUtils : public IAppSystem
|
||||
{
|
||||
public:
|
||||
// Methods related to compilation
|
||||
virtual void PerformCompile( CDmElement *pElement, bool bBuildAllDependencies ) = 0;
|
||||
|
||||
// Are we in the middle of compiling something?
|
||||
virtual bool IsCurrentlyCompiling( ) = 0;
|
||||
|
||||
// Returns the size of the buffer to pass into UpdateCompilation()
|
||||
virtual int GetCompileOutputSize() = 0;
|
||||
|
||||
// Updates the compilation
|
||||
virtual CompilationState_t UpdateCompilation( char *pOutputBuf, int nBufLen ) = 0;
|
||||
|
||||
// Aborts the compilation
|
||||
virtual void AbortCurrentCompilation() = 0;
|
||||
|
||||
// Opens an external editor for this element
|
||||
virtual void PerformOpenEditor( CDmElement *pElement ) = 0;
|
||||
|
||||
// Returns the exit code of the failed compilation (if COMPILATION_FAILED occurred)
|
||||
virtual int GetExitCode() = 0;
|
||||
|
||||
// Somewhere in here, we need a method of populating choice lists
|
||||
// for things like choosing vstInfoNodes to export for DCC makefiles
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Default implementation
|
||||
//-----------------------------------------------------------------------------
|
||||
IDmeMakefileUtils* GetDefaultDmeMakefileUtils();
|
||||
|
||||
|
||||
#endif // IDMEMAKEFILEUTILS_H
|
||||
33
public/movieobjects/importintovcd.h
Normal file
33
public/movieobjects/importintovcd.h
Normal file
@@ -0,0 +1,33 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef IMPORTINTOVCD_H
|
||||
#define IMPORTINTOVCD_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CChoreoScene;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Compression info
|
||||
//-----------------------------------------------------------------------------
|
||||
struct ImportVCDInfo_t
|
||||
{
|
||||
float m_flSimplificationThreshhold;
|
||||
int m_nInterpolationType;
|
||||
bool m_bIgnorePhonemes;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Main entry point for importing a .fac file into a .vcd file
|
||||
//-----------------------------------------------------------------------------
|
||||
bool ImportLogsIntoVCD( const char *pFacFullPath, CChoreoScene *pChoreoScene, const ImportVCDInfo_t& info );
|
||||
bool ImportLogsIntoVCD( const char *pFacFullPath, const char *pVCDInPath, const char *pVCDOutPath, const ImportVCDInfo_t& info );
|
||||
|
||||
|
||||
#endif // IMPORTINTOVCD_H
|
||||
60
public/movieobjects/movieobjects.cpp
Normal file
60
public/movieobjects/movieobjects.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: See notes below
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#include "movieobjects/movieobjects.h"
|
||||
|
||||
#include "movieobjects/movieobjects_compiletools.cpp"
|
||||
|
||||
// YOU MUST INCLUDE THIS FILE INTO ANY PROJECT WHICH USES THE movieobjects.lib FILE
|
||||
// This hack causes the class factories for the element types to be imported into the compiled code...
|
||||
|
||||
// Movie types
|
||||
USING_ELEMENT_FACTORY( DmeCamera );
|
||||
USING_ELEMENT_FACTORY( DmeSoundClip );
|
||||
USING_ELEMENT_FACTORY( DmeFilmClip );
|
||||
USING_ELEMENT_FACTORY( DmeMDL );
|
||||
USING_ELEMENT_FACTORY( DmeMaterial );
|
||||
USING_ELEMENT_FACTORY( DmeLight );
|
||||
USING_ELEMENT_FACTORY( DmeGameModel );
|
||||
USING_ELEMENT_FACTORY( DmeSound );
|
||||
USING_ELEMENT_FACTORY( DmeGameSound );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeMorphOperator );
|
||||
USING_ELEMENT_FACTORY( DmeTransformOperator );
|
||||
USING_ELEMENT_FACTORY( DmeExpressionOperator );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeGameModelInput );
|
||||
USING_ELEMENT_FACTORY( DmeGamePortal );
|
||||
USING_ELEMENT_FACTORY( DmeMouseInput );
|
||||
USING_ELEMENT_FACTORY( DmeKeyboardInput );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeEditorAttributeInfo );
|
||||
USING_ELEMENT_FACTORY( DmeEditorChoicesInfo );
|
||||
USING_ELEMENT_FACTORY( DmeEditorType );
|
||||
USING_ELEMENT_FACTORY( DmeEditorTypeDictionary );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmePackColorOperator );
|
||||
USING_ELEMENT_FACTORY( DmePackVector2Operator );
|
||||
USING_ELEMENT_FACTORY( DmePackVector3Operator );
|
||||
USING_ELEMENT_FACTORY( DmePackVector4Operator );
|
||||
USING_ELEMENT_FACTORY( DmePackQAngleOperator );
|
||||
USING_ELEMENT_FACTORY( DmePackQuaternionOperator );
|
||||
USING_ELEMENT_FACTORY( DmePackVMatrixOperator );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeUnpackColorOperator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackVector2Operator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackVector3Operator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackVector4Operator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackQAngleOperator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackQuaternionOperator );
|
||||
USING_ELEMENT_FACTORY( DmeUnpackVMatrixOperator );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeAnimationSet );
|
||||
USING_ELEMENT_FACTORY( DmePhonemeMapping );
|
||||
USING_ELEMENT_FACTORY( DmeBalanceToStereoCalculatorOperator );
|
||||
USING_ELEMENT_FACTORY( DmeGlobalFlexControllerOperator );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeTimeSelection );
|
||||
64
public/movieobjects/movieobjects.h
Normal file
64
public/movieobjects/movieobjects.h
Normal file
@@ -0,0 +1,64 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef MOVIEOBJECTS_H
|
||||
#define MOVIEOBJECTS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "movieobjects/dmeclip.h"
|
||||
#include "movieobjects/dmetransform.h"
|
||||
#include "movieobjects/dmetransformlist.h"
|
||||
#include "movieobjects/dmecamera.h"
|
||||
#include "movieobjects/dmeshape.h"
|
||||
#include "movieobjects/dmevertexdata.h"
|
||||
#include "movieobjects/dmemesh.h"
|
||||
#include "movieobjects/dmefaceset.h"
|
||||
#include "movieobjects/dmematerial.h"
|
||||
#include "movieobjects/dmetimeframe.h"
|
||||
#include "movieobjects/dmedag.h"
|
||||
#include "movieobjects/dmelight.h"
|
||||
#include "movieobjects/dmegamemodel.h"
|
||||
#include "movieobjects/dmemdl.h"
|
||||
#include "movieobjects/dmesound.h"
|
||||
#include "movieobjects/dmeoperator.h"
|
||||
#include "movieobjects/dmeanimationlist.h"
|
||||
#include "movieobjects/dmeattachment.h"
|
||||
#include "movieobjects/dmejoint.h"
|
||||
#include "movieobjects/dmemorphoperator.h"
|
||||
#include "movieobjects/dmecombinationoperator.h"
|
||||
#include "movieobjects/dmetransformoperator.h"
|
||||
#include "movieobjects/dmepackoperators.h"
|
||||
#include "movieobjects/dmeunpackoperators.h"
|
||||
#include "movieobjects/dmeexpressionoperator.h"
|
||||
#include "movieobjects/dmeinput.h"
|
||||
#include "movieobjects/dmegamemodelinput.h"
|
||||
#include "movieobjects/dmekeyboardinput.h"
|
||||
#include "movieobjects/dmemouseinput.h"
|
||||
#include "movieobjects/dmechannel.h"
|
||||
#include "movieobjects/dmelog.h"
|
||||
#include "movieobjects/dmetrack.h"
|
||||
#include "movieobjects/dmetrackgroup.h"
|
||||
#include "movieobjects/dmeanimationset.h"
|
||||
#include "movieobjects/dmebalancetostereocalculatoroperator.h"
|
||||
#include "movieobjects/dmemodel.h"
|
||||
#include "movieobjects/dmemakefile.h"
|
||||
#include "movieobjects/dmedccmakefile.h"
|
||||
#include "movieobjects/dmemdlmakefile.h"
|
||||
#include "movieobjects/dmeeditortypedictionary.h"
|
||||
#include "movieobjects/dmephonememapping.h"
|
||||
#include "movieobjects/dmetimeselection.h"
|
||||
#include "movieobjects/dmeselection.h"
|
||||
#include "movieobjects/dmeeyeposition.h"
|
||||
#include "movieobjects/dmeeyeball.h"
|
||||
#include "movieobjects/dmedrawsettings.h"
|
||||
|
||||
#define USING_ELEMENT_FACTORY( className ) \
|
||||
extern C##className *g_##C##className##LinkerHack; \
|
||||
C##className *g_##C##className##PullInModule = g_##C##className##LinkerHack;
|
||||
|
||||
#endif // MOVIEOBJECTS_H
|
||||
82
public/movieobjects/movieobjects_compiletools.cpp
Normal file
82
public/movieobjects/movieobjects_compiletools.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: See notes below
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#include "movieobjects/movieobjects.h"
|
||||
|
||||
// YOU MUST INCLUDE THIS FILE INTO ANY PROJECT WHICH USES THE movieobjects.lib FILE
|
||||
// This hack causes the class factories for the element types to be imported into the compiled code...
|
||||
|
||||
// Basic type (in datamodel)
|
||||
USING_ELEMENT_FACTORY( DmElement );
|
||||
|
||||
// Movie types
|
||||
USING_ELEMENT_FACTORY( DmeTransform );
|
||||
USING_ELEMENT_FACTORY( DmeTransformList );
|
||||
USING_ELEMENT_FACTORY( DmeVertexData );
|
||||
USING_ELEMENT_FACTORY( DmeMesh );
|
||||
USING_ELEMENT_FACTORY( DmeDag );
|
||||
USING_ELEMENT_FACTORY( DmeFaceSet );
|
||||
USING_ELEMENT_FACTORY( DmeModel );
|
||||
USING_ELEMENT_FACTORY( DmeJoint );
|
||||
USING_ELEMENT_FACTORY( DmeAttachment );
|
||||
USING_ELEMENT_FACTORY( DmeMakefile );
|
||||
USING_ELEMENT_FACTORY( DmeMDLMakefile );
|
||||
USING_ELEMENT_FACTORY( DmeDCCMakefile );
|
||||
USING_ELEMENT_FACTORY( DmeMayaMakefile );
|
||||
USING_ELEMENT_FACTORY( DmeXSIMakefile );
|
||||
USING_ELEMENT_FACTORY( DmeSourceDCCFile );
|
||||
USING_ELEMENT_FACTORY( DmeSourceMayaFile );
|
||||
USING_ELEMENT_FACTORY( DmeSourceXSIFile );
|
||||
USING_ELEMENT_FACTORY( DmeAnimationList );
|
||||
USING_ELEMENT_FACTORY( DmeClip );
|
||||
USING_ELEMENT_FACTORY( DmeChannelsClip );
|
||||
USING_ELEMENT_FACTORY( DmeChannel );
|
||||
USING_ELEMENT_FACTORY( DmeTimeFrame );
|
||||
USING_ELEMENT_FACTORY( DmeTrackGroup );
|
||||
USING_ELEMENT_FACTORY( DmeTrack );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeCombinationDominationRule );
|
||||
USING_ELEMENT_FACTORY( DmeCombinationInputControl );
|
||||
USING_ELEMENT_FACTORY( DmeCombinationOperator );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeIntLog );
|
||||
USING_ELEMENT_FACTORY( DmeFloatLog );
|
||||
USING_ELEMENT_FACTORY( DmeBoolLog );
|
||||
USING_ELEMENT_FACTORY( DmeColorLog );
|
||||
USING_ELEMENT_FACTORY( DmeVector2Log );
|
||||
USING_ELEMENT_FACTORY( DmeVector3Log );
|
||||
USING_ELEMENT_FACTORY( DmeVector4Log );
|
||||
USING_ELEMENT_FACTORY( DmeQAngleLog );
|
||||
USING_ELEMENT_FACTORY( DmeQuaternionLog );
|
||||
USING_ELEMENT_FACTORY( DmeVMatrixLog );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeIntLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeFloatLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeBoolLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeColorLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeVector2LogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeVector3LogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeVector4LogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeQAngleLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeQuaternionLogLayer );
|
||||
USING_ELEMENT_FACTORY( DmeVMatrixLogLayer );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeIntCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeFloatCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeBoolCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeColorCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeVector2CurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeVector3CurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeVector4CurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeQAngleCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeQuaternionCurveInfo );
|
||||
USING_ELEMENT_FACTORY( DmeVMatrixCurveInfo );
|
||||
|
||||
USING_ELEMENT_FACTORY( DmeComponent );
|
||||
USING_ELEMENT_FACTORY( DmeSingleIndexedComponent );
|
||||
USING_ELEMENT_FACTORY( DmeDrawSettings );
|
||||
USING_ELEMENT_FACTORY( DmeEyePosition );
|
||||
USING_ELEMENT_FACTORY( DmeEyeball );
|
||||
30
public/movieobjects/proceduralpresets.h
Normal file
30
public/movieobjects/proceduralpresets.h
Normal file
@@ -0,0 +1,30 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef PROCEDURALPRESETS_H
|
||||
#define PROCEDURALPRESETS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
enum
|
||||
{
|
||||
PROCEDURAL_PRESET_NOT = 0,
|
||||
PROCEDURAL_PRESET_IN_CROSSFADE,
|
||||
PROCEDURAL_PRESET_OUT_CROSSFADE,
|
||||
PROCEDURAL_PRESET_REVEAL,
|
||||
PROCEDURAL_PRESET_PASTE,
|
||||
PROCEDURAL_PRESET_JITTER,
|
||||
PROCEDURAL_PRESET_SMOOTH,
|
||||
PROCEDURAL_PRESET_SHARPEN,
|
||||
PROCEDURAL_PRESET_SOFTEN,
|
||||
PROCEDURAL_PRESET_STAGGER,
|
||||
|
||||
// Must be last
|
||||
NUM_PROCEDURAL_PRESET_TYPES,
|
||||
};
|
||||
|
||||
#endif // PROCEDURALPRESETS_H
|
||||
158
public/movieobjects/timeutils.h
Normal file
158
public/movieobjects/timeutils.h
Normal file
@@ -0,0 +1,158 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef TIMEUTILS_H
|
||||
#define TIMEUTILS_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include "platform.h"
|
||||
#include "tier0/dbg.h"
|
||||
|
||||
|
||||
class DmeTime_t;
|
||||
#define DMETIME_TO_SECONDS( t ) ((t) * 0.0001f)
|
||||
|
||||
class DmeFramerate_t
|
||||
{
|
||||
public:
|
||||
DmeFramerate_t( float fps );
|
||||
DmeFramerate_t( int fps = 0 );
|
||||
DmeFramerate_t( const DmeFramerate_t& src ) : m_num( src.m_num ), m_den( src.m_den ) {}
|
||||
|
||||
void SetFramerate( float flFrameRate );
|
||||
void SetFramerate( int fps );
|
||||
// other (uncommon) options besides 30(29.97 - ntsc video) are 24 (23.976 - ntsc film) and 60 (59.94 - ntsc progressive)
|
||||
void SetFramerateNTSC( int multiplier = 30 );
|
||||
|
||||
float GetFramesPerSecond() const;
|
||||
|
||||
bool operator==( DmeFramerate_t f ) const { return m_num == f.m_num && m_den == f.m_den; }
|
||||
bool operator!=( DmeFramerate_t f ) const { return m_num != f.m_num && m_den != f.m_den; }
|
||||
bool operator< ( DmeFramerate_t f ) const { return m_num * ( int )f.m_den < f.m_num * ( int )m_den; }
|
||||
bool operator> ( DmeFramerate_t f ) const { return m_num * ( int )f.m_den > f.m_num * ( int )m_den; }
|
||||
bool operator<=( DmeFramerate_t f ) const { return m_num * ( int )f.m_den <= f.m_num * ( int )m_den; }
|
||||
bool operator>=( DmeFramerate_t f ) const { return m_num * ( int )f.m_den >= f.m_num * ( int )m_den; }
|
||||
|
||||
DmeFramerate_t operator*( int i ) const { return DmeFramerate_t( m_num * i, m_den ); }
|
||||
DmeFramerate_t operator/( int i ) const { return DmeFramerate_t( m_num, m_den * i ); }
|
||||
|
||||
unsigned short abs( unsigned short i ) { return i >= 0 ? i : -i; }
|
||||
|
||||
DmeFramerate_t operator*=( int i ) { Assert( abs( m_num * i ) <= USHRT_MAX ); m_num *= ( unsigned short )i; return *this; }
|
||||
DmeFramerate_t operator/=( int i ) { Assert( abs( m_den * i ) <= USHRT_MAX ); m_den *= ( unsigned short )i; return *this; }
|
||||
|
||||
private:
|
||||
DmeFramerate_t( int nNumerator, int nDenominator );
|
||||
|
||||
unsigned short m_num;
|
||||
unsigned short m_den;
|
||||
|
||||
friend class DmeTime_t;
|
||||
};
|
||||
|
||||
#define DMETIME_ZERO DmeTime_t(0)
|
||||
#define DMETIME_MINDELTA DmeTime_t::MinTimeDelta()
|
||||
#define DMETIME_MINTIME DmeTime_t::MinTime()
|
||||
#define DMETIME_MAXTIME DmeTime_t::MaxTime()
|
||||
#define DMETIME_INVALID DmeTime_t::InvalidTime()
|
||||
|
||||
class DmeTime_t
|
||||
{
|
||||
public:
|
||||
DmeTime_t() : m_tms( INT_MIN ) {} // invalid time
|
||||
explicit DmeTime_t( int tms ) : m_tms( tms ) {}
|
||||
explicit DmeTime_t( float sec ) : m_tms( RoundSecondsToTMS( sec ) ) {}
|
||||
explicit DmeTime_t( double sec ) : m_tms( RoundSecondsToTMS( sec ) ) {}
|
||||
DmeTime_t( int frame, DmeFramerate_t framerate );
|
||||
|
||||
|
||||
// time operators
|
||||
|
||||
bool operator==( DmeTime_t t ) const { return m_tms == t.m_tms; }
|
||||
bool operator!=( DmeTime_t t ) const { return m_tms != t.m_tms; }
|
||||
bool operator< ( DmeTime_t t ) const { return m_tms < t.m_tms; }
|
||||
bool operator> ( DmeTime_t t ) const { return m_tms > t.m_tms; }
|
||||
bool operator<=( DmeTime_t t ) const { return m_tms <= t.m_tms; }
|
||||
bool operator>=( DmeTime_t t ) const { return m_tms >= t.m_tms; }
|
||||
|
||||
DmeTime_t operator%( DmeTime_t t ) const { return DmeTime_t( m_tms % t.m_tms ); }
|
||||
DmeTime_t operator+( DmeTime_t t ) const { return DmeTime_t( m_tms + t.m_tms ); }
|
||||
DmeTime_t operator-( DmeTime_t t ) const { return DmeTime_t( m_tms - t.m_tms ); }
|
||||
DmeTime_t operator-() const { return DmeTime_t( -m_tms ); }
|
||||
|
||||
DmeTime_t operator+=( DmeTime_t t ) { m_tms += t.m_tms; return *this; }
|
||||
DmeTime_t operator-=( DmeTime_t t ) { m_tms -= t.m_tms; return *this; }
|
||||
|
||||
// float operators - comment these out to find potentially incorrect uses of DmeTime_t
|
||||
|
||||
friend DmeTime_t operator*( DmeTime_t t, float f ) { t *= f; return t; }
|
||||
friend DmeTime_t operator*( float f, DmeTime_t t ) { t *= f; return t; }
|
||||
friend DmeTime_t operator/( DmeTime_t t, float f ) { t /= f; return t; }
|
||||
friend float operator/( DmeTime_t n, DmeTime_t d ) { return float( n.m_tms / double( d.m_tms ) ); }
|
||||
|
||||
DmeTime_t operator*=( float f );
|
||||
DmeTime_t operator/=( float f );
|
||||
|
||||
|
||||
// limits, special values and validity
|
||||
|
||||
bool IsValid() const { return m_tms != INT_MIN; }
|
||||
|
||||
static DmeTime_t InvalidTime() { return DmeTime_t( INT_MIN ); }
|
||||
static DmeTime_t MinTime() { return DmeTime_t( INT_MIN + 1 ); }
|
||||
static DmeTime_t MaxTime() { return DmeTime_t( INT_MAX ); }
|
||||
static DmeTime_t MinTimeDelta() { return DmeTime_t( 1 ); }
|
||||
|
||||
|
||||
// conversions between other time representations
|
||||
|
||||
int GetTenthsOfMS() const { return m_tms; }
|
||||
float GetSeconds() const { return DMETIME_TO_SECONDS( m_tms ); }
|
||||
void SetTenthsOfMS( int tms ) { m_tms = tms; }
|
||||
void SetSeconds( float sec ) { m_tms = RoundSecondsToTMS( sec ); }
|
||||
|
||||
|
||||
// helper methods
|
||||
|
||||
void Clamp( DmeTime_t lo, DmeTime_t hi );
|
||||
bool IsInRange( DmeTime_t lo, DmeTime_t hi ) const;
|
||||
|
||||
|
||||
// helper functions
|
||||
friend float GetFractionOfTime( DmeTime_t t, DmeTime_t duration, bool bClamp );
|
||||
friend int FrameForTime( DmeTime_t t, DmeFramerate_t framerate );
|
||||
|
||||
|
||||
// standard arithmetic methods
|
||||
|
||||
friend DmeTime_t abs( DmeTime_t t ) { return t.m_tms >= 0 ? t : -t; }
|
||||
|
||||
|
||||
// framerate-dependent conversions to/from frames
|
||||
|
||||
int CurrentFrame( DmeFramerate_t framerate, bool bRoundDown = true ) const;
|
||||
DmeTime_t TimeAtCurrentFrame( DmeFramerate_t framerate, bool bRoundDown = true ) const;
|
||||
DmeTime_t TimeAtNextFrame( DmeFramerate_t framerate ) const;
|
||||
DmeTime_t TimeAtPrevFrame( DmeFramerate_t framerate ) const;
|
||||
|
||||
private:
|
||||
DmeTime_t( int64 tms ) : m_tms( int( tms ) ) {}
|
||||
|
||||
// conversion helper methods - implementation
|
||||
static int RoundSecondsToTMS( float sec );
|
||||
static int RoundSecondsToTMS( double sec );
|
||||
|
||||
int m_tms;
|
||||
};
|
||||
|
||||
float GetFractionOfTimeBetween( DmeTime_t t, DmeTime_t start, DmeTime_t end, bool bClamp = false );
|
||||
|
||||
|
||||
#endif // TIMEUTILS_H
|
||||
@@ -98,11 +98,11 @@ $Project
|
||||
-$Lib tier1
|
||||
-$Implib vstdlib
|
||||
|
||||
$Lib "$SRCDIR\thirdparty\telemetry\lib\telemetry32.link" [$WIN32]
|
||||
$Lib "$SRCDIR\thirdparty\telemetry\lib\telemetry64.link" [$WIN64]
|
||||
//$Lib "$SRCDIR\thirdparty\telemetry\lib\telemetry32.link" [$WIN32]
|
||||
//$Lib "$SRCDIR\thirdparty\telemetry\lib\telemetry64.link" [$WIN64]
|
||||
|
||||
$LibExternal "$SRCDIR/thirdparty/telemetry/lib/libtelemetryx86.link" [$LINUX32]
|
||||
$LibExternal "$SRCDIR/thirdparty/telemetry/lib/libtelemetryx64.link" [$LINUX64]
|
||||
//$LibExternal "$SRCDIR/thirdparty/telemetry/lib/libtelemetryx86.link" [$LINUX32]
|
||||
//$LibExternal "$SRCDIR/thirdparty/telemetry/lib/libtelemetryx64.link" [$LINUX64]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user