Skip to content

Commit 8322130

Browse files
committed
WIP: port alien swarm and extend engine for asw
1 parent 7d3c0d8 commit 8322130

File tree

617 files changed

+151555
-216
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

617 files changed

+151555
-216
lines changed

engine/GameEventManager.cpp

Lines changed: 59 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ static ConVar net_showevents( "net_showevents", "0", FCVAR_CHEAT, "Dump game eve
4141

4242
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CGameEventManager, IGameEventManager2, INTERFACEVERSION_GAMEEVENTSMANAGER2, s_GameEventManager );
4343

44-
CGameEvent::CGameEvent( CGameEventDescriptor *descriptor )
44+
CGameEvent::CGameEvent( CGameEventDescriptor *descriptor, const char *name )
4545
{
4646
Assert( descriptor );
4747
m_pDescriptor = descriptor;
48-
m_pDataKeys = new KeyValues( descriptor->name );
48+
m_pDataKeys = new KeyValues( name );
4949
}
5050

5151
CGameEvent::~CGameEvent()
@@ -63,6 +63,11 @@ int CGameEvent::GetInt( const char *keyName, int defaultValue)
6363
return m_pDataKeys->GetInt( keyName, defaultValue );
6464
}
6565

66+
uint64 CGameEvent::GetUint64( const char *keyName, uint64 defaultValue)
67+
{
68+
return m_pDataKeys->GetUint64( keyName, defaultValue );
69+
}
70+
6671
float CGameEvent::GetFloat( const char *keyName, float defaultValue )
6772
{
6873
return m_pDataKeys->GetFloat( keyName, defaultValue );
@@ -83,6 +88,11 @@ void CGameEvent::SetInt( const char *keyName, int value )
8388
m_pDataKeys->SetInt( keyName, value );
8489
}
8590

91+
void CGameEvent::SetUint64( const char *keyName, uint64 value )
92+
{
93+
m_pDataKeys->SetUint64( keyName, value );
94+
}
95+
8696
void CGameEvent::SetFloat( const char *keyName, float value )
8797
{
8898
m_pDataKeys->SetFloat( keyName, value );
@@ -158,8 +168,8 @@ void CGameEventManager::Reset()
158168
m_Listeners.PurgeAndDeleteElements();
159169
m_EventFiles.RemoveAll();
160170
m_EventFileNames.RemoveAll();
171+
m_EventMap.Purge();
161172
m_bClientListenersChanged = true;
162-
163173
Assert( m_GameEvents.Count() == 0 );
164174
}
165175

@@ -189,10 +199,12 @@ void CGameEventManager::WriteEventList(SVC_GameEventList *msg)
189199

190200
Assert( descriptor.eventid >= 0 && descriptor.eventid < MAX_EVENT_NUMBER );
191201

202+
const char *pName = m_EventMap.GetElementName( descriptor.elementIndex );
203+
192204
msg->m_DataOut.WriteUBitLong( descriptor.eventid, MAX_EVENT_BITS );
193-
msg->m_DataOut.WriteString( descriptor.name );
194-
195-
KeyValues *key = descriptor.keys->GetFirstSubKey();
205+
msg->m_DataOut.WriteString( pName );
206+
207+
KeyValues *key = descriptor.keys->GetFirstSubKey();
196208

197209
while ( key )
198210
{
@@ -208,7 +220,6 @@ void CGameEventManager::WriteEventList(SVC_GameEventList *msg)
208220
}
209221

210222
msg->m_DataOut.WriteUBitLong( TYPE_LOCAL, 3 ); // end marker
211-
212223
msg->m_nNumEvents++;
213224
}
214225
}
@@ -296,25 +307,26 @@ void CGameEventManager::WriteListenEventList(CLC_ListenEvents *msg)
296307

297308
if ( descriptor.eventid == -1 )
298309
{
299-
DevMsg("Warning! Client listens to event '%s' unknown by server.\n", descriptor.name );
310+
const char *pName = m_EventMap.GetElementName(descriptor.elementIndex);
311+
DevMsg("Warning! Client listens to event '%s' unknown by server.\n", pName );
300312
continue;
301313
}
302314

303315
msg->m_EventArray.Set( descriptor.eventid );
304316
}
305317
}
306318

307-
IGameEvent *CGameEventManager::CreateEvent( CGameEventDescriptor *descriptor )
319+
IGameEvent *CGameEventManager::CreateEvent( CGameEventDescriptor *descriptor, const char *name )
308320
{
309-
return new CGameEvent ( descriptor );
321+
return new CGameEvent ( descriptor, name );
310322
}
311323

