gate.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. //---------------------------------------------------------------------------
  2. //
  3. // gate.h -- File contains the Gate Object Class
  4. //
  5. // MechCommander 2
  6. //
  7. //---------------------------------------------------------------------------//
  8. // Copyright (C) Microsoft Corporation. All rights reserved. //
  9. //===========================================================================//
  10. #ifndef GATE_H
  11. #define GATE_H
  12. //---------------------------------------------------------------------------
  13. // Include Files
  14. #ifndef DGATE_H
  15. #include "dgate.h"
  16. #endif
  17. #ifndef OBJTYPE_H
  18. #include "objtype.h"
  19. #endif
  20. #ifndef TERROBJ_H
  21. #include "terrobj.h"
  22. #endif
  23. #ifndef DMOVER_H
  24. #include "dmover.h"
  25. #endif
  26. //---------------------------------------------------------------------------
  27. // Macro Definitions
  28. //---------------------------------------------------------------------------
  29. class GateType : public ObjectType
  30. {
  31. //Data Members
  32. //-------------
  33. protected:
  34. unsigned long dmgLevel;
  35. public:
  36. unsigned long blownEffectId;
  37. unsigned long normalEffectId;
  38. unsigned long damageEffectId;
  39. float baseTonnage;
  40. long basePixelOffsetX;
  41. long basePixelOffsetY;
  42. float explDmg;
  43. float explRad;
  44. float openRadius;
  45. float littleExtent;
  46. long gateTypeName;
  47. bool blocksLineOfFire;
  48. long buildingDescriptionID;
  49. //Member Functions
  50. //-----------------
  51. public:
  52. void init (void)
  53. {
  54. ObjectType::init();
  55. dmgLevel = 0;
  56. blownEffectId = 0xFFFFFFFF;
  57. normalEffectId = 0xFFFFFFFF;
  58. damageEffectId = 0xFFFFFFFF;
  59. explDmg = explRad = 0.0;
  60. baseTonnage = 0.0;
  61. gateTypeName = 0;
  62. objectClass = GATE;
  63. }
  64. GateType (void)
  65. {
  66. init();
  67. }
  68. virtual long init (FilePtr objFile, unsigned long fileSize);
  69. long init (FitIniFilePtr objFile);
  70. ~GateType (void)
  71. {
  72. destroy();
  73. }
  74. long getDamageLvl (void)
  75. {
  76. return dmgLevel;
  77. }
  78. virtual void destroy (void);
  79. virtual GameObjectPtr createInstance (void);
  80. virtual bool handleCollision (GameObjectPtr collidee, GameObjectPtr collider);
  81. virtual bool handleDestruction (GameObjectPtr collidee, GameObjectPtr collider);
  82. };
  83. //---------------------------------------------------------------------------
  84. typedef struct _GateData : public TerrainObjectData
  85. {
  86. char teamId;
  87. bool lockedOpen;
  88. bool lockedClose;
  89. bool reasonToOpen;
  90. bool opened;
  91. bool opening;
  92. bool closed;
  93. bool closing;
  94. bool justDestroyed;
  95. bool lastMarkedOpen;
  96. MoverPtr closestObject;
  97. DWORD parentId;
  98. GameObjectWatchID parent;
  99. long buildingDescriptionID;
  100. long updatedTurn;
  101. } GateData;
  102. class Gate : public TerrainObject
  103. {
  104. //Data Members
  105. //-------------
  106. public:
  107. char teamId;
  108. bool lockedOpen;
  109. bool lockedClose;
  110. bool reasonToOpen;
  111. bool opened;
  112. bool opening;
  113. bool closed;
  114. bool closing;
  115. bool justDestroyed;
  116. bool lastMarkedOpen;
  117. MoverPtr closestObject;
  118. DWORD parentId;
  119. GameObjectWatchID parent;
  120. long buildingDescriptionID;
  121. long updatedTurn;
  122. //Member Functions
  123. //-----------------
  124. public:
  125. void init (bool create)
  126. {
  127. }
  128. Gate (void) : TerrainObject()
  129. {
  130. init (true);
  131. reasonToOpen = TRUE;
  132. lockedClose = FALSE;
  133. lockedOpen = FALSE;
  134. closed = TRUE;
  135. closing = opening = opened = FALSE;
  136. justDestroyed = FALSE;
  137. lastMarkedOpen = false;
  138. closestObject = NULL;
  139. parentId = 0xffffffff;
  140. parent = 0;
  141. updatedTurn = -1;
  142. }
  143. ~Gate (void)
  144. {
  145. destroy();
  146. }
  147. virtual void destroy (void);
  148. virtual long update (void);
  149. virtual void render (void);
  150. virtual void init (bool create, ObjectTypePtr _type);
  151. virtual long handleWeaponHit (WeaponShotInfoPtr shotInfo, bool addMultiplayChunk = FALSE);
  152. virtual long setTeamId (long _teamId, bool setup);
  153. virtual long getTeamId (void) {
  154. return(teamId);
  155. }
  156. TeamPtr getTeam (void);
  157. void lightOnFire (float timeToBurn);
  158. virtual float getDestructLevel (void)
  159. {
  160. return ((GateTypePtr)getObjectType())->getDamageLvl() - damage;
  161. }
  162. virtual long kill (void)
  163. {
  164. //Do nothing for now. Later, Buildings may do something.
  165. return NO_ERR;
  166. }
  167. bool isVisible (CameraPtr camera);
  168. void blowAnyOffendingObject (void);
  169. virtual bool isBuilding(void)
  170. {
  171. return (TRUE);
  172. }
  173. virtual void getBlockAndVertexNumber (long &blockNum, long &vertexNum)
  174. {
  175. blockNum = blockNumber;
  176. vertexNum = vertexNumber;
  177. }
  178. void openGate (void);
  179. void setLockedOpen()
  180. {
  181. lockedOpen = TRUE;
  182. lockedClose = FALSE;
  183. }
  184. void setLockedClose()
  185. {
  186. lockedOpen = FALSE;
  187. lockedClose = TRUE;
  188. }
  189. void releaseLocks()
  190. {
  191. lockedOpen = FALSE;
  192. lockedClose = FALSE;
  193. }
  194. float getLittleExtent (void);
  195. void destroyGate(void);
  196. virtual bool isLinked (void);
  197. virtual GameObjectPtr getParent (void);
  198. virtual void setParentId (DWORD pId);
  199. virtual long getDescription(){ return ((GateType*)getObjectType())->buildingDescriptionID; }
  200. virtual void setDamage (float newDamage);
  201. virtual void Save (PacketFilePtr file, long packetNum);
  202. void CopyTo (GateData *data);
  203. void Load (GateData *data);
  204. };
  205. //---------------------------------------------------------------------------
  206. #endif