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 infoItems = new(); private FieldInfo[] fields; private Dictionary machineInfoItem = new(); private HashSet simpleviewField = new(); public Action onClickDetail; public Action onClickSimple; public Action> simpleView; private Machine machine; private Button currentTabButton; public override void AfterAwake() { prf_InfoItem = Resources.Load("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(true); preSelectImage.gameObject.SetActive(false); } currentTabButton = button; var selectImage = currentTabButton.GetComponentInChildren(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(); 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); } } }