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(); }
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; }
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); }
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); }
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); }
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(); } } }
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); }
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; } } }
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; } }