Files
AZTECH_WB/Assets/Scripts/Manager/LibraryManager.cs
정영민 6f1c335c73 [정영민] 설비 겹침 정렬 기능 수정
26.03.11
설비 겹침 기능 수정
2026-03-11 16:52:24 +09:00

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