using UnityEditor; using UnityEngine; namespace Gley.UrbanSystem.Editor { internal class SettingsLoader { private readonly string _path; internal SettingsLoader(string path) { _path = path; } internal T LoadSettingsAsset() where T : SettingsWindowData { T settingsWindowData = (T)AssetDatabase.LoadAssetAtPath(_path, typeof(T)); if (settingsWindowData == null) { SettingsWindowData asset = ScriptableObject.CreateInstance().Initialize(); string[] pathFolders = _path.Split('/'); string tempPath = pathFolders[0]; for (int i = 1; i < pathFolders.Length - 1; i++) { if (!AssetDatabase.IsValidFolder(tempPath + "/" + pathFolders[i])) { AssetDatabase.CreateFolder(tempPath, pathFolders[i]); AssetDatabase.Refresh(); } tempPath += "/" + pathFolders[i]; } AssetDatabase.CreateAsset(asset, _path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); settingsWindowData = (T)AssetDatabase.LoadAssetAtPath(_path, typeof(T)); } return settingsWindowData; } } }