mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-14 20:56:56 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user