Restructure resource browsers.

This commit is contained in:
2023-11-23 00:50:37 +08:00
parent d7a38416aa
commit 54f75781f3
5 changed files with 51 additions and 43 deletions

View File

@@ -19,26 +19,16 @@ namespace Cryville.Crtr.Browsing.UI {
[SerializeField] [SerializeField]
TMP_Text m_desc; TMP_Text m_desc;
ResourceBrowserMaster _master;
int _id;
ChartDetail _data; ChartDetail _data;
void Awake() {
_master = GetComponentInParent<ResourceBrowserMaster>();
}
void OnDestroy() { void OnDestroy() {
if (_data.Cover != null) _data.Cover.Cancel(); DestroyDynamicResources();
if (m_cover.sprite != null && m_cover.sprite != m_coverPlaceholder) {
Destroy(m_cover.sprite.texture);
Destroy(m_cover.sprite);
}
} }
public void Load(int id, ChartDetail data) {
_id = id; public void Load(ChartDetail data) {
m_placeholder.SetActive(false); m_placeholder.SetActive(false);
m_content.SetActive(true); m_content.SetActive(true);
OnDestroy(); DestroyDynamicResources();
_data = data; _data = data;
m_cover.sprite = m_coverPlaceholder; m_cover.sprite = m_coverPlaceholder;
if (data.Cover != null) data.Cover.Destination = DisplayCover; if (data.Cover != null) data.Cover.Destination = DisplayCover;
@@ -56,16 +46,18 @@ namespace Cryville.Crtr.Browsing.UI {
m_desc.text = string.Empty; m_desc.text = string.Empty;
} }
} }
private void DisplayCover(bool succeeded, Texture2D tex) { void DisplayCover(bool succeeded, Texture2D tex) {
if (succeeded) { if (succeeded) {
m_cover.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero, 160, 0, SpriteMeshType.FullRect); m_cover.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero, 160, 0, SpriteMeshType.FullRect);
} }
} }
public void OnPlay() {
_master.Open(_id, _data); void DestroyDynamicResources() {
} if (_data.Cover != null) _data.Cover.Cancel();
public void OnConfig() { if (m_cover.sprite != null && m_cover.sprite != m_coverPlaceholder) {
_master.OpenConfig(_id, _data); Destroy(m_cover.sprite.texture);
Destroy(m_cover.sprite);
}
} }
} }
} }

View File

