dispenserigc.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /*
  2. ** Copyright (C) 1996, 1997 Microsoft Corporation. All Rights Reserved.
  3. **
  4. ** File: dispenserIGC.h
  5. **
  6. ** Author:
  7. **
  8. ** Description:
  9. ** Header for the CdispenserIGC class. This file was initially created by
  10. ** the ATL wizard.
  11. **
  12. ** History:
  13. */
  14. // dispenserIGC.h : Declaration of the CdispenserIGC
  15. #ifndef __DISPENSERIGC_H_
  16. #define __DISPENSERIGC_H_
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CdispenserIGC
  19. class CdispenserIGC : public IdispenserIGC
  20. {
  21. public:
  22. CdispenserIGC(void);
  23. ~CdispenserIGC(void);
  24. // IbaseIGC
  25. virtual HRESULT Initialize(ImissionIGC* pMission, Time now, const void* data, int dataSize);
  26. virtual void Terminate(void);
  27. virtual void Update(Time now);
  28. virtual ObjectType GetObjectType(void) const
  29. {
  30. return OT_dispenser;
  31. }
  32. virtual ImissionIGC* GetMission(void) const
  33. {
  34. return m_pMission;
  35. }
  36. // IpartIGC
  37. virtual EquipmentType GetEquipmentType(void) const
  38. {
  39. return m_expendableType->GetEquipmentType();
  40. }
  41. virtual IpartTypeIGC* GetPartType(void) const
  42. {
  43. return m_partType;
  44. }
  45. virtual IshipIGC* GetShip(void) const
  46. {
  47. return m_ship;
  48. }
  49. virtual void SetShip(IshipIGC* newVal, Mount mount);
  50. virtual Mount GetMountID(void) const
  51. {
  52. return m_mountID;
  53. }
  54. virtual void SetMountID(Mount newVal);
  55. virtual bool fActive(void) const
  56. {
  57. return m_mountID == 0;
  58. }
  59. virtual void Activate(void)
  60. {
  61. m_ship->ChangeSignature(m_expendableType->GetLauncherDef()->signature);
  62. m_timeLoaded = m_ship->GetLastUpdate() + ((1.0f/m_pMission->GetFloatConstant(c_fcidMountRate)) + m_expendableType->GetLoadTime());
  63. }
  64. virtual void Deactivate(void)
  65. {
  66. m_ship->ChangeSignature(-m_expendableType->GetLauncherDef()->signature);
  67. }
  68. virtual float GetMass(void) const
  69. {
  70. return m_amount * m_expendableType->GetMass();
  71. }
  72. virtual Money GetPrice(void) const
  73. {
  74. return ((Money)m_amount) * m_expendableType->GetLauncherDef()->price;
  75. }
  76. virtual float GetMountedFraction(void) const
  77. {
  78. return m_mountedFraction;
  79. }
  80. virtual void SetMountedFraction(float f)
  81. {
  82. m_mountedFraction = f;
  83. }
  84. virtual void Arm(void)
  85. {
  86. m_mountedFraction = 1.0f;
  87. m_timeLoaded = m_ship->GetLastUpdate();
  88. }
  89. // IlauncherIGC
  90. virtual void SetAmount(short a)
  91. {
  92. {
  93. short maxAmount = m_partType->GetAmount(m_ship);
  94. if (a > maxAmount)
  95. a = maxAmount;
  96. }
  97. if (a != m_amount)
  98. {
  99. //Adjust the mass of the ship (if there is one) to account for the change in the number of mines
  100. if (m_ship)
  101. {
  102. m_ship->SetMass(m_ship->GetMass() +
  103. (a - m_amount) * m_expendableType->GetMass());
  104. m_pMission->GetIgcSite()->LoadoutChangeEvent(m_ship, this, c_lcQuantityChange);
  105. }
  106. m_amount = a;
  107. }
  108. }
  109. virtual short GetAmount(void) const
  110. {
  111. return m_amount;
  112. }
  113. virtual void SetTimeFired(Time now)
  114. {
  115. m_timeLoaded = now + m_expendableType->GetLoadTime();
  116. }
  117. virtual Time GetTimeLoaded(void) const
  118. {
  119. return m_timeLoaded;
  120. }
  121. virtual void SetTimeLoaded(Time tl)
  122. {
  123. m_timeLoaded = tl;
  124. }
  125. virtual void ResetTimeLoaded(void)
  126. {
  127. assert (m_ship);
  128. m_timeLoaded = m_ship->GetLastUpdate() + ((1.0f/m_pMission->GetFloatConstant(c_fcidMountRate)) + m_expendableType->GetLoadTime());
  129. }
  130. virtual const Vector& GetEmissionPt(void) const
  131. {
  132. return m_emissionPt;
  133. }
  134. // IdispenserIGC
  135. virtual IexpendableTypeIGC* GetExpendableType(void) const
  136. {
  137. return m_expendableType;
  138. }
  139. virtual float GetArmedFraction(void)
  140. {
  141. if (GetMountedFraction() < 1.0f)
  142. {
  143. return 0;
  144. }
  145. else
  146. {
  147. return 1.0f - max(0.0f, (m_timeLoaded - Time::Now()) / m_expendableType->GetLoadTime());
  148. }
  149. }
  150. private:
  151. ImissionIGC* m_pMission;
  152. IlauncherTypeIGC* m_partType;
  153. IexpendableTypeIGC* m_expendableType;
  154. IshipIGC* m_ship;
  155. Vector m_emissionPt;
  156. float m_mountedFraction;
  157. Time m_timeLoaded;
  158. short m_amount;
  159. Mount m_mountID;
  160. };
  161. #endif //__DISPENSERIGC_H_