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>Initializes the struct with default values.</summary> public static LimitLinearRange Default() { LimitLinearRange value = new LimitLinearRange(); value.lower = 0f; value.upper = 0f; value.contactDist = -1f; value.restitution = 0f; value.spring = new Spring(); return(value); }
/// <summary> /// Constructs a new set of GUI elements for inspecting the limit object. /// </summary> /// <param name="limit">Initial values to assign to the GUI elements.</param> /// <param name="layout">Layout to append the GUI elements to.</param> /// <param name="properties">A set of properties that are persisted by the parent inspector. Used for saving state. /// </param> public LimitLinearRangeGUI(LimitLinearRange limit, GUILayout layout, SerializableProperties properties) { this.limitData = limit; limitLowerField.OnChanged += x => { limitData.lower = x; MarkAsModified(); }; limitLowerField.OnFocusLost += ConfirmModify; limitUpperField.OnChanged += x => { limitData.upper = x; MarkAsModified(); }; limitUpperField.OnFocusLost += ConfirmModify; layout.AddElement(limitLowerField); layout.AddElement(limitUpperField); limitCommonGUI = new LimitCommonGUI("linearRange", limit.GetBase(), layout, properties); limitCommonGUI.OnChanged += x => MarkAsModified(); limitCommonGUI.OnConfirmed += ConfirmModify; }
private static extern void Internal_setLimit(IntPtr thisPtr, ref LimitLinearRange limit);
private static extern void Internal_getLimit(IntPtr thisPtr, out LimitLinearRange __output);