blob: 5f6e664a75fdf61f23d57ee51155d4a4c2ede358 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
//========= 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
|