public void BuildFacades() { if (facadePrefabs == null) return; Random.seed = System.Guid.NewGuid().GetHashCode(); facades = new List<BuildingFacade>(); facadePrefabScripts = new List<BuildingFacade>(); graph = GetComponent<Graph>(); List<Primitive> minimalCycles = graph.mainPrimitives.FindAll(p => p.type == Primitive.PrimitiveType.MinimalCycle); if (minimalCycles == null || minimalCycles.Count == 0) { Debug.Log("FacadeBuildet::Build() - No minimal cycles found!"); return; } //GameObject facadeStretchObj = Instantiate(facadeStretchPrefab); //facadeStretch = facadeStretchObj.GetComponentInChildren<BuildingFacade>(); //DestroyImmediate(facadeStretchObj); for (int i = 0; i < facadePrefabs.Count; i++) { GameObject facadeObj = Instantiate(facadePrefabs[i]); facadePrefabScripts.Add(facadeObj.GetComponentInChildren<BuildingFacade>()); DestroyImmediate(facadeObj); } UtilityTools.Helper.DestroyChildren(transform); for (int i = 0; i < minimalCycles.Count; i++) { //noiseCurrent = Random.Range(0f, 100f); noiseY = Random.Range(0f, 100f); noiseCurrent = 0f; Primitive primitiveCopy = new Primitive(minimalCycles[i]); if (inSet > 0f) { primitiveCopy.edges.ForEach((e) => e.Width += inSet); primitiveCopy.Process(); } List<Node> _nodes = primitiveCopy.nodes; nodes = new List<Node>(); foreach (var n in _nodes) { nodes.Add(new Node(n)); } primitiveCopy = new Primitive(minimalCycles[i]); primitiveCopy.edges.ForEach((e) => e.Width = roofAccentWidth + inSet); primitiveCopy.Process(false); _nodes = primitiveCopy.nodes; roofNodes = new List<Node>(); foreach (var n in _nodes) { roofNodes.Add(new Node(n)); } buildings = new List<Building>(); facadeParent = new GameObject("Facades" + (i + 1).ToString()); facadeParent.transform.SetParent(transform); facadeParent.transform.localPosition = Vector3.zero; facadeCounter = 0; for (int j = 0; j < nodes.Count; j++) { if (j == nodes.Count - 1) BuildFromToNode(nodes[j], nodes[0]); else BuildFromToNode(nodes[j], nodes[j + 1]); } GroupFacadesToBuildings(); } }