mirror of
https://github.com/Siccity/xNode.git
synced 2025-12-21 01:36:03 +08:00
Added NodeGraphEditor.GetTypeColor for custom node-graph specific type colors
This commit is contained in:
parent
9e68617cb8
commit
aabd2e4145
@ -9,12 +9,10 @@ namespace XNodeEditor {
|
|||||||
/// <summary> Base class to derive custom Node editors from. Use this to create your own custom inspectors and editors for your nodes. </summary>
|
/// <summary> Base class to derive custom Node editors from. Use this to create your own custom inspectors and editors for your nodes. </summary>
|
||||||
|
|
||||||
[CustomNodeEditor(typeof(Node))]
|
[CustomNodeEditor(typeof(Node))]
|
||||||
public class NodeEditor : XNodeInternal.NodeEditorBase<NodeEditor, NodeEditor.CustomNodeEditorAttribute> {
|
public class NodeEditor : XNodeInternal.NodeEditorBase<NodeEditor, NodeEditor.CustomNodeEditorAttribute, Node> {
|
||||||
|
|
||||||
/// <summary> Fires every whenever a node was modified through the editor </summary>
|
/// <summary> Fires every whenever a node was modified through the editor </summary>
|
||||||
public static Action<Node> onUpdateNode;
|
public static Action<Node> onUpdateNode;
|
||||||
public Node target;
|
|
||||||
public SerializedObject serializedObject;
|
|
||||||
public static Dictionary<NodePort, Vector2> portPositions;
|
public static Dictionary<NodePort, Vector2> portPositions;
|
||||||
|
|
||||||
/// <summary> Draws the node GUI.</summary>
|
/// <summary> Draws the node GUI.</summary>
|
||||||
|
|||||||
@ -3,16 +3,28 @@ using System.Collections;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
using XNode;
|
using XNode;
|
||||||
using XNodeEditor;
|
using XNodeEditor;
|
||||||
|
|
||||||
namespace XNodeInternal {
|
namespace XNodeInternal {
|
||||||
/// <summary> Handles caching of custom editor classes and their target types. Accessible with GetEditor(Type type) </summary>
|
/// <summary> Handles caching of custom editor classes and their target types. Accessible with GetEditor(Type type) </summary>
|
||||||
public class NodeEditorBase<T, A> where A : Attribute, NodeEditorBase<T, A>.INodeEditorAttrib where T : class {
|
public class NodeEditorBase<T, A, K> where A : Attribute, NodeEditorBase<T, A, K>.INodeEditorAttrib where T : NodeEditorBase<T,A,K> where K : ScriptableObject {
|
||||||
/// <summary> Custom editors defined with [CustomNodeEditor] </summary>
|
/// <summary> Custom editors defined with [CustomNodeEditor] </summary>
|
||||||
private static Dictionary<Type, T> editors;
|
private static Dictionary<Type, T> editors;
|
||||||
|
public K target;
|
||||||
|
public SerializedObject serializedObject;
|
||||||
|
|
||||||
public static T GetEditor(Type type) {
|
public static T GetEditor(K target) {
|
||||||
|
if (target == null) return null;
|
||||||
|
Type type = target.GetType();
|
||||||
|
T editor = GetEditor(type);
|
||||||
|
editor.target = target;
|
||||||
|
editor.serializedObject = new SerializedObject(target);
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static T GetEditor(Type type) {
|
||||||
if (type == null) return null;
|
if (type == null) return null;
|
||||||
if (editors == null) CacheCustomEditors();
|
if (editors == null) CacheCustomEditors();
|
||||||
if (editors.ContainsKey(type)) return editors[type];
|
if (editors.ContainsKey(type)) return editors[type];
|
||||||
|
|||||||
@ -13,9 +13,7 @@ namespace XNodeEditor {
|
|||||||
Event e = Event.current;
|
Event e = Event.current;
|
||||||
Matrix4x4 m = GUI.matrix;
|
Matrix4x4 m = GUI.matrix;
|
||||||
if (graph == null) return;
|
if (graph == null) return;
|
||||||
currentGraphEditor = NodeGraphEditor.GetEditor(graph.GetType());
|
currentGraphEditor = NodeGraphEditor.GetEditor(graph);
|
||||||
currentGraphEditor.target = graph;
|
|
||||||
currentGraphEditor.serializedObject = new SerializedObject(graph);
|
|
||||||
|
|
||||||
Controls();
|
Controls();
|
||||||
|
|
||||||
@ -162,7 +160,8 @@ namespace XNodeEditor {
|
|||||||
if (!input.IsConnectedTo(output)) input.Connect(output);
|
if (!input.IsConnectedTo(output)) input.Connect(output);
|
||||||
if (!_portConnectionPoints.ContainsKey(input)) continue;
|
if (!_portConnectionPoints.ContainsKey(input)) continue;
|
||||||
Vector2 to = _portConnectionPoints[input].center;
|
Vector2 to = _portConnectionPoints[input].center;
|
||||||
DrawConnection(from, to, NodeEditorPreferences.GetTypeColor(output.ValueType));
|
Color connectionColor = currentGraphEditor.GetTypeColor(output.ValueType);
|
||||||
|
DrawConnection(from, to, connectionColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,11 +197,8 @@ namespace XNodeEditor {
|
|||||||
while (graph.nodes[n] == null) graph.nodes.RemoveAt(n);
|
while (graph.nodes[n] == null) graph.nodes.RemoveAt(n);
|
||||||
if (n >= graph.nodes.Count) return;
|
if (n >= graph.nodes.Count) return;
|
||||||
Node node = graph.nodes[n];
|
Node node = graph.nodes[n];
|
||||||
Type nodeType = node.GetType();
|
|
||||||
|
|
||||||
NodeEditor nodeEditor = NodeEditor.GetEditor(nodeType);
|
NodeEditor nodeEditor = NodeEditor.GetEditor(node);
|
||||||
nodeEditor.target = node;
|
|
||||||
nodeEditor.serializedObject = new SerializedObject(node);
|
|
||||||
NodeEditor.portPositions = new Dictionary<NodePort, Vector2>();
|
NodeEditor.portPositions = new Dictionary<NodePort, Vector2>();
|
||||||
|
|
||||||
//Get node position
|
//Get node position
|
||||||
|
|||||||
@ -93,7 +93,8 @@ namespace XNodeEditor {
|
|||||||
|
|
||||||
Color backgroundColor = new Color32(90, 97, 105, 255);
|
Color backgroundColor = new Color32(90, 97, 105, 255);
|
||||||
if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType())) backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
|
if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType())) backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
|
||||||
DrawPortHandle(rect, port.ValueType, backgroundColor);
|
Color col = NodeGraphEditor.GetEditor(port.node.graph).GetTypeColor(port.ValueType);
|
||||||
|
DrawPortHandle(rect, backgroundColor, col);
|
||||||
|
|
||||||
// Register the handle position
|
// Register the handle position
|
||||||
Vector2 portPos = rect.center;
|
Vector2 portPos = rect.center;
|
||||||
@ -119,7 +120,8 @@ namespace XNodeEditor {
|
|||||||
|
|
||||||
Color backgroundColor = new Color32(90, 97, 105, 255);
|
Color backgroundColor = new Color32(90, 97, 105, 255);
|
||||||
if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType())) backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
|
if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType())) backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
|
||||||
DrawPortHandle(rect, port.ValueType, backgroundColor);
|
Color col = NodeGraphEditor.GetEditor(port.node.graph).GetTypeColor(port.ValueType);
|
||||||
|
DrawPortHandle(rect, backgroundColor, col);
|
||||||
|
|
||||||
// Register the handle position
|
// Register the handle position
|
||||||
Vector2 portPos = rect.center;
|
Vector2 portPos = rect.center;
|
||||||
@ -127,11 +129,11 @@ namespace XNodeEditor {
|
|||||||
else NodeEditor.portPositions.Add(port, portPos);
|
else NodeEditor.portPositions.Add(port, portPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void DrawPortHandle(Rect rect, Type type, Color backgroundColor) {
|
private static void DrawPortHandle(Rect rect, Color backgroundColor, Color typeColor) {
|
||||||
Color col = GUI.color;
|
Color col = GUI.color;
|
||||||
GUI.color = backgroundColor;
|
GUI.color = backgroundColor;
|
||||||
GUI.DrawTexture(rect, NodeEditorResources.dotOuter);
|
GUI.DrawTexture(rect, NodeEditorResources.dotOuter);
|
||||||
GUI.color = NodeEditorPreferences.GetTypeColor(type);
|
GUI.color = typeColor;
|
||||||
GUI.DrawTexture(rect, NodeEditorResources.dot);
|
GUI.DrawTexture(rect, NodeEditorResources.dot);
|
||||||
GUI.color = col;
|
GUI.color = col;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,13 +8,10 @@ using XNode;
|
|||||||
namespace XNodeEditor {
|
namespace XNodeEditor {
|
||||||
/// <summary> Base class to derive custom Node Graph editors from. Use this to override how graphs are drawn in the editor. </summary>
|
/// <summary> Base class to derive custom Node Graph editors from. Use this to override how graphs are drawn in the editor. </summary>
|
||||||
[CustomNodeGraphEditor(typeof(NodeGraph))]
|
[CustomNodeGraphEditor(typeof(NodeGraph))]
|
||||||
public class NodeGraphEditor : XNodeInternal.NodeEditorBase<NodeGraphEditor, NodeGraphEditor.CustomNodeGraphEditorAttribute> {
|
public class NodeGraphEditor : XNodeInternal.NodeEditorBase<NodeGraphEditor, NodeGraphEditor.CustomNodeGraphEditorAttribute, NodeGraph> {
|
||||||
/// <summary> Custom node editors defined with [CustomNodeGraphEditor] </summary>
|
/// <summary> Custom node editors defined with [CustomNodeGraphEditor] </summary>
|
||||||
[NonSerialized] private static Dictionary<Type, NodeGraphEditor> editors;
|
[NonSerialized] private static Dictionary<Type, NodeGraphEditor> editors;
|
||||||
|
|
||||||
public NodeGraph target;
|
|
||||||
public SerializedObject serializedObject;
|
|
||||||
|
|
||||||
public virtual Texture2D GetGridTexture() {
|
public virtual Texture2D GetGridTexture() {
|
||||||
return NodeEditorPreferences.gridTexture;
|
return NodeEditorPreferences.gridTexture;
|
||||||
}
|
}
|
||||||
@ -33,6 +30,10 @@ namespace XNodeEditor {
|
|||||||
return ObjectNames.NicifyVariableName(type.ToString().Replace('.', '/'));
|
return ObjectNames.NicifyVariableName(type.ToString().Replace('.', '/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual Color GetTypeColor(Type type) {
|
||||||
|
return NodeEditorPreferences.GetTypeColor(type);
|
||||||
|
}
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Class)]
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
public class CustomNodeGraphEditorAttribute : Attribute,
|
public class CustomNodeGraphEditorAttribute : Attribute,
|
||||||
INodeEditorAttrib {
|
INodeEditorAttrib {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user