// Generate a graph itself. public static void GenerateIcosahedron(out MapNode[] vertices, out MapTriangle[] triangles) { vertices = new MapNode[MapConfiguration.ICOSAHEDRON_VERTICES]; var t = (1.0f + Mathf.Sqrt(5.0f)) / 2.0f; vertices[0] = new MapNode(new Vector3(-1, t, 0).normalized); vertices[1] = new MapNode(new Vector3(1, t, 0).normalized); vertices[2] = new MapNode(new Vector3(-1, -t, 0).normalized); vertices[3] = new MapNode(new Vector3(1, -t, 0).normalized); vertices[4] = new MapNode(new Vector3(0, -1, t).normalized); vertices[5] = new MapNode(new Vector3(0, 1, t).normalized); vertices[6] = new MapNode(new Vector3(0, -1, -t).normalized); vertices[7] = new MapNode(new Vector3(0, 1, -t).normalized); vertices[8] = new MapNode(new Vector3(t, 0, -1).normalized); vertices[9] = new MapNode(new Vector3(t, 0, 1).normalized); vertices[10] = new MapNode(new Vector3(-t, 0, -1).normalized); vertices[11] = new MapNode(new Vector3(-t, 0, 1).normalized); vertices[0].AddNeighbour(ref vertices[1]); vertices[0].AddNeighbour(ref vertices[5]); vertices[0].AddNeighbour(ref vertices[11]); vertices[0].AddNeighbour(ref vertices[10]); vertices[0].AddNeighbour(ref vertices[7]); vertices[3].AddNeighbour(ref vertices[8]); vertices[3].AddNeighbour(ref vertices[9]); vertices[3].AddNeighbour(ref vertices[4]); vertices[3].AddNeighbour(ref vertices[2]); vertices[3].AddNeighbour(ref vertices[6]); vertices[8].AddNeighbour(ref vertices[7]); vertices[8].AddNeighbour(ref vertices[1]); vertices[7].AddNeighbour(ref vertices[1]); vertices[9].AddNeighbour(ref vertices[1]); vertices[9].AddNeighbour(ref vertices[5]); vertices[5].AddNeighbour(ref vertices[1]); vertices[9].AddNeighbour(ref vertices[8]); vertices[4].AddNeighbour(ref vertices[11]); vertices[4].AddNeighbour(ref vertices[5]); vertices[11].AddNeighbour(ref vertices[5]); vertices[9].AddNeighbour(ref vertices[4]); vertices[2].AddNeighbour(ref vertices[11]); vertices[2].AddNeighbour(ref vertices[10]); vertices[11].AddNeighbour(ref vertices[10]); vertices[4].AddNeighbour(ref vertices[2]); vertices[6].AddNeighbour(ref vertices[7]); vertices[6].AddNeighbour(ref vertices[10]); vertices[7].AddNeighbour(ref vertices[10]); vertices[8].AddNeighbour(ref vertices[6]); vertices[6].AddNeighbour(ref vertices[2]); // Generating the triangles: triangles = new MapTriangle[MapConfiguration.ICOSAHEDRON_FACES]; triangles[0] = new MapTriangle(vertices[0], vertices[1], vertices[7]); triangles[1] = new MapTriangle(vertices[1], vertices[0], vertices[5]); triangles[2] = new MapTriangle(vertices[7], vertices[10], vertices[0]); triangles[3] = new MapTriangle(vertices[0], vertices[10], vertices[11]); triangles[4] = new MapTriangle(vertices[0], vertices[11], vertices[5]); triangles[5] = new MapTriangle(vertices[6], vertices[8], vertices[3]); triangles[6] = new MapTriangle(vertices[3], vertices[8], vertices[9]); triangles[7] = new MapTriangle(vertices[3], vertices[9], vertices[4]); triangles[8] = new MapTriangle(vertices[3], vertices[4], vertices[2]); triangles[9] = new MapTriangle(vertices[3], vertices[2], vertices[6]); triangles[10] = new MapTriangle(vertices[7], vertices[8], vertices[6]); triangles[11] = new MapTriangle(vertices[8], vertices[7], vertices[1]); triangles[12] = new MapTriangle(vertices[8], vertices[1], vertices[9]); triangles[13] = new MapTriangle(vertices[9], vertices[1], vertices[5]); triangles[14] = new MapTriangle(vertices[4], vertices[9], vertices[5]); triangles[15] = new MapTriangle(vertices[11], vertices[4], vertices[5]); triangles[16] = new MapTriangle(vertices[4], vertices[11], vertices[2]); triangles[17] = new MapTriangle(vertices[10], vertices[2], vertices[11]); triangles[18] = new MapTriangle(vertices[2], vertices[10], vertices[6]); triangles[19] = new MapTriangle(vertices[10], vertices[7], vertices[6]); Debug.Log($"MapGenerator : Generated Icosahedron with {MapConfiguration.ICOSAHEDRON_FACES} triangles and {MapConfiguration.ICOSAHEDRON_VERTICES} nodes."); }
private static Vector3 GetPositionBetweenNodes(MapNode a, MapNode b) { return((a.position + (b.position - a.position) / 2.0f).normalized); }
public bool IsNeighbourWith(MapNode neighbour) { return(neighbours.Contains(neighbour)); }