private void DrawTrackRegions(TrackSnapData trackSnapData, DragTrack_Hinge hingeTrack) { float minPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong - trackSnapData.Width); float maxPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong + trackSnapData.Width); Quaternion rot = Quaternion.AngleAxis(hingeTrack.MaxAngle * trackSnapData.PositionAlong, hingeTrack.transform.forward); Vector3 endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, rot); Handles.color = trackSnapData.GizmoColor; Vector3 positionAlongWorld = hingeTrack.GetGizmoPosition(trackSnapData.PositionAlong); Handles.DrawSolidDisc(positionAlongWorld, endUp, hingeTrack.discSize / 2f); rot = Quaternion.AngleAxis(hingeTrack.MaxAngle * minPositionAlong, hingeTrack.transform.forward); endUp = RotatePointAroundPivot(hingeTrack.transform.right, Vector3.zero, rot); Handles.DrawWireArc(hingeTrack.transform.position, hingeTrack.transform.forward, endUp, hingeTrack.MaxAngle * (maxPositionAlong - minPositionAlong), hingeTrack.radius); Quaternion minRot = Quaternion.AngleAxis(hingeTrack.MaxAngle * minPositionAlong, hingeTrack.transform.forward); endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, minRot); Vector3 minPositionAlongWorld = hingeTrack.GetGizmoPosition(minPositionAlong); Handles.DrawSolidDisc(minPositionAlongWorld, endUp, hingeTrack.discSize / 4f); Quaternion maxRot = Quaternion.AngleAxis(hingeTrack.MaxAngle * maxPositionAlong, hingeTrack.transform.forward); endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, maxRot); Vector3 maxPositionAlongWorld = hingeTrack.GetGizmoPosition(maxPositionAlong); Handles.DrawSolidDisc(maxPositionAlongWorld, endUp, hingeTrack.discSize / 4f); }
public void OnSceneGUI() { DragTrack_Hinge _target = (DragTrack_Hinge)target; Handles.color = new Color(_target.handleColour.r / 2f, _target.handleColour.g / 2f, _target.handleColour.b / 2f, _target.handleColour.a); Handles.DrawSolidDisc(_target.GetGizmoPosition(0f), _target.transform.up, _target.discSize); Handles.color = _target.handleColour; if (!_target.Loops) { Quaternion rot = Quaternion.AngleAxis(_target.MaxAngle, _target.transform.forward); Vector3 endUp = RotatePointAroundPivot(_target.transform.up, Vector3.zero, rot); Handles.DrawSolidDisc(_target.GetGizmoPosition(1f), endUp, _target.discSize); } Handles.DrawWireArc(_target.transform.position, _target.transform.forward, _target.transform.right, _target.MaxAngle, _target.radius); if (_target.doSnapping) { foreach (TrackSnapData trackSnapData in _target.allTrackSnapData) { DrawSnapHandles(trackSnapData, _target); } } }