예제 #1
0
    //what to do when zone structure is placed
    public static void PrepareZoneStructure(Vector3Int gridPosition, GridStructure grid)
    {
        PrepareNewStructure(gridPosition, grid);
        ZoneStructureSO zoneData = (ZoneStructureSO)grid.GetStructureDataFromTheGrid(gridPosition);

        if (DoesStructureRequireAnyResource(zoneData))
        {
            var structuresAroundPositions = grid.GetStructurePositionsInRange(gridPosition, zoneData.maxFacilitySearchRange);
            foreach (var structurePositionNearby in structuresAroundPositions)
            {
                var data = grid.GetStructureDataFromTheGrid(structurePositionNearby);
                if (data.GetType() == typeof(SingleFacilitySO))
                {
                    SingleFacilitySO facility = (SingleFacilitySO)data;
                    if ((facility.facilityType == FacilityType.Power && zoneData.HasPower() == false && zoneData.requirePower) ||
                        (facility.facilityType == FacilityType.Water && zoneData.HasWater() == false && zoneData.requireWater))
                    {
                        if (grid.ArePositionsInRange(gridPosition, structurePositionNearby, facility.singleStructureRange))
                        {
                            if (facility.IsFull() == false)
                            {
                                facility.AddClients(new StructureBaseSO[] { zoneData });
                                if (DoesStructureRequireAnyResource(zoneData) == false)
                                {
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
예제 #2
0
    public void DisplayZoneStructureInfo(ZoneStructureSO data)
    {
        Show();
        HideElement(clientsTxt.gameObject);

        SetText(nameTxt, data.buildingName);
        SetText(incomeTxt, data.GetIncome() + "");
        SetText(upkeepTxt, data.upkeepCost + "");
        if (data.requirePower)
        {
            SetToggle(powerToggle, data.HasPower());
        }
        else
        {
            HideElement(powerToggle.gameObject);
        }
        if (data.requireWater)
        {
            SetToggle(waterToggle, data.HasWater());
        }
        else
        {
            HideElement(waterToggle.gameObject);
        }
        if (data.requireRoadAccess)
        {
            SetToggle(roadToggle, data.HasRoadAccess());
        }
        else
        {
            HideElement(roadToggle.gameObject);
        }
    }
        public void StructureEconomyManagerPlaceResidentialAfterFacilityTooFar()
        {
            SingleFacilitySO facility        = CreateFacilityAtPosition(new Vector3Int(6, 0, 6), FacilityType.Power);
            ZoneStructureSO  residentialZone = CreateZoneAtPosition(new Vector3Int(0, 0, 0));

            Assert.False(residentialZone.HasPower());
            Assert.True(facility.GetNumberOfCustomers() == 0);
        }
        public void StructureEconomyManagerAddPowerFacilityNear3Residential3Connected()
        {
            ZoneStructureSO  residentialZone  = CreateZoneAtPosition(new Vector3Int(0, 0, 0));
            ZoneStructureSO  residentialZone1 = CreateZoneAtPosition(new Vector3Int(0, 0, 3));
            ZoneStructureSO  residentialZone2 = CreateZoneAtPosition(new Vector3Int(0, 0, 6));
            SingleFacilitySO facility         = CreateFacilityAtPosition(new Vector3Int(6, 0, 6), FacilityType.Power);

            Assert.True(residentialZone.HasPower());
            Assert.True(residentialZone1.HasPower());
            Assert.True(residentialZone2.HasPower());
            Assert.True(facility.GetNumberOfCustomers() == 3);
        }
        public void StructureEconomyManager3ResidentialsConnectedToFacilityRemove2()
        {
            ZoneStructureSO  residentialZone  = CreateZoneAtPosition(new Vector3Int(0, 0, 0));
            ZoneStructureSO  residentialZone1 = CreateZoneAtPosition(new Vector3Int(0, 0, 3));
            ZoneStructureSO  residentialZone2 = CreateZoneAtPosition(new Vector3Int(0, 0, 6));
            SingleFacilitySO facility         = CreateFacilityAtPosition(new Vector3Int(6, 0, 6), FacilityType.Power);

            StructureEconomyManager.PrepareStructureForRemoval(new Vector3Int(0, 0, 0), _grid);
            StructureEconomyManager.PrepareStructureForRemoval(new Vector3Int(0, 0, 3), _grid);
            _grid.RemoveStructureFromTheGrid(new Vector3(0, 0, 0));
            _grid.RemoveStructureFromTheGrid(new Vector3(0, 0, 3));
            Assert.True(residentialZone2.HasPower());
            Assert.True(facility.GetNumberOfCustomers() == 1);
        }
        public void StructureEconomyManagerRemovePowerFacilityNear3Residential3Connected()
        {
            ZoneStructureSO  residentialZone  = CreateZoneAtPosition(new Vector3Int(0, 0, 0));
            ZoneStructureSO  residentialZone1 = CreateZoneAtPosition(new Vector3Int(0, 0, 3));
            ZoneStructureSO  residentialZone2 = CreateZoneAtPosition(new Vector3Int(0, 0, 6));
            SingleFacilitySO facility         = CreateFacilityAtPosition(new Vector3Int(6, 0, 6), FacilityType.Power);

            StructureEconomyManager.PrepareFacilityRemoval(new Vector3Int(6, 0, 6), _grid);
            _grid.RemoveStructureFromTheGrid(new Vector3Int(6, 0, 6));
            Assert.False(residentialZone.HasPower());
            Assert.False(residentialZone1.HasPower());
            Assert.False(residentialZone2.HasPower());
            Assert.True(_grid.GetStructureDataFromTheGrid(new Vector3Int(6, 0, 6)) == null);
        }
예제 #7
0
 private static bool DoesStructureRequireAnyResource(ZoneStructureSO zoneData)
 {
     return((zoneData.requirePower && zoneData.HasPower() == false) || (zoneData.requireWater && zoneData.HasWater() == false));
 }