private void Cleanup() { BUILDING = null; VOLUME = null; FLOORPLAN = null; ROOM = null; ROOM_PORTAL = null; BuildingVolumeEditor.Cleanup(); SceneMeshHandler.Clear(); }
public static void OnInspectorGUI(Building _building) { EditorGUILayout.BeginVertical(GUILayout.Width(BuildingEditor.MAIN_GUI_WIDTH)); Volume volume = BuildingVolumeEditor.VolumeSelectorInspectorGUI(_building); if (volume != null) { BuildingEditor.volume = volume; } else { volume = BuildingEditor.volume; } if (volume != null) { Undo.RecordObject(BuildingEditor.volume, "Roof Modification"); Roof roof = volume.roof; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Enable"); roof.exists = EditorGUILayout.Toggle(roof.exists); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Open Interior"); roof.interiorOpen = EditorGUILayout.Toggle(roof.interiorOpen); EditorGUILayout.EndHorizontal(); // EditorGUI.BeginDisabledGroup(BuildingEditor.volume.abovePlans.Count > 0); // if (BuildingEditor.volume.abovePlans.Count > 0) // roof.type = Roof.Types.Flat; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Type"); roof.type = (Roof.Types)EditorGUILayout.EnumPopup(roof.type); EditorGUILayout.EndHorizontal(); // EditorGUI.EndDisabledGroup(); if (roof.type != Roof.Types.Flat) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Height"); roof.height = EditorGUILayout.Slider(roof.height, 0, 20);//TODO setting for max building roof height EditorGUILayout.EndHorizontal(); } // if (roof.type == Roof.Types.Gambrel) // { // EditorGUILayout.BeginHorizontal(); // EditorGUILayout.LabelField("Sub Height"); // roof.heightB = EditorGUILayout.Slider(roof.heightB, 0, 20);//TODO setting for max building roof height // EditorGUILayout.EndHorizontal(); // } if (roof.type == Roof.Types.Mansard)//|| roof.type == Roof.Types.Gambrel) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Depth"); roof.depth = EditorGUILayout.Slider(roof.depth, 0, 5); EditorGUILayout.EndHorizontal(); } if (roof.type == Roof.Types.Mansard) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Floor Depth"); roof.floorDepth = EditorGUILayout.Slider(roof.floorDepth, 0, 5); EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Overhang"); roof.overhang = EditorGUILayout.Slider(roof.overhang, 0, 5); EditorGUILayout.EndHorizontal(); // EditorGUILayout.BeginHorizontal(); //two directions of the ridge // string[] options = { "Short", "Long" }; // roof.direction = EditorGUILayout.Popup(roof.direction, options); // EditorGUILayout.EndHorizontal(); // if (roof.type == Roof.Types.Sawtooth) // { // EditorGUILayout.BeginHorizontal(); // EditorGUILayout.LabelField("Overhang"); // roof.sawtoothTeeth = EditorGUILayout.IntSlider(roof.sawtoothTeeth, 0, 10); // EditorGUILayout.EndHorizontal(); // } // if (roof.type == Roof.Types.Barrel) // { // EditorGUILayout.BeginHorizontal(); // EditorGUILayout.LabelField("Segments"); // roof.barrelSegments = EditorGUILayout.IntSlider(roof.barrelSegments, 0, 10); // EditorGUILayout.EndHorizontal(); // } EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Textures"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Main"); roof.mainSurface = EditorGUILayout.ObjectField(roof.mainSurface, typeof(Surface), false) as Surface; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Wall"); roof.wallSurface = EditorGUILayout.ObjectField(roof.wallSurface, typeof(Surface), false) as Surface; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Floor"); roof.floorSurface = EditorGUILayout.ObjectField(roof.floorSurface, typeof(Surface), false) as Surface; EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Parapet"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Enabled"); roof.parapet = EditorGUILayout.Toggle(roof.parapet); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Type"); roof.parapetStyle = (Roof.ParapetStyles)EditorGUILayout.EnumPopup(roof.parapetStyle); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Height"); roof.parapetHeight = EditorGUILayout.Slider(roof.parapetHeight, 0.01f, 3); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Front Extrusion"); roof.parapetFrontDepth = EditorGUILayout.Slider(roof.parapetFrontDepth, 0.01f, 1); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Back Extrusion"); roof.parapetBackDepth = EditorGUILayout.Slider(roof.parapetBackDepth, 0.01f, 1); EditorGUILayout.EndHorizontal(); if (roof.parapetStyle == Roof.ParapetStyles.Battlement) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Battlement Height Ratio"); roof.battlementHeightRatio = EditorGUILayout.Slider(roof.battlementHeightRatio, 0.01f, 1); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Battlement Spacing"); roof.battlementSpacing = EditorGUILayout.Slider(roof.battlementSpacing, 0.5f, 5); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); //DORMERS EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Dormer"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Enabled"); roof.hasDormers = EditorGUILayout.Toggle(roof.hasDormers); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Width"); roof.dormerWidth = EditorGUILayout.Slider(roof.dormerWidth, 0, 4); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Height"); roof.dormerHeight = EditorGUILayout.Slider(roof.dormerHeight, 0, 3); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Roof Height"); roof.dormerRoofHeight = EditorGUILayout.Slider(roof.dormerRoofHeight, 0, 3); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Spacing"); roof.minimumDormerSpacing = EditorGUILayout.Slider(roof.minimumDormerSpacing, 0, 5); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Rows"); roof.dormerRows = EditorGUILayout.IntSlider(roof.dormerRows, 1, 4); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Style"); roof.wallSection = (WallSection)EditorGUILayout.ObjectField(roof.wallSection, typeof(WallSection), false); EditorGUILayout.EndHorizontal(); if (roof.wallSection != null) { GUILayout.Label(roof.wallSection.previewTexture); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Gables"); for (int g = 0; g < volume.numberOfPoints; g++) { if (g > 0) { EditorGUILayout.Space(); } RoofFacadeInspectorGUI(volume, g); } EditorGUILayout.EndVertical(); BuildingEditor.volume.roof = roof; if (BuildingEditor.volume != null && BuildingEditor.volume.isModified) { _building.MarkModified(); } if (_building.isModified || GUI.changed) { Repaint(); } } EditorGUILayout.EndVertical(); }
public override void OnInspectorGUI() { if (EditorApplication.isPlaying) { EditorGUILayout.HelpBox("BuildR editor disabled in play mode", MessageType.Warning); return; } bool repaint = false; CheckDragDrop(); EditorGUILayout.BeginHorizontal(); int currentMode = (int)building.settings.editMode; GUIContent[] guiContent = new GUIContent[toolbarOptionCount]; for (int i = 0; i < toolbarOptionCount; i++) { guiContent[i] = new GUIContent(STAGE_TOOLBAR_TEXTURES[i], TOOLBAR_TEXT[i]); } int newStage = GUILayout.Toolbar(currentMode, guiContent, GUILayout.Width(MAIN_GUI_WIDTH), GUILayout.Height(50)); if (directionalLightIssueDetected) { Rect toolbarRect = GUILayoutUtility.GetLastRect(); Rect warningRect = new Rect(); float warningIconSize = 20; warningRect.x = toolbarRect.x + toolbarRect.width - warningIconSize - 4; warningRect.y = toolbarRect.y + 4; warningRect.width = warningIconSize; warningRect.height = warningIconSize; GUI.Label(warningRect, warning); } if (newStage != currentMode) { building.settings.editMode = (BuildREditmodes.Values)newStage; repaint = true; } GUILayout.EndHorizontal(); if (GUILayout.Button("Regenerate Building", GUILayout.Width(MAIN_GUI_WIDTH))) { Undo.RegisterCompleteObjectUndo(BUILDING, "Rebuild Building Meshes"); BUILDING.MarkModified(); UpdateGui(); } switch (building.settings.editMode) { case BuildREditmodes.Values.Volume: if (BuildingVolumeEditor.mode == BuildingVolumeEditor.EditModes.SwitchToInterior) { BuildingVolumeEditor.mode = BuildingVolumeEditor.EditModes.FloorplanSelection; BuildingFloorplanEditor.mode = BuildingFloorplanEditor.EditModes.BuildFloorplanInterior; building.settings.editMode = BuildREditmodes.Values.Floorplan; BuildingFloorplanEditor.ToggleEdit(false); } BuildRHeader("Volumes"); BuildingVolumeEditor.OnInspectorGUI(BUILDING); if (BuildingVolumeEditor.repaint) { repaint = true; } BuildingVolumeEditor.repaint = false; break; case BuildREditmodes.Values.Floorplan: BuildRHeader("Floorplans"); BuildingFloorplanEditor.OnInspectorGUI(BUILDING); if (BuildingFloorplanEditor.repaint) { repaint = true; } BuildingFloorplanEditor.repaint = false; break; case BuildREditmodes.Values.TextureLibrary: BuildRHeader("Surface Library"); BuildingSurfaceEditor.OnInspectoGUI(); break; case BuildREditmodes.Values.Facades: BuildingFacadeEditor.OnInspectorGUI(BUILDING); if (BuildingFacadeEditor.repaint) { repaint = true; } break; case BuildREditmodes.Values.Roofs: BuildRHeader("Roof Designs"); BuildingRoofEditor.OnInspectorGUI(BUILDING); if (BuildingRoofEditor.REPAINT) { repaint = true; } break; case BuildREditmodes.Values.Export: BuildRHeader("Export"); BuildingExportEditor.OnInspectorGUI(BUILDING); break; // case EditModes.Detailing: // BuildRHeader("Details"); // EditorGUILayout.LabelField("To Be Implemented"); // break; case BuildREditmodes.Values.Options: BuildRHeader("Options"); BuildingOptionsEditor.OnInspectorGUI(BUILDING); break; } if (repaint) { UpdateGui(); } }
private void OnSceneGUI() { bool repaint = false; CheckDragDrop(); if (Event.current.type == EventType.ValidateCommand) { switch (Event.current.commandName) { case "UndoRedoPerformed": if (BUILDING == null) { BUILDING = (Building)target; } UpdateGui(); return; } } if (BUILDING == null) { BUILDING = (Building)target; } switch (building.settings.editMode) { case BuildREditmodes.Values.Volume: BuildingVolumeEditor.OnSceneGUI(BUILDING); if (BuildingVolumeEditor.repaint) { repaint = true; } BuildingVolumeEditor.repaint = false; break; case BuildREditmodes.Values.Floorplan: BuildingFloorplanEditor.OnSceneGUI(BUILDING); if (BuildingFloorplanEditor.repaint) { repaint = true; } BuildingFloorplanEditor.repaint = false; break; case BuildREditmodes.Values.Facades: BuildingFacadeEditor.OnSceneGUI(BUILDING); if (BuildingFacadeEditor.repaint) { repaint = true; } BuildingFacadeEditor.repaint = false; break; case BuildREditmodes.Values.Roofs: BuildingRoofEditor.OnSceneGUI(BUILDING); if (BuildingFacadeEditor.repaint) { repaint = true; } BuildingFacadeEditor.repaint = false; break; } if (repaint || building.regenerate) { UpdateGui(); } }
private void OnEnable() { BuildRSettings.AUTO_UPDATE = true; EditorUtility.ClearProgressBar(); EDITOR = this; if (target != null) { if (BUILDING != (Building)target) { Cleanup(); BUILDING = (Building)target;//directly set to avoid gui calls } if (building.settings == null) { building.settings = GetSettings(); } if (building.numberOfVolumes > 0) { if (volume == null) { VOLUME = (Volume)BUILDING[0];//directly set to avoid gui calls } if (volume != null) { if (floorplan == null && volume.floors > 0 && building.settings.editMode == BuildREditmodes.Values.Floorplan && volume.InteriorFloorplans().Length > 0) { FLOORPLAN = (Floorplan)volume.InteriorFloorplans()[0];//directly set to avoid gui calls } } } } STAGE_TOOLBAR_TEXTURES = new Texture2D[toolbarOptionCount]; STAGE_TOOLBAR_TEXTURES[0] = volumeIcon; STAGE_TOOLBAR_TEXTURES[1] = floorplanIcon; STAGE_TOOLBAR_TEXTURES[2] = surfacesIcon; STAGE_TOOLBAR_TEXTURES[3] = facadesIcon; STAGE_TOOLBAR_TEXTURES[4] = roofsIcon; STAGE_TOOLBAR_TEXTURES[5] = exportIcon; STAGE_TOOLBAR_TEXTURES[6] = optionsIcon; HEADER_TEXTURE = new Texture2D(1, 1); HEADER_TEXTURE.SetPixel(0, 0, RED); HEADER_TEXTURE.Apply(); LOGO = logo;//(Texture2D)AssetDatabase.LoadAssetAtPath("Assets/BuildR2/Internal/EditorImages/buildrLogo.png", typeof(Texture2D)); BuildingVolumeEditor.OnEnable(); IVolume[] volumes = BUILDING.AllPlans(); foreach (Volume volume1 in volumes) { if (volume1 == null) { continue; } volume1.hideFlags = building.settings.debug ? HideFlags.None : HideFlags.HideInInspector; } directionalLightIssueDetected = false; Light[] lights = FindObjectsOfType <Light>(); int lightCount = lights.Length; for (int l = 0; l < lightCount; l++) { Light light = lights[l]; if (light.type != LightType.Directional) { continue; } if (light.shadowBias > building.settings.recommendedBias || light.shadowNormalBias > building.settings.recommendedNormalBias) { directionalLightIssueDetected = true; } } }