/// <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)); }
/// <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); }
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); }
/// <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); }