public void TestBasicFight() { var attackerCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(2) .Special(0) .Speed(13) .Strength(7) .Build()) .Weapons("Shortsword") .Build(); var defenderCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(2) .Special(0) .Speed(13) .Strength(3) .Build()) .Weapons("Shortsword") .Build(); var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly); var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly); attacker.Position = new Vector2(0, 1); defender.Position = new Vector2(0, 0); var map = new Map(); map.AddCombatant(attacker); map.AddCombatant(defender); var skillDatabase = new SkillDatabase(map); var forecaster = new FightForecaster(map, skillDatabase); var forecast = forecaster.Forecast(attacker, defender, SkillType.Melee); var finalizer = new FightFinalizer(skillDatabase); var final = finalizer.Finalize(forecast, new ConstantRandomizer(100)); var initialPhase = final.InitialPhase; Assert.NotNull(initialPhase); var initialDamage = initialPhase.Effects.GetDefenderDamage(); Assert.AreEqual(5, initialDamage); var counterPhase = final.CounterPhase; Assert.NotNull(counterPhase); var counterDamage = counterPhase.Effects.GetDefenderDamage(); Assert.AreEqual(1, counterDamage); }
public override void Execute() { var skillDatabase = new SkillDatabase(Model.Map); var finalizer = new FightFinalizer(skillDatabase); var finalizedFight = finalizer.Finalize(Model.FightForecast, new BasicRandomizer()); var fightAction = new FightAction(finalizedFight); Model.PendingAction = fightAction; Model.State = BattleUIState.Fighting; }
public void TestAttackerKillsOnDouble() { var attackerCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(2) .Special(0) .Speed(33) .Strength(10) .Build()) .Weapons("Shortsword") .Build(); var defenderCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(0) .Special(0) .Speed(13) .Strength(7) .Build()) .Stats(new StatsBuilder() .ParryChance(0) .Build()) .Weapons("Shortsword") .Build(); var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly); var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly); attacker.Position = new Vector2(0, 0); defender.Position = new Vector2(0, 1); var map = new Map(); var skillDatabase = new SkillDatabase(map); var forecaster = new FightForecaster(map, skillDatabase); var forecast = forecaster.Forecast(attacker, defender, SkillType.Melee); var finalizer = new FightFinalizer(skillDatabase); var final = finalizer.Finalize(forecast, new ConstantRandomizer(100)); Assert.NotNull(final.InitialPhase); Assert.NotNull(final.CounterPhase); Assert.NotNull(final.DoubleAttackPhase); Assert.Null(final.FlankerPhase); }
public Battle(IMap map, IRandomizer randomizer, ICombatantDatabase combatants, List <ArmyType> turnOrder, List <IObjective> objectives, MapConfig mapConfig) { TurnNumber = 0; EventTileWalkedSignal = new Signal <string>(); Objectives = objectives; Map = map; _randomizer = randomizer; _combatants = combatants; map.EventTileTriggeredSignal.AddListener(_relayEvent); var skillDatabase = new SkillDatabase(map); _forecaster = new FightForecaster(map, skillDatabase); _finalizer = new FightFinalizer(skillDatabase); _turnOrder = turnOrder .Where(army => combatants.GetCombatantsByArmy(army).Count > 0) .ToList(); foreach (var combatant in combatants.GetAllCombatants()) { RegisterCombatant(combatant, map); } foreach (var eventTile in mapConfig.EventTiles) { Map.AddEventTile(eventTile); } var firstArmy = _turnOrder[0]; _currentTurn = new Turn(_combatants, firstArmy); _eventsByTurn = mapConfig.TurnEvents .GroupBy(evt => evt.ActivationTurn) .ToDictionary(x => x.Key, x => x.ToList()); }
public void TestRangedCounter() { var attackerCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(2) .Special(0) .Speed(13) .Strength(7) .Build()) .Stats(new StatsBuilder() .ParryChance(0) .Build()) .Weapons("Slim Recurve") .Build(); var defenderCharacter = new CharacterBuilder() .Attributes(new AttributesBuilder() .Health(15) .Skill(12) .Defense(2) .Special(0) .Speed(13) .Strength(7) .Build()) .Stats(new StatsBuilder() .ParryChance(0) .Build()) .Weapons("Slim Recurve") .Build(); var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly); var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly); attacker.Position = new Vector2(0, 0); defender.Position = new Vector2(0, 2); var map = new Map(); map.AddCombatant(attacker); map.AddCombatant(defender); var skillDatabase = new SkillDatabase(map); var forecaster = new FightForecaster(map, skillDatabase); var forecast = forecaster.Forecast(attacker, defender, SkillType.Ranged); var finalizer = new FightFinalizer(skillDatabase); var final = finalizer.Finalize(forecast, new ConstantRandomizer(100)); var initialPhase = final.InitialPhase; Assert.NotNull(initialPhase); var initialEffects = initialPhase.Effects; Assert.AreEqual(5, initialEffects.GetDefenderDamage()); var counterPhase = final.CounterPhase; Assert.NotNull(counterPhase); var counterEffects = counterPhase.Effects; Assert.AreEqual(5, counterEffects.GetDefenderDamage()); Assert.Null(final.DoubleAttackPhase); Assert.Null(final.FlankerPhase); }