public void CalculatePath() { Vector3 resultantForce = Vector3.zero; foreach (Attractor attractor in Services.BuildingManager.Attractors) { if (attractor.IsOn) { Vector3 differenceVector = attractor.transform.position - transform.position; Vector3 differenceDirection = differenceVector.normalized; float distance = Mathf.Max(differenceVector.magnitude, 0.1f); Vector3 forceVector = differenceDirection * attractor.AttractiveForce * (1 / Mathf.Pow(distance, 0.25f)); resultantForce += forceVector; Debug.Log("adding force " + resultantForce); } } Vector3 targetPos = transform.position + resultantForce; targetPos = new Vector3( Mathf.Clamp(targetPos.x, 0, Services.MapManager.mapLength), targetPos.y, Mathf.Clamp(targetPos.z, 0, Services.MapManager.mapWidth)); speed = resultantForce.magnitude * baseSpeed; path = AStarSearch.ShortestPath( Services.MapManager.GetNavQuadClosestToPosition(transform.position), Services.MapManager.GetNavQuadClosestToPosition(targetPos), false); Debug.Log("speed is " + speed + "\n target is " + targetPos); }
public void Walk() { NavQuad startNavQuad = Services.MapManager.GetNavQuadClosestToPosition(startingLocation); NavQuad endNavQuad = Services.MapManager.GetNavQuadClosestToPosition(endLocation); path = AStarSearch.ShortestPath(startNavQuad, endNavQuad, false); }