Implement browser tabs.

This commit is contained in:
2023-11-11 11:54:52 +08:00
parent c05b771425
commit 166478e4bb
5 changed files with 64 additions and 588 deletions

View File

@@ -1,13 +1,31 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing.UI {
[RequireComponent(typeof(BrowserTabLayout))]
[RequireComponent(typeof(CanvasGroup))]
internal class BrowserTab : MonoBehaviour, IPointerClickHandler {
[SerializeField]
Image m_icon;
[SerializeField]
TextMeshProUGUI m_text;
[SerializeField]
float m_deselectedAlpha = 0.6f;
public event Action<BrowserTab> Clicked;
public Sprite Icon {
get { return m_icon.sprite; }
set { m_icon.sprite = value; }
}
public string Text {
get { return m_text.text; }
set { m_text.text = value; }
}
bool m_selected;
public bool Selected {
get { return m_selected; }
@@ -31,7 +49,7 @@ namespace Cryville.Crtr.Browsing.UI {
}
public void OnPointerClick(PointerEventData eventData) {
throw new System.NotImplementedException();
Clicked?.Invoke(this);
}
}
}

View File

@@ -2,6 +2,10 @@ using UnityEngine;
namespace Cryville.Crtr.Browsing.UI {
public abstract class ResourceBrowser : MonoBehaviour {
[SerializeField]
Sprite m_icon;
public Sprite Icon { get { return m_icon; } }
protected ResourceBrowserMaster Master { get; private set; }
protected virtual void Awake() {
Master = GetComponentInParent<ResourceBrowserMaster>();

View File

@@ -8,22 +8,48 @@ using UnityEngine.UI;
namespace Cryville.Crtr.Browsing.UI {
public class ResourceBrowserMaster : MonoBehaviour {
[SerializeField]
private Button m_playButton;
Button m_playButton;
[SerializeField]
private Button m_configButton;
Button m_configButton;
[SerializeField]
private ConfigPanelMaster m_configPanel;
ConfigPanelMaster m_configPanel;
[SerializeField]
private PathedResourceBrowser m_mainBrowser;
Transform m_tabContainer;
[SerializeField]
private DetailPanel m_detailPanel;
GameObject m_tabPrefab;
[SerializeField]
PathedResourceBrowser m_mainBrowser;
[SerializeField]
DetailPanel m_detailPanel;
readonly List<ResourceBrowser> _units = new List<ResourceBrowser>();
BrowserTab _currentTab;
readonly Dictionary<BrowserTab, ResourceBrowser> _tabs = new Dictionary<BrowserTab, ResourceBrowser>();
void Awake() {
m_mainBrowser.ResourceManager = new LegacyResourceManager(Settings.Default.GameDataPath);
_units.Add(m_mainBrowser);
// _units.Add(m_detailPanel);
OnTabClicked(AddTab("Local", m_mainBrowser));
}
BrowserTab AddTab(string name, ResourceBrowser browser) {
var tab = Instantiate(m_tabPrefab, m_tabContainer, false).GetComponent<BrowserTab>();
tab.Icon = browser.Icon;
tab.Text = name;
tab.Clicked += OnTabClicked;
_tabs.Add(tab, browser);
return tab;
}
void OnTabClicked(BrowserTab tab) {
if (tab == _currentTab) return;
if (_currentTab != null) {
_currentTab.Selected = false;
_tabs[_currentTab].gameObject.SetActive(false);
}
_currentTab = tab;
if (_currentTab != null) {
_currentTab.Selected = true;
_tabs[_currentTab].gameObject.SetActive(true);
}
}
public void ShowDetail(int id, ChartDetail detail) {