feature:Add a type of transition port that could transfer data to next node

main
taoria 3 years ago
parent 032288c379
commit a8ed2ff94d
  1. 3
      Samples/Nodes/CheckSizeNode.cs
  2. 11
      TNodeCore/Runtime/Models/ConditionalNode.cs
  3. 13
      TNodeCore/Runtime/RuntimeModels/ConditionalRuntimeNode.cs
  4. 3
      TNodeCore/Runtime/RuntimeModels/StaticGraph.cs
  5. 3
      Tests/StaticGraphTest.cs

@ -1,5 +1,4 @@
using TNode.TNodeCore.Runtime.Models;
using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Attributes.Ports;
using TNodeCore.Runtime.Models;

@ -1,9 +1,6 @@
using TNodeCore.Runtime;
using TNodeCore.Runtime.Attributes.Ports;
using TNodeCore.Runtime.Models;
using Unity.Plastic.Newtonsoft.Json.Serialization;
using Unity.Plastic.Newtonsoft.Json.Serialization;
namespace TNode.TNodeCore.Runtime.Models{
namespace TNodeCore.Runtime.Models{
public class ConditionalNode:NodeData{
}
@ -25,6 +22,10 @@ namespace TNode.TNodeCore.Runtime.Models{
public object GetValue(){
return DataFunc.Invoke();
}
public static implicit operator T(TransitionCondition<T> condition){
return condition.DataFunc.Invoke();
}
}
public interface IBaseTransition{
public bool Condition{ get; set; }

@ -1,18 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using TNode.TNodeCore.Runtime.Models;
using TNodeCore.Runtime.Models;
using UnityEngine;
namespace TNodeCore.Runtime{
public class ConditionalRuntimeNode:RuntimeNode{
private readonly List<Tuple<string,Func<TransitionCondition>>> _possibleTransition;
private readonly List<Tuple<string,Func<IBaseTransition>>> _possibleTransition;
public ConditionalRuntimeNode(NodeData nodeData) : base(nodeData){
if (nodeData is ConditionalNode conditionalNode){
var transitionPort = GetPortsOfType<TransitionCondition>();
_possibleTransition = new List<Tuple<string,Func<TransitionCondition>>>();
var transitionPort = GetPortsOfType<IBaseTransition>();
_possibleTransition = new List<Tuple<string,Func<IBaseTransition>>>();
var allOutput = GetPortsOfType<object>().Where(x => GetPortDirection(x) == Direction.Output);
var enumerable = allOutput as string[] ?? allOutput.ToArray();
if (enumerable.Count() != transitionPort.Length){
@ -22,7 +21,7 @@ namespace TNodeCore.Runtime{
}
foreach (var port in transitionPort){
if(GetPortDirection(port)==Direction.Input) continue;
_possibleTransition.Add(new Tuple<string, Func<TransitionCondition>>(port,() => (TransitionCondition)GetOutput(port)) );
_possibleTransition.Add(new Tuple<string, Func<IBaseTransition>>(port,() => (IBaseTransition)GetOutput(port)) );
}
}
else{
@ -39,8 +38,8 @@ namespace TNodeCore.Runtime{
}
public string GetNextNodeId(){
List<Tuple<string,TransitionCondition>> possibleCondition = _possibleTransition
.Select(x=>new Tuple<string,TransitionCondition>(x.Item1,x.Item2()))
List<Tuple<string,IBaseTransition>> possibleCondition = _possibleTransition
.Select(x=>new Tuple<string,IBaseTransition>(x.Item1,x.Item2()))
.Where(x=>x.Item2.Condition).ToList();
possibleCondition.Sort((a, b) => {
var compareTo = b.Item2.Priority.CompareTo(a.Item2.Priority);

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using TNode.TNodeCore.Runtime.Models;
using TNode.TNodeCore.Runtime.Tools;
using TNodeCore.Runtime.Models;
using UnityEngine;
@ -29,8 +28,6 @@ namespace TNodeCore.Runtime.RuntimeModels{
var nodes = graphData.NodeDictionary.Values.ToList();
var links = graphData.NodeLinks;
_nodes = new Dictionary<string, RuntimeNode>();
foreach (var nodeData in nodes){
if(_nodes.ContainsKey(nodeData.id)) continue;

@ -1,13 +1,12 @@
using System.Linq;
using NUnit.Framework;
using TNode.TNodeCore.Runtime.Models;
using TNodeCore.Editor.Tools.NodeCreator;
using TNodeCore.Runtime;
using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Attributes.Ports;
using TNodeCore.Runtime.Models;
using TNodeCore.Runtime.RuntimeModels;
using UnityEditor.VersionControl;
using UnityEngine;
namespace Tests{

Loading…
Cancel
Save