diff options
Diffstat (limited to 'public/jigglebones.h')
| -rw-r--r-- | public/jigglebones.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/public/jigglebones.h b/public/jigglebones.h new file mode 100644 index 0000000..037a486 --- /dev/null +++ b/public/jigglebones.h @@ -0,0 +1,85 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $NoKeywords: $ +//=============================================================================// +#ifndef C_JIGGLEBONES_H +#define C_JIGGLEBONES_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "studio.h" +#include "utlvector.h" +#include "utllinkedlist.h" + +//----------------------------------------------------------------------------- +/** + * JiggleData is the instance-specific data for a jiggle bone + */ +struct JiggleData +{ + void Init( int initBone, float currenttime, const Vector &initBasePos, const Vector &initTipPos ) + { + bone = initBone; + + lastUpdate = currenttime; + + basePos = initBasePos; + baseLastPos = basePos; + baseVel.Init(); + baseAccel.Init(); + + tipPos = initTipPos; + tipVel.Init(); + tipAccel.Init(); + + lastLeft = Vector( 0, 0, 0 ); + + lastBoingPos = initBasePos; + boingDir = Vector( 0.0f, 0.0f, 1.0f ); + boingVelDir.Init(); + boingSpeed = 0.0f; + boingTime = 0.0f; + } + + int bone; + + float lastUpdate; // based on gpGlobals->realtime + + Vector basePos; // position of the base of the jiggle bone + Vector baseLastPos; + Vector baseVel; + Vector baseAccel; + + Vector tipPos; // position of the tip of the jiggle bone + Vector tipVel; + Vector tipAccel; + Vector lastLeft; // previous up vector + + Vector lastBoingPos; // position of base of jiggle bone last update for tracking velocity + Vector boingDir; // current direction along which the boing effect is occurring + Vector boingVelDir; // current estimation of jiggle bone unit velocity vector for boing effect + float boingSpeed; // current estimation of jiggle bone speed for boing effect + float boingTime; + + int useGoalMatrixCount; // Count of times we need to fast draw using goal matrix. + int useJiggleBoneCount; // Count of times we need to draw using real jiggly bones. +}; + +class CJiggleBones +{ +public: + JiggleData * GetJiggleData( int bone, float currenttime, const Vector &initBasePos, const Vector &initTipPos ); + void BuildJiggleTransformations( int boneIndex, float currentime, const mstudiojigglebone_t *jiggleParams, const matrix3x4_t &goalMX, matrix3x4_t &boneMX ); + + CUtlLinkedList< JiggleData > m_jiggleBoneState; +}; + + +extern void DevMsgRT( PRINTF_FORMAT_STRING char const* pMsg, ... ); + +#endif // C_BASEANIMATING_H |