/// <summary> /// Returns a descriptive text indicating the supply chain source buildings that the given building /// will receive shipments from. /// </summary> /// <param name="building"></param> /// <returns></returns> public static string GetSupplyBuildingSourcesText(ushort building) { if (building == 0) { return(string.Empty); } var txtItems = new List <string>(); txtItems.Add($"<<Supply Chain Shipments From>>"); if (Constraints.InputAllLocalAreas(building)) { txtItems.Add($"All local areas"); } if (Constraints.InputOutsideConnections(building)) { txtItems.Add($"All outside connections"); } if (Constraints.InputAllLocalAreas(building)) { return(string.Join("\n", txtItems.ToArray())); } // Next, list input building names var supply = Constraints.SupplySources(building); if (supply?.Count > 0) { var buildingNames = supply .Select(b => $"{GetBuildingName(b)} ({b})") .OrderBy(s => s); foreach (var buildingName in buildingNames) { txtItems.Add(buildingName); } } // Then add district names var districts = Constraints.InputDistrictParkServiced(building); if (districts?.Count > 0) { var districtParkNames = districts .Select(dp => dp.Name) .OrderBy(s => s); foreach (var districtParkName in districtParkNames) { txtItems.Add($"{districtParkName} (DISTRICT)"); } } if (txtItems.Count == 1) { return($"<<WARNING: No supply chain shipments accepted!>>"); } else { return(string.Join("\n", txtItems.ToArray())); } }