private void PopulateImprovementList()
        {
            foreach (var improvementTemplate in AvailableImprovementTemplates)
            {
                var newRecord = Instantiate(ImprovementRecordPrefab);

                newRecord.gameObject.SetActive(true);
                newRecord.SetParent(ImprovementRecordContainer, false);

                newRecord.GetComponentInChildren <Text>().text = improvementTemplate.name;

                var recordToggle = newRecord.GetComponentInChildren <Toggle>();

                var cachedTemplate = improvementTemplate;
                recordToggle.onValueChanged.AddListener(delegate(bool isOn) {
                    if (isOn)
                    {
                        SelectedTemplate = cachedTemplate;
                    }
                });

                if (recordToggle.isOn)
                {
                    SelectedTemplate = improvementTemplate;
                }

                if (SelectedTemplate == improvementTemplate)
                {
                    recordToggle.isOn = true;
                }

                InstantiatedRecords.Add(newRecord);
            }
        }
        public YieldSummary GetYieldOfImprovementTemplate(
            IImprovementTemplate template, IResourceNode nodeAtLocation,
            IEnumerable <IResourceDefinition> visibleResources,
            IEnumerable <IImprovementModificationData> improvementModifications,
            bool hasFreshWater
            )
        {
            YieldSummary retval = YieldSummary.Empty;

            if (nodeAtLocation == null || nodeAtLocation.Resource.Extractor != template ||
                !visibleResources.Contains(nodeAtLocation.Resource)
                )
            {
                retval += template.BonusYieldNormal;
            }

            foreach (var mod in improvementModifications)
            {
                if (mod.Template == template && (!mod.RequiresFreshWater || hasFreshWater))
                {
                    retval += mod.BonusYield;
                }
            }

            return(retval);
        }
Ejemplo n.º 3
0
        private IResourceDefinition BuildResource(IImprovementTemplate extractor)
        {
            var mockResource = new Mock <IResourceDefinition>();

            mockResource.Setup(resource => resource.Extractor).Returns(extractor);

            return(mockResource.Object);
        }
Ejemplo n.º 4
0
        private IImprovement BuildImprovement(IImprovementTemplate template)
        {
            var mockImprovement = new Mock <IImprovement>();

            mockImprovement.Setup(improvement => improvement.Template).Returns(template);

            return(mockImprovement.Object);
        }
Ejemplo n.º 5
0
        private IImprovement BuildImprovement(IImprovementTemplate template, bool isPillaged = false)
        {
            var mockImprovement = new Mock <IImprovement>();

            mockImprovement.Setup(improvement => improvement.Template).Returns(template);
            mockImprovement.Setup(improvement => improvement.IsPillaged).Returns(isPillaged);

            return(mockImprovement.Object);
        }
 private void TryAddImprovementTo(IImprovementTemplate template, IHexCell location)
 {
     if (ImprovementValidityLogic.IsTemplateValidForCell(template, location, true) &&
         ImprovementLocationCanon.CanPlaceImprovementOfTemplateAtLocation(template, location)
         )
     {
         ImprovementFactory.BuildImprovement(template, location, 0, true, false);
     }
 }
        public YieldSummary GetYieldOfImprovementTemplate(
            IImprovementTemplate template, IResourceNode nodeAtLocation,
            IEnumerable <IResourceDefinition> visibleResources,
            IEnumerable <ITechDefinition> discoveredTechs, bool hasFreshWater
            )
        {
            var improvementModification = discoveredTechs.SelectMany(tech => tech.ImprovementYieldModifications);

            return(GetYieldOfImprovementTemplate(
                       template, nodeAtLocation, visibleResources, improvementModification, hasFreshWater
                       ));
        }
Ejemplo n.º 8
0
        private IResourceDefinition BuildResourceDefinition(
            IImprovementTemplate extractor, YieldSummary bonusYieldBase,
            YieldSummary bonusYieldWhenImproved
            )
        {
            var mockResource = new Mock <IResourceDefinition>();

            mockResource.Setup(resource => resource.Extractor).Returns(extractor);
            mockResource.Setup(resource => resource.BonusYieldBase).Returns(bonusYieldBase);
            mockResource.Setup(resource => resource.BonusYieldWhenImproved).Returns(bonusYieldWhenImproved);

            return(mockResource.Object);
        }
