//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected virtual void UpdateMeshes(float pValue, float pHoverValue, float pHoverArc) { vTrackSegments.Clear(); vTrackCuts.Clear(); const float radInn = UiItemSelectRenderer.InnerRadius; const float radOut = UiItemSelectRenderer.OuterRadius; const float radInset = 0.04f; float fullAngle = vAngle1 - vAngle0; float slideAngle = fullAngle - vGrabArc; float grabArcHalf = vGrabArc / 2; float valCenter = pValue * slideAngle + grabArcHalf; float hovCenter = pHoverValue * slideAngle + grabArcHalf; float zeroCenter = vZeroValue * slideAngle + grabArcHalf; bool isHoverTooClose = (Math.Abs(valCenter - hovCenter) < vGrabArc * (0.5f + HoverBarRelW)); if (vSliderItem.FillStartingPoint == SliderItem.FillType.Zero) { float break0 = Math.Min(zeroCenter, valCenter); float break1 = Math.Max(zeroCenter, valCenter); vTrackSegments.Add(new DisplayUtil.TrackSegment { StartValue = 0, EndValue = break0 }); vTrackSegments.Add(new DisplayUtil.TrackSegment { StartValue = break0, EndValue = break1, IsFill = true, IsZeroAtStart = (break0 == zeroCenter) }); vTrackSegments.Add(new DisplayUtil.TrackSegment { StartValue = break1, EndValue = fullAngle }); } else { bool isMinStart = (vSliderItem.FillStartingPoint == SliderItem.FillType.MinimumValue); vTrackSegments.Add(new DisplayUtil.TrackSegment { StartValue = 0, EndValue = valCenter, IsFill = isMinStart }); vTrackSegments.Add(new DisplayUtil.TrackSegment { StartValue = valCenter, EndValue = fullAngle, IsFill = !isMinStart }); } vTrackCuts.Add(new DisplayUtil.TrackSegment { StartValue = valCenter - grabArcHalf, EndValue = valCenter + grabArcHalf, }); if (pHoverArc > 0 && !isHoverTooClose) { vTrackCuts.Add(new DisplayUtil.TrackSegment { StartValue = hovCenter - pHoverArc / 2, EndValue = hovCenter + pHoverArc / 2, }); vHover.UpdateSize(radInn, radOut, pHoverArc); } else { vHover.UpdateSize(0, 0, 0); } vTrack.UpdateSegments(vTrackSegments.ReadOnly, vTrackCuts.ReadOnly, radInn + radInset, radOut - radInset); }