Example #1
0
        public void Use(List <HexCell> cells)
        {
            HexCell cell = cells[0];

            if (cell.Type == HexTileType.Wall)
            {
//                _moveCells = GetMoveTargets(cell);
//                Active.Prepare(this, _moveCells);
                _theWall = cell;
                Active.Prepare(this, GetMoveTargets(cell));
                AnimationPlayer.Add(new MoveTo(ParentCharacter.CharacterObject.transform, cell.transform.position, 0.13f));
            }
            else
            {
//                int removeAfterIndex = _moveCells.FindIndex(c => c == cell);
//                List<HexCell> realMoveCells = _moveCells.GetRange(0, removeAfterIndex);
                ParentCharacter.MoveTo(cell);
                List <HexCell> realMoveCells = _theWall.GetLine(_theWall.GetDirection(cell), _theWall.GetDistance(cell));

                List <Character> targets = realMoveCells.SelectMany(c => ParentCharacter.DefaultGetBasicAttackCells(c))
                                           .ToList().WhereOnlyEnemiesOf(Owner).GetCharacters().Distinct().ToList();
                targets.ForEach(t => ParentCharacter.Attack(this, t, new Damage(ParentCharacter.AttackPoints.Value, DamageType.Physical)));
                Finish();
            }
        }
Example #2
0
        private void Use(Character character)
        {
            var damage = new Damage(Damage, DamageType.Physical);

            ParentCharacter.Attack(this, character, damage);
            Finish();
        }
Example #3
0
        private void Hien(Character character)
        {
            List <HexCell> cells     = new List <HexCell>();
            HexDirection   direction = ParentCharacter.ParentCell.GetDirection(character.ParentCell);
            HexCell        lastCell  = ParentCharacter.ParentCell;
            HexCell        neighbor;

            do
            {
                neighbor = lastCell.GetCell(direction, 1);
                if (neighbor == null)
                {
                    break;
                }
                cells.Add(neighbor);
                lastCell = neighbor;
            } while (neighbor != character.ParentCell);
            foreach (HexCell c in cells)
            {
                if (c.CharacterOnCell == null || c.CharacterOnCell.Owner == ParentCharacter.Owner)
                {
                    continue;
                }
                var damage = new Damage(FlameDamage, DamageType.Magical);
                ParentCharacter.Attack(c.CharacterOnCell, damage);
            }
        }
Example #4
0
 public KamuiSenketsu() : base(AbilityType.Ultimatum, "Kamui Senketsu", 5)
 {
     OnAwake += () =>
     {
         Validator.ToCheck.Remove(Validator.IsNotOnCooldown);
         Validator.ToCheck.Remove(Validator.IsCharacterNotSilenced);
         Validator.ToCheck.Add(() => Validator.IsNotOnCooldown() || IsEnabled);
         Validator.ToCheck.Add(() => Validator.IsCharacterNotSilenced() || IsEnabled);
         Active.Turn.TurnFinished += (character) =>
         {
             if (character != ParentCharacter)
             {
                 return;
             }
             if (!IsEnabled)
             {
                 return;
             }
             ParentCharacter.Attack(this, ParentCharacter, new Damage(Damage, DamageType.True));
             var effect = ParentCharacter.Effects.SingleOrDefault(e => e.Name == Name && e.GetType() == typeof(StatModifier)) as StatModifier;
             if (effect == null)
             {
                 return;
             }
             effect.Modifier.Value += 2;
         };
     };
 }
Example #5
0
        public override void Use(List <HexCell> cells)
        {
            try
            {
                ItadakiNoKura passiveAbility = ParentCharacter.Abilities.OfType <ItadakiNoKura>().SingleOrDefault();
                if (passiveAbility == null)
                {
                    throw new Exception("Pasywna umiejętność nie znaleziona!");
                }

                List <Character> enemyCharactersOnMap = Game.Players.Where(p => p != Active.GamePlayer).SelectMany(p => p.Characters).Where(c => c.IsOnMap).ToList();
                var damageValue = passiveAbility.CollectedEnergy / enemyCharactersOnMap.Count;
                //Animations.Instance.SonzaiNoChikara(enemyCharactersOnMap.Select(c=>c.CharacterObject.transform).ToList());
                var damage = new Damage(damageValue, DamageType.Magical);
                enemyCharactersOnMap.ForEach(c => ParentCharacter.Attack(c, damage));

                passiveAbility.CollectedEnergyCharacters.Clear();
                OnUseFinish();
            }
            catch (Exception e)
            {
                MessageLogger.DebugLog(e.Message);
                OnFailedUseFinish();
            }
        }
