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(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(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(); } } }