public static void GenerateStaticCollectionScript(ScriptableObjectCollection collection) { string fileName = $"{collection.GetCollectionType().Name}Static"; bool isGeneratingCustomStaticFile = ScriptableObjectCollectionSettings.Instance.IsGeneratingCustomStaticFile(collection); if (isGeneratingCustomStaticFile) { fileName = ScriptableObjectCollectionSettings.Instance.GetGeneratedStaticFileName(collection); } string nameSpace = collection.GetCollectionType().Namespace; string finalFolder = ScriptableObjectCollectionSettings.Instance.GetStaticFileFolderForCollection(collection); if (string.IsNullOrEmpty(finalFolder)) { Debug.LogError("Static Code Generation folder not assigned, please assign it on the ScriptableObjectCollectionSettings"); EditorGUIUtility.PingObject(ScriptableObjectCollectionSettings.Instance); Selection.objects = new Object[] { ScriptableObjectCollectionSettings.Instance }; return; } AssetDatabaseUtils.CreatePathIfDontExist(finalFolder); using (StreamWriter writer = new StreamWriter(Path.Combine(finalFolder, $"{fileName}.cs"))) { int indentation = 0; List <string> directives = new List <string>(); directives.Add(typeof(CollectionsRegistry).Namespace); directives.Add(collection.GetType().Namespace); directives.AddRange(GetCollectionDirectives(collection)); if (!isGeneratingCustomStaticFile) { AppendHeader(writer, ref indentation, nameSpace, "", collection.GetCollectionType().Name, true, false, directives.Distinct().ToArray()); } else { AppendHeader(writer, ref indentation, nameSpace, "", fileName, false, false, directives.Distinct().ToArray()); } GeneratedStaticFileType staticFileTypeForCollection = ScriptableObjectCollectionSettings.Instance.GetStaticFileTypeForCollection(collection); if (staticFileTypeForCollection == GeneratedStaticFileType.DirectAccess) { WriteDirectAccessCollectionStatic(collection, writer, ref indentation); } else { WriteTryGetAccessCollectionStatic(collection, writer, ref indentation); } indentation--; AppendFooter(writer, ref indentation, nameSpace); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
private void DrawSettings(ScriptableObjectCollection collection) { using (new GUILayout.VerticalScope("Box")) { EditorGUI.indentLevel++; showSettings = EditorGUILayout.Foldout(showSettings, "Settings", true); EditorGUI.indentLevel--; if (showSettings) { EditorGUI.indentLevel++; using (EditorGUI.ChangeCheckScope changeCheck = new EditorGUI.ChangeCheckScope()) { bool isAutomaticallyLoaded = EditorGUILayout.ToggleLeft("Automatically Loaded", ScriptableObjectCollectionSettings.Instance.IsCollectionAutomaticallyLoaded( collection)); if (changeCheck.changed) { ScriptableObjectCollectionSettings.Instance.SetCollectionAutomaticallyLoaded( collection, isAutomaticallyLoaded); } } using (EditorGUI.ChangeCheckScope changeCheck = new EditorGUI.ChangeCheckScope()) { GeneratedStaticFileType staticCodeGeneratorType = (GeneratedStaticFileType)EditorGUILayout.EnumPopup("Static File Generator Type", ScriptableObjectCollectionSettings.Instance.GetStaticFileTypeForCollection( collection)); if (changeCheck.changed) { ScriptableObjectCollectionSettings.Instance.SetStaticFileGeneratorTypeForCollection( collection, staticCodeGeneratorType); } } bool overwriteStaticFileLocation = false; using (EditorGUI.ChangeCheckScope changeCheck = new EditorGUI.ChangeCheckScope()) { overwriteStaticFileLocation = EditorGUILayout.ToggleLeft( "Overwrite Static File Location", ScriptableObjectCollectionSettings.Instance.IsOverridingStaticFileLocation(collection)); if (changeCheck.changed) { ScriptableObjectCollectionSettings.Instance.SetOverridingStaticFileLocation( collection, overwriteStaticFileLocation); } } if (overwriteStaticFileLocation) { DefaultAsset targetFolder = AssetDatabase.LoadAssetAtPath <DefaultAsset>( ScriptableObjectCollectionSettings.Instance.GetStaticFileFolderForCollection( collection)); using (EditorGUI.ChangeCheckScope changeCheck = new EditorGUI.ChangeCheckScope()) { targetFolder = (DefaultAsset)EditorGUILayout.ObjectField("Target Folder", targetFolder, typeof(DefaultAsset), false); if (changeCheck.changed) { ScriptableObjectCollectionSettings.Instance.SetStaticFileFolderForCollection( collection, AssetDatabase.GetAssetPath(targetFolder)); } } } EditorGUI.indentLevel--; } } }
public void SetStaticFileGeneratorTypeForCollection(ScriptableObjectCollection targetCollection, GeneratedStaticFileType staticCodeGeneratorType) { CollectionToSettings settings = GetOrCreateSettingsForCollection(targetCollection); settings.generatedStaticFileGeneratorType = staticCodeGeneratorType; ObjectUtility.SetDirty(this); }