mirror of
https://github.com/Gigaslav/HL2Overcharged.git
synced 2026-01-05 06:10:21 +03:00
110 lines
3.5 KiB
C++
110 lines
3.5 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
#include "cbase.h"
|
|
#include "c_te_particlesystem.h"
|
|
#include "fx.h"
|
|
#include "ragdollexplosionenumerator.h"
|
|
#include "tier1/KeyValues.h"
|
|
#include "toolframework_client.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Concussive explosion entity
|
|
//-----------------------------------------------------------------------------
|
|
class C_TEIonExplosion : public C_TEParticleSystem
|
|
{
|
|
public:
|
|
DECLARE_CLASS(C_TEIonExplosion, C_TEParticleSystem);
|
|
DECLARE_CLIENTCLASS();
|
|
|
|
virtual void PostDataUpdate(DataUpdateType_t updateType);
|
|
|
|
void AffectRagdolls(void);
|
|
|
|
Vector m_vecNormal;
|
|
float m_flScale;
|
|
int m_nRadius;
|
|
int m_nMagnitude;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Networking
|
|
//-----------------------------------------------------------------------------
|
|
IMPLEMENT_CLIENTCLASS_EVENT_DT(C_TEIonExplosion, DT_TEIonExplosion, CTE_IonBang)
|
|
RecvPropVector(RECVINFO(m_vecNormal)),
|
|
RecvPropFloat(RECVINFO(m_flScale)),
|
|
RecvPropInt(RECVINFO(m_nRadius)),
|
|
RecvPropInt(RECVINFO(m_nMagnitude)),
|
|
END_RECV_TABLE()
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void C_TEIonExplosion::AffectRagdolls(void)
|
|
{
|
|
if ((m_nRadius == 0) || (m_nMagnitude == 0))
|
|
return;
|
|
|
|
CRagdollExplosionEnumerator ragdollEnum(m_vecOrigin, m_nRadius, m_nMagnitude);
|
|
partition->EnumerateElementsInSphere(PARTITION_CLIENT_RESPONSIVE_EDICTS, m_vecOrigin, m_nRadius, false, &ragdollEnum);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Recording
|
|
//-----------------------------------------------------------------------------
|
|
static inline void RecordIonExplosion(const Vector& start, const Vector &vecDirection)
|
|
{
|
|
if (!ToolsEnabled())
|
|
return;
|
|
|
|
if (clienttools->IsInRecordingMode())
|
|
{
|
|
KeyValues *msg = new KeyValues("TempEntity");
|
|
|
|
msg->SetInt("te", TE_CONCUSSIVE_EXPLOSION);
|
|
msg->SetString("name", "TE_IonExplosion");
|
|
msg->SetFloat("time", gpGlobals->curtime);
|
|
msg->SetFloat("originx", start.x);
|
|
msg->SetFloat("originy", start.y);
|
|
msg->SetFloat("originz", start.z);
|
|
msg->SetFloat("directionx", vecDirection.x);
|
|
msg->SetFloat("directiony", vecDirection.y);
|
|
msg->SetFloat("directionz", vecDirection.z);
|
|
|
|
ToolFramework_PostToolMessage(HTOOLHANDLE_INVALID, msg);
|
|
msg->deleteThis();
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void C_TEIonExplosion::PostDataUpdate(DataUpdateType_t updateType)
|
|
{
|
|
AffectRagdolls();
|
|
|
|
FX_ConcussiveExplosion(m_vecOrigin, m_vecNormal);
|
|
RecordIonExplosion(m_vecOrigin, m_vecNormal);
|
|
}
|
|
|
|
void TE_IonExplosion(IRecipientFilter& filter, float delay, KeyValues *pKeyValues)
|
|
{
|
|
Vector vecOrigin, vecDirection;
|
|
vecOrigin.x = pKeyValues->GetFloat("originx");
|
|
vecOrigin.y = pKeyValues->GetFloat("originy");
|
|
vecOrigin.z = pKeyValues->GetFloat("originz");
|
|
vecDirection.x = pKeyValues->GetFloat("directionx");
|
|
vecDirection.y = pKeyValues->GetFloat("directiony");
|
|
vecDirection.z = pKeyValues->GetFloat("directionz");
|
|
FX_ConcussiveExplosion(vecOrigin, vecDirection);
|
|
} |