summaryrefslogtreecommitdiff
path: root/public/movieobjects/dmetrackgroup.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/movieobjects/dmetrackgroup.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/movieobjects/dmetrackgroup.h')
-rw-r--r--public/movieobjects/dmetrackgroup.h249
1 files changed, 249 insertions, 0 deletions
diff --git a/public/movieobjects/dmetrackgroup.h b/public/movieobjects/dmetrackgroup.h
new file mode 100644
index 0000000..8e029c3
--- /dev/null
+++ b/public/movieobjects/dmetrackgroup.h
@@ -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