summaryrefslogtreecommitdiff
path: root/movieobjects/dmetransformoperator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'movieobjects/dmetransformoperator.cpp')
-rw-r--r--movieobjects/dmetransformoperator.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/movieobjects/dmetransformoperator.cpp b/movieobjects/dmetransformoperator.cpp
new file mode 100644
index 0000000..e331347
--- /dev/null
+++ b/movieobjects/dmetransformoperator.cpp
@@ -0,0 +1,107 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// The transform operator class - shortcut to setting transform values from floats
+//
+//=============================================================================
+#include "movieobjects/dmetransformoperator.h"
+#include "movieobjects/dmetransform.h"
+#include "movieobjects_interfaces.h"
+#include "datamodel/dmelementfactoryhelper.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+
+//-----------------------------------------------------------------------------
+// Expose this class to the scene database
+//-----------------------------------------------------------------------------
+IMPLEMENT_ELEMENT_FACTORY( DmeTransformOperator, CDmeTransformOperator );
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDmeTransformOperator::OnConstruction()
+{
+ m_transform.Init( this, "transform" );
+ m_positionX.Init( this, "positionX" );
+ m_positionY.Init( this, "positionY" );
+ m_positionZ.Init( this, "positionZ" );
+ m_orientationX.Init( this, "orientationX" );
+ m_orientationY.Init( this, "orientationY" );
+ m_orientationZ.Init( this, "orientationZ" );
+ m_orientationW.Init( this, "orientationW" );
+}
+
+void CDmeTransformOperator::OnDestruction()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDmeTransformOperator::Operate()
+{
+ CDmeTransform *pTransform = m_transform.GetElement();
+ if ( pTransform == NULL )
+ return;
+
+ Vector position = pTransform->GetValue< Vector >( "position" );
+ Quaternion orientation = pTransform->GetValue< Quaternion >( "orientation" );
+
+ position.x = m_positionX.Get();
+ position.y = m_positionY.Get();
+ position.z = m_positionZ.Get();
+
+ orientation.x = m_orientationX.Get();
+ orientation.y = m_orientationY.Get();
+ orientation.z = m_orientationZ.Get();
+ orientation.w = m_orientationW.Get();
+
+ pTransform->SetValue( "position", position );
+ pTransform->SetValue( "orientation", orientation );
+}
+
+// hack to avoid MSVC complaining about multiply defined symbols
+namespace TransformOp
+{
+void AddAttr( CUtlVector< CDmAttribute * > &attrs, CDmAttribute *pAttr )
+{
+ if ( pAttr == NULL )
+ return;
+ attrs.AddToTail( pAttr );
+}
+};
+using namespace TransformOp;
+
+void CDmeTransformOperator::GetInputAttributes( CUtlVector< CDmAttribute * > &attrs )
+{
+ AddAttr( attrs, m_positionX.GetAttribute() );
+ AddAttr( attrs, m_positionY.GetAttribute() );
+ AddAttr( attrs, m_positionZ.GetAttribute() );
+ AddAttr( attrs, m_orientationX.GetAttribute() );
+ AddAttr( attrs, m_orientationY.GetAttribute() );
+ AddAttr( attrs, m_orientationZ.GetAttribute() );
+ AddAttr( attrs, m_orientationW.GetAttribute() );
+}
+
+void CDmeTransformOperator::GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs )
+{
+ CDmeTransform *pTransform = m_transform.GetElement();
+ if ( pTransform == NULL )
+ return;
+
+ AddAttr( attrs, pTransform->GetAttribute( "position" ) );
+ AddAttr( attrs, pTransform->GetAttribute( "orientation" ) );
+}
+
+void CDmeTransformOperator::SetTransform( CDmeTransform *pTransform )
+{
+ m_transform.Set( pTransform );
+}
+
+const CDmeTransform *CDmeTransformOperator::GetTransform() const
+{
+ return m_transform.GetElement();
+}