123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #pragma once
- #ifndef ICARUSINTERFACE_DEFINED
- #define ICARUSINTERFACE_DEFINED
- // IcarusInterface.h: ICARUS Interface header file.
- // -Date: ~October, 2002
- // -Created by: Mike Crowns and Aurelio Reis.
- // -Description: The new interface between a Game Engine and the Icarus Scripting Language.
- // An Interface is an Abstract Base Class with pure virtual members that MUST be implemented
- // in order for the compile to succeed. Because of this, all needed functionality can be
- // added without compromising other core systems.
- // -Usage: To use the new Icarus Interface, two classes must be derived. The first is the
- // actual Icarus Interface class which contains all relevent functionality to the scripting
- // system. The second is the Game Interface which is very much more broad and thus implemented
- // by the user. Icarus functions by calling the Game Interface to do certain tasks for it. This
- // is why the Game Interface is required to have certain functions implemented.
- // The basic Icarus Interface ABC.
- class IIcarusInterface
- {
- public:
- enum { ICARUS_INVALID = 0 };
- virtual ~IIcarusInterface();
- // Get a static singleton instance (of a specific flavor).
- static IIcarusInterface* GetIcarus(int flavor = 0,bool constructIfNecessary=true); // must be implemented along with concrete class
- static void DestroyIcarus(); // Destroy the static singleton instance.
- virtual int GetFlavor() = 0;
- virtual int Save() = 0; // Save all Icarus states.
- virtual int Load() = 0; // Load all Icarus states.
- virtual int Run(int icarusID, char* buffer, long length) = 0; // Execute a script.
- virtual void DeleteIcarusID(int &icarusID) = 0; // Delete an Icarus ID from the list (making the ID Invalid on the other end through reference).
- virtual int GetIcarusID(int gameID) = 0; // Get an Icarus ID.
- virtual int Update( int icarusID ) = 0; // Update all internal Icarus structures.
- virtual int IsRunning( int icarusID ) = 0; // Whether a Icarus is running or not.
- virtual void Completed( int icarusID, int taskID ) = 0; // Tells Icarus a task is completed.
- virtual void Precache( char* buffer, long length ) = 0; // Precache a Script in memory.
- };
- // Description: The Game Interface is used by the Icarus Interface to access specific
- // data or initiate certain things within the engine being used. It is made to be
- // as generic as possible to allow any engine to derive it's own interface for use.
- // Created: 10/08/02 by Aurelio Reis.
- class IGameInterface
- {
- protected:
- // Pure Virtual Destructor.
- virtual ~IGameInterface();
- public:
- //For system-wide prints
- enum e_DebugPrintLevel { WL_ERROR = 1, WL_WARNING, WL_VERBOSE, WL_DEBUG };
- // How many flavors are needed.
- static int s_IcarusFlavorsNeeded;
- // Get a static singleton instance (of a specific flavor).
- static IGameInterface *GetGame( int flavor = 0 );
- // Destroy the static singleton instance (NOTE: Destroy the Game Interface BEFORE the Icarus Interface).
- static void Destroy();
- // General
- // Load a script File into the destination buffer. If the script has already been loaded
- // NOTE: This is what was called before:
- /*
- // Description : Reads in a file and attaches the script directory properly
- extern int ICARUS_GetScript( const char *name, char **buf ); //g_icarus.cpp
- static int Q3_ReadScript( const char *name, void **buf )
- {
- return ICARUS_GetScript( va( "%s/%s", Q3_SCRIPT_DIR, name ), (char**)buf ); //get a (hopefully) cached file
- }
- */
- virtual int GetFlavor() = 0;
- virtual int LoadFile( const char *name, void **buf ) = 0;
- virtual void CenterPrint( const char *format, ... ) = 0;
- virtual void DebugPrint( e_DebugPrintLevel, const char *, ... ) = 0;
- virtual unsigned int GetTime( void ) = 0; //Gets the current time
- virtual int PlaySound( int taskID, int gameID, const char *name, const char *channel ) = 0;
- virtual void Lerp2Pos( int taskID, int gameID, float origin[3], float angles[3], float duration ) = 0;
- virtual void Lerp2Angles( int taskID, int gameID, float angles[3], float duration ) = 0;
- virtual int GetTag( int gameID, const char *name, int lookup, float info[3] ) = 0;
- virtual void Set( int taskID, int gameID, const char *type_name, const char *data ) = 0;
- virtual void Use( int gameID, const char *name ) = 0;
- virtual void Activate( int gameID, const char *name ) = 0;
- virtual void Deactivate( int gameID, const char *name ) = 0;
- virtual void Kill( int gameID, const char *name ) = 0;
- virtual void Remove( int gameID, const char *name ) = 0;
- virtual float Random( float min, float max ) = 0;
- virtual void Play( int taskID, int gameID, const char *type, const char *name ) = 0;
- // Camera functions
- virtual void CameraPan( float angles[3], float dir[3], float duration ) = 0;
- virtual void CameraMove( float origin[3], float duration ) = 0;
- virtual void CameraZoom( float fov, float duration ) = 0;
- virtual void CameraRoll( float angle, float duration ) = 0;
- virtual void CameraFollow( const char *name, float speed, float initLerp ) = 0;
- virtual void CameraTrack( const char *name, float speed, float initLerp ) = 0;
- virtual void CameraDistance( float dist, float initLerp ) = 0;
- virtual void CameraFade( float sr, float sg, float sb, float sa, float dr, float dg, float db, float da, float duration ) = 0;
- virtual void CameraPath( const char *name ) = 0;
- virtual void CameraEnable( void ) = 0;
- virtual void CameraDisable( void ) = 0;
- virtual void CameraShake( float intensity, int duration ) = 0;
- virtual int GetFloat( int gameID, const char *name, float *value ) = 0;
- // Should be float return type?
- virtual int GetVector( int gameID, const char *name, float value[3] ) = 0;
- virtual int GetString( int gameID, const char *name, char **value ) = 0;
- virtual int Evaluate( int p1Type, const char *p1, int p2Type, const char *p2, int operatorType ) = 0;
- virtual void DeclareVariable( int type, const char *name ) = 0;
- virtual void FreeVariable( const char *name ) = 0;
- // Save / Load functions
- virtual int WriteSaveData( unsigned long chid, void *data, int length ) = 0;
- virtual int ReadSaveData( unsigned long chid, void *address, int length, void **addressptr = NULL ) = 0;
- virtual int LinkGame( int gameID, int icarusID ) = 0;
-
- // Access functions
- virtual int CreateIcarus( int gameID) = 0;
- virtual int GetByName( const char *name ) = 0; //Polls the engine for the sequencer of the entity matching the name passed
- virtual int IsFrozen(int gameID) = 0; // (g_entities[m_ownerID].svFlags&SVF_ICARUS_FREEZE) // return -1 indicates invalid
- virtual void Free(void* data) = 0;
- virtual void* Malloc( int size ) = 0;
- virtual float MaxFloat(void) = 0;
- // Script precache functions.
- virtual void PrecacheRoff(const char* name) = 0; // G_LoadRoff
- virtual void PrecacheScript(const char* name) = 0; // must strip extension COM_StripExtension()
- virtual void PrecacheSound(const char* name) = 0; // G_SoundIndex
- virtual void PrecacheFromSet(const char* setname, const char* filename) = 0;
- };
- #endif
|