mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef PHYSICS_BONE_FOLLOWER_H
|
||||
#define PHYSICS_BONE_FOLLOWER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CBoneFollower;
|
||||
|
||||
//
|
||||
// To use bone followers in an entity, contain a CBoneFollowerManager in it. Then:
|
||||
// - Call InitBoneFollowers() in the entity's CreateVPhysics().
|
||||
// - Call UpdateBoneFollowers() after you move your bones.
|
||||
// - Call DestroyBoneFollowers() when your entity's removed
|
||||
|
||||
struct physfollower_t
|
||||
{
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
int boneIndex;
|
||||
CHandle<CBoneFollower> hFollower;
|
||||
};
|
||||
|
||||
struct vcollide_t;
|
||||
|
||||
// create a manager and a list of followers directly from a ragdoll
|
||||
void CreateBoneFollowersFromRagdoll( CBaseAnimating *pEntity, class CBoneFollowerManager *pManager, vcollide_t *pCollide );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CBoneFollowerManager
|
||||
{
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
public:
|
||||
CBoneFollowerManager();
|
||||
~CBoneFollowerManager();
|
||||
|
||||
// Use either of these to create the bone followers in your entity's CreateVPhysics()
|
||||
void InitBoneFollowers( CBaseAnimating *pParentEntity, int iNumBones, const char **pFollowerBoneNames );
|
||||
void AddBoneFollower( CBaseAnimating *pParentEntity, const char *pFollowerBoneName, solid_t *pSolid = NULL ); // Adds a single bone follower
|
||||
|
||||
// Call this after you move your bones
|
||||
void UpdateBoneFollowers( CBaseAnimating *pParentEntity );
|
||||
|
||||
// Call this when your entity's removed
|
||||
void DestroyBoneFollowers( void );
|
||||
|
||||
physfollower_t *GetBoneFollower( int iFollowerIndex );
|
||||
int GetBoneFollowerIndex( CBoneFollower *pFollower );
|
||||
int GetNumBoneFollowers( void ) const { return m_iNumBones; }
|
||||
|
||||
private:
|
||||
bool CreatePhysicsFollower( CBaseAnimating *pParentEntity, physfollower_t &follow, const char *pBoneName, solid_t *pSolid );
|
||||
|
||||
private:
|
||||
int m_iNumBones;
|
||||
CUtlVector<physfollower_t> m_physBones;
|
||||
};
|
||||
|
||||
|
||||
class CBoneFollower : public CBaseEntity
|
||||
{
|
||||
DECLARE_CLASS( CBoneFollower, CBaseEntity );
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_SERVERCLASS();
|
||||
public:
|
||||
// CBaseEntity
|
||||
void VPhysicsUpdate( IPhysicsObject *pPhysics );
|
||||
int UpdateTransmitState(void);
|
||||
|
||||
// NOTE: These are forwarded to the parent object!
|
||||
void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
void VPhysicsFriction( IPhysicsObject *pObject, float energy, int surfaceProps, int surfacePropsHit );
|
||||
void VPhysicsShadowCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
|
||||
bool TestCollision( const Ray_t &ray, unsigned int mask, trace_t& trace );
|
||||
int ObjectCaps( void );
|
||||
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
|
||||
void Touch( CBaseEntity *pOther );
|
||||
|
||||
void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator );
|
||||
|
||||
// locals
|
||||
bool Init( CBaseEntity *pOwner, const char *pModelName, solid_t &solid, const Vector &position, const QAngle &orientation );
|
||||
void UpdateFollower( const Vector &position, const QAngle &orientation, float flInterval );
|
||||
void SetTraceData( int physicsBone, int hitGroup );
|
||||
|
||||
// factory
|
||||
static CBoneFollower *Create( CBaseEntity *pOwner, const char *pModelName, solid_t &solid, const Vector &position, const QAngle &orientation );
|
||||
|
||||
private:
|
||||
CNetworkVar( int, m_modelIndex );
|
||||
CNetworkVar( int, m_solidIndex );
|
||||
int m_physicsBone;
|
||||
int m_hitGroup;
|
||||
};
|
||||
|
||||
#endif // PHYSICS_BONE_FOLLOWER_H
|
||||
Reference in New Issue
Block a user