public AivoTreeStatus Tick(float timeTick, T context) { var nodesToSearch = _nodes; int i = 0; sucesses = 0; failures = 0; foreach (TreeNode <T> node in nodesToSearch) { if (indicesToSkip.Contains(i)) { ++i; continue; } AivoTreeStatus status = node.Tick(timeTick, context); if (status == AivoTreeStatus.Failure) { //indicesToSkip.Add(i); ++failures; } if (status == AivoTreeStatus.Success) { //indicesToSkip.Add(i); ++sucesses; } ++i; //Termination Conditions if (sucesses >= sucessesNeeded) { UnityEngine.Debug.Log("Parallel Node Succeeded. Successes: " + sucesses + " and Failures: " + failures + ". Successes Needed: " + sucessesNeeded); Reset(); return(AivoTreeStatus.Success); } if (failures >= failuresNeeded || indicesToSkip.Count >= nodesToSearch.Length) { UnityEngine.Debug.Log("Parallel Node Failed. Successes: " + sucesses + " and Failures: " + failures); Reset(); return(AivoTreeStatus.Failure); } } UnityEngine.Debug.Log("Parallel Node is Running. Successes: " + sucesses + " and Failures: " + failures + ". Successes Needed: " + sucessesNeeded); return(AivoTreeStatus.Running); }
public LogNode(bool needLog, string logMsg = "node tick", AivoTreeStatus targetStatus = AivoTreeStatus.Success) { this.needLog = needLog; this.logMsg = logMsg; this.targetStatus = targetStatus; }
public AlwaysNode(TreeNode <T> node, AivoTreeStatus targetStatus) { this.node = node; this.targetStatus = targetStatus; }