From 945f9ca7d1b4c51a33d0085ce6458f8d95910dce Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 15 Nov 2022 17:27:51 +0800 Subject: [PATCH] Implement input config scene loading and saving. --- Assets/Config.unity | Bin 71669 -> 71957 bytes Assets/Cryville/Crtr/Config/ConfigScene.cs | 54 +++++++++++++++++- .../{InputConfig.cs => InputConfigPanel.cs} | 44 +++++--------- ...onfig.cs.meta => InputConfigPanel.cs.meta} | 0 ...onfigEntry.cs => InputConfigPanelEntry.cs} | 4 +- ....cs.meta => InputConfigPanelEntry.cs.meta} | 0 Assets/Cryville/Crtr/InputProxy.cs | 18 +++++- 7 files changed, 86 insertions(+), 34 deletions(-) rename Assets/Cryville/Crtr/Config/{InputConfig.cs => InputConfigPanel.cs} (56%) rename Assets/Cryville/Crtr/Config/{InputConfig.cs.meta => InputConfigPanel.cs.meta} (100%) rename Assets/Cryville/Crtr/Config/{InputConfigEntry.cs => InputConfigPanelEntry.cs} (80%) rename Assets/Cryville/Crtr/Config/{InputConfigEntry.cs.meta => InputConfigPanelEntry.cs.meta} (100%) diff --git a/Assets/Config.unity b/Assets/Config.unity index daa44faefd95c5b8d205419d9bf0168adbb756e5..bfe8b7a4d6c6b4a7d22e6c68b3d0b3e7a2eb809f 100644 GIT binary patch delta 2149 zcmZ9NZBUd|6vyxC60Z`QuFIkY6ex%qnAKJYY!ok&xr`VzfJ(HwOh}6ZrBfrj@+p)x;dg|vexL@2WN?xp}q*sP)#qqWXAN=ce0@jd6$3dXF|XH7eQ} zI*t}=pU`ZRGB%ONUV^1i=7;7J8&eGhWXjBpUk}M3JQS{cE~EU_j=gRBcC

