parameter.h 42 KB

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