312-
IGameEvent *CGameEventManager::CreateEvent( const char *name, bool bForce )
324+
IGameEvent *CGameEventManager::CreateEvent( const char *name, bool bForce, int *pCookie )
313325
{
314326
if ( !name || !name[0] )
315327
return NULL;
316328

317-
CGameEventDescriptor *descriptor = GetEventDescriptor( name );
329+
CGameEventDescriptor *descriptor = GetEventDescriptor( name, pCookie );
318330

319331
// check if this event name is known
320332
if ( !descriptor )
@@ -330,7 +342,7 @@ IGameEvent *CGameEventManager::CreateEvent( const char *name, bool bForce )
330342
}
331343

332344
// create & return the new event
333-
return new CGameEvent ( descriptor );
345+
return new CGameEvent ( descriptor, name );
334346
}
335347

336348
bool CGameEventManager::FireEvent( IGameEvent *event, bool bServerOnly )
@@ -351,7 +363,8 @@ IGameEvent *CGameEventManager::DuplicateEvent( IGameEvent *event )
351363
return NULL;
352364

353365
// create new instance
354-
CGameEvent *newEvent = new CGameEvent ( gameEvent->m_pDescriptor );
366+
const char *pName = m_EventMap.GetElementName(gameEvent->m_pDescriptor->elementIndex );
367+
CGameEvent *newEvent = new CGameEvent ( gameEvent->m_pDescriptor, pName );
355368

356369
// free keys
357370
newEvent->m_pDataKeys->deleteThis();
@@ -414,12 +427,16 @@ bool CGameEventManager::FireEventIntern( IGameEvent *event, bool bServerOnly, bo
414427
{
415428
if ( bClientOnly )
416429
{
417-
ConMsg( "Game event \"%s\", Tick %i:\n", descriptor->name, cl.GetClientTickCount() );
430+
#ifndef DEDICATED
431+
const char *pName = m_EventMap.GetElementName(descriptor->elementIndex);
432+
ConMsg( "Game event \"%s\", Tick %i:\n", pName, cl.GetClientTickCount() );
418433
ConPrintEvent( event );
434+
#endif
419435
}
420436
else if ( net_showevents.GetInt() > 1 )
421437
{
422-
ConMsg( "Server event \"%s\", Tick %i:\n", descriptor->name, sv.GetTick() );
438+
const char *pName = m_EventMap.GetElementName(descriptor->elementIndex);
439+
ConMsg( "Server event \"%s\", Tick %i:\n", pName, sv.GetTick() );
423440
ConPrintEvent( event );
424441
}
425442
}
@@ -491,7 +508,8 @@ bool CGameEventManager::SerializeEvent( IGameEvent *event, bf_write* buf )
491508

492509
if ( net_showevents.GetInt() > 2 )
493510
{
494-
DevMsg("Serializing event '%s' (%i):\n", descriptor->name, descriptor->eventid );
511+
const char *pName = m_EventMap.GetElementName(descriptor->elementIndex);
512+
DevMsg("Serializing event '%s' (%i):\n", pName, descriptor->eventid );
495513
}
496514

497515
while ( key )
@@ -545,11 +563,12 @@ IGameEvent *CGameEventManager::UnserializeEvent( bf_read *buf)
545563
}
546564

547565
// create new event
548-
IGameEvent *event = CreateEvent( descriptor );
566+
const char *pName = m_EventMap.GetElementName(descriptor->elementIndex);
567+
IGameEvent *event = CreateEvent( descriptor, pName );
549568

550569
if ( !event )
551570
{
552-
DevMsg( "CGameEventManager::UnserializeEvent:: failed to create event %s.\n", descriptor->name );
571+
DevMsg( "CGameEventManager::UnserializeEvent:: failed to create event %i.\n", descriptor->eventid );
553572
return NULL;
554573
}
555574

@@ -766,9 +785,7 @@ bool CGameEventManager::RegisterEvent( KeyValues * event)
766785
int index = m_GameEvents.AddToTail();
767786
descriptor = &m_GameEvents.Element(index);
768787

