aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/c_basetempentity.h
blob: 2f3740ead01918dee30a9746f4ba6c237f40c7ab (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
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef C_BASETEMPENTITY_H
#define C_BASETEMPENTITY_H
#ifdef _WIN32
#pragma once
#endif


#include "client_class.h"
#include "iclientnetworkable.h"
#include "c_recipientfilter.h"


//-----------------------------------------------------------------------------
// Purpose: Base class for TEs.  All TEs should derive from this and at
//  least implement OnDataChanged to be notified when the TE has been received
//  from the server
//-----------------------------------------------------------------------------
class C_BaseTempEntity : public IClientUnknown, public IClientNetworkable

{
public:
	DECLARE_CLASS_NOBASE( C_BaseTempEntity );
	DECLARE_CLIENTCLASS();
	
									C_BaseTempEntity( void );
	virtual							~C_BaseTempEntity( void );


// IClientUnknown implementation.
public:

	virtual void SetRefEHandle( const CBaseHandle &handle )	{ Assert( false ); }
	virtual const CBaseHandle& GetRefEHandle() const		{ return *((CBaseHandle*)0); }

	virtual IClientUnknown*		GetIClientUnknown()		{ return this; }
	virtual ICollideable*		GetCollideable()		{ return 0; }
	virtual IClientNetworkable*	GetClientNetworkable()	{ return this; }
	virtual IClientRenderable*	GetClientRenderable()	{ return 0; }
	virtual IClientEntity*		GetIClientEntity()		{ return 0; }
	virtual C_BaseEntity*		GetBaseEntity()			{ return 0; }
	virtual IClientThinkable*	GetClientThinkable()	{ return 0; }


// IClientNetworkable overrides.
public:

	virtual void					Release();	
	virtual void					NotifyShouldTransmit( ShouldTransmitState_t state );
	virtual void					PreDataUpdate( DataUpdateType_t updateType );
	virtual void					PostDataUpdate( DataUpdateType_t updateType );
	virtual void					OnDataUnchangedInPVS( void ) { }
	virtual void					OnPreDataChanged( DataUpdateType_t updateType );
	virtual void					OnDataChanged( DataUpdateType_t updateType );
	virtual void					SetDormant( bool bDormant );
	virtual bool					IsDormant( void );
	virtual int						entindex( void ) const;
	virtual void					ReceiveMessage( int classID, bf_read &msg );
	virtual void*					GetDataTableBasePtr();
	virtual void					SetDestroyedOnRecreateEntities( void );

public:

	// Dummy for CNetworkVars.
	void NetworkStateChanged() {}
	void NetworkStateChanged( void *pVar ) {}

	virtual bool					Init(int entnum, int iSerialNum);

	virtual void					Precache( void );

	// For dynamic entities, return true to allow destruction
	virtual bool					ShouldDestroy( void ) { return false; };

	C_BaseTempEntity				*GetNext( void );

	// Get list of tempentities
	static C_BaseTempEntity			*GetList( void );

	C_BaseTempEntity				*GetNextDynamic( void );

	// Determine the color modulation amount
	void	GetColorModulation( float* color )
	{
		assert(color);
		color[0] = color[1] = color[2] = 1.0f;
	}

	// Should this object be able to have shadows cast onto it?
	virtual bool	ShouldReceiveProjectedTextures( int flags ) { return false; }

// Static members
public:
	// List of dynamically allocated temp entis
	static C_BaseTempEntity			*GetDynamicList();

	// Called at startup to allow temp entities to precache any models/sounds that they need
	static void						PrecacheTempEnts( void );

	static void						ClearDynamicTempEnts( void );

	static void						CheckDynamicTempEnts( void );

private:

	// Next in chain
	C_BaseTempEntity		*m_pNext;
	C_BaseTempEntity		*m_pNextDynamic;

	// TEs add themselves to this list for the executable.
	static C_BaseTempEntity	*s_pTempEntities;
	static C_BaseTempEntity *s_pDynamicEntities;
};


#endif // C_BASETEMPENTITY_H