You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.4 KiB
107 lines
3.4 KiB
//========= 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(); |
|
}
|
|
|