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.
100 lines
2.8 KiB
100 lines
2.8 KiB
/*** |
|
* |
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved. |
|
* |
|
* This product contains software technology licensed from Id |
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. |
|
* All Rights Reserved. |
|
* |
|
* Use, distribution, and modification of this source code and/or resulting |
|
* object code is restricted to non-commercial enhancements to products from |
|
* Valve LLC. All other use, distribution, or modification is prohibited |
|
* without written permission from Valve LLC. |
|
* |
|
****/ |
|
#pragma once |
|
#if !defined(FUNC_BREAK_H) |
|
#define FUNC_BREAK_H |
|
|
|
typedef enum |
|
{ |
|
expRandom, |
|
expDirected |
|
} Explosions; |
|
typedef enum |
|
{ |
|
matGlass = 0, |
|
matWood, |
|
matMetal, |
|
matFlesh, |
|
matCinderBlock, |
|
matCeilingTile, |
|
matComputer, |
|
matUnbreakableGlass, |
|
matRocks, |
|
matNone, |
|
matLastMaterial |
|
} Materials; |
|
|
|
#define NUM_SHARDS 6 // this many shards spawned when breakable objects break; |
|
|
|
class CBreakable : public CBaseDelay |
|
{ |
|
public: |
|
// basic functions |
|
void Spawn( void ); |
|
void Precache( void ); |
|
void KeyValue( KeyValueData* pkvd); |
|
void EXPORT BreakTouch( CBaseEntity *pOther ); |
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); |
|
void DamageSound( void ); |
|
|
|
// breakables use an overridden takedamage |
|
virtual int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ); |
|
// To spark when hit |
|
void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType ); |
|
|
|
BOOL IsBreakable( void ); |
|
BOOL SparkWhenHit( void ); |
|
|
|
int DamageDecal( int bitsDamageType ); |
|
|
|
void EXPORT Die( void ); |
|
virtual int ObjectCaps( void ) { return ( CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION ); } |
|
virtual int Save( CSave &save ); |
|
virtual int Restore( CRestore &restore ); |
|
|
|
inline BOOL Explodable( void ) { return ExplosionMagnitude() > 0; } |
|
inline int ExplosionMagnitude( void ) { return pev->impulse; } |
|
inline void ExplosionSetMagnitude( int magnitude ) { pev->impulse = magnitude; } |
|
|
|
static void MaterialSoundPrecache( Materials precacheMaterial ); |
|
static void MaterialSoundRandom( edict_t *pEdict, Materials soundMaterial, float volume ); |
|
static const char **MaterialSoundList( Materials precacheMaterial, int &soundCount ); |
|
|
|
static const char *pSoundsWood[]; |
|
static const char *pSoundsFlesh[]; |
|
static const char *pSoundsGlass[]; |
|
static const char *pSoundsMetal[]; |
|
static const char *pSoundsConcrete[]; |
|
static const char *pSpawnObjects[]; |
|
|
|
static TYPEDESCRIPTION m_SaveData[]; |
|
|
|
Materials m_Material; |
|
Explosions m_Explosion; |
|
int m_idShard; |
|
float m_angle; |
|
string_t m_iszGibModel; |
|
string_t m_iszSpawnObject; |
|
virtual float TouchGravGun( CBaseEntity *attacker, int stage ) |
|
{ |
|
if( pev->movetype == MOVETYPE_PUSHSTEP ) |
|
{ |
|
pev->framerate = 1; |
|
return 200; |
|
} |
|
return 0; |
|
} |
|
}; |
|
#endif // FUNC_BREAK_H
|
|
|