public BuildrVolumeStylesUnit[] GetContents() { int numberOfEntries = styleID.Count; BuildrVolumeStylesUnit[] output = new BuildrVolumeStylesUnit[numberOfEntries]; for (int i = 0; i < numberOfEntries; i++) { output[i] = new BuildrVolumeStylesUnit(styleID[i], facadeID[i], floors[i], i); } return(output); }
public static void InspectorGUI(BuildrEditMode editMode, BuildrData _data) { data = _data; Undo.RecordObject(data, "Building Modified"); BuildrPlan plan = data.plan; int numberOfFacadeFaces = 0; int numberOfVolumes = plan.numberOfVolumes; int numberOfFacadeDesigns = data.facades.Count; if (numberOfVolumes == 0) { EditorGUILayout.HelpBox("There are no defined volumes, go to Floorplan and define one", MessageType.Error); return; } int numberOfFacades = data.facades.Count; int numberOfRoofs = data.roofs.Count; int numberOfTextures = data.textures.Count; bool legalBuilding = true; if (numberOfFacades == 0) { EditorGUILayout.HelpBox("There are no facade designs to render building, go to Facades to define a default one", MessageType.Error); legalBuilding = false; } if (numberOfRoofs == 0) { EditorGUILayout.HelpBox("There are no roof designs to render building, go to Facades to define a default one", MessageType.Error); legalBuilding = false; } if (numberOfTextures == 0) { EditorGUILayout.HelpBox("There are no textures to render building, go to Textures to define a default one", MessageType.Error); legalBuilding = false; } if (!legalBuilding) { return; } //Building Name EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name", GUILayout.Width(200)); data.name = EditorGUILayout.TextField(data.name, GUILayout.Width(200)); EditorGUILayout.EndHorizontal(); //Floor Height EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Floor height", GUILayout.Width(200)); data.floorHeight = EditorGUILayout.FloatField(data.floorHeight, GUILayout.Width(50)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number of Floors", GUILayout.Width(200)); int[] volumeSeletionsList = new int[numberOfVolumes]; string[] volumeSeletionsStringList = new string[numberOfVolumes]; for (int s = 0; s < numberOfVolumes; s++) { volumeSeletionsStringList[s] = ("volume " + s); volumeSeletionsList[s] = (s); } selectedFloorNumberVolume = EditorGUILayout.IntPopup(selectedFloorNumberVolume, volumeSeletionsStringList, volumeSeletionsList, GUILayout.Width(100)); int numberOfFloors = EditorGUILayout.IntField(data.plan.volumes[selectedFloorNumberVolume].numberOfFloors); if (GUILayout.Button("^")) { numberOfFloors++; } if (GUILayout.Button("v")) { numberOfFloors--; } data.plan.volumes[selectedFloorNumberVolume].numberOfFloors = Mathf.Max(numberOfFloors, 1); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Show Facade Markers", GUILayout.Width(200)); editMode.showFacadeMarkers = EditorGUILayout.Toggle(editMode.showFacadeMarkers, GUILayout.Width(200)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); GUIStyle titlesyle = new GUIStyle(GUI.skin.label); titlesyle.fixedHeight = 60; titlesyle.fixedWidth = 400; titlesyle.alignment = TextAnchor.UpperCenter; titlesyle.fontStyle = FontStyle.Bold; titlesyle.normal.textColor = Color.white; EditorGUILayout.LabelField("Facade Design", titlesyle); Texture2D facadeTexture = new Texture2D(1, 1); facadeTexture.SetPixel(0, 0, BuildrColours.MAGENTA); facadeTexture.Apply(); Rect sqrPos = new Rect(0, 0, 0, 0); if (Event.current.type == EventType.Repaint) { sqrPos = GUILayoutUtility.GetLastRect(); } GUI.DrawTexture(sqrPos, facadeTexture); EditorGUI.LabelField(sqrPos, "Facade Design", titlesyle); //create/display the facade selector List <int> facadeSeletionsList = new List <int>(); List <int> facadeRenderList = new List <int>(); List <string> facadeSeletionsStringList = new List <string>(); for (int s = 0; s < numberOfVolumes; s++) { int numberOfPoints = plan.volumes[s].Count; numberOfFacadeFaces += numberOfPoints; for (int p = 0; p < numberOfPoints; p++) { int index = facadeSeletionsList.Count; facadeSeletionsStringList.Add("facade " + index); facadeSeletionsList.Add(index); facadeRenderList.Add(p); } } int[] facadeSelections = facadeSeletionsList.ToArray(); string[] facadeSelectionString = facadeSeletionsStringList.ToArray(); selectedFacade = EditorGUILayout.IntPopup("Selected Facade", selectedFacade, facadeSelectionString, facadeSelections, GUILayout.Width(400)); //grab the selected facade int facadeCount = 0; int selectedVolumePoint = 0; for (int s = 0; s < numberOfVolumes; s++) { int numberOfPoints = plan.volumes[s].Count; for (int p = 0; p < numberOfPoints; p++) { if (selectedFacade == facadeCount) { selectedVolume = s; selectedVolumePoint = p; selectedPoint = plan.volumes[s].points[p]; } facadeCount++; } } BuildrVolume volume = plan.volumes[selectedVolume]; BuildrVolumeStylesUnit[] styles = volume.styles.GetContents(); bool renderFacade = volume.renderFacade[selectedVolumePoint]; volume.renderFacade[selectedVolumePoint] = EditorGUILayout.Toggle("Render Facade", renderFacade); //ensure the selected style isn't out of bounds int numberOfStyles = styles.Length; if (selectedStyle >= numberOfStyles) { selectedStyle = 0; } //compose a list of style ids from the volume style library List <int> entryNum = new List <int>(); for (int s = 0; s < numberOfStyles; s++) { if (selectedPoint == styles[s].facadeID) { entryNum.Add(s); } } int numberOfFacadeStyles = entryNum.Count; if (GUILayout.Button("Add style to facade", GUILayout.Width(400))) { volume.styles.AddStyle(0, selectedPoint, 1); } GUILayout.BeginHorizontal("box"); GUILayout.BeginHorizontal("box"); EditorGUILayout.LabelField("Style", GUILayout.Width(160)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label("Floors", GUILayout.Width(78)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label("Position", GUILayout.Width(54)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label(" ", GUILayout.Width(55)); GUILayout.EndHorizontal(); GUILayout.EndHorizontal(); for (int s = 0; s < numberOfFacadeStyles; s++) { int index = entryNum[s]; BuildrVolumeStylesUnit styleUnit = styles[index]; GUILayout.BeginHorizontal("box"); GUILayout.BeginHorizontal("box"); string[] facadeNames = new string[numberOfFacadeDesigns]; for (int f = 0; f < numberOfFacadeDesigns; f++) { facadeNames[f] = data.facades[f].name; } int selectedFacadeDesign = EditorGUILayout.Popup(styleUnit.styleID, facadeNames, GUILayout.Width(160)); if (selectedFacadeDesign != styleUnit.styleID) { volume.styles.ModifyStyle(index, selectedFacadeDesign); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); int currentFloors = styleUnit.floors; currentFloors = EditorGUILayout.IntField(currentFloors, GUILayout.Width(20)); if (GUILayout.Button("+", GUILayout.Width(25))) { currentFloors++; } EditorGUI.BeginDisabledGroup(currentFloors < 2); if (GUILayout.Button("-", GUILayout.Width(25))) { currentFloors--; } EditorGUI.EndDisabledGroup(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); EditorGUI.BeginDisabledGroup((s < 1)); { if (GUILayout.Button("^", GUILayout.Width(25))) { volume.styles.MoveEntry(entryNum[s], entryNum[s - 1] + 1); GUI.changed = true; } } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup((s > numberOfFacadeStyles - 2)); { if (GUILayout.Button("v", GUILayout.Width(25))) { volume.styles.MoveEntry(entryNum[s], entryNum[s + 1] + 1); GUI.changed = true; } } EditorGUI.EndDisabledGroup(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); if (GUILayout.Button("remove", GUILayout.Width(55))) { volume.styles.RemoveStyle(index); } GUILayout.EndHorizontal(); GUILayout.EndHorizontal(); if (currentFloors != styleUnit.floors) { volume.styles.ModifyFloors(index, currentFloors); GUI.changed = true; } } EditorGUILayout.Space(); titlesyle = new GUIStyle(GUI.skin.label); titlesyle.fixedHeight = 60; titlesyle.fixedWidth = 400; titlesyle.alignment = TextAnchor.UpperCenter; titlesyle.fontStyle = FontStyle.Bold; titlesyle.normal.textColor = Color.black; EditorGUILayout.LabelField("Roof Design", titlesyle); facadeTexture = new Texture2D(1, 1); facadeTexture.SetPixel(0, 0, BuildrColours.CYAN); facadeTexture.Apply(); sqrPos = new Rect(0, 0, 0, 0); if (Event.current.type == EventType.Repaint) { sqrPos = GUILayoutUtility.GetLastRect(); } GUI.DrawTexture(sqrPos, facadeTexture); EditorGUI.LabelField(sqrPos, "Roof Design", titlesyle); //create/display the roof selector volumeSeletionsList = new int[numberOfVolumes]; volumeSeletionsStringList = new string[numberOfVolumes]; for (int s = 0; s < numberOfVolumes; s++) { volumeSeletionsStringList[s] = ("volume " + s); volumeSeletionsList[s] = (s); } selectedRoofVolume = EditorGUILayout.IntPopup("Selected Volume", selectedRoofVolume, volumeSeletionsStringList, volumeSeletionsList, GUILayout.Width(400)); string[] roofNames = new string[numberOfRoofs]; int[] roofList = new int[numberOfRoofs]; for (int r = 0; r < numberOfRoofs; r++) { roofList[r] = r; roofNames[r] = data.roofs[r].name; } volume = data.plan.volumes[selectedRoofVolume]; volume.roofDesignID = EditorGUILayout.IntPopup("Selected Roof Design", volume.roofDesignID, roofNames, roofList, GUILayout.Width(400)); }
public void Add(int newPointIndex, BuildrVolumeStylesUnit[] styleunits) { points.Add(newPointIndex); renderFacade.Add(true); foreach (BuildrVolumeStylesUnit style in styleunits) styles.AddStyle(style.styleID, style.facadeID, style.floors); }