126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
using AZTECHWB.Constants;
|
||
using AZTECHWB.Management;
|
||
using Cysharp.Threading.Tasks;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace AZTECHWB.UI
|
||
{
|
||
public class MachineDataDashboard : UIPanel
|
||
{
|
||
private TMP_Text Text_MachineName;
|
||
private ScrollRect ScrollView_DataInfo;
|
||
private TextMeshProUGUI Text_NoData;
|
||
private Button Button_Close;
|
||
|
||
private MachineDataInfoItem dataInfoItem;
|
||
|
||
private FieldInfo[] machineDataFields;
|
||
private Dictionary<string, MachineDataInfoItem> dataInfoItems = new();
|
||
|
||
public override async UniTask Init()
|
||
{
|
||
Text_MachineName = GetElement<TextMeshProUGUI>(nameof(Text_MachineName));
|
||
ScrollView_DataInfo = GetElement<ScrollRect>(nameof(ScrollView_DataInfo));
|
||
Text_NoData = GetElement<TextMeshProUGUI>(nameof(Text_NoData));
|
||
Button_Close = GetElement<Button>(nameof(Button_Close));
|
||
|
||
dataInfoItem = Resources.Load<MachineDataInfoItem>($"{ResourceURL.uiPrefabFolderPath}{nameof(MachineDataInfoItem)}");
|
||
|
||
Button_Close.onClick.AddListener(Close);
|
||
machineDataFields = typeof(CompleteInfo).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||
Text_NoData.gameObject.SetActive(true);
|
||
|
||
await UniTask.CompletedTask;
|
||
}
|
||
public void SetDataDashobardInfo(Machine machine, CompleteInfo infos)
|
||
{
|
||
if (Text_MachineName.text == machine.machineName)
|
||
{
|
||
UpdateMachineDataInfo(machineDataFields, infos);
|
||
}
|
||
else
|
||
{
|
||
Text_MachineName.SetText(machine.machineName);
|
||
// Destroy <20><><EFBFBD> <20><>ȯ
|
||
foreach (var item in dataInfoItems.Values)
|
||
{
|
||
ReturnItem(item);
|
||
}
|
||
dataInfoItems.Clear();
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> Ǯ<><C7AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CreateMachineDataInfo(machineDataFields, infos);
|
||
|
||
Text_NoData.gameObject.SetActive(dataInfoItems.Count() <= 0);
|
||
}
|
||
}
|
||
|
||
private void CreateMachineDataInfo(FieldInfo[] fields, object data)
|
||
{
|
||
foreach (var field in fields)
|
||
{
|
||
var item = GetItem();
|
||
|
||
var info = (string)field.GetValue(data);
|
||
item.Setting(field.Name, info);
|
||
|
||
dataInfoItems.Add($"{field}", item);
|
||
}
|
||
}
|
||
|
||
private void UpdateMachineDataInfo(FieldInfo[] fields, object data)
|
||
{
|
||
foreach (var field in fields)
|
||
{
|
||
var info = (string)field.GetValue(data);
|
||
|
||
if (!dataInfoItems.ContainsKey($"{field}"))
|
||
continue;
|
||
|
||
dataInfoItems[$"{field}"].Setting(field.Name, info);
|
||
}
|
||
}
|
||
|
||
private Queue<MachineDataInfoItem> pool = new Queue<MachineDataInfoItem>();
|
||
|
||
public MachineDataInfoItem GetItem()
|
||
{
|
||
MachineDataInfoItem item;
|
||
if (pool.Count > 0)
|
||
{
|
||
item = pool.Dequeue();
|
||
item.gameObject.SetActive(true);
|
||
}
|
||
else
|
||
{
|
||
item = Instantiate(dataInfoItem, ScrollView_DataInfo.content);
|
||
}
|
||
|
||
item.transform.SetAsLastSibling();
|
||
item.Init();
|
||
return item;
|
||
}
|
||
|
||
public void ReturnItem(MachineDataInfoItem item)
|
||
{
|
||
item.gameObject.SetActive(false);
|
||
pool.Enqueue(item);
|
||
}
|
||
|
||
public void ClearPool()
|
||
{
|
||
foreach (var item in pool)
|
||
{
|
||
Destroy(item.gameObject);
|
||
}
|
||
pool.Clear();
|
||
}
|
||
}
|
||
}
|
||
|