/* =========================================================================== 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 . 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 __GAME_FX_H__ #define __GAME_FX_H__ #include "renderer/RenderWorld.h" #include "Entity.h" /* =============================================================================== Special effects. =============================================================================== */ typedef struct { renderLight_t renderLight; // light presented to the renderer qhandle_t lightDefHandle; // handle to renderer light def renderEntity_t renderEntity; // used to present a model to the renderer int modelDefHandle; // handle to static renderer model float delay; int particleSystem; int start; bool soundStarted; bool shakeStarted; bool decalDropped; bool launched; } idFXLocalAction; class idEntityFx : public idEntity { public: CLASS_PROTOTYPE( idEntityFx ); idEntityFx(); virtual ~idEntityFx(); void Spawn( void ); void Save( idSaveGame *savefile ) const; void Restore( idRestoreGame *savefile ); virtual void Think(); void Setup( const char *fx ); void Run( int time ); void Start( int time ); void Stop( void ); const int Duration( void ); const char * EffectName( void ); const char * Joint( void ); const bool Done(); virtual void WriteToSnapshot( idBitMsgDelta &msg ) const; virtual void ReadFromSnapshot( const idBitMsgDelta &msg ); virtual void ClientPredictionThink( void ); static idEntityFx * StartFx( const char *fx, const idVec3 *useOrigin, const idMat3 *useAxis, idEntity *ent, bool bind ); protected: void Event_Trigger( idEntity *activator ); void Event_ClearFx( void ); void CleanUp( void ); void CleanUpSingleAction( const idFXSingleAction& fxaction, idFXLocalAction& laction ); void ApplyFade( const idFXSingleAction& fxaction, idFXLocalAction& laction, const int time, const int actualStart ); int started; int nextTriggerTime; const idDeclFX * fxEffect; // GetFX() should be called before using fxEffect as a pointer idList actions; idStr systemName; }; class idTeleporter : public idEntityFx { public: CLASS_PROTOTYPE( idTeleporter ); private: // teleporters to this location void Event_DoAction( idEntity *activator ); }; #endif /* !__GAME_FX_H__ */