|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|