using AZTECHWB.Core; using AZTECHWB.UI; using Cysharp.Threading.Tasks; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace AZTECHWB.Management { [Serializable] public class StandardInfo { public string code; public string name; public string[] filterInfo; } public class LibraryManager : Manager { public string sceneName; private string machineInfoPath = "MachineStandardInfo.csv"; private Machine[] machines; public List standardInfos = new(); public string[] machineFilters; public HashSet filteringMachine = new(); public override async UniTask Init() { var path = $"./{machineInfoPath }"; ReadStandardInfo(new string[] { path }); AZTECHSceneMain.Instance.Initialized += () => MatchingMachine(standardInfos, machineFilters); await UniTask.CompletedTask; } string[] ReadRawFile(string path, char separator) { FileInfo fileInfo = new FileInfo(path); using (var fs = fileInfo.OpenRead()) { var length = fs.Length; var buffer = new byte[length]; fs.Read(buffer, 0, buffer.Length); string str = System.Text.Encoding.Default.GetString(buffer); return str.Split(separator); } } void ReadStandardInfo(string[] file) { var path = file[0]; var rawData = ReadRawFile(path, '\n'); standardInfos.Clear(); bool warningChecker = false; HashSet filterSet = new(); for (int i = 1; i < rawData.Length - 1; ++i) { var r = rawData[i]; var data = r.Split(','); if (data.Length < 2) { return; } var code = data[0]; var name = data[1]; if (code == "" || name == "") { warningChecker = true; break; } data = data[2..]; int prevLength = data.Length; data = data.Distinct().Where(d => d != "" && d != "\r").ToArray(); for (int a = 0; a < data.Length; ++a) { data[a] = data[a].Replace('\r', ' '); } var standardInfo = new StandardInfo() { code = code, name = name, filterInfo = data }; foreach (var f in standardInfo.filterInfo) { if (f != "") filterSet.Add(f); } standardInfos.Add(standardInfo); } if (warningChecker) { return; } machineFilters = filterSet.ToArray(); } public void MatchingMachine(List standardInfos, string[] machineFilters) { var building = FindAnyObjectByType(); machines = building.machineList.ToArray(); foreach (var info in standardInfos) { var p = machines.FirstOrDefault(x => x.machineName.Equals(info.code)); if (p == null) continue; p.typeOptions = info.filterInfo; } var libraryPanel = AZTECHSceneMain.Instance.GetManager().GetCanvas().GetPanel(); libraryPanel.UpdateFileterList(machineFilters); libraryPanel.SetAllMachines(machines.ToHashSet()); } public void LibraryFiltering(string options) { filteringMachine.Clear(); foreach (var machine in machines) { if (machine.typeOptions.Contains(options)) { filteringMachine.Add(machine); } } var libraryPanel = AZTECHSceneMain.Instance.GetManager().GetCanvas().GetPanel(); libraryPanel.AddLibrarayButtons(filteringMachine); } } }