TabViewManager.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <copyright file="TabViewManager.cs" company="Exit Games GmbH">
  3. // Part of: PunCockpit
  4. // </copyright>
  5. // <summary>
  6. // Simple Management for Tabs, it requires a ToggleGroup, and then for each Tab, a Unique Name, the related Toggle and its associated RectTransform View
  7. // this manager handles Tab views activation and deactivation, and provides a Unity Event Callback when a tab was selected.
  8. // </summary>
  9. // <author>developer@exitgames.com</author>
  10. // --------------------------------------------------------------------------------------------------------------------
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using UnityEngine;
  15. using UnityEngine.UI;
  16. using UnityEngine.Events;
  17. namespace Photon.Pun.UtilityScripts
  18. {
  19. /// <summary>
  20. /// Tab view manager. Handles Tab views activation and deactivation, and provides a Unity Event Callback when a tab was selected.
  21. /// </summary>
  22. public class TabViewManager : MonoBehaviour
  23. {
  24. /// <summary>
  25. /// Tab change event.
  26. /// </summary>
  27. [System.Serializable]
  28. public class TabChangeEvent : UnityEvent<string> { }
  29. [Serializable]
  30. public class Tab
  31. {
  32. public string ID = "";
  33. public Toggle Toggle;
  34. public RectTransform View;
  35. }
  36. /// <summary>
  37. /// The toggle group component target.
  38. /// </summary>
  39. public ToggleGroup ToggleGroup;
  40. /// <summary>
  41. /// all the tabs for this group
  42. /// </summary>
  43. public Tab[] Tabs;
  44. /// <summary>
  45. /// The on tab changed Event.
  46. /// </summary>
  47. public TabChangeEvent OnTabChanged;
  48. protected Tab CurrentTab;
  49. Dictionary<Toggle, Tab> Tab_lut;
  50. void Start()
  51. {
  52. Tab_lut = new Dictionary<Toggle, Tab>();
  53. foreach (Tab _tab in this.Tabs)
  54. {
  55. Tab_lut[_tab.Toggle] = _tab;
  56. _tab.View.gameObject.SetActive(_tab.Toggle.isOn);
  57. if (_tab.Toggle.isOn)
  58. {
  59. CurrentTab = _tab;
  60. }
  61. _tab.Toggle.onValueChanged.AddListener((isSelected) =>
  62. {
  63. if (!isSelected)
  64. {
  65. return;
  66. }
  67. OnTabSelected(_tab);
  68. });
  69. }
  70. }
  71. /// <summary>
  72. /// Selects a given tab.
  73. /// </summary>
  74. /// <param name="id">Tab Id</param>
  75. public void SelectTab(string id)
  76. {
  77. foreach (Tab _t in Tabs)
  78. {
  79. if (_t.ID == id)
  80. {
  81. _t.Toggle.isOn = true;
  82. return;
  83. }
  84. }
  85. }
  86. /// <summary>
  87. /// final method for a tab selection routine
  88. /// </summary>
  89. /// <param name="tab">Tab.</param>
  90. void OnTabSelected(Tab tab)
  91. {
  92. CurrentTab.View.gameObject.SetActive(false);
  93. CurrentTab = Tab_lut[ToggleGroup.ActiveToggles().FirstOrDefault()];
  94. CurrentTab.View.gameObject.SetActive(true);
  95. OnTabChanged.Invoke(CurrentTab.ID);
  96. }
  97. }
  98. }