Files
Studio/Assets/NewStudioJYM/Scripts/UI_ComparisonSettingItem.cs
2025-05-12 08:35:29 +09:00

166 lines
5.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using XRLib.UI;
using TMPro;
using UnityEngine.UI;
using System.Linq;
using System;
namespace XED
{
public class UI_ComparisonSettingItem : UIBase
{
private TMP_Dropdown Dropdown_Comparison;
private TMP_InputField InputField_Value;
private Button Button_EventTarget;
private TMP_Dropdown Dropdown_EventTarget;
private Button Button_AddParameters;
private RectTransform EventParametersContent;
private List<UI_EventParameterItem> eventParameterItems = new List<UI_EventParameterItem>();
private UI_EventParameterItem eventParameterItem;
private List<string> comparisonOptions = new List<string> { ">", "<", ">=", "<=", "==", "!=" };
private EventData eventData;
private Dictionary<string, List<string>> eventTypes = new Dictionary<string, List<string>>();
public Action onUpdateLayoutAddParameter;
public Action onUpdateLayoutRemoveParameter;
internal void SetItem(UI_EventParameterItem eventParameterItem, EventData eventData)
{
this.eventParameterItem = eventParameterItem;
this.eventData = eventData;
SetComparisonDropdown();
SetEventTargetDropdown(eventData);
Button_EventTarget.onClick.AddListener(OnClickEvnetTargetButton);
Button_AddParameters.onClick.AddListener(OnClickAddParametersButton);
eventParameterItems.Clear();
}
public void SetItem(ComparisonCondition loadData, UI_EventParameterItem eventParameterItem , EventData eventData)
{
this.eventParameterItem = eventParameterItem;
this.eventData = eventData;
SetComparisonDropdown();
SetEventTargetDropdown(eventData);
Button_EventTarget.onClick.AddListener(OnClickEvnetTargetButton);
Button_AddParameters.onClick.AddListener(OnClickAddParametersButton);
eventParameterItems.Clear();
for(int i = 0; i < Dropdown_Comparison.options.Count; i++)
{
if(Dropdown_Comparison.options[i].text == loadData.comparisonOperator)
{
Dropdown_Comparison.value = i;
}
}
InputField_Value.text = loadData.value;
for (int i = 0; i < Dropdown_EventTarget.options.Count; i++)
{
if (Dropdown_EventTarget.options[i].text == loadData.eventTarget)
{
Dropdown_EventTarget.value = i;
}
}
if (loadData.parameters.Count > 0)
{
foreach (var parameter in loadData.parameters)
{
var item = Instantiate(eventParameterItem, EventParametersContent);
item.SetItem(parameter, eventTypes);
eventParameterItems.Add(item);
if (eventParameterItems.Count > 1)
{
UpdateLayoutAddParameter();
}
}
}
}
private void SetComparisonDropdown()
{
Dropdown_Comparison.ClearOptions();
Dropdown_Comparison.AddOptions(comparisonOptions);
}
private void SetEventTargetDropdown(EventData eventData)
{
Dropdown_EventTarget.ClearOptions();
Dropdown_EventTarget.AddOptions(eventData.eventTargets.Keys.ToList());
Dropdown_EventTarget.onValueChanged.AddListener(OnEventTargetValueChanged);
OnEventTargetValueChanged(0);
}
private void OnEventTargetValueChanged(int index)
{
string selectedTarget = Dropdown_EventTarget.options[index].text;
if (!eventData.eventTargets.ContainsKey(selectedTarget))
return;
eventTypes = eventData.eventTargets[selectedTarget];
for(int i = 0; i < eventParameterItems.Count-1; i++)
{
UpdateLayoutRemoveParameter();
}
foreach (var eventParameterItem in eventParameterItems)
{
Destroy(eventParameterItem.gameObject);
}
eventParameterItems.Clear();
}
private void OnClickEvnetTargetButton()
{
Dropdown_EventTarget.Show();
}
private void OnClickAddParametersButton()
{
var item = Instantiate(eventParameterItem, EventParametersContent);
item.SetItem(eventTypes);
eventParameterItems.Add(item);
if (eventParameterItems.Count > 1)
{
UpdateLayoutAddParameter();
}
}
private void UpdateLayoutAddParameter()
{
var height = rectTransform.sizeDelta;
height.y += eventParameterItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
onUpdateLayoutAddParameter?.Invoke();
}
private void UpdateLayoutRemoveParameter()
{
var height = rectTransform.sizeDelta;
height.y -= eventParameterItem.rectTransform.rect.height;
rectTransform.sizeDelta = height;
onUpdateLayoutRemoveParameter?.Invoke();
}
public ComparisonCondition GetComparisonData()
{
var comparisonCondition = new ComparisonCondition();
comparisonCondition.comparisonOperator = Dropdown_Comparison.options[Dropdown_Comparison.value].text;
comparisonCondition.value = InputField_Value.text;
comparisonCondition.eventTarget = Dropdown_EventTarget.options[Dropdown_EventTarget.value].text;
foreach (var item in eventParameterItems)
{
var parameters = item.GetParametersData();
comparisonCondition.parameters.Add(parameters);
}
return comparisonCondition;
}
}
}