using System; using System.Diagnostics.CodeAnalysis; using UnityEngine.Assertions; namespace PrefsGUI { /// /// Combination of PrefsParams /// [Obsolete("PrefsSet is obsolete, consider using PrefsAny instead.")] [SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Global")] public abstract class PrefsSet where TPrefs0 : PrefsParamOuter where TPrefs1 : PrefsParamOuter { public readonly string key; public readonly string[] paramNames; public TPrefs0 prefs0; public TPrefs1 prefs1; protected virtual string GenerateParamKey(string keyString, string paramName) => $"{keyString}_{paramName}"; protected PrefsSet(string key, TOuter0 default0, TOuter1 default1, string paramName0, string paramName1) { this.key = key; prefs0 = Construct(key, paramName0, default0); prefs1 = Construct(key, paramName1, default1); paramNames = new[] {paramName0, paramName1}; } TPrefs Construct(string keyString, string postfix, TOuter defaultValue) { var ctor = typeof(TPrefs).GetConstructor(new[] { typeof(string), typeof(TOuter) }); Assert.IsNotNull(ctor); return (TPrefs)ctor.Invoke(new object[] { GenerateParamKey(keyString, postfix), defaultValue }); } } }