public void TickPlan() { if (this.PlannerContext.get_PlanState() != 1) { return; } if (this.PlannerContext.get_CurrentTask() == null) { this.PlannerContext.set_CurrentTask(this.PlannerContext.get_HtnPlan().Pop()); } else if (this.PlannerContext.get_CurrentTask().get_State() == 2) { if (this.PlannerContext.get_HtnPlan().Count > 0) { this.PlannerContext.set_CurrentTask(this.PlannerContext.get_HtnPlan().Pop()); } else { this.CompletePlan(); this.Think(); return; } } if (!this.PlannerContext.get_CurrentTask().ValidatePreconditions(this.PlannerContext)) { this.AbortPlan(); this.Think(); } else { if (this.PlannerContext.get_CurrentTask() == null) { return; } if (this.PlannerContext.get_CurrentTask().get_State() == null) { if ((double)TaskQualifier.TestPreconditions((ITask)this.PlannerContext.get_CurrentTask(), this.PlannerContext) <= 0.0) { this.PlannerContext.get_CurrentTask().set_State((PrimitiveTaskStateType)3); this.AbortPlan(); this.Think(); return; } this.PlannerContext.get_CurrentTask().set_State((PrimitiveTaskStateType)1); using (List <IOperator> .Enumerator enumerator = this.PlannerContext.get_CurrentTask().get_Operators().GetEnumerator()) { while (enumerator.MoveNext()) { ((IAction)enumerator.Current).Execute((IAIContext)this.PlannerContext); } } } int num = 0; using (List <IOperator> .Enumerator enumerator = this.PlannerContext.get_CurrentTask().get_Operators().GetEnumerator()) { while (enumerator.MoveNext()) { OperatorStateType operatorStateType = enumerator.Current.Tick(this.PlannerContext, this.PlannerContext.get_CurrentTask()); if (operatorStateType == 3) { this.PlannerContext.get_CurrentTask().set_State((PrimitiveTaskStateType)3); this.AbortPlan(); this.Think(); return; } if (operatorStateType == 2) { ++num; } } } if (num < this.PlannerContext.get_CurrentTask().get_Operators().Count) { return; } this.PlannerContext.get_CurrentTask().set_State((PrimitiveTaskStateType)2); } }
public void TickPlan() { if (this.PlannerContext.PlanState == PlanStateType.Running) { if (this.PlannerContext.CurrentTask == null) { this.PlannerContext.CurrentTask = this.PlannerContext.HtnPlan.Pop(); } else if (this.PlannerContext.CurrentTask.State == PrimitiveTaskStateType.Complete) { if (this.PlannerContext.HtnPlan.Count <= 0) { this.CompletePlan(); this.Think(); return; } this.PlannerContext.CurrentTask = this.PlannerContext.HtnPlan.Pop(); } if (!this.PlannerContext.CurrentTask.ValidatePreconditions(this.PlannerContext)) { this.AbortPlan(); this.Think(); return; } if (this.PlannerContext.CurrentTask != null) { if (this.PlannerContext.CurrentTask.State == PrimitiveTaskStateType.NotStarted) { if (TaskQualifier.TestPreconditions(this.PlannerContext.CurrentTask, this.PlannerContext) <= 0f) { this.PlannerContext.CurrentTask.State = PrimitiveTaskStateType.Aborted; this.AbortPlan(); this.Think(); return; } this.PlannerContext.CurrentTask.State = PrimitiveTaskStateType.Running; foreach (IOperator @operator in this.PlannerContext.CurrentTask.Operators) { @operator.Execute(this.PlannerContext); } } int num = 0; foreach (IOperator operator1 in this.PlannerContext.CurrentTask.Operators) { OperatorStateType operatorStateType = operator1.Tick(this.PlannerContext, this.PlannerContext.CurrentTask); if (operatorStateType != OperatorStateType.Aborted) { if (operatorStateType != OperatorStateType.Complete) { continue; } num++; } else { this.PlannerContext.CurrentTask.State = PrimitiveTaskStateType.Aborted; this.AbortPlan(); this.Think(); return; } } if (num >= this.PlannerContext.CurrentTask.Operators.Count) { this.PlannerContext.CurrentTask.State = PrimitiveTaskStateType.Complete; } } } }