/// <summary> /// Get the all the materials from the road network nodes /// </summary> /// <param name="baseobject">The parent object</param> /// <returns>The array of all the materials</returns> private List <Material> FindAllMaterials(GameObject baseobject) { List <Material> materials = new List <Material>(); RoadBuilder rb = baseobject.GetComponent <RoadBuilder>(); foreach (MaterialFrequency mf in rb.Details) { if (!materials.Contains(mf.Material)) { materials.Add(mf.Material); } } Transform[] allChildren = baseobject.GetComponentsInChildren <Transform>(true); foreach (Transform child in allChildren) { OverridableMaterialFrequency omf = child.GetComponent <OverridableMaterialFrequency>(); if (omf != null) { foreach (MaterialFrequency mf in omf.Details) { if (!materials.Contains(mf.Material)) { materials.Add(mf.Material); } } } } return(materials); }
/// <summary> /// Add the Material Frequency overridables /// </summary> public void AddOverridableMaterialsDetails() { gameObject.AddComponent <OverridableMaterialFrequency>(); OverridableMaterialFrequency omf = gameObject.GetComponent <OverridableMaterialFrequency>(); RoadNetworkLayout rnl = gameObject.GetComponentInParent <RoadNetworkLayout>(); omf.PopulateDefaultMaterials(rnl); Details.Modified = true; }
/// <summary> /// Add all of the materials from the children /// </summary> /// <param name="baseobject">The parent object</param> private void AddAllChildrenMaterials(GameObject baseobject) { Transform[] allChildren = baseobject.GetComponentsInChildren <Transform>(true); foreach (Transform child in allChildren) { OverridableMaterialFrequency omf = child.GetComponent <OverridableMaterialFrequency>(); if (omf != null) { foreach (MaterialFrequency mf in omf.Details) { if (!_meshMaterialsTriangles.ContainsKey(mf.Material.name)) { _meshMaterialsTriangles.Add(mf.Material.name, new List <int>()); } } } } }
/// <summary> /// Extrude the road out, by creating a new node /// </summary> /// <returns>The newly created road section</returns> public GameObject ExtrudeRoad() { Details.CompressRoads(); Details.Modified = true; float roadAngle = GetCurrentAngle() + (float)(Math.PI / 2); if (Details.Union != UNION_TYPE.END) { roadAngle += (float)(Math.PI / 2); } Vector3 pos = MathsHelper.OffSetVector(transform.position, roadAngle, 100); GameObject newNode = RoadNetworkNodeHelper.CreateBasicNode(pos, RoadConstructorHelper.GetUniqueRoadName(gameObject), gameObject); GameObject rnnB = gameObject; RoadNetworkLayout.AddRoadToNode(newNode.GetComponent <RoadNetworkNode>(), rnnB.GetComponent <RoadNetworkNode>()); RoadNetworkLayout.AddRoadToNode(rnnB.GetComponent <RoadNetworkNode>(), newNode.GetComponent <RoadNetworkNode>()); ICrossSection sc = gameObject.GetComponent <ICrossSection>(); if (sc != null) { newNode.AddComponent <OverridableCrossSection>(); OverridableCrossSection ocs = newNode.GetComponent <OverridableCrossSection>(); ocs.Copy(sc); } IMaterialFrequency fm = gameObject.GetComponent <IMaterialFrequency>(); if (fm != null) { newNode.AddComponent <OverridableMaterialFrequency>(); OverridableMaterialFrequency ocs = newNode.GetComponent <OverridableMaterialFrequency>(); ocs.Copy(fm); } return(newNode); }
/// <summary> /// Do we have a Cross section override? /// </summary> /// <returns>Whether or not we have cross section details</returns> public bool HasOverridenMaterialDetails() { OverridableMaterialFrequency omf = gameObject.GetComponent <OverridableMaterialFrequency>(); return(omf != null); }