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 Turn(ICombatantDatabase combatantDatabase, ArmyType army) { Army = army; _combatants = combatantDatabase.GetCombatantsByArmy(army); _combatants.ForEach(AddNewCombatant); }
public IActionPlan GetActionPlan(ArmyType army) { var combatants = _combatants.GetCombatantsByArmy(army); return(new AIActionPlan(combatants)); }