diff options
Diffstat (limited to 'mp/src/public/iclientnetworkable.h')
| -rw-r--r-- | mp/src/public/iclientnetworkable.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/mp/src/public/iclientnetworkable.h b/mp/src/public/iclientnetworkable.h new file mode 100644 index 00000000..5f1c6dff --- /dev/null +++ b/mp/src/public/iclientnetworkable.h @@ -0,0 +1,105 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef ICLIENTNETWORKABLE_H
+#define ICLIENTNETWORKABLE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "iclientunknown.h"
+#include "tier1/bitbuf.h"
+
+
+class IClientEntity;
+class ClientClass;
+
+
+enum ShouldTransmitState_t
+{
+ SHOULDTRANSMIT_START=0, // The entity is starting to be transmitted (maybe it entered the PVS).
+
+ SHOULDTRANSMIT_END // Called when the entity isn't being transmitted by the server.
+ // This signals a good time to hide the entity until next time
+ // the server wants to transmit its state.
+};
+
+// NOTE: All of these are commented out; NotifyShouldTransmit actually
+// has all these in them. Left it as an enum in case we want to go back though
+enum DataUpdateType_t
+{
+ DATA_UPDATE_CREATED = 0, // indicates it was created +and+ entered the pvs
+// DATA_UPDATE_ENTERED_PVS,
+ DATA_UPDATE_DATATABLE_CHANGED,
+// DATA_UPDATE_LEFT_PVS,
+// DATA_UPDATE_DESTROYED, // FIXME: Could enable this, but it's a little worrying
+ // since it changes a bunch of existing code
+};
+
+abstract_class IClientNetworkable
+{
+public:
+ // Gets at the containing class...
+ virtual IClientUnknown* GetIClientUnknown() = 0;
+
+ // Called by the engine when the server deletes the entity.
+ virtual void Release() = 0;
+
+ // Supplied automatically by the IMPLEMENT_CLIENTCLASS macros.
+ virtual ClientClass* GetClientClass() = 0;
+
+ // This tells the entity what the server says for ShouldTransmit on this entity.
+ // Note: This used to be EntityEnteredPVS/EntityRemainedInPVS/EntityLeftPVS.
+ virtual void NotifyShouldTransmit( ShouldTransmitState_t state ) = 0;
+
+
+
+ //
+ // NOTE FOR ENTITY WRITERS:
+ //
+ // In 90% of the cases, you should hook OnPreDataChanged/OnDataChanged instead of
+ // PreDataUpdate/PostDataUpdate.
+ //
+ // The DataChanged events are only called once per frame whereas Pre/PostDataUpdate
+ // are called once per packet (and sometimes multiple times per frame).
+ //
+ // OnDataChanged is called during simulation where entity origins are correct and
+ // attachments can be used. whereas PostDataUpdate is called while parsing packets
+ // so attachments and other entity origins may not be valid yet.
+ //
+
+ virtual void OnPreDataChanged( DataUpdateType_t updateType ) = 0;
+ virtual void OnDataChanged( DataUpdateType_t updateType ) = 0;
+
+ // Called when data is being updated across the network.
+ // Only low-level entities should need to know about these.
+ virtual void PreDataUpdate( DataUpdateType_t updateType ) = 0;
+ virtual void PostDataUpdate( DataUpdateType_t updateType ) = 0;
+
+
+ // Objects become dormant on the client if they leave the PVS on the server.
+ virtual bool IsDormant( void ) = 0;
+
+ // Ent Index is the server handle used to reference this entity.
+ // If the index is < 0, that indicates the entity is not known to the server
+ virtual int entindex( void ) const = 0;
+
+ // Server to client entity message received
+ virtual void ReceiveMessage( int classID, bf_read &msg ) = 0;
+
+ // Get the base pointer to the networked data that GetClientClass->m_pRecvTable starts at.
+ // (This is usually just the "this" pointer).
+ virtual void* GetDataTableBasePtr() = 0;
+
+ // Tells the entity that it's about to be destroyed due to the client receiving
+ // an uncompressed update that's caused it to destroy all entities & recreate them.
+ virtual void SetDestroyedOnRecreateEntities( void ) = 0;
+};
+
+
+#endif // ICLIENTNETWORKABLE_H
|