Analyzing waypoints by height

This recipe lets us evaluate a waypoint according to its position. Strategically speaking, lower positions are at a disadvantage. In this case, we will use a flexible algorithm to get the quality of a waypoint, given the heights of its surroundings.

Getting ready

This recipe is simple enough, so there is no extra content to be aware of. The algorithm is flexible enough to receive a list of positions, which is given by the waypoint's neighbors or just the complete graph of waypoints. The surroundings heuristic is kept outside for our perusal and it gives the game's specific design.

How to do it…

We will implement a function to evaluate a location given its height and its surrounding points:

  1. Declare the function for evaluating the quality:
    public static float GetHeightQuality (Vector3 location, Vector3[] surroundings)
    {
        // next steps
    }
  2. Initialize the variables for handling the computation:
    float maxQuality = 1f;
    float minQuality = -1f;
    float minHeight = Mathf.Infinity;
    float maxHeight = Mathf.NegativeInfinity;
    float height = location.y;
  3. Traverse the surroundings in order to find the maximum and minimum height:
    foreach (Vector3 s in surroundings)
    {
        if (s.y > maxHeight)
            maxHeight = s.y;
        if (s.y < minHeight)
            minHeight = s.y;
    }
  4. Compute the quality in the given range:
    float quality = (height-minHeight) / (maxHeight - minHeight);
    quality *= (maxQuality - minQuality);
    quality += minQuality;
    return quality;

How it works…

We traverse the list of surroundings to find the maximum and minimum width and then compute the location value in the range of -1, 1. We could change this range to meet our game's design, or invert the importance of the height in the formula.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.47.218