From 1e09675ef1e175a50ecd620e6c21745183f30c2e Mon Sep 17 00:00:00 2001
From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com>
Date: Fri, 14 Mar 2025 21:38:07 +0800
Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=8A=82=E7=82=B9=E8=83=BD?=
=?UTF-8?q?=E5=A4=9F=E8=87=AA=E5=AE=9A=E4=B9=89=E5=8F=98=E9=87=8F=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Library/FlowNode/NodeModelBaseFunc.cs | 2 +
Library/FlowNode/ParameterDetails.cs | 2 +-
Library/FlowNode/SereinProjectData.cs | 13 ++--
NodeFlow/Model/SingleScriptNode.cs | 55 ++++++++++----
Serein.Script/Node/AssignmentNode.cs | 9 ++-
Serein.Script/SereinScriptInterpreter.cs | 4 +-
Workbench/Themes/MethodDetailsControl.xaml | 74 +++++++++++++++++--
Workbench/Themes/MethodDetailsControl.xaml.cs | 31 +++++++-
.../Tool/Converters/EnumToBooleanConverter.cs | 27 +++++++
9 files changed, 188 insertions(+), 29 deletions(-)
create mode 100644 Workbench/Tool/Converters/EnumToBooleanConverter.cs
diff --git a/Library/FlowNode/NodeModelBaseFunc.cs b/Library/FlowNode/NodeModelBaseFunc.cs
index ff5c09c..d0a5a05 100644
--- a/Library/FlowNode/NodeModelBaseFunc.cs
+++ b/Library/FlowNode/NodeModelBaseFunc.cs
@@ -110,7 +110,9 @@ namespace Serein.Library
SourceNodeGuid = it.ArgDataSourceNodeGuid,
SourceType = it.ArgDataSourceType.ToString(),
State = it.IsExplicitData,
+ ArgName = it.Name,
Value = it.DataValue,
+
})
.ToArray();
}
diff --git a/Library/FlowNode/ParameterDetails.cs b/Library/FlowNode/ParameterDetails.cs
index f3065a5..9978424 100644
--- a/Library/FlowNode/ParameterDetails.cs
+++ b/Library/FlowNode/ParameterDetails.cs
@@ -81,7 +81,7 @@ namespace Serein.Library
///
/// 方法入参参数名称
///
- [PropertyInfo]
+ [PropertyInfo(IsNotification = true)]
private string _name ;
///
diff --git a/Library/FlowNode/SereinProjectData.cs b/Library/FlowNode/SereinProjectData.cs
index 4b7cd9b..c825c96 100644
--- a/Library/FlowNode/SereinProjectData.cs
+++ b/Library/FlowNode/SereinProjectData.cs
@@ -277,11 +277,13 @@ namespace Serein.Library
///
public class ParameterData
{
+
///
/// 参数类型,true时使用自定义的入参,false时由运行环境自动传参
///
public bool State { get; set; }
+
///
/// 参数来源节点
///
@@ -292,16 +294,17 @@ namespace Serein.Library
///
public string SourceType { get; set; }
+
+ ///
+ /// 参数名称
+ ///
+ public string ArgName { get; set; }
+
///
/// 自定义入参
///
public string Value { get; set; }
- ///
- /// 表达式相关节点的表达式内容
- ///
- // public string Expression { get; set; }
-
}
diff --git a/NodeFlow/Model/SingleScriptNode.cs b/NodeFlow/Model/SingleScriptNode.cs
index e0bd450..4152264 100644
--- a/NodeFlow/Model/SingleScriptNode.cs
+++ b/NodeFlow/Model/SingleScriptNode.cs
@@ -66,6 +66,7 @@ namespace Serein.NodeFlow.Model
}
}
+
public override void OnCreating()
{
MethodInfo? method = this.GetType().GetMethod(nameof(GetFlowApi));
@@ -115,6 +116,14 @@ namespace Serein.NodeFlow.Model
public override void LoadCustomData(NodeInfo nodeInfo)
{
this.Script = nodeInfo.CustomData?.Script ?? "";
+
+ // 更新变量名
+ for (int i = 0; i < Math.Min(this.MethodDetails.ParameterDetailss.Length, nodeInfo.ParameterData.Length); i++)
+ {
+ this.MethodDetails.ParameterDetailss[i].Name = nodeInfo.ParameterData[i].ArgName;
+ }
+
+
}
///
@@ -124,12 +133,30 @@ namespace Serein.NodeFlow.Model
{
try
{
+ HashSet varNames = new HashSet();
+ foreach (var pd in MethodDetails.ParameterDetailss)
+ {
+ if (varNames.Contains(pd.Name))
+ {
+ throw new Exception($"脚本节点重复的变量名称:{pd.Name} - {Guid}");
+ }
+ varNames.Add(pd.Name);
+ }
+
+ //StringBuilder sb = new StringBuilder();
+ //foreach (var pd in MethodDetails.ParameterDetailss)
+ //{
+ // sb.AppendLine($"let {pd.Name};"); // 提前声明这些变量
+ //}
+ //sb.Append(Script);
+ //var p = new SereinScriptParser(sb.ToString());
var p = new SereinScriptParser(Script);
- mainNode = p.Parse();
+ mainNode = p.Parse(); // 开始解析
}
catch (Exception ex)
{
SereinEnv.WriteLine(InfoType.ERROR, ex.ToString());
+
}
}
@@ -141,21 +168,23 @@ namespace Serein.NodeFlow.Model
public override async Task