Ejemplo n.º 9
0
        private IImprovement BuildImprovement(
            IImprovementTemplate template, bool isConstructed, bool isPillaged
            )
        {
            var mockImprovement = new Mock <IImprovement>();

            mockImprovement.Setup(improvement => improvement.IsConstructed).Returns(isConstructed);
            mockImprovement.Setup(improvement => improvement.IsPillaged).Returns(isPillaged);
            mockImprovement.Setup(improvement => improvement.Template).Returns(template);

            var newImprovement = mockImprovement.Object;

            return(newImprovement);
        }
Ejemplo n.º 10
0
        private ITechDefinition BuildTechDefinition(TechTestData testData,
                                                    IImprovementTemplate candidateImprovementTemplate
                                                    )
        {
            var mockTech = new Mock <ITechDefinition>();

            mockTech
            .Setup(tech => tech.ImprovementYieldModifications)
            .Returns(testData.ImprovementModifications.Select(
                         yieldModData => BuildModificationData(yieldModData, candidateImprovementTemplate)
                         ));

            return(mockTech.Object);
        }
Ejemplo n.º 11
0
        private IImprovement BuildImprovement(IImprovementTemplate template, IHexCell location)
        {
            var mockImprovement = new Mock <IImprovement>();

            mockImprovement.Setup(improvement => improvement.Template).Returns(template);

            var newImprovement = mockImprovement.Object;

            MockImprovementLocationCanon.Setup(canon => canon.GetPossessionsOfOwner(location))
            .Returns(new List <IImprovement>()
            {
                newImprovement
            });

            return(newImprovement);
        }
Ejemplo n.º 12
0
        private YieldSummary GetYieldEstimateForCellWithImprovement(
            IHexCell cell, IResourceNode nodeAtLocation, IEnumerable <IResourceDefinition> visibleResources,
            IEnumerable <IImprovementModificationData> improvementModifications,
            IEnumerable <ICellYieldModificationData> buildingYieldMods,
            IImprovementTemplate improvement
            )
        {
            var retval = YieldSummary.Empty;

            if (nodeAtLocation != null)
            {
                HypotheticalImprovement hypothetical;

                if (improvement == null)
                {
                    hypothetical = NullHypotheticalImprovement;
                }
                else if (!HypotheticalForTemplate.TryGetValue(improvement, out hypothetical))
                {
                    hypothetical = new HypotheticalImprovement(improvement);

                    HypotheticalForTemplate[improvement] = hypothetical;
                }

                retval += NodeYieldLogic.GetYieldFromNode(
                    nodeAtLocation, visibleResources, hypothetical
                    );
            }

            bool clearVegetation = false;

            if (improvement != null)
            {
                retval += ImprovementYieldLogic.GetYieldOfImprovementTemplate(
                    improvement, nodeAtLocation, visibleResources, improvementModifications,
                    FreshWaterCanon.HasAccessToFreshWater(cell)
                    );

                clearVegetation = improvement.ClearsVegetationWhenBuilt;
            }

            retval += InherentYieldLogic.GetInherentCellYield(cell, clearVegetation);

            retval += YieldFromBuildingsLogic.GetBonusCellYieldFromYieldModifications(cell, buildingYieldMods);

            return(retval + OneScience);
        }
Ejemplo n.º 13
0
        private IImprovementModificationData BuildModificationData(
            ImprovementModificationTestData modData,
            IImprovementTemplate candidateImprovementTemplate
            )
        {
            var mockData = new Mock <IImprovementModificationData>();

            mockData.Setup(data => data.BonusYield).Returns(modData.BonusYield);
            mockData.Setup(data => data.RequiresFreshWater).Returns(modData.RequiresFreshWater);

            if (modData.AppliesToImprovement)
            {
                mockData.Setup(data => data.Template).Returns(candidateImprovementTemplate);
            }

            return(mockData.Object);
        }
