Esempio n. 1
0
        private static void _buffAddOrRemove(ActionType actionType, out bool result, IIcSkSEntity entity, IBuffDataComponent buff,
                                             IStructIcSkSEntityManager <IIcSkSEntity> structIcSkSEntityManager)
        {
            result = false;
            switch (buff)
            {
            case Damage damage:
                switch (actionType)
                {
                case ActionType.Add:
                    structIcSkSEntityManager.AddBuff(entity, damage);
                    break;

                case ActionType.Remove:
                    result = structIcSkSEntityManager.RemoveBuff(entity, (Damage)buff);
                    break;

                case ActionType.Has:
                    result = structIcSkSEntityManager.HasBuff(entity, (Damage)buff);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(actionType), actionType, null);
                }
                break;
            }
        }
Esempio n. 2
0
        public void Create(IIcSkSEntity entity, int index)
        {
            var buffs = _buffManager.GetBuffsCondition<TMechanics>(entity,_getHealth);

            var damage = _buffManager.GetBuffData<TDamageBuff>(entity, index);

#if ENABLE_MANAGED_JOBS
            for (var i = 0; i < buffs.Length; )
#else
            for (var i = 0; i < buffs.Count; i++)
#endif
            {
                var buffInfo = buffs[i];

                var buff = buffInfo.Buff;
                
                buff.Value = buff.Value - damage.Value;

                _buffManager.SetBuffData(entity, buff, buffInfo.Index);

                //todo 一个单位只有第一条血条会受伤
                break;
            }

            _buffManager.RemoveBuff(entity, damage);
        }
Esempio n. 3
0
 public static void AddBuff(IIcSkSEntityManager <IIcSkSEntity> entityManager, IIcSkSEntity entity,
                            IBuffDataComponent buff)
 {
     if (entityManager is IStructIcSkSEntityManager <IIcSkSEntity> skSEntityManager)
     {
         _buffAddOrRemove(ActionType.Add, out _, entity, buff, skSEntityManager);
     }
 }
Esempio n. 4
0
        protected sealed override T GetOutValue()
        {
            BuffManager = GetInputValue(nameof(BuffManager), BuffManager);
            Target      = GetInputValue(nameof(Target), Target);;

            BuffType = Type.GetType(_buffAQName);

            return(Execute());
        }
