//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef BONE_ACCESSOR_H #define BONE_ACCESSOR_H #ifdef _WIN32 #pragma once #endif #include "studio.h" class C_BaseAnimating; class CBoneAccessor { public: CBoneAccessor(); CBoneAccessor( matrix3x4_t *pBones ); // This can be used to allow access to all bones. // Initialize. #if defined( CLIENT_DLL ) void Init( const C_BaseAnimating *pAnimating, matrix3x4_t *pBones ); #endif int GetReadableBones(); void SetReadableBones( int flags ); int GetWritableBones(); void SetWritableBones( int flags ); // Get bones for read or write access. const matrix3x4_t& GetBone( int iBone ) const; const matrix3x4_t& operator[]( int iBone ) const; matrix3x4_t& GetBoneForWrite( int iBone ); matrix3x4_t *GetBoneArrayForWrite( ) const; private: #if defined( CLIENT_DLL ) && defined( _DEBUG ) void SanityCheckBone( int iBone, bool bReadable ) const; #endif // Only used in the client DLL for debug verification. const C_BaseAnimating *m_pAnimating; matrix3x4_t *m_pBones; int m_ReadableBones; // Which bones can be read. int m_WritableBones; // Which bones can be written. }; inline CBoneAccessor::CBoneAccessor() { m_pAnimating = NULL; m_pBones = NULL; m_ReadableBones = m_WritableBones = 0; } inline CBoneAccessor::CBoneAccessor( matrix3x4_t *pBones ) { m_pAnimating = NULL; m_pBones = pBones; } #if defined( CLIENT_DLL ) inline void CBoneAccessor::Init( const C_BaseAnimating *pAnimating, matrix3x4_t *pBones ) { m_pAnimating = pAnimating; m_pBones = pBones; } #endif inline int CBoneAccessor::GetReadableBones() { return m_ReadableBones; } inline void CBoneAccessor::SetReadableBones( int flags ) { m_ReadableBones = flags; } inline int CBoneAccessor::GetWritableBones() { return m_WritableBones; } inline void CBoneAccessor::SetWritableBones( int flags ) { m_WritableBones = flags; } inline const matrix3x4_t& CBoneAccessor::GetBone( int iBone ) const { #if defined( CLIENT_DLL ) && defined( _DEBUG ) SanityCheckBone( iBone, true ); #endif return m_pBones[iBone]; } inline const matrix3x4_t& CBoneAccessor::operator[]( int iBone ) const { #if defined( CLIENT_DLL ) && defined( _DEBUG ) SanityCheckBone( iBone, true ); #endif return m_pBones[iBone]; } inline matrix3x4_t& CBoneAccessor::GetBoneForWrite( int iBone ) { #if defined( CLIENT_DLL ) && defined( _DEBUG ) SanityCheckBone( iBone, false ); #endif return m_pBones[iBone]; } inline matrix3x4_t *CBoneAccessor::GetBoneArrayForWrite( void ) const { return m_pBones; } #endif // BONE_ACCESSOR_H