ProjectDDD/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs
2025-07-08 19:46:31 +09:00

50 lines
2.1 KiB
C#

using UnityEditor;
using UnityEngine;
namespace SingularityGroup.HotReload.Editor {
internal class HotReloadOptionsSection {
/// <remarks>
/// Opening options tab does not automatically create the settings asset file.
/// - The Options UI shows defaults if the object asset doesn't exist.
/// - When a build starts, we also ensure the asset file exists.
/// </remarks>
public void DrawGUI(SerializedObject so) {
so.Update(); // must update in-case asset was modified externally
foreach (var option in HotReloadSettingsTab.allOptions) {
GUILayout.Space(4f);
DrawOption(option, so);
}
// commit any changes to the underlying ScriptableObject
if (so.hasModifiedProperties) {
so.ApplyModifiedProperties();
// Ensure asset file exists on disk, because we initially create it in memory (to provide the default values)
// This does not save the asset, user has to do that by saving assets in Unity (e.g. press hotkey Ctrl + S)
var target = so.targetObject as HotReloadSettingsObject;
if (target == null) {
Log.Warning("Unexpected problem unable to save HotReloadSettingsObject");
} else {
// when one of the project options changed then we ensure the asset file exists.
HotReloadSettingsEditor.EnsureSettingsCreated(target);
}
}
}
static void DrawOption(IOption option, SerializedObject so) {
EditorGUILayout.BeginVertical(HotReloadWindowStyles.BoxStyle);
var before = option.GetValue(so);
var after = EditorGUILayout.BeginToggleGroup(new GUIContent(" " + option.Summary), before);
if (after != before) {
option.SetValue(so, after);
}
option.InnerOnGUI(so);
EditorGUILayout.EndToggleGroup();
EditorGUILayout.EndVertical();
}
}
}