public bool Apply(float curTime)
{
if (curTime > duration + startTime)
{
EndEffect();
return(true);
}
switch (enemyState)
{
case EnemyState.Burn:
if (nextEvent <= curTime)
{
owner.DirectDamage((int)magnitude, 1);
nextEvent = curTime + interval;
}
break;
case EnemyState.Poison:
if (nextEvent <= curTime)
{
owner.DirectDamage((int)magnitude, 3);
nextEvent = curTime + interval;
}
break;
case EnemyState.MindControl:
if (!appliedEffect)
{
owner.StopMindControlling = false;
owner.mindControlled++;
if (owner.mindControlled == 1)
{
MoveOwner(owner._ObjectManager.Map.enemySpawnNode);
}
appliedEffect = true;
}
break;
case EnemyState.ReducedArmor:
if (!appliedEffect)
{
if (owner.armor < magnitude)
{
magnitude = owner.armor;
}
owner.armor -= (int)magnitude;
appliedEffect = true;
}
break;
case EnemyState.Slow:
if (!appliedEffect)
{
if (owner.speed < magnitude)
{
magnitude = owner.speed; // This makes reverting the speed to normal easier.
}
owner.speed -= magnitude;
appliedEffect = true;
}
break;
}
return(false);
}