halflife-photomode/dlls/func_break.h

89 lines
2.5 KiB
C++

/***
*
* Copyright (c) 1996-2001, 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
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() override;
void Precache() override;
bool KeyValue(KeyValueData* pkvd) override;
void EXPORT BreakTouch(CBaseEntity* pOther);
void Use(CBaseEntity* pActivator, CBaseEntity* pCaller, USE_TYPE useType, float value) override;
void DamageSound();
// breakables use an overridden takedamage
bool TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType) override;
// To spark when hit
void TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType) override;
bool IsBreakable();
bool SparkWhenHit();
int DamageDecal(int bitsDamageType) override;
void EXPORT Die();
int ObjectCaps() override { return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); }
bool Save(CSave& save) override;
bool Restore(CRestore& restore) override;
inline bool Explodable() { return ExplosionMagnitude() > 0; }
inline int ExplosionMagnitude() { 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;
int m_iszGibModel;
int m_iszSpawnObject;
};