Files
ChunilENG/Assets/Scripts/UI/Panel_Library.cs
2025-04-14 16:52:44 +09:00

158 lines
4.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using WI;
using TMPro;
using SFB;
//using static UnityEditor.Progress;
namespace CHN
{
public class Panel_Library : PanelBase, ISingle
{
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<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;
public Action<Machine> onClickLibraryButton;
public Action<string> onClickLibraryOpenButton;
public Action<string> onClickLibraryCloseButton;
public Vector3 originPos;
public Vector3 downPos;
public float fadeTime;
public bool isActive;
public override void AfterAwake()
{
prf_LibraryButton = Resources.Load<UI_LibraryButton>("Prefabs/UI/PRF_UI_LibraryButton");
prf_FilterToggle = Resources.Load<UI_FilterButton>("Prefabs/UI/PRF_UI_FilterButton");
Button_Active.onClick.AddListener(OnClickActiveButton);
originPos = rectTransform.position;
downPos = new Vector3(originPos.x, originPos.y - rectTransform.rect.height, originPos.z);
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)
{
onClickLibraryOpenButton?.Invoke("¶óÀ̺귯¸®");
}
else
{
onClickLibraryCloseButton?.Invoke("¶óÀ̺귯¸®");
}
}
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<Machine> machines)
{
ScrollView_MachineList.Clear();
List<Machine> sortedMachines = new List<Machine>(machines);
sortedMachines.Sort((x, y) => x.code.CompareTo(y.code));
foreach (var machine in sortedMachines)
{
var machineButton = Instantiate(prf_LibraryButton, ScrollView_MachineList.content);
machineButton.SettingButton(machine);
machineButton.onClickButton += OnClickLibraryButton;
}
}
private void OnClickLibraryButton(UI_LibraryButton machineButton)
{
onClickLibraryButton?.Invoke(machineButton.machine);
}
IEnumerator MoveAnimation(Vector3 targetPos)
{
float timer = 0f;
float percent = 0f;
while (percent < 1)
{
timer += Time.deltaTime;
percent = timer / fadeTime;
rectTransform.position = Vector3.Lerp(rectTransform.position, targetPos, percent);
yield return null;
}
}
}
}