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); }