diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/bone_accessor.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/bone_accessor.h')
| -rw-r--r-- | public/bone_accessor.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/public/bone_accessor.h b/public/bone_accessor.h new file mode 100644 index 0000000..99e07f9 --- /dev/null +++ b/public/bone_accessor.h @@ -0,0 +1,131 @@ +//========= 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 |