using System.Linq; using JetBrains.Annotations; using UnityEngine; namespace JohnsonUtils.Common { public class SettingsSystem : PersistentSingleton { private const string SETTINGS_FOLDER_PATH = "Settings"; [PublicAPI] public static GameSettings GameSettings => Instance.GameSetting; private GameSettings _gameSetting; private GameSettings GameSetting => _gameSetting; protected override void Awake() { base.Awake(); LoadSettings(out _gameSetting); } [PublicAPI] private void LoadSettings(out T memberToInitialize) where T : ScriptableObject { T[] loadedSettingsList = Resources.LoadAll(SETTINGS_FOLDER_PATH); Debug.Assert(loadedSettingsList.Any(), $"An object of type {typeof(T).Name} should be in the folder {SETTINGS_FOLDER_PATH}"); if (loadedSettingsList.Length > 1) Debug.LogWarning( $"More than one object of type {typeof(T).Name} was found in the folder {SETTINGS_FOLDER_PATH}. Taking the first one."); memberToInitialize = loadedSettingsList.First(); } [PublicAPI] private void LoadAllSettings(out T[] memberToInitialize) where T : ScriptableObject { T[] loadedSettingsList = Resources.LoadAll(SETTINGS_FOLDER_PATH); Debug.Assert(loadedSettingsList.Any(), $"An object of type {typeof(T).Name} should be in the folder {SETTINGS_FOLDER_PATH}"); memberToInitialize = loadedSettingsList; } } }