TabsController.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. public class TabsController : MonoBehaviour
  7. {
  8. VisualElement root;
  9. private void OnEnable()
  10. {
  11. UIDocument menu = GetComponent<UIDocument>();
  12. root = menu.rootVisualElement;
  13. GetAllTabButtons().ForEach(RegisterButtonCallbacks);
  14. }
  15. private void RegisterButtonCallbacks(Button b)
  16. {
  17. b.RegisterCallback<ClickEvent>(SetTabVisibleViaButton);
  18. }
  19. private void SetTabVisibleViaButton(ClickEvent evt)
  20. {
  21. Button b = evt.currentTarget as Button;
  22. VisualElement tabContent = GetAllTabContents().Where((VisualElement tabContent) => tabContent.name.Contains(b.name[..^3])).First();
  23. SetTabVisible(tabContent);
  24. }
  25. private void SetTabVisible(VisualElement tabToActivate)
  26. {
  27. UQueryBuilder<VisualElement> tabs = GetAllTabContents();
  28. tabs.Where((tab) => tab != tabToActivate).ForEach(t => t.style.display = DisplayStyle.None);
  29. tabToActivate.style.display = DisplayStyle.Flex;
  30. }
  31. private UQueryBuilder<VisualElement> GetAllTabContents()
  32. {
  33. return root.Query<VisualElement>(className: "tabContent");
  34. }
  35. private UQueryBuilder<Button> GetAllTabButtons()
  36. {
  37. return root.Query<Button>(className: "tabButton");
  38. }
  39. }