source-engine/public/bone_accessor.h

132 lines
2.6 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= 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