| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /*
- ** 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/Scripts/scripts.h $*
- * *
- * $Author:: Byon_g $*
- * *
- * $Modtime:: 11/29/01 11:08a $*
- * *
- * $Revision:: 26 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef SCRIPTS_H
- #define SCRIPTS_H
- #include "scriptevents.h"
- #include "scriptcommands.h"
- #include "scriptregistrant.h"
- #include "string_ids.h"
- #include <stdlib.h>
- class CombatSound;
- class ScriptFactory;
- // ScriptVariables
- class ScriptVariableClass
- {
- public:
- ScriptVariableClass( void * data_ptr, int data_size, int id, ScriptVariableClass * next ) :
- DataPtr( data_ptr ),
- DataSize( data_size ),
- ID( id ),
- Next( next ) {}
- void * Get_Data_Ptr( void ) { return DataPtr; }
- int Get_Data_Size( void ) { return DataSize; }
- int Get_ID( void ) { return ID; }
- ScriptVariableClass * Get_Next( void ) { return Next; }
- private:
- void * DataPtr;
- int DataSize;
- int ID;
- ScriptVariableClass * Next;
- };
- class ScriptImpClass : public ScriptClass
- {
- public:
- static void Set_Request_Destroy_Func(void (*function)(ScriptClass*));
- ScriptImpClass();
- virtual ~ScriptImpClass();
- // Retrieve the name of the script.
- const char* Get_Name(void);
- // Retrieve owner object of the script.
- GameObject* Owner()
- {return mOwner;}
- GameObject** Get_Owner_Ptr()
- {return &mOwner;}
- // Set the scripts parameter string.
- void Set_Parameters_String(const char* params);
- // Retrieve the scripts parameter string.
- void Get_Parameters_String(char* buffer, unsigned int size);
- // Retrieve the parameter count.
- int Get_Parameter_Count(void)
- {return mArgC;}
- // Retrieve a parameter by name.
- const char* Get_Parameter(const char* name);
- // Retrieve a parameter by is ordinal position in the parameter list.
- const char* Get_Parameter(int index);
- // Get a parameter as an integer
- int Get_Int_Parameter(int index)
- {return atoi(Get_Parameter(index));}
- // Get a parameter as an integer
- int Get_Int_Parameter(const char* parameterName);
- // Get a parameter as a float
- float Get_Float_Parameter(int index)
- {return (float)atof(Get_Parameter(index));}
- // Get a parameter as a float
- float Get_Float_Parameter(const char* parameterName);
- // Get a parameter as a vector3
- Vector3 Get_Vector3_Parameter(int index);
- // Get a parameter as a float
- Vector3 Get_Vector3_Parameter(const char* parameterName);
- // Get a parameter as an float
- int Get_Parameter_Index(const char* parameterName);
- // Set the script factory used to create this script.
- //
- // This must only be called by the script factory upon creation of
- // the script.
- void SetFactory(ScriptFactory* factory)
- {mFactory = factory;}
- /* Event Functions which will be called as events happen
- * Scripts can choose to override any of these functions,
- * otherwise the following empty functions will be called
- */
- virtual void Created( GameObject * obj ) {}
- virtual void Destroyed( GameObject * obj ) {}
- virtual void Killed( GameObject * obj, GameObject * killer ) {}
- virtual void Damaged( GameObject * obj, GameObject * damager, float amount ) {}
- virtual void Custom( GameObject * obj, int type, int param, GameObject * sender ) {}
- virtual void Sound_Heard( GameObject * obj, const CombatSound & sound ) {}
- virtual void Enemy_Seen( GameObject * obj, GameObject * enemy ) {}
- virtual void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) {}
- virtual void Timer_Expired( GameObject * obj, int timer_id ) {}
- virtual void Animation_Complete( GameObject * obj, const char * animation_name ) {}
- virtual void Poked( GameObject * obj, GameObject * poker ) {}
- virtual void Entered( GameObject * obj, GameObject * enterer ) {}
- virtual void Exited( GameObject * obj, GameObject * exiter ) {}
- // Save and Load specific script
- virtual void Save_Data(ScriptSaver& saver) {}
- virtual void Load_Data(ScriptLoader& loader) {}
- // Auto Variable Save and Load
- virtual void Register_Auto_Save_Variables( void ) {}
- void Auto_Save_Variable( void * data_ptr, int data_size, int id );
- protected:
- void Destroy_Script(void);
- void Attach(GameObject* obj);
- void Detach(GameObject* obj);
- virtual void Save(ScriptSaver& saver);
- virtual void Load(ScriptLoader& loader);
- private:
- static void (*Request_Destroy_Script)(ScriptClass*);
- void Clear_Parameters(void);
- void Set_Parameter(int index, const char* str);
- GameObject* mOwner;
- int mArgC;
- char** mArgV;
- // The factory reference is provided to the script class so that it
- // knows what it is (IE: Name, Parameter description).
- //
- // The factory reference could also be used for script cloning.
- // (The script would use this factory to create a new instance of
- // itself then copy its state to the new script instance.)
- ScriptFactory* mFactory;
- // Auto Variable Save and Load
- ScriptVariableClass * AutoVariableList;
- };
- // Declare script definition
- #define DECLARE_SCRIPT(x, d) \
- REGISTER_SCRIPT(x, d) \
- class x : public ScriptImpClass
- // Load / Save Macros
- #define SAVE_BEGIN()
- #define SAVE_DATA(id, var) Commands->Save_Data(saver, id, sizeof(var), &var)
- #define SAVE_STRING(id, string) Commands->Save_Data(saver, id, strlen(string), string)
- #define SAVE_END()
- #define LOAD_BEGIN() \
- { \
- int id; \
- while (Commands->Load_Begin(loader, &id)) { \
- switch (id) {
- #define LOAD_DATA(id, var) \
- case id: \
- Commands->Load_Data(loader, sizeof(var), &var); \
- break;
- #define LOAD_END() \
- default: \
- break; \
- } \
- Commands->Load_End(loader); \
- } \
- }
- #define LOAD_STRING(id, var) LOAD_DATA(id, var)
- // Auto Variable Save/Load
- #define REGISTER_VARIABLES() public: void Register_Auto_Save_Variables( void )
- #define SAVE_VARIABLE( x, id ) Auto_Save_Variable( &x, sizeof( x ), id )
- extern ScriptCommands* Commands;
- // Array Macros
- #define ARRAY_ELEMENT_COUNT( x ) ( sizeof( x ) / sizeof( x[0] ) )
- #define RANDOM_ARRAY_ELEMENT( x ) ( x[Commands->Get_Random_Int( 0, ARRAY_ELEMENT_COUNT( x ) )] )
- #endif // SCRIPTS_H
|