Example #6
0
        public void Use(List <HexCell> cells)
        {
            List <Character> characters    = cells.GetCharacters();
            bool             killedSomeone = false;

            characters.ForEach(targetCharacter =>
            {
                if (targetCharacter.Owner == Active.GamePlayer)
                {
                    return;
                }

                var damage = new Damage(Damage, DamageType.Physical);

                ParentCharacter.Attack(this, targetCharacter, damage);
                _wasUsedOnceThisTurn = true;
                if (!targetCharacter.IsAlive)
                {
                    killedSomeone = true;
                }
            });
            if (killedSomeone)
            {
                PrepareImpulse();
            }
            else
            {
                Finish();
            }
        }
Example #7
0
        public override void Use(Character character)
        {
            var damage = new Damage(AbilityDamage, DamageType.Physical);

            ParentCharacter.Attack(character, damage);
            OnUseFinish();
        }
Example #8
0
        public override void Use(List <HexCell> cells)
        {
            List <Character> characters = cells.GetCharacters();

            try
            {
                ItadakiNoKura passiveAbility = ParentCharacter.Abilities.OfType <ItadakiNoKura>().SingleOrDefault();
                if (passiveAbility == null)
                {
                    throw new Exception("Pasywna umiejętność nie znaleziona!");
                }

                characters = characters.Where(c => c.Owner != ParentCharacter.Owner).ToList();
//				AnimationPlayer.Instance.AsterYo(ParentCharacter.CharacterObject.transform, characters.Select(c => c.CharacterObject.transform).ToList());
                AnimationPlayer.Add(new Animations.AsterYo(ParentCharacter.CharacterObject.transform, characters.Select(c => c.CharacterObject.transform).ToList()));
                characters.ForEach(targetCharacter =>
                {
                    var damage = new Damage(AbilityDamage, DamageType.Magical);
                    ParentCharacter.Attack(targetCharacter, damage);
                    passiveAbility.TryCollectingEnergy(targetCharacter);
                });
                OnUseFinish();
            }
            catch (Exception e)
            {
                MessageLogger.DebugLog(e.Message);
                OnFailedUseFinish();
            }
        }
Example #9
0
        public void Use(List <HexCell> cells)
        {
            HexCell targetCell = cells[0];

            if (targetCell.CharacterOnCell != null)
            {
                _characterToTake = targetCell.CharacterOnCell;
                Active.Prepare(this, GetTargetCells());
            }
            else if (_targetCell == null)
            {
                _targetCell = targetCell;
                Active.Prepare(this, _targetCell.GetNeighbors(Radius).FindAll(c => c.IsFreeToStand));
            }
            else
            {
                ParentCharacter.MoveTo(_targetCell);
                _characterToTake.MoveTo(targetCell);

                ParentCharacter.Attack(this, _characterToTake, new Damage(Damage, DamageType.Physical));
                _targetCell.GetNeighbors(Radius).WhereOnlyEnemiesOf(Owner).GetCharacters()
                .ForEach(c => ParentCharacter.Attack(this, c, new Damage(Damage, DamageType.Physical)));

                _targetCell = null;
                Finish();
            }
        }
Example #10
0
        public override void Use(List <HexCell> cells)
        {
            List <Character> characters = cells.GetCharacters();
            var killedSomething         = false;

            characters.ForEach(targetCharacter =>
            {
                if (targetCharacter.Owner == Active.GamePlayer)
                {
                    return;
                }

                var damage = new Damage(AbilityDamage, DamageType.Physical);

                ParentCharacter.Attack(targetCharacter, damage);
                _wasUsedOnceThisTurn = true;
                if (!targetCharacter.IsAlive)
                {
                    killedSomething = true;
                }
            });
            if (killedSomething)
            {
                Use();
            }
            else
            {
                OnUseFinish();
            }
        }
Example #11
0
        private void ShinpanAndDanzai(Character character)
        {
            int charactersNearParent = ParentCharacter.ParentCell.GetNeighbors(ShinpanAndDanzaiRange).Count(c => c.CharacterOnCell != null);
            var damageValue          = ShinpanAndDanzaiDamage * charactersNearParent;
            var damage = new Damage(damageValue, DamageType.True);

            ParentCharacter.Attack(this, character, damage);
        }
Example #12
0
        private void Use(Character targetCharacter)
        {
            var damage = new Damage(Damage, DamageType.Magical);

            ParentCharacter.Attack(this, targetCharacter, damage);
            targetCharacter.Effects.Add(new Stun(1, targetCharacter, Name));
            Finish();
        }
Example #13
0
        public override void Use(List <HexCell> cells)
        {
            List <Character> characters = cells.GetCharacters();
            var damage = new Damage(AbilityDamage, DamageType.Physical);

            characters.ForEach(c => ParentCharacter.Attack(c, damage));
            OnUseFinish();
        }
