123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- //! Extended TriggerInsider for AreaDamageTriggerBase
- class AreaDamageTriggerInsider : TriggerInsider
- {
- //! Last time the object was damaged in seconds
- float lastDamaged;
-
- void AreaDamageTriggerInsider(Object obj)
- {
- }
- }
- //! Managed by AreaDamageManager and its derivatives
- class AreaDamageTriggerBase : Trigger
- {
- //! AreaDamageManager managing this instance
- protected ref AreaDamageManager m_AreaDamageManager;
-
- //! ctor
- void AreaDamageTriggerBase()
- {
- m_AreaDamageManager = null;
- }
- //! dtor
- void ~AreaDamageTriggerBase()
- {
- //! call Leave for all insiders when removing trigger
- int nr = m_insiders.Count();
- for (int n = 0; n < nr; ++n)
- {
- Object insObj = m_insiders[n].GetObject();
- if ( insObj )
- Leave(m_insiders[n]);
- }
- }
-
- //! AreaDamageTriggerBase configuration
- //@{
- //! Set the manager instance
- void SetAreaDamageManager( AreaDamageManager adType )
- {
- m_AreaDamageManager = adType;
-
- #ifdef DEVELOPER
- m_DebugAreaType = m_AreaDamageManager.GetAmmoName();
- #endif
- }
- //@}
-
-
- //! TriggerEvents, pass them on to manager
- //@{
- //! OnEnter
- override protected void OnEnterBeginEvent(TriggerInsider insider)
- {
- super.OnEnterBeginEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnEnterBeginEvent(insider);
- }
- override protected void OnEnterServerEvent(TriggerInsider insider)
- {
- super.OnEnterServerEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnEnterServerEvent(insider);
- }
- override protected void OnEnterClientEvent(TriggerInsider insider)
- {
- super.OnEnterClientEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnEnterClientEvent(insider);
- }
- override protected void OnEnterEndEvent(TriggerInsider insider)
- {
- super.OnEnterEndEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnEnterEndEvent(insider);
- }
- //! OnStayStart
- override protected void OnStayStartBeginEvent(int nrOfInsiders)
- {
- super.OnStayStartBeginEvent(nrOfInsiders);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayStartBeginEvent(nrOfInsiders);
- }
- override protected void OnStayStartServerEvent(int nrOfInsiders)
- {
- super.OnStayStartServerEvent(nrOfInsiders);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayStartServerEvent(nrOfInsiders);
- }
- override protected void OnStayStartClientEvent(int nrOfInsiders)
- {
- super.OnStayStartClientEvent(nrOfInsiders);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayStartClientEvent(nrOfInsiders);
- }
- override protected void OnStayStartEndEvent(int nrOfInsiders)
- {
- super.OnStayStartEndEvent(nrOfInsiders);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayStartEndEvent(nrOfInsiders);
- }
- //!OnStay
- override protected void OnStayBeginEvent(TriggerInsider insider, float deltaTime)
- {
- super.OnStayBeginEvent(insider, deltaTime);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayBeginEvent(insider, deltaTime);
- }
- override protected void OnStayServerEvent(TriggerInsider insider, float deltaTime)
- {
- super.OnStayServerEvent(insider, deltaTime);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayServerEvent(insider, deltaTime);
- }
- override protected void OnStayClientEvent(TriggerInsider insider, float deltaTime)
- {
- super.OnStayClientEvent(insider, deltaTime);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayClientEvent(insider, deltaTime);
- }
- override protected void OnStayEndEvent(TriggerInsider insider, float deltaTime)
- {
- super.OnStayEndEvent(insider, deltaTime);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayEndEvent(insider, deltaTime);
- }
- //! OnStayFinish
- override protected void OnStayFinishBeginEvent()
- {
- super.OnStayFinishBeginEvent();
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayFinishBeginEvent();
- }
- override protected void OnStayFinishServerEvent()
- {
- super.OnStayFinishServerEvent();
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayFinishServerEvent();
- }
- override protected void OnStayFinishClientEvent()
- {
- super.OnStayFinishClientEvent();
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayFinishClientEvent();
- }
- override protected void OnStayFinishEndEvent()
- {
- super.OnStayFinishEndEvent();
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnStayFinishEndEvent();
- }
-
- //! OnLeave
- override protected void OnLeaveBeginEvent(TriggerInsider insider)
- {
- super.OnLeaveBeginEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnLeaveBeginEvent(insider);
- }
- override protected void OnLeaveServerEvent(TriggerInsider insider)
- {
- super.OnLeaveServerEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnLeaveServerEvent(insider);
- }
- override protected void OnLeaveClientEvent(TriggerInsider insider)
- {
- super.OnLeaveClientEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnLeaveClientEvent(insider);
- }
- override protected void OnLeaveEndEvent(TriggerInsider insider)
- {
- super.OnLeaveEndEvent(insider);
-
- if ( m_AreaDamageManager )
- m_AreaDamageManager.OnLeaveEndEvent(insider);
- }
- //@}
-
-
- //! TriggerInsider conditions
- //@{
- //! Condition whether a TriggerInsider should still be updated or not (checked in update loop and before adding)
- override protected bool ShouldRemoveInsider(TriggerInsider insider)
- {
- return !insider.GetObject().IsAlive();
- }
- //@}
-
-
- //! TriggerInsider processing
- //@{
- //! Override the TriggerInsider type to be AreaDamageTriggerInsider
- override protected TriggerInsider CreateInsider(Object obj)
- {
- return new AreaDamageTriggerInsider(obj);
- }
-
- //! Adding of new TriggerInsider
- override protected void AddInsider(Object obj)
- {
- if ( !GetGame().IsServer() )
- return;
-
- super.AddInsider(obj);
- }
-
- //! Removing of TriggerInsider
- override protected void RemoveInsider(TriggerInsider insider, int index = -1)
- {
- if ( !GetGame().IsServer() )
- return;
-
- super.RemoveInsider(insider, index);
- }
-
- //! Update the current TriggerInsider inside the Trigger
- override protected void UpdateInsiders(int timeout)
- {
- if ( !GetGame().IsServer() )
- return;
-
- super.UpdateInsiders(timeout);
- }
- //@}
- }
|