예제 #1
0
        /*--------------------------------------------------------------------------------------------*/
        private void UpdateMeshes(float pValue, float pHoverValue, float pHoverArcHalf)
        {
            const float ri1 = 1f;
            const float ro1 = 1.5f;
            const float ri2 = ri1 + 0.04f;
            const float ro2 = ro1 - 0.04f;

            float grabArc     = (vGrabArcHalf + UiHoverMeshSlice.AngleInset) * 2;
            float hoverArc    = Math.Max(0, pHoverArcHalf * 2);
            float hoverArcPad = vGrabArcHalf - pHoverArcHalf;
            float fullArc     = vAngle1 - vAngle0 - grabArc;
            float valAngle    = vAngle0 + fullArc * pValue;
            float hovAngle    = vAngle0 + fullArc * pHoverValue;
            bool  tooClose    = (Math.Abs(valAngle - hovAngle) < grabArc / 2 + hoverArc);

            if (pHoverArcHalf == 0 || tooClose)
            {
                vHover.Resize(ri1, ro1, 0);
                vFillA.Resize(ri2, ro2, vAngle0, valAngle);
                vFillB.Resize(ri2, ro2, 0);
                vTrackA.Resize(ri2, ro2, grabArc + valAngle, vAngle1);
                vTrackB.Resize(ri2, ro2, 0);
                return;
            }

            vHover.Resize(ri1, ro1, hoverArc);

            if (pValue <= pHoverValue)
            {
                vFillA.Resize(ri2, ro2, vAngle0, valAngle);
                vFillB.Resize(ri2, ro2, 0);
                vTrackA.Resize(ri2, ro2, grabArc + valAngle, hovAngle + hoverArcPad);
                vTrackB.Resize(ri2, ro2, hovAngle + grabArc - hoverArcPad, vAngle1);
            }
            else
            {
                vFillA.Resize(ri2, ro2, vAngle0, hovAngle + hoverArcPad);
                vFillB.Resize(ri2, ro2, hovAngle + grabArc - hoverArcPad, valAngle);
                vTrackA.Resize(ri2, ro2, grabArc + valAngle, vAngle1);
                vTrackB.Resize(ri2, ro2, 0);
            }
        }
예제 #2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public virtual void Build(MenuState pMenuState, IBaseItemState pItemState,
                                  float pArcAngle, IItemVisualSettings pSettings)
        {
            vMenuState = pMenuState;
            vItemState = pItemState;
            vSettings  = (ItemVisualSettingsStandard)pSettings;

            ////

            vHoverSlice = new UiHoverMeshSlice(gameObject);
            vHoverSlice.Resize(1, 1.5f, pArcAngle);

            ////

            var labelObj = new GameObject("Label");

            labelObj.transform.SetParent(gameObject.transform, false);
            labelObj.transform.localPosition = new Vector3(0, 0, 1);
            labelObj.transform.localRotation = Quaternion.FromToRotation(Vector3.back, Vector3.right);
            labelObj.transform.localScale    = new Vector3((vMenuState.IsOnLeftSide ? 1 : -1), 1, 1);

            vLabel           = labelObj.AddComponent <UiLabel>();
            vLabel.AlignLeft = vMenuState.IsOnLeftSide;
        }
예제 #3
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public virtual void Build(MenuState pMenuState, IBaseItemState pItemState,
                                  float pArcAngle, IItemVisualSettings pSettings)
        {
            vMenuState  = pMenuState;
            vItemState  = pItemState;
            vAngle0     = -pArcAngle / 2f + UiHoverMeshSlice.AngleInset;
            vAngle1     = pArcAngle / 2f - UiHoverMeshSlice.AngleInset;
            vSettings   = (ItemVisualSettingsStandard)pSettings;
            vSliderItem = (ISliderItem)vItemState.Item;

            const float pi = (float)Math.PI;

            vGrabArcHalf  = pi / 80f;
            vSlideDegree0 = (vAngle0 + vGrabArcHalf) / pi * 180;
            vSlideDegrees = (vAngle1 - vAngle0 - vGrabArcHalf * 2) / pi * 180;

            ////

            vHiddenSlice = new UiHoverMeshSlice(gameObject, true);
            vHiddenSlice.Resize(1, 1.5f, pArcAngle);
            vHiddenSlice.UpdateBackground(Color.clear);

            vTrackA = new UiHoverMeshSlice(gameObject, true, "TrackA");
            vTrackB = new UiHoverMeshSlice(gameObject, true, "TrackB");
            vFillA  = new UiHoverMeshSlice(gameObject, true, "FillA");
            vFillB  = new UiHoverMeshSlice(gameObject, true, "FillB");

            ////

            vTickMat              = new Material(Shader.Find("Unlit/AlphaSelfIllum"));
            vTickMat.renderQueue -= 400;
            vTickMat.color        = Color.clear;

            if (vSliderItem.Ticks > 1)
            {
                Vector3 quadScale   = new Vector3(UiHoverMeshSlice.AngleInset * 2, 0.36f, 0.1f);
                float   percPerTick = 1 / (float)(vSliderItem.Ticks - 1);

                vTicks = new GameObject[vSliderItem.Ticks];

                for (int i = 0; i < vSliderItem.Ticks; ++i)
                {
                    var tick = new GameObject("Tick" + i);
                    tick.transform.SetParent(gameObject.transform, false);
                    tick.transform.localRotation = Quaternion.AngleAxis(
                        vSlideDegree0 + vSlideDegrees * i * percPerTick, Vector3.up);
                    vTicks[i] = tick;

                    var quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
                    quad.renderer.sharedMaterial = vTickMat;
                    quad.transform.SetParent(tick.transform, false);
                    quad.transform.localPosition = new Vector3(0, 0, 1.25f);
                    quad.transform.localRotation =
                        Quaternion.FromToRotation(Vector3.back, Vector3.down);
                    quad.transform.localScale = quadScale;
                }
            }

            ////

            vGrabHold = new GameObject("GrabHold");
            vGrabHold.transform.SetParent(gameObject.transform, false);

            var grabObj = new GameObject("Grab");

            grabObj.transform.SetParent(vGrabHold.transform, false);

            vGrab = grabObj.AddComponent <UiItemSliderGrabRenderer>();
            vGrab.Build(vMenuState, vItemState, vGrabArcHalf * 2, pSettings);

            ////

            vHoverHold = new GameObject("HoverHold");
            vHoverHold.transform.SetParent(gameObject.transform, false);

            var hoverObj = new GameObject("Hover");

            hoverObj.transform.SetParent(vHoverHold.transform, false);

            vHover = new UiHoverMeshSlice(hoverObj, false, "Hover");
        }