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

Working in process
main
taoria 3 years ago committed by GitHub
commit 1ad2694fa6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      TNode/Editor/BaseViews/DataGraphView.cs
  2. 23
      TNode/Editor/Inspector/InspectorImplementation/PropertyFieldItem.cs
  3. 3
      TNode/Editor/Inspector/InspectorImplementation/PropertyFieldItem.cs.meta
  4. 19
      TNode/Editor/Inspector/NodeInspector.cs
  5. 11
      TNode/Editor/Inspector/NodeInspectorInNode.cs
  6. 60
      TNode/Editor/Search/BlackboardSearchWindowProvider.cs

@ -112,20 +112,13 @@ namespace TNode.Editor.BaseViews{
*/ */
public abstract class DataGraphView<T>:GraphView,IDataGraphView where T:GraphData{ public abstract class DataGraphView<T>:GraphView,IDataGraphView where T:GraphData{
#region variables and properties #region variables and properties
private T _data; private T _data;
private bool _isInspectorOn; private bool _isInspectorOn;
private NodeSearchWindowProvider _nodeSearchWindowProvider; private NodeSearchWindowProvider _nodeSearchWindowProvider;
private NodeInspector _nodeInspector; private NodeInspector _nodeInspector;
public GraphEditor<T> Owner; public GraphEditor<T> Owner;
private Dictionary<string,Node> _nodeDict = new(); private Dictionary<string,Node> _nodeDict = new();
private Blackboard _blackboard; private Blackboard _blackboard;
public T Data{ public T Data{
get{ return _data; } get{ return _data; }
set{ set{
@ -469,11 +462,17 @@ namespace TNode.Editor.BaseViews{
} }
Owner.graphEditorData.graphElementsData.RemoveAll(x => x.guid == nodeData.id); Owner.graphEditorData.graphElementsData.RemoveAll(x => x.guid == nodeData.id);
} }
public BlackboardData GetBlackboardData(){
return this._data.blackboardData;
}
} }
public interface IDataGraphView{ public interface IDataGraphView{
public void AddTNode(NodeData nodeData, Rect rect); public void AddTNode(NodeData nodeData, Rect rect);
public void RemoveTNode(NodeData nodeData); public void RemoveTNode(NodeData nodeData);
public BlackboardData GetBlackboardData();
} }
public class DataChangedEventArgs<T>{ public class DataChangedEventArgs<T>{

@ -0,0 +1,23 @@
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace TNode.Editor.Inspector.InspectorImplementation{
public class PropertyFieldItem:InspectorItem<Object>{
public PropertyFieldItem(){
OnDataChanged += () => {
var data = new SerializedObject(Value as Object);
var testProperty = data.GetIterator().GetArrayElementAtIndex(0);
PropertyField propertyField = new PropertyField(testProperty);
this.Q<PropertyField>()?.RemoveFromHierarchy();
this.Add(propertyField);
};
}
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 98769c8b285d438197820fa366568fee
timeCreated: 1657280625

@ -51,21 +51,12 @@ namespace TNode.Editor.Inspector{
var type = field.FieldType; var type = field.FieldType;
InspectorItemFactory inspectorItemFactory = new InspectorItemFactory(); InspectorItemFactory inspectorItemFactory = new InspectorItemFactory();
//Invoke generic function Create<> of default inspector item factory to create an inspector item of appropriate type by reflection //Invoke generic function Create<> of default inspector item factory to create an inspector item of appropriate type by reflection
MethodInfo methodInfo = inspectorItemFactory.GetType().GetMethod("Create", BindingFlags.Instance | BindingFlags.Public); var createdItem = inspectorItemFactory.Create(type);
if (methodInfo != null){ if (createdItem is { } castedItem){
var genericMethod = methodInfo.MakeGenericMethod(type); castedItem.BindingNodeData = _data;
var createdItem = genericMethod.Invoke(inspectorItemFactory,null) as VisualElement; castedItem.BindingPath = bindingPath;
body.Add(createdItem);
if (createdItem is INodeDataBindingBase castedItem){
castedItem.BindingNodeData = _data;
castedItem.BindingPath = bindingPath;
}
//Check if field has DisableOnInspector attribute and if so,disable it
if (field.GetCustomAttribute<DisableOnInspectorAttribute>() != null){
createdItem?.SetEnabled(false);
}
} }
Add((VisualElement)createdItem);
} }
} }
} }

@ -32,22 +32,13 @@ namespace TNode.Editor.Inspector{
var showInNodeViewAttribute = field.GetCustomAttribute<ShowInNodeViewAttribute>()!=null; var showInNodeViewAttribute = field.GetCustomAttribute<ShowInNodeViewAttribute>()!=null;
if(!showInNodeViewAttribute) if(!showInNodeViewAttribute)
continue; continue;
//Invoke generic function Create<> of default inspector item factory to create an inspector item of appropriate type by reflection
var createdItem = inspectorItemFactory.Create(type); var createdItem = inspectorItemFactory.Create(type);
if (createdItem is { } castedItem){ if (createdItem is { } castedItem){
castedItem.BindingNodeData = _data; castedItem.BindingNodeData = _data;
castedItem.BindingPath = bindingPath; castedItem.BindingPath = bindingPath;
} }
Add((VisualElement)createdItem); Add((VisualElement)createdItem);
// MethodInfo methodInfo = inspectorItemFactory.GetType().GetMethod("Create", BindingFlags.Instance | BindingFlags.Public);
// if (methodInfo != null){
// var genericMethod = methodInfo.MakeGenericMethod(type);
// Debug.Log(genericMethod);
// var createdItem = genericMethod.Invoke(inspectorItemFactory,null) as VisualElement;
// Add(createdItem);
// Debug.Log(createdItem?.GetType());
//
// }
} }
} }
} }

