示例#1
0
文件: Poison.cs 项目: tojatos/NKM
 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;
 }
示例#2
0
 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;
 }
示例#3
0
 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;
 }
示例#4
0
 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;
 }
示例#5
0
        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();
        }