Files
Studio/Assets/NewStudioJYM/Scripts/UI_AddOtherDataItem.cs
2025-05-12 17:37:38 +09:00

112 lines
3.4 KiB
C#

using UnityEngine;
using TMPro;
using System.Collections.Generic;
using System;
using XRLib.UI;
using UnityEngine.UI;
namespace XED
{
public class UI_AddOtherDataItem : UIBase
{
private TMP_Dropdown Dropdown_ClassName;
private RectTransform ClassDataContent;
private Button Button_Delete;
private List<string> options = new List<string>();
public List<DataClass> datas = new List<DataClass>();
private DataClass currentDataClass;
private UI_AddOtherDataTypeItem addOtherDataTypeItem;
public List<UI_AddOtherDataTypeItem> addOtherDataTypeItems = new List<UI_AddOtherDataTypeItem>();
private RectTransform originRectTransform;
public Action onUpdateLayout;
public Action<UI_AddOtherDataItem> onDestory;
public void SetItem(List<DataClass> dataList, DataClass dataClass, UI_AddOtherDataTypeItem addOtherDataTypeItem)
{
currentDataClass = dataClass;
this.addOtherDataTypeItem = addOtherDataTypeItem;
originRectTransform = addOtherDataTypeItem.rectTransform;
Button_Delete.onClick.AddListener(OnClickDeleteButton);
options.Clear();
this.datas.Clear();
Dropdown_ClassName.ClearOptions();
for (int i = 0; i < dataList.Count; i++)
{
this.datas.Add(dataList[i]);
options.Add(dataList[i].name);
}
Dropdown_ClassName.AddOptions(options);
Dropdown_ClassName.onValueChanged.AddListener(OnValueChangedClassName);
var index = dataClass != null ? options.IndexOf(dataClass.name) : 0;
Dropdown_ClassName.SetValueWithoutNotify(index);
GenerateDatTypeItem(index);
}
private void OnClickDeleteButton()
{
onDestory?.Invoke(this);
}
private void OnValueChangedClassName(int index)
{
GenerateDatTypeItem(index);
}
private void GenerateDatTypeItem(int index)
{
rectTransform.sizeDelta = originRectTransform.sizeDelta;
foreach (var item in addOtherDataTypeItems)
Destroy(item.gameObject);
addOtherDataTypeItems.Clear();
if (currentDataClass == null)
{
currentDataClass = datas[index];
}
foreach (var field in currentDataClass.fields)
{
var item = Instantiate(addOtherDataTypeItem, ClassDataContent);
item.SetItem(field);
addOtherDataTypeItems.Add(item);
UpdateLayoutOnSettingDataAdded();
}
}
private void UpdateLayoutOnSettingDataAdded()
{
var height = rectTransform.sizeDelta;
height.y += addOtherDataTypeItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
onUpdateLayout?.Invoke();
}
public DataClass GetData()
{
var dataClass = new DataClass();
dataClass.name = Dropdown_ClassName.options[Dropdown_ClassName.value].text;
dataClass.fields = new List<FieldData>();
foreach (var item in addOtherDataTypeItems)
{
var field = item.GetFieldData();
if (field != null)
{
dataClass.fields.Add(field);
}
}
return dataClass;
}
}
}