aboutsummaryrefslogtreecommitdiff
path: root/sp/src/public/iservernetworkable.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /sp/src/public/iservernetworkable.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/public/iservernetworkable.h')
-rw-r--r--sp/src/public/iservernetworkable.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/sp/src/public/iservernetworkable.h b/sp/src/public/iservernetworkable.h
new file mode 100644
index 00000000..9e5c9c7a
--- /dev/null
+++ b/sp/src/public/iservernetworkable.h
@@ -0,0 +1,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