@@ -3,7 +3,11 @@ using Cryville.Common.Unity.UI;
using Cryville.Crtr.UI; using Cryville.Crtr.UI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq;
using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing.UI { namespace Cryville.Crtr.Browsing.UI {
public class PathedResourceBrowser : ResourceBrowser { public class PathedResourceBrowser : ResourceBrowser {
@@ -14,7 +18,7 @@ namespace Cryville.Crtr.Browsing.UI {
[SerializeField] [SerializeField]
GameObject m_actionBar; GameObject m_actionBar;
public IPathedResourceManager<ChartDetail> ResourceManager; IPathedResourceManager<ChartDetail> _manager;
readonly HashSet<int> _selectedItems = new HashSet<int>(); readonly HashSet<int> _selectedItems = new HashSet<int>();
readonly Dictionary<int, BrowserItem> _items = new Dictionary<int, BrowserItem>(); readonly Dictionary<int, BrowserItem> _items = new Dictionary<int, BrowserItem>();
@@ -24,36 +28,48 @@ namespace Cryville.Crtr.Browsing.UI {
protected virtual void Start() { protected virtual void Start() {
m_itemContainer.LoadItem = LoadItem; m_itemContainer.LoadItem = LoadItem;
ResourceManager.ItemChanged += OnItemChanged;
ResourceManager.ChangeDirectory(new string[] { "" });
InitDialog(); InitDialog();
} }
void OnDestroy() {
UnregisterManager();
}
void UnregisterManager() {
_manager.ItemChanged -= OnItemChanged;
_manager.DirectoryChanged -= OnDirectoryChanged;
}
void OnEnable() { void OnEnable() {
ResourceManager.Activate(); _manager.Activate();
} }
void OnDisable() { void OnDisable() {
ResourceManager.Deactivate(); _manager.Deactivate();
} }
[Obsolete] public void Init(ResourceBrowserMaster master, IPathedResourceManager<ChartDetail> manager) {
protected void InitDialog() { if (_manager != null) {
_dialog = Instantiate(Resources.Load<GameObject>("Common/FileDialog")).GetComponent<FileDialog>(); UnregisterManager();
_dialog.gameObject.SetActive(false); }
_dialog.Filter = ResourceManager.GetSupportedFormats(); Init(master);
_dialog.PresetPaths = ResourceManager.GetPresetPaths(); _manager = manager;
_dialog.OnClose += OnAddDialogClosed; _manager.ItemChanged += OnItemChanged;
_manager.DirectoryChanged += OnDirectoryChanged;
OnItemChanged();
OnDirectoryChanged();
} }
bool _itemChanged; bool _itemChanged;
void OnItemChanged() { _itemChanged = true; } void OnItemChanged() {
_itemChanged = true;
}
void OnDirectoryChanged() {
}
void Update() { void Update() {
if (_itemChanged) { if (_itemChanged) {
_itemChanged = false; _itemChanged = false;
_selectedItems.Clear(); _selectedItems.Clear();
_items.Clear(); _items.Clear();
m_itemContainer.ItemCount = ResourceManager.Count; m_itemContainer.ItemCount = _manager.Count;
} }
} }
@@ -61,7 +77,7 @@ namespace Cryville.Crtr.Browsing.UI {
var bi = obj.GetComponent<BrowserItem>(); var bi = obj.GetComponent<BrowserItem>();
_items[id] = bi; _items[id] = bi;
try { try {
var item = ResourceManager[id]; var item = _manager[id];
bi.Load(id, item, _selectedItems.Contains(id)); bi.Load(id, item, _selectedItems.Contains(id));
} }
catch (Exception) { catch (Exception) {
@@ -71,7 +87,7 @@ namespace Cryville.Crtr.Browsing.UI {
} }
public virtual void OnDirectoryItemClicked(int id) { public virtual void OnDirectoryItemClicked(int id) {
ResourceManager.OpenDirectory(id); _manager.OpenDirectory(id);
} }
public void OnObjectItemClicked(int id) { public void OnObjectItemClicked(int id) {
@@ -79,12 +95,12 @@ namespace Cryville.Crtr.Browsing.UI {
_selectedItems.Clear(); _selectedItems.Clear();
_items[id].OnSelect(); _items[id].OnSelect();
_selectedItems.Add(id); _selectedItems.Add(id);
m_detailPanel.Load(id, ResourceManager[id]); m_detailPanel.Load(_manager[id]);
m_actionBar.SetActive(true); m_actionBar.SetActive(true);
} }
public void OnPathClicked(int index) { public void OnPathClicked(int index) {
ResourceManager.ReturnToDirectory(index); _manager.ReturnToDirectory(index);
} }
[Obsolete] [Obsolete]

View File

@@ -7,8 +7,8 @@ namespace Cryville.Crtr.Browsing.UI {
public Sprite Icon { get { return m_icon; } } public Sprite Icon { get { return m_icon; } }
protected ResourceBrowserMaster Master { get; private set; } protected ResourceBrowserMaster Master { get; private set; }
protected virtual void Awake() { protected void Init(ResourceBrowserMaster master) {
Master = GetComponentInParent<ResourceBrowserMaster>(); Master = master;
} }
} }
} }

View File

@@ -24,6 +24,7 @@ namespace Cryville.Crtr.Browsing.UI {
void Awake() { void Awake() {
m_mainBrowser.ResourceManager = new LegacyResourceManager(Settings.Default.GameDataPath); m_mainBrowser.ResourceManager = new LegacyResourceManager(Settings.Default.GameDataPath);
OnTabClicked(AddTab("Local", m_mainBrowser)); OnTabClicked(AddTab("Local", m_mainBrowser));
m_mainBrowser.Init(this, new LegacyResourceManager(Settings.Default.GameDataPath));
AddTab("Settings", m_settingsBrowser); AddTab("Settings", m_settingsBrowser);
} }

View File

@@ -3,8 +3,7 @@ using Cryville.Crtr.Config.UI;
namespace Cryville.Crtr.Browsing.UI { namespace Cryville.Crtr.Browsing.UI {
internal class SettingsBrowser : ResourceBrowser { internal class SettingsBrowser : ResourceBrowser {
protected override void Awake() { protected virtual void Awake() {
base.Awake();
GetComponent<PropertyMasterPanel>().Adapter = new DefaultPropertyMasterAdapter(Settings.Default); GetComponent<PropertyMasterPanel>().Adapter = new DefaultPropertyMasterAdapter(Settings.Default);
} }
} }