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; }
//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; }