summaryrefslogtreecommitdiff
path: root/public/movieobjects/dmedag.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/movieobjects/dmedag.h')
-rw-r--r--public/movieobjects/dmedag.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/public/movieobjects/dmedag.h b/public/movieobjects/dmedag.h
new file mode 100644
index 0000000..408f4fd
--- /dev/null
+++ b/public/movieobjects/dmedag.h
@@ -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 &center, 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 &center, 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