oF!ua z?pD1U@;1+wm=7E;p1)%nuvB;kZhdeiHIfbAx0QX-uY*m>jv65Gj_T>_%5v%*GOu$u zx(*cQRCl<$yVUs|EgjBwp1r4E)1%dpiv$o&A- zUb0wiETN3T;$W*Kjgc2LkOB$iQCK{z_3mZG_h$-%x|cB%!VhC#r=;mL%`}yn5JzA< zFi>2c!~GbUE?cYz@8!1cdtTBkvV+d2sZ?9H=EwY8R`RG5bi}06&rtEY+az_O@Bb8ns0@qQSyQ&WUAC<5Q48Om&Q4tk%2+bSQfYS zJ6bF05KS}X>_yQ|G`XwnG46ZFbQLo{#BDtq-%A=HJLo|r6ZE{gbtn2Hj}A~LXqIx< zLTJ%AeJJo0(@7czbty5|>42nJG{!S4QPpELC}|-XzJPBY&m)8utHiok3HM`E1RBWa zw*FF*B~73f&`~9-`kuF>_CC#{W7H4oE8w=it5QiF6bAJxQN_1oi5h3Sq$9Kd>V8=D z)w2Ef;L@$E_$m9ErMjw6rCK!RBo#%f9zc}{o0ob(>UGfgaW6qEcbi@cWZ5vSO3EHd~L>N2wocx$LSJFTfv8?;;I@Rw>yc zL_Y}cWa`3g{-ua1S^)Kxa~m%J#<%%{q*auC-C`BbGSkm^?rO7>`!=ct^-HSVTC(S? zLidmtbgF_!>aTd2q(>Znqwc58DJ<87=QrRnRIYEiAycTg>dElAoYbr-Z1u#D1U zU8qD%>Zj1=Gp>@lkL+J!tr{MKFNQ$~GwS;#oup3CzHJIzjCsq<);Cy*&@ia$d6jBs zY?TzR9@OtpsrHp~O1dXx_^Nve1tP}KYd2DpjJ$t(Guj^dE!tjc{1$&m8jh^L=t(nl G$Nvi^hrVC{ delta 1996 zcmY+^e@xV690%~{_!08s=t$u>1fxPYD)dq-t?MAhsaxv@bL?dWXAhDqv%e7^;g&uQm*B@-XKi}v1-gkbt&z|S|c|Fhb z{eGY4`98-_C*1lfp(pFE(Z>Z}ChIM&6r-&}_A@nwQ}6b5OrL9htLU@5&kKqdb5{R* z;pB-9DC^V4O)KxC!@(!Y3iv)kdEZ)Xt#@+W=zCgeHo2kK zEK>F7R$eV$$(ej=gAQg${Tc;7*R9k`13dCFslzDlKx|WLr#Wb2rqpf}35YKaA1dTb zgv{SrZDUzn7or})FW9ftPNmR*l}(5j5&R0SaERDCvH zcKM1pI7h1fMXxB`M~l!&Z5@Tszi6k@4k`(uZ?5dCe^Ghi8@%I06?veR6;k!S zo0X1HH&om$)oT)hmun?WKgby`g`kmqt{ZDqq|`_AtoKOOzi76>^$2J7QQr3$`97&( z6ud^4m4?X;ZPj*yv9HGen0$=e2dE92t*x~X`fPmg=AicHP0|3gQJZr^dzEI>9FMHc zsxem|E47pP2lTb`Q-sjxD!Dqkk?$i^3Jnx<-S|^dl?rNs4r{Y&ymM*#;U~FugnFSp z4{+UhE2q*5nt=MXSrsBJPR{ctrGvBx^{$qE_1!){6u*@-ekuuDb6gIo`fS`#8g)=Z zILj7zNOCm_{+AaN3+fKzrPoN+hrV$=O&dBwA!yH9srt|hN-Jm{>R%^Sf9ab_2Py9y zUi#77M_zOE!)H0;CpR>Iy;S{ZSf_N1+MvD-xA)CB@Z1ZW!2CTTUSkVl@7}pPw$M<&k|}IL@M4OeiQwUm7AvL!AGt;kfrk&=` zTen1&b|JGAv7oeL3%8M{;4+js&d%5Q{+i04K%KvFxypBt`vPX5lH1_C$63OMY@Sjq zIkeraVQkr6`fKZc&J5E4wDuXP`bONL)IxJmUzJq-3~N$a6*T|2H!k?jPw6S|=f;`R lsDG-KTE`RUm)|VZ{9idm#+L*eFIt?m;gbCue}-vq(*FvdnDGDr diff --git a/Assets/Cryville/Crtr/Config/ConfigScene.cs b/Assets/Cryville/Crtr/Config/ConfigScene.cs index 507c11e..f560007 100644 --- a/Assets/Cryville/Crtr/Config/ConfigScene.cs +++ b/Assets/Cryville/Crtr/Config/ConfigScene.cs @@ -1,4 +1,8 @@ -using UnityEngine; +using Newtonsoft.Json; +using System.IO; +using System.Text; +using System; +using UnityEngine; using UnityEngine.SceneManagement; namespace Cryville.Crtr.Config { @@ -6,6 +10,45 @@ namespace Cryville.Crtr.Config { [SerializeField] Transform m_content; + [SerializeField] + InputConfigPanel m_inputConfigPanel; + + public Ruleset ruleset; + RulesetConfig _rscfg; + + void Awake() { + ChartPlayer.etor = new PdtEvaluator(); + FileInfo file = new FileInfo( + Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset + ); + 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 != 1) 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 + }); + } + } + var proxy = new InputProxy(ruleset.Root, null); + proxy.LoadFrom(_rscfg.inputs); + m_inputConfigPanel.proxy = proxy; + Game.InputManager.Activate(); + } + public void SwitchCategory(GameObject cat) { foreach (Transform c in m_content) { c.gameObject.SetActive(false); @@ -14,6 +57,15 @@ namespace Cryville.Crtr.Config { } public void ReturnToMenu() { + Game.InputManager.Deactivate(); + 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)); + } GameObject.Find("Master").GetComponent().ShowMenu(); #if UNITY_5_5_OR_NEWER SceneManager.UnloadSceneAsync("Config"); diff --git a/Assets/Cryville/Crtr/Config/InputConfig.cs b/Assets/Cryville/Crtr/Config/InputConfigPanel.cs similarity index 56% rename from Assets/Cryville/Crtr/Config/InputConfig.cs rename to Assets/Cryville/Crtr/Config/InputConfigPanel.cs index 8bb39e8..c94f1fa 100644 --- a/Assets/Cryville/Crtr/Config/InputConfig.cs +++ b/Assets/Cryville/Crtr/Config/InputConfigPanel.cs @@ -1,15 +1,14 @@ using Cryville.Common.Unity; using Cryville.Common.Unity.Input; -using Newtonsoft.Json; -using System; using System.Collections.Generic; -using System.IO; -using System.Text; using UnityEngine; using UnityEngine.UI; namespace Cryville.Crtr.Config { - public class InputConfig : MonoBehaviour { + public class InputConfigPanel : MonoBehaviour { + [SerializeField] + ConfigScene m_configScene; + [SerializeField] GameObject m_inputDialog; @@ -25,14 +24,13 @@ namespace Cryville.Crtr.Config { [SerializeField] GameObject m_prefabInputConfigEntry; - InputProxy _proxy; - Dictionary _entries = new Dictionary(); + public InputProxy proxy; + Dictionary _entries = new Dictionary(); string _sel; public void OpenDialog(string entry) { _sel = entry; m_inputDialog.SetActive(true); - Game.InputManager.Activate(); CallHelper.Purge(m_deviceList); _recvsrcs.Clear(); AddSourceItem(null); @@ -40,38 +38,24 @@ namespace Cryville.Crtr.Config { public void CloseDialog() { m_inputDialog.SetActive(false); - Game.InputManager.Deactivate(); } public void CloseDialog(InputSource? src) { - _proxy.Set(new InputProxyEntry { + proxy.Set(new InputProxyEntry { Target = _sel, Source = src, }); m_inputDialog.SetActive(false); - Game.InputManager.Deactivate(); } void Start() { - ChartPlayer.etor = new PdtEvaluator(); - FileInfo file = new FileInfo( - Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset - ); - DirectoryInfo dir = file.Directory; - using (StreamReader reader = new StreamReader(file.FullName, Encoding.UTF8)) { - var ruleset = JsonConvert.DeserializeObject(reader.ReadToEnd(), new JsonSerializerSettings() { - MissingMemberHandling = MissingMemberHandling.Error - }); - if (ruleset.format != 1) throw new FormatException("Invalid ruleset file version"); - ruleset.LoadPdt(dir); - _proxy = new InputProxy(ruleset.Root, null); - foreach (var i in ruleset.Root.inputs) { - var e = GameObject.Instantiate(m_prefabInputConfigEntry, m_entryList.transform).GetComponent(); - _entries.Add(i.Key, e); - e.SetKey(this, i.Key); - } - _proxy.ProxyChanged += OnProxyChanged; + foreach (var i in m_configScene.ruleset.Root.inputs) { + var e = GameObject.Instantiate(m_prefabInputConfigEntry, m_entryList.transform).GetComponent(); + _entries.Add(i.Key, e); + e.SetKey(this, i.Key); + OnProxyChanged(this, proxy[i.Key]); } + proxy.ProxyChanged += OnProxyChanged; } void OnProxyChanged(object sender, ProxyChangedEventArgs e) { @@ -94,7 +78,7 @@ namespace Cryville.Crtr.Config { var obj = Instantiate(m_prefabListItem, m_deviceList); obj.transform.Find("Text").GetComponent().text = src == null ? "None" : src.Value.Handler.GetTypeName(src.Value.Type); var btn = obj.GetComponent