从节点Model解耦出容器接口,重新设计了节点的保存、加载。

This commit is contained in:
fengjiayi
2024-12-24 22:23:53 +08:00
parent 949ac973bc
commit 5b0ba84fd6
30 changed files with 979 additions and 760 deletions

View File

@@ -12,7 +12,7 @@ namespace Serein.Library
/// <summary>
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
/// 节点基类(数据)
/// </summary>
[NodeProperty(ValuePath = NodeValuePath.None)]
public abstract partial class NodeModelBase : IDynamicFlowNode
@@ -69,6 +69,16 @@ namespace Serein.Library
public abstract partial class NodeModelBase : IDynamicFlowNode
{
/// <summary>
/// 是否为基础节点
/// </summary>
public virtual bool IsBase { get; } = false;
/// <summary>
/// 可以放置多少个节点
/// </summary>
public virtual int MaxChildrenCount { get; } = 0;
public NodeModelBase(IFlowEnvironment environment)
{
PreviousNodes = new Dictionary<ConnectionInvokeType, List<NodeModelBase>>();
@@ -78,21 +88,33 @@ namespace Serein.Library
PreviousNodes[ctType] = new List<NodeModelBase>();
SuccessorNodes[ctType] = new List<NodeModelBase>();
}
ChildrenNode = new List<NodeModelBase>();
DebugSetting = new NodeDebugSetting(this);
this.Env = environment;
}
/// <summary>
/// 不同分支的父节点
/// 不同分支的父节点(流程调用)
/// </summary>
public Dictionary<ConnectionInvokeType, List<NodeModelBase>> PreviousNodes { get; }
/// <summary>
/// 不同分支的子节点
/// 不同分支的子节点(流程调用)
/// </summary>
public Dictionary<ConnectionInvokeType, List<NodeModelBase>> SuccessorNodes { get; }
/// <summary>
/// 该节点的父级节点(容器)
/// </summary>
public NodeModelBase ParentNode { get; set; } = null;
/// <summary>
/// 该节点的子项节点(容器)
/// </summary>
public List<NodeModelBase> ChildrenNode { get; }
}
}

View File

@@ -164,6 +164,8 @@ namespace Serein.Library
IsProtectionParameter = this.MethodDetails.IsProtectionParameter,
IsInterrupt = this.DebugSetting.IsInterrupt,
IsEnable = this.DebugSetting.IsEnable,
ParentNodeGuid = ParentNode?.Guid,
ChildNodeGuids = ChildrenNode.Select(item => item.Guid).ToArray(),
};
nodeInfo.Position.X = Math.Round(nodeInfo.Position.X, 1);
nodeInfo.Position.Y = Math.Round(nodeInfo.Position.Y, 1);

View File

@@ -180,7 +180,7 @@ namespace Serein.Library
public override string ToString()
{
return $"[{this.Index}] {this.Name} : {this.ExplicitType.FullName} -> {this.DataType.FullName}";
return $"[{this.Index}] {this.Name} : {this.ExplicitType?.FullName} -> {this.DataType?.FullName}";
}
}

View File

@@ -230,8 +230,15 @@ namespace Serein.Library
/// </summary>
public ParameterData[] ParameterData { get; set; }
/// <summary>
/// 如果是区域控件,则会存在子项。
/// 父级节点Guid
/// </summary>
public string ParentNodeGuid{ get; set; }
/// <summary>
/// 如果是区域控件则会存在子项这里记录的是子项的Guid。
/// </summary>
public string[] ChildNodeGuids { get; set; }