using System.Collections.Generic; using Bolt; namespace Game { [UnitTitle("空")] [UnitSubtitle("NodeEmpty")] [UnitCategory("Game-Logic")] public class NodeEmpty : NodeDefault { } [UnitTitle("布尔判断")] [UnitSubtitle("NodeIf")] [UnitCategory("Game-Logic")] public class NodeIf : Unit { public ControlInput input; public ControlOutput outputTrue; public ControlOutput outputFalse; public ValueInput condition; protected override void Definition() { input = ControlInput("in", Enter); outputTrue = ControlOutput("True"); outputFalse = ControlOutput("False"); condition = ValueInput("condition"); } public ControlOutput Enter(Flow flow) { if (flow.GetValue(condition)) return outputTrue; else { return outputFalse; } } } [UnitTitle("随机检测[0-1]")] [UnitSubtitle("NodeIf")] [UnitCategory("Game-Logic")] public class NodeRandomCheck : Unit { public ControlInput input; public ControlOutput outputTrue; public ControlOutput outputFalse; public ValueInput condition; protected override void Definition() { input = ControlInput("in", Enter); outputTrue = ControlOutput("True"); outputFalse = ControlOutput("False"); condition = ValueInput("condition", 0); } public ControlOutput Enter(Flow flow) { if (GameRandom.Roll(flow.GetValue(condition))) { return outputTrue; } else { return outputFalse; } } } [UnitTitle("实体排序")] [UnitSubtitle("NodeSort")] [UnitCategory("Game-Logic")] public class NodeSort : Unit { public ControlInput input; //初始进入 public ControlOutput output; //最终退出 public ControlInput loop; //循环入口 public ControlOutput comp; //循环出口 public ValueInput list; public ValueInput compResult; public ValueOutput result; public ValueOutput left; public ValueOutput right; private List entityList; private int tempI; private int tempJ; protected override void Definition() { input = ControlInput("in", Enter); output = ControlOutput("out"); loop = ControlInput("loop", Loop); comp = ControlOutput("comp"); list = ValueInput>("list"); compResult = ValueInput("compResult"); result = ValueOutput>("result"); left = ValueOutput("left"); right = ValueOutput("right"); } public ControlOutput Enter(Flow flow) { entityList = flow.GetValue>(list); tempI = 0; tempJ = 0; return comp; } public ControlOutput Loop(Flow flow) { tempJ++; if (tempJ >= entityList.Count) { tempI++; if (tempI >= entityList.Count) { flow.SetValue(result, entityList); return output; } tempJ = tempI; return comp; } var compValue = flow.GetValue(compResult); if (compValue > 0) { Swap(); } flow.SetValue(left, entityList[tempI]); flow.SetValue(right, entityList[tempJ]); return comp; } public void Swap() { var temp = entityList[tempI]; entityList[tempI] = entityList[tempJ]; entityList[tempJ] = temp; } } [UnitTitle("列表内容交换")] [UnitSubtitle("NodeSwap")] [UnitCategory("Game-Logic")] public class NodeSwap : NodeDefault { public ValueInput list; public ValueInput indexI; public ValueInput indexJ; protected override void Def() { list = ValueInput>("list"); indexI = ValueInput("indexI"); indexJ = ValueInput("indexJ"); } protected override void Run(Flow flow) { var l = flow.GetValue>(list); var i = flow.GetValue(indexI); var j = flow.GetValue(indexJ); var temp = l[i]; l[i] = l[j]; l[j] = temp; } } }