123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- // IcarusImplementation.h
- #ifndef ICARUSIMPLEMENTATION_DEFINED
- #define ICARUSIMPLEMENTATION_DEFINED
- #ifndef ICARUSINTERFACE_DEFINED
- #include "IcarusInterface.h"
- #endif
- #pragma warning( disable : 4786 ) // identifier was truncated
- #pragma warning (push, 3) // go back down to 3 for the stl include
- #pragma warning (disable:4503) // decorated name length xceeded, name was truncated
- #include <string>
- #include <vector>
- #include <map>
- #include <list>
- #include <algorithm>
- #pragma warning (pop)
- #pragma warning (disable:4503) // decorated name length xceeded, name was truncated
- using namespace std;
- class CSequence;
- class CSequencer;
- class CIcarusSequencer;
- class CIcarusSequence;
- class CIcarus : public IIcarusInterface
- {
- public:
- CIcarus(int flavor);
- virtual ~CIcarus();
- inline IGameInterface* GetGame() {return IGameInterface::GetGame(m_flavor);};
- enum
- {
- MAX_STRING_SIZE = 256,
- MAX_FILENAME_LENGTH = 1024,
- };
- protected:
- int m_flavor;
- int m_nextSequencerID;
- int m_GUID;
- typedef list< CSequence * > sequence_l;
- typedef list< CSequencer * > sequencer_l;
- typedef map < int, CSequencer* > sequencer_m;
- sequence_l m_sequences;
- sequencer_l m_sequencers;
- sequencer_m m_sequencerMap;
- typedef map < string, unsigned char > signal_m;
- signal_m m_signals;
- static double ICARUS_VERSION;
- #ifdef _DEBUG
- int m_DEBUG_NumSequencerAlloc;
- int m_DEBUG_NumSequencerFreed;
- int m_DEBUG_NumSequencerResidual;
- int m_DEBUG_NumSequenceAlloc;
- int m_DEBUG_NumSequenceFreed;
- int m_DEBUG_NumSequenceResidual;
- #endif
- public:
- static int s_flavorsAvailable;
- static CIcarus** s_instances;
- // mandatory overrides
- // Get the current Game flavor.
- int GetFlavor();
- int Save();
- int Load();
- int Run(int icarusID, char* buffer, long length);
- void DeleteIcarusID(int& icarusID);
- int GetIcarusID(int ownerID);
- int Update(int icarusID);
- int IsRunning(int icarusID);
- void Completed( int icarusID, int taskID );
- void Precache(char* buffer, long length);
- protected:
- void Delete();
- void Free();
- public:
- CSequence* GetSequence(int id);
- void DeleteSequence( CSequence *sequence );
- int AllocateSequences( int numSequences, int *idTable );
- CSequencer* FindSequencer(int sequencerID);
- CSequence* GetSequence();
- protected:
- int SaveSequenceIDTable();
- int SaveSequences();
- int SaveSequencers();
- int SaveSignals();
- int LoadSignals();
- int LoadSequence();
- int LoadSequences();
- int LoadSequencers();
- public:
- void Signal( const char *identifier );
- bool CheckSignal( const char *identifier );
- void ClearSignal( const char *identifier );
- // Overloaded new operator.
- inline void *operator new( size_t size )
- {
- return IGameInterface::GetGame()->Malloc( size );
- }
- // Overloaded delete operator.
- inline void operator delete( void *pRawData )
- {
- // Free the Memory.
- IGameInterface::GetGame()->Free( pRawData );
- }
- public:
- enum
- {
- TK_EOF = -1,
- TK_UNDEFINED,
- TK_COMMENT,
- TK_EOL,
- TK_CHAR,
- TK_STRING,
- TK_INT,
- TK_INTEGER = TK_INT,
- TK_FLOAT,
- TK_IDENTIFIER,
- TK_USERDEF,
- TK_BLOCK_START = TK_USERDEF,
- TK_BLOCK_END,
- TK_VECTOR_START,
- TK_VECTOR_END,
- TK_OPEN_PARENTHESIS,
- TK_CLOSED_PARENTHESIS,
- TK_VECTOR,
- TK_GREATER_THAN,
- TK_LESS_THAN,
- TK_EQUALS,
- TK_NOT,
- NUM_USER_TOKENS
- };
- //ID defines
- enum
- {
- ID_AFFECT = NUM_USER_TOKENS,
- ID_SOUND,
- ID_MOVE,
- ID_ROTATE,
- ID_WAIT,
- ID_BLOCK_START,
- ID_BLOCK_END,
- ID_SET,
- ID_LOOP,
- ID_LOOPEND,
- ID_PRINT,
- ID_USE,
- ID_FLUSH,
- ID_RUN,
- ID_KILL,
- ID_REMOVE,
- ID_CAMERA,
- ID_GET,
- ID_RANDOM,
- ID_IF,
- ID_ELSE,
- ID_REM,
- ID_TASK,
- ID_DO,
- ID_DECLARE,
- ID_FREE,
- ID_DOWAIT,
- ID_SIGNAL,
- ID_WAITSIGNAL,
- ID_PLAY,
- ID_TAG,
- ID_EOF,
- NUM_IDS
- };
- //Type defines
- enum
- {
- //Wait types
- TYPE_WAIT_COMPLETE = NUM_IDS,
- TYPE_WAIT_TRIGGERED,
- //Set types
- TYPE_ANGLES,
- TYPE_ORIGIN,
- //Affect types
- TYPE_INSERT,
- TYPE_FLUSH,
-
- //Camera types
- TYPE_PAN,
- TYPE_ZOOM,
- TYPE_MOVE,
- TYPE_FADE,
- TYPE_PATH,
- TYPE_ENABLE,
- TYPE_DISABLE,
- TYPE_SHAKE,
- TYPE_ROLL,
- TYPE_TRACK,
- TYPE_DISTANCE,
- TYPE_FOLLOW,
-
- //Variable type
- TYPE_VARIABLE,
- TYPE_EOF,
- NUM_TYPES
- };
- // Used by the new Icarus Save code.
- enum { MAX_BUFFER_SIZE = 100000 };
- unsigned long m_ulBufferCurPos;
- unsigned long m_ulBytesRead;
- unsigned char *m_byBuffer;
- // Destroy the File Buffer.
- void DestroyBuffer();
- // Create the File Buffer.
- void CreateBuffer();
- // Reset the buffer completely.
- void ResetBuffer();
- // Write to a buffer.
- void BufferWrite( void *pSrcData, unsigned long ulNumBytesToWrite );
- // Read from a buffer.
- void BufferRead( void *pDstBuff, unsigned long ulNumBytesToRead );
- };
- #endif
|