Gameplay Ingredients是一组用于 Unity 游戏的运行时和编辑器工具:一组脚本的集合,可在制作游戏和原型时简化简单的任务。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

60 行
2.0 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Experimental.UIElements.GraphView;
using UnityEngine.Experimental.UIElements;
namespace GraphProcessor
{
public sealed class EdgeConnectorListener : IEdgeConnectorListener
{
readonly BaseGraphView graphView;
Dictionary< Edge, PortView > edgeInputPorts = new Dictionary< Edge, PortView >();
Dictionary< Edge, PortView > edgeOutputPorts = new Dictionary< Edge, PortView >();
public EdgeConnectorListener(BaseGraphView graphView)
{
this.graphView = graphView;
}
public void OnDropOutsidePort(Edge edge, Vector2 position)
{
this.graphView.RegisterCompleteObjectUndo("Disconnect edge");
//If the edge was already existing, remove it
if (!edge.isGhostEdge)
graphView.Disconnect(edge as EdgeView);
//TODO: open new nodes selector and connect the created node if there is one
}
public void OnDrop(GraphView graphView, Edge edge)
{
var edgeView = edge as EdgeView;
bool wasOnTheSamePort = false;
if (edgeView?.input == null || edgeView?.output == null)
return ;
//If the edge was moved to another port
if (edgeView.isConnected)
{
if (edgeInputPorts.ContainsKey(edge) && edgeOutputPorts.ContainsKey(edge))
if (edgeInputPorts[edge] == edge.input && edgeOutputPorts[edge] == edge.output)
wasOnTheSamePort = true;
if (!wasOnTheSamePort)
this.graphView.Disconnect(edgeView);
}
if (edgeView.input.node == null || edgeView.output.node == null)
return;
edgeInputPorts[edge] = edge.input as PortView;
edgeOutputPorts[edge] = edge.output as PortView;
this.graphView.RegisterCompleteObjectUndo("Connected " + edgeView.input.node.name + " and " + edgeView.output.node.name);
this.graphView.Connect(edge as EdgeView, autoDisconnectInputs: !wasOnTheSamePort);
}
}
}