Example #14
0
        public override void Use(Character targetCharacter)
        {
            var damage = new Damage(AbilityDamage, DamageType.Magical);

            ParentCharacter.Attack(targetCharacter, damage);
            targetCharacter.Effects.Add(new MovementDisability(1, targetCharacter, "Al Huma's Freeze"));
            OnUseFinish();
        }
Example #15
0
        private void Use(Character character)
        {
            var dmg = new Damage(Damage, DamageType.Magical);

            ParentCharacter.Attack(this, character, dmg);
            ParentCharacter.Heal(ParentCharacter, dmg.Value);
            Finish();
        }
Example #16
0
 public void Click()
 {
     Active.MakeAction();
     GetTargetsInRange().GetCharacters().ForEach(c => ParentCharacter.Heal(c, (int)(c.HealthPoints.BaseValue * HealPercent / 100f)));
     ParentCharacter.Effects.Add(new StatModifier(BonusDuration, BasicAttackRangeBonus, ParentCharacter, StatType.BasicAttackRange, Name));
     ParentCharacter.Attack(this, ParentCharacter, new Damage(ParentCharacter.HealthPoints.BaseValue / 2, DamageType.True));
     Finish();
 }
Example #17
0
 public void Run()
 {
     GetTargetsInRange().GetCharacters().ForEach(c =>
     {
         ParentCharacter.Attack(this, c, new Damage(Damage, DamageType.Magical));
         c.Effects.Add(new StatModifier(SlowDuration, -c.Speed.Value + SlowTo, c, StatType.Speed, Name));
     });
     Finish();
 }
Example #18
0
        private void Bazooka(Character enemy)
        {
            ParentCharacter.Attack(this, enemy, new Damage(IsEnchanted?JetBazookaDamage:BazookaDamage, DamageType.Physical));
            if (!enemy.IsAlive)
            {
                return;
            }
            HexDirection direction = ParentCharacter.ParentCell.GetDirection(enemy.ParentCell);

            ThrowCharacter(enemy, direction, IsEnchanted?JetBazookaKnockback:BazookaKnockback);
            Finish(BazookaCooldown);
        }
Example #19
0
        private void Use(Character targetCharacter)
        {
            HexDirection direction = ParentCharacter.ParentCell.GetDirection(targetCharacter.ParentCell);
            HexCell      moveCell  = targetCharacter.ParentCell.GetCell(direction, 2);

            ParentCharacter.MoveTo(moveCell);
            var damage = new Damage(ParentCharacter.AttackPoints.Value, DamageType.Physical);

            ParentCharacter.Attack(this, targetCharacter, damage);
            Active.PlayAudio("giri");
            Finish();
        }
Example #20
0
        private void Use(HexCell cell)
        {
            List <HexCell> targetCells = ParentCharacter.ParentCell.GetArea(cell, Width);

            ParentCharacter.MoveTo(cell);
            targetCells.WhereOnlyEnemiesOf(Owner).GetCharacters().ForEach(c =>
            {
                ParentCharacter.Attack(this, c, new Damage(Damage, DamageType.Magical));
                c.Effects.Add(new Silent(SilentDuration, c, Name));
            });
            Finish();
        }
Example #21
0
        private void Use(Character targetCharacter)
        {
            HexDirection direction = ParentCharacter.ParentCell.GetDirection(targetCharacter.ParentCell);
            HexCell      moveCell  = targetCharacter.ParentCell.GetCell(direction, TargetCellOffset);

            targetCharacter.PhysicalDefense.Value = targetCharacter.PhysicalDefense.RealValue - 15;
            ParentCharacter.MoveTo(moveCell);
            var damage = new Damage(Damage, DamageType.Physical);

            ParentCharacter.Attack(this, targetCharacter, damage);
            Finish();
        }
Example #22
0
 private void Use(HexCell targetCell)
 {
     AnimationPlayer.Add(new GrammaticaStart(ParentCharacter.CharacterObject.transform, _target));
     if (_target.IsEnemyFor(Owner))
     {
         int dmg = (int)(_target.HealthPoints.BaseValue * HealthPercentDamage / 100f);
         ParentCharacter.Attack(this, _target, new Damage(dmg, DamageType.True));
     }
     AnimationPlayer.Add(new GrammaticaFinish(ParentCharacter.CharacterObject.transform, _target.CharacterObject.transform, targetCell.transform.TransformPoint(0, 10, 0)));
     _target.MoveTo(targetCell);
     Finish();
 }