Ejemplo n.º 14
0
        public IImprovement BuildImprovement(
            IImprovementTemplate template, IHexCell location, float workInvested,
            bool isConstructed, bool isPillaged
            )
        {
            if (template == null)
            {
                throw new ArgumentNullException("template");
            }
            else if (location == null)
            {
                throw new ArgumentNullException("location");
            }

            var newGameObject = GameObject.Instantiate(ImprovementPrefab);

            Container.InjectGameObject(newGameObject);

            var newImprovement = newGameObject.GetComponent <Improvement>();

            newImprovement.Template = template;

            if (template.ClearsVegetationWhenBuilt && location.Vegetation != CellVegetation.None)
            {
                CellModificationLogic.ChangeVegetationOfCell(location, CellVegetation.None);
            }

            if (!ImprovementLocationCanon.CanChangeOwnerOfPossession(newImprovement, location))
            {
                throw new ImprovementCreationException("Cannot assign the new improvement to its intended location");
            }
            ImprovementLocationCanon.ChangeOwnerOfPossession(newImprovement, location);

            if (isConstructed)
            {
                newImprovement.Construct();
            }
            else if (isPillaged)
            {
                newImprovement.Pillage();
            }

            allImprovements.Add(newImprovement);

            return(newImprovement);
        }
Ejemplo n.º 15
0
        private IResourceNode BuildResourceNode(IHexCell location, IImprovementTemplate extractor)
        {
            var mockNode = new Mock <IResourceNode>();

            var mockDefinition = new Mock <IResourceDefinition>();

            mockDefinition.Setup(definition => definition.Extractor).Returns(extractor);

            mockNode.Setup(node => node.Resource).Returns(mockDefinition.Object);

            var newNode = mockNode.Object;

            MockNodePositionCanon.Setup(canon => canon.GetPossessionsOfOwner(location))
            .Returns(new List <IResourceNode>()
            {
                newNode
            });

            return(newNode);
        }
        public bool IsTemplateValidForCell(
            IImprovementTemplate template, IHexCell cell, bool ignoreOwnership
            )
        {
            if (template == null)
            {
                throw new ArgumentNullException("template");
            }
            else if (cell == null)
            {
                throw new ArgumentNullException("cell");
            }

            if (!ignoreOwnership && CityLocationCanon.GetPossessionsOfOwner(cell).Count() > 0)
            {
                return(false);
            }

            var nodeAtCell = NodePositionCanon.GetPossessionsOfOwner(cell).FirstOrDefault();

            if (nodeAtCell != null && nodeAtCell.Resource.Extractor == template)
            {
                return(true);
            }
            else if (template.RequiresResourceToExtract)
            {
                return(false);
            }
            else if (template.FreshWaterAlwaysEnables && FreshWaterCanon.HasAccessToFreshWater(cell))
            {
                return(true);
            }

            var retval = cell.Feature == CellFeature.None &&
                         (template.RestrictedToTerrains.Count() == 0 || template.RestrictedToTerrains.Contains(cell.Terrain)) &&
                         (template.RestrictedToVegetations.Count() == 0 || template.RestrictedToVegetations.Contains(cell.Vegetation)) &&
                         (template.RestrictedToShapes.Count() == 0 || template.RestrictedToShapes.Contains(cell.Shape));

            return(retval);
        }
        private IImprovement BuildImprovement(
            IImprovementTemplate template, IHexCell location, int workInvested = 0,
            bool isConstructed = false, bool isPillaged = false
            )
        {
            var mockImprovement = new Mock <IImprovement>();

            mockImprovement.SetupAllProperties();

            mockImprovement.Setup(improvement => improvement.Template).Returns(template);
            mockImprovement.Setup(improvement => improvement.IsConstructed).Returns(isConstructed);
            mockImprovement.Setup(improvement => improvement.IsPillaged).Returns(isPillaged);

            var newImprovement = mockImprovement.Object;

            newImprovement.WorkInvested = workInvested;

            MockImprovementLocationCanon.Setup(canon => canon.GetOwnerOfPossession(newImprovement))
            .Returns(location);

            LastImprovementCreated = newImprovement;

            return(newImprovement);
        }
Ejemplo n.º 18
0
 public HypotheticalImprovement(IImprovementTemplate template)
 {
     Template = template;
 }
Ejemplo n.º 19
0
 public IImprovement BuildImprovement(IImprovementTemplate template, IHexCell location)
 {
     return(BuildImprovement(template, location, 0, false, false));
 }
Ejemplo n.º 20
0
 public bool CanPlaceImprovementOfTemplateAtLocation(IImprovementTemplate template, IHexCell location)
 {
     return(GetPossessionsOfOwner(location).Count() == 0);
 }