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()); } }
public void TakeDamage(int damageValue) { if (_mineDamageCounter <= 0) { throw new InvalidOperationException("Попытка нанести урон залежам с нулевым счётчиком."); } _mineDamageCounter -= damageValue; if (_mineDamageCounter <= 0) { _propDepositModule.Mine(); if (Value > 0) { _mineDamageCounter = _damagePerMineUnit; } else { if (!_lifetimeModule.IsParentStaticObjectDestroyed) { _lifetimeModule.Destroy(); } } } }
public IMineDepositResult TryMine(IPropDepositModule deposit) { if (deposit is null) { throw new ArgumentNullException(nameof(deposit)); } if (deposit.GetToolTags().Any()) { throw new InvalidOperationException("Попытка выполнить добычу ресурса не подходящим инструментом."); } var isSuccessfulMining = _mineDepositMethodRandomSource.RollSuccess(deposit.Difficulty); if (isSuccessfulMining) { deposit.Mine(); return(new SuccessMineDepositResult()); } return(new FailureMineDepositResult()); }