示例#1
0
 public BlackBlood(Character characterThatAttacks, Character effectTarget, int cooldown, int damage, int range) : base(cooldown,
                                                                                                                       effectTarget, "Black Blood")
 {
     _characterThatAttacks = characterThatAttacks;
     Type = effectTarget.Owner == characterThatAttacks.Owner ? EffectType.Positive : EffectType.Negative;
     Character.DamageDelegate tryToActivateEffect = d =>
     {
         if (d.Value == 0)
         {
             return;
         }
         if (_wasActivatedOnce)
         {
             return;                  //prevent infinite loop
         }
         _wasActivatedOnce = true;
         List <Character> enemiesInRange =
             ParentCharacter.ParentCell.GetNeighbors(range).Select(c => c.CharacterOnCell).Where(c => c != null && c.Owner != characterThatAttacks.Owner).ToList();
         if (effectTarget.Owner != characterThatAttacks.Owner)
         {
             enemiesInRange.Add(effectTarget);
         }
         enemiesInRange.ForEach(enemy =>
         {
             var dmg = new Damage(damage, DamageType.Magical);
             characterThatAttacks.Attack(this, enemy, dmg);
         });
         _wasActivatedOnce = false;
     };
     ParentCharacter.BeforeBeingDamaged += tryToActivateEffect;
     OnRemove += () => ParentCharacter.BeforeBeingDamaged -= tryToActivateEffect;
 }
示例#2
0
 //Increase taken damage by value
 public TakenDamageModifier(int cooldown, int value, Character parentCharacter, string name = null) : base(cooldown, parentCharacter, name)
 {
     Name  = name ?? "Taken Damage Modifier";
     Value = value;
     Type  = value <= 0 ? EffectType.Positive : EffectType.Negative;
     Character.DamageDelegate d = damage => damage.Value += (int)(damage.Value * (Value / 100f));
     parentCharacter.BeforeBeingDamaged += d;
     OnRemove += () => parentCharacter.BeforeBeingDamaged -= d;
 }