void ActivateOnOneTatget(EffectApplicationData app_data, Entity target) { EffectRegistry registry = EntityUtil.GetEffectRegistry(target); if (registry == null) { return; } if (!registry.CanAddEffect()) { return; } Effect effect = CreateEffect(target.ID); if (effect == null) { return; } app_data.m_target_entity_id = target.ID; app_data.m_generator_id = m_generator.ID; app_data.m_entry_index = m_index; EffectDefinitionComponent definition_cmp = effect.GetDefinitionComponent(); definition_cmp.InitializeApplicationData(app_data); if (!registry.AddEffect(effect)) { m_generator.GetLogicWorld().GetEffectManager().DestroyObject(effect.ID); } else { m_effect2entity[effect.ID] = target.ID; } }
public void RemoveEffect(Effect effect) { effect.Unapply(); effect.GetDefinitionComponent().MarkExpired(); m_active_effects.Remove(effect); effect.GetLogicWorld().GetEffectManager().DestroyObject(effect.ID); }
public override void Run(LogicWorld logic_world, FixPoint current_time, FixPoint delta_time) { Entity entity = logic_world.GetEntityManager().GetObject(m_entity_id); if (entity == null) { return; } EffectRegistry registry = EntityUtil.GetEffectRegistry(entity); if (registry == null) { return; } Effect effect = registry.GetEffect(m_effect_id); if (effect == null) { return; } EffectDefinitionComponent definition_cmp = effect.GetDefinitionComponent(); if (definition_cmp.ExpirationTime > logic_world.GetCurrentTime()) { return; } registry.RemoveEffect(m_effect_id); }
bool AreConflicting(Effect effect1, Effect effect2) { EffectDefinitionComponent cmp1 = effect1.GetDefinitionComponent(); EffectDefinitionComponent cmp2 = effect2.GetDefinitionComponent(); if (cmp1.ConflictID == cmp2.ConflictID) { return(true); } return(false); }
public bool AddEffect(Effect effect) { if (!CanAddEffect()) { return(false); } EffectDefinitionComponent definition_cmp = effect.GetDefinitionComponent(); ClassifiedEffectContainer container = GetContainer(definition_cmp.Category); if (container == null) { return(false); } if (!container.AddEffect(effect)) { return(false); } m_effects_by_id[effect.ID] = effect; return(true); }
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); }