public AITraversalWaitPoint GetEntryPointNear(Vector3 pos)
    {
        Vector3 position1 = this.GetClosestEntry(pos).get_position();
        Vector3 position2 = this.GetFarthestEntry(pos).get_position();

        BaseEntity[]         baseEntityArray    = new BaseEntity[1];
        AITraversalWaitPoint traversalWaitPoint = (AITraversalWaitPoint)null;
        float num1 = 0.0f;

        foreach (AITraversalWaitPoint waitPoint in this.waitPoints)
        {
            if (!waitPoint.Occupied())
            {
                Vector3 position3 = ((Component)waitPoint).get_transform().get_position();
                float   num2      = Vector3.Distance(position1, position3);
                if ((double)Vector3.Distance(position2, position3) >= (double)num2)
                {
                    float num3 = (float)((1.0 - (double)Mathf.InverseLerp(0.0f, 20f, Vector3.Distance(position3, pos))) * 100.0);
                    if ((double)num3 > (double)num1)
                    {
                        num1 = num3;
                        traversalWaitPoint = waitPoint;
                    }
                }
            }
        }
        return(traversalWaitPoint);
    }
Esempio n. 2
0
    public AITraversalWaitPoint GetEntryPointNear(Vector3 pos)
    {
        Vector3 position  = GetClosestEntry(pos).position;
        Vector3 position2 = GetFarthestEntry(pos).position;

        BaseEntity[]         array2 = new BaseEntity[1];
        AITraversalWaitPoint result = null;
        float num = 0f;

        AITraversalWaitPoint[] array = waitPoints;
        foreach (AITraversalWaitPoint aITraversalWaitPoint in array)
        {
            if (aITraversalWaitPoint.Occupied())
            {
                continue;
            }
            Vector3 position3 = aITraversalWaitPoint.transform.position;
            float   num2      = Vector3.Distance(position, position3);
            if (!(Vector3.Distance(position2, position3) < num2))
            {
                float value = Vector3.Distance(position3, pos);
                float num3  = (1f - Mathf.InverseLerp(0f, 20f, value)) * 100f;
                if (num3 > num)
                {
                    num    = num3;
                    result = aITraversalWaitPoint;
                }
            }
        }
        return(result);
    }
Esempio n. 3
0
    public AITraversalWaitPoint GetEntryPointNear(Vector3 pos)
    {
        Vector3 closestEntry  = this.GetClosestEntry(pos).position;
        Vector3 farthestEntry = this.GetFarthestEntry(pos).position;

        BaseEntity[]         baseEntityArray      = new BaseEntity[1];
        AITraversalWaitPoint aITraversalWaitPoint = null;
        float single = 0f;

        AITraversalWaitPoint[] aITraversalWaitPointArray = this.waitPoints;
        for (int i = 0; i < (int)aITraversalWaitPointArray.Length; i++)
        {
            AITraversalWaitPoint aITraversalWaitPoint1 = aITraversalWaitPointArray[i];
            if (!aITraversalWaitPoint1.Occupied())
            {
                Vector3 vector3 = aITraversalWaitPoint1.transform.position;
                float   single1 = Vector3.Distance(closestEntry, vector3);
                if (Vector3.Distance(farthestEntry, vector3) >= single1)
                {
                    float single2 = Vector3.Distance(vector3, pos);
                    float single3 = (1f - Mathf.InverseLerp(0f, 20f, single2)) * 100f;
                    if (single3 > single)
                    {
                        single = single3;
                        aITraversalWaitPoint = aITraversalWaitPoint1;
                    }
                }
            }
        }
        return(aITraversalWaitPoint);
    }
        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. 5
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;
 }