Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        public bool IsStrictlyGreater(IBasicResources res)
        {
            if (this.Hydrogen > res.Hydrogen &&
                this.CommonMetals > res.CommonMetals &&
                this.RareEarthElements > res.RareEarthElements)
            {
                return(true);
            }

            return(false);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        /// <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);
        }
Beispiel #8
0
        /// <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;
        }
Beispiel #9
0
        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;
        }
Beispiel #10
0
 public bool IsStrictlyGreater(IBasicResources res)
 {
     return(innerResources.IsStrictlyGreater(res));
 }
Beispiel #11
0
 public bool IsNotEqual(IBasicResources res)
 {
     return(innerResources.IsNotEqual(res));
 }
Beispiel #12
0
 public ReadOnlyResources(IBasicResources res)
 {
     innerResources = new Resources(res);
 }
Beispiel #13
0
 protected Builder(int duration, IBasicResources costPerTurn, SpaceBuilding building)
 {
     this.BuildingDuration   = duration;
     this.CostPerTurn        = new ReadOnlyResources(costPerTurn);
     this.BuildingBeingBuilt = building;
 }
Beispiel #14
0
 /// <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)
 {
 }