diff options
Diffstat (limited to 'movieobjects/dmeshape.cpp')
| -rw-r--r-- | movieobjects/dmeshape.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/movieobjects/dmeshape.cpp b/movieobjects/dmeshape.cpp new file mode 100644 index 0000000..33a1f20 --- /dev/null +++ b/movieobjects/dmeshape.cpp @@ -0,0 +1,115 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= +#include "movieobjects/dmeshape.h" +#include "datamodel/dmelementfactoryhelper.h" +#include "movieobjects_interfaces.h" +#include "movieobjects/dmedag.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( DmeShape, CDmeShape ); + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CDmeShape::OnConstruction() +{ + m_visible.InitAndSet( this, "visible", true ); +} + +void CDmeShape::OnDestruction() +{ +} + +void CDmeShape::Draw( const matrix3x4_t &shapeToWorld, CDmeDrawSettings *pDrawSettings /* = NULL */ ) +{ + Assert( 0 ); +} + + +//----------------------------------------------------------------------------- +// The default bounding sphere is empty at the origin +//----------------------------------------------------------------------------- +void CDmeShape::GetBoundingSphere( Vector &c, float &r ) const +{ + c.Zero(); + r = 0.0f; +} +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +int CDmeShape::GetParentCount() const +{ + int nReferringDags = 0; + + DmAttributeReferenceIterator_t i = g_pDataModel->FirstAttributeReferencingElement( GetHandle() ); + while ( i != DMATTRIBUTE_REFERENCE_ITERATOR_INVALID ) + { + CDmAttribute *pAttribute = g_pDataModel->GetAttribute( i ); + CDmeDag *pDag = CastElement< CDmeDag >( pAttribute->GetOwner() ); + const static UtlSymId_t symShape = g_pDataModel->GetSymbol( "shape" ); + if ( pDag && pAttribute->GetNameSymbol() == symShape && pDag->GetFileId() == GetFileId() ) + { + ++nReferringDags; + } + + i = g_pDataModel->NextAttributeReferencingElement( i ); + } + + return nReferringDags; +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +CDmeDag *CDmeShape::GetParent( int nParentIndex /*= 0 */ ) const +{ + int nReferringDags = 0; + + DmAttributeReferenceIterator_t i = g_pDataModel->FirstAttributeReferencingElement( GetHandle() ); + while ( i != DMATTRIBUTE_REFERENCE_ITERATOR_INVALID ) + { + CDmAttribute *pAttribute = g_pDataModel->GetAttribute( i ); + CDmeDag *pDag = CastElement< CDmeDag >( pAttribute->GetOwner() ); + const static UtlSymId_t symShape = g_pDataModel->GetSymbol( "shape" ); + if ( pDag && pAttribute->GetNameSymbol() == symShape && pDag->GetFileId() == GetFileId() ) + { + if ( nReferringDags == nParentIndex ) + return pDag; + + ++nReferringDags; + } + + i = g_pDataModel->NextAttributeReferencingElement( i ); + } + + return NULL; +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CDmeShape::GetShapeToWorldTransform( matrix3x4_t &mat, int nParentIndex /*= 0 */ ) const +{ + CDmeDag *pDag = GetParent( nParentIndex ); + + if ( pDag ) + { + pDag->GetShapeToWorldTransform( mat ); + } + else + { + SetIdentityMatrix( mat ); + } +} |