public Poison(Character characterThatAttacks, Damage damagePerTick, int cooldown, Character parentCharacter, string name = null) : base(cooldown, parentCharacter, name) { Name = name ?? "Poison"; _damagePerTick = damagePerTick; Type = EffectType.Negative; Character.VoidDelegate tryToActivateEffect = () => characterThatAttacks.Attack(this, ParentCharacter, damagePerTick); ParentCharacter.JustBeforeFirstAction += tryToActivateEffect; OnRemove += () => ParentCharacter.JustBeforeFirstAction -= tryToActivateEffect; }
public HealOverTime(Character characterThatHeals, int healPerTick, int cooldown, Character parentCharacter, string name = null) : base(cooldown, parentCharacter, name) { Name = name ?? "Heal Over Time"; _healPerTick = healPerTick; Type = EffectType.Positive; Character.VoidDelegate tryToActivateEffect = () => characterThatHeals.Heal(ParentCharacter, healPerTick); ParentCharacter.JustBeforeFirstAction += tryToActivateEffect; OnRemove += () => ParentCharacter.JustBeforeFirstAction -= tryToActivateEffect; }
public IncreasablePoison(Character characterThatAttacks, Damage initialDamage, int increase, int cooldown, Character parentCharacter, string name = null) : base(cooldown, parentCharacter, name) { Name = name ?? "Increasable Poison"; Damage = initialDamage; Type = EffectType.Negative; _increase = increase; Character.VoidDelegate tryToActivateEffect = () => { characterThatAttacks.Attack(this, ParentCharacter, Damage); Damage.Value += _increase; }; ParentCharacter.JustBeforeFirstAction += tryToActivateEffect; OnRemove += () => ParentCharacter.JustBeforeFirstAction -= tryToActivateEffect; }
public HPDrain(Character characterThatAttacks, Damage damagePerTick, int cooldown, Character parentCharacter, string name = null) : base(cooldown, parentCharacter, name) { Name = name ?? "HP Drain"; _damagePerTick = damagePerTick; _characterThatAttacks = characterThatAttacks; Type = EffectType.Negative; Character.VoidDelegate tryToActivateEffect = () => { _characterThatAttacks.Attack(ParentCharacter, _damagePerTick); if (ParentCharacter.IsAlive) { ParentCharacter.Heal(_characterThatAttacks, _damagePerTick.Value); } }; ParentCharacter.JustBeforeFirstAction += tryToActivateEffect; OnRemove += () => ParentCharacter.JustBeforeFirstAction -= tryToActivateEffect; }
private void Use(Character character) { Swap(ParentCharacter, character); ParentCharacter.HasFreeAttackUntilEndOfTheTurn = true; ParentCharacter.HasFreeUltimatumAbilityUseUntilEndOfTheTurn = true; // TODO Character.CharacterDamageDelegate onAttack = null; onAttack = (c, d) => { ParentCharacter.HasFreeUltimatumAbilityUseUntilEndOfTheTurn = false; ParentCharacter.AfterBasicAttack -= onAttack; }; ParentCharacter.AfterBasicAttack += onAttack; Character.AbilityDelegate onAbilityUse = null; onAbilityUse += ability => { ParentCharacter.HasFreeAttackUntilEndOfTheTurn = false; ParentCharacter.AfterAbilityUse -= onAbilityUse; }; ParentCharacter.AfterAbilityUse += onAbilityUse; Character.VoidDelegate onMove = null; onMove += () => { ParentCharacter.HasFreeUltimatumAbilityUseUntilEndOfTheTurn = false; ParentCharacter.HasFreeAttackUntilEndOfTheTurn = false; ParentCharacter.AfterBasicMove -= onMove; }; ParentCharacter.AfterMove += onMove; Active.Turn.TurnFinished += character1 => { if (character1 != ParentCharacter) { return; } ParentCharacter.AfterBasicAttack -= onAttack; ParentCharacter.AfterAbilityUse -= onAbilityUse; ParentCharacter.AfterBasicMove -= onMove; }; Finish(); }