source-engine/game/shared/effect_dispatch_data.h

140 lines
2.8 KiB
C
Raw Normal View History

2020-04-23 00:56:21 +08:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//===========================================================================//
#ifndef EFFECT_DISPATCH_DATA_H
#define EFFECT_DISPATCH_DATA_H
#ifdef _WIN32
#pragma once
#endif
#include "particle_parse.h"
#ifdef CLIENT_DLL
#include "dt_recv.h"
#include "client_class.h"
EXTERN_RECV_TABLE( DT_EffectData );
#else
#include "dt_send.h"
#include "server_class.h"
EXTERN_SEND_TABLE( DT_EffectData );
#endif
// NOTE: These flags are specifically *not* networked; so it's placed above the max effect flag bits
#define EFFECTDATA_NO_RECORD 0x80000000
#define MAX_EFFECT_FLAG_BITS 8
#define CUSTOM_COLOR_CP1 9
#define CUSTOM_COLOR_CP2 10
// This is the class that holds whatever data we're sending down to the client to make the effect.
class CEffectData
{
public:
Vector m_vOrigin;
Vector m_vStart;
Vector m_vNormal;
QAngle m_vAngles;
int m_fFlags;
#ifdef CLIENT_DLL
ClientEntityHandle_t m_hEntity;
#else
int m_nEntIndex;
#endif
float m_flScale;
float m_flMagnitude;
float m_flRadius;
int m_nAttachmentIndex;
short m_nSurfaceProp;
// Some TF2 specific things
int m_nMaterial;
int m_nDamageType;
int m_nHitBox;
unsigned char m_nColor;
// Color customizability
bool m_bCustomColors;
te_tf_particle_effects_colors_t m_CustomColors;
bool m_bControlPoint1;
te_tf_particle_effects_control_point_t m_ControlPoint1;
// Don't mess with stuff below here. DispatchEffect handles all of this.
public:
CEffectData()
{
m_vOrigin.Init();
m_vStart.Init();
m_vNormal.Init();
m_vAngles.Init();
m_fFlags = 0;
#ifdef CLIENT_DLL
m_hEntity = INVALID_EHANDLE_INDEX;
#else
m_nEntIndex = 0;
#endif
m_flScale = 1.f;
m_nAttachmentIndex = 0;
m_nSurfaceProp = 0;
m_flMagnitude = 0.0f;
m_flRadius = 0.0f;
m_nMaterial = 0;
m_nDamageType = 0;
m_nHitBox = 0;
m_nColor = 0;
m_bCustomColors = false;
m_CustomColors.m_vecColor1.Init();
m_CustomColors.m_vecColor2.Init();
m_bControlPoint1 = false;
m_ControlPoint1.m_eParticleAttachment = PATTACH_ABSORIGIN;
m_ControlPoint1.m_vecOffset.Init();
}
int GetEffectNameIndex() { return m_iEffectName; }
#ifdef CLIENT_DLL
IClientRenderable *GetRenderable() const;
C_BaseEntity *GetEntity() const;
int entindex() const;
#endif
private:
#ifdef CLIENT_DLL
DECLARE_CLIENTCLASS_NOBASE()
#else
DECLARE_SERVERCLASS_NOBASE()
#endif
int m_iEffectName; // Entry in the EffectDispatch network string table. The is automatically handled by DispatchEffect().
};
#define MAX_EFFECT_DISPATCH_STRING_BITS 10
#define MAX_EFFECT_DISPATCH_STRINGS ( 1 << MAX_EFFECT_DISPATCH_STRING_BITS )
#ifdef CLIENT_DLL
bool SuppressingParticleEffects();
void SuppressParticleEffects( bool bSuppress );
#endif
#endif // EFFECT_DISPATCH_DATA_H