219 lines
6.7 KiB
C#
219 lines
6.7 KiB
C#
using CHN;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using TMPro;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
using WI;
|
|
using static MQTT;
|
|
|
|
namespace CHN
|
|
{
|
|
public class Panel_MachineDashBoard : PanelBase
|
|
{
|
|
Toggle Toggle_Lock;
|
|
Button Button_Close;
|
|
Button Button_Simple;
|
|
Button Button_Detail;
|
|
Button Button_Refresh;
|
|
ScrollRect scrollView_SimpleInfo;
|
|
ScrollRect scrollView_DetailInfo;
|
|
TextMeshProUGUI text_MachineName;
|
|
|
|
private ObjectPoolManager poolManager;
|
|
public UI_MachineInfoItem prf_InfoItem;
|
|
public HashSet<UI_MachineInfoItem> infoItems = new();
|
|
private FieldInfo[] fields;
|
|
private Dictionary<FieldInfo, UI_MachineInfoItem> machineInfoItem = new();
|
|
private HashSet<string> simpleviewField = new();
|
|
|
|
public Action<Machine> onClickDetail;
|
|
public Action<Machine> onClickSimple;
|
|
public Action<Machine, HashSet<string>> simpleView;
|
|
private Machine machine;
|
|
|
|
private Button currentTabButton;
|
|
public override void AfterAwake()
|
|
{
|
|
prf_InfoItem = Resources.Load<UI_MachineInfoItem>("Prefabs/UI/PRF_UI_MachineInfoItem");
|
|
Toggle_Lock.onValueChanged.AddListener(OnChangedLock);
|
|
Button_Close.onClick.AddListener(Close);
|
|
Button_Simple.onClick.AddListener(OnClickSimple);
|
|
Button_Detail.onClick.AddListener(OnClickDetail);
|
|
ChangeTabButtonState(Button_Simple);
|
|
SetActive(false);
|
|
fields = typeof(CompleteInfo).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
|
}
|
|
|
|
private void SimpleViewItem(string field, bool ison)
|
|
{
|
|
if (machine == null)
|
|
return;
|
|
|
|
var fields = simpleviewField;
|
|
if (ison)
|
|
{
|
|
|
|
fields.Add(field);
|
|
}
|
|
else
|
|
{
|
|
fields.Remove(field);
|
|
|
|
}
|
|
|
|
simpleviewField = fields;
|
|
simpleView?.Invoke(machine, simpleviewField);
|
|
}
|
|
|
|
private void OnClickDetail()
|
|
{
|
|
Toggle_Lock.interactable = true;
|
|
scrollView_DetailInfo.gameObject.SetActive(true);
|
|
scrollView_SimpleInfo.gameObject.SetActive(false);
|
|
ChangeTabButtonState(Button_Detail);
|
|
onClickDetail?.Invoke(machine);
|
|
}
|
|
|
|
//요약된 정보를 보여준다
|
|
//요역된 정보 -> 상세펭
|
|
private void OnClickSimple()
|
|
{
|
|
Toggle_Lock.interactable = false;
|
|
Toggle_Lock.isOn = false;
|
|
scrollView_SimpleInfo.gameObject.SetActive(true);
|
|
scrollView_DetailInfo.gameObject.SetActive(false);
|
|
ChangeTabButtonState(Button_Simple);
|
|
onClickSimple?.Invoke(machine);
|
|
}
|
|
private void ChangeTabButtonState(Button button)
|
|
{
|
|
if (currentTabButton != null)
|
|
{
|
|
var preSelectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
|
|
preSelectImage.gameObject.SetActive(false);
|
|
}
|
|
|
|
currentTabButton = button;
|
|
var selectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
|
|
selectImage.gameObject.SetActive(true);
|
|
}
|
|
|
|
void OnChangedLock(bool value)
|
|
{
|
|
if (value)
|
|
{
|
|
foreach (var i in infoItems)
|
|
{
|
|
i.Unlock();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (var i in infoItems)
|
|
{
|
|
i.Lock();
|
|
}
|
|
}
|
|
}
|
|
private void SetMachineName()
|
|
{
|
|
var machineName = machine.name;
|
|
text_MachineName.SetText(machineName);
|
|
}
|
|
public void OpenFromLibraryButton(UI_LibraryButton libraryButton)
|
|
{
|
|
if (this.gameObject.activeSelf)
|
|
return;
|
|
|
|
machine = libraryButton.machine;
|
|
SetMachineName();
|
|
SetActive(true);
|
|
OnClickSimple();
|
|
}
|
|
public void OpenFromMachineClick(Machine clickMachine)
|
|
{
|
|
if (this.gameObject.activeSelf)
|
|
return;
|
|
this.machine = clickMachine;
|
|
SetMachineName();
|
|
SetActive(true);
|
|
OnClickSimple();
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
Clear();
|
|
SetActive(false);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
foreach (var item in infoItems)
|
|
{
|
|
item.Pool.Release(item);
|
|
}
|
|
machineInfoItem.Clear();
|
|
infoItems.Clear();
|
|
}
|
|
public void SimpleInfoView(SimpleField machineInfo)
|
|
{
|
|
foreach (var field in fields)
|
|
{
|
|
if (machineInfo.simpleField.Contains(field.Name))
|
|
{
|
|
var item = CreateItem(field);
|
|
item.transform.SetParent(scrollView_SimpleInfo.content);
|
|
var info = (string)field.GetValue(machineInfo.machineInfo);
|
|
item.Setting(field.Name, info);
|
|
infoItems.Add(item);
|
|
item.ToggleIsOn(true);
|
|
simpleviewField.Add(field.Name);
|
|
}
|
|
}
|
|
OnChangedLock(false);
|
|
}
|
|
|
|
public void DetailInfoView(SimpleField simpleField)
|
|
{
|
|
foreach (var field in fields)
|
|
{
|
|
var item = CreateItem(field);
|
|
item.transform.SetParent(scrollView_DetailInfo.content);
|
|
item.transform.SetAsLastSibling();
|
|
var info = (string)field.GetValue(simpleField.machineInfo);
|
|
item.Setting(field.Name, info);
|
|
var ison = simpleField.simpleField.Contains(field.Name);
|
|
item.ToggleIsOn(ison);
|
|
}
|
|
OnChangedLock(false);
|
|
}
|
|
|
|
private UI_MachineInfoItem CreateItem(FieldInfo field)
|
|
{
|
|
if (machineInfoItem.ContainsKey(field))
|
|
return machineInfoItem[field];
|
|
var item = poolManager.Get<UI_MachineInfoItem>();
|
|
item.onFavoritItem = SimpleViewItem;
|
|
infoItems.Add(item);
|
|
machineInfoItem.Add(field, item);
|
|
return item;
|
|
}
|
|
|
|
string UpperFirstChar(string input)
|
|
{
|
|
if (string.IsNullOrEmpty(input))
|
|
{
|
|
return null;
|
|
}
|
|
return char.ToUpper(input[0]) + input.Substring(1);
|
|
}
|
|
}
|
|
}
|