|
|
|
|
// --------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
// <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);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|