Example #23
0
 private void Use(Character character)
 {
     Active.MakeAction();
     for (int i = 0; i < AttackTimes; i++)
     {
         ParentCharacter.Attack(this, character, new Damage(Damage, DamageType.True));
     }
     if (!IsEnabled)
     {
         IsEnabled = true;
     }
     Finish();
 }
Example #24
0
        HexMapDrawer.Instance.Cells.ForEach(c => c.Effects.FindAll(e => e.Name == Name).ForEach(e => e.Remove()));    //TODO: create a list of effects to iterate on in case of 2 or more Yoshinos playing

        private void Disable()
        {
            RemoveHexEffects();
            IsEnabled = false;
            ParentCharacter.Effects.RemoveAll(e => e.Name == Name); // Remove movement disability
            GetTargetsInRange().GetCharacters().ForEach(c =>
            {
                var damage = new Damage(_currentDuration * DamagePerPhase, DamageType.Magical);
                ParentCharacter.Attack(this, c, damage);
            });
            _currentDuration = 0;
            ParentCharacter.Select(); // Character can move immediately, and the ability button is not shown as clickable
        }
Example #25
0
 public override void Awake()
 {
     ParentCharacter.BasicAttack = character =>
     {
         var modifier = 1;
         if (GetRangeCells().Contains(character.ParentCell))
         {
             modifier = AaDamageModifier;
         }
         var damageValue = ParentCharacter.AttackPoints.Value * modifier;
         var damage      = new Damage(damageValue, DamageType.Physical);
         ParentCharacter.Attack(character, damage);
     };
 }
Example #26
0
        public override void Use(Character targetCharacter)
        {
            var modifier = 1;

            if (ParentCharacter.ParentCell.GetNeighbors(2).Contains(targetCharacter.ParentCell))
            {
                modifier = AbilityCriticalHitModifier;
            }
            var damageValue = ParentCharacter.AttackPoints.Value * modifier;
            var damage      = new Damage(damageValue, DamageType.Physical);

            ParentCharacter.Attack(targetCharacter, damage);

            OnUseFinish(Cooldown + 1);
        }
Example #27
0
File: Dash.cs Project: tojatos/NKM
        private void AfterDashAttack(Character targetCharacter)
        {
            int modifier = 1;

            if (ParentCharacter.ParentCell.GetNeighbors(AbilityCriticalHitRange).Contains(targetCharacter.ParentCell))
            {
                modifier = AbilityCriticalHitModifier;
            }
            int damageValue = ParentCharacter.AttackPoints.Value * modifier;
            var damage      = new Damage(damageValue, DamageType.Physical);

            ParentCharacter.Attack(this, targetCharacter, damage);

            Finish(Cooldown + 1);
        }
Example #28
0
        public override void Awake()
        {
//			ParentCharacter.JustBeforeAttack += (character, damage) => damage.Value += IsEnabled ? _additionalDamage : 0;
            ParentCharacter.BeforeAttack += (character, d) =>
            {
                if (!IsEnabled || _isBeingUsed)
                {
                    return;
                }
                _isBeingUsed = true;                 //prevent infinite loop
                var damage = new Damage(_additionalDamage, DamageType.True);
                ParentCharacter.Attack(character, damage);
                _isBeingUsed = false;
            };
            ParentCharacter.OnEnemyKill += () => _additionalDamage++;
        }
Example #29
0
        private void Hien(Character character)
        {
            HexDirection   direction = ParentCharacter.ParentCell.GetDirection(character.ParentCell);
            int            range     = ParentCharacter.ParentCell.GetDistance(character.ParentCell);
            List <HexCell> cells     = ParentCharacter.ParentCell.GetArea(direction, range, FlameWidth);

            foreach (HexCell c in cells)
            {
                if (c.CharacterOnCell == null || c.CharacterOnCell.Owner == ParentCharacter.Owner)
                {
                    continue;
                }
                var damage = new Damage(FlameDamage, DamageType.Magical);
                ParentCharacter.Attack(this, c.CharacterOnCell, damage);
            }
        }
Example #30
0
        private void SendShockwave(HexCell targetCell)
        {
            HexDirection   direction      = ParentCharacter.ParentCell.GetDirection(targetCell);
            List <HexCell> shockwaveCells = ParentCharacter.ParentCell.GetLine(direction, AbilityRange).ToList();

            foreach (HexCell c in shockwaveCells)
            {
                if (c.CharacterOnCell == null || c.CharacterOnCell.Owner == ParentCharacter.Owner)
                {
                    continue;
                }

                var damage = new Damage(AbilityDamage, DamageType.Physical);
                ParentCharacter.Attack(c.CharacterOnCell, damage);
                break;
            }
        }