public void Start() { // Calculate the closest bound. float maximumDistance = calculatePosition(uExtent, -vExtent).magnitude; for (int count = 0; count < numberOfCircles; count++) { Circle circle = new Circle(); circle.position = Random.insideUnitCircle * (maximumDistance - circleRadiusMaximum); circle.radius = Random.Range(circleRadiusMinimum, circleRadiusMaximum); circles.Add(circle); } // Shuffle the list of coordinates. List <Coordinate> coordinates = new List <Coordinate>(); for (int v = -vExtent; v <= vExtent; v++) { for (int u = -uExtent; u <= uExtent; u++) { coordinates.Add(new Coordinate(u, v)); } } ListRandom.shuffle(coordinates); // Place tiles. foreach (Coordinate coordinate in coordinates) { Vector3 position = calculatePosition(coordinate.u, coordinate.v); Quaternion rotation = Quaternion.identity; position.y = calculateHeight(coordinate.u, coordinate.v); if (accept(position)) { HexTile hexTile = Instantiate(selectHexTile(coordinate.u, coordinate.v), position, rotation, transform); hexTile.transform.localScale = new Vector3(scale, scale, scale); hexTile.name = "HexTile " + coordinate.u + " " + coordinate.v; hexTiles.Add(coordinate, hexTile); } } // Make borders. for (int count = 0; count < borderWidth; count++) { HashSet <Coordinate> borderCoordinates = new HashSet <Coordinate>(); foreach (Coordinate coordinate in hexTiles.Keys) { borderCoordinates.UnionWith(calculateBorder(coordinate.u, coordinate.v)); } foreach (Coordinate borderCoordinate in borderCoordinates) { Vector3 position = calculatePosition(borderCoordinate.u, borderCoordinate.v); Quaternion rotation = Quaternion.identity; position.y = calculateHeight(borderCoordinate.u, borderCoordinate.v); HexTile hexTile = Instantiate(selectBorderHexTile(borderCoordinate.u, borderCoordinate.v), position, rotation, transform); hexTile.transform.localScale = new Vector3(scale, scale, scale); hexTile.name = "Border HexTile " + borderCoordinate.u + " " + borderCoordinate.v; hexTile.border = true; hexTiles.Add(borderCoordinate, hexTile); } } // Build surface. generateSurface(); }