Merge pull request #3 from taoria/working-in-process

brave new world
main
taoria 3 years ago committed by GitHub
commit 28039ffd13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      TNode/Attribute/InputPortAttribute.cs
  2. 28
      TNode/Attribute/PortAttribute.cs
  3. 3
      TNode/Attribute/PortAttribute.cs.meta
  4. 3
      TNode/BaseModels/Interfaces.meta
  5. 0
      TNode/BaseModels/Interfaces/IEditorOnlyModel.cs
  6. 0
      TNode/BaseModels/Interfaces/IEditorOnlyModel.cs.meta
  7. 0
      TNode/BaseModels/Interfaces/IModel.cs
  8. 0
      TNode/BaseModels/Interfaces/IModel.cs.meta
  9. 3
      TNode/Editor/Inspector.meta
  10. 22
      TNode/Editor/Inspector/INodeDataBinding.cs
  11. 3
      TNode/Editor/Inspector/INodeDataBinding.cs.meta
  12. 10
      TNode/Editor/Inspector/InspectorItem.cs
  13. 3
      TNode/Editor/Inspector/InspectorItem.cs.meta
  14. 15
      TNode/Editor/Inspector/NodeInspector.cs
  15. 0
      TNode/Editor/Inspector/NodeInspector.cs.meta
  16. 8
      TNode/Editor/Inspector/TinyInspector.cs
  17. 3
      TNode/Editor/Inspector/TinyInspector.cs.meta
  18. 14
      TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt
  19. 48
      TNode/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs
  20. 1
      TNode/Models/GraphData.cs
  21. 14
      TNode/Models/NodeData.cs
  22. 4
      TNode/TNodeSample/NodeDataTest.cs

