private static void GenerateFloorPlan(BuildrData data) { BuildrGenerateConstraints constraints = data.generatorConstraints; RandomGen rgen = constraints.rgen; BuildrPlan plan = ScriptableObject.CreateInstance <BuildrPlan>(); List <Vector2z> bounds = new List <Vector2z>(); Rect floorplanBounds = new Rect(-15, -15, 30, 30); if (constraints.constrainPlanByArea) { floorplanBounds = constraints.area; } bounds.Add(new Vector2z(rgen.OutputRange(-5, floorplanBounds.xMin), rgen.OutputRange(-5, floorplanBounds.yMin))); bounds.Add(new Vector2z(rgen.OutputRange(5, floorplanBounds.xMax), rgen.OutputRange(-5, floorplanBounds.yMin))); bounds.Add(new Vector2z(rgen.OutputRange(5, floorplanBounds.xMax), rgen.OutputRange(5, floorplanBounds.yMax))); bounds.Add(new Vector2z(rgen.OutputRange(-5, floorplanBounds.xMin), rgen.OutputRange(5, floorplanBounds.yMax))); if (rgen.output < 0.25f)//should we split the volume? { float ratio = rgen.OutputRange(0.25f, 0.75f); bounds.Insert(1, Vector2z.Lerp(bounds[0], bounds[1], ratio)); bounds.Insert(4, Vector2z.Lerp(bounds[3], bounds[4], ratio)); plan.AddVolume(new [] { bounds[0], bounds[1], bounds[4], bounds[5] }); plan.AddVolume(1, 2, new [] { bounds[2], bounds[3] }); } else { plan.AddVolume(bounds.ToArray()); } data.plan = plan; }
public static void RefreshTextures(BuildrData data) { data.textures.Clear(); BuildrGenerateConstraints constraints = data.generatorConstraints; uint seed = (uint)(constraints.useSeed ? constraints.seed : Random.Range(0, int.MaxValue)); constraints.rgen = new RandomGen(seed); GetTextures(data); }
public static void InspectorGUI(BuildrEditMode _editMode, BuildrData _data) { editMode = _editMode; data = _data; constraints = data.generatorConstraints; EditModes newmode = (EditModes)EditorGUILayout.EnumPopup(mode); if (newmode != mode) { mode = newmode; switch (mode) { case EditModes.general: editMode.stage = BuildrEditMode.stages.building; break; case EditModes.floorplan: editMode.stage = BuildrEditMode.stages.floorplan; editMode.SetMode(BuildrEditMode.modes.floorplan); break; } } switch (mode) { case EditModes.general: GeneralOptionsInspector(); break; case EditModes.floorplan: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Constrain Building Generation to Floorplan", GUILayout.Width(280)); constraints.constrainPlanByPlan = EditorGUILayout.Toggle(constraints.constrainPlanByPlan); EditorGUILayout.EndHorizontal(); EditorGUI.BeginDisabledGroup(!constraints.constrainPlanByPlan); BuildrEditModeFloorplan.InspectorGUI(editMode, _data.plan); EditorGUI.EndDisabledGroup(); if (data.plan != null) { constraints.plan = data.plan.Duplicate(); } break; } if (GUI.changed) { EditorUtility.SetDirty(_editMode); EditorUtility.SetDirty(_data); _editMode.UpdateRender(); } }
public void Init() { DestroyImmediate(plan); plan = ScriptableObject.CreateInstance <BuildrPlan>(); facades.Add(new BuildrFacadeDesign("default")); //set up two basic textures to use textures.Add(new BuildrTexture("bricks")); textures.Add(new BuildrTexture("window")); textures.Add(new BuildrTexture("roof")); roofs.Add(new BuildrRoofDesign("default")); bays.Add(new BuildrBay("default")); DestroyImmediate(generatorConstraints); generatorConstraints = ScriptableObject.CreateInstance <BuildrGenerateConstraints>(); generatorConstraints.Init(); }
public static void Generate(BuildrData data) { BuildrGenerateConstraints constraints = data.generatorConstraints; uint seed = (uint)(constraints.useSeed ? constraints.seed : Random.Range(0, int.MaxValue)); constraints.seed = (int)seed;//reassign value incase it's changed constraints.rgen = new RandomGen(seed); RandomGen rgen = constraints.rgen; data.ResetData(constraints.constrainPlanByPlan); if (!constraints.constrainPlanByPlan) { GenerateFloorPlan(data); } else { data.plan = constraints.plan; } data.floorHeight = rgen.OutputRange(constraints.minimumFloorHeight, constraints.maximumFloorHeight); float minBuildingSize = (constraints.constrainHeight) ? constraints.minimumHeight : BuildrGenerateConstraints.MINIMUM_BUILDING_HEIGHT; float maxBuildingSize = (constraints.constrainHeight) ? constraints.maximumHeight : BuildrGenerateConstraints.MAXIMUM_BUILDING_HEIGHT; foreach (BuildrVolume volume in data.plan.volumes) { volume.height = rgen.OutputRange(minBuildingSize, maxBuildingSize); volume.numberOfFloors = Mathf.FloorToInt(volume.height / data.floorHeight); } //texture generation GetTextures(data); //facade generation GenerateFacades(data); //roof generation GenerateRoof(data); }
private static void GenerateRoof(BuildrData data) { BuildrGenerateConstraints constraints = data.generatorConstraints; RandomGen rgen = constraints.rgen; BuildrRoofDesign roofDesign = new BuildrRoofDesign("default"); List <int> availableRoofStyles = new List <int>(); if (constraints.roofStyleFlat) { availableRoofStyles.Add(0); } if (constraints.roofStyleMansard) { availableRoofStyles.Add(1); } if (constraints.roofStyleBarrel) { availableRoofStyles.Add(2); } if (constraints.roofStyleGabled) { availableRoofStyles.Add(3); } if (constraints.roofStyleHipped) { availableRoofStyles.Add(4); } if (constraints.roofStyleLeanto) { availableRoofStyles.Add(5); } if (constraints.roofStyleSteepled) { availableRoofStyles.Add(6); } if (constraints.roofStyleSawtooth) { availableRoofStyles.Add(7); } System.Array A = System.Enum.GetValues(typeof(BuildrRoofDesign.styles)); roofDesign.style = (BuildrRoofDesign.styles)A.GetValue(availableRoofStyles[rgen.OutputRange(0, availableRoofStyles.Count - 1)]); roofDesign.height = rgen.OutputRange(constraints.minimumRoofHeight, constraints.maximumRoofHeight); roofDesign.floorDepth = rgen.OutputRange(constraints.minimumRoofFloorDepth, constraints.maximumRoofFloorDepth); roofDesign.depth = rgen.OutputRange(Mathf.Min(constraints.minimumRoofDepth, roofDesign.floorDepth), constraints.maximumRoofDepth); roofDesign.hasDormers = (constraints.allowDormers) && (rgen.output <= constraints.dormerChance); roofDesign.dormerWidth = rgen.OutputRange(constraints.dormerMinimumWidth, constraints.dormerMaximumWidth); roofDesign.dormerHeight = rgen.OutputRange(constraints.dormerMinimumHeight, Mathf.Min(roofDesign.height, constraints.dormerMaximumHeight)); roofDesign.dormerRoofHeight = rgen.OutputRange(constraints.dormerMinimumRoofHeight, constraints.dormerMaximumRoofHeight); roofDesign.minimumDormerSpacing = rgen.OutputRange(constraints.dormerMinimumSpacing, constraints.dormerMaximumSpacing); roofDesign.dormerHeightRatio = rgen.OutputRange(0.0f, 1.0f); roofDesign.parapet = (constraints.allowParapet) && (rgen.output <= constraints.parapetChance); roofDesign.parapetDesignWidth = rgen.OutputRange(constraints.parapetMinimumDesignWidth, constraints.parapetMaximumDesignWidth); roofDesign.parapetHeight = rgen.OutputRange(constraints.parapetMinimumHeight, constraints.parapetMaximumHeight); roofDesign.parapetFrontDepth = rgen.OutputRange(constraints.parapetMinimumFrontDepth, constraints.parapetMaximumFrontDepth); roofDesign.parapetBackDepth = rgen.OutputRange(constraints.parapetMinimumBackDepth, constraints.parapetMaximumBackDepth); if (roofDesign.style == BuildrRoofDesign.styles.sawtooth) { //make a new window texture for the sawtooth } data.roofs.Add(roofDesign); }
private static void GenerateFacades(BuildrData data) { BuildrGenerateConstraints constraints = data.generatorConstraints; RandomGen rgen = constraints.rgen; //generate bays //blank BuildrBay blankBay = new BuildrBay("Blank"); blankBay.isOpening = false; data.bays.Add(blankBay); //door BuildrBay doorBay = new BuildrBay("Door"); doorBay.openingHeight = data.floorHeight * 0.9f; doorBay.openingHeightRatio = 0.0f; float doorWidth = (doorTexture.texture.width / (float)doorTexture.texture.height) * doorBay.openingHeight; doorBay.openingWidth = doorWidth; doorBay.openingDepth = rgen.OutputRange(0.0f, 0.3f); doorBay.SetTexture(BuildrBay.TextureNames.OpeningBackTexture, data.textures.IndexOf(doorTexture)); data.bays.Add(doorBay); //ground window BuildrBay groundWindow = new BuildrBay("Ground Window"); groundWindow.openingWidth = rgen.OutputRange(constraints.openingMinimumWidth, constraints.openingMaximumWidth); groundWindow.openingHeight = rgen.OutputRange(constraints.openingMinimumHeight, Mathf.Min(data.floorHeight, constraints.openingMinimumHeight)); groundWindow.openingDepth = rgen.OutputRange(constraints.openingMinimumDepth, constraints.openingMaximumDepth); groundWindow.openingHeightRatio = 0.8f; data.bays.Add(groundWindow); // BuildrTexture groundFloorWindowTexture = windowTexture.Duplicate("groundWindowTexture"); groundFloorWindowTexture.tiled = false; groundFloorWindowTexture.tiledX = Mathf.RoundToInt(groundWindow.openingWidth / groundWindow.openingHeight); int groundtextureIndex = data.textures.IndexOf(groundFloorWindowTexture); // data.textures.Add(groundFloorWindowTexture); groundWindow.SetTexture(BuildrBay.TextureNames.OpeningBackTexture, groundtextureIndex); //other windows BuildrBay windowBay = new BuildrBay("Window"); data.bays.Add(windowBay); //util window BuildrBay utilBay = new BuildrBay("Utility Window"); data.bays.Add(utilBay); //generate facades BuildrFacadeDesign basicFacadeDesign = new BuildrFacadeDesign("default"); basicFacadeDesign.simpleBay.openingWidth = rgen.OutputRange(constraints.openingMinimumWidth, constraints.openingMaximumWidth); basicFacadeDesign.simpleBay.openingHeight = rgen.OutputRange(constraints.openingMinimumHeight, Mathf.Min(data.floorHeight, constraints.openingMinimumHeight)); basicFacadeDesign.simpleBay.openingDepth = rgen.OutputRange(constraints.openingMinimumDepth, constraints.openingMaximumDepth); // float roughBaySize = basicFacadeDesign.simpleBay.openingHeight + basicFacadeDesign.simpleBay.openingWidth; basicFacadeDesign.simpleBay.minimumBayWidth = rgen.OutputRange(constraints.minimumBayMaximumWidth, constraints.minimumBayMaximumWidth); data.facades.Add(basicFacadeDesign); //ground floor with and without door BuildrFacadeDesign groundFloorDoor = new BuildrFacadeDesign("Ground Floor With Door"); groundFloorDoor.type = BuildrFacadeDesign.types.patterned; int patternSize = rgen.OutputRange(1, 8); for (int i = 0; i < patternSize; i++) { groundFloorDoor.bayPattern.Add(rgen.output > 0.2f?2:0); } groundFloorDoor.bayPattern.Insert(rgen.OutputRange(0, patternSize), 1);//insert door into pattern data.facades.Add(groundFloorDoor); //couple of main facades //utility/back wall facade //maybe attic version BuildrPlan plan = data.plan; for (int v = 0; v < plan.numberOfVolumes; v++) { BuildrVolume volume = plan.volumes[v]; int numberOfFloors = volume.numberOfFloors; volume.styles.Clear(); for (int f = 0; f < volume.points.Count; f++) { int facadeIndex = volume.points[f]; volume.styles.AddStyle(0, facadeIndex, numberOfFloors - 1); volume.styles.AddStyle(1, facadeIndex, 1); } } }
public static void GeneralOptionsInspector() { if (constraints == null) { data.generatorConstraints = ScriptableObject.CreateInstance <BuildrGenerateConstraints>(); data.generatorConstraints.Init(); constraints = data.generatorConstraints; } EditorGUILayout.BeginHorizontal("box"); EditorGUILayout.LabelField("Saved constraints", GUILayout.Width(110)); int numberOfFiles = xmlfilelist.Count; string[] fileNames = new string[numberOfFiles]; for (int t = 0; t < numberOfFiles; t++) { string filepath = xmlfilelist[t]; string[] filepathsplit = filepath.Split(filenameDelimiters); string displayPath = filepathsplit[filepathsplit.Length - 1]; fileNames[t] = displayPath; } int newSelectedFile = EditorGUILayout.Popup(selectedFile, fileNames); if (newSelectedFile != selectedFile) { if (EditorUtility.DisplayDialog("Load Constraints", "Are you sure you want to load a set of constraints from file?", "Yes", "Mmm, no.")) { selectedFile = newSelectedFile; dataFilePath = xmlfilelist[selectedFile]; LoadConstraints(); } } if (GUILayout.Button("Load")) { LoadConstraints(); } if (GUILayout.Button("Save")) { SaveConstraints(); } if (GUILayout.Button("Save As")) { SaveConstraintsAs(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Seed", GUILayout.Width(100)); constraints.useSeed = EditorGUILayout.Toggle(constraints.useSeed); EditorGUI.BeginDisabledGroup(!constraints.useSeed); constraints.seed = EditorGUILayout.IntField(constraints.seed); EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Floor Height", GUILayout.Width(140)); EditorGUILayout.LabelField(constraints.minimumFloorHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.minimumFloorHeight, ref constraints.maximumFloorHeight, 2.0f, 3.8f); EditorGUILayout.LabelField(constraints.maximumFloorHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Constrain Maximum Height", GUILayout.Width(170)); constraints.constrainHeight = EditorGUILayout.Toggle(constraints.constrainHeight); EditorGUI.BeginDisabledGroup(!constraints.constrainHeight); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Minimum:", GUILayout.Width(70)); constraints.minimumHeight = EditorGUILayout.FloatField(constraints.minimumHeight, GUILayout.Width(30)); EditorGUILayout.LabelField("metres", GUILayout.Width(53)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Maximum:", GUILayout.Width(70)); constraints.maximumHeight = EditorGUILayout.FloatField(constraints.maximumHeight, GUILayout.Width(30)); EditorGUILayout.LabelField("metres", GUILayout.Width(53)); EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Constrain Generated Floorplan", GUILayout.Width(200)); constraints.constrainPlanByArea = EditorGUILayout.Toggle(constraints.constrainPlanByArea); EditorGUILayout.EndHorizontal(); EditorGUI.BeginDisabledGroup(!constraints.constrainPlanByArea); EditorGUILayout.LabelField("Contraint Area"); constraints.area = EditorGUILayout.RectField(constraints.area); EditorGUI.EndDisabledGroup(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Texture Pack", GUILayout.Width(100)); //Debug.Log("InspectorGUI " + constraints.texturePackXML + " " + xmltexturefilelist.IndexOf(constraints.texturePackXML)); selectedTextureFile = xmltexturefilelist.IndexOf(constraints.texturePackXML); int numberTextureOfFiles = xmltexturefilelist.Count; string[] textureFileNames = new string[numberTextureOfFiles]; for (int t = 0; t < numberTextureOfFiles; t++) { string filepath = xmltexturefilelist[t]; string[] filepathsplit = filepath.Split(filenameDelimiters); string displayPath = filepathsplit[filepathsplit.Length - 1]; textureFileNames[t] = displayPath; } int newSelectedTextureFile = EditorGUILayout.Popup(selectedTextureFile, textureFileNames); if (newSelectedTextureFile != selectedTextureFile) { selectedTextureFile = newSelectedTextureFile; constraints.texturePackXML = xmltexturefilelist[selectedTextureFile]; BuildrBuildingGenerator.RefreshTextures(data); } if (GUILayout.Button("Edit Texture Packs")) { EditorWindow textureEditor = EditorWindow.GetWindow <BuildrBuiltInTextureEditor>(true); textureEditor.minSize = new Vector2(280f, 490f); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal("box"); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Design Choices", GUILayout.Width(100)); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); constraints.rowStyled = EditorGUILayout.Toggle("Row Styles", constraints.rowStyled); constraints.columnStyled = EditorGUILayout.Toggle("Column Styles", constraints.columnStyled); // constraints.externalAirConUnits = EditorGUILayout.Toggle("External Air Conditioner Units", constraints.rowStyled); constraints.splitLevel = EditorGUILayout.Toggle("Split Level Volume", constraints.splitLevel); constraints.taperedLevels = EditorGUILayout.Toggle("Tapered Volume", constraints.taperedLevels); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); constraints.singleLevel = EditorGUILayout.Toggle("Single Volume Level", constraints.singleLevel); constraints.atticDesign = EditorGUILayout.Toggle("Attic Design", constraints.atticDesign); constraints.shopGroundFloor = EditorGUILayout.Toggle("Shop Design", constraints.shopGroundFloor); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); //FACADE CONSTRAINTS int styleLabelSize = 130; EditorGUILayout.BeginVertical("box"); showFacadeConstraints = EditorGUILayout.Foldout(showFacadeConstraints, "Facade Constraints"); if (showFacadeConstraints) { EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Bay Width", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.openingMinimumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumWidth, ref constraints.openingMaximumWidth, 0.5f, 2.0f); EditorGUILayout.LabelField(constraints.openingMaximumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Bay Height", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.openingMinimumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumHeight, ref constraints.openingMaximumHeight, 0.5f, constraints.maximumFloorHeight); EditorGUILayout.LabelField(constraints.openingMaximumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Bay Spacing", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.minimumBayMinimumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.minimumBayMinimumWidth, ref constraints.minimumBayMaximumWidth, 0.125f, 2.0f); EditorGUILayout.LabelField(constraints.minimumBayMaximumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Bay Opening Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.openingMinimumDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumDepth, ref constraints.openingMaximumDepth, -0.70f, 0.70f); EditorGUILayout.LabelField(constraints.openingMaximumDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Facade Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.facadeMinimumDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.facadeMinimumDepth, ref constraints.facadeMaximumDepth, -0.5f, 0.5f); EditorGUILayout.LabelField(constraints.facadeMaximumDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); //ROOF CONSTRAINTS EditorGUILayout.BeginVertical("box"); showRoofConstraints = EditorGUILayout.Foldout(showRoofConstraints, "Roof Constraints"); if (showRoofConstraints) { EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Height", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.minimumRoofHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofHeight, ref constraints.maximumRoofHeight, 1.0f, constraints.maximumFloorHeight); EditorGUILayout.LabelField(constraints.maximumRoofHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Mansard Face Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.minimumRoofDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofDepth, ref constraints.maximumRoofDepth, 0.0f, 1.0f); EditorGUILayout.LabelField(constraints.maximumRoofDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Mansard Floor Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.minimumRoofFloorDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofFloorDepth, ref constraints.maximumRoofFloorDepth, 0.0f, 1.0f); EditorGUILayout.LabelField(constraints.maximumRoofFloorDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Flat Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleFlat = EditorGUILayout.Toggle(constraints.roofStyleFlat); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Mansard Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleMansard = EditorGUILayout.Toggle(constraints.roofStyleMansard); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Barrel Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleBarrel = EditorGUILayout.Toggle(constraints.roofStyleBarrel); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Gabled Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleGabled = EditorGUILayout.Toggle(constraints.roofStyleGabled); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Hipped Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleHipped = EditorGUILayout.Toggle(constraints.roofStyleHipped); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Lean To Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleLeanto = EditorGUILayout.Toggle(constraints.roofStyleLeanto); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Steepled Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleSteepled = EditorGUILayout.Toggle(constraints.roofStyleSteepled); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Sawtooth Roof Styles", GUILayout.Width(styleLabelSize)); constraints.roofStyleSawtooth = EditorGUILayout.Toggle(constraints.roofStyleSawtooth); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Allow Dormers", GUILayout.Width(styleLabelSize)); constraints.allowDormers = EditorGUILayout.Toggle(constraints.allowDormers, GUILayout.Width(30)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUI.BeginDisabledGroup(!constraints.allowDormers); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dormer Chance", GUILayout.Width(150)); constraints.dormerChance = EditorGUILayout.FloatField(constraints.dormerChance, GUILayout.Width(30)); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dormer Width", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.dormerMinimumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumWidth, ref constraints.dormerMaximumWidth, 0.5f, 2.0f); EditorGUILayout.LabelField(constraints.dormerMaximumWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dormer Height", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.dormerMinimumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumHeight, ref constraints.dormerMaximumHeight, 0.5f, 2.0f); EditorGUILayout.LabelField(constraints.dormerMaximumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dormer Roof Height", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.dormerMinimumRoofHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumRoofHeight, ref constraints.dormerMaximumRoofHeight, 0.5f, 2.0f); EditorGUILayout.LabelField(constraints.dormerMaximumRoofHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dormer Spacing", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.dormerMinimumSpacing.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumSpacing, ref constraints.dormerMaximumSpacing, 0.5f, 3.0f); EditorGUILayout.LabelField(constraints.dormerMaximumSpacing.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Allow Parapets", GUILayout.Width(styleLabelSize)); constraints.allowParapet = EditorGUILayout.Toggle(constraints.allowParapet, GUILayout.Width(30)); EditorGUILayout.EndHorizontal(); EditorGUI.BeginDisabledGroup(!constraints.allowParapet); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parapet Render Chance", GUILayout.Width(150)); constraints.parapetChance = EditorGUILayout.FloatField(constraints.parapetChance, GUILayout.Width(30)); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parapet Width", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.parapetMinimumDesignWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumDesignWidth, ref constraints.parapetMaximumDesignWidth, 0.0f, 1.0f); EditorGUILayout.LabelField(constraints.parapetMaximumDesignWidth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parapet Height", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.parapetMinimumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumHeight, ref constraints.parapetMaximumHeight, 0.0f, 1.0f); EditorGUILayout.LabelField(constraints.parapetMaximumHeight.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parapet Front Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.parapetMinimumFrontDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumFrontDepth, ref constraints.parapetMaximumFrontDepth, -1.0f, 1.0f); EditorGUILayout.LabelField(constraints.parapetMaximumFrontDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parapet Back Depth", GUILayout.Width(styleLabelSize)); EditorGUILayout.LabelField(constraints.parapetMinimumBackDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumBackDepth, ref constraints.parapetMaximumBackDepth, -1.0f, 1.0f); EditorGUILayout.LabelField(constraints.parapetMaximumBackDepth.ToString(), GUILayout.Width(35)); EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); if (GUILayout.Button("Generate", GUILayout.Height(40))) { BuildrBuildingGenerator.Generate(data); editMode.UpdateRender(BuildrEditMode.renderModes.full); } }
public void Init() { DestroyImmediate(plan); plan = ScriptableObject.CreateInstance<BuildrPlan>(); facades.Add(new BuildrFacadeDesign("default")); //set up two basic textures to use textures.Add(new BuildrTexture("bricks")); textures.Add(new BuildrTexture("window")); textures.Add(new BuildrTexture("roof")); roofs.Add(new BuildrRoofDesign("default")); bays.Add(new BuildrBay("default")); DestroyImmediate(generatorConstraints); generatorConstraints = ScriptableObject.CreateInstance<BuildrGenerateConstraints>(); generatorConstraints.Init(); }