Ejemplo n.º 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;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
 private static void AddFacilityTypeToStructure(Vector3Int gridPosition, GridStructure grid, StructureBaseSO structureData)
 {
     if (DoesStructureRequireAnyResources(structureData))
     {
         var structuresAroundPositions = grid.GetStructurePositionInRange(gridPosition, structureData.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 && structureData.HasPower() == false && structureData.requirePower) ||
                     (facility.facilityType == FacilityType.Water && structureData.HasWater() == false && structureData.requireWater) ||
                     (facility.facilityType == FacilityType.Silo && structureData.HasSilo() == false && structureData.requireSilo) ||
                     (facility.facilityType == FacilityType.Healthcare && structureData.HasHealthcare() == false && structureData.requireHealthcare) ||
                     (facility.facilityType == FacilityType.LawEnforcement && structureData.HasLawEnforcement() == false && structureData.requireLawEnforcement) ||
                     (facility.facilityType == FacilityType.FireProtection && structureData.HasFireProtection() == false && structureData.requireFireProtection) ||
                     (facility.facilityType == FacilityType.Postal && structureData.HasPostalService() == false && structureData.requirePostalService) ||
                     (facility.facilityType == FacilityType.Banking && structureData.HasBankingService() == false && structureData.requireBankService) ||
                     (facility.facilityType == FacilityType.Garbage && structureData.HasGarbageService() == false && structureData.requireGarbageService) ||
                     (facility.facilityType == FacilityType.Education && structureData.HasEducationService() == false && structureData.requireEducationSerivce))
                 {
                     if (grid.ArePositionsInRange(gridPosition, structurePositionNearBy, facility.singleStructureRange))
                     {
                         if (facility.IsFull() == false)
                         {
                             facility.AddClient(new StructureBaseSO[] { structureData });
                             if (DoesStructureRequireAnyResources(structureData) == false)
                             {
                                 return;
                             }
                         }
                     }
                 }
             }
         }
     }
 }