| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program 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.
- **
- ** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando *
- * *
- * $Archive:: /Commando/Code/Combat/scriptablegameobj.h $*
- * *
- * $Author:: Tom_s $*
- * *
- * $Modtime:: 1/05/02 10:52a $*
- * *
- * $Revision:: 25 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef SCRIPTABLEGAMEOBJ_H
- #define SCRIPTABLEGAMEOBJ_H
- #ifndef ALWAYS_H
- #include "always.h"
- #endif
- #ifndef BASEGAMEOBJ_H
- #include "basegameobj.h"
- #endif
- #ifndef GAMEOBJREF_H
- #include "gameobjref.h"
- #endif
- #ifndef TIMEMGR_H
- #include "timemgr.h"
- #endif
- #ifndef GAMEOBJOBSERVER_H
- #include "gameobjobserver.h"
- #endif
- #ifndef SIMPLEVEC_H
- #include "simplevec.h"
- #endif
- #ifndef VECTOR_H
- #include "vector.h"
- #endif
- #ifndef __AUDIO_EVENTS_H
- #include "audioevents.h"
- #endif
- typedef SimpleDynVecClass<GameObjObserverClass *> GameObjObserverList;
- class GameObjObserverTimerClass;
- class GameObjCustomTimerClass;
- class DamageableGameObj;
- class BuildingGameObj;
- class SoldierGameObj;
- class ScriptZoneGameObj;
- /*
- ** ScriptableGameObjDef - Defintion class for a ScriptableGameObj
- */
- class ScriptableGameObjDef : public BaseGameObjDef
- {
- public:
- ScriptableGameObjDef( void );
- virtual bool Save( ChunkSaveClass &csave );
- virtual bool Load( ChunkLoadClass &cload );
- DECLARE_EDITABLE( ScriptableGameObjDef, BaseGameObjDef );
- protected:
- DynamicVectorClass<StringClass> ScriptNameList;
- DynamicVectorClass<StringClass> ScriptParameterList;
- friend class ScriptableGameObj;
- };
- /*
- **
- */
- class ScriptableGameObj : public BaseGameObj, public ReferenceableGameObj, public AudioCallbackClass
- {
- public:
- // Constructor and Destructor
- ScriptableGameObj( void );
- virtual ~ScriptableGameObj( void );
- // Definitions
- void Init( const ScriptableGameObjDef & definition );
- void Copy_Settings( const ScriptableGameObjDef & definition );
- void Re_Init( const ScriptableGameObjDef & definition );
- virtual void Post_Re_Init( void );
- const ScriptableGameObjDef & Get_Definition( void ) const ;
- virtual void Set_Delete_Pending (void);
- // Save / Load
- virtual bool Save( ChunkSaveClass & csave );
- virtual bool Load( ChunkLoadClass & cload );
- virtual void On_Post_Load( void );
- // Thinking
- virtual void Think();
- virtual void Post_Think();
- virtual void Get_Position(Vector3 * set_pos) const = 0;
- // Observers
- void Add_Observer( GameObjObserverClass * observer );
- void Remove_Observer( GameObjObserverClass * observer );
- void Remove_All_Observers(void);
- // Start_Observers will call created on all observers. Should be used
- // in On_Post_Load (if first load), and after spawning / creating.
- // Observers added in other cases will already have Created called.
- void Start_Observers( void );
- const GameObjObserverList & Get_Observers( void ) { return Observers; }
- // This just adds to the list and calls attached, does not call Created
- void Insert_Observer( GameObjObserverClass * observer );
- // Timers
- void Start_Observer_Timer( int observer_id, float duration, int timer_id );
- void Start_Custom_Timer( ScriptableGameObj * from, float delay, int type, int param );
- // Type identification
- virtual ScriptableGameObj *As_ScriptableGameObj( void ) { return this; };
- virtual DamageableGameObj *As_DamageableGameObj( void ) { return NULL; };
- virtual BuildingGameObj *As_BuildingGameObj( void ) { return NULL; };
- virtual SoldierGameObj *As_SoldierGameObj( void ) { return NULL; };
- virtual ScriptZoneGameObj *As_ScriptZoneGameObj( void ) { return NULL; };
- ReferenceableGameObj * As_ReferenceableGameObj( void ) { return this; }
- virtual void Get_Information( StringClass & string );
- // From AudioCallbackClass
- virtual void On_Sound_Ended( SoundSceneObjClass *sound_obj );
- // Network support
- virtual bool Is_Always_Dirty( void ) { return true; }
- //virtual bool Exists_On_Client( void ) const { return true; }
- virtual void Export_Creation( BitStreamClass &packet );
- virtual void Import_Creation( BitStreamClass &packet );
- protected:
- bool ObserverCreatedPending;
- GameObjObserverList Observers;
- DynamicVectorClass<GameObjObserverTimerClass *> ObserverTimerList;
- DynamicVectorClass<GameObjCustomTimerClass *> CustomTimerList;
- };
- #endif // SCRIPTABLEGAMEOBJ_H
|