@ -1,15 +1,69 @@
using System.Collections.Generic; using System;
using System.Collections;
using System.Collections.Generic;
using TNode.Editor.BaseViews;
using UnityEditor;
using UnityEditor.Experimental.GraphView; using UnityEditor.Experimental.GraphView;
using UnityEngine;
namespace TNode.Editor{ namespace TNode.Editor{
public class BlackboardSearchWindowProvider:ISearchWindowProvider{ public class BlackboardSearchWindowProvider:ISearchWindowProvider{
private Type _graphType;
private IDataGraphView _graphView;
private EditorWindow _editor;
private struct InternalSearchTreeUserData{
public IList List;
public Type Type;
}
public List<SearchTreeEntry> CreateSearchTree(SearchWindowContext context){ public List<SearchTreeEntry> CreateSearchTree(SearchWindowContext context){
throw new System.NotImplementedException(); var blackboardData = _graphView.GetBlackboardData();
var type = blackboardData.GetType();
var entries = new List<SearchTreeEntry>();
if (entries == null) throw new ArgumentNullException(nameof(entries));
//search fields with List type
Texture2D icon = new Texture2D(2,2);
foreach (var field in type.GetFields()){
if (field.FieldType.IsGenericType){
var genericType = field.FieldType.GetGenericTypeDefinition();
if (genericType == typeof(List<>)){
entries.Add(new SearchTreeEntry(new GUIContent(field.Name,icon)){
level = 1,
userData = new InternalSearchTreeUserData(){
List = field.GetValue(blackboardData) as IList,
Type = field.FieldType.GetGenericArguments()[0]
}
});
}
}
}
return entries;
} }
public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context){ public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context){
throw new System.NotImplementedException(); var userData = SearchTreeEntry.userData;
var relativePos = context.screenMousePosition - _editor.position.position;
var blackboardData = _graphView.GetBlackboardData();
if (userData is InternalSearchTreeUserData){
var list = ((InternalSearchTreeUserData) userData).List;
var type = ((InternalSearchTreeUserData) userData).Type;
var newItem = Activator.CreateInstance(type);
list.Add(newItem);
return true;
}
return false;
}
public void Setup(Type graph,IDataGraphView graphView,EditorWindow editor){
_graphType = graph;
_graphView = graphView;
_editor = editor;
} }
} }

Loading…
Cancel
Save