@ -1,12 +1,17 @@
using System;
using JetBrains.Annotations;
using TNode.Models;
using UnityEditor.Experimental.GraphView;
namespace TNode.Attribute{
[MeansImplicitUse]
public class InputPortAttribute : System.Attribute{
public Type NodeLinkType;
public string PortAccepted;
public Port.Capacity Capacity;
[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
public class InputPortAttribute : PortAttribute{
public InputPortAttribute(string portName, Type nodeLinkType, Port.Capacity capacity, string portAccepted = "*") : base(portName, nodeLinkType, capacity, portAccepted){
}
public InputPortAttribute(Type nodeLinkType, Port.Capacity capacity, string portAccepted="*") : base(nodeLinkType, capacity, portAccepted){
}
public InputPortAttribute(string portName="*",string portAccepted = "*") :base(portName, typeof(NodeLink),Port.Capacity.Multi,portAccepted){
}
}
}

@ -0,0 +1,28 @@
using System;
using JetBrains.Annotations;
using UnityEditor.Experimental.GraphView;
namespace TNode.Attribute{
[MeansImplicitUse]
[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
public class PortAttribute:System.Attribute{
public string PortName;
public string PortAccepted;
public Type NodeLinkType;
public Port.Capacity Capacity;
public PortAttribute(string portName, Type nodeLinkType, Port.Capacity capacity,string portAccepted="*"){
PortName = portName;
PortAccepted = portAccepted;
NodeLinkType = nodeLinkType;
Capacity = capacity;
}
//Auto generate port name via variable use this attribute
public PortAttribute(Type nodeLinkType, Port.Capacity capacity, string portAccepted = "*"){
PortAccepted = portAccepted;
NodeLinkType = nodeLinkType;
Capacity = capacity;
}
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3c8e45090fd24360a1c056f58c54e021
timeCreated: 1656123678

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a3385746bf2c4f7699ac027dcb138a53
timeCreated: 1656129728

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 71a4cdef7fcc4595bbca70ca16e06e9d
timeCreated: 1656126162

@ -0,0 +1,22 @@
using TNode.Models;
using UnityEngine;
namespace TNode.Editor.Inspector{
public interface INodeDataBinding<out T>{
protected T GetValue(){
var fieldInfo = typeof(T).GetField(BindingPath, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
//check field type
if (fieldInfo != null && fieldInfo.FieldType == typeof(T)){
return (T)fieldInfo.GetValue(BindingNodeData);
}
else{
Debug.LogError("Wrong Type for current node data");
}
return default;
}
public string BindingPath{ get; set; }
public NodeData BindingNodeData{ get; set; }
public T Value => GetValue();
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b06ba4ccd201400cbabfa7b6ee092cb2
timeCreated: 1656137782

@ -0,0 +1,10 @@
using TNode.Models;
using UnityEngine;
using UnityEngine.UIElements;
namespace TNode.Editor.Inspector{
public abstract class InspectorItem<T>:VisualElement,INodeDataBinding<T>{
public string BindingPath{ get; set; }
public NodeData BindingNodeData{ get; set; }
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 82902f281e4642f2be8b742866d38839
timeCreated: 1656126272

@ -1,8 +1,8 @@
using TNode.Models;
using UnityEditor.Experimental.GraphView;
using TNode.BaseViews;
using TNode.Models;
namespace TNode.BaseViews{
public class NodeInspector<T>:SimpleGraphSubWindow{
namespace TNode.Editor.BaseViews{
public class NodeInspector:SimpleGraphSubWindow{
private NodeData _data;
public NodeData Data{
@ -15,8 +15,13 @@ namespace TNode.BaseViews{
private void UpdateData(){
if (_data != null){
RefreshInspector();
}
}
private void RefreshInspector(){
}
}
}

@ -0,0 +1,8 @@
namespace TNode.Editor.Inspector{
/// <summary>
/// Tiny Inspector item is a simple inspector inside a node view
/// </summary>
public class TinyInspector{
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7eeddeb28a5a475c85c85ceae3198778
timeCreated: 1656142058

@ -6,5 +6,17 @@ using UnityEngine;
using UnityEngine.UIElements;
public class $EditorClassName$ : GraphEditor<$GraphClassName$>{
[OnOpenAsset]
public static bool OnOpenAsset(int instanceID, int line){
var graph = EditorUtility.InstanceIDToObject(instanceID) as $GraphClassName$;
if (graph != null)
{
$GraphClassName$ wnd = GetWindow<$EditorClassName$>();
wnd.titleContent = new GUIContent("$GraphClassName$ Editor");
wnd.CreateGUI();
wnd._graphView.Data = graph;
return true;
}
return false;
}
}

@ -1,4 +1,5 @@
using System.IO;
using System.Text.RegularExpressions;
using TNode.Editor.Model;
using UnityEditor;
using UnityEngine;
@ -14,6 +15,10 @@ namespace TNode.Editor.Tools.GraphEditorCreator{
[SerializeField]
private VisualTreeAsset m_VisualTreeAsset = default;
private TextField _editorClassNameTextField;
private TextField _graphClassNameTextField;
private Button _createButton;
[MenuItem("Assets/Create/TNode/Create New Graph Editor")]
[MenuItem("TNode/Create New Graph Editor")]
public static void ShowExample()
@ -42,8 +47,43 @@ namespace TNode.Editor.Tools.GraphEditorCreator{
root.Add(labelFromUXML);
//Register a callback when Create Button is clicked
Button createButton = root.Q<Button>("CreateButton");
createButton.clickable.clicked += OnCreateButtonClicked;
_createButton = root.Q<Button>("CreateButton");
_createButton.clickable.clicked += OnCreateButtonClicked;
_editorClassNameTextField = root.Q<TextField>("EditorClassNameTextField");
_graphClassNameTextField = root.Q<TextField>("GraphClassNameTextField");
_editorClassNameTextField.RegisterCallback<ChangeEvent<string>>((evt) => {
CheckIfTextValid();
});
_graphClassNameTextField.RegisterCallback<ChangeEvent<string>>((evt) => {
CheckIfTextValid();
});
}
public void CheckIfTextValid(){
Regex regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z0-9_]+$");
var matchEditor = regex.IsMatch(_editorClassNameTextField.value);
var matchGraph = regex.IsMatch(_graphClassNameTextField.value);
if (matchEditor){
//Set background color to green
_editorClassNameTextField.style.backgroundColor = new Color(0.5f, 1f, 0.5f);
}
else{
//Set background color to red
_editorClassNameTextField.style.backgroundColor = new Color(1f, 0.5f, 0.5f);
}
if (matchGraph){
//Set background color to green
_graphClassNameTextField.style.backgroundColor = new Color(0.5f, 1f, 0.5f);
}
else{
//Set background color to red
_graphClassNameTextField.style.backgroundColor = new Color(1f, 0.5f, 0.5f);
}
_createButton.SetEnabled(matchGraph && matchEditor);
}
@ -65,8 +105,8 @@ namespace TNode.Editor.Tools.GraphEditorCreator{
path = path + "/Editor";
}
//Query the name of the graph editor
string editorName = rootVisualElement.Q<TextField>("EditorClassNameTextField").text;
string graphName = rootVisualElement.Q<TextField>("GraphClassNameTextField").text;
string editorName =_editorClassNameTextField.text;
string graphName = _graphClassNameTextField.text;
if (editorName == "")
{
editorName = "NewGraphEditor";

@ -7,7 +7,6 @@ using UnityEngine;
namespace TNode.Models{
[Serializable]
public class GraphData:ScriptableObject{
[SerializeReference]
public List<NodeData> nodes;

@ -3,6 +3,13 @@ using TNode.BaseModels;
using UnityEngine;
namespace TNode.Models{
/// <summary>
/// this class is used to store the data of a node
/// inherit it to implement your own node
/// when declare a port for this node,you can use attribute [PortTypeName] on a field to claim a port.a port will not be inspected by default inspector.
/// fields that are not marked with [PortTypeName] will be inspected by default inspector.
///
/// </summary>
[Serializable]
public class NodeData:IModel{
@ -11,9 +18,8 @@ namespace TNode.Models{
}
public string nodeName;
public bool entryPoint;
#if UNITY_EDITOR
public Rect rect;
#endif
// #if UNITY_EDITOR
// public Rect rect;
// #endif
}
}

@ -1,10 +1,12 @@
using Dialogue;
using TNode.Attribute;
using TNode.Models;
using UnityEditor.Experimental.GraphView;
namespace TNode.TNodeSample{
public class NodeDataTest:NodeData{
[InputPort] private float _floatInput;
[InputPort(typeof(NodeLink),Port.Capacity.Multi)]
private float _floatInput;
public NodeDataTest(string name):base(){
}

Loading…
Cancel
Save