Kaynağa Gözat

Refactor: Camera inspector is now mostly auto-generated, and updated to new drawing API

BearishSun 6 yıl önce
ebeveyn
işleme
b963538c53
2 değiştirilmiş dosya ile 12 ekleme ve 288 silme
  1. 11 287
      Source/EditorManaged/Inspectors/CameraInspector.cs
  2. 1 1
      Source/bsf

+ 11 - 287
Source/EditorManaged/Inspectors/CameraInspector.cs

@@ -15,299 +15,23 @@ namespace bs.Editor
     [CustomInspector(typeof(Camera))]
     internal class CameraInspector : Inspector
     {
-        private GUIEnumField projectionTypeField = new GUIEnumField(typeof(ProjectionType), new LocEdString("Projection type"));
-        private GUISliderField fieldOfView = new GUISliderField(1, 360, new LocEdString("Field of view"));
-        private GUIFloatField orthoHeight = new GUIFloatField(new LocEdString("Orthographic height"));
-        private GUIFloatField aspectField = new GUIFloatField(new LocEdString("Aspect ratio"));
-        private GUIFloatField nearPlaneField = new GUIFloatField(new LocEdString("Near plane"));
-        private GUIFloatField farPlaneField = new GUIFloatField(new LocEdString("Far plane"));
-        private GUIFloatField viewportXField = new GUIFloatField(new LocEdString("X"), 30);
-        private GUIFloatField viewportYField = new GUIFloatField(new LocEdString("Y"), 30);
-        private GUIFloatField viewportWidthField = new GUIFloatField(new LocEdString("Width"), 30);
-        private GUIFloatField viewportHeightField = new GUIFloatField(new LocEdString("Height"), 30);
-        private GUIEnumField clearFlagsFields = new GUIEnumField(typeof (ClearFlags), true, new LocEdString("Clear flags"));
-        private GUIIntField clearStencilField = new GUIIntField(new LocEdString("Clear stencil"));
-        private GUIFloatField clearDepthField = new GUIFloatField(new LocEdString("Clear depth"));
-        private GUIColorField clearColorField = new GUIColorField(new LocEdString("Clear color"));
-        private GUIIntField priorityField = new GUIIntField(new LocEdString("Render priority"));
-        private GUIListBoxField layersField = new GUIListBoxField(Layers.Names, true, new LocEdString("Layers"));
-        private GUIToggleField mainField = new GUIToggleField(new LocEdString("Main"));
-
-        private GUIToggle renderSettingsFoldout = new GUIToggle(new LocEdString("Render settings"), EditorStyles.Foldout);
-        private InspectorFieldDrawer renderSettingsGUI;
-        private GUILayout renderSettingsLayout;
-
-        private ulong layersValue = 0;
-        private InspectableState modifyState;
-
         /// <inheritdoc/>
         protected internal override void Initialize()
         {
-            BuildGUI();
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh(bool force = false)
-        {
-            Camera camera = InspectedObject as Camera;
-            if (camera == null)
-                return InspectableState.NotModified;
-
-            ProjectionType projType = camera.ProjectionType;
-            if (projectionTypeField.Value != (ulong)projType)
-            {
-                projectionTypeField.Value = (ulong)projType;
-                ToggleTypeSpecificFields(projType);
-            }
-
-            fieldOfView.Value = camera.FieldOfView.Degrees;
-            orthoHeight.Value = camera.OrthoHeight;
-            aspectField.Value = camera.AspectRatio;
-            nearPlaneField.Value = camera.NearClipPlane;
-            farPlaneField.Value = camera.FarClipPlane;
-            viewportXField.Value = camera.Viewport.Area.x;
-            viewportYField.Value = camera.Viewport.Area.y;
-            viewportWidthField.Value = camera.Viewport.Area.width;
-            viewportHeightField.Value = camera.Viewport.Area.height;
-            clearFlagsFields.Value = (ulong)camera.Viewport.ClearFlags;
-            clearStencilField.Value = camera.Viewport.ClearStencil;
-            clearDepthField.Value = camera.Viewport.ClearDepth;
-            clearColorField.Value = camera.Viewport.ClearColor;
-            priorityField.Value = camera.Priority;
-            mainField.Value = camera.Main;
-
-            if (layersValue != camera.Layers)
-            {
-                bool[] states = new bool[64];
-                for (int i = 0; i < states.Length; i++)
-                    states[i] = (camera.Layers & Layers.Values[i]) == Layers.Values[i];
-
-                layersField.States = states;
-                layersValue = camera.Layers;
-            }
-
-            InspectableState renderSettingsState = renderSettingsGUI.Refresh(force);
-            if (renderSettingsState != InspectableState.NotModified)
-            {
-                camera.RenderSettings = camera.RenderSettings;
-                modifyState |= renderSettingsState;
-            }
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Recreates all the GUI elements used by this inspector.
-        /// </summary>
-        private void BuildGUI()
-        {
-            if (InspectedObject != null)
-            {
-                Camera camera = (Camera)InspectedObject;
-
-                projectionTypeField.OnSelectionChanged += x =>
-                {
-                    camera.ProjectionType = (ProjectionType)x;
-                    MarkAsModified();
-                    ConfirmModify();
-                    ToggleTypeSpecificFields((ProjectionType)x);
-                };
-
-                fieldOfView.OnChanged += x => { camera.FieldOfView = (Degree)x; MarkAsModified(); };
-                fieldOfView.OnFocusLost += ConfirmModify;
-
-                orthoHeight.OnChanged += x => { camera.OrthoHeight = x; MarkAsModified(); };
-                orthoHeight.OnConfirmed += ConfirmModify;
-                orthoHeight.OnFocusLost += ConfirmModify;
-
-                aspectField.OnChanged += x => { camera.AspectRatio = x; MarkAsModified(); };
-                aspectField.OnConfirmed += ConfirmModify;
-                aspectField.OnFocusLost += ConfirmModify;
-
-                nearPlaneField.OnChanged += x => { camera.NearClipPlane = x; MarkAsModified(); };
-                nearPlaneField.OnConfirmed += ConfirmModify;
-                nearPlaneField.OnFocusLost += ConfirmModify;
-
-                farPlaneField.OnChanged += x => { camera.FarClipPlane = x; MarkAsModified(); };
-                farPlaneField.OnConfirmed += ConfirmModify;
-                farPlaneField.OnFocusLost += ConfirmModify;
-
-                viewportXField.OnChanged += x =>
-                {
-                    Rect2 rect = camera.Viewport.Area; 
-                    rect.x = x; 
-                    camera.Viewport.Area = rect;
-
-                    MarkAsModified();
-                };
-                viewportXField.OnConfirmed += ConfirmModify;
-                viewportXField.OnFocusLost += ConfirmModify;
-
-                viewportYField.OnChanged += x =>
-                {
-                    Rect2 rect = camera.Viewport.Area; 
-                    rect.y = x; 
-                    camera.Viewport.Area = rect;
-
-                    MarkAsModified();
-                };
-                viewportYField.OnConfirmed += ConfirmModify;
-                viewportYField.OnFocusLost += ConfirmModify;
+            Camera camera = (Camera)InspectedObject;
 
-                viewportWidthField.OnChanged += x =>
-                {
-                    Rect2 rect = camera.Viewport.Area; 
-                    rect.width = x; 
-                    camera.Viewport.Area = rect;
+            drawer.AddDefault(camera);
+            drawer.BeginCategory("Viewport");
+            drawer.AddField("Area", () => camera.Viewport.Area, x => camera.Viewport.Area = x);
+            drawer.AddField("Clear flags", () => camera.Viewport.ClearFlags, x => camera.Viewport.ClearFlags = x);
+            drawer.AddField("Clear color", () => camera.Viewport.ClearColor, x => camera.Viewport.ClearColor = x);
+            drawer.AddField("Clear stencil", () => camera.Viewport.ClearStencil, x => camera.Viewport.ClearStencil = x);
+            drawer.AddField("Clear depth", () => camera.Viewport.ClearDepth, x => camera.Viewport.ClearDepth = x);
 
-                    MarkAsModified();
-                };
-                viewportWidthField.OnConfirmed += ConfirmModify;
-                viewportWidthField.OnFocusLost += ConfirmModify;
+            drawer.AddConditional("FieldOfView", () => camera.ProjectionType == ProjectionType.Perspective);
+            drawer.AddConditional("OrthoHeight", () => camera.ProjectionType == ProjectionType.Orthographic);
 
-                viewportHeightField.OnChanged += x =>
-                {
-                    Rect2 rect = camera.Viewport.Area; 
-                    rect.height = x; 
-                    camera.Viewport.Area = rect;
-
-                    MarkAsModified();
-                };
-                viewportHeightField.OnConfirmed += ConfirmModify;
-                viewportHeightField.OnFocusLost += ConfirmModify;
-
-                clearFlagsFields.OnSelectionChanged += x =>
-                {
-                    camera.Viewport.ClearFlags = (ClearFlags) x;
-                    MarkAsModified();
-                    ConfirmModify();
-                };
-
-                clearStencilField.OnChanged += x => { camera.Viewport.ClearStencil = (ushort) x; };
-                clearStencilField.OnConfirmed += ConfirmModify;
-                clearStencilField.OnFocusLost += ConfirmModify;
-
-                clearDepthField.OnChanged += x => { camera.Viewport.ClearDepth = x; };
-                clearDepthField.OnConfirmed += ConfirmModify;
-                clearDepthField.OnFocusLost += ConfirmModify;
-
-                clearColorField.OnChanged += x =>
-                {
-                    camera.Viewport.ClearColor = x;
-                    MarkAsModified();
-                    ConfirmModify();
-                };
-
-                priorityField.OnChanged += x => { camera.Priority = x; MarkAsModified(); };
-                priorityField.OnConfirmed += ConfirmModify;
-                priorityField.OnFocusLost += ConfirmModify;
-
-                layersField.OnSelectionChanged += x =>
-                {
-                    ulong layers = 0;
-                    bool[] states = layersField.States;
-                    for (int i = 0; i < states.Length; i++)
-                        layers |= states[i] ? Layers.Values[i] : 0;
-
-                    layersValue = layers;
-                    camera.Layers = layers;
-
-                    MarkAsModified();
-                    ConfirmModify();
-                };
-
-                mainField.OnChanged += x =>
-                {
-                    camera.Main = x; 
-                    MarkAsModified();
-                    ConfirmModify();
-                };
-
-                Layout.AddElement(projectionTypeField);
-                Layout.AddElement(fieldOfView);
-                Layout.AddElement(orthoHeight);
-                Layout.AddElement(aspectField);
-                Layout.AddElement(nearPlaneField);
-                Layout.AddElement(farPlaneField);
-                GUILayoutX viewportTopLayout = Layout.AddLayoutX();
-                viewportTopLayout.AddElement(new GUILabel(new LocEdString("Viewport"), GUIOption.FixedWidth(100)));
-                GUILayoutY viewportContentLayout = viewportTopLayout.AddLayoutY();
-
-                GUILayoutX viewportTopRow = viewportContentLayout.AddLayoutX();
-                viewportTopRow.AddElement(viewportXField);
-                viewportTopRow.AddElement(viewportWidthField);
-
-                GUILayoutX viewportBotRow = viewportContentLayout.AddLayoutX();
-                viewportBotRow.AddElement(viewportYField);
-                viewportBotRow.AddElement(viewportHeightField);
-
-                Layout.AddElement(clearFlagsFields);
-                Layout.AddElement(clearColorField);
-                Layout.AddElement(clearDepthField);
-                Layout.AddElement(clearStencilField);
-                Layout.AddElement(priorityField);
-                Layout.AddElement(layersField);
-                Layout.AddElement(mainField);
-
-                renderSettingsFoldout.OnToggled += x =>
-                {
-                    Persistent.SetBool("renderSettings_Expanded", x);
-                    renderSettingsLayout.Active = x;
-                };
-                renderSettingsFoldout.AcceptsKeyFocus = false;
-                Layout.AddElement(renderSettingsFoldout);
-
-                renderSettingsLayout = Layout.AddLayoutX();
-                {
-                    renderSettingsLayout.AddSpace(10);
-
-                    GUILayoutY contentsLayout = renderSettingsLayout.AddLayoutY();
-                    renderSettingsGUI = new InspectorFieldDrawer(new InspectableContext(Persistent, camera), contentsLayout);
-                    renderSettingsGUI.AddDefault(camera.RenderSettings);
-                }
-
-                ToggleTypeSpecificFields(camera.ProjectionType);
-                renderSettingsLayout.Active = Persistent.GetBool("renderSettings_Expanded");
-            }
-        }
-
-        /// <summary>
-        /// Enables or disables different GUI elements depending on the projection type.
-        /// </summary>
-        /// <param name="type">Projection type to show GUI elements for.</param>
-        private void ToggleTypeSpecificFields(ProjectionType type)
-        {
-            if (type == ProjectionType.Orthographic)
-            {
-                fieldOfView.Active = false;
-                orthoHeight.Active = true;
-            }
-            else
-            {
-                fieldOfView.Active = true;
-                orthoHeight.Active = false;
-            }
-        }
-
-        /// <summary>
-        /// Marks the contents of the inspector as modified.
-        /// </summary>
-        protected void MarkAsModified()
-        {
-            modifyState |= InspectableState.ModifyInProgress;
-        }
-
-        /// <summary>
-        /// Confirms any queued modifications.
-        /// </summary>
-        protected void ConfirmModify()
-        {
-            if (modifyState.HasFlag(InspectableState.ModifyInProgress))
-                modifyState |= InspectableState.Modified;
+            drawer.EndCategory();
         }
     }
 

+ 1 - 1
Source/bsf

@@ -1 +1 @@
-Subproject commit ac812596b356e74f0ae4f8bf9550eaabae4b8353
+Subproject commit cfda09760637e270441dedaaca3787e549e4f5da