- ## 写在开始 考虑想尽量用配置文件的形式实现这种简易的节点编辑器,所以写了一套配置文件模板,然后写一个解析器将其解析成`ClearScript`支持的`C#`格式代码,在事件系统中执行 ```cs public enum PortType { Number, String, Bool } public class TriggerNode { public Guid Id { get; set; } public string Name { get; set; } public string Description { get; set; } public bool HasProcessRoute { get; set; } public Dictionary Inputs { get; set; } public Dictionary Outputs { get; set; } public int XLocation { get; set; } public int YLocation { get; set; } public string ScriptTemplate { get; set; } } public class Input { public PortType Type { get; set; } public Guid ConnectTo { get; set; } } public class Output { public PortType Type { get; set; } public Guid ConnectTo { get; set; } } ``` ## 考虑几种基本设计 - #### 与节点 用来计算两个布尔值的与运算 按照上面的格式应该写成下面这种yaml - ```yaml Id: xxx-xxx-xxx Name: "And" Description: "对两个参数进行与运算输出结果" HasProcessRoute: false Inputs: param1: Type: Bool ConnectTo: null param2: Type: Bool ConnectTo: null Outputs: param3: Type: Bool ConnectTo: null XLocation: null YLocation: null ScriptTemplate: "( {{param1}} && {{param2}} )" ``` #### 非节点 用来对一个布尔值进行非运算 ```yaml Id: xxx-xxx-xxx Name: "Not" Description: "对一个参数进行非运算输出结果" HasProcessRoute: false Inputs: param1: Type: Bool ConnectTo: null Outputs: param2: Type: Bool ConnectTo: null XLocation: null YLocation: null ScriptTemplate: "( !{{param1}})" ``` #### 大于节点 判断参数1是否大于参数2的逻辑运算 ```yaml Id: xxx-xxx-xxx Name: "BiggerThan" Description: "对两个参数进行大于运算输出结果" HasProcessRoute: false Inputs: param1: Type: Number ConnectTo: null param2: Type: Number ConnectTo: null Outputs: param3: Type: Bool ConnectTo: null XLocation: null YLocation: null ScriptTemplate: "( {{param1}} > {{param2}} )" ``` #### 大于等于节点 判断参数1是否大于参数2的逻辑运算 ```yaml Id: xxx-xxx-xxx Name: "BiggerEqual" Description: "对两个参数进行大于等于运算输出结果" HasProcessRoute: false Inputs: param1: Type: Number ConnectTo: null param2: Type: Number ConnectTo: null Outputs: param3: Type: Bool ConnectTo: null XLocation: null YLocation: null ScriptTemplate: "( {{param1}} >= {{param2}} )" ``` #### 通过暴露API获取某个数值节点 通过`ClearScript`暴露进模拟环境的接口,在这里调用,然后获取一个数值,这种接口本身就是Input,然后通过节点上的窗口选择获取什么参数,这个在原有的格式设定上就做不出来了,因为不包含Input,而源是自己在节点上配置的,所以应该写成下面这样, ```yaml Id: xxx-xxx-xxx Name: "GetAnyFromInterface" Description: "对两个参数进行大于等于运算输出结果" HasProcessRoute: false Options: - ShowName: 获取角色 ScriptName: GetCharactor Outputs: param3: Type: Bool ConnectTo: null XLocation: null YLocation: null ScriptTemplate: "( {{param1}} >= {{param2}} )" ```