You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.3 KiB
85 lines
2.3 KiB
//========= 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
|
|
|