769-
AssertMsg2( V_strlen( event->GetName() ) <= MAX_EVENT_NAME_LENGTH, "Event named '%s' exceeds maximum name length %d", event->GetName(), MAX_EVENT_NAME_LENGTH );
770-
771-
Q_strncpy( descriptor->name, event->GetName(), MAX_EVENT_NAME_LENGTH );
788+
descriptor->elementIndex = m_EventMap.Insert( event->GetName(), index );
772789
}
773790
else
774791
{
@@ -859,20 +876,34 @@ void CGameEventManager::FreeEvent( IGameEvent *event )
859876
delete event;
860877
}
861878

862-
CGameEventDescriptor *CGameEventManager::GetEventDescriptor(const char * name)
879+
CGameEventDescriptor *CGameEventManager::GetEventDescriptor(const char * name, int *pCookie)
863880
{
881+
const uint32 cookieBit = 0x80000000;
882+
const uint32 cookieMask = ~cookieBit;
883+
864884
if ( !name || !name[0] )
865885
return NULL;
866886

867-
for (int i=0; i < m_GameEvents.Count(); i++ )
887+
if ( pCookie && *pCookie )
868888
{
869-
CGameEventDescriptor *descriptor = &m_GameEvents[i];
889+
int gameEventIndex = uint32(*pCookie) & cookieMask;
890+
CGameEventDescriptor *pDescriptor = &m_GameEvents[gameEventIndex];
891+
if ( !V_stricmp( m_EventMap.GetElementName(pDescriptor->elementIndex), name ) )
892+
{
893+
return pDescriptor;
894+
}
895+
}
896+
int eventMapIndex = m_EventMap.Find( name );
897+
if ( eventMapIndex == m_EventMap.InvalidIndex() )
898+
return NULL;
870899

871-
if ( Q_strcmp( descriptor->name, name ) == 0 )
872-
return descriptor;
900+
int gameEventIndex = m_EventMap[eventMapIndex];
901+
if ( pCookie )
902+
{
903+
*pCookie = cookieBit | gameEventIndex;
873904
}
874905

875-
return NULL;
906+
return &m_GameEvents[gameEventIndex];
876907
}
877908

878909
bool CGameEventManager::AddListenerAll( void *listener, int nListenerType )

engine/GameEventManager.h

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#pragma once
1414
#endif
1515

16+
#include "utldict.h"
1617
#include <igameevents.h>
1718
#include <utlvector.h>
1819
#include <KeyValues.h>
@@ -34,16 +35,16 @@ class CGameEventDescriptor
3435
public:
3536
CGameEventDescriptor()
3637
{
37-
name[0] = 0;
3838
eventid = -1;
3939
keys = NULL;
4040
local = false;
4141
reliable = true;
42+
elementIndex = -1;
4243
}
4344

