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
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "basetempentity.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// Purpose: Dispatches decal tempentity
//-----------------------------------------------------------------------------
class CTEDecal : public CBaseTempEntity
{
public:
DECLARE_CLASS( CTEDecal, CBaseTempEntity );
CTEDecal( const char *name );
virtual ~CTEDecal( void );
virtual void Test( const Vector& current_origin, const QAngle& current_angles );
DECLARE_SERVERCLASS();
public:
CNetworkVector( m_vecOrigin );
CNetworkVector( m_vecStart );
CNetworkVar( int, m_nEntity );
CNetworkVar( int, m_nHitbox );
CNetworkVar( int, m_nIndex );
};
//-----------------------------------------------------------------------------
// Purpose:
// Input : *name -
//-----------------------------------------------------------------------------
CTEDecal::CTEDecal( const char *name ) :
CBaseTempEntity( name )
{
m_vecOrigin.Init();
m_nEntity = 0;
m_nIndex = 0;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CTEDecal::~CTEDecal( void )
{
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : *current_origin -
// *current_angles -
//-----------------------------------------------------------------------------
void CTEDecal::Test( const Vector& current_origin, const QAngle& current_angles )
{
// Fill in data
m_nEntity = 0;
m_nIndex = 0;
m_vecOrigin = current_origin;
Vector vecEnd;
Vector forward;
m_vecOrigin.GetForModify()[2] += 24;
AngleVectors( current_angles, &forward );
forward[2] = 0.0;
VectorNormalize( forward );
VectorMA( m_vecOrigin, 50.0, forward, m_vecOrigin.GetForModify() );
VectorMA( m_vecOrigin, 1024.0, forward, vecEnd );
trace_t tr;
UTIL_TraceLine( m_vecOrigin, vecEnd, MASK_SOLID_BRUSHONLY, NULL, COLLISION_GROUP_NONE, &tr );
m_vecOrigin = tr.endpos;
CBroadcastRecipientFilter filter;
Create( filter, 0.0 );
}
IMPLEMENT_SERVERCLASS_ST(CTEDecal, DT_TEDecal)
SendPropVector( SENDINFO(m_vecOrigin), -1, SPROP_COORD),
SendPropVector( SENDINFO(m_vecStart), -1, SPROP_COORD),
SendPropInt( SENDINFO(m_nEntity), MAX_EDICT_BITS, SPROP_UNSIGNED ),
SendPropInt( SENDINFO(m_nHitbox), 12, SPROP_UNSIGNED ),
SendPropInt( SENDINFO(m_nIndex), 9, SPROP_UNSIGNED ),
END_SEND_TABLE()
// Singleton to fire TEDecal objects
static CTEDecal g_TEDecal( "Entity Decal" );
//-----------------------------------------------------------------------------
// Purpose:
// Input : msg_dest -
// delay -
// *origin -
// *recipient -
// *pos -
// entity -
// index -
//-----------------------------------------------------------------------------
void TE_Decal( IRecipientFilter& filter, float delay,
const Vector* pos, const Vector* start, int entity, int hitbox, int index )
{
Assert( pos && start );
g_TEDecal.m_vecOrigin = *pos;
g_TEDecal.m_vecStart = *start;
g_TEDecal.m_nEntity = entity;
g_TEDecal.m_nHitbox = hitbox;
g_TEDecal.m_nIndex = index;
// Send it over the wire
g_TEDecal.Create( filter, delay );
}
|