123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // DEPRECATED: Left for backwards compatibility with mods
- // This file is NOT AN EXAMPLE of how to use triggers
- // As overriding UpdateInsiders should ideally no longer be done
- // Look at "AreaDamageTriggerBase.c" instead and use that as base
- class AreaDamageTrigger extends AreaDamageTriggerBase
- {
- protected ref AreaDamageBase m_AreaDamageType;
-
- protected vector m_ExtentMin;
- protected vector m_ExtentMax;
- protected float m_InnerDistance;
-
- protected int m_TriggerUpdateMs;
-
- void AreaDamageTrigger()
- {
- // Backwards compat, revert the flags back to what they used to be
- ClearEventMask(EntityEvent.ENTER | EntityEvent.LEAVE);
- SetEventMask(EntityEvent.TOUCH);
-
- m_AreaDamageType = null;
-
- m_ExtentMin = vector.Zero;
- m_ExtentMax = vector.Zero;
- m_InnerDistance = 0;
-
- m_TriggerUpdateMs = 100;
- }
-
- // Backwards compat
- override void EOnTouch(IEntity other, int extra)
- {
- Object obj;
- if (Class.CastTo(obj, other))
- AddInsider(obj);
- }
-
- override void SetExtents( vector mins, vector maxs )
- {
- m_ExtentMax = maxs;
- m_ExtentMin = mins;
-
- m_InnerDistance = (GetRadius(m_ExtentMin, m_ExtentMax) * 0.5) + 0.2;
- super.SetExtents(mins, maxs);
- }
-
- override void SetAreaDamageManager( AreaDamageManager adType )
- {
- super.SetAreaDamageManager( adType );
-
- m_AreaDamageType = AreaDamageBase.Cast(adType);
- }
-
- void SetAreaDamageType( AreaDamageBase adType )
- {
- super.SetAreaDamageManager( adType );
-
- m_AreaDamageType = adType;
- }
-
- override void OnEnter( Object obj )
- {
- super.OnEnter( obj );
-
- if ( GetGame().IsServer() && m_AreaDamageType )
- m_AreaDamageType.OnEnter( obj );
- }
-
- override void OnLeave( Object obj )
- {
- super.OnLeave( obj );
-
- if ( GetGame().IsServer() && m_AreaDamageType )
- m_AreaDamageType.OnLeave( obj );
- }
-
- override protected void UpdateInsiders(int timeout)
- {
- if ( GetGame().IsServer() )
- {
- for (int n = 0; n < m_insiders.Count(); )
- {
- TriggerInsider ins = m_insiders.Get(n);
- if ( ins.GetObject() == null )
- {
- //object has been deleted. Remove it
- m_insiders.Remove(n);
- continue;
- }
-
- Object insObj = ins.GetObject();
- if ( insObj && ( !insObj.IsAlive() || vector.DistanceSq(insObj.GetPosition(), GetPosition()) > (m_InnerDistance * m_InnerDistance) ) )
- {
- int timeDiff = g_Game.GetTime() - ins.timeStamp;
- if (timeDiff > 500)
- {
- //object left. Remove it
- OnLeave(ins.GetObject());
- m_insiders.Remove(n);
-
- continue;
- }
- else
- {
- //Print("" + this + " :: " + insObj + " :: " + timeDiff);
- }
- }
-
- ++n;
- }
-
- //!DEBUG
- #ifdef DEVELOPER
- DebugSendDmgTrigger();
- #endif
- }
- }
- }
|