private void DrawSnapHandles(TrackSnapData trackSnapData, DragTrack_Curved curvedTrack) { float minPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong - trackSnapData.Width); float maxPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong + trackSnapData.Width); Quaternion rot = Quaternion.AngleAxis(curvedTrack.MaxAngle * trackSnapData.PositionAlong, curvedTrack.transform.forward); Vector3 endUp = RotatePointAroundPivot(curvedTrack.transform.up, Vector3.zero, rot); Handles.color = trackSnapData.GizmoColor; Vector3 positionAlongWorld = curvedTrack.GetGizmoPosition(trackSnapData.PositionAlong); Handles.DrawSolidDisc(positionAlongWorld, endUp, curvedTrack.discSize / 2f); rot = Quaternion.AngleAxis(curvedTrack.MaxAngle * minPositionAlong, curvedTrack.transform.forward); endUp = RotatePointAroundPivot(curvedTrack.transform.right, Vector3.zero, rot); Handles.DrawWireArc(curvedTrack.transform.position, curvedTrack.transform.forward, endUp, curvedTrack.MaxAngle * (maxPositionAlong - minPositionAlong), curvedTrack.radius * 1.01f); Quaternion minRot = Quaternion.AngleAxis(curvedTrack.MaxAngle * minPositionAlong, curvedTrack.transform.forward); endUp = RotatePointAroundPivot(curvedTrack.transform.up, Vector3.zero, minRot); Vector3 minPositionAlongWorld = curvedTrack.GetGizmoPosition(minPositionAlong); Handles.DrawSolidDisc(minPositionAlongWorld, endUp, curvedTrack.discSize / 4f); Quaternion maxRot = Quaternion.AngleAxis(curvedTrack.MaxAngle * maxPositionAlong, curvedTrack.transform.forward); endUp = RotatePointAroundPivot(curvedTrack.transform.up, Vector3.zero, maxRot); Vector3 maxPositionAlongWorld = curvedTrack.GetGizmoPosition(maxPositionAlong); Handles.DrawSolidDisc(maxPositionAlongWorld, endUp, curvedTrack.discSize / 4f); }
public void OnSceneGUI() { DragTrack_Curved _target = (DragTrack_Curved)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); if (!_target.Loops) { Handles.color = _target.handleColour; 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.color = _target.handleColour; 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); } } }