public static void NavigateToPatrolLoc(NPCHumanContext c)
        {
            if (Object.op_Equality((Object)c.AiLocationManager, (Object)null) || !IsHumanRoamReady.Evaluate(c) || !c.AIAgent.IsNavRunning())
            {
                return;
            }
            PathInterestNode patrolPointInRange = c.AiLocationManager.GetRandomPatrolPointInRange(c.Position, c.AIAgent.GetStats.MinRoamRange, c.AIAgent.GetStats.MaxRoamRange, c.CurrentPatrolPoint);

            if (Object.op_Inequality((Object)patrolPointInRange, (Object)null))
            {
                Vector3 position = ((Component)patrolPointInRange).get_transform().get_position();
                if ((double)((Vector3) ref position).get_sqrMagnitude() > 0.0)
                {
                    HumanNavigateToOperator.MakeUnstuck(c);
                    c.Human.Destination = ((Component)patrolPointInRange).get_transform().get_position();
                    c.Human.SetTargetPathStatus(0.05f);
                    c.CurrentPatrolPoint = patrolPointInRange;
                }
            }
            HumanNavigateToOperator.UpdateRoamTime(c);
            if (c.Human.OnChatter == null)
            {
                return;
            }
            c.Human.OnChatter();
        }
Ejemplo n.º 2
0
    public PathInterestNode GetRandomInterestNodeAwayFrom(Vector3 from, float dist = 10f)
    {
        PathInterestNode pathInterestNode = (PathInterestNode)null;

        for (int index = 0; Object.op_Equality((Object)pathInterestNode, (Object)null) && index < 20; ++index)
        {
            pathInterestNode = this.interestZones[Random.Range(0, this.interestZones.Count)];
            Vector3 vector3 = Vector3.op_Subtraction(((Component)pathInterestNode).get_transform().get_position(), from);
            if ((double)((Vector3) ref vector3).get_sqrMagnitude() < 100.0)
            {
                pathInterestNode = (PathInterestNode)null;
            }
Ejemplo n.º 3
0
        public static bool Evaluate(NPCHumanContext c)
        {
            if (c.AiLocationManager == null)
            {
                return(false);
            }
            PathInterestNode firstPatrolPointInRange = c.AiLocationManager.GetFirstPatrolPointInRange(c.Position, c.AIAgent.GetStats.MinRoamRange, c.AIAgent.GetStats.MaxRoamRange);

            if (firstPatrolPointInRange == null)
            {
                return(false);
            }
            return(Time.time >= firstPatrolPointInRange.NextVisitTime);
        }
        public static bool Evaluate(NPCHumanContext c)
        {
            if (!Object.op_Inequality((Object)c.AiLocationManager, (Object)null))
            {
                return(false);
            }
            PathInterestNode patrolPointInRange = c.AiLocationManager.GetFirstPatrolPointInRange(c.Position, c.AIAgent.GetStats.MinRoamRange, c.AIAgent.GetStats.MaxRoamRange);

            if (Object.op_Inequality((Object)patrolPointInRange, (Object)null))
            {
                return((double)Time.get_time() >= (double)patrolPointInRange.NextVisitTime);
            }
            return(false);
        }
        public PathInterestNode GetRandomPatrolPointInRange(
            Vector3 from,
            float minRange = 10f,
            float maxRange = 100f,
            PathInterestNode currentPatrolPoint = null)
        {
            if (Object.op_Equality((Object)this.PatrolPointGroup, (Object)null))
            {
                return((PathInterestNode)null);
            }
            if (this.patrolPoints == null)
            {
                this.patrolPoints = new List <PathInterestNode>((IEnumerable <PathInterestNode>)((Component)this.PatrolPointGroup).GetComponentsInChildren <PathInterestNode>());
            }
            if (this.patrolPoints.Count == 0)
            {
                return((PathInterestNode)null);
            }
            float num1 = minRange * minRange;
            float num2 = maxRange * maxRange;

            for (int index = 0; index < 20; ++index)
            {
                PathInterestNode patrolPoint = this.patrolPoints[Random.Range(0, this.patrolPoints.Count)];
                if ((double)Time.get_time() < (double)patrolPoint.NextVisitTime)
                {
                    if (Object.op_Equality((Object)patrolPoint, (Object)currentPatrolPoint))
                    {
                        return((PathInterestNode)null);
                    }
                }
                else
                {
                    Vector3 vector3      = Vector3.op_Subtraction(((Component)patrolPoint).get_transform().get_position(), from);
                    float   sqrMagnitude = ((Vector3) ref vector3).get_sqrMagnitude();
                    if ((double)sqrMagnitude >= (double)num1 && (double)sqrMagnitude <= (double)num2)
                    {
                        patrolPoint.NextVisitTime = Time.get_time() + ConVar.AI.npc_patrol_point_cooldown;
                        return(patrolPoint);
                    }
                }
            }
            return((PathInterestNode)null);
        }
Ejemplo n.º 6
0
    public PathInterestNode GetRandomInterestNodeAwayFrom(Vector3 from, float dist = 10f)
    {
        PathInterestNode item = null;

        for (int i = 0; item == null && i < 20; i++)
        {
            item = this.interestZones[UnityEngine.Random.Range(0, this.interestZones.Count)];
            if ((item.transform.position - from).sqrMagnitude >= 100f)
            {
                break;
            }
            item = null;
        }
        if (item == null)
        {
            item = this.interestZones[0];
        }
        return(item);
    }
Ejemplo n.º 7
0
        public PathInterestNode GetFirstPatrolPointInRange(Vector3 from, float minRange = 10f, float maxRange = 100f)
        {
            PathInterestNode pathInterestNode;

            if (this.PatrolPointGroup == null)
            {
                return(null);
            }
            if (this.patrolPoints == null)
            {
                this.patrolPoints = new List <PathInterestNode>(this.PatrolPointGroup.GetComponentsInChildren <PathInterestNode>());
            }
            if (this.patrolPoints.Count == 0)
            {
                return(null);
            }
            float single  = minRange * minRange;
            float single1 = maxRange * maxRange;

            List <PathInterestNode> .Enumerator enumerator = this.patrolPoints.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    PathInterestNode current = enumerator.Current;
                    float            single2 = (current.transform.position - from).sqrMagnitude;
                    if (single2 < single || single2 > single1)
                    {
                        continue;
                    }
                    pathInterestNode = current;
                    return(pathInterestNode);
                }
                return(null);
            }
            finally
            {
                ((IDisposable)enumerator).Dispose();
            }
            return(pathInterestNode);
        }
