1
0
mirror of https://github.com/Siccity/xNode.git synced 2025-12-20 01:06:01 +08:00
xNode/Runtime/Flow/FlowNode.cs
2023-01-09 21:35:40 +00:00

71 lines
2.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace XNode.Flow
{
public abstract class FlowNode : Node
{
public override object GetValue(NodePort port)
{
if (port.IsConnected && port.Connection.node is FlowNode flowNode) return flowNode;
return null;
}
public virtual IEnumerator Perform()
{
yield break;
}
public virtual IEnumerable<FlowNode> PreviousNodes => Array.Empty<FlowNode>();
public virtual IEnumerable<FlowNode> NextNodes => Array.Empty<FlowNode>();
public FlowNode GetFlowNode(string portName) => GetValue(GetPort(portName)) as FlowNode;
}
public abstract class InFlowNode : FlowNode
{
[Input(ShowBackingValue.Never, ConnectionType.Multiple, TypeConstraint.Inherited)]
[SerializeField, HideInInspector]
public FlowNode previousNode;
public override IEnumerable<FlowNode> PreviousNodes
{
get { yield return GetFlowNode("previousNodes"); }
}
}
public abstract class OutFlowNode : FlowNode
{
[Output(ShowBackingValue.Never, ConnectionType.Multiple, TypeConstraint.Inherited)]
[SerializeField, HideInInspector]
public FlowNode nextNode;
public override IEnumerable<FlowNode> NextNodes
{
get { yield return GetFlowNode("nextNode"); }
}
}
public abstract class InOutFlowNode : FlowNode
{
[Input(ShowBackingValue.Never, ConnectionType.Multiple, TypeConstraint.Inherited)]
[SerializeField, HideInInspector]
public FlowNode previousNode;
[Output(ShowBackingValue.Never, ConnectionType.Multiple, TypeConstraint.Inherited)]
[SerializeField, HideInInspector]
public FlowNode nextNode;
public override IEnumerable<FlowNode> PreviousNodes
{
get { yield return GetFlowNode("previousNodes"); }
}
public override IEnumerable<FlowNode> NextNodes
{
get { yield return GetFlowNode("nextNode"); }
}
}
}