Files
AZTECH_WB/Assets/Scripts/UI/MachineDashboard/MachineDataDashboard.cs
정영민 70515575f5 [정영민] 로그인 기능 수정
26.03.12
- 로그인 단축키 기능 추가
2026-03-16 08:54:59 +09:00

126 lines
3.8 KiB
C#
Raw Blame History

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