Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    public void Walk()
    {
        NavQuad startNavQuad = Services.MapManager.GetNavQuadClosestToPosition(startingLocation);
        NavQuad endNavQuad   = Services.MapManager.GetNavQuadClosestToPosition(endLocation);

        path = AStarSearch.ShortestPath(startNavQuad, endNavQuad, false);
    }