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.
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.
We will implement a function to evaluate a location given its height and its surrounding points:
public static float GetHeightQuality (Vector3 location, Vector3[] surroundings) { // next steps }
float maxQuality = 1f; float minQuality = -1f; float minHeight = Mathf.Infinity; float maxHeight = Mathf.NegativeInfinity; float height = location.y;
foreach (Vector3 s in surroundings) { if (s.y > maxHeight) maxHeight = s.y; if (s.y < minHeight) minHeight = s.y; }
float quality = (height-minHeight) / (maxHeight - minHeight); quality *= (maxQuality - minQuality); quality += minQuality; return quality;