summaryrefslogtreecommitdiff
path: root/public/bone_accessor.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/bone_accessor.h
downloadarchived-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.h131
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