From b7f5dbc4daa2fa81230da72fff3a3d9376d4e365 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 19 Dec 2023 15:23:40 +0800 Subject: [PATCH] Pull up `IChartDetail`. --- .../Crtr/Browsing/Actions/ActionManager.cs | 6 +++++- .../Crtr/Browsing/Actions/OpenConfigAction.cs | 6 +++--- .../Crtr/Browsing/Actions/PlayChartAction.cs | 10 +++++----- Assets/Cryville/Crtr/Browsing/IChartDetail.cs | 10 ++++++++++ .../Crtr/Browsing/IChartDetail.cs.meta | 11 +++++++++++ Assets/Cryville/Crtr/Browsing/Legacy.meta | 8 ++++++++ .../LegacyChartDetail.cs} | 19 ++++++++++++------- .../LegacyChartDetail.cs.meta} | 0 .../{ => Legacy}/LegacyResourceManager.cs | 8 ++++---- .../LegacyResourceManager.cs.meta | 0 .../Crtr/Browsing/UI/ResourceBrowserMaster.cs | 1 + 11 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 Assets/Cryville/Crtr/Browsing/IChartDetail.cs create mode 100644 Assets/Cryville/Crtr/Browsing/IChartDetail.cs.meta create mode 100644 Assets/Cryville/Crtr/Browsing/Legacy.meta rename Assets/Cryville/Crtr/Browsing/{ChartDetail.cs => Legacy/LegacyChartDetail.cs} (53%) rename Assets/Cryville/Crtr/Browsing/{ChartDetail.cs.meta => Legacy/LegacyChartDetail.cs.meta} (100%) rename Assets/Cryville/Crtr/Browsing/{ => Legacy}/LegacyResourceManager.cs (98%) rename Assets/Cryville/Crtr/Browsing/{ => Legacy}/LegacyResourceManager.cs.meta (100%) diff --git a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs index 4b8a9b5..f3cae1f 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs @@ -46,12 +46,16 @@ namespace Cryville.Crtr.Browsing.Actions { } public IEnumerable GetActions(Type type) { + if (type == null) return Enumerable.Empty(); List actions; if (!_actions.TryGetValue(type, out actions)) { actions = new List(); } IEnumerable result = actions; - if (type != typeof(object)) result = result.Concat(GetActions(type.BaseType)); + if (type != typeof(object)) + result = result + .Concat(GetActions(type.BaseType)) + .Concat(type.GetInterfaces().SelectMany(i => GetActions(i))); return result; } } diff --git a/Assets/Cryville/Crtr/Browsing/Actions/OpenConfigAction.cs b/Assets/Cryville/Crtr/Browsing/Actions/OpenConfigAction.cs index 237ba84..b81acd4 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/OpenConfigAction.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/OpenConfigAction.cs @@ -5,16 +5,16 @@ using System.Collections.Generic; using Object = UnityEngine.Object; namespace Cryville.Crtr.Browsing.Actions { - internal class OpenConfigAction : ResourceAction { + internal class OpenConfigAction : ResourceAction { public override string Name { get { return "Config"; } } public override int Priority { get { return -50; } } static readonly Dictionary _rulesetTabs = new Dictionary(); - public override void Invoke(Uri uri, ChartDetail resource) { + public override void Invoke(Uri uri, IChartDetail resource) { var master = ResourceBrowserMaster.Instance; - var ruleset = resource.Meta.ruleset; + var ruleset = resource.RulesetId; int tabId; if (_rulesetTabs.TryGetValue(ruleset, out tabId) && master.TryOpenTab(tabId)) return; diff --git a/Assets/Cryville/Crtr/Browsing/Actions/PlayChartAction.cs b/Assets/Cryville/Crtr/Browsing/Actions/PlayChartAction.cs index 5435501..87dc8a0 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/PlayChartAction.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/PlayChartAction.cs @@ -4,13 +4,13 @@ using System.IO; using UnityEngine.SceneManagement; namespace Cryville.Crtr.Browsing.Actions { - internal class PlayChartAction : ResourceAction { + internal class PlayChartAction : ResourceAction { public override string Name { get { return "Play"; } } public override int Priority { get { return -100; } } - public override void Invoke(Uri uri, ChartDetail resource) { - Settings.Default.LoadRuleset = Path.Combine(resource.Meta.ruleset, ".umgr"); - Settings.Default.LoadRulesetConfig = resource.Meta.ruleset + ".json"; + public override void Invoke(Uri uri, IChartDetail resource) { + Settings.Default.LoadRuleset = Path.Combine(resource.RulesetId, ".umgr"); + Settings.Default.LoadRulesetConfig = resource.RulesetId + ".json"; Settings.Default.LoadChart = uri.LocalPath; #if UNITY_5_3_OR_NEWER SceneManager.LoadScene("Play", LoadSceneMode.Additive); @@ -19,7 +19,7 @@ namespace Cryville.Crtr.Browsing.Actions { #endif Master.Instance.HideMenu(); #if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN - DiscordController.Instance.SetPlaying(string.Format("{0} - {1}", resource.Meta.song.name, resource.Meta.name), resource.Meta.length); + DiscordController.Instance.SetPlaying(string.Format("{0} - {1}", resource.SongName, resource.Name), resource.Length.TotalSeconds); #endif } } diff --git a/Assets/Cryville/Crtr/Browsing/IChartDetail.cs b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs new file mode 100644 index 0000000..efa9314 --- /dev/null +++ b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs @@ -0,0 +1,10 @@ +using System; + +namespace Cryville.Crtr.Browsing { + internal interface IChartDetail { + string RulesetId { get; } + string Name { get; } + string SongName { get; } + TimeSpan Length { get; } + } +} diff --git a/Assets/Cryville/Crtr/Browsing/IChartDetail.cs.meta b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs.meta new file mode 100644 index 0000000..3e7d252 --- /dev/null +++ b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 117e1aa46a380524096d0b6bea97c3d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Crtr/Browsing/Legacy.meta b/Assets/Cryville/Crtr/Browsing/Legacy.meta new file mode 100644 index 0000000..420fdee --- /dev/null +++ b/Assets/Cryville/Crtr/Browsing/Legacy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee929ca432bd0ff41bee174081ef16df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Crtr/Browsing/ChartDetail.cs b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs similarity index 53% rename from Assets/Cryville/Crtr/Browsing/ChartDetail.cs rename to Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs index 9481b48..ae8bf63 100644 --- a/Assets/Cryville/Crtr/Browsing/ChartDetail.cs +++ b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs @@ -4,24 +4,29 @@ using System; using System.Collections.Generic; using UnityEngine; -namespace Cryville.Crtr.Browsing { - public class ChartDetail : IResourceMeta { +namespace Cryville.Crtr.Browsing.Legacy { + public class LegacyChartDetail : IChartDetail, IResourceMeta { public AsyncDelivery Cover { get; set; } public ChartMeta Meta { get; set; } + public string RulesetId { get { return Meta.ruleset; } } + public string Name { get { return Meta.name; } } + public string SongName { get { return Meta.song.name; } } + public TimeSpan Length { get { return TimeSpan.FromSeconds(Meta.length); } } + public IEnumerable Properties { get { if (Meta == null) yield break; yield return new MetaProperty("Name", new Dictionary { - { "", string.Format("{0} - {1}", Meta.song.name, Meta.name) }, - { "short", Meta.name }, - { "distinct-primary", Meta.song.name }, - { "distinct-secondary", Meta.name }, + { "", string.Format("{0} - {1}", SongName, Name) }, + { "short", Name }, + { "distinct-primary", SongName }, + { "distinct-secondary", Name }, }); yield return new MetaProperty("Image", Cover); yield return new MetaProperty("Song.Author", Meta.song.author); yield return new MetaProperty("Author", Meta.author); - yield return new MetaProperty("Length", TimeSpan.FromSeconds(Meta.length)); + yield return new MetaProperty("Length", Length); yield return new MetaProperty("NoteCount", Meta.note_count); } } diff --git a/Assets/Cryville/Crtr/Browsing/ChartDetail.cs.meta b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs.meta similarity index 100% rename from Assets/Cryville/Crtr/Browsing/ChartDetail.cs.meta rename to Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs.meta diff --git a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyResourceManager.cs similarity index 98% rename from Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs rename to Assets/Cryville/Crtr/Browsing/Legacy/LegacyResourceManager.cs index 71ce10a..5419a08 100644 --- a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs +++ b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyResourceManager.cs @@ -11,8 +11,8 @@ using System.IO; using System.Linq; using UnityEngine; -namespace Cryville.Crtr.Browsing { - internal class LegacyResourceManager : IPathedResourceManager { +namespace Cryville.Crtr.Browsing.Legacy { + internal class LegacyResourceManager : IPathedResourceManager { readonly string _rootPath; DirectoryInfo _cd; readonly FileSystemWatcher _watcher = new FileSystemWatcher(); @@ -98,7 +98,7 @@ namespace Cryville.Crtr.Browsing { ItemChanged?.Invoke(); } - public ChartDetail this[int index] { + public LegacyChartDetail this[int index] { get { var item = _filteredItems[index]; ChartMeta meta = null; @@ -118,7 +118,7 @@ namespace Cryville.Crtr.Browsing { } } } - return new ChartDetail { + return new LegacyChartDetail { Cover = cover, Meta = meta, }; diff --git a/Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs.meta b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyResourceManager.cs.meta similarity index 100% rename from Assets/Cryville/Crtr/Browsing/LegacyResourceManager.cs.meta rename to Assets/Cryville/Crtr/Browsing/Legacy/LegacyResourceManager.cs.meta diff --git a/Assets/Cryville/Crtr/Browsing/UI/ResourceBrowserMaster.cs b/Assets/Cryville/Crtr/Browsing/UI/ResourceBrowserMaster.cs index 2bbd7bc..2bdf016 100644 --- a/Assets/Cryville/Crtr/Browsing/UI/ResourceBrowserMaster.cs +++ b/Assets/Cryville/Crtr/Browsing/UI/ResourceBrowserMaster.cs @@ -1,5 +1,6 @@ using Cryville.Common.Unity; using Cryville.Crtr.Browsing.Actions; +using Cryville.Crtr.Browsing.Legacy; using System.Collections.Generic; using UnityEngine;