示例#1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        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);
        }