using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; namespace Jovian.Logger { internal sealed class LoggerSettingsProvider : SettingsProvider { public LoggerSettingsProvider(string path, SettingsScope scopes, IEnumerable keywords = null) : base(path, scopes, keywords) { } public const string SETTINGS_FILE = "Assets/Settings/Resources/logger-settings.asset"; [SettingsProvider] public static SettingsProvider CreateSettingsProvider() { var provider = new SettingsProvider("Project/Jovian/Logger", SettingsScope.Project) { guiHandler = (searchContext) => { LoggerSettingsEditor.ShowSettings(); } }; return provider; } private class ConfigLoader : AssetPostprocessor { private static AssetSettingsLoader loader; private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { loader ??= new AssetSettingsLoader(); loader.GetSettings(SETTINGS_FILE); } } } public class AssetSettingsLoader where T : ScriptableObject { private T settings; /// /// Get the settings file if cached/existent. If it doesn't exist, it will create one. /// /// /// public T GetSettings(string settingsFilePath) { return settings ?? SetSettings(settingsFilePath); } private T SetSettings(string settingsFilePath) { if(!Directory.Exists(Path.GetDirectoryName(settingsFilePath))) { Directory.CreateDirectory(Path.GetDirectoryName(settingsFilePath)); } settings = AssetDatabase.LoadAssetAtPath(settingsFilePath); if(settings != null) { return settings; } settings = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(settings, settingsFilePath); AssetDatabase.SaveAssets(); settings = AssetDatabase.LoadAssetAtPath(settingsFilePath); return settings; } } }