112 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|