using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using WI; using TMPro; using SFB; using Newtonsoft.Json; using System.Linq; //using static UnityEditor.Progress; namespace CHN { public class Panel_Library : PanelBase, ISingle, IPopupPanel { private GridLayoutGroup Panel_MachineFilter; private ScrollRect ScrollView_MachineList; private Button Button_Active; private Image Image_Open; private Image Image_Close; private UI_LibraryButton prf_LibraryButton; private UI_FilterButton prf_FilterToggle; private Dictionary filterToItem = new Dictionary(); private List filters = new List(); public UI_FilterButton pre_labelButton; public Action onClickLabelButton; public Action onClickLibraryButton; public Action onClickDeleteRegistration; public Action onClickCorrection; public Vector2 originPos; public Vector2 downPos; public float fadeTime; public bool isActive; private string dataOrder; public override void AfterAwake() { dataOrder = Resources.Load("DataOrder").text; prf_LibraryButton = Resources.Load("Prefabs/UI/PRF_UI_LibraryButton"); prf_FilterToggle = Resources.Load("Prefabs/UI/PRF_UI_FilterButton"); Button_Active.onClick.AddListener(OnClickActiveButton); originPos = rectTransform.anchoredPosition; downPos = originPos - new Vector2(0f, rectTransform.rect.height); isActive = true; } public void UpdateFileterList(string[] filters) { foreach (var item in filterToItem) { Destroy(item.Value.gameObject); } filterToItem.Clear(); this.filters.Clear(); for (int i = 0; i < filters.Length; ++i) { CreateFilterToggle(filters[i]); } OnClickLabelButton(this.filters[0]); } UI_FilterButton CreateFilterToggle(string label) { var btn = Instantiate(prf_FilterToggle, Panel_MachineFilter.transform); btn.SettingButton(label); btn.onClickButton += OnClickLabelButton; filterToItem.Add(label, btn); filters.Add(btn); return btn; } private void OnClickLabelButton(UI_FilterButton filterLabel) { if(pre_labelButton != null) { pre_labelButton.ResetColor(); } pre_labelButton = filterLabel; pre_labelButton.SetColor(); onClickLabelButton?.Invoke(pre_labelButton.label); } public void OnClickActiveButton() { if (!isActive) { Open(); } else { Close(); } } public void Open() { isActive = true; Image_Open.gameObject.SetActive(false); Image_Close.gameObject.SetActive(true); StopAllCoroutines(); StartCoroutine(MoveAnimation(originPos)); } public void Close() { isActive = false; Image_Open.gameObject.SetActive(true); Image_Close.gameObject.SetActive(false); StopAllCoroutines(); StartCoroutine(MoveAnimation(downPos)); } public void AddLibrarayButtons(HashSet machines) { ScrollView_MachineList.Clear(); var sortedMachines = SortListByWorkcd(machines); foreach (var machine in sortedMachines) { var machineButton = Instantiate(prf_LibraryButton, ScrollView_MachineList.content); machineButton.SettingButton(machine); machineButton.onClickButton += OnClickLibraryButton; machineButton.onClickDeleteRegistration += OnClickDeleteRegistrationButton; machineButton.onClickCorrection += OnClickCorrectionButton; } } public List SortListByWorkcd(HashSet machines) { List workcdOrder = JsonConvert.DeserializeObject>(dataOrder); Dictionary orderMap = workcdOrder .Select((workcd, index) => new { workcd, index }) .ToDictionary(x => x.workcd, x => x.index); return machines .OrderBy(field => orderMap[field.code]) .ToList(); } private void OnClickLibraryButton(UI_LibraryButton machineButton) { onClickLibraryButton?.Invoke(machineButton.machine); } private void OnClickDeleteRegistrationButton(UI_LibraryButton machineButton) { onClickDeleteRegistration?.Invoke(machineButton.machine); } private void OnClickCorrectionButton(UI_LibraryButton machineButton) { onClickCorrection?.Invoke(machineButton.machine); } IEnumerator MoveAnimation(Vector2 targetPos) { float timer = 0f; float percent = 0f; while (percent < 1) { timer += Time.deltaTime; percent = timer / fadeTime; rectTransform.anchoredPosition = Vector2.Lerp(rectTransform.anchoredPosition, targetPos, percent); yield return null; } } } }