Exemplo n.º 1
0
 private void Cleanup()
 {
     BUILDING    = null;
     VOLUME      = null;
     FLOORPLAN   = null;
     ROOM        = null;
     ROOM_PORTAL = null;
     BuildingVolumeEditor.Cleanup();
     SceneMeshHandler.Clear();
 }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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();
            }
        }
Exemplo n.º 5
0
        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;
                }
            }
        }