Ejemplo n.º 8
0
    public PathInterestNode GetRandomInterestNodeAwayFrom(Vector3 from, float dist = 10f)
    {
        PathInterestNode pathInterestNode = null;
        int num = 0;

        while (pathInterestNode == null && num < 20)
        {
            pathInterestNode = interestZones[Random.Range(0, interestZones.Count)];
            if (!((pathInterestNode.transform.position - from).sqrMagnitude < 100f))
            {
                break;
            }
            pathInterestNode = null;
            num++;
        }
        if (pathInterestNode == null)
        {
            pathInterestNode = interestZones[0];
        }
        return(pathInterestNode);
    }
 public static void NavigateToPatrolLoc(NPCHumanContext c)
 {
     if (c.AiLocationManager == null)
     {
         return;
     }
     if (IsHumanRoamReady.Evaluate(c) && c.AIAgent.IsNavRunning())
     {
         PathInterestNode randomPatrolPointInRange = c.AiLocationManager.GetRandomPatrolPointInRange(c.Position, c.AIAgent.GetStats.MinRoamRange, c.AIAgent.GetStats.MaxRoamRange, c.CurrentPatrolPoint);
         if (randomPatrolPointInRange != null && randomPatrolPointInRange.transform.position.sqrMagnitude > 0f)
         {
             HumanNavigateToOperator.MakeUnstuck(c);
             c.Human.Destination = randomPatrolPointInRange.transform.position;
             c.Human.SetTargetPathStatus(0.05f);
             c.CurrentPatrolPoint = randomPatrolPointInRange;
         }
         HumanNavigateToOperator.UpdateRoamTime(c);
         if (c.Human.OnChatter != null)
         {
             c.Human.OnChatter();
         }
     }
 }
Ejemplo n.º 10
0
        public PathInterestNode GetRandomPatrolPointInRange(Vector3 from, float minRange = 10f, float maxRange = 100f, PathInterestNode currentPatrolPoint = null)
        {
            if (this.PatrolPointGroup == null)
            {
                return(null);
            }
            if (this.patrolPoints == null)
            {
                this.patrolPoints = new List <PathInterestNode>(this.PatrolPointGroup.GetComponentsInChildren <PathInterestNode>());
            }
            if (this.patrolPoints.Count == 0)
            {
                return(null);
            }
            float single  = minRange * minRange;
            float single1 = maxRange * maxRange;

            for (int i = 0; i < 20; i++)
            {
                PathInterestNode item = this.patrolPoints[UnityEngine.Random.Range(0, this.patrolPoints.Count)];
                if (UnityEngine.Time.time >= item.NextVisitTime)
                {
                    float single2 = (item.transform.position - from).sqrMagnitude;
                    if (single2 >= single && single2 <= single1)
                    {
                        item.NextVisitTime = UnityEngine.Time.time + ConVar.AI.npc_patrol_point_cooldown;
                        return(item);
                    }
                }
                else if (item == currentPatrolPoint)
                {
                    return(null);
                }
            }
            return(null);
        }
