fix:fix bug of runtime conditional runtime node

main
taoria 3 years ago
parent 9bff88d228
commit 032288c379
  1. 15
      TNodeCore/Runtime/RuntimeModels/ConditionalRuntimeNode.cs
  2. 1
      TNodeCore/Runtime/RuntimeModels/RuntimeNode.cs
  3. 4
      TNodeCore/Runtime/RuntimeModels/StaticGraph.cs
  4. 2
      Tests/StaticGraphTest.cs

@ -20,13 +20,9 @@ namespace TNodeCore.Runtime{
$" TransitionCondition found {transitionPort.Count()} output port with" + $" TransitionCondition found {transitionPort.Count()} output port with" +
$" type of TransitionCondition but totally {enumerable.Count()} output port found"); $" type of TransitionCondition but totally {enumerable.Count()} output port found");
} }
foreach (var port in transitionPort){ foreach (var port in transitionPort){
if(GetPortDirection(port)==Direction.Input) continue; if(GetPortDirection(port)==Direction.Input) continue;
var ids = OutputLinks.Where(x => x.outPort.portEntryName == port).Select(x => x.inPort.nodeDataId); _possibleTransition.Add(new Tuple<string, Func<TransitionCondition>>(port,() => (TransitionCondition)GetOutput(port)) );
var enumerable1 = ids as string[] ?? ids.ToArray();
if(enumerable1.FirstOrDefault()!=null)
_possibleTransition.Add(new Tuple<string, Func<TransitionCondition>>(enumerable1.FirstOrDefault(),() => (TransitionCondition)GetOutput(port)) );
} }
} }
else{ else{
@ -35,9 +31,11 @@ namespace TNodeCore.Runtime{
} }
public string[] GetConditionalNextIds(){ public string[] GetConditionalNextIds(){
var ports = _possibleTransition.Where(x => x.Item2().Condition); var ports = _possibleTransition.Where(x => x.Item2().Condition);
return ports.Select(x => x.Item1).ToArray(); var portNames = ports.Select(x => x.Item1);
//Search output links to found the link contains portNames as outport's name
var outputLinks = OutputLinks.Where(x => portNames.Contains(x.outPort.portEntryName));
return outputLinks.Select(x => x.inPort.nodeDataId).ToArray();
} }
public string GetNextNodeId(){ public string GetNextNodeId(){
@ -48,7 +46,8 @@ namespace TNodeCore.Runtime{
var compareTo = b.Item2.Priority.CompareTo(a.Item2.Priority); var compareTo = b.Item2.Priority.CompareTo(a.Item2.Priority);
return compareTo; return compareTo;
}); });
return possibleCondition.FirstOrDefault()?.Item1; var portName = possibleCondition.FirstOrDefault()?.Item1;
return OutputLinks.Where(x => x.outPort.portEntryName == portName).Select(x => x.inPort.nodeDataId).FirstOrDefault();
} }
} }

@ -18,6 +18,7 @@ namespace TNodeCore.Runtime{
//Cache node data type for fast access //Cache node data type for fast access
private readonly Type _type; private readonly Type _type;
public Type NodeType => _type; public Type NodeType => _type;
public Type GetElementTypeOfPort(string portName,bool multi = false){ public Type GetElementTypeOfPort(string portName,bool multi = false){
var type = _portAccessors[portName].Type; var type = _portAccessors[portName].Type;

@ -4,6 +4,7 @@ using System.Linq;
using TNode.TNodeCore.Runtime.Models; using TNode.TNodeCore.Runtime.Models;
using TNode.TNodeCore.Runtime.Tools; using TNode.TNodeCore.Runtime.Tools;
using TNodeCore.Runtime.Models; using TNodeCore.Runtime.Models;
using UnityEngine;
namespace TNodeCore.Runtime.RuntimeModels{ namespace TNodeCore.Runtime.RuntimeModels{
public class StaticGraph:IRuntimeNodeGraph{ public class StaticGraph:IRuntimeNodeGraph{
@ -17,8 +18,10 @@ namespace TNodeCore.Runtime.RuntimeModels{
var outNodeId = linkData.outPort.nodeDataId; var outNodeId = linkData.outPort.nodeDataId;
var outNode = _nodes[outNodeId]; var outNode = _nodes[outNodeId];
outNode.OutputLinks.Add(linkData); outNode.OutputLinks.Add(linkData);
var inNodeId = linkData.inPort.nodeDataId; var inNodeId = linkData.inPort.nodeDataId;
var inNode = _nodes[inNodeId]; var inNode = _nodes[inNodeId];
Debug.Log($"{inNode},{outNode}");
inNode.InputLinks.Add(linkData); inNode.InputLinks.Add(linkData);
} }
public StaticGraph(GraphData graphData){ public StaticGraph(GraphData graphData){
@ -45,6 +48,7 @@ namespace TNodeCore.Runtime.RuntimeModels{
} }
foreach (var link in links){ foreach (var link in links){
ModifyLinks(link); ModifyLinks(link);
} }
_graphTool = new GraphTool(this); _graphTool = new GraphTool(this);
_runtimeNodeEnumerator = _graphTool.BreathFirstSearch(); _runtimeNodeEnumerator = _graphTool.BreathFirstSearch();

@ -172,7 +172,7 @@ namespace Tests{
staticGraph.MoveNext(); staticGraph.MoveNext();
Assert.AreEqual(node3,staticGraph.CurrentNode()); Assert.AreEqual(node3,staticGraph.CurrentNode());
staticGraph.MoveNext(); staticGraph.MoveNext();
Assert.AreEqual(node3,staticGraph.CurrentNode()); Assert.AreEqual(node6,staticGraph.CurrentNode());
} }

Loading…
Cancel
Save