mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Original Source for 1.13 Mod High Resolution version from 12/06/05
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@21 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
#ifdef PRECOMPILEDHEADERS
|
||||
#include "Utils All.h"
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#include "sgp.h"
|
||||
#include "container.h"
|
||||
#include "wcheck.h"
|
||||
#include "Event Manager.h"
|
||||
#include "Timer Control.h"
|
||||
#endif
|
||||
|
||||
HLIST hEventQueue = NULL;
|
||||
HLIST hDelayEventQueue = NULL;
|
||||
HLIST hDemandEventQueue = NULL;
|
||||
|
||||
#define QUEUE_RESIZE 20
|
||||
|
||||
// LOCAL FUNCTIONS
|
||||
HLIST GetQueue( UINT8 ubQueueID );
|
||||
void SetQueue( UINT8 ubQueueID, HLIST hQueue );
|
||||
|
||||
|
||||
BOOLEAN InitializeEventManager( )
|
||||
{
|
||||
// Create Queue
|
||||
hEventQueue = CreateList( QUEUE_RESIZE, sizeof( PTR ) );
|
||||
|
||||
if ( hEventQueue == NULL )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
// Create Delay Queue
|
||||
hDelayEventQueue = CreateList( QUEUE_RESIZE, sizeof( PTR ) );
|
||||
|
||||
if ( hDelayEventQueue == NULL )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
// Create Demand Queue (events on this queue are only processed when specifically
|
||||
// called for by code)
|
||||
hDemandEventQueue = CreateList( QUEUE_RESIZE, sizeof( PTR ) );
|
||||
|
||||
if ( hDemandEventQueue == NULL )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN ShutdownEventManager( )
|
||||
{
|
||||
if ( hEventQueue != NULL )
|
||||
{
|
||||
DeleteList( hEventQueue );
|
||||
}
|
||||
|
||||
if ( hDelayEventQueue != NULL )
|
||||
{
|
||||
DeleteList( hDelayEventQueue );
|
||||
}
|
||||
|
||||
if ( hDemandEventQueue != NULL )
|
||||
{
|
||||
DeleteList( hDemandEventQueue );
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOLEAN AddEvent( UINT32 uiEvent, UINT16 usDelay, PTR pEventData, UINT32 uiDataSize, UINT8 ubQueueID )
|
||||
{
|
||||
EVENT *pEvent;
|
||||
UINT32 uiEventSize = sizeof( EVENT );
|
||||
HLIST hQueue;
|
||||
|
||||
// Allocate new event
|
||||
pEvent = (EVENT *) MemAlloc( uiEventSize + uiDataSize );
|
||||
|
||||
CHECKF( pEvent != NULL );
|
||||
|
||||
// Set values
|
||||
pEvent->TimeStamp = GetJA2Clock( );
|
||||
pEvent->usDelay = usDelay;
|
||||
pEvent->uiEvent = uiEvent;
|
||||
pEvent->uiFlags = 0;
|
||||
pEvent->uiDataSize = uiDataSize;
|
||||
pEvent->pData = (BYTE*)pEvent;
|
||||
pEvent->pData = pEvent->pData + uiEventSize;
|
||||
|
||||
memcpy( pEvent->pData, pEventData, uiDataSize );
|
||||
|
||||
// Add event to queue
|
||||
hQueue = GetQueue( ubQueueID );
|
||||
hQueue = AddtoList( hQueue, &pEvent, ListSize( hQueue ) );
|
||||
SetQueue( ubQueueID, hQueue );
|
||||
|
||||
return( TRUE );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOLEAN RemoveEvent( EVENT **ppEvent, UINT32 uiIndex, UINT8 ubQueueID )
|
||||
{
|
||||
UINT32 uiQueueSize;
|
||||
HLIST hQueue;
|
||||
|
||||
// Get an event from queue, if one exists
|
||||
//
|
||||
|
||||
hQueue = GetQueue( ubQueueID );
|
||||
|
||||
|
||||
// Get Size
|
||||
uiQueueSize = ListSize( hQueue );
|
||||
|
||||
if ( uiQueueSize > 0 )
|
||||
{
|
||||
// Get
|
||||
CHECKF( RemfromList( hQueue , ppEvent, uiIndex ) != FALSE );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN PeekEvent( EVENT **ppEvent, UINT32 uiIndex , UINT8 ubQueueID )
|
||||
{
|
||||
UINT32 uiQueueSize;
|
||||
HLIST hQueue;
|
||||
|
||||
// Get an event from queue, if one exists
|
||||
//
|
||||
|
||||
hQueue = GetQueue( ubQueueID );
|
||||
|
||||
|
||||
// Get Size
|
||||
uiQueueSize = ListSize( hQueue );
|
||||
|
||||
if ( uiQueueSize > 0 )
|
||||
{
|
||||
// Get
|
||||
CHECKF( PeekList( hQueue, ppEvent, uiIndex ) != FALSE );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOLEAN FreeEvent( EVENT *pEvent )
|
||||
{
|
||||
CHECKF( pEvent != NULL );
|
||||
|
||||
// Delete event
|
||||
MemFree( pEvent );
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
UINT32 EventQueueSize( UINT8 ubQueueID )
|
||||
{
|
||||
UINT32 uiQueueSize;
|
||||
HLIST hQueue;
|
||||
|
||||
// Get an event from queue, if one exists
|
||||
//
|
||||
|
||||
hQueue = GetQueue( ubQueueID );
|
||||
|
||||
// Get Size
|
||||
uiQueueSize = ListSize( hQueue );
|
||||
|
||||
return( uiQueueSize );
|
||||
}
|
||||
|
||||
|
||||
HLIST GetQueue( UINT8 ubQueueID )
|
||||
{
|
||||
switch( ubQueueID )
|
||||
{
|
||||
case PRIMARY_EVENT_QUEUE:
|
||||
return( hEventQueue );
|
||||
break;
|
||||
|
||||
case SECONDARY_EVENT_QUEUE:
|
||||
return( hDelayEventQueue );
|
||||
break;
|
||||
|
||||
case DEMAND_EVENT_QUEUE:
|
||||
return( hDemandEventQueue );
|
||||
break;
|
||||
|
||||
default:
|
||||
Assert( FALSE );
|
||||
return( 0 );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void SetQueue( UINT8 ubQueueID, HQUEUE hQueue )
|
||||
{
|
||||
switch( ubQueueID )
|
||||
{
|
||||
case PRIMARY_EVENT_QUEUE:
|
||||
hEventQueue = hQueue;
|
||||
break;
|
||||
|
||||
case SECONDARY_EVENT_QUEUE:
|
||||
hDelayEventQueue = hQueue;
|
||||
break;
|
||||
|
||||
case DEMAND_EVENT_QUEUE:
|
||||
hDemandEventQueue = hQueue;
|
||||
break;
|
||||
|
||||
default:
|
||||
Assert( FALSE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user