Ejemplo n.º 11
0
    public void UpdateMovement_Patrol()
    {
        float single;
        Stack <BasePathNode> basePathNodes;

        if (this.patrolPath == null)
        {
            return;
        }
        if (UnityEngine.Time.time < this.nextPatrolTime)
        {
            return;
        }
        this.nextPatrolTime = UnityEngine.Time.time + 20f;
        if (this.HasPath() && !this.IsAtFinalDestination())
        {
            return;
        }
        if (Interface.CallHook("OnBradleyApcPatrol", this) != null)
        {
            return;
        }
        PathInterestNode    randomInterestNodeAwayFrom = this.patrolPath.GetRandomInterestNodeAwayFrom(base.transform.position, 10f);
        BasePathNode        closestToPoint             = this.patrolPath.GetClosestToPoint(randomInterestNodeAwayFrom.transform.position);
        BasePathNode        item = null;
        bool                flag = false;
        List <BasePathNode> list = Facepunch.Pool.GetList <BasePathNode>();

        if (!this.GetEngagementPath(ref list))
        {
            item = this.patrolPath.GetClosestToPoint(base.transform.position);
        }
        else
        {
            flag = true;
            item = list[list.Count - 1];
        }
        if (Vector3.Distance(this.finalDestination, closestToPoint.transform.position) > 2f)
        {
            if (closestToPoint == item)
            {
                this.currentPath.Clear();
                this.currentPath.Add(closestToPoint.transform.position);
                this.currentPathIndex = -1;
                this.pathLooping      = false;
                this.finalDestination = closestToPoint.transform.position;
                return;
            }
            if (AStarPath.FindPath(item, closestToPoint, out basePathNodes, out single))
            {
                this.currentPath.Clear();
                if (flag)
                {
                    for (int i = 0; i < list.Count - 1; i++)
                    {
                        this.currentPath.Add(list[i].transform.position);
                    }
                }
                foreach (BasePathNode basePathNode in basePathNodes)
                {
                    this.currentPath.Add(basePathNode.transform.position);
                }
                this.currentPathIndex = -1;
                this.pathLooping      = false;
                this.finalDestination = closestToPoint.transform.position;
            }
        }
    }
Ejemplo n.º 12
0
    public void UpdateMovement_Patrol()
    {
        if (patrolPath == null || UnityEngine.Time.time < nextPatrolTime)
        {
            return;
        }
        nextPatrolTime = UnityEngine.Time.time + 20f;
        if ((HasPath() && !IsAtFinalDestination()) || Interface.CallHook("OnBradleyApcPatrol", this) != null)
        {
            return;
        }
        PathInterestNode    randomInterestNodeAwayFrom = patrolPath.GetRandomInterestNodeAwayFrom(base.transform.position);
        BasePathNode        closestToPoint             = patrolPath.GetClosestToPoint(randomInterestNodeAwayFrom.transform.position);
        BasePathNode        basePathNode = null;
        bool                flag         = false;
        List <BasePathNode> nodes        = Facepunch.Pool.GetList <BasePathNode>();

        if (GetEngagementPath(ref nodes))
        {
            flag         = true;
            basePathNode = nodes[nodes.Count - 1];
        }
        else
        {
            basePathNode = patrolPath.GetClosestToPoint(base.transform.position);
        }
        if (!(Vector3.Distance(finalDestination, closestToPoint.transform.position) > 2f))
        {
            return;
        }
        if (closestToPoint == basePathNode)
        {
            currentPath.Clear();
            currentPath.Add(closestToPoint.transform.position);
            currentPathIndex = -1;
            pathLooping      = false;
            finalDestination = closestToPoint.transform.position;
        }
        else
        {
            Stack <BasePathNode> path;
            float pathCost;
            if (!AStarPath.FindPath(basePathNode, closestToPoint, out path, out pathCost))
            {
                return;
            }
            currentPath.Clear();
            if (flag)
            {
                for (int i = 0; i < nodes.Count - 1; i++)
                {
                    currentPath.Add(nodes[i].transform.position);
                }
            }
            foreach (BasePathNode item in path)
            {
                currentPath.Add(item.transform.position);
            }
            currentPathIndex = -1;
            pathLooping      = false;
            finalDestination = closestToPoint.transform.position;
        }
    }