92 lines
2.7 KiB
C#
92 lines
2.7 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
using Logger = Cryville.Common.Logger;
|
|
|
|
namespace Cryville.Crtr.Config {
|
|
public class ConfigPanelMaster : MonoBehaviour {
|
|
[SerializeField]
|
|
Menu m_menu;
|
|
|
|
[SerializeField]
|
|
Transform m_content;
|
|
|
|
[SerializeField]
|
|
SettingsPanel m_genericConfigPanel;
|
|
|
|
[SerializeField]
|
|
InputConfigPanel m_inputConfigPanel;
|
|
|
|
public Ruleset ruleset;
|
|
RulesetConfig _rscfg;
|
|
|
|
void OnEnable() {
|
|
try {
|
|
ChartPlayer.etor = new PdtEvaluator();
|
|
FileInfo file = new FileInfo(
|
|
Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset
|
|
);
|
|
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<Ruleset>(reader.ReadToEnd(), new JsonSerializerSettings() {
|
|
MissingMemberHandling = MissingMemberHandling.Error
|
|
});
|
|
if (ruleset.format != Ruleset.CURRENT_FORMAT) throw new FormatException("Invalid ruleset file version");
|
|
ruleset.LoadPdt(dir);
|
|
}
|
|
FileInfo cfgfile = new FileInfo(
|
|
Game.GameDataPath + "/config/rulesets/" + Settings.Default.LoadRulesetConfig
|
|
);
|
|
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.Target = _rscfg.generic;
|
|
|
|
var proxy = new InputProxy(ruleset.Root, null);
|
|
proxy.LoadFrom(_rscfg.inputs);
|
|
m_inputConfigPanel.proxy = proxy;
|
|
|
|
m_inputConfigPanel.OnConfigEnable();
|
|
}
|
|
catch (Exception ex) {
|
|
Popup.CreateException(ex);
|
|
Logger.Log("main", 4, "Config", "An error occured while loading the config: {0}", ex);
|
|
m_menu.Back();
|
|
}
|
|
}
|
|
|
|
public void SwitchCategory(GameObject cat) {
|
|
foreach (Transform c in m_content) {
|
|
c.gameObject.SetActive(false);
|
|
}
|
|
cat.SetActive(true);
|
|
}
|
|
|
|
void OnDisable() {
|
|
m_inputConfigPanel.proxy.SaveTo(_rscfg.inputs);
|
|
m_inputConfigPanel.proxy.Dispose();
|
|
FileInfo cfgfile = new FileInfo(
|
|
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();
|
|
}
|
|
}
|
|
}
|