parameter.h 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : WWSaveLoad *
  23. * *
  24. * $Archive:: /Commando/Code/wwsaveload/parameter.h $*
  25. * *
  26. * Org Author:: Patrick Smith *
  27. * *
  28. * Author:: Kenny Mitchell *
  29. * *
  30. * $Modtime:: 5/29/02 11:00a $*
  31. * *
  32. * $Revision:: 38 $*
  33. * *
  34. *---------------------------------------------------------------------------------------------*
  35. * Functions: *
  36. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  37. #if defined(_MSC_VER)
  38. #pragma once
  39. #endif
  40. #ifndef __PARAMETER_H
  41. #define __PARAMETER_H
  42. #include "always.h"
  43. #include <string.h>
  44. #include <stdlib.h>
  45. #include "parametertypes.h"
  46. #include "vector.h"
  47. #include "wwstring.h"
  48. #include "bittype.h"
  49. #include "obbox.h"
  50. //////////////////////////////////////////////////////////////////////////////////
  51. // Forward declarations
  52. //////////////////////////////////////////////////////////////////////////////////
  53. class DefParameterClass;
  54. //////////////////////////////////////////////////////////////////////////////////
  55. //
  56. // ParameterClass
  57. //
  58. //////////////////////////////////////////////////////////////////////////////////
  59. class ParameterClass
  60. {
  61. public:
  62. typedef enum
  63. {
  64. TYPE_INT = 0,
  65. TYPE_FLOAT,
  66. TYPE_STRING,
  67. TYPE_VECTOR3,
  68. TYPE_MATRIX3D,
  69. TYPE_BOOL,
  70. TYPE_TRANSITION,
  71. TYPE_MODELDEFINITIONID,
  72. TYPE_FILENAME,
  73. TYPE_ENUM,
  74. TYPE_GAMEOBJDEFINITIONID,
  75. TYPE_SCRIPT,
  76. TYPE_SOUND_FILENAME,
  77. TYPE_ANGLE,
  78. TYPE_WEAPONOBJDEFINITIONID,
  79. TYPE_AMMOOBJDEFINITIONID,
  80. TYPE_SOUNDDEFINITIONID,
  81. TYPE_COLOR,
  82. TYPE_PHYSDEFINITIONID,
  83. TYPE_EXPLOSIONDEFINITIONID,
  84. TYPE_DEFINITIONIDLIST,
  85. TYPE_ZONE,
  86. TYPE_FILENAMELIST,
  87. TYPE_SEPARATOR,
  88. TYPE_GENERICDEFINITIONID,
  89. TYPE_SCRIPTLIST,
  90. TYPE_VECTOR2,
  91. TYPE_RECT,
  92. TYPE_TEXTURE_FILENAME,
  93. TYPE_STRINGSDB_ID
  94. } Type;
  95. //////////////////////////////////////////////////////////////////////////////
  96. // Public constructors/destructors
  97. //////////////////////////////////////////////////////////////////////////////
  98. ParameterClass (void);
  99. ParameterClass (const ParameterClass &src);
  100. virtual ~ParameterClass (void);
  101. //////////////////////////////////////////////////////////////////////////////
  102. // Public operators
  103. //////////////////////////////////////////////////////////////////////////////
  104. const ParameterClass & operator= (const ParameterClass &src);
  105. virtual bool operator== (const ParameterClass &src) = 0;
  106. //////////////////////////////////////////////////////////////////////////////
  107. // Public methods
  108. //////////////////////////////////////////////////////////////////////////////
  109. // RTTI
  110. virtual DefParameterClass * As_DefParameterClass (void) { return NULL; }
  111. // Type identification (see paramtypes.h in wwsaveload)
  112. virtual Type Get_Type (void) const = 0;
  113. virtual bool Is_Type (Type type) const { return false; }
  114. // Modification
  115. virtual bool Is_Modifed (void) const { return IsModified; }
  116. virtual void Set_Modified (bool onoff = true) { IsModified = onoff; }
  117. // Display name methods
  118. virtual const char * Get_Name (void) const;
  119. virtual void Set_Name (const char *new_name);
  120. // Units display methods
  121. virtual const char * Get_Units_Name (void) const;
  122. virtual void Set_Units_Name (const char *units_name);
  123. // Copy methods
  124. virtual void Copy_Value (const ParameterClass &src) { };
  125. //////////////////////////////////////////////////////////////////////////////
  126. // Static methods
  127. //////////////////////////////////////////////////////////////////////////////
  128. // Virtual constructor used to create a new instance of any parameter type
  129. static ParameterClass * Construct (ParameterClass::Type type, void *data, const char *param_name);
  130. private:
  131. //////////////////////////////////////////////////////////////////////////////
  132. // Private member data
  133. //////////////////////////////////////////////////////////////////////////////
  134. bool IsModified;
  135. const char * m_Name;
  136. StringClass m_UnitsName;
  137. };
  138. //////////////////////////////////////////////////////////////////////////////////
  139. // ParameterClass
  140. //////////////////////////////////////////////////////////////////////////////////
  141. inline
  142. ParameterClass::ParameterClass (void)
  143. : m_Name (NULL),
  144. IsModified (false)
  145. {
  146. return ;
  147. }
  148. //////////////////////////////////////////////////////////////////////////////////
  149. // ParameterClass
  150. //////////////////////////////////////////////////////////////////////////////////
  151. inline
  152. ParameterClass::ParameterClass (const ParameterClass &src)
  153. : m_Name (NULL),
  154. IsModified (false)
  155. {
  156. (*this) = src;
  157. return ;
  158. }
  159. //////////////////////////////////////////////////////////////////////////////////
  160. // ~ParameterClass
  161. //////////////////////////////////////////////////////////////////////////////////
  162. inline
  163. ParameterClass::~ParameterClass (void)
  164. {
  165. Set_Name (NULL);
  166. return ;
  167. }
  168. //////////////////////////////////////////////////////////////////////////////////
  169. // operator=
  170. //////////////////////////////////////////////////////////////////////////////////
  171. inline const ParameterClass &
  172. ParameterClass::operator= (const ParameterClass &src)
  173. {
  174. IsModified = src.IsModified;
  175. Set_Name (src.m_Name);
  176. return *this;
  177. }
  178. //////////////////////////////////////////////////////////////////////////////////
  179. // Get_Name
  180. //////////////////////////////////////////////////////////////////////////////////
  181. inline const char *
  182. ParameterClass::Get_Name (void) const
  183. {
  184. return m_Name;
  185. }
  186. //////////////////////////////////////////////////////////////////////////////////
  187. // Set_Name
  188. //////////////////////////////////////////////////////////////////////////////////
  189. inline void
  190. ParameterClass::Set_Name (const char *new_name)
  191. {
  192. if (m_Name != NULL) {
  193. ::free ((void *)m_Name);
  194. m_Name = NULL;
  195. }
  196. if (new_name != NULL) {
  197. m_Name = ::strdup (new_name);
  198. }
  199. return ;
  200. }
  201. //////////////////////////////////////////////////////////////////////////////////
  202. // Get_Units_Name
  203. //////////////////////////////////////////////////////////////////////////////////
  204. inline const char *
  205. ParameterClass::Get_Units_Name (void) const
  206. {
  207. return m_UnitsName;
  208. }
  209. //////////////////////////////////////////////////////////////////////////////////
  210. // Set_Units_Name
  211. //////////////////////////////////////////////////////////////////////////////////
  212. inline void
  213. ParameterClass::Set_Units_Name (const char *new_name)
  214. {
  215. m_UnitsName = new_name;
  216. return ;
  217. }
  218. //////////////////////////////////////////////////////////////////////////////////
  219. //
  220. // StringParameterClass
  221. //
  222. //////////////////////////////////////////////////////////////////////////////////
  223. class StringParameterClass : public ParameterClass
  224. {
  225. public:
  226. //////////////////////////////////////////////////////////////////////////////
  227. // Public constructors/destructors
  228. //////////////////////////////////////////////////////////////////////////////
  229. StringParameterClass (StringClass *string);
  230. StringParameterClass (const StringParameterClass &src);
  231. virtual ~StringParameterClass (void) {}
  232. //////////////////////////////////////////////////////////////////////////////
  233. // Public operators
  234. //////////////////////////////////////////////////////////////////////////////
  235. const StringParameterClass & operator= (const StringParameterClass &src);
  236. bool operator== (const StringParameterClass &src);
  237. bool operator== (const ParameterClass &src);
  238. //////////////////////////////////////////////////////////////////////////////
  239. // Public methods
  240. //////////////////////////////////////////////////////////////////////////////
  241. // Type identification
  242. virtual Type Get_Type (void) const { return TYPE_STRING; }
  243. virtual bool Is_Type (Type type) const { return (type == TYPE_STRING) || ParameterClass::Is_Type (type); }
  244. // Data manipulation
  245. virtual const char * Get_String (void) const;
  246. virtual void Set_String (const char *string);
  247. // Copy methods
  248. virtual void Copy_Value (const ParameterClass &src);
  249. protected:
  250. //////////////////////////////////////////////////////////////////////////////
  251. // Private member data
  252. //////////////////////////////////////////////////////////////////////////////
  253. StringClass * m_String;
  254. };
  255. //////////////////////////////////////////////////////////////////////////////////
  256. //
  257. // FilenameParameterClass
  258. //
  259. //////////////////////////////////////////////////////////////////////////////////
  260. class FilenameParameterClass : public StringParameterClass
  261. {
  262. public:
  263. //////////////////////////////////////////////////////////////////////////////
  264. // Public constructors/destructors
  265. //////////////////////////////////////////////////////////////////////////////
  266. FilenameParameterClass (StringClass *string);
  267. FilenameParameterClass (const FilenameParameterClass &src);
  268. virtual ~FilenameParameterClass (void) {}
  269. //////////////////////////////////////////////////////////////////////////////
  270. // Public operators
  271. //////////////////////////////////////////////////////////////////////////////
  272. const FilenameParameterClass & operator= (const FilenameParameterClass &src);
  273. bool operator== (const FilenameParameterClass &src);
  274. bool operator== (const ParameterClass &src);
  275. //////////////////////////////////////////////////////////////////////////////
  276. // Public methods
  277. //////////////////////////////////////////////////////////////////////////////
  278. // Type identification
  279. virtual Type Get_Type (void) const { return TYPE_FILENAME; }
  280. virtual bool Is_Type (Type type) const { return (type == TYPE_FILENAME) || StringParameterClass::Is_Type (type); }
  281. // Copy methods
  282. virtual void Copy_Value (const ParameterClass &src);
  283. virtual void Set_Extension (const char *extension) { m_Extension = extension; }
  284. virtual const char * Get_Extension (void) const { return m_Extension; }
  285. virtual void Set_Description (const char *desc) { m_Description = desc; }
  286. virtual const char * Get_Description (void) const { return m_Description; }
  287. protected:
  288. //////////////////////////////////////////////////////////////////////////////
  289. // Protected member data
  290. //////////////////////////////////////////////////////////////////////////////
  291. StringClass m_Extension;
  292. StringClass m_Description;
  293. };
  294. //////////////////////////////////////////////////////////////////////////////////
  295. //
  296. // TextureFilenameParameterClass
  297. //
  298. //////////////////////////////////////////////////////////////////////////////////
  299. class TextureFilenameParameterClass : public FilenameParameterClass
  300. {
  301. public:
  302. //////////////////////////////////////////////////////////////////////////////
  303. // Public constructors/destructors
  304. //////////////////////////////////////////////////////////////////////////////
  305. TextureFilenameParameterClass(StringClass *string);
  306. TextureFilenameParameterClass(const TextureFilenameParameterClass& src);
  307. virtual ~TextureFilenameParameterClass() {}
  308. //////////////////////////////////////////////////////////////////////////////
  309. // Public methods
  310. //////////////////////////////////////////////////////////////////////////////
  311. // Type identification
  312. virtual Type Get_Type (void) const { return TYPE_TEXTURE_FILENAME; }
  313. virtual bool Is_Type (Type type) const { return (type == TYPE_TEXTURE_FILENAME) || StringParameterClass::Is_Type (type); }
  314. void Set_Show_Alpha(bool show) { Show_Alpha=show; }
  315. bool Get_Show_Alpha() const { return Show_Alpha; }
  316. void Set_Show_Texture(bool show) { Show_Texture=show; }
  317. bool Get_Show_Texture() const { return Show_Texture; }
  318. // Copy methods
  319. virtual void Copy_Value (const ParameterClass &src);
  320. protected:
  321. bool Show_Alpha;
  322. bool Show_Texture;
  323. };
  324. //////////////////////////////////////////////////////////////////////////////////
  325. //
  326. // SoundFilenameParameterClass
  327. //
  328. //////////////////////////////////////////////////////////////////////////////////
  329. class SoundFilenameParameterClass : public FilenameParameterClass
  330. {
  331. public:
  332. //////////////////////////////////////////////////////////////////////////////
  333. // Public constructors/destructors
  334. //////////////////////////////////////////////////////////////////////////////
  335. SoundFilenameParameterClass (StringClass *string);
  336. SoundFilenameParameterClass (const SoundFilenameParameterClass &src);
  337. virtual ~SoundFilenameParameterClass (void) {}
  338. //////////////////////////////////////////////////////////////////////////////
  339. // Public operators
  340. //////////////////////////////////////////////////////////////////////////////
  341. const SoundFilenameParameterClass & operator= (const SoundFilenameParameterClass &src);
  342. bool operator== (const SoundFilenameParameterClass &src);
  343. //////////////////////////////////////////////////////////////////////////////
  344. // Public methods
  345. //////////////////////////////////////////////////////////////////////////////
  346. // Type identification
  347. virtual Type Get_Type (void) const { return TYPE_SOUND_FILENAME; }
  348. virtual bool Is_Type (Type type) const { return (type == TYPE_SOUND_FILENAME) || FilenameParameterClass::Is_Type (type); }
  349. };
  350. //////////////////////////////////////////////////////////////////////////////////
  351. //
  352. // EnumParameterClass
  353. //
  354. //////////////////////////////////////////////////////////////////////////////////
  355. class EnumParameterClass : public ParameterClass
  356. {
  357. public:
  358. //////////////////////////////////////////////////////////////////////////////
  359. // Public constructors/destructors
  360. //////////////////////////////////////////////////////////////////////////////
  361. EnumParameterClass (int *value);
  362. EnumParameterClass (const EnumParameterClass &src);
  363. virtual ~EnumParameterClass (void) {}
  364. //////////////////////////////////////////////////////////////////////////////
  365. // Public operators
  366. //////////////////////////////////////////////////////////////////////////////
  367. const EnumParameterClass & operator= (const EnumParameterClass &src);
  368. bool operator== (const EnumParameterClass &src);
  369. bool operator== (const ParameterClass &src);
  370. //////////////////////////////////////////////////////////////////////////////
  371. // Public methods
  372. //////////////////////////////////////////////////////////////////////////////
  373. // Type identification
  374. virtual Type Get_Type (void) const { return TYPE_ENUM; }
  375. virtual bool Is_Type (Type type) const { return (type == TYPE_ENUM) || ParameterClass::Is_Type (type); }
  376. // Data manipulation
  377. virtual void __cdecl Add_Values (const char *first_name, int first_value, ...);
  378. virtual void Add_Value (const char *display_name, int value);
  379. virtual int Get_Count (void) const { return m_List.Count (); }
  380. virtual const char * Get_Entry_Name (int index) const { return m_List[index].name; }
  381. virtual int Get_Entry_Value (int index) const { return m_List[index].value; }
  382. virtual void Set_Selected_Value (int value) { (*m_Value) = value; Set_Modified (); }
  383. virtual int Get_Selected_Value (void) const { return (*m_Value); }
  384. // Copy methods
  385. virtual void Copy_Value (const ParameterClass &src);
  386. protected:
  387. //////////////////////////////////////////////////////////////////////////////
  388. // Private data types
  389. //////////////////////////////////////////////////////////////////////////////
  390. typedef struct _ENUM_VALUE
  391. {
  392. StringClass name;
  393. int value;
  394. _ENUM_VALUE (const char *_name=NULL, int _value=0) : name (_name), value (_value) {}
  395. bool operator== (const _ENUM_VALUE &) { return false; }
  396. bool operator!= (const _ENUM_VALUE &) { return true; }
  397. } ENUM_VALUE;
  398. //////////////////////////////////////////////////////////////////////////////
  399. // Private member data
  400. //////////////////////////////////////////////////////////////////////////////
  401. DynamicVectorClass<ENUM_VALUE> m_List;
  402. int * m_Value;
  403. };
  404. //////////////////////////////////////////////////////////////////////////////////
  405. //
  406. // PhysDefParameterClass
  407. //
  408. //////////////////////////////////////////////////////////////////////////////////
  409. class PhysDefParameterClass : public ParameterClass
  410. {
  411. public:
  412. //////////////////////////////////////////////////////////////////////////////
  413. // Public constructors/destructors
  414. //////////////////////////////////////////////////////////////////////////////
  415. PhysDefParameterClass (int *id);
  416. PhysDefParameterClass (const PhysDefParameterClass &src);
  417. virtual ~PhysDefParameterClass (void) {}
  418. //////////////////////////////////////////////////////////////////////////////
  419. // Public operators
  420. //////////////////////////////////////////////////////////////////////////////
  421. const PhysDefParameterClass & operator= (const PhysDefParameterClass &src);
  422. bool operator== (const PhysDefParameterClass &src);
  423. bool operator== (const ParameterClass &src);
  424. //////////////////////////////////////////////////////////////////////////////
  425. // Public methods
  426. //////////////////////////////////////////////////////////////////////////////
  427. // Type identification
  428. virtual Type Get_Type (void) const { return TYPE_PHYSDEFINITIONID; }
  429. virtual bool Is_Type (Type type) const { return (type == TYPE_PHYSDEFINITIONID) || ParameterClass::Is_Type (type); }
  430. // Data manipulation
  431. virtual void Set_Value (int id) { (*m_Value) = id; Set_Modified (); }
  432. virtual int Get_Value (void) const { return (*m_Value); }
  433. virtual void Set_Base_Class (const char *name) { m_BaseClass = name; }
  434. virtual const char * Get_Base_Class (void) const { return m_BaseClass; }
  435. // Copy methods
  436. virtual void Copy_Value (const ParameterClass &src);
  437. protected:
  438. //////////////////////////////////////////////////////////////////////////////
  439. // Private member data
  440. //////////////////////////////////////////////////////////////////////////////
  441. int * m_Value;
  442. StringClass m_BaseClass;
  443. };
  444. //////////////////////////////////////////////////////////////////////////////////
  445. //
  446. // ModelDefParameterClass
  447. //
  448. //////////////////////////////////////////////////////////////////////////////////
  449. class ModelDefParameterClass : public ParameterClass
  450. {
  451. public:
  452. //////////////////////////////////////////////////////////////////////////////
  453. // Public constructors/destructors
  454. //////////////////////////////////////////////////////////////////////////////
  455. ModelDefParameterClass (int *id);
  456. ModelDefParameterClass (const ModelDefParameterClass &src);
  457. virtual ~ModelDefParameterClass (void) {}
  458. //////////////////////////////////////////////////////////////////////////////
  459. // Public operators
  460. //////////////////////////////////////////////////////////////////////////////
  461. const ModelDefParameterClass & operator= (const ModelDefParameterClass &src);
  462. bool operator== (const ModelDefParameterClass &src);
  463. bool operator== (const ParameterClass &src);
  464. //////////////////////////////////////////////////////////////////////////////
  465. // Public methods
  466. //////////////////////////////////////////////////////////////////////////////
  467. // Type identification
  468. virtual Type Get_Type (void) const { return TYPE_MODELDEFINITIONID; }
  469. virtual bool Is_Type (Type type) const { return (type == TYPE_MODELDEFINITIONID) || ParameterClass::Is_Type (type); }
  470. // Data manipulation
  471. virtual void Set_Value (int id) { (*m_Value) = id; Set_Modified (); }
  472. virtual int Get_Value (void) const { return (*m_Value); }
  473. virtual void Set_Base_Class (const char *name) { m_BaseClass = name; }
  474. virtual const char * Get_Base_Class (void) const { return m_BaseClass; }
  475. // Copy methods
  476. virtual void Copy_Value (const ParameterClass &src);
  477. protected:
  478. //////////////////////////////////////////////////////////////////////////////
  479. // Private member data
  480. //////////////////////////////////////////////////////////////////////////////
  481. int * m_Value;
  482. StringClass m_BaseClass;
  483. };
  484. //////////////////////////////////////////////////////////////////////////////////
  485. //
  486. // DefParameterClass
  487. //
  488. //////////////////////////////////////////////////////////////////////////////////
  489. class DefParameterClass : public ParameterClass
  490. {
  491. public:
  492. //////////////////////////////////////////////////////////////////////////////
  493. // Public constructors/destructors
  494. //////////////////////////////////////////////////////////////////////////////
  495. DefParameterClass (int *id);
  496. DefParameterClass (const DefParameterClass &src);
  497. virtual ~DefParameterClass (void) {}
  498. //////////////////////////////////////////////////////////////////////////////
  499. // Public operators
  500. //////////////////////////////////////////////////////////////////////////////
  501. const DefParameterClass & operator= (const DefParameterClass &src);
  502. bool operator== (const DefParameterClass &src);
  503. bool operator== (const ParameterClass &src);
  504. //////////////////////////////////////////////////////////////////////////////
  505. // Public methods
  506. //////////////////////////////////////////////////////////////////////////////
  507. // RTTI
  508. virtual DefParameterClass * As_DefParameterClass (void) { return this; }
  509. // Data manipulation
  510. virtual void Set_Value (int id) { (*m_Value) = id; Set_Modified (); }
  511. virtual int Get_Value (void) const { return (*m_Value); }
  512. // Copy methods
  513. virtual void Copy_Value (const ParameterClass &src);
  514. protected:
  515. //////////////////////////////////////////////////////////////////////////////
  516. // Private member data
  517. //////////////////////////////////////////////////////////////////////////////
  518. int * m_Value;
  519. };
  520. //////////////////////////////////////////////////////////////////////////////////
  521. //
  522. // GenericDefParameterClass
  523. //
  524. //////////////////////////////////////////////////////////////////////////////////
  525. class GenericDefParameterClass : public DefParameterClass
  526. {
  527. public:
  528. //////////////////////////////////////////////////////////////////////////////
  529. // Public constructors/destructors
  530. //////////////////////////////////////////////////////////////////////////////
  531. GenericDefParameterClass (int *id);
  532. GenericDefParameterClass (const GenericDefParameterClass &src);
  533. virtual ~GenericDefParameterClass (void) {}
  534. //////////////////////////////////////////////////////////////////////////////
  535. // Public operators
  536. //////////////////////////////////////////////////////////////////////////////
  537. const GenericDefParameterClass & operator= (const GenericDefParameterClass &src);
  538. bool operator== (const GenericDefParameterClass &src);
  539. bool operator== (const ParameterClass &src);
  540. //////////////////////////////////////////////////////////////////////////////
  541. // Public methods
  542. //////////////////////////////////////////////////////////////////////////////
  543. // Type identification
  544. virtual Type Get_Type (void) const { return TYPE_GENERICDEFINITIONID; }
  545. virtual bool Is_Type (Type type) const { return (type == TYPE_GENERICDEFINITIONID) || ParameterClass::Is_Type (type); }
  546. // Class ID control
  547. virtual void Set_Class_ID (int class_id) { m_ClassID = class_id; Set_Modified (); }
  548. virtual int Get_Class_ID (void) const { return m_ClassID; }
  549. // Copy methods
  550. virtual void Copy_Value (const ParameterClass &src);
  551. protected:
  552. //////////////////////////////////////////////////////////////////////////////
  553. // Private member data
  554. //////////////////////////////////////////////////////////////////////////////
  555. int m_ClassID;
  556. };
  557. //////////////////////////////////////////////////////////////////////////////////
  558. //
  559. // GameObjDefParameterClass
  560. //
  561. //////////////////////////////////////////////////////////////////////////////////
  562. class GameObjDefParameterClass : public DefParameterClass
  563. {
  564. public:
  565. //////////////////////////////////////////////////////////////////////////////
  566. // Public constructors/destructors
  567. //////////////////////////////////////////////////////////////////////////////
  568. GameObjDefParameterClass (int *id);
  569. GameObjDefParameterClass (const GameObjDefParameterClass &src);
  570. virtual ~GameObjDefParameterClass (void) {}
  571. //////////////////////////////////////////////////////////////////////////////
  572. // Public operators
  573. //////////////////////////////////////////////////////////////////////////////
  574. const GameObjDefParameterClass & operator= (const GameObjDefParameterClass &src);
  575. bool operator== (const GameObjDefParameterClass &src);
  576. bool operator== (const ParameterClass &src);
  577. //////////////////////////////////////////////////////////////////////////////
  578. // Public methods
  579. //////////////////////////////////////////////////////////////////////////////
  580. // Type identification
  581. virtual Type Get_Type (void) const { return TYPE_GAMEOBJDEFINITIONID; }
  582. virtual bool Is_Type (Type type) const { return (type == TYPE_GAMEOBJDEFINITIONID) || ParameterClass::Is_Type (type); }
  583. // Data manipulation
  584. virtual void Set_Base_Class (const char *name) { m_BaseClass = name; Set_Modified (); }
  585. virtual const char * Get_Base_Class (void) const { return m_BaseClass; }
  586. // Copy methods
  587. virtual void Copy_Value (const ParameterClass &src);
  588. protected:
  589. //////////////////////////////////////////////////////////////////////////////
  590. // Private member data
  591. //////////////////////////////////////////////////////////////////////////////
  592. StringClass m_BaseClass;
  593. };
  594. //////////////////////////////////////////////////////////////////////////////////
  595. //
  596. // AmmoObjDefParameterClass
  597. //
  598. //////////////////////////////////////////////////////////////////////////////////
  599. class AmmoObjDefParameterClass : public GameObjDefParameterClass
  600. {
  601. public:
  602. //////////////////////////////////////////////////////////////////////////////
  603. // Public constructors/destructors
  604. //////////////////////////////////////////////////////////////////////////////
  605. AmmoObjDefParameterClass (int *id);
  606. AmmoObjDefParameterClass (const AmmoObjDefParameterClass &src);
  607. virtual ~AmmoObjDefParameterClass (void) {}
  608. //////////////////////////////////////////////////////////////////////////////
  609. // Public operators
  610. //////////////////////////////////////////////////////////////////////////////
  611. const AmmoObjDefParameterClass & operator= (const AmmoObjDefParameterClass &src);
  612. bool operator== (const AmmoObjDefParameterClass &src);
  613. bool operator== (const ParameterClass &src);
  614. //////////////////////////////////////////////////////////////////////////////
  615. // Public methods
  616. //////////////////////////////////////////////////////////////////////////////
  617. // Type identification
  618. virtual Type Get_Type (void) const { return TYPE_AMMOOBJDEFINITIONID; }
  619. virtual bool Is_Type (Type type) const { return (type == TYPE_AMMOOBJDEFINITIONID) || GameObjDefParameterClass::Is_Type (type); }
  620. // Copy methods
  621. virtual void Copy_Value (const ParameterClass &src);
  622. };
  623. //////////////////////////////////////////////////////////////////////////////////
  624. //
  625. // WeaponObjDefParameterClass
  626. //
  627. //////////////////////////////////////////////////////////////////////////////////
  628. class WeaponObjDefParameterClass : public GameObjDefParameterClass
  629. {
  630. public:
  631. //////////////////////////////////////////////////////////////////////////////
  632. // Public constructors/destructors
  633. //////////////////////////////////////////////////////////////////////////////
  634. WeaponObjDefParameterClass (int *id);
  635. WeaponObjDefParameterClass (const WeaponObjDefParameterClass &src);
  636. virtual ~WeaponObjDefParameterClass (void) {}
  637. //////////////////////////////////////////////////////////////////////////////
  638. // Public operators
  639. //////////////////////////////////////////////////////////////////////////////
  640. const WeaponObjDefParameterClass & operator= (const WeaponObjDefParameterClass &src);
  641. bool operator== (const WeaponObjDefParameterClass &src);
  642. bool operator== (const ParameterClass &src);
  643. //////////////////////////////////////////////////////////////////////////////
  644. // Public methods
  645. //////////////////////////////////////////////////////////////////////////////
  646. // Type identification
  647. virtual Type Get_Type (void) const { return TYPE_WEAPONOBJDEFINITIONID; }
  648. virtual bool Is_Type (Type type) const { return (type == TYPE_WEAPONOBJDEFINITIONID) || GameObjDefParameterClass::Is_Type (type); }
  649. // Copy methods
  650. virtual void Copy_Value (const ParameterClass &src);
  651. };
  652. //////////////////////////////////////////////////////////////////////////////////
  653. //
  654. // ExplosionObjDefParameterClass
  655. //
  656. //////////////////////////////////////////////////////////////////////////////////
  657. class ExplosionObjDefParameterClass : public GameObjDefParameterClass
  658. {
  659. public:
  660. //////////////////////////////////////////////////////////////////////////////
  661. // Public constructors/destructors
  662. //////////////////////////////////////////////////////////////////////////////
  663. ExplosionObjDefParameterClass (int *id);
  664. ExplosionObjDefParameterClass (const ExplosionObjDefParameterClass &src);
  665. virtual ~ExplosionObjDefParameterClass (void) {}
  666. //////////////////////////////////////////////////////////////////////////////
  667. // Public operators
  668. //////////////////////////////////////////////////////////////////////////////
  669. const ExplosionObjDefParameterClass & operator= (const ExplosionObjDefParameterClass &src);
  670. bool operator== (const ExplosionObjDefParameterClass &src);
  671. bool operator== (const ParameterClass &src);
  672. //////////////////////////////////////////////////////////////////////////////
  673. // Public methods
  674. //////////////////////////////////////////////////////////////////////////////
  675. // Type identification
  676. virtual Type Get_Type (void) const { return TYPE_EXPLOSIONDEFINITIONID; }
  677. virtual bool Is_Type (Type type) const { return (type == TYPE_EXPLOSIONDEFINITIONID) || GameObjDefParameterClass::Is_Type (type); }
  678. // Copy methods
  679. virtual void Copy_Value (const ParameterClass &src);
  680. };
  681. //////////////////////////////////////////////////////////////////////////////////
  682. //
  683. // SoundDefParameterClass
  684. //
  685. //////////////////////////////////////////////////////////////////////////////////
  686. class SoundDefParameterClass : public DefParameterClass
  687. {
  688. public:
  689. //////////////////////////////////////////////////////////////////////////////
  690. // Public constructors/destructors
  691. //////////////////////////////////////////////////////////////////////////////
  692. SoundDefParameterClass (int *id);
  693. SoundDefParameterClass (const SoundDefParameterClass &src);
  694. virtual ~SoundDefParameterClass (void) {}
  695. //////////////////////////////////////////////////////////////////////////////
  696. // Public operators
  697. //////////////////////////////////////////////////////////////////////////////
  698. const SoundDefParameterClass & operator= (const SoundDefParameterClass &src);
  699. bool operator== (const SoundDefParameterClass &src);
  700. bool operator== (const ParameterClass &src);
  701. //////////////////////////////////////////////////////////////////////////////
  702. // Public methods
  703. //////////////////////////////////////////////////////////////////////////////
  704. // Type identification
  705. virtual Type Get_Type (void) const { return TYPE_SOUNDDEFINITIONID; }
  706. virtual bool Is_Type (Type type) const { return (type == TYPE_SOUNDDEFINITIONID) || ParameterClass::Is_Type (type); }
  707. };
  708. //////////////////////////////////////////////////////////////////////////////////
  709. //
  710. // ScriptParameterClass
  711. //
  712. //////////////////////////////////////////////////////////////////////////////////
  713. class ScriptParameterClass : public ParameterClass
  714. {
  715. public:
  716. //////////////////////////////////////////////////////////////////////////////
  717. // Public constructors/destructors
  718. //////////////////////////////////////////////////////////////////////////////
  719. ScriptParameterClass (StringClass *name, StringClass *params);
  720. ScriptParameterClass (const ScriptParameterClass &src);
  721. virtual ~ScriptParameterClass (void) {}
  722. //////////////////////////////////////////////////////////////////////////////
  723. // Public operators
  724. //////////////////////////////////////////////////////////////////////////////
  725. const ScriptParameterClass & operator= (const ScriptParameterClass &src);
  726. bool operator== (const ScriptParameterClass &src);
  727. bool operator== (const ParameterClass &src);
  728. //////////////////////////////////////////////////////////////////////////////
  729. // Public methods
  730. //////////////////////////////////////////////////////////////////////////////
  731. // Type identification
  732. virtual Type Get_Type (void) const { return TYPE_SCRIPT; }
  733. virtual bool Is_Type (Type type) const { return (type == TYPE_SCRIPT) || ParameterClass::Is_Type (type); }
  734. // Data manipulation
  735. virtual void Set_Script_Name (const char *name) { (*m_ScriptName) = name; Set_Modified (); }
  736. virtual const char * Get_Script_Name (void) const { return (*m_ScriptName); }
  737. virtual void Set_Params (const char *params) { (*m_ScriptParams) = params; Set_Modified (); }
  738. virtual const char * Get_Params (void) const { return (*m_ScriptParams); }
  739. // Copy methods
  740. virtual void Copy_Value (const ParameterClass &src);
  741. protected:
  742. //////////////////////////////////////////////////////////////////////////////
  743. // Private member data
  744. //////////////////////////////////////////////////////////////////////////////
  745. StringClass * m_ScriptName;
  746. StringClass * m_ScriptParams;
  747. };
  748. //////////////////////////////////////////////////////////////////////////////////
  749. //
  750. // DefIDListParameterClass
  751. //
  752. //////////////////////////////////////////////////////////////////////////////////
  753. class DefIDListParameterClass : public ParameterClass
  754. {
  755. public:
  756. //////////////////////////////////////////////////////////////////////////////
  757. // Public constructors/destructors
  758. //////////////////////////////////////////////////////////////////////////////
  759. DefIDListParameterClass (DynamicVectorClass<int> *list);
  760. DefIDListParameterClass (const DefIDListParameterClass &src);
  761. virtual ~DefIDListParameterClass (void) {}
  762. //////////////////////////////////////////////////////////////////////////////
  763. // Public operators
  764. //////////////////////////////////////////////////////////////////////////////
  765. const DefIDListParameterClass & operator= (const DefIDListParameterClass &src);
  766. bool operator== (const DefIDListParameterClass &src);
  767. bool operator== (const ParameterClass &src);
  768. //////////////////////////////////////////////////////////////////////////////
  769. // Public methods
  770. //////////////////////////////////////////////////////////////////////////////
  771. // Type identification
  772. virtual Type Get_Type (void) const { return TYPE_DEFINITIONIDLIST; }
  773. virtual bool Is_Type (Type type) const { return (type == TYPE_DEFINITIONIDLIST) || ParameterClass::Is_Type (type); }
  774. // Data manipulation
  775. virtual void Set_Selected_Class_ID (uint32 *id) { m_SelectedClassID = id; }
  776. virtual uint32 * Get_Selected_Class_ID (void) const { return m_SelectedClassID; }
  777. virtual void Set_Class_ID (uint32 id) { m_ClassID = id; }
  778. virtual uint32 Get_Class_ID (void) const { return m_ClassID; }
  779. virtual DynamicVectorClass<int> &Get_List (void) const { return (*m_IDList); }
  780. // Copy methods
  781. virtual void Copy_Value (const ParameterClass &src);
  782. protected:
  783. //////////////////////////////////////////////////////////////////////////////
  784. // Private member data
  785. //////////////////////////////////////////////////////////////////////////////
  786. DynamicVectorClass<int> * m_IDList;
  787. uint32 m_ClassID;
  788. uint32 * m_SelectedClassID;
  789. };
  790. //////////////////////////////////////////////////////////////////////////////////
  791. //
  792. // ZoneParameterClass
  793. //
  794. //////////////////////////////////////////////////////////////////////////////////
  795. class ZoneParameterClass : public ParameterClass
  796. {
  797. public:
  798. //////////////////////////////////////////////////////////////////////////////
  799. // Public constructors/destructors
  800. //////////////////////////////////////////////////////////////////////////////
  801. ZoneParameterClass (OBBoxClass *box);
  802. ZoneParameterClass (const ZoneParameterClass &src);
  803. virtual ~ZoneParameterClass (void) {}
  804. //////////////////////////////////////////////////////////////////////////////
  805. // Public operators
  806. //////////////////////////////////////////////////////////////////////////////
  807. const ZoneParameterClass & operator= (const ZoneParameterClass &src);
  808. bool operator== (const ZoneParameterClass &src);
  809. bool operator== (const ParameterClass &src);
  810. //////////////////////////////////////////////////////////////////////////////
  811. // Public methods
  812. //////////////////////////////////////////////////////////////////////////////
  813. // Type identification
  814. virtual Type Get_Type (void) const { return TYPE_ZONE; }
  815. virtual bool Is_Type (Type type) const { return (type == TYPE_ZONE) || ParameterClass::Is_Type (type); }
  816. // Data manipulation
  817. virtual void Set_Zone (const OBBoxClass &box) { (*m_OBBox) = box; Set_Modified (); }
  818. virtual const OBBoxClass & Get_Zone (void) const { return (*m_OBBox); }
  819. // Copy methods
  820. virtual void Copy_Value (const ParameterClass &src);
  821. protected:
  822. //////////////////////////////////////////////////////////////////////////////
  823. // Private member data
  824. //////////////////////////////////////////////////////////////////////////////
  825. OBBoxClass *m_OBBox;
  826. };
  827. //////////////////////////////////////////////////////////////////////////////////
  828. //
  829. // FilenameListParameterClass
  830. //
  831. //////////////////////////////////////////////////////////////////////////////////
  832. class FilenameListParameterClass : public ParameterClass
  833. {
  834. public:
  835. //////////////////////////////////////////////////////////////////////////////
  836. // Public constructors/destructors
  837. //////////////////////////////////////////////////////////////////////////////
  838. FilenameListParameterClass (DynamicVectorClass<StringClass> *list);
  839. FilenameListParameterClass (const FilenameListParameterClass &src);
  840. virtual ~FilenameListParameterClass (void) {}
  841. //////////////////////////////////////////////////////////////////////////////
  842. // Public operators
  843. //////////////////////////////////////////////////////////////////////////////
  844. const FilenameListParameterClass & operator= (const FilenameListParameterClass &src);
  845. bool operator== (const FilenameListParameterClass &src);
  846. bool operator== (const ParameterClass &src);
  847. //////////////////////////////////////////////////////////////////////////////
  848. // Public methods
  849. //////////////////////////////////////////////////////////////////////////////
  850. // Type identification
  851. virtual Type Get_Type (void) const { return TYPE_FILENAMELIST; }
  852. virtual bool Is_Type (Type type) const { return (type == TYPE_FILENAMELIST) || ParameterClass::Is_Type (type); }
  853. // Data manipulation
  854. virtual DynamicVectorClass<StringClass> &Get_List (void) const { return (*m_FilenameList); }
  855. // Copy methods
  856. virtual void Copy_Value (const ParameterClass &src);
  857. protected:
  858. //////////////////////////////////////////////////////////////////////////////
  859. // Private member data
  860. //////////////////////////////////////////////////////////////////////////////
  861. DynamicVectorClass<StringClass> * m_FilenameList;
  862. };
  863. //////////////////////////////////////////////////////////////////////////////////
  864. //
  865. // ScriptListParameterClass
  866. //
  867. //////////////////////////////////////////////////////////////////////////////////
  868. class ScriptListParameterClass : public ParameterClass
  869. {
  870. public:
  871. //////////////////////////////////////////////////////////////////////////////
  872. // Public constructors/destructors
  873. //////////////////////////////////////////////////////////////////////////////
  874. ScriptListParameterClass (DynamicVectorClass<StringClass> *name_list, DynamicVectorClass<StringClass> *param_list);
  875. ScriptListParameterClass (const ScriptListParameterClass &src);
  876. virtual ~ScriptListParameterClass (void) {}
  877. //////////////////////////////////////////////////////////////////////////////
  878. // Public operators
  879. //////////////////////////////////////////////////////////////////////////////
  880. const ScriptListParameterClass & operator= (const ScriptListParameterClass &src);
  881. bool operator== (const ScriptListParameterClass &src);
  882. bool operator== (const ParameterClass &src);
  883. //////////////////////////////////////////////////////////////////////////////
  884. // Public methods
  885. //////////////////////////////////////////////////////////////////////////////
  886. // Type identification
  887. virtual Type Get_Type (void) const { return TYPE_SCRIPTLIST; }
  888. virtual bool Is_Type (Type type) const { return (type == TYPE_SCRIPTLIST) || ParameterClass::Is_Type (type); }
  889. // Data manipulation
  890. virtual DynamicVectorClass<StringClass> &Get_Name_List (void) const { return (*m_NameList); }
  891. virtual DynamicVectorClass<StringClass> &Get_Param_List (void) const { return (*m_ParamList); }
  892. // Copy methods
  893. virtual void Copy_Value (const ParameterClass &src);
  894. protected:
  895. //////////////////////////////////////////////////////////////////////////////
  896. // Protected members
  897. //////////////////////////////////////////////////////////////////////////////
  898. bool Are_Lists_Identical (DynamicVectorClass<StringClass> &list1, DynamicVectorClass<StringClass> &list2);
  899. //////////////////////////////////////////////////////////////////////////////
  900. // Private member data
  901. //////////////////////////////////////////////////////////////////////////////
  902. DynamicVectorClass<StringClass> * m_NameList;
  903. DynamicVectorClass<StringClass> * m_ParamList;
  904. };
  905. //////////////////////////////////////////////////////////////////////////////////
  906. //
  907. // SeparatorParameterClass
  908. //
  909. //////////////////////////////////////////////////////////////////////////////////
  910. class SeparatorParameterClass : public ParameterClass
  911. {
  912. public:
  913. //////////////////////////////////////////////////////////////////////////////
  914. // Public constructors/destructors
  915. //////////////////////////////////////////////////////////////////////////////
  916. SeparatorParameterClass (void) {}
  917. SeparatorParameterClass (const SeparatorParameterClass &src);
  918. virtual ~SeparatorParameterClass (void) {}
  919. //////////////////////////////////////////////////////////////////////////////
  920. // Public operators
  921. //////////////////////////////////////////////////////////////////////////////
  922. const SeparatorParameterClass & operator= (const SeparatorParameterClass &src);
  923. bool operator== (const SeparatorParameterClass &src);
  924. bool operator== (const ParameterClass &src);
  925. //////////////////////////////////////////////////////////////////////////////
  926. // Public methods
  927. //////////////////////////////////////////////////////////////////////////////
  928. // Type identification
  929. virtual Type Get_Type (void) const { return TYPE_SEPARATOR; }
  930. virtual bool Is_Type (Type type) const { return (type == TYPE_SEPARATOR) || ParameterClass::Is_Type (type); }
  931. // Copy methods
  932. virtual void Copy_Value (const ParameterClass &src);
  933. };
  934. #endif //__PARAMETER_H