public bool IsMetBy(IProductionProject project, ICity city)
        {
            switch (Target)
            {
            case TargetType.Project: return(IsConditionMetByProject(project));

            default: return(false);
            }
        }
        /// <inheritdoc/>
        public int GetGoldCostToHurryProject(ICity city, IProductionProject project)
        {
            if (city == null)
            {
                throw new ArgumentNullException("city");
            }
            else if (project == null)
            {
                throw new ArgumentNullException("project");
            }

            return(Mathf.FloorToInt((project.ProductionToComplete - project.Progress) * Config.HurryCostPerProduction));
        }
        private ICity BuildCity(IProductionProject activeProject)
        {
            var mockCity = new Mock <ICity>();

            mockCity.SetupAllProperties();

            var newCity = mockCity.Object;

            newCity.ActiveProject = activeProject;

            AllCities.Add(newCity);

            return(newCity);
        }
示例#4
0
        private ICity BuildCity(IProductionProject project, params IBuilding[] buildings)
        {
            var mockCity = new Mock <ICity>();

            mockCity.Setup(city => city.ActiveProject).Returns(project);

            var newCity = mockCity.Object;

            MockBuildingPossessionCanon.Setup(canon => canon.GetPossessionsOfOwner(newCity)).Returns(buildings);

            AllCities.Add(newCity);

            return(newCity);
        }
 private bool IsConditionMetByProject(IProductionProject project)
 {
     if (ProjectRestriction == ProjectRestrictionCategory.Unit && project.UnitToConstruct != null)
     {
         return(IsConditionMetByUnit(project.UnitToConstruct));
     }
     else if (ProjectRestriction == ProjectRestrictionCategory.Building && project.BuildingToConstruct != null)
     {
         return(IsConditionMetByBuilding(project.BuildingToConstruct));
     }
     else
     {
         return(false);
     }
 }
        public bool DoesModifierApply(IProductionProject project, ICity city)
        {
            if (Conditions == null || Conditions.Count == 0)
            {
                return(true);
            }

            foreach (var condition in Conditions)
            {
                if (JoinedTogetherBy == JoinType.And && !condition.IsMetBy(project, city))
                {
                    return(false);
                }
                else if (JoinedTogetherBy == JoinType.Or && condition.IsMetBy(project, city))
                {
                    return(true);
                }
            }

            return(JoinedTogetherBy == JoinType.And ? true : false);
        }
示例#7
0
        private ICity BuildCity(
            IHexCell location, ICivilization owner, IProductionProject activeProject, int population
            )
        {
            var mockCity = new Mock <ICity>();

            mockCity.Setup(city => city.ActiveProject).Returns(activeProject);
            mockCity.Setup(city => city.Population).Returns(population);

            var newCity = mockCity.Object;

            MockCityLocationCanon.Setup(canon => canon.GetPossessionsOfOwner(location))
            .Returns(new List <ICity>()
            {
                newCity
            });

            MockCityPossessionCanon.Setup(canon => canon.GetOwnerOfPossession(newCity)).Returns(owner);

            return(newCity);
        }
        /// <inheritdoc/>
        public int GetProductionProgressPerTurnOnProject(ICity city, IProductionProject project)
        {
            if (city == null)
            {
                throw new ArgumentNullException("city");
            }
            else if (project == null)
            {
                throw new ArgumentNullException("project");
            }

            float productionModifier = 0f;

            foreach (var building in BuildingPossessionCanon.GetPossessionsOfOwner(city))
            {
                if (building.Template.ProductionModifier.DoesModifierApply(project, city))
                {
                    productionModifier += building.Template.ProductionModifier.Value;
                }
            }

            var cityOwner = CityPossessionCanon.GetOwnerOfPossession(city);

            foreach (var policyBonuses in SocialPolicyCanon.GetPolicyBonusesForCiv(cityOwner))
            {
                if (policyBonuses.ProductionModifier.DoesModifierApply(project, city))
                {
                    productionModifier += policyBonuses.ProductionModifier.Value;
                }
            }

            float totalProduction = GenerationLogic.GetTotalYieldForCity(
                city, new YieldSummary(production: productionModifier)
                )[YieldType.Production];

            return(Mathf.RoundToInt(totalProduction));
        }
 public void MakeProductionRequest(
     IProductionProject project, ICity requestingCity
     )
 {
     if (project.UnitToConstruct != null)
     {
         project.Execute(requestingCity);
     }
     else if (project.BuildingToConstruct != null && project.BuildingToConstruct.Type == BuildingType.Normal)
     {
         project.Execute(requestingCity);
     }
     else if (project.BuildingToConstruct != null)
     {
         ProductionRequestsByTemplate.AddElementToList(
             project.BuildingToConstruct,
             new ProductionRequest()
         {
             Project        = project,
             RequestingCity = requestingCity,
         }
             );
     }
 }