//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; } } } } } } } }
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; } } } } } } } }