diff options
Diffstat (limited to 'movieobjects/dmetransformoperator.cpp')
| -rw-r--r-- | movieobjects/dmetransformoperator.cpp | 107 |
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(); +} |