public void RemoveEffect(Effect effect) { effect.Unapply(); effect.GetDefinitionComponent().MarkExpired(); m_active_effects.Remove(effect); effect.GetLogicWorld().GetEffectManager().DestroyObject(effect.ID); }
public bool AddEffect(Effect effect) { EffectDefinitionComponent definition_cmp = effect.GetDefinitionComponent(); if (definition_cmp.ExpirationTime <= effect.GetCurrentTime()) { effect.Apply(); effect.Unapply(); return(false); } int count = m_active_effects.Count; for (int i = 0; i < count;) { Effect active_effect = m_active_effects[i]; if (!AreConflicting(effect, active_effect)) { ++i; continue; } Effect rejected_effect = PickRejectedEffect(effect, active_effect); if (rejected_effect == effect) { return(false); } else { m_registry.RemoveEffect(active_effect.ID); count = m_active_effects.Count; } } m_active_effects.Add(effect); effect.Apply(); definition_cmp.StartExpirationTask(); return(true); }