public override void StateThink(float delta)
        {
            Vector3 vector3;
            Vector3 vector31;

            base.StateThink(delta);
            if (this.area)
            {
                if (this.isTraversing)
                {
                    this.area.SetBusyFor(delta * 2f);
                }
                else if (!this.area.CanTraverse(base.GetEntity()))
                {
                    AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(base.GetEntity().ServerPosition);
                    if (entryPointNear)
                    {
                        entryPointNear.Occupy(1f);
                        base.GetEntity().SetStationaryAimPoint(this.area.GetClosestEntry(base.GetEntity().ServerPosition).position);
                    }
                    vector3 = (entryPointNear == null ? base.GetEntity().ServerPosition : entryPointNear.transform.position);
                    base.GetEntity().SetDestination(vector3);
                    this.waiting      = true;
                    this.isTraversing = false;
                }
                else
                {
                    this.waiting      = false;
                    this.isTraversing = true;
                    AITraversalWaitPoint aITraversalWaitPoint = this.area.GetEntryPointNear(this.area.GetFarthestEntry(base.GetEntity().ServerPosition).position);
                    if (aITraversalWaitPoint)
                    {
                        aITraversalWaitPoint.Occupy(delta * 2f);
                    }
                    vector31 = (aITraversalWaitPoint == null ? this.desiredDestination : aITraversalWaitPoint.transform.position);
                    base.GetEntity().SetDestination(vector31);
                    this.area.SetBusyFor(delta * 2f);
                }
            }
            if (this.isTraversing && Vector3.Distance(base.GetEntity().ServerPosition, base.GetEntity().finalDestination) < 0.25f)
            {
                this.finished     = true;
                this.isTraversing = false;
                this.waiting      = false;
            }
        }
Esempio n. 2
0
 public override void StateThink(float delta)
 {
     base.StateThink(delta);
     if (Object.op_Implicit((Object)this.area))
     {
         if (this.isTraversing)
         {
             this.area.SetBusyFor(delta * 2f);
         }
         else if (this.area.CanTraverse((BaseEntity)this.GetEntity()))
         {
             this.waiting      = false;
             this.isTraversing = true;
             AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(this.area.GetFarthestEntry(this.GetEntity().ServerPosition).get_position());
             if (Object.op_Implicit((Object)entryPointNear))
             {
                 entryPointNear.Occupy(delta * 2f);
             }
             this.GetEntity().SetDestination(Object.op_Equality((Object)entryPointNear, (Object)null) ? this.desiredDestination : ((Component)entryPointNear).get_transform().get_position());
             this.area.SetBusyFor(delta * 2f);
         }
         else
         {
             AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(this.GetEntity().ServerPosition);
             if (Object.op_Implicit((Object)entryPointNear))
             {
                 entryPointNear.Occupy(1f);
                 this.GetEntity().SetStationaryAimPoint(this.area.GetClosestEntry(this.GetEntity().ServerPosition).get_position());
             }
             this.GetEntity().SetDestination(Object.op_Equality((Object)entryPointNear, (Object)null) ? this.GetEntity().ServerPosition : ((Component)entryPointNear).get_transform().get_position());
             this.waiting      = true;
             this.isTraversing = false;
         }
     }
     if (!this.isTraversing || (double)Vector3.Distance(this.GetEntity().ServerPosition, this.GetEntity().finalDestination) >= 0.25)
     {
         return;
     }
     this.finished     = true;
     this.isTraversing = false;
     this.waiting      = false;
 }