public OrderInvalidReason Validate(IEnumerable <Unit> ConvoyOrder) { if (ConvoyOrder == null) { return(OrderInvalidReason.DEPLOYMENT_CONVOY_ORDER); } if (!Units.All(i => ConvoyOrder.Any(j => i == j || j.Passenger == i))) { return(OrderInvalidReason.DEPLOYMENT_CONVOY_ORDER); } if (Units.Where(i => i.Configuration.IsPassenger) .Any(i => (i.Configuration.Movement == 0 || IsStrictConvoy) && i.Carrier == null)) { return(OrderInvalidReason.DEPLOYMENT_CONVOY_ORDER); } return(OrderInvalidReason.NONE); }
/// <summary> /// Атака одной группы героев на другую /// </summary> /// <param name="attackGroup"></param> /// <param name="enemyGroup"></param> /// <param name="statusReporter"></param> /// <returns>возврат - повторить ход</returns> public bool Attack(Units attackGroup, Units enemyGroup, IStatusReporter statusReporter) { if (attackGroup.First().GroupIndex == enemyGroup.First().GroupIndex) { statusReporter.WriteLine("Нельзя нанести урон самому себе"); return(false); } var damage = attackGroup.UnitsOperatoin.GetDamage(); enemyGroup.ForEach((enemyGroupUnit) => { enemyGroupUnit.GetDamage(damage); }); /*Можно дать имена группам и транслировать их тут*/ /*можно поменять способ доступа к транслятору имён - как удобно*/ statusReporter.WriteLine($"герои группы {attackGroup.GroupNamesTranslator[attackGroup.First().GroupIndex]} нанесли урон героям группы {enemyGroup.GroupNamesTranslator[enemyGroup.First().GroupIndex]}."); if (enemyGroup.All(enemyUnit => false == enemyUnit.IsHeartBeat)) { statusReporter.WriteLine($"замок {enemyGroup.First().Home} теряет группу {enemyGroup.GroupNamesTranslator[enemyGroup.First().GroupIndex].Replace($"({enemyGroup.First().Home})", "").ClearSpaces()}"); } return(false); }
public override bool IsConfigured() { return(Units.All(i => i.Position != null)); }
public bool IsCountOfUnitsForGeneratorsGreaterOrEqualThan(int number) { return(Units.All(unit => unit.Value.TotalCount >= number)); }