mirror of
https://github.com/Siccity/xNode.git
synced 2026-02-04 22:34:54 +08:00
Can now save NodeGraph as asset via NodeGraphAsset
This commit is contained in:
parent
72cd983f7b
commit
3c206b03df
BIN
Examples/NewNodeGraph.asset
Normal file
BIN
Examples/NewNodeGraph.asset
Normal file
Binary file not shown.
9
Examples/NewNodeGraph.asset.meta
Normal file
9
Examples/NewNodeGraph.asset.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1452552e49747df45b25f74d307c25b6
|
||||||
|
timeCreated: 1506021986
|
||||||
|
licenseType: Free
|
||||||
|
NativeFormatImporter:
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -32,12 +32,11 @@ public partial class NodeEditorWindow {
|
|||||||
|
|
||||||
public void FileContextMenu() {
|
public void FileContextMenu() {
|
||||||
GenericMenu contextMenu = new GenericMenu();
|
GenericMenu contextMenu = new GenericMenu();
|
||||||
contextMenu.AddItem(new GUIContent("Create New"), false, null);
|
contextMenu.AddItem(new GUIContent("Create New"), false, New);
|
||||||
contextMenu.AddItem(new GUIContent("Load"), false, Load);
|
|
||||||
|
|
||||||
contextMenu.AddSeparator("");
|
contextMenu.AddSeparator("");
|
||||||
contextMenu.AddItem(new GUIContent("Save"), false, Save);
|
contextMenu.AddItem(new GUIContent("Save"), false, Save);
|
||||||
contextMenu.AddItem(new GUIContent("Save As"), false, null);
|
contextMenu.AddItem(new GUIContent("Save As"), false, SaveAs);
|
||||||
|
|
||||||
contextMenu.DropDown(new Rect(5f, 17f, 0f, 0f));
|
contextMenu.DropDown(new Rect(5f, 17f, 0f, 0f));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,39 +2,61 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using UnityEditor.Callbacks;
|
||||||
|
|
||||||
[InitializeOnLoad]
|
[InitializeOnLoad]
|
||||||
public partial class NodeEditorWindow : EditorWindow {
|
public partial class NodeEditorWindow : EditorWindow {
|
||||||
|
|
||||||
string saved;
|
|
||||||
|
|
||||||
public Dictionary<NodePort, Vector2> portConnectionPoints { get { return _portConnectionPoints; } }
|
public Dictionary<NodePort, Vector2> portConnectionPoints { get { return _portConnectionPoints; } }
|
||||||
private Dictionary<NodePort, Vector2> _portConnectionPoints = new Dictionary<NodePort, Vector2>();
|
private Dictionary<NodePort, Vector2> _portConnectionPoints = new Dictionary<NodePort, Vector2>();
|
||||||
private Dictionary<NodePort, Rect> portRects = new Dictionary<NodePort, Rect>();
|
private Dictionary<NodePort, Rect> portRects = new Dictionary<NodePort, Rect>();
|
||||||
|
public NodeGraphAsset graphAsset;
|
||||||
public NodeGraph graph { get { return _graph != null ? _graph : _graph = new NodeGraph(); } }
|
public NodeGraph graph { get { return _graph != null ? _graph : _graph = new NodeGraph(); } }
|
||||||
public NodeGraph _graph;
|
public NodeGraph _graph;
|
||||||
public Vector2 panOffset { get { return _panOffset; } set { _panOffset = value; Repaint(); } }
|
public Vector2 panOffset { get { return _panOffset; } set { _panOffset = value; Repaint(); } }
|
||||||
private Vector2 _panOffset;
|
private Vector2 _panOffset;
|
||||||
public float zoom { get { return _zoom; } set { _zoom = Mathf.Clamp(value, 1f, 5f); Repaint(); } }
|
public float zoom { get { return _zoom; } set { _zoom = Mathf.Clamp(value, 1f, 5f); Repaint(); } }
|
||||||
private float _zoom = 1;
|
private float _zoom = 1;
|
||||||
|
|
||||||
partial void OnEnable();
|
partial void OnEnable();
|
||||||
|
|
||||||
[MenuItem("Window/UNEC")]
|
[MenuItem("Window/UNEC")]
|
||||||
static void Init() {
|
static NodeEditorWindow Init() {
|
||||||
NodeEditorWindow w = CreateInstance<NodeEditorWindow>();
|
NodeEditorWindow w = CreateInstance<NodeEditorWindow>();
|
||||||
w.titleContent = new GUIContent("UNEC");
|
w.titleContent = new GUIContent("UNEC");
|
||||||
w.wantsMouseMove = true;
|
w.wantsMouseMove = true;
|
||||||
w.Show();
|
w.Show();
|
||||||
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save() {
|
public void Save() {
|
||||||
saved = graph.Serialize();
|
if (graphAsset == null) SaveAs();
|
||||||
|
else if (AssetDatabase.Contains(graphAsset)) {
|
||||||
|
graphAsset.json = graph.Serialize();
|
||||||
|
EditorUtility.SetDirty(graphAsset);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
}
|
||||||
|
else SaveAs();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Load() {
|
public void SaveAs() {
|
||||||
_graph = NodeGraph.Deserialize(saved);
|
string path = EditorUtility.SaveFilePanelInProject("Save NodeGraph", "NewNodeGraph", "asset", "");
|
||||||
|
if (string.IsNullOrEmpty(path)) return;
|
||||||
|
else {
|
||||||
|
NodeGraphAsset existingGraphAsset = AssetDatabase.LoadAssetAtPath<NodeGraphAsset>(path);
|
||||||
|
if (existingGraphAsset != null) graphAsset = existingGraphAsset;
|
||||||
|
else {
|
||||||
|
graphAsset = new NodeGraphAsset();
|
||||||
|
AssetDatabase.CreateAsset(graphAsset, path);
|
||||||
|
}
|
||||||
|
graphAsset.json = graph.Serialize();
|
||||||
|
EditorUtility.SetDirty(graphAsset);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void New() {
|
||||||
|
_graph = new NodeGraph();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DraggableWindow(int windowID) {
|
private void DraggableWindow(int windowID) {
|
||||||
@ -60,4 +82,15 @@ public partial class NodeEditorWindow : EditorWindow {
|
|||||||
selectedNode = node;
|
selectedNode = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[OnOpenAsset(0)]
|
||||||
|
public static bool OnOpen(int instanceID, int line) {
|
||||||
|
NodeGraphAsset nodeGraphAsset = EditorUtility.InstanceIDToObject(instanceID) as NodeGraphAsset;
|
||||||
|
if (nodeGraphAsset != null) {
|
||||||
|
NodeEditorWindow w = Init();
|
||||||
|
w.graphAsset = nodeGraphAsset;
|
||||||
|
w._graph = nodeGraphAsset.nodeGraph;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -87,7 +87,7 @@ public class NodeGraph {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class NodeTyper {
|
private class NodeTyper {
|
||||||
public string nodeType;
|
public string nodeType = "Node";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
Scripts/NodeGraphAsset.cs
Normal file
13
Scripts/NodeGraphAsset.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
[CreateAssetMenu(fileName = "NewNodeGraph", menuName = "Node Graph")]
|
||||||
|
public class NodeGraphAsset : ScriptableObject {
|
||||||
|
public string json { get { return _json; } set { _json = value; _nodeGraph = null; } }
|
||||||
|
[SerializeField] private string _json;
|
||||||
|
|
||||||
|
public NodeGraph nodeGraph { get { return _nodeGraph != null ? _nodeGraph : _nodeGraph = NodeGraph.Deserialize(json); } }
|
||||||
|
[NonSerialized] private NodeGraph _nodeGraph = null;
|
||||||
|
}
|
||||||
12
Scripts/NodeGraphAsset.cs.meta
Normal file
12
Scripts/NodeGraphAsset.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 803fd86571b50524f807cf1e86777b1a
|
||||||
|
timeCreated: 1506020816
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Loading…
x
Reference in New Issue
Block a user