blob: cefa75346f0ef9c742c3c771d2a6eb56e7f4cfa6 (
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
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef ISERVERNETWORKABLE_H
#define ISERVERNETWORKABLE_H
#ifdef _WIN32
#pragma once
#endif
#include "ihandleentity.h"
#include "basetypes.h"
#include "bitvec.h"
#include "const.h"
#include "bspfile.h"
// Entities can span this many clusters before we revert to a slower area checking algorithm
#define MAX_FAST_ENT_CLUSTERS 4
#define MAX_ENT_CLUSTERS 64
#define MAX_WORLD_AREAS 8
class ServerClass;
class SendTable;
struct edict_t;
class CBaseEntity;
class CSerialEntity;
class CBaseNetworkable;
class CCheckTransmitInfo
{
public:
edict_t *m_pClientEnt; // pointer to receiver edict
byte m_PVS[PAD_NUMBER( MAX_MAP_CLUSTERS,8 ) / 8];
int m_nPVSSize; // PVS size in bytes
CBitVec<MAX_EDICTS> *m_pTransmitEdict; // entity n is already marked for transmission
CBitVec<MAX_EDICTS> *m_pTransmitAlways; // entity n is always sent even if not in PVS (HLTV and Replay only)
int m_AreasNetworked; // number of networked areas
int m_Areas[MAX_WORLD_AREAS]; // the areas
// This is used to determine visibility, so if the previous state
// is the same as the current state (along with pvs and areas networked),
// then the parts of the map that the player can see haven't changed.
byte m_AreaFloodNums[MAX_MAP_AREAS];
int m_nMapAreas;
};
//-----------------------------------------------------------------------------
// Stores information necessary to perform PVS testing.
//-----------------------------------------------------------------------------
struct PVSInfo_t
{
// headnode for the entity's bounding box
short m_nHeadNode;
// number of clusters or -1 if too many
short m_nClusterCount;
// cluster indices
unsigned short *m_pClusters;
// For dynamic "area portals"
short m_nAreaNum;
short m_nAreaNum2;
// current position
float m_vCenter[3];
private:
unsigned short m_pClustersInline[MAX_FAST_ENT_CLUSTERS];
friend class CVEngineServer;
};
// IServerNetworkable is the interface the engine uses for all networkable data.
class IServerNetworkable
{
// These functions are handled automatically by the server_class macros and CBaseNetworkable.
public:
// Gets at the entity handle associated with the collideable
virtual IHandleEntity *GetEntityHandle() = 0;
// Tell the engine which class this object is.
virtual ServerClass* GetServerClass() = 0;
virtual edict_t *GetEdict() const = 0;
virtual const char* GetClassName() const = 0;
virtual void Release() = 0;
virtual int AreaNum() const = 0;
// In place of a generic QueryInterface.
virtual CBaseNetworkable* GetBaseNetworkable() = 0;
virtual CBaseEntity* GetBaseEntity() = 0; // Only used by game code.
virtual PVSInfo_t* GetPVSInfo() = 0; // get current visibilty data
protected:
// Should never call delete on this!
virtual ~IServerNetworkable() {}
};
#endif // ISERVERNETWORKABLE_H
|