166 lines
5.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|