123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 Source Code is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Doom 3 Source Code is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef __SCRIPT_THREAD_H__
- #define __SCRIPT_THREAD_H__
- extern const idEventDef EV_Thread_Execute;
- extern const idEventDef EV_Thread_SetCallback;
- extern const idEventDef EV_Thread_TerminateThread;
- extern const idEventDef EV_Thread_Pause;
- extern const idEventDef EV_Thread_Wait;
- extern const idEventDef EV_Thread_WaitFrame;
- extern const idEventDef EV_Thread_WaitFor;
- extern const idEventDef EV_Thread_WaitForThread;
- extern const idEventDef EV_Thread_Print;
- extern const idEventDef EV_Thread_PrintLn;
- extern const idEventDef EV_Thread_Say;
- extern const idEventDef EV_Thread_Assert;
- extern const idEventDef EV_Thread_Trigger;
- extern const idEventDef EV_Thread_SetCvar;
- extern const idEventDef EV_Thread_GetCvar;
- extern const idEventDef EV_Thread_Random;
- extern const idEventDef EV_Thread_GetTime;
- extern const idEventDef EV_Thread_KillThread;
- extern const idEventDef EV_Thread_SetThreadName;
- extern const idEventDef EV_Thread_GetEntity;
- extern const idEventDef EV_Thread_Spawn;
- extern const idEventDef EV_Thread_SetSpawnArg;
- extern const idEventDef EV_Thread_SpawnString;
- extern const idEventDef EV_Thread_SpawnFloat;
- extern const idEventDef EV_Thread_SpawnVector;
- extern const idEventDef EV_Thread_AngToForward;
- extern const idEventDef EV_Thread_AngToRight;
- extern const idEventDef EV_Thread_AngToUp;
- extern const idEventDef EV_Thread_Sine;
- extern const idEventDef EV_Thread_Cosine;
- extern const idEventDef EV_Thread_lerp;
- extern const idEventDef EV_Thread_Normalize;
- extern const idEventDef EV_Thread_VecLength;
- extern const idEventDef EV_Thread_VecDotProduct;
- extern const idEventDef EV_Thread_VecCrossProduct;
- extern const idEventDef EV_Thread_OnSignal;
- extern const idEventDef EV_Thread_ClearSignal;
- extern const idEventDef EV_Thread_SetCamera;
- extern const idEventDef EV_Thread_FirstPerson;
- extern const idEventDef EV_Thread_TraceFraction;
- extern const idEventDef EV_Thread_TracePos;
- extern const idEventDef EV_Thread_FadeIn;
- extern const idEventDef EV_Thread_FadeOut;
- extern const idEventDef EV_Thread_FadeTo;
- extern const idEventDef EV_Thread_Restart;
- extern const idEventDef EV_Thread_rundeckcommand;
- //bc
- extern const idEventDef EV_Thread_getClassEntity;
- extern const idEventDef EV_Thread_deck_split;
- extern const idEventDef EV_Thread_deck_split2;
- extern const idEventDef EV_Thread_deck_getArg;
- extern const idEventDef EV_Thread_deck_hasArg;
- extern const idEventDef EV_callMap;
- extern const idEventDef EV_getMapname;
- extern const idEventDef EV_getworldspawnint;
- extern const idEventDef EV_Thread_SpawnDecal;
- extern const idEventDef EV_Thread_killcctvs;
- //extern const idEventDef EV_setcutscene;
- extern const idEventDef EV_getMapIndex;
- extern const idEventDef EV_callsavegame;
- class idThread : public idClass {
- private:
- static idThread *currentThread;
- idThread *waitingForThread;
- int waitingFor;
- int waitingUntil;
- idInterpreter interpreter;
- idDict spawnArgs;
-
- int threadNum;
- idStr threadName;
- int lastExecuteTime;
- int creationTime;
- bool manualControl;
- static int threadIndex;
- static idList<idThread *> threadList;
- static trace_t trace;
- void Init( void );
- void Pause( void );
- void Event_Execute( void );
- void Event_SetThreadName( const char *name );
- //
- // script callable Events
- //
- void Event_TerminateThread( int num );
- void Event_Pause( void );
- void Event_Wait( float time );
- void Event_WaitFrame( void );
- void Event_getClassEntity( const char *classname, int lastFound );
- void Event_deck_split( float index, const char* text);
- void Event_deck_split2( float index, const char* text, const char* divider);
- void Event_deck_split3( float index, const char* text, const char* divider);
- void Event_deck_getArg( const char *text );
- void Event_deck_hasArg( const char *text, const char *functionName );
- void Event_getMapname( void );
- void Event_killcctvs();
- void Event_getMapIndex( void );
-
- void Event_WaitFor( idEntity *ent );
- void Event_WaitForThread( int num );
- void Event_Print( const char *text );
- void Event_PrintLn( const char *text );
- void Event_Say( const char *text );
- void Event_Assert( float value );
- void Event_Trigger( idEntity *ent );
- void Event_SetCvar( const char *name, const char *value ) const;
- void Event_GetCvar( const char *name ) const;
- void Event_Random( float range ) const;
- #ifdef _D3XP
- void Event_RandomInt( int range ) const;
- #endif
- void Event_GetTime( void );
- void Event_KillThread( const char *name );
- void Event_GetEntity( const char *name );
- void Event_Spawn( const char *classname );
- void Event_CopySpawnArgs( idEntity *ent );
- void Event_SetSpawnArg( const char *key, const char *value );
- void Event_SpawnString( const char *key, const char *defaultvalue );
- void Event_SpawnFloat( const char *key, float defaultvalue );
- void Event_SpawnVector( const char *key, idVec3 &defaultvalue );
- void Event_ClearPersistantArgs( void );
- void Event_SetPersistantArg( const char *key, const char *value );
- void Event_GetPersistantString( const char *key );
- void Event_GetPersistantFloat( const char *key );
- void Event_GetPersistantVector( const char *key );
- void Event_AngToForward( idAngles &ang );
- void Event_AngToRight( idAngles &ang );
- void Event_AngToUp( idAngles &ang );
- void Event_GetSine( float angle );
- void Event_GetCosine( float angle );
- void Event_lerp( float value1, float value2, float amount );
- void Event_rundeckcommand( const char *command );
- void Event_floatRound( float value, float round );
- const char * Event_parseTime( float value );
- const char * Event_parseTime2( float value );
- const char * Event_parseTimeMS( int value );
- void Event_getString( const char *value );
- //void Event_SteamAddStat( const char *statname, int value );
- void Event_SteamAddTimeStat( int value, int missionIndex );
- void Event_SteamGetGlobalStat( const char *statname );
- void Event_SteamUpdateFriendTimes( int missionIndex );
- bool Event_SteamSetAchievement( const char *achievementName );
- #ifdef _D3XP
- void Event_GetArcSine( float a );
- void Event_GetArcCosine( float a );
- #endif
- void Event_GetSquareRoot( float theSquare );
- void Event_VecNormalize( idVec3 &vec );
- void Event_VecLength( idVec3 &vec );
- void Event_VecDotProduct( idVec3 &vec1, idVec3 &vec2 );
- void Event_VecCrossProduct( idVec3 &vec1, idVec3 &vec2 );
- void Event_VecToAngles( idVec3 &vec );
- #ifdef _D3XP
- void Event_VecToOrthoBasisAngles( idVec3 &vec );
- void Event_RotateVector( idVec3 &vec, idVec3 &ang );
- #endif
- void Event_OnSignal( int signal, idEntity *ent, const char *func );
- void Event_ClearSignalThread( int signal, idEntity *ent );
- void Event_SetCamera( idEntity *ent );
- void Event_FirstPerson( void );
- void Event_Trace( const idVec3 &start, const idVec3 &end, const idVec3 &mins, const idVec3 &maxs, int contents_mask, idEntity *passEntity );
- void Event_TracePoint( const idVec3 &start, const idVec3 &end, int contents_mask, idEntity *passEntity );
- void Event_GetTraceSky( void );
- void Event_GetTraceFraction( void );
- void Event_GetTraceEndPos( void );
- void Event_GetTraceNormal( void );
- void Event_GetTraceEntity( void );
- void Event_GetTraceJoint( void );
- void Event_GetTraceBody( void );
- void Event_FadeIn( idVec3 &color, float time );
- void Event_FadeOut( idVec3 &color, float time );
- void Event_FadeTo( idVec3 &color, float alpha, float time );
- void Event_SetShaderParm( int parmnum, float value );
- void Event_StartMusic( const char *name );
- void Event_Warning( const char *text );
- void Event_Error( const char *text );
- void Event_StrLen( const char *string );
- void Event_StrLeft( const char *string, int num );
- void Event_StrRight( const char *string, int num );
- void Event_StrSkip( const char *string, int num );
- void Event_StrMid( const char *string, int start, int num );
- void Event_StrToFloat( const char *string );
- void Event_RadiusDamage( const idVec3 &origin, idEntity *inflictor, idEntity *attacker, idEntity *ignore, const char *damageDefName, float dmgPower );
- void Event_IsClient( void );
- void Event_IsMultiplayer( void );
- void Event_GetFrameTime( void );
- void Event_GetTicsPerSecond( void );
- void Event_CacheSoundShader( const char *soundName );
- void Event_DebugLine( const idVec3 &color, const idVec3 &start, const idVec3 &end, const float lifetime );
- void Event_DebugArrow( const idVec3 &color, const idVec3 &start, const idVec3 &end, const int size, const float lifetime );
- void Event_DebugCircle( const idVec3 &color, const idVec3 &origin, const idVec3 &dir, const float radius, const int numSteps, const float lifetime );
- void Event_DebugBounds( const idVec3 &color, const idVec3 &mins, const idVec3 &maxs, const float lifetime );
- void Event_DrawText( const char *text, const idVec3 &origin, float scale, const idVec3 &color, const int align, const float lifetime );
- void Event_InfluenceActive( void );
- public:
- CLASS_PROTOTYPE( idThread );
-
- idThread();
- idThread( idEntity *self, const function_t *func );
- idThread( const function_t *func );
- idThread( idInterpreter *source, const function_t *func, int args );
- idThread( idInterpreter *source, idEntity *self, const function_t *func, int args );
- virtual ~idThread();
- // tells the thread manager not to delete this thread when it ends
- void ManualDelete( void );
- // save games
- void Save( idSaveGame *savefile ) const; // archives object for save game file
- void Restore( idRestoreGame *savefile ); // unarchives object from save game file
- void EnableDebugInfo( void ) { interpreter.debug = true; };
- void DisableDebugInfo( void ) { interpreter.debug = false; };
- void WaitMS( int time );
- void WaitSec( float time );
- void WaitFrame( void );
-
- // NOTE: If this is called from within a event called by this thread, the function arguments will be invalid after calling this function.
- void CallFunction( const function_t *func, bool clearStack );
- // NOTE: If this is called from within a event called by this thread, the function arguments will be invalid after calling this function.
- void CallFunction( idEntity *obj, const function_t *func, bool clearStack );
- //BC
- //from DarkMod
- bool CallFunctionArgs(const function_t *func, bool clearStack, const char *fmt, ...);
-
- //bc
- void Event_callMap( const char *text );
- void Event_getworldspawnint( const char *keyname );
- void Event_setcutscene( int value );
- void Event_SpawnDecal( idVec3 const &pos, idVec3 const &endpos, float size, const char* material );
- void Event_callsavegame( int savetype );
-
-
- void DisplayInfo();
- static idThread *GetThread( int num );
- static void ListThreads_f( const idCmdArgs &args );
- static void Restart( void );
- static void ObjectMoveDone( int threadnum, idEntity *obj );
-
- static idList<idThread*>& GetThreads ( void );
-
- bool IsDoneProcessing ( void );
- bool IsDying ( void );
-
- void End( void );
- static void KillThread( const char *name );
- static void KillThread( int num );
- bool Execute( void );
- void ManualControl( void ) { manualControl = true; CancelEvents( &EV_Thread_Execute ); };
- void DoneProcessing( void ) { interpreter.doneProcessing = true; };
- void ContinueProcessing( void ) { interpreter.doneProcessing = false; };
- bool ThreadDying( void ) { return interpreter.threadDying; };
- void EndThread( void ) { interpreter.threadDying = true; };
- bool IsWaiting( void );
- void ClearWaitFor( void );
- bool IsWaitingFor( idEntity *obj );
- void ObjectMoveDone( idEntity *obj );
- void ThreadCallback( idThread *thread );
- void DelayedStart( int delay );
- bool Start( void );
- idThread *WaitingOnThread( void );
- void SetThreadNum( int num );
- int GetThreadNum( void );
- void SetThreadName( const char *name );
- const char *GetThreadName( void );
- void Error( const char *fmt, ... ) const id_attribute((format(printf,2,3)));
- void Warning( const char *fmt, ... ) const id_attribute((format(printf,2,3)));
-
- static idThread *CurrentThread( void );
- static int CurrentThreadNum( void );
- static bool BeginMultiFrameEvent( idEntity *ent, const idEventDef *event );
- static void EndMultiFrameEvent( idEntity *ent, const idEventDef *event );
- static void ReturnString( const char *text );
- static void ReturnFloat( float value );
- static void ReturnInt( int value );
- static void ReturnVector( idVec3 const &vec );
- static void ReturnEntity( idEntity *ent );
- };
- /*
- ================
- idThread::WaitingOnThread
- ================
- */
- ID_INLINE idThread *idThread::WaitingOnThread( void ) {
- return waitingForThread;
- }
- /*
- ================
- idThread::SetThreadNum
- ================
- */
- ID_INLINE void idThread::SetThreadNum( int num ) {
- threadNum = num;
- }
- /*
- ================
- idThread::GetThreadNum
- ================
- */
- ID_INLINE int idThread::GetThreadNum( void ) {
- return threadNum;
- }
- /*
- ================
- idThread::GetThreadName
- ================
- */
- ID_INLINE const char *idThread::GetThreadName( void ) {
- return threadName.c_str();
- }
- /*
- ================
- idThread::GetThreads
- ================
- */
- ID_INLINE idList<idThread*>& idThread::GetThreads ( void ) {
- return threadList;
- }
- /*
- ================
- idThread::IsDoneProcessing
- ================
- */
- ID_INLINE bool idThread::IsDoneProcessing ( void ) {
- return interpreter.doneProcessing;
- }
- /*
- ================
- idThread::IsDying
- ================
- */
- ID_INLINE bool idThread::IsDying ( void ) {
- return interpreter.threadDying;
- }
- #endif /* !__SCRIPT_THREAD_H__ */
|