112 lines
2.7 KiB
C++
112 lines
2.7 KiB
C++
//========= 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
|