public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { var settings = ProjectUtility.GetOrCreateProjectSettings <ActionGraphGlobalSettings>(); var actionSchema = ProjectUtility.GetOrCreateProjectAsset <ActionSchema>(); var fieldOperationSchema = ProjectUtility.GetOrCreateProjectAsset <FieldOperationSchema>(); foreach (var path in importedAssets.Where(importedAsset => importedAsset.EndsWith($".{ActionGraphGlobalSettings.Extension}"))) { var importer = AssetImporter.GetAtPath(path); var userData = importer.userData; string artifactFile; if (string.IsNullOrWhiteSpace(userData)) { artifactFile = settings.CreateArtifactPath(); } else { artifactFile = AssetDatabase.GUIDToAssetPath(userData); if (string.IsNullOrEmpty(artifactFile)) { artifactFile = settings.CreateArtifactPath(); } } var actionAsset = AssetDatabase.LoadAssetAtPath <ActionAsset>(path); var actionDefinitionAsset = ActionDefinitionAsset.Load(actionAsset.actionId); if (actionDefinitionAsset?.delegateType.IsCreated == true) { var guid = (string)typeof(ActionGraphSerializer).GetMethod(nameof(ActionGraphSerializer.WriteArtifact), System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) .MakeGenericMethod(actionDefinitionAsset.delegateType) .Invoke(null, new object[] { artifactFile, actionSchema, fieldOperationSchema, actionAsset, actionDefinitionAsset }); if (guid != importer.userData) { importer.userData = guid; importer.SaveAndReimport(); } } else { AssetDatabase.DeleteAsset(artifactFile); } } foreach (var path in deletedAssets.Where(deletedAsset => deletedAsset.EndsWith($".{ActionGraphGlobalSettings.Extension}"))) { var userData = AssetImporter.GetAtPath(path).userData; if (!string.IsNullOrWhiteSpace(userData)) { var artifactPath = AssetDatabase.GUIDToAssetPath(userData); if (!string.IsNullOrEmpty(artifactPath)) { AssetDatabase.DeleteAsset(artifactPath); } } } AssetDatabase.Refresh(); }
public override VisualElement CreateInspectorGUI() { var rootElement = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(Uxml).CloneTree(); var openButton = rootElement.Q <Button>("open"); openButton.clicked += () => { if (serializedObject?.targetObject is ActionAsset asset) { ActionGraphWindow.ShowWindow(asset); } }; openButton.SetEnabled(((ActionAsset)serializedObject.targetObject).actionId.IsCreated); var id = rootElement.Q <ActionIdField>("id"); if (settings != null) { if (serializedObject.targetObject is ActionAsset actionAsset) { try { id.value = actionAsset.actionId; } catch (Exception) { Debug.LogError($"Error setting Action Id. Consider Reimporting {AssetDatabase.GetAssetPath(actionAsset)}"); } } id.RegisterValueChangedCallback(evt => { var previousInfo = evt.previousValue.IsCreated ? ActionDefinitionAsset.Load(evt.previousValue) : null; var self = (ActionIdField)evt.target; var newInfo = evt.newValue.IsCreated ? ActionDefinitionAsset.Load(evt.previousValue) : null; var asset = (ActionAsset)serializedObject.targetObject; var model = asset.CreateModel(); bool retainNodes = false; if (previousInfo == null || model.nodes.Count == 0 || ConfirmActionTypeChange(previousInfo, newInfo, out retainNodes)) { model.id = evt.newValue; if (!retainNodes) { model.nodes.Clear(); model.masterNodeLayout = default; } asset.UpdateAsset(model); openButton.SetEnabled(evt.newValue.IsCreated); } else { self.SetValueWithoutNotify(evt.previousValue); } }); } return(rootElement); }
public override VisualElement CreatePropertyGUI(SerializedProperty property) { var field = new ActionAssetField(); var attr = fieldInfo.GetCustomAttribute <ActionTypeAttribute>(); var settings = ProjectUtility.GetProjectAsset <ActionGraphGlobalSettings>(); if (attr != null && ActionDefinitionAsset.Load(attr.type, out var info)) { field.ActionId = info.id; } field.Label = property.displayName; field.BindProperty(property); return(field); }
private string FormatCell(ActionId actionId) { if (settings == null) { return(ActionId.UnknownActionName); } if (!actionId.IsCreated) { return(ActionId.NullActionName); } if (ActionDefinitionAsset.Load(actionId, out var info)) { return(info.Name); } else { return(ActionId.UnknownActionName); } }