/// <inheritdoc/>
        protected internal override void Initialize()
        {
            SliderJoint joint = (SliderJoint)InspectedObject;

            BuildGUI(joint, true);

            drawer.AddDefault(joint, typeof(SliderJoint));
            drawer.AddField("Enable limit",
                            () => joint.HasFlag(SliderJointFlag.Limit),
                            x => joint.SetFlag(SliderJointFlag.Limit, x));
            drawer.AddConditional("Limit", () => joint.HasFlag(SliderJointFlag.Limit));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates GUI elements for fields specific to the slider joint.
        /// </summary>
        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);
        }
Ejemplo n.º 3
0
        private static void DrawSliderJoint(SliderJoint joint)
        {
            Vector3 anchor = GetAnchor(joint, JointBody.Anchor);
            Vector3 target = GetAnchor(joint, JointBody.Target);
            Vector3 normal = -joint.SceneObject.Right;

            if (joint.HasFlag(SliderJointFlag.Limit))
            {
                LimitLinearRange limit = joint.Limit;

                float max = MathEx.Min(10000.0f, limit.upper);
                float min = MathEx.Clamp(limit.lower, 0.0f, max);
                max = MathEx.Max(max, min);

                Gizmos.Color = Color.Red;
                Gizmos.DrawLine(anchor, anchor + normal * min);

                Gizmos.Color = Color.Green;
                Gizmos.DrawLine(anchor + normal * min, anchor + normal * max);
            }
            else
            {
                Gizmos.Color = Color.Green;

                float length = 100.0f;
                Gizmos.DrawLine(anchor, anchor + normal * length);
            }

            Gizmos.Color = Color.Yellow;
            Gizmos.DrawSphere(target, 0.05f);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Updates all GUI elements from current values in the joint.
        /// </summary>
        /// <param name="joint">Joint to update the GUI from.</param>
        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);
        }