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 eventParameterItems = new List(); private UI_EventParameterItem eventParameterItem; private List comparisonOptions = new List { ">", "<", ">=", "<=", "==", "!=" }; private EventData eventData; private Dictionary> eventTypes = new Dictionary>(); 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; } } }