/** Starts a path specified by PathTypesDemo.activeDemo */ public void DemoPath() { Path p = null; if (activeDemo == 0) { p = ABPath.Construct(start.position, end.position, OnPathComplete); } else if (activeDemo == 1) { MultiTargetPath mp = MultiTargetPath.Construct(multipoints.ToArray(), end.position, null, OnPathComplete); p = mp; } else if (activeDemo == 2) { RandomPath rp = RandomPath.Construct(start.position, searchLength, OnPathComplete); rp.spread = spread; rp.aimStrength = aimStrength; rp.aim = end.position; rp.replaceChance = replaceChance; p = rp; } else if (activeDemo == 3) { FleePath fp = FleePath.Construct(start.position, end.position, searchLength, OnPathComplete); fp.aimStrength = aimStrength; fp.replaceChance = replaceChance; fp.spread = spread; p = fp; } else if (activeDemo == 4) { ConstantPath constPath = ConstantPath.Construct(end.position, searchLength, OnPathComplete); p = constPath; } else if (activeDemo == 5) { FloodPath fp = FloodPath.Construct(end.position, null); lastFlood = fp; p = fp; } else if (activeDemo == 6 && lastFlood != null) { FloodPathTracer fp = FloodPathTracer.Construct(end.position, lastFlood, OnPathComplete); p = fp; } if (p != null) { AstarPath.StartPath(p); lastPath = p; } }
public static AGAstarPath CreateRandom(Vector3 start, int length, System.Action <RandomPath> config) { var path = RandomPath.Construct(start, length, null); if (config != null) { config(path); } return(new AGAstarPath(path)); }
public void CalculatePath() { if (moveMode != MoveMode.follow && moveMode != MoveMode.followTo && moveMode != MoveMode.fleeContinuously) { path = null; } // do this to avoid instant finishing if the action had been called before and if the actor didn't move Vector3 targetPos; if (target.Value != null) { targetPos = target.Value.transform.position + targetPosition.Value; } else { targetPos = targetPosition.Value; } if (path != null && path.vectorPath.Count > 0 && (moveMode == MoveMode.follow || moveMode == MoveMode.followTo)) { p = ABPath.Construct(nextPos, targetPos, OnPathComplete); } // create path from next waypoint (to avoid jitter due to sudden direction change on path update) to closest/first node else if (moveMode != MoveMode.fleeContinuously && moveMode != MoveMode.flee && moveMode != MoveMode.randomPath) { p = ABPath.Construct(go.transform.position, targetPos, OnPathComplete); } // create path from current position to closest/first node else if (moveMode == MoveMode.fleeContinuously || moveMode == MoveMode.flee) { if (AstarPath.HasPro) { p = FleePath.Construct(go.transform.position, targetPos, (int)(length.Value * 1000f), OnPathComplete); } // create path from current position to closest/first node else { p = ABPath.Construct(go.transform.position, go.transform.position + (go.transform.position - targetPos).normalized * length.Value, OnPathComplete); } } else if (moveMode == MoveMode.randomPath) { if (AstarPath.HasPro) { p = RandomPath.Construct(go.transform.position, (int)(length.Value * 1000f), OnPathComplete); } // create path from current position to closest/first node else // random direction! This is just a cheap immitation of the real randompath! { p = ABPath.Construct(go.transform.position, go.transform.position + new Vector3(UnityEngine.Random.Range(-1f, 1f), 0f, UnityEngine.Random.Range(-1f, 1f)).normalized *length.Value, OnPathComplete); } } AstarPath.StartPath(p); //make the actual vector3 path which we'll use lateron. time = Time.time; return; }
// Token: 0x060029EC RID: 10732 RVA: 0x001C21BC File Offset: 0x001C03BC private void DemoPath() { Path path = null; switch (this.activeDemo) { case PathTypesDemo.DemoMode.ABPath: path = ABPath.Construct(this.start.position, this.end.position, new OnPathDelegate(this.OnPathComplete)); break; case PathTypesDemo.DemoMode.MultiTargetPath: base.StartCoroutine(this.DemoMultiTargetPath()); break; case PathTypesDemo.DemoMode.RandomPath: { RandomPath randomPath = RandomPath.Construct(this.start.position, this.searchLength, new OnPathDelegate(this.OnPathComplete)); randomPath.spread = this.spread; randomPath.aimStrength = this.aimStrength; randomPath.aim = this.end.position; path = randomPath; break; } case PathTypesDemo.DemoMode.FleePath: { FleePath fleePath = FleePath.Construct(this.start.position, this.end.position, this.searchLength, new OnPathDelegate(this.OnPathComplete)); fleePath.aimStrength = this.aimStrength; fleePath.spread = this.spread; path = fleePath; break; } case PathTypesDemo.DemoMode.ConstantPath: base.StartCoroutine(this.DemoConstantPath()); break; case PathTypesDemo.DemoMode.FloodPath: path = (this.lastFloodPath = FloodPath.Construct(this.end.position, null)); break; case PathTypesDemo.DemoMode.FloodPathTracer: if (this.lastFloodPath != null) { path = FloodPathTracer.Construct(this.end.position, this.lastFloodPath, new OnPathDelegate(this.OnPathComplete)); } break; } if (path != null) { AstarPath.StartPath(path, false); this.lastPath = path; } }
/// <summary>Starts a path specified by PathTypesDemo.activeDemo</summary> void DemoPath() { Path p = null; switch (activeDemo) { case DemoMode.ABPath: p = ABPath.Construct(start.position, end.position, OnPathComplete); break; case DemoMode.MultiTargetPath: StartCoroutine(DemoMultiTargetPath()); break; case DemoMode.ConstantPath: StartCoroutine(DemoConstantPath()); break; case DemoMode.RandomPath: RandomPath rp = RandomPath.Construct(start.position, searchLength, OnPathComplete); rp.spread = spread; rp.aimStrength = aimStrength; rp.aim = end.position; p = rp; break; case DemoMode.FleePath: FleePath fp = FleePath.Construct(start.position, end.position, searchLength, OnPathComplete); fp.aimStrength = aimStrength; fp.spread = spread; p = fp; break; case DemoMode.FloodPath: p = lastFloodPath = FloodPath.Construct(end.position, null); break; case DemoMode.FloodPathTracer: if (lastFloodPath != null) { FloodPathTracer fpt = FloodPathTracer.Construct(end.position, lastFloodPath, OnPathComplete); p = fpt; } break; } if (p != null) { AstarPath.StartPath(p); lastPath = p; } }
public void SetWander() { if (Wandering || (_stuckNode != null && _stuckNode == CurrentGraphNode)) { return; } Wandering = true; _waitingForPathCalculation = true; var rp = RandomPath.Construct(Tr.position, 7000); rp.traversalProvider = _traversal; _seeker.StartPath(rp); }
private void findNewRandomPoint() { // Call a RandomPath call like this, assumes that a Seeker is attached to the GameObject // The path will be returned when the path is over a specified length (or more accurately when the traversal cost is greater than a specified value). // A score of 1000 is approximately equal to the cost of moving one world unit. int theGScoreToStopAt = (int)seekingDistance * 1000; // Create a path object RandomPath path = RandomPath.Construct(transform.position, theGScoreToStopAt); // Determines the variation in path length that is allowed path.spread = 15000; // Start the path and return the result to MyCompleteFunction (which is a function you have to define, the name can of course be changed) seeker.StartPath(path, OnPathComplete); }
/** Starts a path specified by PathTypesDemo.activeDemo */ void DemoPath() { Path p = null; if (activeDemo == DemoMode.ABPath) { p = ABPath.Construct(start.position, end.position, OnPathComplete); if (agents != null && agents.Length > 0) { List <Vector3> pts = Pathfinding.Util.ListPool <Vector3> .Claim(agents.Length); Vector3 avg = Vector3.zero; for (int i = 0; i < agents.Length; i++) { pts.Add(agents[i].transform.position); avg += pts[i]; } avg /= pts.Count; for (int i = 0; i < agents.Length; i++) { pts[i] -= avg; } Pathfinding.PathUtilities.GetPointsAroundPoint(end.position, AstarPath.active.graphs[0] as IRaycastableGraph, pts, 0, 0.2f); for (int i = 0; i < agents.Length; i++) { if (agents[i] == null) { continue; } agents[i].target.position = pts[i]; agents[i].UpdatePath(); } } } else if (activeDemo == DemoMode.MultiTargetPath) { MultiTargetPath mp = MultiTargetPath.Construct(multipoints.ToArray(), end.position, null, OnPathComplete); p = mp; } else if (activeDemo == DemoMode.RandomPath) { RandomPath rp = RandomPath.Construct(start.position, searchLength, OnPathComplete); rp.spread = spread; rp.aimStrength = aimStrength; rp.aim = end.position; p = rp; } else if (activeDemo == DemoMode.FleePath) { FleePath fp = FleePath.Construct(start.position, end.position, searchLength, OnPathComplete); fp.aimStrength = aimStrength; fp.spread = spread; p = fp; } else if (activeDemo == DemoMode.ConstantPath) { StartCoroutine(CalculateConstantPath()); p = null; } else if (activeDemo == DemoMode.FloodPath) { FloodPath fp = FloodPath.Construct(end.position, null); lastFlood = fp; p = fp; } else if (activeDemo == DemoMode.FloodPathTracer && lastFlood != null) { FloodPathTracer fp = FloodPathTracer.Construct(end.position, lastFlood, OnPathComplete); p = fp; } if (p != null) { AstarPath.StartPath(p); lastPath = p; } }
public void DemoPath() { Path path = null; if (this.activeDemo == 0) { path = ABPath.Construct(this.start.position, this.end.position, new OnPathDelegate(this.OnPathComplete)); if (this.agents != null && this.agents.Length > 0) { List <Vector3> list = ListPool <Vector3> .Claim(this.agents.Length); Vector3 vector = Vector3.zero; for (int i = 0; i < this.agents.Length; i++) { list.Add(this.agents[i].transform.position); vector += list[i]; } vector /= (float)list.Count; for (int j = 0; j < this.agents.Length; j++) { List <Vector3> list2; int index; (list2 = list)[index = j] = list2[index] - vector; } PathUtilities.GetPointsAroundPoint(this.end.position, AstarPath.active.graphs[0] as IRaycastableGraph, list, 0f, 0.2f); for (int k = 0; k < this.agents.Length; k++) { if (!(this.agents[k] == null)) { this.agents[k].target.position = list[k]; this.agents[k].UpdatePath(); } } } } else if (this.activeDemo == 1) { MultiTargetPath multiTargetPath = MultiTargetPath.Construct(this.multipoints.ToArray(), this.end.position, null, new OnPathDelegate(this.OnPathComplete)); path = multiTargetPath; } else if (this.activeDemo == 2) { RandomPath randomPath = RandomPath.Construct(this.start.position, this.searchLength, new OnPathDelegate(this.OnPathComplete)); randomPath.spread = this.spread; randomPath.aimStrength = this.aimStrength; randomPath.aim = this.end.position; path = randomPath; } else if (this.activeDemo == 3) { FleePath fleePath = FleePath.Construct(this.start.position, this.end.position, this.searchLength, new OnPathDelegate(this.OnPathComplete)); fleePath.aimStrength = this.aimStrength; fleePath.spread = this.spread; path = fleePath; } else if (this.activeDemo == 4) { base.StartCoroutine(this.Constant()); path = null; } else if (this.activeDemo == 5) { FloodPath floodPath = FloodPath.Construct(this.end.position, null); this.lastFlood = floodPath; path = floodPath; } else if (this.activeDemo == 6 && this.lastFlood != null) { FloodPathTracer floodPathTracer = FloodPathTracer.Construct(this.end.position, this.lastFlood, new OnPathDelegate(this.OnPathComplete)); path = floodPathTracer; } if (path != null) { AstarPath.StartPath(path, false); this.lastPath = path; } }
IEnumerator UpdatePath() { while (true) { if (curState == State.Searching) { ai.isStopped = false; //this.GetComponent<RichAI>().enabled = false; if (target != null) { if (enemyMode == Mode.Assault) { if (hasDetectedPlayer == false) { if (LastPlayerSighting.position != previousSighting) { personalLastSighting = LastPlayerSighting.position; } Collider[] colliders = Physics.OverlapSphere(this.transform.position, detectionRadius); foreach (Collider collider in colliders) { RunDetection(collider); } previousSighting = LastPlayerSighting.position; if (Time.time > nextSearchTime && (ai.reachedEndOfPath || !ai.hasPath)) { trueTarget = null; RandomPath path = RandomPath.Construct(this.transform.position, 20); path.spread = 5; this.GetComponent <Seeker>().StartPath(path); } } else { trueTarget = target; } } else if (enemyMode == Mode.Avoid) { { if (Time.time > nextRunawayTime && Vector3.Distance(this.transform.position, target.transform.position) < 20f) { //Debug.Log("STAY AWAY FROM ME!"); Vector3 targetPosition = target.position; int stopGScore = 1000; FleePath path = FleePath.Construct(this.transform.position, targetPosition, stopGScore); path.spread = 4000; path.aimStrength = 1; Seeker seeker = this.GetComponent <Seeker>(); seeker.StartPath(path, GetEscapePath); nextRunawayTime = Time.time * 1.01f; } } } } } if (curState == State.Attacking) { ai.isStopped = true; //var targetRotation = Quaternion.LookRotation(target.position - this.transform.position, Vector3.up); //this.transform.rotation = Quaternion.Slerp(this.transform.rotation, targetRotation, Time.deltaTime * 2.0f); this.GetComponent <EnemyAI>().enabled = true; } yield return(new WaitForEndOfFrame()); } }
public static AGAstarPath CreateRandom(Vector3 start, int length) { return(new AGAstarPath(RandomPath.Construct(start, length, null))); }