mirror of
https://github.com/Siccity/xNode.git
synced 2026-03-26 22:49:02 +08:00
First attempt with RequireNodeAttribute
This commit is contained in:
parent
c2a99ba2b5
commit
262efc6905
42
Scripts/Editor/NodeGraphImporter.cs
Normal file
42
Scripts/Editor/NodeGraphImporter.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Experimental.AssetImporters;
|
||||
using UnityEngine;
|
||||
using XNode;
|
||||
|
||||
namespace XNodeEditor {
|
||||
/// <summary> Deals with modified assets </summary>
|
||||
class NodeGraphImporter : AssetPostprocessor {
|
||||
private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
|
||||
foreach (string path in importedAssets) {
|
||||
// Skip processing anything without the .asset extension
|
||||
if (Path.GetExtension(path) != ".asset") continue;
|
||||
|
||||
// Get the object that is requested for deletion
|
||||
NodeGraph graph = AssetDatabase.LoadAssetAtPath<NodeGraph>(path);
|
||||
if (graph == null) continue;
|
||||
|
||||
// Get attributes
|
||||
Type graphType = graph.GetType();
|
||||
NodeGraph.RequireNodeAttribute[] attribs = Array.ConvertAll(
|
||||
graphType.GetCustomAttributes(typeof(NodeGraph.RequireNodeAttribute), true), x => x as NodeGraph.RequireNodeAttribute);
|
||||
|
||||
|
||||
Vector2 position = Vector2.zero;
|
||||
foreach (NodeGraph.RequireNodeAttribute attrib in attribs) {
|
||||
if (attrib.type0 != null) {
|
||||
if (!graph.nodes.Any(x => x.GetType() == attrib.type0)) {
|
||||
XNode.Node node = graph.AddNode(attrib.type0);
|
||||
node.position = position;
|
||||
position.x += 200;
|
||||
if (node.name == null || node.name.Trim() == "") node.name = NodeEditorUtilities.NodeDefaultName(attrib.type0);
|
||||
if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(graph))) AssetDatabase.AddObjectToAsset(node, graph);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Scripts/Editor/NodeGraphImporter.cs.meta
Normal file
11
Scripts/Editor/NodeGraphImporter.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a816f2790bf3da48a2d6d0035ebc9a0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -81,5 +81,36 @@ namespace XNode {
|
||||
// Remove all nodes prior to graph destruction
|
||||
Clear();
|
||||
}
|
||||
|
||||
#region Attributes
|
||||
/// <summary> Automatically ensures the existance of a certain node type, and prevents it from being deleted. </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class RequireNodeAttribute : Attribute {
|
||||
public Type type0;
|
||||
public Type type1;
|
||||
public Type type2;
|
||||
|
||||
/// <summary> Automatically ensures the existance of a certain node type, and prevents it from being deleted </summary>
|
||||
public RequireNodeAttribute(Type type) {
|
||||
this.type0 = type;
|
||||
this.type1 = null;
|
||||
this.type2 = null;
|
||||
}
|
||||
|
||||
/// <summary> Automatically ensures the existance of a certain node type, and prevents it from being deleted </summary>
|
||||
public RequireNodeAttribute(Type type, Type type2) {
|
||||
this.type0 = type;
|
||||
this.type1 = type2;
|
||||
this.type2 = null;
|
||||
}
|
||||
|
||||
/// <summary> Automatically ensures the existance of a certain node type, and prevents it from being deleted </summary>
|
||||
public RequireNodeAttribute(Type type, Type type2, Type type3) {
|
||||
this.type0 = type;
|
||||
this.type1 = type2;
|
||||
this.type2 = type3;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user