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.
124 lines
3.2 KiB
124 lines
3.2 KiB
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: A gib is a chunk of a body, or a piece of wood/metal/rocks/etc.
|
|
//
|
|
// $Workfile: $
|
|
// $Date: $
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef GIB_H
|
|
#define GIB_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "baseanimating.h"
|
|
#include "player_pickup.h"
|
|
#include "Sprite.h"
|
|
|
|
extern CBaseEntity *CreateRagGib( const char *szModel, const Vector &vecOrigin, const QAngle &vecAngles, const Vector &vecForce, float flFadeTime = 0.0, bool bShouldIgnite = false );
|
|
|
|
#define GERMAN_GIB_COUNT 4
|
|
#define HUMAN_GIB_COUNT 6
|
|
#define ALIEN_GIB_COUNT 4
|
|
|
|
enum GibType_e
|
|
{
|
|
GIB_HUMAN,
|
|
GIB_ALIEN,
|
|
};
|
|
|
|
class CGib : public CBaseAnimating,
|
|
public CDefaultPlayerPickupVPhysics
|
|
{
|
|
public:
|
|
DECLARE_CLASS( CGib, CBaseAnimating );
|
|
|
|
virtual ~CGib( void );
|
|
|
|
void Spawn( const char *szGibModel, float flLifetime = 25.0f );
|
|
|
|
void InitGib( CBaseEntity *pVictim, float fMaxVelocity, float fMinVelocity );
|
|
void BounceGibTouch ( CBaseEntity *pOther );
|
|
void StickyGibTouch ( CBaseEntity *pOther );
|
|
void WaitTillLand( void );
|
|
void DieThink( void );
|
|
void LimitVelocity( void );
|
|
virtual bool SUB_AllowedToFade( void );
|
|
|
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
|
|
|
virtual int ObjectCaps( void ) { return (BaseClass::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_DONT_SAVE | FCAP_IMPULSE_USE; }
|
|
static void SpawnHeadGib( CBaseEntity *pVictim );
|
|
static void SpawnRandomGibs( CBaseEntity *pVictim, int cGibs, GibType_e eGibType );
|
|
static void SpawnStickyGibs( CBaseEntity *pVictim, Vector vecOrigin, int cGibs );
|
|
static void SpawnSpecificGibs( CBaseEntity *pVictim, int nNumGibs, float fMaxVelocity, float fMinVelocity, const char* cModelName, float flLifetime = 25);
|
|
|
|
void SetPhysicsAttacker( CBasePlayer *pEntity, float flTime );
|
|
virtual void OnPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason );
|
|
virtual void OnPhysGunDrop( CBasePlayer *pPhysGunUser, PhysGunDrop_t reason );
|
|
virtual CBasePlayer *HasPhysicsAttacker( float dt );
|
|
|
|
void SetSprite( CBaseEntity *pSprite )
|
|
{
|
|
m_hSprite = pSprite;
|
|
}
|
|
|
|
CBaseEntity *GetSprite( void )
|
|
{
|
|
return m_hSprite.Get();
|
|
}
|
|
|
|
void SetFlame( CBaseEntity *pFlame )
|
|
{
|
|
m_hFlame = pFlame;
|
|
}
|
|
|
|
CBaseEntity *GetFlame( void )
|
|
{
|
|
return m_hFlame.Get();
|
|
}
|
|
|
|
DECLARE_DATADESC();
|
|
|
|
|
|
public:
|
|
void SetBloodColor( int nBloodColor );
|
|
|
|
int m_cBloodDecals;
|
|
int m_material;
|
|
float m_lifeTime;
|
|
bool m_bForceRemove;
|
|
|
|
CHandle<CBasePlayer> m_hPhysicsAttacker;
|
|
float m_flLastPhysicsInfluenceTime;
|
|
|
|
private:
|
|
// A little piece of duplicated code
|
|
void AdjustVelocityBasedOnHealth( int nHealth, Vector &vecVelocity );
|
|
int m_bloodColor;
|
|
|
|
EHANDLE m_hSprite;
|
|
EHANDLE m_hFlame;
|
|
|
|
// Limit the max number of extant Gibs (mainly a memory issue):
|
|
#ifdef _GAMECONSOLE
|
|
static const int MAX_CONCURRENT_GIBS = 25;
|
|
#else
|
|
static const int MAX_CONCURRENT_GIBS = 75;
|
|
#endif
|
|
static CUtlVector<EHANDLE> s_ExtantGibs;
|
|
};
|
|
|
|
class CRagGib : public CBaseAnimating
|
|
{
|
|
public:
|
|
DECLARE_CLASS( CRagGib, CBaseAnimating );
|
|
|
|
void Spawn( const char *szModel, const Vector &vecOrigin, const Vector &vecForce, float flFadeTime );
|
|
};
|
|
|
|
|
|
#endif //GIB_H
|