Files
ChunilENG/Assets/Scripts/UI/Panel_MachineDashBoard.cs

219 lines
6.7 KiB
C#
Raw Normal View History

2025-02-20 09:59:37 +09:00
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
{
2025-02-25 17:31:42 +09:00
Toggle Toggle_Lock;
Button Button_Close;
Button Button_Simple;
Button Button_Detail;
Button Button_Refresh;
2025-02-20 09:59:37 +09:00
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");
2025-02-25 17:31:42 +09:00
Toggle_Lock.onValueChanged.AddListener(OnChangedLock);
Button_Close.onClick.AddListener(Close);
Button_Simple.onClick.AddListener(OnClickSimple);
Button_Detail.onClick.AddListener(OnClickDetail);
ChangeTabButtonState(Button_Simple);
2025-02-20 09:59:37 +09:00
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()
{
2025-02-25 17:31:42 +09:00
Toggle_Lock.interactable = true;
2025-02-20 09:59:37 +09:00
scrollView_DetailInfo.gameObject.SetActive(true);
scrollView_SimpleInfo.gameObject.SetActive(false);
2025-02-25 17:31:42 +09:00
ChangeTabButtonState(Button_Detail);
2025-02-20 09:59:37 +09:00
onClickDetail?.Invoke(machine);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
//<2F><EFBFBD><E4BFAA> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private void OnClickSimple()
{
2025-02-25 17:31:42 +09:00
Toggle_Lock.interactable = false;
Toggle_Lock.isOn = false;
2025-02-20 09:59:37 +09:00
scrollView_SimpleInfo.gameObject.SetActive(true);
scrollView_DetailInfo.gameObject.SetActive(false);
2025-02-25 17:31:42 +09:00
ChangeTabButtonState(Button_Simple);
2025-02-20 09:59:37 +09:00
onClickSimple?.Invoke(machine);
}
private void ChangeTabButtonState(Button button)
{
if (currentTabButton != null)
{
2025-02-25 17:31:42 +09:00
var preSelectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
preSelectImage.gameObject.SetActive(false);
2025-02-20 09:59:37 +09:00
}
currentTabButton = button;
2025-02-25 17:31:42 +09:00
var selectImage = currentTabButton.GetComponentInChildren<RawImage>(true);
selectImage.gameObject.SetActive(true);
2025-02-20 09:59:37 +09:00
}
void OnChangedLock(bool value)
{
if (value)
{
foreach (var i in infoItems)
{
2025-02-25 17:31:42 +09:00
i.Unlock();
2025-02-20 09:59:37 +09:00
}
}
else
{
foreach (var i in infoItems)
{
2025-02-25 17:31:42 +09:00
i.Lock();
2025-02-20 09:59:37 +09:00
}
}
}
private void SetMachineName()
{
var machineName = machine.name;
text_MachineName.SetText(machineName);
}
2025-04-03 11:53:25 +09:00
public void OpenFromLibraryButton(Machine libraryMachine)
2025-02-20 09:59:37 +09:00
{
if (this.gameObject.activeSelf)
return;
2025-04-03 11:53:25 +09:00
machine = libraryMachine;
2025-02-20 09:59:37 +09:00
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()
2025-02-20 09:59:37 +09:00
{
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);
}
}
2025-02-27 16:08:13 +09:00
OnChangedLock(false);
2025-02-20 09:59:37 +09:00
}
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);
}
2025-02-27 16:08:13 +09:00
OnChangedLock(false);
2025-02-20 09:59:37 +09:00
}
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);
}
}
}