예제 #1
0
 private static bool EvaluateFlanking(
     CoverContext c,
     CoverPoint option,
     Vector3 dirCover,
     Vector3 dirDanger,
     float directness,
     out float result)
 {
     result = 0.0f;
     if ((double)directness > -0.5 && (double)directness < 0.5)
     {
         float num = 1f - Mathf.Abs(directness);
         if ((double)num > (double)c.BestFlankValue)
         {
             if (ConVar.AI.npc_cover_use_path_distance && c.Self.IsNavRunning() && Object.op_Inequality((Object)c.Self.AttackTarget, (Object)null))
             {
                 NPCPlayerApex self = c.Self as NPCPlayerApex;
                 if (Object.op_Inequality((Object)self, (Object)null) && !self.PathDistanceIsValid(c.Self.AttackTarget.ServerPosition, option.Position, false))
                 {
                     return(false);
                 }
             }
             c.BestFlankValue = 0.1f - Mathf.Abs(num);
             c.BestFlankCP    = option;
             result           = c.BestFlankValue;
             return(true);
         }
     }
     return(false);
 }
        public static bool Evaluate(CoverContext c, CoverPoint option)
        {
            if (c == null || c.Self.AttackTarget == null)
            {
                return(false);
            }
            NPCPlayerApex entity = c.Self.Entity as NPCPlayerApex;

            if (entity == null)
            {
                return(false);
            }
            return(entity.PathDistanceIsValid(option.Position, c.DangerPoint, true));
        }
예제 #3
0
        private static bool EvaluateAdvancement(
            CoverContext c,
            CoverPoint option,
            Vector3 dirCover,
            Vector3 dirDanger,
            float directness,
            out float result)
        {
            result = 0.0f;
            if ((double)directness > 0.5 && (double)((Vector3) ref dirCover).get_sqrMagnitude() > (double)((Vector3) ref dirDanger).get_sqrMagnitude() || (double)directness < 0.5)
            {
                return(false);
            }
            float sqrMagnitude = ((Vector3) ref dirCover).get_sqrMagnitude();

            if ((double)sqrMagnitude > (double)((Vector3) ref dirDanger).get_sqrMagnitude())
            {
                return(false);
            }
            float num = directness;

            if ((double)num <= (double)c.BestAdvanceValue)
            {
                return(false);
            }
            if (ConVar.AI.npc_cover_use_path_distance && c.Self.IsNavRunning() && Object.op_Inequality((Object)c.Self.AttackTarget, (Object)null))
            {
                NPCPlayerApex self = c.Self as NPCPlayerApex;
                if (Object.op_Inequality((Object)self, (Object)null) && !self.PathDistanceIsValid(c.Self.AttackTarget.ServerPosition, option.Position, false))
                {
                    return(false);
                }
            }
            Vector3 vector3 = Vector3.op_Subtraction(option.Position, c.DangerPoint);

            if ((double)((Vector3) ref vector3).get_sqrMagnitude() < (double)sqrMagnitude)
            {
                num *= 0.9f;
            }
            c.BestAdvanceValue = num;
            c.BestAdvanceCP    = option;
            result             = c.BestAdvanceValue;
            return(true);
        }
예제 #4
0
 private static bool EvaluateAdvancement(CoverContext c, CoverPoint option, Vector3 dirCover, Vector3 dirDanger, float directness, out float result)
 {
     result = 0f;
     if (directness > 0.5f && dirCover.sqrMagnitude > dirDanger.sqrMagnitude)
     {
         return(false);
     }
     if (directness >= 0.5f)
     {
         float single = dirCover.sqrMagnitude;
         if (single > dirDanger.sqrMagnitude)
         {
             return(false);
         }
         float single1 = directness;
         if (single1 > c.BestAdvanceValue)
         {
             if (ConVar.AI.npc_cover_use_path_distance && c.Self.IsNavRunning() && c.Self.AttackTarget != null)
             {
                 NPCPlayerApex self = c.Self as NPCPlayerApex;
                 if (self != null && !self.PathDistanceIsValid(c.Self.AttackTarget.ServerPosition, option.Position, false))
                 {
                     return(false);
                 }
             }
             if ((option.Position - c.DangerPoint).sqrMagnitude < single)
             {
                 single1 *= 0.9f;
             }
             c.BestAdvanceValue = single1;
             c.BestAdvanceCP    = option;
             result             = c.BestAdvanceValue;
             return(true);
         }
     }
     return(false);
 }
예제 #5
0
 private static bool EvaluateFlanking(CoverContext c, CoverPoint option, Vector3 dirCover, Vector3 dirDanger, float directness, out float result)
 {
     result = 0f;
     if (directness > -0.5f && directness < 0.5f)
     {
         float single = 1f - Mathf.Abs(directness);
         if (single > c.BestFlankValue)
         {
             if (ConVar.AI.npc_cover_use_path_distance && c.Self.IsNavRunning() && c.Self.AttackTarget != null)
             {
                 NPCPlayerApex self = c.Self as NPCPlayerApex;
                 if (self != null && !self.PathDistanceIsValid(c.Self.AttackTarget.ServerPosition, option.Position, false))
                 {
                     return(false);
                 }
             }
             c.BestFlankValue = 0.1f - Mathf.Abs(single);
             c.BestFlankCP    = option;
             result           = c.BestFlankValue;
             return(true);
         }
     }
     return(false);
 }