Objective.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. #ifndef OBJECTIVE_H
  2. #define OBJECTIVE_H
  3. /*************************************************************************************************\
  4. Objective.h : Interface for the Objective component.
  5. //---------------------------------------------------------------------------//
  6. // Copyright (C) Microsoft Corporation. All rights reserved. //
  7. //===========================================================================//
  8. \*************************************************************************************************/
  9. #include "elist.h"
  10. #include "EString.h"
  11. #include "tchar.h"
  12. class EditorObject;
  13. class Unit;
  14. class FitIniFile;
  15. //*************************************************************************************************
  16. /**************************************************************************************************
  17. CLASS DESCRIPTION
  18. CObjectiveCondition:
  19. **************************************************************************************************/
  20. enum condition_species_type {
  21. DESTROY_ALL_ENEMY_UNITS,
  22. DESTROY_NUMBER_OF_ENEMY_UNITS,
  23. DESTROY_ENEMY_UNIT_GROUP,
  24. DESTROY_SPECIFIC_ENEMY_UNIT,
  25. DESTROY_SPECIFIC_STRUCTURE,
  26. CAPTURE_OR_DESTROY_ALL_ENEMY_UNITS,
  27. CAPTURE_OR_DESTROY_NUMBER_OF_ENEMY_UNITS,
  28. CAPTURE_OR_DESTROY_ENEMY_UNIT_GROUP,
  29. CAPTURE_OR_DESTROY_SPECIFIC_ENEMY_UNIT,
  30. CAPTURE_OR_DESTROY_SPECIFIC_STRUCTURE,
  31. DEAD_OR_FLED_ALL_ENEMY_UNITS,
  32. DEAD_OR_FLED_NUMBER_OF_ENEMY_UNITS,
  33. DEAD_OR_FLED_ENEMY_UNIT_GROUP,
  34. DEAD_OR_FLED_SPECIFIC_ENEMY_UNIT,
  35. CAPTURE_UNIT,
  36. CAPTURE_STRUCTURE,
  37. GUARD_SPECIFIC_UNIT,
  38. GUARD_SPECIFIC_STRUCTURE,
  39. MOVE_ANY_UNIT_TO_AREA,
  40. MOVE_ALL_UNITS_TO_AREA,
  41. MOVE_ALL_SURVIVING_UNITS_TO_AREA,
  42. MOVE_ALL_SURVIVING_MECHS_TO_AREA,
  43. BOOLEAN_FLAG_IS_SET,
  44. ELAPSED_MISSION_TIME,
  45. NUM_CONDITION_SPECIES
  46. };
  47. static const char *g_conditionSpeciesStringArray[] = {
  48. "DestroyAllEnemyUnits",
  49. "DestroyNumberOfEnemyUnits",
  50. "DestroyEnemyUnitGroup",
  51. "DestroySpecificEnemyUnit",
  52. "DestroySpecificStructure",
  53. "CaptureOrDestroyAllEnemyUnits",
  54. "CaptureOrDestroyNumberOfEnemyUnits",
  55. "CaptureOrDestroyEnemyUnitGroup",
  56. "CaptureOrDestroySpecificEnemyUnit",
  57. "CaptureOrDestroySpecificStructure",
  58. "DeadOrFledAllEnemyUnits",
  59. "DeadOrFledNumberOfEnemyUnits",
  60. "DeadOrFledEnemyUnitGroup",
  61. "DeadOrFledSpecificEnemyUnit",
  62. "CaptureSpecificUnit",
  63. "CaptureSpecificStructure",
  64. "GuardSpecificUnit",
  65. "GuardSpecificStructure",
  66. "MoveAnyUnitToArea",
  67. "MoveAllUnitsToArea",
  68. "MoveAllSurvivingUnitsToArea",
  69. "MoveAllSurvivingMechsToArea",
  70. "BooleanFlagIsSet",
  71. "ElapsedMissionTime",
  72. };
  73. class CObjectiveCondition {
  74. private:
  75. int m_alignment;
  76. public:
  77. CObjectiveCondition(int alignment) { m_alignment = alignment; }
  78. virtual ~CObjectiveCondition() {}
  79. virtual bool operator==(const CObjectiveCondition &rhs) const;
  80. int Alignment() { return m_alignment; }
  81. void Alignment(int alignment) { m_alignment = alignment; }
  82. bool DoCommonEditDialog() {}
  83. virtual condition_species_type Species() const = 0;
  84. virtual bool Init() { return true; }
  85. virtual bool Read( FitIniFile* missionFile ) { return true; }
  86. virtual bool Save( FitIniFile* file ) { return true; }
  87. virtual bool EditDialog() { return true; }
  88. virtual void WriteAbl() {}
  89. virtual EString Description() = 0;
  90. virtual EString InstanceDescription() { EString retval; return retval; }
  91. virtual void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*pMaster); }
  92. virtual bool RefersTo(const EditorObject *pObj) { return false; }
  93. virtual bool NoteThePositionsOfObjectsReferenced() { return true; }
  94. virtual bool RestoreObjectPointerReferencesFromNotedPositions() { return true; }
  95. };
  96. class CDestroyAllEnemyUnits: public CObjectiveCondition {
  97. public:
  98. CDestroyAllEnemyUnits(int alignment) : CObjectiveCondition(alignment) {}
  99. condition_species_type Species() const { return DESTROY_ALL_ENEMY_UNITS; }
  100. EString Description();
  101. };
  102. class CNumberOfEnemyUnitsObjectiveCondition: public CObjectiveCondition { /*abstract class*/
  103. protected:
  104. int m_num;
  105. public:
  106. CNumberOfEnemyUnitsObjectiveCondition(int alignment) : CObjectiveCondition(alignment) { m_num = 0; }
  107. virtual bool operator==(const CObjectiveCondition &rhs) const;
  108. virtual bool Read( FitIniFile* missionFile );
  109. virtual bool Save( FitIniFile* file );
  110. virtual bool EditDialog();
  111. virtual EString InstanceDescription();
  112. virtual void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CNumberOfEnemyUnitsObjectiveCondition *>(pMaster))); }
  113. };
  114. class CDestroyNumberOfEnemyUnits: public CNumberOfEnemyUnitsObjectiveCondition {
  115. public:
  116. CDestroyNumberOfEnemyUnits(int alignment) : CNumberOfEnemyUnitsObjectiveCondition(alignment) {}
  117. condition_species_type Species() const { return DESTROY_NUMBER_OF_ENEMY_UNITS; }
  118. EString Description();
  119. };
  120. class CSpecificUnitObjectiveCondition: public CObjectiveCondition { /*abstract class*/
  121. protected:
  122. Unit *m_pUnit;
  123. float m_LastNotedPositionX;
  124. float m_LastNotedPositionY;
  125. public:
  126. CSpecificUnitObjectiveCondition(int alignment) : CObjectiveCondition(alignment) { m_pUnit = 0; m_LastNotedPositionX = m_LastNotedPositionY = 0.0; }
  127. virtual bool operator==(const CObjectiveCondition &rhs) const;
  128. virtual bool Read( FitIniFile* missionFile );
  129. virtual bool Save( FitIniFile* file );
  130. virtual bool EditDialog();
  131. virtual EString InstanceDescription();
  132. virtual void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CSpecificUnitObjectiveCondition *>(pMaster))); }
  133. virtual bool RefersTo(const EditorObject *pObj) { return (pObj == ((const EditorObject *)m_pUnit)); }
  134. virtual bool NoteThePositionsOfObjectsReferenced();
  135. virtual bool RestoreObjectPointerReferencesFromNotedPositions();
  136. };
  137. class CSpecificEnemyUnitObjectiveCondition: public CSpecificUnitObjectiveCondition { /*abstract class*/
  138. public:
  139. CSpecificEnemyUnitObjectiveCondition(int alignment) : CSpecificUnitObjectiveCondition(alignment) {}
  140. virtual bool EditDialog();
  141. };
  142. class CSpecificAlliedUnitObjectiveCondition: public CSpecificUnitObjectiveCondition { /*abstract class*/
  143. public:
  144. CSpecificAlliedUnitObjectiveCondition(int alignment) : CSpecificUnitObjectiveCondition(alignment) {}
  145. //virtual bool EditDialog();
  146. };
  147. class CDestroySpecificEnemyUnit: public CSpecificEnemyUnitObjectiveCondition {
  148. public:
  149. CDestroySpecificEnemyUnit(int alignment) : CSpecificEnemyUnitObjectiveCondition(alignment) {}
  150. condition_species_type Species() const { return DESTROY_SPECIFIC_ENEMY_UNIT; }
  151. EString Description();
  152. };
  153. class CSpecificStructureObjectiveCondition: public CObjectiveCondition { /*abstract class*/
  154. protected:
  155. EditorObject *m_pBuilding;
  156. float m_LastNotedPositionX;
  157. float m_LastNotedPositionY;
  158. public:
  159. CSpecificStructureObjectiveCondition(int alignment) : CObjectiveCondition(alignment) { m_pBuilding = 0; m_LastNotedPositionX = m_LastNotedPositionY = 0.0; }
  160. virtual bool operator==(const CObjectiveCondition &rhs) const;
  161. virtual bool Read( FitIniFile* missionFile );
  162. virtual bool Save( FitIniFile* file );
  163. virtual bool EditDialog();
  164. virtual EString InstanceDescription();
  165. virtual void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CSpecificStructureObjectiveCondition *>(pMaster))); }
  166. virtual bool RefersTo(const EditorObject *pObj) { return (pObj == m_pBuilding); }
  167. virtual bool NoteThePositionsOfObjectsReferenced();
  168. virtual bool RestoreObjectPointerReferencesFromNotedPositions();
  169. };
  170. class CSpecificEnemyStructureObjectiveCondition: public CSpecificStructureObjectiveCondition { /*abstract class*/
  171. public:
  172. CSpecificEnemyStructureObjectiveCondition(int alignment) : CSpecificStructureObjectiveCondition(alignment) {}
  173. //virtual bool EditDialog();
  174. };
  175. class CSpecificAlliedStructureObjectiveCondition: public CSpecificStructureObjectiveCondition { /*abstract class*/
  176. public:
  177. CSpecificAlliedStructureObjectiveCondition(int alignment) : CSpecificStructureObjectiveCondition(alignment) {}
  178. //virtual bool EditDialog();
  179. };
  180. class CDestroySpecificStructure: public CSpecificEnemyStructureObjectiveCondition {
  181. public:
  182. CDestroySpecificStructure(int alignment) : CSpecificEnemyStructureObjectiveCondition(alignment) {}
  183. condition_species_type Species() const { return DESTROY_SPECIFIC_STRUCTURE; }
  184. EString Description();
  185. };
  186. class CCaptureOrDestroyAllEnemyUnits: public CObjectiveCondition {
  187. /* The CaptureOrDestroyAllEnemyUnits condition should not set the units to be
  188. capturable. */
  189. public:
  190. CCaptureOrDestroyAllEnemyUnits(int alignment) : CObjectiveCondition(alignment) {}
  191. condition_species_type Species() const { return CAPTURE_OR_DESTROY_ALL_ENEMY_UNITS; }
  192. EString Description();
  193. };
  194. class CCaptureOrDestroyNumberOfEnemyUnits: public CNumberOfEnemyUnitsObjectiveCondition {
  195. /* The CaptureOrDestroyAllEnemyUnits condition should not set the units to be
  196. capturable. */
  197. public:
  198. CCaptureOrDestroyNumberOfEnemyUnits(int alignment) : CNumberOfEnemyUnitsObjectiveCondition(alignment) {}
  199. condition_species_type Species() const { return CAPTURE_OR_DESTROY_NUMBER_OF_ENEMY_UNITS; }
  200. EString Description();
  201. };
  202. class CCaptureOrDestroySpecificEnemyUnit: public CSpecificEnemyUnitObjectiveCondition {
  203. public:
  204. CCaptureOrDestroySpecificEnemyUnit(int alignment) : CSpecificEnemyUnitObjectiveCondition(alignment) {}
  205. condition_species_type Species() const { return CAPTURE_OR_DESTROY_SPECIFIC_ENEMY_UNIT; }
  206. EString Description();
  207. };
  208. class CCaptureOrDestroySpecificStructure: public CSpecificEnemyStructureObjectiveCondition {
  209. public:
  210. CCaptureOrDestroySpecificStructure(int alignment) : CSpecificEnemyStructureObjectiveCondition(alignment) {}
  211. condition_species_type Species() const { return CAPTURE_OR_DESTROY_SPECIFIC_STRUCTURE; }
  212. EString Description();
  213. };
  214. class CDeadOrFledAllEnemyUnits: public CObjectiveCondition {
  215. public:
  216. CDeadOrFledAllEnemyUnits(int alignment) : CObjectiveCondition(alignment) {}
  217. condition_species_type Species() const { return DEAD_OR_FLED_ALL_ENEMY_UNITS; }
  218. EString Description();
  219. };
  220. class CDeadOrFledNumberOfEnemyUnits: public CNumberOfEnemyUnitsObjectiveCondition {
  221. public:
  222. CDeadOrFledNumberOfEnemyUnits(int alignment) : CNumberOfEnemyUnitsObjectiveCondition(alignment) {}
  223. condition_species_type Species() const { return DEAD_OR_FLED_NUMBER_OF_ENEMY_UNITS; }
  224. EString Description();
  225. };
  226. class CDeadOrFledSpecificEnemyUnit: public CSpecificEnemyUnitObjectiveCondition {
  227. public:
  228. CDeadOrFledSpecificEnemyUnit(int alignment) : CSpecificEnemyUnitObjectiveCondition(alignment) {}
  229. condition_species_type Species() const { return DEAD_OR_FLED_SPECIFIC_ENEMY_UNIT; }
  230. EString Description();
  231. };
  232. class CCaptureUnit: public CSpecificEnemyUnitObjectiveCondition {
  233. public:
  234. CCaptureUnit(int alignment) : CSpecificEnemyUnitObjectiveCondition(alignment) {}
  235. condition_species_type Species() const { return CAPTURE_UNIT; }
  236. EString Description();
  237. };
  238. class CCaptureStructure: public CSpecificEnemyStructureObjectiveCondition {
  239. public:
  240. CCaptureStructure(int alignment) : CSpecificEnemyStructureObjectiveCondition(alignment) {}
  241. condition_species_type Species() const { return CAPTURE_STRUCTURE; }
  242. EString Description();
  243. };
  244. class CGuardSpecificUnit: public CSpecificAlliedUnitObjectiveCondition {
  245. public:
  246. CGuardSpecificUnit(int alignment) : CSpecificAlliedUnitObjectiveCondition(alignment) {}
  247. condition_species_type Species() const { return GUARD_SPECIFIC_UNIT; }
  248. EString Description();
  249. };
  250. class CGuardSpecificStructure: public CSpecificAlliedStructureObjectiveCondition {
  251. public:
  252. CGuardSpecificStructure(int alignment) : CSpecificAlliedStructureObjectiveCondition(alignment) {}
  253. condition_species_type Species() const { return GUARD_SPECIFIC_STRUCTURE; }
  254. EString Description();
  255. };
  256. class CAreaObjectiveCondition: public CObjectiveCondition { /*abstract class*/
  257. private:
  258. float m_targetCenterX;
  259. float m_targetCenterY;
  260. float m_targetRadius;
  261. public:
  262. CAreaObjectiveCondition(int alignment) : CObjectiveCondition(alignment) { m_targetCenterX = 0.0; m_targetCenterY = 0.0; m_targetRadius = 0.0; }
  263. virtual bool operator==(const CObjectiveCondition &rhs) const;
  264. virtual bool Read( FitIniFile* missionFile );
  265. virtual bool Save( FitIniFile* file );
  266. virtual bool EditDialog();
  267. virtual EString InstanceDescription();
  268. virtual void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CAreaObjectiveCondition *>(pMaster))); }
  269. };
  270. class CMoveAnyUnitToArea: public CAreaObjectiveCondition {
  271. public:
  272. CMoveAnyUnitToArea(int alignment) : CAreaObjectiveCondition(alignment) {}
  273. condition_species_type Species() const { return MOVE_ANY_UNIT_TO_AREA; }
  274. EString Description();
  275. };
  276. class CMoveAllUnitsToArea: public CAreaObjectiveCondition {
  277. public:
  278. CMoveAllUnitsToArea(int alignment) : CAreaObjectiveCondition(alignment) {}
  279. condition_species_type Species() const { return MOVE_ALL_UNITS_TO_AREA; }
  280. EString Description();
  281. };
  282. class CMoveAllSurvivingUnitsToArea: public CAreaObjectiveCondition {
  283. public:
  284. CMoveAllSurvivingUnitsToArea(int alignment) : CAreaObjectiveCondition(alignment) {}
  285. condition_species_type Species() const { return MOVE_ALL_SURVIVING_UNITS_TO_AREA; }
  286. EString Description();
  287. };
  288. class CMoveAllSurvivingMechsToArea: public CAreaObjectiveCondition {
  289. public:
  290. CMoveAllSurvivingMechsToArea(int alignment) : CAreaObjectiveCondition(alignment) {}
  291. condition_species_type Species() const { return MOVE_ALL_SURVIVING_MECHS_TO_AREA; }
  292. EString Description();
  293. };
  294. class CBooleanFlagIsSet: public CObjectiveCondition {
  295. protected:
  296. EString m_flagID;
  297. bool m_value;
  298. public:
  299. CBooleanFlagIsSet(int alignment) : CObjectiveCondition(alignment) { m_flagID = _TEXT("flag0"); m_value = true; }
  300. bool operator==(const CObjectiveCondition &rhs) const;
  301. condition_species_type Species() const { return BOOLEAN_FLAG_IS_SET; }
  302. bool Read( FitIniFile* missionFile );
  303. bool Save( FitIniFile* file );
  304. bool EditDialog();
  305. EString Description();
  306. EString InstanceDescription();
  307. void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CBooleanFlagIsSet *>(pMaster))); }
  308. };
  309. class CElapsedMissionTime: public CObjectiveCondition {
  310. protected:
  311. float m_time;
  312. public:
  313. CElapsedMissionTime(int alignment) : CObjectiveCondition(alignment) { m_time = 0.0; }
  314. bool operator==(const CObjectiveCondition &rhs) const;
  315. condition_species_type Species() const { return ELAPSED_MISSION_TIME; }
  316. bool Read( FitIniFile* missionFile );
  317. bool Save( FitIniFile* file );
  318. bool EditDialog();
  319. EString Description();
  320. EString InstanceDescription();
  321. void CastAndCopy(const CObjectiveCondition *pMaster) { (*this) = (*(dynamic_cast<const CElapsedMissionTime *>(pMaster))); }
  322. };
  323. enum action_species_type {
  324. PLAY_BIK,
  325. PLAY_WAV,
  326. DISPLAY_TEXT_MESSAGE,
  327. DISPLAY_RESOURCE_TEXT_MESSAGE,
  328. SET_BOOLEAN_FLAG,
  329. MAKE_NEW_TECHNOLOGY_AVAILABLE,
  330. NUM_ACTION_SPECIES
  331. };
  332. static const char *g_actionSpeciesStringArray[] = {
  333. "PlayBIK",
  334. "PlayWAV",
  335. "DisplayTextMessage",
  336. "DisplayResourceTextMessage",
  337. "SetBooleanFlag",
  338. "MakeNewTechnologyAvailable",
  339. };
  340. class CObjectiveAction {
  341. private:
  342. int m_alignment;
  343. public:
  344. CObjectiveAction(int alignment) { m_alignment = alignment; }
  345. virtual ~CObjectiveAction() {}
  346. virtual bool operator==(const CObjectiveAction &rhs) const;
  347. int Alignment() { return m_alignment; }
  348. void Alignment(int alignment) { m_alignment = alignment; }
  349. bool DoCommonEditDialog() {}
  350. virtual action_species_type Species() const = 0;
  351. virtual bool Init() = 0;
  352. virtual bool Read( FitIniFile* missionFile ) = 0;
  353. virtual bool Save( FitIniFile* file ) = 0;
  354. virtual bool EditDialog() = 0;
  355. virtual void WriteAbl() = 0;
  356. virtual EString Description() = 0;
  357. virtual EString InstanceDescription() { EString retval; return retval; }
  358. virtual void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*pMaster); }
  359. };
  360. class CPlayBIK: public CObjectiveAction {
  361. private:
  362. EString m_pathname;
  363. public:
  364. CPlayBIK(int alignment) : CObjectiveAction(alignment) {}
  365. bool operator==(const CObjectiveAction &rhs) const;
  366. action_species_type Species() const { return PLAY_BIK; }
  367. bool Init() { return true; }
  368. bool Read( FitIniFile* missionFile );
  369. bool Save( FitIniFile* file );
  370. bool EditDialog();
  371. void WriteAbl() {};
  372. EString Description();
  373. EString InstanceDescription();
  374. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CPlayBIK *>(pMaster))); }
  375. };
  376. class CPlayWAV: public CObjectiveAction {
  377. private:
  378. EString m_pathname;
  379. public:
  380. CPlayWAV(int alignment) : CObjectiveAction(alignment) {}
  381. bool operator==(const CObjectiveAction &rhs) const;
  382. action_species_type Species() const { return PLAY_WAV; }
  383. bool Init() { return true; }
  384. bool Read( FitIniFile* missionFile );
  385. bool Save( FitIniFile* file );
  386. bool EditDialog();
  387. void WriteAbl() {};
  388. EString Description();
  389. EString InstanceDescription();
  390. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CPlayWAV *>(pMaster))); }
  391. };
  392. class CDisplayTextMessage: public CObjectiveAction {
  393. private:
  394. EString m_message;
  395. public:
  396. CDisplayTextMessage(int alignment) : CObjectiveAction(alignment) {}
  397. bool operator==(const CObjectiveAction &rhs) const;
  398. action_species_type Species() const { return DISPLAY_TEXT_MESSAGE; }
  399. bool Init() { return true; }
  400. bool Read( FitIniFile* missionFile );
  401. bool Save( FitIniFile* file );
  402. bool EditDialog();
  403. void WriteAbl() {};
  404. EString Description();
  405. EString InstanceDescription();
  406. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CDisplayTextMessage *>(pMaster))); }
  407. };
  408. class CDisplayResourceTextMessage: public CObjectiveAction {
  409. private:
  410. int m_resourceStringID;
  411. public:
  412. CDisplayResourceTextMessage(int alignment) : CObjectiveAction(alignment) {}
  413. bool operator==(const CObjectiveAction &rhs) const;
  414. action_species_type Species() const { return DISPLAY_RESOURCE_TEXT_MESSAGE; }
  415. bool Init() { return true; }
  416. bool Read( FitIniFile* missionFile );
  417. bool Save( FitIniFile* file );
  418. bool EditDialog();
  419. void WriteAbl() {};
  420. EString Description();
  421. EString InstanceDescription();
  422. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CDisplayResourceTextMessage *>(pMaster))); }
  423. };
  424. class CSetBooleanFlag: public CObjectiveAction {
  425. private:
  426. EString m_flagID;
  427. bool m_value;
  428. public:
  429. CSetBooleanFlag(int alignment) : CObjectiveAction(alignment) { m_flagID = _TEXT("flag0"); m_value = true; }
  430. bool operator==(const CObjectiveAction &rhs) const;
  431. action_species_type Species() const { return SET_BOOLEAN_FLAG; }
  432. bool Init() { return true; }
  433. bool Read( FitIniFile* missionFile );
  434. bool Save( FitIniFile* file );
  435. bool EditDialog();
  436. void WriteAbl() {};
  437. EString Description();
  438. EString InstanceDescription();
  439. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CSetBooleanFlag *>(pMaster))); }
  440. };
  441. class CMakeNewTechnologyAvailable: public CObjectiveAction {
  442. private:
  443. EString m_purchaseFilePathname;
  444. public:
  445. CMakeNewTechnologyAvailable(int alignment) : CObjectiveAction(alignment) {}
  446. bool operator==(const CObjectiveAction &rhs) const;
  447. action_species_type Species() const { return MAKE_NEW_TECHNOLOGY_AVAILABLE; }
  448. bool Init() { return true; }
  449. bool Read( FitIniFile* missionFile );
  450. bool Save( FitIniFile* file );
  451. bool EditDialog();
  452. void WriteAbl() {};
  453. EString Description();
  454. EString InstanceDescription();
  455. void CastAndCopy(const CObjectiveAction *pMaster) { (*this) = (*(dynamic_cast<const CMakeNewTechnologyAvailable *>(pMaster))); }
  456. };
  457. class CObjectiveConditionList : public EList <CObjectiveCondition *, CObjectiveCondition *> {
  458. public:
  459. virtual ~CObjectiveConditionList() { Clear(); }
  460. virtual CObjectiveConditionList &operator=(const CObjectiveConditionList &master);
  461. virtual bool operator==(const CObjectiveConditionList &rhs) const;
  462. virtual void Clear();
  463. };
  464. class CObjectiveActionList : public EList <CObjectiveAction *, CObjectiveAction *> {
  465. public:
  466. virtual ~CObjectiveActionList() { Clear(); }
  467. virtual CObjectiveActionList &operator=(const CObjectiveActionList &master);
  468. virtual bool operator==(const CObjectiveActionList &rhs) const;
  469. virtual void Clear();
  470. };
  471. class CObjective : public/*maybe protected*/ CObjectiveConditionList {
  472. private:
  473. typedef CObjectiveConditionList inherited;
  474. int m_alignment;
  475. EString m_title;
  476. bool m_titleUseResourceString;
  477. int m_titleResourceStringID;
  478. EString m_description;
  479. bool m_descriptionUseResourceString;
  480. int m_descriptionResourceStringID;
  481. int m_priority;
  482. int m_resourcePoints;
  483. bool m_previousPrimaryObjectiveMustBeComplete;
  484. bool m_allPreviousPrimaryObjectivesMustBeComplete;
  485. bool m_displayMarker;
  486. float m_markerX;
  487. float m_markerY;
  488. bool m_isHiddenTrigger;
  489. bool m_activateOnFlag;
  490. EString m_activateFlagID;
  491. bool m_resetStatusOnFlag;
  492. EString m_resetStatusFlagID;
  493. long m_modelID;
  494. long m_baseColor;
  495. long m_highlightColor;
  496. long m_highlightColor2;
  497. public: /* we could make this protected if only the editdialog is to acces these functions */
  498. static CObjectiveCondition *new_CObjectiveCondition(condition_species_type conditionSpecies, int alignment);
  499. static EString DescriptionOfConditionSpecies(condition_species_type conditionSpecies);
  500. static CObjectiveAction *new_CObjectiveAction(action_species_type actionSpecies, int alignment);
  501. static EString DescriptionOfActionSpecies(action_species_type actionSpecies);
  502. public:
  503. typedef CObjectiveConditionList condition_list_type;
  504. typedef CObjectiveActionList action_list_type;
  505. action_list_type m_actionList;
  506. condition_list_type m_failureConditionList;
  507. action_list_type m_failureActionList;
  508. void Construct(int alignment);
  509. CObjective() { Construct(0); }
  510. CObjective(int alignment) { Construct(alignment); }
  511. CObjective(const CObjective &master) { (*this) = master; }
  512. ~CObjective() { Clear(); }
  513. CObjective &operator=(const CObjective &master);
  514. bool operator==(const CObjective &rhs) const;
  515. void Init() {}
  516. void Clear();
  517. int Alignment() { return m_alignment; }
  518. void Alignment(int alignment);
  519. bool Read( FitIniFile* missionFile, int objectiveNum, int version = 0);
  520. bool Save( FitIniFile* file, int objectiveNum);
  521. bool EditDialog();
  522. bool NoteThePositionsOfObjectsReferenced();
  523. bool RestoreObjectPointerReferencesFromNotedPositions();
  524. bool ThisObjectiveHasNoConditions() { return ((0 == Count()) && (0 == m_failureConditionList.Count())); }
  525. EString Title() const { return m_title; }
  526. void Title(EString title) { m_title = title; }
  527. bool TitleUseResourceString() const { return m_titleUseResourceString; }
  528. void TitleUseResourceString(bool titleUseResourceString) { m_titleUseResourceString = titleUseResourceString; }
  529. int TitleResourceStringID() const { return m_titleResourceStringID; }
  530. void TitleResourceStringID(int titleResourceStringID) { m_titleResourceStringID = titleResourceStringID; }
  531. EString LocalizedTitle() const;
  532. EString Description() const { return m_description; }
  533. void Description(EString description) { m_description = description; }
  534. bool DescriptionUseResourceString() const { return m_descriptionUseResourceString; }
  535. void DescriptionUseResourceString(bool descriptionUseResourceString) { m_descriptionUseResourceString = descriptionUseResourceString; }
  536. int DescriptionResourceStringID() const { return m_descriptionResourceStringID; }
  537. void DescriptionResourceStringID(int descriptionResourceStringID) { m_descriptionResourceStringID = descriptionResourceStringID; }
  538. EString LocalizedDescription() const;
  539. int Priority() { return m_priority; }
  540. void Priority(int priority) { m_priority = priority; }
  541. int ResourcePoints() { return m_resourcePoints; }
  542. void ResourcePoints(int resourcePoints) { m_resourcePoints = resourcePoints; }
  543. bool PreviousPrimaryObjectiveMustBeComplete() { return m_previousPrimaryObjectiveMustBeComplete; }
  544. void PreviousPrimaryObjectiveMustBeComplete(bool previousPrimaryObjectiveMustBeComplete) { m_previousPrimaryObjectiveMustBeComplete = previousPrimaryObjectiveMustBeComplete; }
  545. bool AllPreviousPrimaryObjectivesMustBeComplete() { return m_allPreviousPrimaryObjectivesMustBeComplete; }
  546. void AllPreviousPrimaryObjectivesMustBeComplete(bool allPreviousPrimaryObjectivesMustBeComplete) { m_allPreviousPrimaryObjectivesMustBeComplete = allPreviousPrimaryObjectivesMustBeComplete; }
  547. bool DisplayMarker() { return m_displayMarker; }
  548. void DisplayMarker(bool displayMarker) { m_displayMarker = displayMarker; }
  549. float MarkerX() { return m_markerX; }
  550. void MarkerX(float markerX) { m_markerX = markerX; }
  551. float MarkerY() { return m_markerY; }
  552. void MarkerY(float markerY) { m_markerY = markerY; }
  553. void IsHiddenTrigger(bool isHiddenTrigger) { m_isHiddenTrigger = isHiddenTrigger; }
  554. bool IsHiddenTrigger() { return m_isHiddenTrigger; }
  555. void ActivateOnFlag(bool activateOnFlag) { m_activateOnFlag = activateOnFlag; }
  556. bool ActivateOnFlag() { return m_activateOnFlag; }
  557. void ActivateFlagID(EString activateFlagId) { m_activateFlagID = activateFlagId; }
  558. EString ActivateFlagID() { return m_activateFlagID; }
  559. void ResetStatusOnFlag(bool resetStatusOnFlag) { m_resetStatusOnFlag = resetStatusOnFlag; }
  560. bool ResetStatusOnFlag() { return m_resetStatusOnFlag; }
  561. void ResetStatusFlagID(EString resetStatusFlagID) { m_resetStatusFlagID = resetStatusFlagID; }
  562. EString ResetStatusFlagID() { return m_resetStatusFlagID; }
  563. int BaseColor( ) const { return m_baseColor; }
  564. void BaseColor( int newColor ) { m_baseColor = newColor; }
  565. int HighlightColor( ) const { return m_highlightColor; }
  566. void HighlightColor( int newColor ) { m_highlightColor = newColor; }
  567. int HighlightColor2( ) const { return m_highlightColor2; }
  568. void HighlightColor2( int newColor ) { m_highlightColor2 = newColor; }
  569. long ModelID() const { return m_modelID; }
  570. void ModelID( int newID ) { m_modelID = newID; }
  571. };
  572. class CObjectives : public/*maybe protected*/ EList <CObjective *, CObjective *> {
  573. private:
  574. typedef EList <CObjective *, CObjective *> inherited;
  575. int m_alignment;
  576. public:
  577. CObjectives() { m_alignment = 0; }
  578. CObjectives(int alignment) { m_alignment = alignment; }
  579. CObjectives(const CObjectives &master) { (*this) = master; }
  580. ~CObjectives() { Clear(); }
  581. CObjectives &operator=(const CObjectives &master);
  582. bool operator==(const CObjectives &rhs) const;
  583. void Init();
  584. void Clear();
  585. int Alignment() { return m_alignment; }
  586. void Alignment(int alignment);
  587. bool Read( FitIniFile* missionFile );
  588. bool Save( FitIniFile* file );
  589. bool EditDialog();
  590. bool WriteMissionScript(const char *Name, const char *OutputPath);
  591. void handleObjectInvalidation(const EditorObject *pObj);
  592. bool NoteThePositionsOfObjectsReferenced();
  593. bool RestoreObjectPointerReferencesFromNotedPositions();
  594. bool ThereAreObjectivesWithNoConditions();
  595. };
  596. class CObjectivesEditState {
  597. public:
  598. int alignment;
  599. CObjectives ModifiedObjectives;
  600. enum objective_function_id_type {
  601. ADD,
  602. EDIT
  603. };
  604. objective_function_id_type objectiveFunction;
  605. int nSelectionIndex;
  606. CObjective ModifiedObjective;
  607. enum list_id_type {
  608. SUCCESS_CONDITION,
  609. FAILURE_CONDITION
  610. };
  611. list_id_type listID;
  612. int nConditionSpeciesSelectionIndex;
  613. int nActionSpeciesSelectionIndex;
  614. int nFailureConditionSpeciesSelectionIndex;
  615. int nFailureActionSpeciesSelectionIndex;
  616. void *pModifiedUnitPtr;
  617. void *pModifiedBuildingPtr;
  618. CObjectivesEditState() {
  619. Clear();
  620. }
  621. void Clear() {
  622. alignment = 0;
  623. ModifiedObjectives.Clear();
  624. objectiveFunction = ADD;
  625. nSelectionIndex = -1;
  626. ModifiedObjective.Clear();
  627. listID = SUCCESS_CONDITION;
  628. nConditionSpeciesSelectionIndex = -1;
  629. nActionSpeciesSelectionIndex = -1;
  630. nFailureConditionSpeciesSelectionIndex = -1;
  631. nFailureActionSpeciesSelectionIndex = -1;
  632. pModifiedUnitPtr = 0;
  633. pModifiedBuildingPtr = 0;
  634. }
  635. };
  636. //*************************************************************************************************
  637. #endif // end of file ( Objective.h )