public Flow ForceDo(Func <bool> condition, Bvr bvr) { nodes.Add(new BvrNode() { condition = condition, forceRun = true, bvr = bvr }); return(this); }
public Node GetCurNode(HashSet <Flow> checkedFlows, Bvr curBvr) { Node GetNodeAvoidStackOverflow(int i) { if (nodes[i] is FlowNode flowNode) { // Avoides stack overflow if (checkedFlows.Contains(flowNode.flow)) { return(null); } if (nodes[i].condition()) { return(nodes[i]); } } else if (nodes[i].condition()) { return(nodes[i]); } return(null); } // When current Bvr is Waiting if (curBvr != null && curBvr.IsWait && curBvr.GetCurState() != null) { for (int i = 0; i < nodes.Count; i++) { if (nodes[i].forceRun) { var node = GetNodeAvoidStackOverflow(i); if (node != null) { return(node); } } } return(waitingNode); } // When current Bvr is not Waiting else { for (int i = 0; i < nodes.Count; i++) { var node = GetNodeAvoidStackOverflow(i); if (node != null) { return(node); } } return(null); } }