Flies.c
class FliesMdfr: ModifierBase
{
const float DISTANCE_SENSITIVITY_SQR = Math.SqrFloat(0.05/*actual distance in meters*/);
const int TICK_FREQUENCY = 15;
const int IDLE_COUNT_THRESHOLD = 40;
vector m_PrevPosition;
int m_IdleCount;
override void Init()
{
m_TrackActivatedTime = false;
m_ID = eModifiers.MDF_FLIES;
m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
m_TickIntervalActive = TICK_FREQUENCY;
DisableActivateCheck();
DisableDeactivateCheck();
}
override bool ActivateCondition(PlayerBase player)
{
return false;
}
override bool DeactivateCondition(PlayerBase player)
{
return false;
}
override void OnTick(PlayerBase player, float deltaT)
{
float dist_sqr = vector.DistanceSq(player.GetPosition(), m_PrevPosition);
if( dist_sqr < DISTANCE_SENSITIVITY_SQR)//has the player stayed still since last check
{
m_IdleCount++;
}
else
{
if(m_IdleCount >= IDLE_COUNT_THRESHOLD)//disable the effect
{
player.m_CorpseState = -PlayerConstants.CORPSE_STATE_DECAYED;
player.SetSynchDirty();
}
m_IdleCount = 0;//player moved, reset the count
}
m_PrevPosition = player.GetPosition();
if( m_IdleCount == IDLE_COUNT_THRESHOLD)//should we play the effect ?
{
player.m_CorpseState = PlayerConstants.CORPSE_STATE_DECAYED;
player.SetSynchDirty();
}
}
override void OnReconnect(PlayerBase player)
{
OnActivate(player);
}
override void OnActivate(PlayerBase player)
{
m_IdleCount = 0;
player.m_CorpseState = -PlayerConstants.CORPSE_STATE_DECAYED;
player.SetSynchDirty();
}
override void OnDeactivate(PlayerBase player)
{
}
};