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(); } }
private void Use(Character character) { var damage = new Damage(Damage, DamageType.Physical); ParentCharacter.Attack(this, character, damage); Finish(); }
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); } }
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; }; }; }
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(); } }
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(); } }
public override void Use(Character character) { var damage = new Damage(AbilityDamage, DamageType.Physical); ParentCharacter.Attack(character, damage); OnUseFinish(); }
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(); } }
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(); } }
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(); } }
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); }
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(); }
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(); }
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(); }
private void Use(Character character) { var dmg = new Damage(Damage, DamageType.Magical); ParentCharacter.Attack(this, character, dmg); ParentCharacter.Heal(ParentCharacter, dmg.Value); Finish(); }
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(); }
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(); }
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); }
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(); }
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(); }
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(); }
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(); }
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(); }
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 }
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); }; }
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); }
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); }
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++; }
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); } }
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; } }