You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.5 KiB
60 lines
2.5 KiB
using TilemapGenerator.ThirdParty.Extensions;
|
|
using TNode.TNodeCore.Editor.Serialization;
|
|
using TNodeCore.Runtime.Attributes;
|
|
using TNodeCore.Runtime.Models;
|
|
using UnityEditor;
|
|
using UnityEditor.Experimental.GraphView;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace TNodeGraphViewImpl.Editor.NodeViews{
|
|
[ViewComponent]
|
|
public class DragBaseNodeView:BaseNodeView<BlackboardDragNode>{
|
|
public DragBaseNodeView() : base(){
|
|
this.titleContainer.visible = false;
|
|
this.titleContainer.RemoveFromHierarchy();
|
|
this.OnDataChanged += OnDataChangedHandler;
|
|
}
|
|
|
|
private void OnDataChangedHandler(BlackboardDragNode obj){
|
|
var port = this.Q<Port>();
|
|
var label = port.Q<Label>();
|
|
var blackboard = obj.BlackboardData;
|
|
BlackboardDataWrapper blackboardWrapper = (BlackboardDataWrapper)blackboard;
|
|
var serializedData = new SerializedObject(blackboardWrapper);
|
|
var arrayElement = obj.isListElement;
|
|
SerializedProperty serializedProperty = null;
|
|
if (arrayElement){
|
|
var part = obj.BlackDragData.Split('.');
|
|
serializedProperty = serializedData.FindProperty(BlackboardDataWrapper.DataPath)
|
|
.FindPropertyRelative(part[0])
|
|
.GetArrayElementAtIndex(int.Parse(part[1]));
|
|
}
|
|
else{
|
|
serializedProperty = serializedData.FindProperty(BlackboardDataWrapper.DataPath).FindPropertyRelative(obj.BlackDragData);
|
|
}
|
|
label.text = ObjectNames.NicifyVariableName(obj.BlackDragData);
|
|
//Get serialized property's icon
|
|
Texture2D icon = null;
|
|
if (serializedProperty == null) return;
|
|
if (serializedProperty.BoxedValue() is Object value){
|
|
icon = AssetPreview.GetMiniThumbnail(value);
|
|
}
|
|
else{
|
|
if (serializedProperty.BoxedValue() == null){
|
|
return;
|
|
}
|
|
icon = AssetPreview.GetMiniTypeThumbnail(serializedProperty.BoxedValue().GetType());
|
|
}
|
|
|
|
label.parent.Add(new Image(){
|
|
image = icon
|
|
});
|
|
//more round style for entire element
|
|
style.borderBottomLeftRadius = style.borderBottomRightRadius =
|
|
style.borderTopLeftRadius = style.borderTopRightRadius = 25;
|
|
styleSheets.Add(Resources.Load<StyleSheet>("DragNodeStyle"));
|
|
this.name = "DragNodeView";
|
|
}
|
|
}
|
|
} |