136 lines
4.2 KiB
C#
136 lines
4.2 KiB
C#
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<StandardInfo> standardInfos = new();
|
|
public string[] machineFilters;
|
|
|
|
public HashSet<Machine> 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<string> 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<StandardInfo> standardInfos, string[] machineFilters)
|
|
{
|
|
var building = FindAnyObjectByType<Building>();
|
|
machines = building.floors.SelectMany(f => f.machines).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<AZTECHUIManager>().GetCanvas<PopupCanvas>().GetPanel<LibraryPanel>();
|
|
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<AZTECHUIManager>().GetCanvas<PopupCanvas>().GetPanel<LibraryPanel>();
|
|
libraryPanel.AddLibrarayButtons(filteringMachine);
|
|
}
|
|
}
|
|
}
|
|
|