turret.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. //***************************************************************************
  2. //
  3. // turret.h -- File contains the Turret Object Class
  4. //
  5. // MechCommander 2
  6. //
  7. //---------------------------------------------------------------------------//
  8. // Copyright (C) Microsoft Corporation. All rights reserved. //
  9. //===========================================================================//
  10. #ifndef TURRET_H
  11. #define TURRET_H
  12. //---------------------------------------------------------------------------
  13. #ifndef DTURRET_H
  14. #include "dturret.h"
  15. #endif
  16. #ifndef OBJMGR_H
  17. #include "objmgr.h"
  18. #endif
  19. #ifndef TERROBJ_H
  20. #include "terrobj.h"
  21. #endif
  22. //---------------------------------------------------------------------------
  23. // Macro Definitions
  24. #define NO_RAM_FOR_BUILDING 0xDCDC0006
  25. #define NO_APPEARANCE_TYPE_FOR_BLD 0xDCDC0007
  26. #define NO_APPEARANCE_FOR_BLD 0xDCDC0008
  27. #define APPEARANCE_NOT_VFX_APPEAR 0xDCDC0009
  28. #define MAX_TURRET_WEAPONFIRE_CHUNKS 32
  29. #define MAX_TURRET_WEAPONS 4
  30. //---------------------------------------------------------------------------
  31. class TurretType : public ObjectType {
  32. protected:
  33. float damageLevel;
  34. //unsigned long dmgLevelClosed;
  35. public:
  36. unsigned long blownEffectId;
  37. unsigned long normalEffectId;
  38. unsigned long damageEffectId;
  39. float baseTonnage;
  40. float explDmg;
  41. float explRad;
  42. float littleExtent;
  43. float LOSFactor;
  44. float engageRadius;
  45. float turretYawRate;
  46. long weaponMasterId[MAX_TURRET_WEAPONS];
  47. long pilotSkill;
  48. float punch;
  49. long turretTypeName;
  50. long buildingDescriptionID;
  51. public:
  52. void init (void) {
  53. ObjectType::init();
  54. objectTypeClass = TURRET_TYPE;
  55. objectClass = TURRET;
  56. damageLevel = 0.0;
  57. blownEffectId = 0xFFFFFFFF;
  58. normalEffectId = 0xFFFFFFFF;
  59. damageEffectId = 0xFFFFFFFF;
  60. explDmg = explRad = 0.0;
  61. baseTonnage = 0.0;
  62. weaponMasterId[0] = weaponMasterId[1] = weaponMasterId[2] = weaponMasterId[3] = -1;
  63. pilotSkill = 0;
  64. punch = 0.0;
  65. turretYawRate = 0.0;
  66. turretTypeName = 0;
  67. LOSFactor = 1.0f;
  68. }
  69. TurretType (void) {
  70. init();
  71. }
  72. virtual long init (FilePtr objFile, unsigned long fileSize);
  73. long init (FitIniFilePtr objFile);
  74. ~TurretType (void) {
  75. destroy();
  76. }
  77. float getDamageLevel (void) {
  78. return(damageLevel);
  79. }
  80. virtual void destroy (void);
  81. virtual GameObjectPtr createInstance (void);
  82. virtual bool handleCollision (GameObjectPtr collidee, GameObjectPtr collider);
  83. virtual bool handleDestruction (GameObjectPtr collidee, GameObjectPtr collider);
  84. };
  85. //---------------------------------------------------------------------------
  86. typedef struct _TurretData : public TerrainObjectData
  87. {
  88. char teamId;
  89. float turretRotation;
  90. bool didReveal;
  91. GameObjectWatchID targetWID;
  92. float readyTime[MAX_TURRET_WEAPONS];
  93. float lastFireTime[MAX_TURRET_WEAPONS];
  94. float minRange; // current min attack range
  95. float maxRange; // current max attack range
  96. long numFunctionalWeapons; // takes into account damage, etc.
  97. float idleWait;
  98. Stuff::Vector3D idlePosition;
  99. Stuff::Vector3D oldPosition;
  100. DWORD parentId;
  101. GameObjectWatchID parent;
  102. long currentWeaponNode;
  103. } TurretData;
  104. class Turret : public TerrainObject {
  105. public:
  106. char teamId;
  107. float turretRotation;
  108. bool didReveal;
  109. GameObjectWatchID targetWID;
  110. float readyTime[MAX_TURRET_WEAPONS];
  111. float lastFireTime[MAX_TURRET_WEAPONS];
  112. float minRange; // current min attack range
  113. float maxRange; // current max attack range
  114. long numFunctionalWeapons; // takes into account damage, etc.
  115. long netRosterIndex;
  116. long numWeaponFireChunks[2];
  117. unsigned long weaponFireChunks[2][MAX_TURRET_WEAPONFIRE_CHUNKS];
  118. TG_LightPtr pointLight;
  119. DWORD lightId;
  120. float idleWait;
  121. Stuff::Vector3D idlePosition;
  122. Stuff::Vector3D oldPosition;
  123. DWORD parentId;
  124. GameObjectWatchID parent;
  125. long currentWeaponNode;
  126. static bool turretsEnabled[MAX_TEAMS];
  127. public:
  128. void init (bool create);
  129. Turret (void) : TerrainObject() {
  130. init(true);
  131. }
  132. ~Turret (void) {
  133. destroy();
  134. }
  135. virtual void updateDebugWindow (GameDebugWindow* debugWindow);
  136. virtual long setTeamId (long _teamId, bool setup);
  137. virtual long getTeamId (void) {
  138. return(teamId);
  139. }
  140. virtual TeamPtr getTeam (void);
  141. virtual bool isFriendly (TeamPtr team);
  142. virtual bool isEnemy (TeamPtr team);
  143. virtual bool isNeutral (TeamPtr team);
  144. virtual void destroy (void);
  145. virtual long update (void);
  146. virtual void render (void);
  147. virtual void init (bool create, ObjectTypePtr _type);
  148. virtual long handleWeaponHit (WeaponShotInfoPtr shotInfo, bool addMultiplayChunk = false);
  149. long getNetRosterIndex (void) {
  150. return(netRosterIndex);
  151. }
  152. void setNetRosterIndex (long index) {
  153. netRosterIndex = index;
  154. }
  155. void lightOnFire (float timeToBurn);
  156. virtual long kill (void)
  157. {
  158. //Do nothing for now. Later, Buildings may do something.
  159. return NO_ERR;
  160. }
  161. virtual bool isBuilding(void)
  162. {
  163. return (true);
  164. }
  165. virtual void getBlockAndVertexNumber (long &blockNum, long &vertexNum) {
  166. blockNum = blockNumber;
  167. vertexNum = vertexNumber;
  168. }
  169. bool isWeaponReady (long weaponId);
  170. bool isWeaponMissile (long weaponId);
  171. bool isWeaponStreak (long weaponId);
  172. float calcAttackChance (GameObjectPtr target, long* range, long weaponId);
  173. void recordWeaponFireTime (long weaponId);
  174. void startWeaponRecycle (long weaponId);
  175. long getNumWeaponFireChunks (long which)
  176. {
  177. return(numWeaponFireChunks[which]);
  178. }
  179. long clearWeaponFireChunks (long which);
  180. long addWeaponFireChunk (long which, WeaponFireChunkPtr chunk);
  181. long addWeaponFireChunks (long which, unsigned long* packedChunkBuffer, long numChunks);
  182. long grabWeaponFireChunks (long which, unsigned long* packedChunkBuffer);
  183. virtual long updateWeaponFireChunks (long which);
  184. void fireWeapon (GameObjectPtr target, long weaponId);
  185. virtual Stuff::Vector3D getPositionFromHS (long weaponNum);
  186. virtual float relFacingTo (Stuff::Vector3D goal, long bodyLocation = -1);
  187. long handleWeaponFire (long weaponIndex,
  188. GameObjectPtr target,
  189. Stuff::Vector3D* targetPoint,
  190. bool hit,
  191. float entryAngle,
  192. long numMissiles,
  193. long hitLocation);
  194. virtual void printFireWeaponDebugInfo (GameObjectPtr target, Stuff::Vector3D* targetPoint, long chance, long roll, WeaponShotInfo* shotInfo);
  195. virtual void printHandleWeaponHitDebugInfo (WeaponShotInfo* shotInfo);
  196. float getLittleExtent (void)
  197. {
  198. return (((TurretTypePtr)getObjectType())->littleExtent);
  199. }
  200. virtual bool isLinked (void);
  201. virtual GameObjectPtr getParent (void);
  202. virtual void setParentId (DWORD pId);
  203. virtual long getDescription(){ return ((TurretType*)getObjectType())->buildingDescriptionID; }
  204. long updateAnimations (void);
  205. virtual Stuff::Vector3D getLOSPosition (void);
  206. virtual float getDestructLevel (void)
  207. {
  208. return ((TurretTypePtr)getObjectType())->getDamageLevel() - damage;
  209. }
  210. virtual void setDamage (float newDamage);
  211. virtual long calcFireRanges (void);
  212. virtual void Save (PacketFilePtr file, long packetNum);
  213. void CopyTo (TurretData *data);
  214. void Load (TurretData *data);
  215. virtual void renderShadows (void);
  216. };
  217. //***************************************************************************
  218. #endif