public IMineDepositResult TryMine(IPropDepositModule deposit) { if (deposit is null) { throw new ArgumentNullException(nameof(deposit)); } var requiredToolTags = deposit.GetToolTags(); var hasAllTags = EquipmentHelper.HasAllTags(_tool.Scheme.Tags, requiredToolTags); if (!hasAllTags) { throw new InvalidOperationException("Попытка выполнить добычу ресурса не подходящим инструментом."); } var isSuccessfulMining = _mineDepositMethodRandomSource.RollSuccess(deposit.Difficulty); if (isSuccessfulMining) { deposit.Mine(); return(new SuccessMineDepositResult()); } else { return(new FailureMineDepositResult()); } }
private static Equipment GetEquipedTool(IEquipmentModule equipmentModule, string[] requiredToolTags) { if (!requiredToolTags.Any()) { // В этом методе предполагается, что наличие тегов проверено до вызова. throw new ArgumentException("Требуется не пустой набор тегов.", nameof(requiredToolTags)); } foreach (var equipment in equipmentModule) { if (equipment is null) { // Если для добычи указаны какие-либо теги, а ничего не экипировано, // то такая экипировака не подходит. continue; } var hasAllTags = EquipmentHelper.HasAllTags(equipment.Scheme.Tags, requiredToolTags); if (hasAllTags) { // This equipment has all required tags. return(equipment); } } return(null); }