using System.Collections.Generic;
using TMPro;
using UnityEngine.XR.Interaction.Toolkit.Interactables;
namespace UnityEngine.XR.Interaction.Toolkit.Samples.VisionOS
{
///
/// Drop down component interactable. Used to represent a dropdown list.
///
public class DropdownComponent : XRBaseInteractable
{
[Header("Dropdown Component Config")]
[SerializeField]
GameObject m_RootGameObject;
[SerializeField]
TMP_Text m_CurrentSelectionText;
[SerializeField]
List m_DropDownElements = new List();
bool m_ShowingExpandedContent;
///
protected override void OnEnable()
{
base.OnEnable();
foreach (var element in m_DropDownElements)
{
element.selectEntered.AddListener(OnDrownDownSelectEntered);
}
SetShowExpandedContent(false);
}
///
protected override void OnDisable()
{
base.OnDisable();
foreach (var element in m_DropDownElements)
{
element.selectEntered.RemoveListener(OnDrownDownSelectEntered);
}
}
///
protected override void OnSelectExited(SelectExitEventArgs args)
{
base.OnSelectExited(args);
SetShowExpandedContent(true);
}
void OnDrownDownSelectEntered(SelectEnterEventArgs args)
{
SetShowExpandedContent(false);
SetSelectedElement((DropDownElement)args.interactableObject);
}
void SetSelectedElement(DropDownElement selectedElement)
{
m_CurrentSelectionText.text = selectedElement.dropDownText;
foreach (var element in m_DropDownElements)
{
element.SetSelected(element == selectedElement);
}
}
void SetShowExpandedContent(bool show)
{
m_ShowingExpandedContent = show;
m_RootGameObject.SetActive(m_ShowingExpandedContent);
}
}
}