Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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;
             }
         }
     }
 }