source-engine/engine/event_system.h
2022-04-25 17:21:00 +03:00

105 lines
2.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#if !defined( EVENT_SYSTEM_H )
#define EVENT_SYSTEM_H
#ifdef _WIN32
#pragma once
#endif
#include "event_flags.h"
#include "common.h"
#include "enginesingleuserfilter.h"
class SendTable;
class ClientClass;
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CEventInfo
{
public:
enum
{
EVENT_INDEX_BITS = 8,
EVENT_DATA_LEN_BITS = 11,
MAX_EVENT_DATA = 192, // ( 1<<8 bits == 256, but only using 192 below )
};
inline CEventInfo()
{
classID = 0;
fire_delay = 0.0f;
bits = 0;
flags = 0;
pSendTable = NULL;
pClientClass = NULL;
pData = NULL;
}
~CEventInfo()
{
if ( pData )
{
delete[] pData;
}
}
CEventInfo( const CEventInfo& src )
{
classID = src.classID;
fire_delay = src.fire_delay;
bits = src.bits;
flags = src.flags;
pSendTable = src.pSendTable;
pClientClass = src.pClientClass;
filter.AddPlayersFromFilter( &src.filter );
if ( src.pData )
{
int size = Bits2Bytes( src.bits );
pData = new byte[size];
Q_memcpy( pData, src.pData, size );
}
else
{
pData = NULL;
}
}
// 0 implies not in use
short classID;
// If non-zero, the delay time when the event should be fired ( fixed up on the client )
float fire_delay;
// send table pointer or NULL if send as full update
const SendTable *pSendTable;
const ClientClass *pClientClass;
// Length of data bits
int bits;
// Raw event data
byte *pData;
// CLIENT ONLY Reliable or not, etc.
int flags;
// clients that see that event
CEngineRecipientFilter filter;
};
#endif // EVENT_SYSTEM_H