1
0
mirror of https://github.com/Siccity/xNode.git synced 2025-12-20 09:16:01 +08:00
xNode/Scripts/Editor/NodeGraphImporter.cs
2023-10-05 20:10:15 +01:00

77 lines
2.5 KiB
C#

using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using XNode;
namespace XNodeEditor
{
/// <summary> Deals with modified assets </summary>
internal 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();
var 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)
{
AddRequired(graph, attrib.type0, ref position);
}
if (attrib.type1 != null)
{
AddRequired(graph, attrib.type1, ref position);
}
if (attrib.type2 != null)
{
AddRequired(graph, attrib.type2, ref position);
}
}
}
}
private static void AddRequired(NodeGraph graph, Type type, ref Vector2 position)
{
if (!graph.nodes.Any(x => x.GetType() == type))
{
Node node = graph.AddNode(type);
node.position = position;
position.x += 200;
if (node.name == null || node.name.Trim() == "")
{
node.name = NodeEditorUtilities.NodeDefaultName(type);
}
if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(graph)))
{
AssetDatabase.AddObjectToAsset(node, graph);
}
}
}
}
}