4445
public:
45-
char name[MAX_EVENT_NAME_LENGTH]; // name of this event
46-
int eventid; // network index number, -1 = not networked
46+
int eventid; // network index number, -1 = not networked
47+
int elementIndex;
4748
KeyValues *keys; // KeyValue describing data types, if NULL only name
4849
bool local; // local event, never tell clients about that
4950
bool reliable; // send this event as reliable message
@@ -54,7 +55,7 @@ class CGameEvent : public IGameEvent
5455
{
5556
public:
5657

57-
CGameEvent( CGameEventDescriptor *descriptor );
58+
CGameEvent( CGameEventDescriptor *descriptor, const char *name );
5859
virtual ~CGameEvent();
5960

6061
const char *GetName() const;
@@ -64,11 +65,13 @@ class CGameEvent : public IGameEvent
6465

6566
bool GetBool( const char *keyName = NULL, bool defaultValue = false );
6667
int GetInt( const char *keyName = NULL, int defaultValue = 0 );
68+
uint64 GetUint64( const char *keyName = NULL, uint64 defaultValue = 0 );
6769
float GetFloat( const char *keyName = NULL, float defaultValue = 0.0f );
6870
const char *GetString( const char *keyName = NULL, const char *defaultValue = "" );
6971

7072
void SetBool( const char *keyName, bool value );
7173
void SetInt( const char *keyName, int value );
74+
void SetUint64( const char *keyName, uint64 value );
7275
void SetFloat( const char *keyName, float value );
7376
void SetString( const char *keyName, const char *value );
7477

@@ -111,8 +114,9 @@ class CGameEventManager : public IGameEventManager2
111114
bool AddListener( IGameEventListener2 *listener, const char *name, bool bServerSide );
112115
bool FindListener( IGameEventListener2 *listener, const char *name );
113116
void RemoveListener( IGameEventListener2 *listener);
114-
115-
IGameEvent *CreateEvent( const char *name, bool bForce = false );
117+
118+
IGameEvent *CreateEvent( const char *name, bool bForce = false, int *pCookie = NULL );
119+
116120
IGameEvent *DuplicateEvent( IGameEvent *event);
117121
bool FireEvent( IGameEvent *event, bool bDontBroadcast = false );
118122
bool FireEventClientSide( IGameEvent *event );
@@ -127,7 +131,7 @@ class CGameEventManager : public IGameEventManager2
127131
void ReloadEventDefinitions(); // called by server on new map
128132
bool AddListener( void *listener, CGameEventDescriptor *descriptor, int nListenerType );
129133

130-
CGameEventDescriptor *GetEventDescriptor( const char *name );
134+
CGameEventDescriptor *GetEventDescriptor( const char *name, int *pCookie = NULL );
131135
CGameEventDescriptor *GetEventDescriptor( IGameEvent *event );
132136
CGameEventDescriptor *GetEventDescriptor( int eventid );
133137

@@ -145,13 +149,14 @@ class CGameEventManager : public IGameEventManager2
145149

146150
protected:
147151

148-
IGameEvent *CreateEvent( CGameEventDescriptor *descriptor );
152+
IGameEvent *CreateEvent( CGameEventDescriptor *descriptor, const char *name );
149153
bool RegisterEvent( KeyValues * keys );
150154
void UnregisterEvent(int index);
151155
bool FireEventIntern( IGameEvent *event, bool bServerSide, bool bClientOnly );
152156
CGameEventCallback* FindEventListener( void* listener );
153157

154158
CUtlVector<CGameEventDescriptor> m_GameEvents; // list of all known events
159+
CUtlDict<int, int> m_EventMap;
155160
CUtlVector<CGameEventCallback*> m_Listeners; // list of all registered listeners
156161
CUtlSymbolTable m_EventFiles; // list of all loaded event files
157162
CUtlVector<CUtlSymbol> m_EventFileNames;

engine/baseclient.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,13 @@ CBaseClient::CBaseClient()
6666
m_bReportFakeClient = true;
6767
m_iTracing = 0;
6868
m_bPlayerNameLocked = false;
69+
70+
m_nDebugID = EVENT_DEBUG_ID_INIT;
6971
}
7072

7173
CBaseClient::~CBaseClient()
7274
{
75+
m_nDebugID = EVENT_DEBUG_ID_SHUTDOWN;
7376
}
7477

7578

@@ -670,6 +673,11 @@ void CBaseClient::FireGameEvent( IGameEvent *event )
670673
}
671674
}
672675

676+
int CBaseClient::GetEventDebugID( void )
677+
{
678+
return m_nDebugID;
679+
}
680+
673681
bool CBaseClient::SendServerInfo( void )
674682
{
675683
COM_TimestampedLog( " CBaseClient::SendServerInfo" );

engine/baseclient.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ class CBaseClient : public IGameEventListener2, public IClient, public IClientMe
144144

145145
public: // IGameEventListener
146146
virtual void FireGameEvent( IGameEvent *event );
147+
int m_nDebugID;
148+
virtual int GetEventDebugID( void );
147149

148150
public:
149151

engine/cdll_engine_int.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,8 @@ class CEngineClient : public IVEngineClient
539539
virtual bool REMOVED_SteamRefreshLogin( const char *password, bool isSecure ) { return false; }
540540
virtual bool REMOVED_SteamProcessCall( bool & finished ) { return false; }
541541

542+
virtual ISPSharedMemory *GetSinglePlayerSharedMemorySpace( const char *handle, int ent_num = MAX_EDICTS );
543+
542544
virtual void SetGamestatsData( CGamestatsData *pGamestatsData );
543545
virtual CGamestatsData *GetGamestatsData();
544546

@@ -1568,6 +1570,13 @@ void CEngineClient::OnStorageDeviceDetached( void )
15681570
g_pXboxSystem->CloseContainers();
15691571
}
15701572

1573+
1574+
ISPSharedMemory *CEngineClient::GetSinglePlayerSharedMemorySpace( const char *szName, int ent_num )
1575+
{
1576+
// TODO(nillerusr): it this necessary? Implement later if so
1577+
return NULL; //g_pSinglePlayerSharedMemoryManager->GetSharedMemory( szName, ent_num );
1578+
}
1579+
15711580
void CEngineClient::ResetDemoInterpolation( void )
15721581
{
15731582
if( demorecorder->IsRecording() )

0 commit comments

Comments
 (0)