Explorar o código

Refactor: Collider components now use automated inspector

BearishSun %!s(int64=6) %!d(string=hai) anos
pai
achega
09c390ce8e

+ 0 - 81
Source/EditorManaged/Inspectors/BoxColliderInspector.cs

@@ -1,81 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders an inspector for the <see cref="BoxCollider"/> component.
-    /// </summary>
-    [CustomInspector(typeof(BoxCollider))]
-    internal class BoxColliderInspector : ColliderInspector
-    {
-        private GUIVector3Field centerField = new GUIVector3Field(new LocEdString("Center"));
-        private GUIVector3Field extentsField = new GUIVector3Field(new LocEdString("Extents"));
-
-        /// <inheritdoc/>
-        protected internal override void Initialize()
-        {
-            BoxCollider collider = InspectedObject as BoxCollider;
-
-            if(collider != null)
-                BuildGUI(collider);
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh()
-        {
-            BoxCollider collider = InspectedObject as BoxCollider;
-            if (collider == null)
-                return InspectableState.NotModified;
-
-            Refresh(collider);
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields specific to the box collider.
-        /// </summary>
-        protected void BuildGUI(BoxCollider collider)
-        {
-            centerField.OnValueChanged += x => { collider.Center = x; MarkAsModified(); };
-            centerField.OnFocusLost += ConfirmModify;
-            centerField.OnConfirm += x => ConfirmModify();
-
-            extentsField.OnValueChanged += x => { collider.Extents = x; MarkAsModified(); };
-            extentsField.OnFocusLost += ConfirmModify;
-            extentsField.OnConfirm += x => ConfirmModify();
-
-            Layout.AddElement(centerField);
-            Layout.AddElement(extentsField);
-
-            base.BuildGUI(collider);
-        }
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected void Refresh(BoxCollider collider)
-        {
-            if (!centerField.HasInputFocus)
-                centerField.Value = collider.Center;
-
-            if(!extentsField.HasInputFocus)
-                extentsField.Value = collider.Extents;
-
-            base.Refresh(collider);
-        }
-    }
-
-    /** @} */
-}

+ 0 - 110
Source/EditorManaged/Inspectors/CapsuleColliderInspector.cs

@@ -1,110 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders an inspector for the <see cref="CapsuleCollider"/> component.
-    /// </summary>
-    [CustomInspector(typeof(CapsuleCollider))]
-    internal class CapsuleColliderInspector : ColliderInspector
-    {
-        private GUIVector3Field centerField = new GUIVector3Field(new LocEdString("Center"));
-        private GUIVector3Field orientationField = new GUIVector3Field(new LocEdString("Orientation"));
-        private GUIFloatField radiusField = new GUIFloatField(new LocEdString("Radius"));
-        private GUIFloatField halfHeightField = new GUIFloatField(new LocEdString("Half height"));
-
-        private Vector3 orientation;
-
-        /// <inheritdoc/>
-        protected internal override void Initialize()
-        {
-            CapsuleCollider collider = InspectedObject as CapsuleCollider;
-
-            if (collider != null)
-                BuildGUI(collider);
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh()
-        {
-            CapsuleCollider collider = InspectedObject as CapsuleCollider;
-            if (collider == null)
-                return InspectableState.NotModified;
-
-            Refresh(collider);
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields specific to the capsule collider.
-        /// </summary>
-        protected void BuildGUI(CapsuleCollider collider)
-        {
-            centerField.OnValueChanged += x => { collider.Center = x; MarkAsModified(); };
-            centerField.OnFocusLost += ConfirmModify;
-            centerField.OnConfirm += x => ConfirmModify();
-
-            orientationField.OnValueChanged += x =>
-            {
-                orientation = x;
-                Quaternion rotation = Quaternion.FromEuler(x);
-
-                collider.Normal = rotation.Rotate(Vector3.YAxis);
-                MarkAsModified();
-            };
-            orientationField.OnFocusLost += ConfirmModify;
-            orientationField.OnConfirm += x => ConfirmModify();
-
-            radiusField.OnChanged += x => { collider.Radius = x; MarkAsModified(); };
-            radiusField.OnFocusLost += ConfirmModify;
-            radiusField.OnConfirmed += ConfirmModify;
-
-            halfHeightField.OnChanged += x => { collider.HalfHeight = x; MarkAsModified(); };
-            halfHeightField.OnFocusLost += ConfirmModify;
-            halfHeightField.OnConfirmed += ConfirmModify;
-
-            Layout.AddElement(centerField);
-            Layout.AddElement(orientationField);
-            Layout.AddElement(radiusField);
-            Layout.AddElement(halfHeightField);
-
-            orientation = Quaternion.FromToRotation(Vector3.YAxis, collider.Normal).ToEuler();
-
-            base.BuildGUI(collider);
-        }
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected void Refresh(CapsuleCollider collider)
-        {
-            if (!centerField.HasInputFocus)
-                centerField.Value = collider.Center;
-
-            if (!orientationField.HasInputFocus)
-                orientationField.Value = orientation;
-
-            if (!radiusField.HasInputFocus)
-                radiusField.Value = collider.Radius;
-
-            if (!halfHeightField.HasInputFocus)
-                halfHeightField.Value = collider.HalfHeight;
-
-            base.Refresh(collider);
-        }
-    }
-
-    /** @} */
-}

+ 0 - 132
Source/EditorManaged/Inspectors/ColliderInspector.cs

@@ -1,132 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders common inspector elements for all <see cref="Collider"/> components.
-    /// </summary>
-    internal abstract class ColliderInspector : Inspector
-    {
-        private GUIToggleField isTriggerField = new GUIToggleField(new LocEdString("Is trigger"));
-        private GUIFloatField massField = new GUIFloatField(new LocEdString("Mass"));
-        private GUIResourceField materialField = new GUIResourceField(typeof (PhysicsMaterial),
-            new LocEdString("Material"));
-        private GUIFloatField contactOffsetField = new GUIFloatField(new LocEdString("Contact offset"));
-        private GUIFloatField restOffsetField = new GUIFloatField(new LocEdString("Rest offset"));
-
-        private GUIEnumField collisionReportModeField = new GUIEnumField(typeof (CollisionReportMode),
-            new LocEdString("Collision report mode"));
-        private GUIListBoxField layerField = new GUIListBoxField(Layers.Names, false, new LocEdString("Layer"));
-
-        private ulong layersValue = 0;
-        protected InspectableState modifyState;
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected virtual void Refresh(Collider collider)
-        {
-            isTriggerField.Value = collider.Trigger;
-            massField.Value = collider.Mass;
-            materialField.ValueRef = collider.Material;
-            contactOffsetField.Value = collider.ContactOffset;
-            restOffsetField.Value = collider.RestOffset;
-            collisionReportModeField.Value = (ulong)collider.CollisionReportMode;
-
-            if (layersValue != collider.Layer)
-            {
-                bool[] states = new bool[64];
-                for (int i = 0; i < states.Length; i++)
-                    states[i] = (collider.Layer & Layers.Values[i]) == Layers.Values[i];
-
-                layerField.States = states;
-                layersValue = collider.Layer;
-            }
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields common to all colliders.
-        /// </summary>
-        protected virtual void BuildGUI(Collider collider)
-        {
-            isTriggerField.OnChanged += x => { collider.Trigger = x; MarkAsModified(); ConfirmModify(); };
-
-            massField.OnChanged += x => { collider.Mass = x; MarkAsModified(); };
-            massField.OnConfirmed += ConfirmModify;
-            massField.OnFocusLost += ConfirmModify;
-
-            materialField.OnChanged += x =>
-            {
-                PhysicsMaterial mesh = Resources.Load<PhysicsMaterial>(x.UUID);
-                collider.Material = mesh;
-
-                MarkAsModified();
-                ConfirmModify();
-            };
-
-            contactOffsetField.OnChanged += x => { collider.ContactOffset = x; MarkAsModified(); };
-            contactOffsetField.OnConfirmed += ConfirmModify;
-            contactOffsetField.OnFocusLost += ConfirmModify;
-
-            restOffsetField.OnChanged += x => { collider.RestOffset = x; MarkAsModified(); };
-            restOffsetField.OnConfirmed += ConfirmModify;
-            restOffsetField.OnFocusLost += ConfirmModify;
-
-            collisionReportModeField.OnSelectionChanged += x =>
-            {
-                collider.CollisionReportMode = (CollisionReportMode)x;
-
-                MarkAsModified();
-                ConfirmModify();
-            };
-
-            layerField.OnSelectionChanged += x =>
-            {
-                ulong layer = 0;
-                bool[] states = layerField.States;
-                for (int i = 0; i < states.Length; i++)
-                    layer |= states[i] ? Layers.Values[i] : 0;
-
-                layersValue = layer;
-                collider.Layer = layer;
-
-                MarkAsModified();
-                ConfirmModify();
-            };
-
-            Layout.AddElement(isTriggerField);
-            Layout.AddElement(massField);
-            Layout.AddElement(materialField);
-            Layout.AddElement(contactOffsetField);
-            Layout.AddElement(restOffsetField);
-            Layout.AddElement(collisionReportModeField);
-            Layout.AddElement(layerField);
-        }
-
-        /// <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;
-        }
-    }
-
-    /** @} */
-}

+ 0 - 76
Source/EditorManaged/Inspectors/MeshColliderInspector.cs

@@ -1,76 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders an inspector for the <see cref="MeshCollider"/> component.
-    /// </summary>
-    [CustomInspector(typeof(MeshCollider))]
-    internal class MeshColliderInspector : ColliderInspector
-    {
-        private GUIResourceField meshField = new GUIResourceField(typeof(PhysicsMesh), new LocEdString("Mesh"));
-
-        /// <inheritdoc/>
-        protected internal override void Initialize()
-        {
-            MeshCollider collider = InspectedObject as MeshCollider;
-
-            if (collider != null)
-                BuildGUI(collider);
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh()
-        {
-            MeshCollider collider = InspectedObject as MeshCollider;
-            if (collider == null)
-                return InspectableState.NotModified;
-
-            Refresh(collider);
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields specific to the mesh collider.
-        /// </summary>
-        protected void BuildGUI(MeshCollider collider)
-        {
-            meshField.OnChanged += x =>
-            {
-                PhysicsMesh mesh = Resources.Load<PhysicsMesh>(x.UUID);
-                collider.Mesh = mesh;
-
-                MarkAsModified();
-                ConfirmModify();
-            };
-
-            Layout.AddElement(meshField);
-
-            base.BuildGUI(collider);
-        }
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected void Refresh(MeshCollider collider)
-        {
-            meshField.ValueRef = collider.Mesh;
-
-            base.Refresh(collider);
-        }
-    }
-
-    /** @} */
-}

+ 0 - 91
Source/EditorManaged/Inspectors/PlaneColliderInspector.cs

@@ -1,91 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders an inspector for the <see cref="PlaneCollider"/> component.
-    /// </summary>
-    [CustomInspector(typeof(PlaneCollider))]
-    internal class PlaneColliderInspector : ColliderInspector
-    {
-        private GUIVector3Field normalField = new GUIVector3Field(new LocEdString("Normal"));
-        private GUIFloatField distanceField = new GUIFloatField(new LocEdString("Distance"));
-
-        private Vector3 normal;
-
-        /// <inheritdoc/>
-        protected internal override void Initialize()
-        {
-            PlaneCollider collider = InspectedObject as PlaneCollider;
-
-            if (collider != null)
-                BuildGUI(collider);
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh()
-        {
-            PlaneCollider collider = InspectedObject as PlaneCollider;
-            if (collider == null)
-                return InspectableState.NotModified;
-
-            Refresh(collider);
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields specific to the plane collider.
-        /// </summary>
-        protected void BuildGUI(PlaneCollider collider)
-        {
-            normalField.OnValueChanged += x =>
-            {
-                normal = x;
-                collider.Normal = x;
-
-                MarkAsModified();
-            };
-            normalField.OnFocusLost += ConfirmModify;
-            normalField.OnConfirm += x => ConfirmModify();
-
-            distanceField.OnChanged += x => { collider.Distance = x; MarkAsModified(); };
-            distanceField.OnFocusLost += ConfirmModify;
-            distanceField.OnConfirmed += ConfirmModify;
-
-            Layout.AddElement(normalField);
-            Layout.AddElement(distanceField);
-
-            normal = collider.Normal;
-
-            base.BuildGUI(collider);
-        }
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected void Refresh(PlaneCollider collider)
-        {
-            if (!normalField.HasInputFocus)
-                normalField.Value = normal;
-
-            if (!distanceField.HasInputFocus)
-                distanceField.Value = collider.Distance;
-
-            base.Refresh(collider);
-        }
-    }
-
-    /** @} */
-}

+ 0 - 81
Source/EditorManaged/Inspectors/SphereColliderInspector.cs

@@ -1,81 +0,0 @@
-//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
-//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
-using bs;
-
-namespace bs.Editor
-{
-    /** @addtogroup Inspectors
-     *  @{
-     */
-
-    /// <summary>
-    /// Renders an inspector for the <see cref="SphereCollider"/> component.
-    /// </summary>
-    [CustomInspector(typeof(SphereCollider))]
-    internal class SphereColliderInspector : ColliderInspector
-    {
-        private GUIVector3Field centerField = new GUIVector3Field(new LocEdString("Center"));
-        private GUIFloatField radiusField = new GUIFloatField(new LocEdString("Radius"));
-
-        /// <inheritdoc/>
-        protected internal override void Initialize()
-        {
-            SphereCollider collider = InspectedObject as SphereCollider;
-
-            if (collider != null)
-                BuildGUI(collider);
-        }
-
-        /// <inheritdoc/>
-        protected internal override InspectableState Refresh()
-        {
-            SphereCollider collider = InspectedObject as SphereCollider;
-            if (collider == null)
-                return InspectableState.NotModified;
-
-            Refresh(collider);
-
-            InspectableState oldState = modifyState;
-            if (modifyState.HasFlag(InspectableState.Modified))
-                modifyState = InspectableState.NotModified;
-
-            return oldState;
-        }
-
-        /// <summary>
-        /// Creates GUI elements for fields specific to the sphere collider.
-        /// </summary>
-        protected void BuildGUI(SphereCollider collider)
-        {
-            centerField.OnValueChanged += x => { collider.Center = x; MarkAsModified(); };
-            centerField.OnFocusLost += ConfirmModify;
-            centerField.OnConfirm += x => ConfirmModify();
-
-            radiusField.OnChanged += x => { collider.Radius = x; MarkAsModified(); };
-            radiusField.OnFocusLost += ConfirmModify;
-            radiusField.OnConfirmed += ConfirmModify;
-
-            Layout.AddElement(centerField);
-            Layout.AddElement(radiusField);
-
-            base.BuildGUI(collider);
-        }
-
-        /// <summary>
-        /// Updates all GUI elements from current values in the collider.
-        /// </summary>
-        /// <param name="collider">Collider to update the GUI from.</param>
-        protected void Refresh(SphereCollider collider)
-        {
-            if (!centerField.HasInputFocus)
-                centerField.Value = collider.Center;
-
-            if (!radiusField.HasInputFocus)
-                radiusField.Value = collider.Radius;
-
-            base.Refresh(collider);
-        }
-    }
-
-    /** @} */
-}