public static void SustainPopulationNeeds(long population, IMutableResources from) { if (from == null) { throw new ArgumentNullException(nameof(from)); } if (population <= 0) { return; } IBasicResources neededResources = CalculatePopulationNeeds(population); if (from.CanSubtract(neededResources)) { from.Subtract(neededResources); PreviousTurnUsedResources = neededResources; } else { PreviousTurnUsedResources = new ReadOnlyResources(from); from.SetToZero(); } }
/// <summary> /// Прибавляет ресурсы переданного объекта <see cref="IBasicResources"/> /// </summary> public void Add(IBasicResources res) { if (!this.CanAdd(res)) { throw new ArgumentException("Sum of resources is greater than limit"); } this.Hydrogen += res.Hydrogen; this.CommonMetals += res.CommonMetals; this.RareEarthElements += res.RareEarthElements; }
/// <summary> /// Сравнивает объекты ресурсов /// </summary> /// <returns>Булевое значение, показывающее, равны ли соответствующие составные объектов ресурсов</returns> public bool IsEqual(IBasicResources res) { if (this.Hydrogen == res.Hydrogen && this.CommonMetals == res.CommonMetals && this.RareEarthElements == res.RareEarthElements) { return(true); } return(false); }
/// <summary> /// Сравнивает объекты ресурсов /// </summary> /// <returns>Булевое значение, показывающее, отличаются ли соответствующие составные объектов ресурсов</returns> public bool IsNotEqual(IBasicResources res) { if (this.Hydrogen != res.Hydrogen || this.CommonMetals != res.CommonMetals || this.RareEarthElements != res.RareEarthElements) { return(true); } return(false); }
public bool IsStrictlyGreater(IBasicResources res) { if (this.Hydrogen > res.Hydrogen && this.CommonMetals > res.CommonMetals && this.RareEarthElements > res.RareEarthElements) { return(true); } return(false); }
/// <summary> /// Проверяет, возможно ли прибавить один объект ресурсов к второму /// </summary> /// <param name="res"> /// Ресурс, который прибавляется /// </param> /// <returns> /// Логическое значение, показывающее, возможно ли прибавить один объект ресурсов к второму /// </returns> public bool CanAdd(IBasicResources res) { if (double.IsInfinity(this.Hydrogen + res.Hydrogen) || double.IsInfinity(this.CommonMetals + res.CommonMetals) || double.IsInfinity(this.RareEarthElements + res.RareEarthElements)) { return(false); } return(true); }
/// <summary> /// Проверяет, возможно ли вычесть из объекта ресурсов другой объект ресурсов /// </summary> /// <param name="res"> /// Ресурс, который вычитается /// </param> /// <returns> /// Логическое значение, показывающее, возможно ли вычесть из объекта ресурсов другой объект ресурсов /// </returns> public bool CanSubtract(IBasicResources res) { if (this.Hydrogen >= res.Hydrogen && this.CommonMetals >= res.CommonMetals && this.RareEarthElements >= res.RareEarthElements) { return(true); } return(false); }
/// <summary> /// Вычитает ресурсы переданного объекта <see cref="IBasicResources"/> /// </summary> /// <exception cref="ArgumentException"/> public void Subtract(IBasicResources res) { if (!this.CanSubtract(res)) { throw new ArgumentException("Argument can't be greater than object"); } this.Hydrogen -= res.Hydrogen; this.CommonMetals -= res.CommonMetals; this.RareEarthElements -= res.RareEarthElements; }
public TechnologyResearcher(Technology tecnology, IBasicResources costPerTurn, int researchDuration) { if (costPerTurn == null) { throw new ArgumentNullException(nameof(costPerTurn)); } if (tecnology == null) { throw new ArgumentNullException(nameof(tecnology)); } this.technologyBeingResearched = tecnology; this.CostPerTurn = new ReadOnlyResources(costPerTurn); this.ResearchDuration = researchDuration; }
public bool IsStrictlyGreater(IBasicResources res) { return(innerResources.IsStrictlyGreater(res)); }
public bool IsNotEqual(IBasicResources res) { return(innerResources.IsNotEqual(res)); }
public ReadOnlyResources(IBasicResources res) { innerResources = new Resources(res); }
protected Builder(int duration, IBasicResources costPerTurn, SpaceBuilding building) { this.BuildingDuration = duration; this.CostPerTurn = new ReadOnlyResources(costPerTurn); this.BuildingBeingBuilt = building; }
/// <summary> /// Инициализирует новый объект <see cref="Resources"/> переданным объектом <see cref="IBasicResources"/> /// </summary> /// <param name="res"> /// Объект, с которого создастся новый объект <see cref="Resources"/> /// </param> public Resources(IBasicResources res) : this(res.Hydrogen, res.CommonMetals, res.RareEarthElements) { }