Files
Studio/Assets/NewStudioJYM/Scripts/UI_DataSettingItem.cs

96 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
namespace Studio
{
public class UI_DataSettingItem : UIBase
{
public TMP_InputField InputField_ClassName;
private RectTransform ClassDataContent;
private List<UI_DataTypeSelectedItem> dataTypeSelectedItems = new List<UI_DataTypeSelectedItem>();
private UI_DataTypeSelectedItem dataTypeSelectedItem;
public Action onUpdateLayout;
public void SetData(DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
{
InputField_ClassName.text = data.name;
SetItem(data, typeItem, matchingItem);
}
public void SetData(string className, DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
{
InputField_ClassName.text = className;
SetItem(data, typeItem, matchingItem);
}
private void SetItem(DataClass data, UI_DataTypeSelectedItem typeItem, UI_MatchingTypeDataItem matchingItem)
{
dataTypeSelectedItems.Clear();
dataTypeSelectedItem = typeItem;
foreach (var field in data.fields)
{
var item = Instantiate(typeItem, ClassDataContent);
item.onAddMatchingData += UpdateLayoutAddMatchData;
item.onDestroyMatchingData += UpdateLayoutRemoveMatchData;
item.SetItem(field, matchingItem);
dataTypeSelectedItems.Add(item);
UpdateLayoutAddSettingData();
}
}
private void UpdateLayoutAddMatchData()
{
var height = rectTransform.sizeDelta;
height.y += dataTypeSelectedItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
UpdateLayout();
onUpdateLayout?.Invoke();
}
private void UpdateLayoutRemoveMatchData()
{
var height = rectTransform.sizeDelta;
height.y -= dataTypeSelectedItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
UpdateLayout();
onUpdateLayout?.Invoke();
}
private void UpdateLayoutAddSettingData()
{
var height = rectTransform.sizeDelta;
height.y += dataTypeSelectedItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
onUpdateLayout?.Invoke();
}
private void UpdateLayout()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(ClassDataContent);
}
public DataClass GetData()
{
var dataClass = new DataClass();
dataClass.name = InputField_ClassName.text;
dataClass.fields = new List<FieldData>();
foreach (var item in dataTypeSelectedItems)
{
var field = item.GetFieldData();
if (field != null)
{
dataClass.fields.Add(field);
}
}
return dataClass;
}
}
}