Implement ruleset config browser.
This commit is contained in:
@@ -1,13 +1,10 @@
|
||||
using Cryville.Common.Unity;
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using Cryville.Crtr.Config.UI;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
public class ResourceBrowserMaster : SingletonBehaviour<ResourceBrowserMaster> {
|
||||
[SerializeField]
|
||||
ConfigPanelMaster m_configPanel;
|
||||
[SerializeField]
|
||||
Transform m_tabContainer;
|
||||
[SerializeField]
|
||||
@@ -15,10 +12,13 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
[SerializeField]
|
||||
Transform m_browserContainer;
|
||||
[SerializeField]
|
||||
GameObject m_pathedBrowserPrefab;
|
||||
[SerializeField]
|
||||
SettingsBrowser m_settingsBrowser;
|
||||
|
||||
[SerializeField]
|
||||
internal GameObject m_pathedBrowserPrefab;
|
||||
[SerializeField]
|
||||
internal GameObject m_configBrowserPrefab;
|
||||
|
||||
BrowserTab _currentTab;
|
||||
readonly Dictionary<BrowserTab, ResourceBrowser> _tabs = new Dictionary<BrowserTab, ResourceBrowser>();
|
||||
|
||||
@@ -30,22 +30,24 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
Actions = new ActionManager();
|
||||
Actions.Changed += OnActionsChanged;
|
||||
Actions.Register(new PlayChartAction());
|
||||
Actions.Register(new OpenConfigAction());
|
||||
|
||||
OnTabClicked(AddPathedBrowserTab("Local", new LegacyResourceManager(Settings.Default.GameDataPath)));
|
||||
AddPathedBrowserTab("Files", new FileSystemResourceManager());
|
||||
AddTab("Settings", m_settingsBrowser);
|
||||
AddTab("Settings", m_settingsBrowser, _tabs.Count, false);
|
||||
}
|
||||
|
||||
BrowserTab AddPathedBrowserTab(string name, IPathedResourceManager<IResourceMeta> manager) {
|
||||
var browser = Instantiate(m_pathedBrowserPrefab, m_browserContainer, false).GetComponent<PathedResourceBrowser>();
|
||||
browser.Init(this, manager);
|
||||
return AddTab(name, browser);
|
||||
return AddTab(name, browser, _tabs.Count, false);
|
||||
}
|
||||
|
||||
BrowserTab AddTab(string name, ResourceBrowser browser) {
|
||||
BrowserTab AddTab(string name, ResourceBrowser browser, int index, bool closable) {
|
||||
var tab = Instantiate(m_tabPrefab, m_tabContainer, false).GetComponent<BrowserTab>();
|
||||
tab.transform.SetSiblingIndex(index);
|
||||
tab.Icon = browser.Icon;
|
||||
tab.Text = name;
|
||||
tab.Closable = closable;
|
||||
tab.Clicked += OnTabClicked;
|
||||
tab.Closed += OnTabClosed;
|
||||
browser.gameObject.SetActive(false);
|
||||
@@ -53,6 +55,11 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
return tab;
|
||||
}
|
||||
|
||||
public void AddAndOpenTab(string name, ResourceBrowser browser) {
|
||||
browser.transform.SetParent(m_browserContainer, false);
|
||||
OnTabClicked(AddTab(name, browser, _currentTab.transform.GetSiblingIndex() + 1, true));
|
||||
}
|
||||
|
||||
void OnTabClicked(BrowserTab tab) {
|
||||
if (tab == _currentTab) return;
|
||||
if (_currentTab != null) {
|
||||
|
97
Assets/Cryville/Crtr/Browsing/UI/RulesetConfigBrowser.cs
Normal file
97
Assets/Cryville/Crtr/Browsing/UI/RulesetConfigBrowser.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using Cryville.Crtr.Config;
|
||||
using Cryville.Crtr.Config.UI;
|
||||
using Cryville.Crtr.Ruleset;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
internal class RulesetConfigBrowser : ResourceBrowser {
|
||||
[SerializeField]
|
||||
Transform m_content;
|
||||
|
||||
[SerializeField]
|
||||
PropertyMasterPanel m_genericConfigPanel;
|
||||
|
||||
[SerializeField]
|
||||
PropertyMasterPanel m_rulesetConfigPanel;
|
||||
|
||||
[SerializeField]
|
||||
InputConfigPanel m_inputConfigPanel;
|
||||
|
||||
public RulesetDefinition ruleset;
|
||||
RulesetConfig _rscfg;
|
||||
|
||||
bool _loaded;
|
||||
|
||||
public void Load(string rulesetName) {
|
||||
FileInfo file = new FileInfo(Path.Combine(
|
||||
Game.GameDataPath, "rulesets", rulesetName, ".umgr"
|
||||
));
|
||||
if (!file.Exists) {
|
||||
throw new FileNotFoundException("Ruleset for the chart not found\nMake sure you have imported the ruleset");
|
||||
}
|
||||
DirectoryInfo dir = file.Directory;
|
||||
using (StreamReader reader = new StreamReader(file.FullName, Encoding.UTF8)) {
|
||||
ruleset = JsonConvert.DeserializeObject<RulesetDefinition>(reader.ReadToEnd(), new JsonSerializerSettings() {
|
||||
MissingMemberHandling = MissingMemberHandling.Error
|
||||
});
|
||||
if (ruleset.format != RulesetDefinition.CURRENT_FORMAT) throw new FormatException("Invalid ruleset file version");
|
||||
ruleset.LoadPdt(dir);
|
||||
}
|
||||
FileInfo cfgfile = new FileInfo(Path.Combine(
|
||||
Game.GameDataPath, "config", "rulesets", rulesetName + ".json"
|
||||
));
|
||||
if (!cfgfile.Exists) {
|
||||
if (!cfgfile.Directory.Exists) cfgfile.Directory.Create();
|
||||
_rscfg = new RulesetConfig();
|
||||
}
|
||||
else {
|
||||
using (StreamReader cfgreader = new StreamReader(cfgfile.FullName, Encoding.UTF8)) {
|
||||
_rscfg = JsonConvert.DeserializeObject<RulesetConfig>(cfgreader.ReadToEnd(), new JsonSerializerSettings() {
|
||||
MissingMemberHandling = MissingMemberHandling.Error
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
m_genericConfigPanel.Adapter = new DefaultPropertyMasterAdapter(_rscfg.generic);
|
||||
m_rulesetConfigPanel.Adapter = new RulesetConfigPropertyMasterAdapter(ruleset.Root.configs, _rscfg.configs);
|
||||
|
||||
//var proxy = new InputProxy(ruleset.Root, null, new Vector2(Screen.width, Screen.height));
|
||||
//proxy.LoadFrom(_rscfg.inputs);
|
||||
//m_inputConfigPanel.proxy = proxy;
|
||||
|
||||
//m_inputConfigPanel.OnConfigEnable();
|
||||
|
||||
_loaded = true;
|
||||
}
|
||||
|
||||
public void SwitchCategory(GameObject cat) {
|
||||
foreach (Transform c in m_content) {
|
||||
c.gameObject.SetActive(false);
|
||||
}
|
||||
cat.SetActive(true);
|
||||
}
|
||||
|
||||
void OnDisable() {
|
||||
if (_loaded) {
|
||||
//m_inputConfigPanel.proxy.SaveTo(_rscfg.inputs);
|
||||
//m_inputConfigPanel.proxy.Dispose();
|
||||
//FileInfo cfgfile = new FileInfo(Path.Combine(
|
||||
// Game.GameDataPath, "config", "rulesets", Settings.Default.LoadRulesetConfig
|
||||
//));
|
||||
//using (StreamWriter cfgwriter = new StreamWriter(cfgfile.FullName, false, Encoding.UTF8)) {
|
||||
// cfgwriter.Write(JsonConvert.SerializeObject(_rscfg, Game.GlobalJsonSerializerSettings));
|
||||
//}
|
||||
//m_inputConfigPanel.OnConfigDisable();
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnItemClicked(int index) { }
|
||||
public override void InvokeAction(IResourceAction action) { }
|
||||
internal override void OnActionsChanged() { }
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5924b4578abdaa9408c725b603d53cc9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user