public Vector3 GetNextWaypoint(WaypointIterator iterator) { var atArrayStart = iterator.index == 0; var atEndOfArray = iterator.index == waypoints.Count - 1; if (pathIsRingLoop && atEndOfArray) { iterator.index = 0; } else if (!pathIsRingLoop && atEndOfArray) { iterator.returning = true; iterator.index -= 1; } else if (!pathIsRingLoop && iterator.returning && atArrayStart) { iterator.returning = false; iterator.index += 1; } else if (!pathIsRingLoop && iterator.returning) { iterator.index -= 1; } else { iterator.index += 1; } if (waypoints[iterator.index].pause > 0f) { iterator.pause = waypoints[iterator.index].pause; } return(waypoints[iterator.index].point + transform.position); }
private void Start() { character = GetComponent <Character>(); Health = GetComponent <Health>(); Health.onDeathListeners += OnDeath; player = FindObjectOfType <Player>(); weaponSystem = GetComponent <WeaponSystem>(); currentWeaponRange = weaponSystem.CurrentWepaon.GetAttackRange(); originalPosition = transform.position; if (patrolPath) { iterator = patrolPath.GetNewIterator(); state = States.Patroling; character.SetTarget(patrolPath.GetFirstWaypoint()); Patrol(); } }
public bool AtWaypoint(WaypointIterator iterator, Vector3 agentPosition) { // We don't care about the y value, that is handled by nav mesh well enough agentPosition.y = waypoints[iterator.index].point.y; return(Vector3.Distance(agentPosition, waypoints[iterator.index].point + transform.position) <= precesionThreshold); }