From 8b29cd2893dd3d4483cd78b5d4c6e6d5943f5887 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 15 Nov 2022 12:10:34 +0800 Subject: [PATCH] Generalize settings panel. --- Assets/Cryville/Crtr/Menu.cs | 9 +++-- Assets/Cryville/Crtr/SettingsPanel.cs | 47 ++++++++++++++++---------- Assets/Menu.unity | Bin 133541 -> 133501 bytes 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Assets/Cryville/Crtr/Menu.cs b/Assets/Cryville/Crtr/Menu.cs index 088379c..f787d25 100644 --- a/Assets/Cryville/Crtr/Menu.cs +++ b/Assets/Cryville/Crtr/Menu.cs @@ -6,11 +6,13 @@ namespace Cryville.Crtr { public class Menu : MonoBehaviour { #pragma warning disable IDE0044 [SerializeField] - private ResourceBrowserMaster m_browserMaster; + ResourceBrowserMaster m_browserMaster; [SerializeField] - private Animator m_targetAnimator; + Animator m_targetAnimator; [SerializeField] - private ProgressBar m_progressBar; + ProgressBar m_progressBar; + [SerializeField] + SettingsPanel m_settingsPanel; #pragma warning restore IDE0044 bool initialized = false; @@ -19,6 +21,7 @@ namespace Cryville.Crtr { void Awake() { Game.Init(); transform.parent.Find("Canvas/Contents").gameObject.SetActive(true); + m_settingsPanel.Target = Settings.Default; } void Update() { if (!initialized) { diff --git a/Assets/Cryville/Crtr/SettingsPanel.cs b/Assets/Cryville/Crtr/SettingsPanel.cs index 443a3cf..396ed2f 100644 --- a/Assets/Cryville/Crtr/SettingsPanel.cs +++ b/Assets/Cryville/Crtr/SettingsPanel.cs @@ -7,30 +7,41 @@ using UnityEngine; namespace Cryville.Crtr { public class SettingsPanel : MonoBehaviour { [SerializeField] - private GameObject m_categoryPrefab; + GameObject m_categoryPrefab; - private Transform _container; + [SerializeField] + Transform m_container; -#pragma warning disable IDE0051 - void Awake() { - _container = transform.Find("Content/__content__"); - } - public void Start() { - LoadProperties(); - foreach (Transform c in _container) GameObject.Destroy(c.gameObject); - foreach (var c in _categories) { - var obj = GameObject.Instantiate(m_categoryPrefab); - obj.transform.SetParent(_container, false); - obj.GetComponent().Load(c.Key, c.Value, Settings.Default); + bool _invalidated = true; + object m_target; + public object Target { + get { + return m_target; + } + set { + if (m_target != value) { + m_target = value; + _invalidated = true; + } } } -#pragma warning restore IDE0051 - Dictionary> _categories = null; + public void Update() { + if (!_invalidated) return; + LoadProperties(); + foreach (Transform c in m_container) GameObject.Destroy(c.gameObject); + foreach (var c in _categories) { + var obj = GameObject.Instantiate(m_categoryPrefab, m_container, false); + obj.GetComponent().Load(c.Key, c.Value, Target); + } + } + + Dictionary> _categories = new Dictionary>(); public void LoadProperties() { - if (_categories != null) return; - _categories = new Dictionary>(); - foreach (var p in typeof(Settings).GetProperties()) { + _categories.Clear(); + _invalidated = false; + if (Target == null) return; + foreach (var p in Target.GetType().GetProperties()) { bool browsable = true; string category = "miscellaneous"; foreach (var attr in p.GetCustomAttributes(true)) { diff --git a/Assets/Menu.unity b/Assets/Menu.unity index 3d97a68d3d066920e983b1075bc2d26135777efc..b81e425a165d1692ff75af32b2c6096e712a1c09 100644 GIT binary patch delta 4069 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 HzuWykvDn`O