Files
crtr/Assets/Cryville/Crtr/Browsing/Actions/OpenConfigAction.cs
2023-12-25 14:26:27 +08:00

49 lines
1.6 KiB
C#

using Cryville.Crtr.Browsing.UI;
using Cryville.Crtr.Config;
using Cryville.Crtr.UI;
using System;
using System.Collections.Generic;
using Object = UnityEngine.Object;
namespace Cryville.Crtr.Browsing.Actions {
internal class OpenConfigAction : ResourceAction<IChartDetail> {
public override string Name { get { return "Config"; } }
public override int Priority { get { return -50; } }
static readonly Dictionary<string, int> _rulesetTabs = new Dictionary<string, int>();
public override bool CanInvoke(Uri uri, IChartDetail resource) {
return true;
}
public override void Invoke(Uri uri, IChartDetail resource) {
Invoke(resource.RulesetId);
}
public static bool HasTab(string ruleset) {
int tabId;
var master = ResourceBrowserMaster.Instance;
if (master == null) return false;
return _rulesetTabs.TryGetValue(ruleset, out tabId) && master.HasTab(tabId);
}
public static void Invoke(string ruleset, Action<RulesetConfig> overrides = null) {
var master = ResourceBrowserMaster.Instance;
int tabId;
if (_rulesetTabs.TryGetValue(ruleset, out tabId) && master.TryOpenTab(tabId))
return;
var browser = Object.Instantiate(master.m_configBrowserPrefab).GetComponent<RulesetConfigBrowser>();
try {
browser.Load(ruleset, overrides);
}
catch (Exception ex) {
Dialog.Show(null, ex.Message);
Game.MainLogger.Log(4, "Config", "An error occurred while loading the config: {0}", ex);
Object.Destroy(browser.gameObject);
return;
}
_rulesetTabs[ruleset] = master.AddAndOpenTab(string.Format("Config: {0}", ruleset), browser);
browser.InitAction();
}
}
}