//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using BansheeEngine; namespace BansheeEditor { /** @addtogroup Inspectors * @{ */ /// /// Renders an inspector for the component. /// [CustomInspector(typeof(SliderJoint))] internal class SliderJointInspector : JointInspector { private GUIToggleField enableLimitField = new GUIToggleField(new LocEdString("Enable limit")); private LimitLinearRangeGUI limitGUI; private GUILayoutX limitLayout; /// protected internal override void Initialize() { SliderJoint joint = InspectedObject as SliderJoint; if (joint != null) BuildGUI(joint); } /// protected internal override InspectableState Refresh() { SliderJoint joint = InspectedObject as SliderJoint; if (joint == null) return InspectableState.NotModified; Refresh(joint); InspectableState oldState = modifyState; if (modifyState.HasFlag(InspectableState.Modified)) modifyState = InspectableState.NotModified; return oldState; } /// /// Creates GUI elements for fields specific to the slider joint. /// protected void BuildGUI(SliderJoint joint) { enableLimitField.OnChanged += x => { joint.SetFlag(SliderJointFlag.Limit, x); MarkAsModified(); ConfirmModify(); ToggleLimitFields(x); }; Layout.AddElement(enableLimitField); limitLayout = Layout.AddLayoutX(); { limitLayout.AddSpace(10); GUILayoutY limitContentsLayout = limitLayout.AddLayoutY(); limitGUI = new LimitLinearRangeGUI(joint.Limit, limitContentsLayout, Persistent); limitGUI.OnChanged += (x, y) => { joint.Limit = x; joint.Limit.SetBase(y); MarkAsModified(); }; limitGUI.OnConfirmed += ConfirmModify; } ToggleLimitFields(joint.HasFlag(SliderJointFlag.Limit)); base.BuildGUI(joint, true); } /// /// Updates all GUI elements from current values in the joint. /// /// Joint to update the GUI from. protected void Refresh(SliderJoint joint) { bool enableLimit = joint.HasFlag(SliderJointFlag.Limit); if (enableLimitField.Value != enableLimit) { enableLimitField.Value = enableLimit; ToggleLimitFields(enableLimit); } limitGUI.Limit = joint.Limit; base.Refresh(joint); } /// /// Hides or shows limit property GUI elements. /// /// True to show, false to hide. private void ToggleLimitFields(bool enable) { limitLayout.Active = enable; } } /** @} */ }