Esempio n. 5
0
        protected sealed override T GetOutValue()
        {
            SkillManager = GetInputValue(nameof(SkillManager), SkillManager);
            Target       = GetInputValue(nameof(Target), Target);

            var skillType = Type.GetType(_skillComponentAQName);

            if (skillType == null)
            {
                return(default);
Esempio n. 6
0
 public void UseSkill(IIcSkSEntity icSkSEntity, ISkillDataComponent skill)
 {
     foreach (var system in _skillSystem)
     {
         if (system.Filter(icSkSEntity, skill))
         {
             system.Execute(icSkSEntity, skill);
         }
     }
 }
        public void Destroy(IIcSkSEntity entity, int index)
        {
            var damage = _buffManager.GetBuffData <TDamageBuff>(entity, index);

            var fixedLifesteals = _buffManager.GetBuffs <TPercentageLifesteal>(damage.Entity.ToIIcSkSEntity());

            if (fixedLifesteals.Count == 0)
            {
                return;
            }

            float lifestealValue = 0;

            foreach (var fixedLifesteal in fixedLifesteals)
            {
                if (fixedLifesteal.Type == damage.Type)
                {
                    lifestealValue += damage.Value * fixedLifesteal.Value;
                }
            }

            var lifesteal = fixedLifesteals[fixedLifesteals.Count - 1];

            var mechanicBuffs = _buffManager.GetBuffs <TMechanics>(damage.Entity.ToIIcSkSEntity());

            if (mechanicBuffs.Count == 0)
            {
                return;
            }

            for (var i = 0; i < mechanicBuffs.Count; i++)
            {
                var mechanicBuff = mechanicBuffs[i];

                if (mechanicBuff.MechanicsType == MechanicsType.Health)
                {
                    mechanicBuff.Value += lifesteal.Value;

                    //第二条血把他当最大血量
                    if (mechanicBuffs.Count >= 2)
                    {
                        if (mechanicBuff.Value > mechanicBuffs[1].Value)
                        {
                            mechanicBuff.Value = mechanicBuffs[1].Value;
                        }
                    }

                    _buffManager.SetBuffData(damage.Entity.ToIIcSkSEntity(), mechanicBuff, i);

                    break;
                }
            }
        }
Esempio n. 8
0
        public static bool HasBuff(IIcSkSEntityManager <IIcSkSEntity> entityManager, IIcSkSEntity entity,
                                   IBuffDataComponent buff)
        {
            bool result = false;

            if (entityManager is IStructIcSkSEntityManager <IIcSkSEntity> structIcSkSEntityManager)
            {
                //### Code
                _buffAddOrRemove(ActionType.Has, out result, entity, buff, structIcSkSEntityManager);
                //###
            }
            return(result);
        }
Esempio n. 9
0
        private void _use()
        {
            SkillManager = GetInputValue(nameof(SkillManager), SkillManager);
            Target       = GetInputValue(nameof(Target), Target);

            var skillType = Type.GetType(_skillComponentAQName);

            if (skillType == null)
            {
                return;
            }

            Skill = (ISkillDataComponent)this.DynamicInputCreateInstance(skillType);
        }
        private void _addBuff(IIcSkSEntity entity)
        {
            var count = _entityManager.GetBuffCount <TestBuff1>(entity);
            var value = count % 2;

            if (value == 0)
            {
                _entityManager.AddBuff(entity, new TestBuff1(count + 1, count + 1));
            }
            else
            {
                count = _entityManager.GetBuffCount <TestBuff2>(entity);
                _entityManager.AddBuff(entity, new TestBuff2(count + 1, MechanicsType.Health));
            }
        }
Esempio n. 11
0
        protected override Func <bool> GetOutValue()
        {
            _buffManagerValue = GetInputValue(nameof(_buffManagerValue), _buffManagerValue);
            Target            = GetInputValue(nameof(Target), Target);;

            var conditionType = Type.GetType(_conditionAQName);

            if (conditionType == null)
            {
                return(null);
            }

            _condition = (ACondition)this.DynamicInputCreateInstance(conditionType, _buffManagerValue);

            return(_execute);
        }
Esempio n. 12
0
        private bool _execute()
        {
            _buffManagerValue = GetInputValue(nameof(_buffManagerValue), _buffManagerValue);
            Target            = GetInputValue(nameof(Target), Target);;

            var conditionType = Type.GetType(_conditionAQName);

            if (conditionType == null)
            {
                return(false);
            }

            _condition = (ACondition <IIcSkSEntity>) this.DynamicInputCreateInstance(conditionType, _buffManagerValue);

            return(_condition.Check(Target));
        }
        public void Create(IIcSkSEntity entity, int index)
        {
            var fixedBuffs = _buffManager.GetBuffs <TDamageReduceFixedBuff>(entity);

            if (fixedBuffs.Count == 0)
            {
                return;
            }

            //todo 只使用最后一个减伤buff
            TDamageReduceFixedBuff damageReduceFixedBuff = fixedBuffs[fixedBuffs.Count - 1];

            TDamageBuff damageBuff = _buffManager.GetBuffData <TDamageBuff>(entity, index);

            if (damageBuff.Type == damageReduceFixedBuff.Type)
            {
                damageBuff.Value -= damageReduceFixedBuff.Value;

                if (damageBuff.Value <= 0)
                {
                    damageBuff.Value = 0;
                }
            }
        }
        public override void Create(IIcSkSEntity entity, int index)
        {
            var buff = BuffManager.GetBuffData <T>(entity, index);

            buff.LastTriggerTime = buff.Duration;
        }
Esempio n. 15
0
 public static void AddBuff(IIcSkSEntityManager <IIcSkSEntity> entityManager, IIcSkSEntity entity, string buffType,
                            IBuffDataComponent buff)
 {
     AddBuff <IIcSkSEntity>(entityManager, entity, buffType, buff);
 }
Esempio n. 16
0
 public static IcEntityStruct FromIIcSkSEntity(this IIcSkSEntity entity)
 {
     return(new IcEntityStruct(ResourcesECSDB <IIcSkSEntity> .ToECS(entity)));
 }
Esempio n. 17
0
 public abstract bool Check(IIcSkSEntity icSkSEntity);
 public void Link(IIcSkSEntity icSkSEntity)
 {
     this.IcSkSEntity = icSkSEntity;
 }
 public void Init(IBuffManager <IIcSkSEntity> entityManager, IIcSkSEntity icSkSEntity)
 {
     EntityManager = entityManager;
     Link(icSkSEntity);
 }