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; } }
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); }
public static void AddBuff(IIcSkSEntityManager <IIcSkSEntity> entityManager, IIcSkSEntity entity, IBuffDataComponent buff) { if (entityManager is IStructIcSkSEntityManager <IIcSkSEntity> skSEntityManager) { _buffAddOrRemove(ActionType.Add, out _, entity, buff, skSEntityManager); } }
protected sealed override T GetOutValue() { BuffManager = GetInputValue(nameof(BuffManager), BuffManager); Target = GetInputValue(nameof(Target), Target);; BuffType = Type.GetType(_buffAQName); return(Execute()); }
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);
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; } } }
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); }
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)); } }
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); }
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; }
public static void AddBuff(IIcSkSEntityManager <IIcSkSEntity> entityManager, IIcSkSEntity entity, string buffType, IBuffDataComponent buff) { AddBuff <IIcSkSEntity>(entityManager, entity, buffType, buff); }
public static IcEntityStruct FromIIcSkSEntity(this IIcSkSEntity entity) { return(new IcEntityStruct(ResourcesECSDB <IIcSkSEntity> .ToECS(entity))); }
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); }