Пример #1
0
        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);
 }
Пример #3
0
        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);
        }
Пример #5
0
        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);
        }