group.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. //******************************************************************************************
  2. //
  3. // group.h - This file contains the MoverGroup Class header
  4. //
  5. // MechCommander 2
  6. //
  7. //---------------------------------------------------------------------------//
  8. // Copyright (C) Microsoft Corporation. All rights reserved. //
  9. //===========================================================================//
  10. #ifndef GROUP_H
  11. #define GROUP_H
  12. //--------------
  13. // Include Files
  14. #ifndef MCLIB_H
  15. #include "mclib.h"
  16. #endif
  17. #ifndef GAMEOBJ_H
  18. #include "gameobj.h"
  19. #endif
  20. #ifndef DMOVER_H
  21. #include "dmover.h"
  22. #endif
  23. #ifndef DGROUP_H
  24. #include "dgroup.h"
  25. #endif
  26. #ifndef UNITDESG_H
  27. #include "unitdesg.h"
  28. #endif
  29. #ifndef TACORDR_H
  30. #include "tacordr.h"
  31. #endif
  32. //---------------------------------------------------------------------------
  33. #define GOALFLAG_OPEN 1
  34. #define GOALFLAG_CLOSED 2
  35. #define GOALFLAG_AVAILABLE 4
  36. #define GOALFLAG_NO_NEIGHBORS 8
  37. #define GOALFLAG_MOVER_HERE 16
  38. typedef struct _GoalMapNode {
  39. short cost; // normal cost to travel here, based upon terrain
  40. //long parent; // where we came from (parent cell)
  41. unsigned char flags; // CLOSED, OPEN, STEP flags
  42. long g; // known cost from START to this node
  43. //long hPrime; // estimated cost from this node to GOAL
  44. //long fPrime; // = g + hPrime
  45. void setFlag (unsigned char flag) {
  46. flags |= flag;
  47. }
  48. void clearFlag (unsigned char flag) {
  49. flags &= (flag ^ 0xFFFFFFFF);
  50. }
  51. } GoalMapNode;
  52. typedef struct _MoverGroupData
  53. {
  54. long id;
  55. long numMovers;
  56. GameObjectWatchID moverWIDs[MAX_MOVERGROUP_COUNT];
  57. GameObjectWatchID pointWID;
  58. bool disbandOnNoPoint;
  59. } MoverGroupData;
  60. class MoverGroup {
  61. public:
  62. long id;
  63. long numMovers;
  64. GameObjectWatchID moverWIDs[MAX_MOVERGROUP_COUNT];
  65. GameObjectWatchID pointWID;
  66. bool disbandOnNoPoint;
  67. static SortList sortList;
  68. static GoalMapNode* goalMap;
  69. public:
  70. void* operator new (size_t ourSize);
  71. void operator delete (void* us);
  72. virtual void init (void) {
  73. id = -1;
  74. numMovers = 0;
  75. pointWID = 0;
  76. disbandOnNoPoint = false;
  77. goalMap = NULL;
  78. }
  79. void init (MoverGroupData &data);
  80. MoverGroup (void) {
  81. init();
  82. }
  83. virtual void destroy (void);
  84. ~MoverGroup (void) {
  85. destroy();
  86. }
  87. virtual long getId (void) {
  88. return(id);
  89. }
  90. virtual void setId (long _id) {
  91. id = _id;
  92. }
  93. //long calcRosterSize (BOOL checkUnits = TRUE);
  94. //void addToRoster (TeamPtr team, long* rosterIndex);
  95. long getNumMovers (void) {
  96. return(numMovers);
  97. }
  98. void setNumMovers (long num) {
  99. numMovers = num;
  100. }
  101. virtual bool add (MoverPtr mover);
  102. virtual bool remove (MoverPtr mover);
  103. virtual bool isMember (MoverPtr mover);
  104. virtual long disband (void);
  105. virtual long setPoint (MoverPtr mover);
  106. virtual MoverPtr getPoint (void);
  107. virtual void setDisbandOnNoPoint (bool setting) {
  108. disbandOnNoPoint = setting;
  109. }
  110. virtual bool getDisbandOnNoPoint (void) {
  111. return(disbandOnNoPoint);
  112. }
  113. MoverPtr getMover (long i);
  114. MoverPtr selectPoint (bool excludePoint);
  115. virtual long getMovers (MoverPtr* moverList);
  116. MechWarriorPtr getPointPilot (void);
  117. void statusCount (long* statusTally);
  118. void addToGUI (bool visible = true);
  119. long calcMoveGoals (Stuff::Vector3D goal, Stuff::Vector3D* goalList);
  120. long calcJumpGoals (Stuff::Vector3D goal, Stuff::Vector3D* goalList, GameObjectPtr DFATarget = NULL);
  121. //----------------
  122. // Tactical Orders
  123. virtual long handleTacticalOrder (TacticalOrder tacOrder, long priority, Stuff::Vector3D* jumpGoalList = NULL, bool queueGroupOrder = false);
  124. long orderMoveToPoint (bool setTacOrder, long origin, Stuff::Vector3D location, unsigned long params);
  125. long orderMoveToObject (bool setTacOrder, long origin, GameObjectPtr target, long fromArea, unsigned long params);
  126. long orderTraversePath (long origin, WayPathPtr wayPath, unsigned long params);
  127. long orderPatrolPath (long origin, WayPathPtr wayPath);
  128. long orderPowerDown (long origin);
  129. long orderPowerUp (long origin);
  130. long orderAttackObject (long origin, GameObjectPtr target, long attackType, long attackMethod, long attackRange, long aimLocation, long fromArea, unsigned long params);
  131. long orderWithdraw (long origin, Stuff::Vector3D location);
  132. long orderEject (long origin);
  133. //--------------
  134. // Combat Events
  135. void triggerAlarm (long alarmCode, unsigned long triggerId);
  136. long handleMateCrippled (unsigned long mateWID);
  137. long handleMateDisabled (unsigned long mateWID);
  138. long handleMateDestroyed (unsigned long mateWID);
  139. long handleMateEjected (unsigned long mateWID);
  140. void handleMateFiredWeapon (unsigned long mateWID);
  141. static void sortMovers (long numMoversInGroup, MoverPtr* moverList, Stuff::Vector3D dest);
  142. static long calcMoveGoals (Stuff::Vector3D goal, long numMovers, Stuff::Vector3D* goalList);
  143. static long calcJumpGoals (Stuff::Vector3D goal, long numMovers, Stuff::Vector3D* goalList, GameObjectPtr DFATarget);
  144. //----------------
  145. // Save Load
  146. void copyTo (MoverGroupData &data);
  147. };
  148. //***************************************************************************
  149. #endif