public void ConditionalDanceMove_ExecutesAppropriateEffectWhenDanceInEffect([Values(DanceEffectType.Fire, DanceEffectType.Danger)] DanceEffectType danceEffectType) { _testTechnique.ClearEffects(); _testTechnique.SetDanceEffect(danceEffectType); RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType); AttackBattleMove attackWithHeal = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect); _human2.SetMove(_testTechnique, 1); _human2.SetSpeed(1); _human1.SetHealth(100, 10); _human1.SetMove(attackWithHeal, 1); _chanceService.PushEventsOccur(true, false); //attack hits, is not crit _human1.SetStrength(_enemy1.MaxHealth); _human1.SetMoveTarget(_enemy1); _enemyTeam = new Team(_menuManager, _enemy1); _enemy1.SetDefense(0); _enemy1.SetMove(_doNothingMove); _enemy1.SetMoveTarget(_enemy1); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(20, _human1.CurrentHealth, "Human1 should have regained 10 HP when the attack was successful and the dance effect was active"); }
public DanceMove(string description, TargetType targetType, int effectDuration, DanceEffectType?danceEffect, List <FieldEffect> fieldEffects, params BattleMove[] moves) : base(description, targetType, moves) { EffectDuration = effectDuration; FieldEffects = fieldEffects; MoveType = BattleMoveType.Dance; DanceEffect = danceEffect ?? DanceEffectType.None; }
public void AddFakeCombination(DanceEffectType effect1, DanceEffectType effect2, CombinedFieldEffect combinedEffect) { DanceEffectType first = (DanceEffectType)Math.Min((int)effect1, (int)effect2); DanceEffectType second = (DanceEffectType)Math.Max((int)effect1, (int)effect2); _firstEffectType = first; _secondEffectType = second; _effect = combinedEffect; }
public override CombinedFieldEffect Combine(DanceEffectType effect1, DanceEffectType effect2) { CombinedFieldEffect ret; DanceEffectType first = (DanceEffectType)Math.Min((int)effect1, (int)effect2); DanceEffectType second = (DanceEffectType)Math.Max((int)effect1, (int)effect2); if (_firstEffectType.HasValue && _secondEffectType.HasValue && _firstEffectType.Value == first && _secondEffectType == second && _effect != null) { ret = _effect; } else { ret = base.Combine(effect1, effect2); } return(ret); }
public void BattleManager_AppropriatelyTicksDownDanceEffectCounter([Values(DanceEffectType.Heart, DanceEffectType.Danger)] DanceEffectType danceEffectType) { const int danceDuration = 4; RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType); AttackBattleMove attackWithHeal = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect); _testTechnique.ClearEffects(); _testTechnique.SetDanceEffect(danceEffectType); _testTechnique.SetDuration(danceDuration); _human1.SetMove(_testTechnique, 1); _human1.SetMove(_doNothingMove); _human1.SetMoveTarget(_human1); _human1.SetSpeed(1); _human2.SetHealth(100, 10); _human2.SetMove(attackWithHeal, 6); for (var i = 0; i < 6; ++i) { _chanceService.PushEventsOccur(true, false); //attack hits, does not miss } _human2.SetMove(_runawayMove); _human2.SetMoveTarget(_enemy1); _human2.SetStrength(_enemy1.Defense); _enemy1.SetHealth(100); _enemy1.SetMove(_doNothingMove); _enemy1.SetMoveTarget(_enemy1); _enemy2.SetHealth(100); _enemy2.SetMove(_doNothingMove); _enemy2.SetMoveTarget(_enemy2); _battleManager.Battle(_humanTeam, _enemyTeam); int expectedHealth = 10 + (danceDuration * 10); Assert.AreEqual(expectedHealth, _human2.CurrentHealth); //will be 20 higher if the effect doesn't wear off }
public void SetDanceEffect(DanceEffectType effect) { DanceEffect = effect; }
public virtual CombinedFieldEffect Combine(DanceEffectType effect1, DanceEffectType effect2) { CombinedFieldEffect ret = null; string combinedName; var first = (DanceEffectType)Math.Min((int)effect1, (int)effect2); var second = (DanceEffectType)Math.Max((int)effect1, (int)effect2); switch (first) { case DanceEffectType.Fire: switch (second) { case DanceEffectType.Wind: combinedName = "lightning dance"; ret = new CombinedFieldEffect(combinedName, new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2.0), new CriticalChanceMultiplierFieldEffect(TargetType.EnemyTeam, combinedName, 0.5)); break; case DanceEffectType.Soul: combinedName = "courage dance"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Strength, 1.5), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.Fire, 1.25)); break; case DanceEffectType.Heart: combinedName = "passion tempo"; ret = new CombinedFieldEffect(combinedName, new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 3), new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2)); break; case DanceEffectType.Mind: combinedName = "burning ballet"; ret = new CombinedFieldEffect(combinedName, new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2), new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2)); break; case DanceEffectType.Danger: combinedName = "eruption festival"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Fire, 2, 1, true)); break; } break; case DanceEffectType.Water: switch (second) { case DanceEffectType.Soul: combinedName = "river rumba"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Speed, 2)); break; case DanceEffectType.Heart: combinedName = "cleansing calypso"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true), new UndoDebuffsFieldEffect(TargetType.OwnTeam, combinedName) ); break; case DanceEffectType.Mind: combinedName = "clearsong conga"; ret = new CombinedFieldEffect(combinedName, new RestoreManaPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true)); break; case DanceEffectType.Danger: combinedName = "whirlpool fesitval"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Water, 2, 1, true)); break; } break; case DanceEffectType.Wind: switch (second) { case DanceEffectType.Soul: combinedName = "breeze form"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Evade, 1.4)); break; case DanceEffectType.Heart: combinedName = "carefree waltz"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10)); break; case DanceEffectType.Mind: combinedName = "gusty mamba"; ret = new CombinedFieldEffect(combinedName, new ReflectFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All)); break; case DanceEffectType.Danger: combinedName = "tornado festival"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Wind, 2, 1, true)); break; } break; case DanceEffectType.Earth: switch (second) { case DanceEffectType.Soul: combinedName = "desert swing"; ret = new CombinedFieldEffect(combinedName, new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Defense, 2)); break; case DanceEffectType.Heart: combinedName = "steadfast stance"; var earthShield = new ElementalBattleShield(5, 0, 0, MagicType.Earth); ret = new CombinedFieldEffect(combinedName, new ShieldFieldEffect(TargetType.OwnTeam, combinedName, earthShield)); break; case DanceEffectType.Mind: combinedName = "gaia galla"; ret = new CombinedFieldEffect(combinedName, new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10)); break; case DanceEffectType.Danger: combinedName = "earthquake fesitval"; ret = new CombinedFieldEffect(combinedName, new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Earth, 2, 1, true)); break; } break; } return(ret); }
public DanceEffectCounter(IFighter owner, int turns, DanceEffectType effect) : base(turns) { Owner = owner; Effect = effect; }
public DanceBattleCondition(DanceEffectType danceEffectType) { EffectType = danceEffectType; }
public void ConditionalAttackBoostMove_ExecutesAppropriateEffectWhenDanceNotInEffect([Values(DanceEffectType.Water, DanceEffectType.Wind)] DanceEffectType danceEffectType) { _testTechnique.ClearEffects(); _testTechnique.SetDanceEffect(DanceEffectType.Soul); const int attackBoostMultiplier = 2; AttackBoostBattleMoveEffect conditionalAttackBoostEffect = GetAttackBoostEffect(attackBoostMultiplier, danceEffectType); AttackBattleMove attackWithBoost = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalAttackBoostEffect); _human2.SetMove(_testTechnique, 1); _human2.SetMove(_doNothingMove); _human2.SetSpeed(1); const int initialAttackStrength = 2; const int expectedDamage = initialAttackStrength; _human1.SetStrength(initialAttackStrength); _human1.SetMove(attackWithBoost, 1); _chanceService.PushAttackHitsNotCrit(); _human1.SetMove(_runawayMove); _human1.SetMoveTarget(_enemy1); _enemyTeam = new Team(_menuManager, _enemy1); _enemy1.SetDefense(0); _enemy1.SetHealth(100); _enemy1.SetMove(_doNothingMove); _enemy1.SetMoveTarget(_enemy1); _battleManager.Battle(_humanTeam, _enemyTeam); const int expectedRemainingHealth = 100 - expectedDamage; Assert.AreEqual(expectedRemainingHealth, _enemy1.CurrentHealth, "Human1's strength should not have been mutliplied, since the dance effect condition was not met!"); }
public void ConditionalDanceMove_ExecutesAppropriateEffectWhenDanceNotInEffect([Values(DanceEffectType.Water, DanceEffectType.Wind)] DanceEffectType danceEffectType) { _testTechnique.ClearEffects(); _testTechnique.SetDanceEffect(DanceEffectType.Soul); RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType); AttackBattleMove attackWithHeal = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect); _human2.SetMove(_testTechnique, 1); _human2.SetSpeed(1); const int initialHealth = 10; _human1.SetHealth(100, initialHealth); _human1.SetMove(attackWithHeal, 1); _chanceService.PushEventsOccur(true, false); //attack hits, is not crit _human1.SetStrength(_enemy1.MaxHealth); _human1.SetMoveTarget(_enemy1); _enemyTeam = new Team(_menuManager, _enemy1); _enemy1.SetDefense(0); _enemy1.SetMove(_doNothingMove); _enemy1.SetMoveTarget(_enemy1); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(initialHealth, _human1.CurrentHealth, "Human1 should not have had their health altered, the active dance effect's didn't match the conditional heal!"); }
private AttackBoostBattleMoveEffect GetAttackBoostEffect(double attackMultiplier, DanceEffectType danceEffectType) { DanceBattleCondition battleCondition = new DanceBattleCondition(danceEffectType); return(new AttackBoostBattleMoveEffect(attackMultiplier, battleCondition)); }
private RestorationBattleMoveEffect GetRestoreHealthEffect(DanceEffectType danceEffectType) { DanceBattleCondition battleCondition = new DanceBattleCondition(danceEffectType); return(new RestorationBattleMoveEffect(RestorationType.Health, 10, BattleMoveEffectActivationType.OnAttackHit, battleCondition)); }