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

58 lines
2.0 KiB
C#

using UnityEditor;
namespace SingularityGroup.HotReload.Editor {
/// <summary>
/// An option stored inside the current Unity project.
/// </summary>
internal abstract class ProjectOptionBase : IOption, ISerializedProjectOption {
public abstract string ShortSummary { get; }
public abstract string Summary { get; }
public virtual bool GetValue(SerializedObject so) {
return so.FindProperty(ObjectPropertyName).boolValue;
}
protected SerializedProperty GetProperty(SerializedObject so) {
return so.FindProperty(ObjectPropertyName);
}
public virtual void SetValue(SerializedObject so, bool value) {
so.FindProperty(ObjectPropertyName).boolValue = value;
}
public virtual void InnerOnGUI(SerializedObject so) { }
public abstract string ObjectPropertyName { get; }
/// <remarks>
/// Override this if your option is not needed for on-device Hot Reload to work.<br/>
/// (by default, a project option must be true for Hot Reload to work)
/// </remarks>
public virtual bool IsRequiredForBuild() {
return true;
}
}
/// <summary>
/// An option that is stored on the user's computer (shared between Unity projects).
/// </summary>
internal abstract class ComputerOptionBase : IOption {
public abstract string ShortSummary { get; }
public abstract string Summary { get; }
public abstract bool GetValue();
/// Uses <see cref="HotReloadPrefs"/> for storing the value on the user's computer.
public virtual void SetValue(bool value) { }
public bool GetValue(SerializedObject so) => GetValue();
public virtual void SetValue(SerializedObject so, bool value) => SetValue(value);
void IOption.InnerOnGUI(SerializedObject so) {
InnerOnGUI();
}
public virtual void InnerOnGUI() { }
}
}