private void AddNewItem() { List <Type> collectableSubclasses = TypeUtility.GetAllSubclasses(collection.GetCollectionType(), true); if (collectableSubclasses.Count == 0) { EditorApplication.delayCall += () => { AddNewItemOfType(collection.GetCollectionType()); }; } else { GenericMenu optionsMenu = new GenericMenu(); AddMenuOption(optionsMenu, collection.GetCollectionType().Name, () => { EditorApplication.delayCall += () => { AddNewItemOfType(collection.GetCollectionType()); }; }); for (int i = 0; i < collectableSubclasses.Count; i++) { Type collectableSubClass = collectableSubclasses[i]; AddMenuOption(optionsMenu, collectableSubClass.Name, () => { EditorApplication.delayCall += () => { AddNewItemOfType(collectableSubClass); }; }); } optionsMenu.ShowAsContext(); } }
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(); }
public string GetGeneratedStaticFileName(ScriptableObjectCollection collection) { if (!TryGetSettingsForCollection(collection, out CollectionToSettings settings)) { return(collection.GetCollectionType().Name); } if (string.IsNullOrEmpty(settings.customStaticFileName)) { return(collection.GetCollectionType().Name); } return(settings.customStaticFileName); }
public bool TryGetCollectionFromCollectableType(Type targetType, out ScriptableObjectCollection scriptableObjectCollection) { for (int i = 0; i < collections.Count; i++) { ScriptableObjectCollection collection = collections[i]; if (collection.GetCollectionType() == targetType || targetType.BaseType == collection.GetCollectionType()) { scriptableObjectCollection = collection; return(true); } } scriptableObjectCollection = null; return(false); }
protected override AdvancedDropdownItem BuildRoot() { Type collectableType = collection.GetCollectionType(); AdvancedDropdownItem root = new AdvancedDropdownItem(collectableType.Name); root.AddChild(new AdvancedDropdownItem("None")); for (int i = 0; i < collection.Count; i++) { CollectableScriptableObject collectionItem = collection[i]; if (collectionItem.GetType() == collectableType) { root.AddChild(new CollectableDropdownItem(collectionItem)); } else { AdvancedDropdownItem parent = GetOrCreateDropdownItemForType(root, collectionItem); parent.AddChild(new CollectableDropdownItem(collectionItem)); } } return(root); }