86 lines
2.3 KiB
C++
86 lines
2.3 KiB
C++
//========= 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
|