123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // --------------------------------------------------------------------------------------------------------------------
- // <copyright file="TabViewManager.cs" company="Exit Games GmbH">
- // Part of: PunCockpit
- // </copyright>
- // <summary>
- // Simple Management for Tabs, it requires a ToggleGroup, and then for each Tab, a Unique Name, the related Toggle and its associated RectTransform View
- // this manager handles Tab views activation and deactivation, and provides a Unity Event Callback when a tab was selected.
- // </summary>
- // <author>developer@exitgames.com</author>
- // --------------------------------------------------------------------------------------------------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.Events;
- namespace Photon.Pun.UtilityScripts
- {
- /// <summary>
- /// Tab view manager. Handles Tab views activation and deactivation, and provides a Unity Event Callback when a tab was selected.
- /// </summary>
- public class TabViewManager : MonoBehaviour
- {
- /// <summary>
- /// Tab change event.
- /// </summary>
- [System.Serializable]
- public class TabChangeEvent : UnityEvent<string> { }
- [Serializable]
- public class Tab
- {
- public string ID = "";
- public Toggle Toggle;
- public RectTransform View;
- }
- /// <summary>
- /// The toggle group component target.
- /// </summary>
- public ToggleGroup ToggleGroup;
- /// <summary>
- /// all the tabs for this group
- /// </summary>
- public Tab[] Tabs;
- /// <summary>
- /// The on tab changed Event.
- /// </summary>
- public TabChangeEvent OnTabChanged;
- protected Tab CurrentTab;
- Dictionary<Toggle, Tab> Tab_lut;
- void Start()
- {
- Tab_lut = new Dictionary<Toggle, Tab>();
- foreach (Tab _tab in this.Tabs)
- {
- Tab_lut[_tab.Toggle] = _tab;
- _tab.View.gameObject.SetActive(_tab.Toggle.isOn);
- if (_tab.Toggle.isOn)
- {
- CurrentTab = _tab;
- }
- _tab.Toggle.onValueChanged.AddListener((isSelected) =>
- {
- if (!isSelected)
- {
- return;
- }
- OnTabSelected(_tab);
- });
- }
- }
- /// <summary>
- /// Selects a given tab.
- /// </summary>
- /// <param name="id">Tab Id</param>
- public void SelectTab(string id)
- {
- foreach (Tab _t in Tabs)
- {
- if (_t.ID == id)
- {
- _t.Toggle.isOn = true;
- return;
- }
- }
- }
- /// <summary>
- /// final method for a tab selection routine
- /// </summary>
- /// <param name="tab">Tab.</param>
- void OnTabSelected(Tab tab)
- {
- CurrentTab.View.gameObject.SetActive(false);
- CurrentTab = Tab_lut[ToggleGroup.ActiveToggles().FirstOrDefault()];
- CurrentTab.View.gameObject.SetActive(true);
- OnTabChanged.Invoke(CurrentTab.ID);
- }
- }
- }
|