AreaDamageTriggerBase.c
//! 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 ( !g_Game.IsServer() )
return;
super.AddInsider(obj);
}
//! Removing of TriggerInsider
override protected void RemoveInsider(TriggerInsider insider, int index = -1)
{
if ( !g_Game.IsServer() )
return;
super.RemoveInsider(insider, index);
}
//! Update the current TriggerInsider inside the Trigger
override protected void UpdateInsiders(int timeout)
{
if ( !g_Game.IsServer() )
return;
super.UpdateInsiders(timeout);
}
//@}
}