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

184 lines
5.7 KiB
C#
Raw Permalink Normal View History

2025-02-20 09:59:37 +09:00
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;
2025-02-20 09:59:37 +09:00
//using static UnityEditor.Progress;
namespace CHN
{
public class Panel_Library : PanelBase, ISingle, IPopupPanel
2025-02-20 09:59:37 +09:00
{
private GridLayoutGroup Panel_MachineFilter;
private ScrollRect ScrollView_MachineList;
2025-03-27 10:39:17 +09:00
private Button Button_Active;
private Image Image_Open;
private Image Image_Close;
2025-02-20 09:59:37 +09:00
private UI_LibraryButton prf_LibraryButton;
private UI_FilterButton prf_FilterToggle;
private Dictionary<string, UI_FilterButton> filterToItem = new Dictionary<string, UI_FilterButton>();
private List<UI_FilterButton> filters = new List<UI_FilterButton>();
public UI_FilterButton pre_labelButton;
public Action<string> onClickLabelButton;
2025-04-03 11:53:25 +09:00
public Action<Machine> onClickLibraryButton;
2025-11-21 13:07:13 +09:00
public Action<Machine> onClickDeleteRegistration;
public Action<Machine> onClickCorrection;
2025-02-20 09:59:37 +09:00
2025-07-22 18:12:37 +09:00
public Vector2 originPos;
public Vector2 downPos;
2025-02-20 09:59:37 +09:00
public float fadeTime;
2025-03-27 10:39:17 +09:00
public bool isActive;
private string dataOrder;
2025-02-20 09:59:37 +09:00
public override void AfterAwake()
{
dataOrder = Resources.Load<TextAsset>("DataOrder").text;
2025-02-20 09:59:37 +09:00
prf_LibraryButton = Resources.Load<UI_LibraryButton>("Prefabs/UI/PRF_UI_LibraryButton");
prf_FilterToggle = Resources.Load<UI_FilterButton>("Prefabs/UI/PRF_UI_FilterButton");
2025-03-27 10:39:17 +09:00
Button_Active.onClick.AddListener(OnClickActiveButton);
2025-02-24 18:48:14 +09:00
2025-07-22 18:12:37 +09:00
originPos = rectTransform.anchoredPosition;
downPos = originPos - new Vector2(0f, rectTransform.rect.height);
2025-03-27 10:39:17 +09:00
isActive = true;
2025-02-20 09:59:37 +09:00
}
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]);
2025-02-20 09:59:37 +09:00
}
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);
}
2025-03-27 10:39:17 +09:00
public void OnClickActiveButton()
{
2025-03-27 10:39:17 +09:00
if (!isActive)
{
2025-07-22 18:12:37 +09:00
Open();
2025-03-27 10:39:17 +09:00
}
else
{
2025-07-22 18:12:37 +09:00
Close();
2025-03-27 10:39:17 +09:00
}
}
public void Open()
2025-02-20 09:59:37 +09:00
{
2025-03-27 10:39:17 +09:00
isActive = true;
Image_Open.gameObject.SetActive(false);
Image_Close.gameObject.SetActive(true);
StopAllCoroutines();
StartCoroutine(MoveAnimation(originPos));
2025-02-20 09:59:37 +09:00
}
public void Close()
2025-02-24 18:48:14 +09:00
{
2025-03-27 10:39:17 +09:00
isActive = false;
Image_Open.gameObject.SetActive(true);
Image_Close.gameObject.SetActive(false);
StopAllCoroutines();
StartCoroutine(MoveAnimation(downPos));
2025-02-24 18:48:14 +09:00
}
2025-02-20 09:59:37 +09:00
public void AddLibrarayButtons(HashSet<Machine> machines)
{
ScrollView_MachineList.Clear();
var sortedMachines = SortListByWorkcd(machines);
2025-02-20 09:59:37 +09:00
foreach (var machine in sortedMachines)
{
var machineButton = Instantiate(prf_LibraryButton, ScrollView_MachineList.content);
machineButton.SettingButton(machine);
machineButton.onClickButton += OnClickLibraryButton;
2025-11-21 13:07:13 +09:00
machineButton.onClickDeleteRegistration += OnClickDeleteRegistrationButton;
machineButton.onClickCorrection += OnClickCorrectionButton;
2025-02-20 09:59:37 +09:00
}
}
public List<Machine> SortListByWorkcd(HashSet<Machine> machines)
{
List<string> workcdOrder = JsonConvert.DeserializeObject<List<string>>(dataOrder);
Dictionary<string, int> orderMap = workcdOrder
.Select((workcd, index) => new { workcd, index })
.ToDictionary(x => x.workcd, x => x.index);
return machines
.OrderBy(field => orderMap[field.code])
.ToList();
}
2025-02-20 09:59:37 +09:00
private void OnClickLibraryButton(UI_LibraryButton machineButton)
{
onClickLibraryButton?.Invoke(machineButton.machine);
2025-02-20 09:59:37 +09:00
}
2025-11-21 13:07:13 +09:00
private void OnClickDeleteRegistrationButton(UI_LibraryButton machineButton)
{
onClickDeleteRegistration?.Invoke(machineButton.machine);
}
private void OnClickCorrectionButton(UI_LibraryButton machineButton)
{
onClickCorrection?.Invoke(machineButton.machine);
}
2025-02-20 09:59:37 +09:00
2025-07-22 18:12:37 +09:00
IEnumerator MoveAnimation(Vector2 targetPos)
2025-02-20 09:59:37 +09:00
{
float timer = 0f;
float percent = 0f;
while (percent < 1)
{
timer += Time.deltaTime;
percent = timer / fadeTime;
2025-07-22 18:12:37 +09:00
rectTransform.anchoredPosition = Vector2.Lerp(rectTransform.anchoredPosition, targetPos, percent);
2025-02-20 09:59:37 +09:00
yield return null;
}
}
}
}