areadamagetriggerbase.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. //! Extended TriggerInsider for AreaDamageTriggerBase
  2. class AreaDamageTriggerInsider : TriggerInsider
  3. {
  4. //! Last time the object was damaged in seconds
  5. float lastDamaged;
  6. void AreaDamageTriggerInsider(Object obj)
  7. {
  8. }
  9. }
  10. //! Managed by AreaDamageManager and its derivatives
  11. class AreaDamageTriggerBase : Trigger
  12. {
  13. //! AreaDamageManager managing this instance
  14. protected ref AreaDamageManager m_AreaDamageManager;
  15. //! ctor
  16. void AreaDamageTriggerBase()
  17. {
  18. m_AreaDamageManager = null;
  19. }
  20. //! dtor
  21. void ~AreaDamageTriggerBase()
  22. {
  23. //! call Leave for all insiders when removing trigger
  24. int nr = m_insiders.Count();
  25. for (int n = 0; n < nr; ++n)
  26. {
  27. Object insObj = m_insiders[n].GetObject();
  28. if ( insObj )
  29. Leave(m_insiders[n]);
  30. }
  31. }
  32. //! AreaDamageTriggerBase configuration
  33. //@{
  34. //! Set the manager instance
  35. void SetAreaDamageManager( AreaDamageManager adType )
  36. {
  37. m_AreaDamageManager = adType;
  38. #ifdef DEVELOPER
  39. m_DebugAreaType = m_AreaDamageManager.GetAmmoName();
  40. #endif
  41. }
  42. //@}
  43. //! TriggerEvents, pass them on to manager
  44. //@{
  45. //! OnEnter
  46. override protected void OnEnterBeginEvent(TriggerInsider insider)
  47. {
  48. super.OnEnterBeginEvent(insider);
  49. if ( m_AreaDamageManager )
  50. m_AreaDamageManager.OnEnterBeginEvent(insider);
  51. }
  52. override protected void OnEnterServerEvent(TriggerInsider insider)
  53. {
  54. super.OnEnterServerEvent(insider);
  55. if ( m_AreaDamageManager )
  56. m_AreaDamageManager.OnEnterServerEvent(insider);
  57. }
  58. override protected void OnEnterClientEvent(TriggerInsider insider)
  59. {
  60. super.OnEnterClientEvent(insider);
  61. if ( m_AreaDamageManager )
  62. m_AreaDamageManager.OnEnterClientEvent(insider);
  63. }
  64. override protected void OnEnterEndEvent(TriggerInsider insider)
  65. {
  66. super.OnEnterEndEvent(insider);
  67. if ( m_AreaDamageManager )
  68. m_AreaDamageManager.OnEnterEndEvent(insider);
  69. }
  70. //! OnStayStart
  71. override protected void OnStayStartBeginEvent(int nrOfInsiders)
  72. {
  73. super.OnStayStartBeginEvent(nrOfInsiders);
  74. if ( m_AreaDamageManager )
  75. m_AreaDamageManager.OnStayStartBeginEvent(nrOfInsiders);
  76. }
  77. override protected void OnStayStartServerEvent(int nrOfInsiders)
  78. {
  79. super.OnStayStartServerEvent(nrOfInsiders);
  80. if ( m_AreaDamageManager )
  81. m_AreaDamageManager.OnStayStartServerEvent(nrOfInsiders);
  82. }
  83. override protected void OnStayStartClientEvent(int nrOfInsiders)
  84. {
  85. super.OnStayStartClientEvent(nrOfInsiders);
  86. if ( m_AreaDamageManager )
  87. m_AreaDamageManager.OnStayStartClientEvent(nrOfInsiders);
  88. }
  89. override protected void OnStayStartEndEvent(int nrOfInsiders)
  90. {
  91. super.OnStayStartEndEvent(nrOfInsiders);
  92. if ( m_AreaDamageManager )
  93. m_AreaDamageManager.OnStayStartEndEvent(nrOfInsiders);
  94. }
  95. //!OnStay
  96. override protected void OnStayBeginEvent(TriggerInsider insider, float deltaTime)
  97. {
  98. super.OnStayBeginEvent(insider, deltaTime);
  99. if ( m_AreaDamageManager )
  100. m_AreaDamageManager.OnStayBeginEvent(insider, deltaTime);
  101. }
  102. override protected void OnStayServerEvent(TriggerInsider insider, float deltaTime)
  103. {
  104. super.OnStayServerEvent(insider, deltaTime);
  105. if ( m_AreaDamageManager )
  106. m_AreaDamageManager.OnStayServerEvent(insider, deltaTime);
  107. }
  108. override protected void OnStayClientEvent(TriggerInsider insider, float deltaTime)
  109. {
  110. super.OnStayClientEvent(insider, deltaTime);
  111. if ( m_AreaDamageManager )
  112. m_AreaDamageManager.OnStayClientEvent(insider, deltaTime);
  113. }
  114. override protected void OnStayEndEvent(TriggerInsider insider, float deltaTime)
  115. {
  116. super.OnStayEndEvent(insider, deltaTime);
  117. if ( m_AreaDamageManager )
  118. m_AreaDamageManager.OnStayEndEvent(insider, deltaTime);
  119. }
  120. //! OnStayFinish
  121. override protected void OnStayFinishBeginEvent()
  122. {
  123. super.OnStayFinishBeginEvent();
  124. if ( m_AreaDamageManager )
  125. m_AreaDamageManager.OnStayFinishBeginEvent();
  126. }
  127. override protected void OnStayFinishServerEvent()
  128. {
  129. super.OnStayFinishServerEvent();
  130. if ( m_AreaDamageManager )
  131. m_AreaDamageManager.OnStayFinishServerEvent();
  132. }
  133. override protected void OnStayFinishClientEvent()
  134. {
  135. super.OnStayFinishClientEvent();
  136. if ( m_AreaDamageManager )
  137. m_AreaDamageManager.OnStayFinishClientEvent();
  138. }
  139. override protected void OnStayFinishEndEvent()
  140. {
  141. super.OnStayFinishEndEvent();
  142. if ( m_AreaDamageManager )
  143. m_AreaDamageManager.OnStayFinishEndEvent();
  144. }
  145. //! OnLeave
  146. override protected void OnLeaveBeginEvent(TriggerInsider insider)
  147. {
  148. super.OnLeaveBeginEvent(insider);
  149. if ( m_AreaDamageManager )
  150. m_AreaDamageManager.OnLeaveBeginEvent(insider);
  151. }
  152. override protected void OnLeaveServerEvent(TriggerInsider insider)
  153. {
  154. super.OnLeaveServerEvent(insider);
  155. if ( m_AreaDamageManager )
  156. m_AreaDamageManager.OnLeaveServerEvent(insider);
  157. }
  158. override protected void OnLeaveClientEvent(TriggerInsider insider)
  159. {
  160. super.OnLeaveClientEvent(insider);
  161. if ( m_AreaDamageManager )
  162. m_AreaDamageManager.OnLeaveClientEvent(insider);
  163. }
  164. override protected void OnLeaveEndEvent(TriggerInsider insider)
  165. {
  166. super.OnLeaveEndEvent(insider);
  167. if ( m_AreaDamageManager )
  168. m_AreaDamageManager.OnLeaveEndEvent(insider);
  169. }
  170. //@}
  171. //! TriggerInsider conditions
  172. //@{
  173. //! Condition whether a TriggerInsider should still be updated or not (checked in update loop and before adding)
  174. override protected bool ShouldRemoveInsider(TriggerInsider insider)
  175. {
  176. return !insider.GetObject().IsAlive();
  177. }
  178. //@}
  179. //! TriggerInsider processing
  180. //@{
  181. //! Override the TriggerInsider type to be AreaDamageTriggerInsider
  182. override protected TriggerInsider CreateInsider(Object obj)
  183. {
  184. return new AreaDamageTriggerInsider(obj);
  185. }
  186. //! Adding of new TriggerInsider
  187. override protected void AddInsider(Object obj)
  188. {
  189. if ( !GetGame().IsServer() )
  190. return;
  191. super.AddInsider(obj);
  192. }
  193. //! Removing of TriggerInsider
  194. override protected void RemoveInsider(TriggerInsider insider, int index = -1)
  195. {
  196. if ( !GetGame().IsServer() )
  197. return;
  198. super.RemoveInsider(insider, index);
  199. }
  200. //! Update the current TriggerInsider inside the Trigger
  201. override protected void UpdateInsiders(int timeout)
  202. {
  203. if ( !GetGame().IsServer() )
  204. return;
  205. super.UpdateInsiders(timeout);
  206. }
  207. //@}
  208. }