Beispiel #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void Awake()
        {
            vHueSettings = new ItemVisualSettingsStandard();

            vHueSlider = (ISliderItem)gameObject.GetComponent <HovercastItem>().GetItem();
            vHueSlider.OnValueChanged += HandleValueChanged;
        }
Beispiel #2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void HandleValueChanged(ISelectableItem <bool> pItem)
        {
            if (!pItem.Value)
            {
                return;
            }

            ISliderItem hue = (ISliderItem)HueSlider.GetItem();

            hue.IsEnabled = (Mode == DemoEnvironment.ColorMode.Custom);
            Enviro.SetColorMode(Mode, hue.RangeValue);
        }
Beispiel #3
0
        /*--------------------------------------------------------------------------------------------*/
        private void TryUpdateSliderValue()
        {
            ISliderItem sliderItem = (vItemState.Item as ISliderItem);

            if (sliderItem == null)
            {
                return;
            }

            Vector3?cursorWorld  = vItemState.NearestCursorWorldPos;
            bool    ignoreSlider = (!vItemState.IsNearestHighlight ||
                                    vItemState.MaxHighlightProgress <= 0 || cursorWorld == null);

            if (ignoreSlider)
            {
                sliderItem.HoverValue = null;
                return;
            }

            Vector3 cursorLocal = gameObject.transform.InverseTransformPoint((Vector3)cursorWorld);

            cursorLocal.y = 0;

            Vector3    cursorDir = cursorLocal.normalized;
            Quaternion diff      = Quaternion.FromToRotation(vSlideDir0, cursorDir);

            float   cursorDeg;
            Vector3 cursorAxis;

            diff.ToAngleAxis(out cursorDeg, out cursorAxis);

            if (cursorAxis.y < 0)
            {
                cursorDeg = 0;
            }

            if (sliderItem.IsStickySelected)
            {
                sliderItem.Value      = cursorDeg / vSlideDegrees;
                sliderItem.HoverValue = null;
            }
            else if (sliderItem.AllowJump)
            {
                sliderItem.HoverValue = cursorDeg / vSlideDegrees;
            }
            else
            {
                sliderItem.HoverValue = null;
            }
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void TryUpdateSliderValue()
        {
            ISliderItem sliderItem = (vItemState.Item as ISliderItem);

            if (sliderItem == null)
            {
                return;
            }

            Vector3?cursorWorld  = vItemState.NearestCursorWorldPos;
            bool    ignoreSlider = (!vItemState.IsNearestHighlight ||
                                    vItemState.MaxHighlightProgress <= 0 || cursorWorld == null);

            if (ignoreSlider)
            {
                sliderItem.HoverValue = null;
                return;
            }

            ////

            Vector3 cursorLocal = gameObject.transform.InverseTransformPoint((Vector3)cursorWorld);
            float   value;

            if (vIsVert)
            {
                value = 1 - (cursorLocal.z - vSlideZ0) / vSlideH;
            }
            else
            {
                value = (cursorLocal.x - vSlideX0) / vSlideW;
            }

            ////

            if (sliderItem.IsStickySelected)
            {
                sliderItem.Value      = value;
                sliderItem.HoverValue = null;
            }
            else if (sliderItem.AllowJump)
            {
                sliderItem.HoverValue = value;
            }
            else
            {
                sliderItem.HoverValue = null;
            }
        }
Beispiel #5
0
        protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
        {
            ISliderItem pSliderItem = this.pOwner as ISliderItem;

            if (pSliderItem == null)
            {
                return;
            }
            switch (this.eSliderButtonStyle)
            {
            case SliderButtonStyle.eMinusButton:
            case SliderButtonStyle.ePlusButton:
                this.TimerStop();
                break;

            default:
                break;
            }
            //base.OnMouseUp(e);
        }
Beispiel #6
0
        protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs mevent)
        {
            ISliderItem pSliderItem = this.pOwner as ISliderItem;

            if (pSliderItem == null)
            {
                return;
            }
            switch (this.eSliderButtonStyle)
            {
            case SliderButtonStyle.eMinusButton:
                pSliderItem.Value -= pSliderItem.Step;
                this.TimerStart();
                break;

            case SliderButtonStyle.ePlusButton:
                pSliderItem.Value += pSliderItem.Step;
                this.TimerStart();
                break;
            }
            //base.OnMouseDown(mevent);
        }
Beispiel #7
0
        void Timer_Tick(object sender, EventArgs e)
        {
            if (this.m_Timer.Interval > 80)
            {
                this.m_Timer.Interval = 80;
            }
            //
            ISliderItem pSliderItem = this.pOwner as ISliderItem;

            if (pSliderItem == null)
            {
                return;
            }
            switch (this.eSliderButtonStyle)
            {
            case SliderButtonStyle.eMinusButton:
                if (pSliderItem.Value > pSliderItem.Minimum)
                {
                    pSliderItem.Value -= pSliderItem.Step;
                }
                else
                {
                    this.TimerStop();
                }
                break;

            case SliderButtonStyle.ePlusButton:
                if (pSliderItem.Value < pSliderItem.Maximum)
                {
                    pSliderItem.Value += pSliderItem.Step;
                }
                else
                {
                    this.TimerStop();
                }
                break;
            }
        }
Beispiel #8
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public virtual void Build(IHovercastMenuState pMenuState, IBaseItemState pItemState,
                                  float pArcAngle, IItemVisualSettings pSettings)
        {
            vMenuState  = pMenuState;
            vItemState  = pItemState;
            vAngle0     = -pArcAngle / 2f;
            vAngle1     = pArcAngle / 2f;
            vSettings   = (ItemVisualSettingsStandard)pSettings;
            vSliderItem = (ISliderItem)vItemState.Item;
            vTicks      = new GameObject[vSliderItem.Ticks];

            const float pi = (float)Math.PI;

            vGrabArc      = pi / 40f;
            vSlideDegree0 = (vAngle0 + vGrabArc / 2) / pi * 180;
            vSlideDegrees = (vAngle1 - vAngle0 - vGrabArc) / pi * 180;
            vZeroValue    = (0 - vSliderItem.RangeMin) / (vSliderItem.RangeMax - vSliderItem.RangeMin);

            ////

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

            var trackObj = new GameObject("Track");

            trackObj.transform.SetParent(gameObject.transform, false);
            trackObj.transform.localRotation = Quaternion.AngleAxis(vAngle0 / pi * 180, Vector3.up);

            vTrack         = new UiItemSliderTrackRenderer(trackObj);
            vTrackSegments = new ReadList <DisplayUtil.TrackSegment>();
            vTrackCuts     = new ReadList <DisplayUtil.TrackSegment>();

            ////

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

                vTickMeshBuilder = new MeshBuilder();
                MeshUtil.BuildQuadMesh(vTickMeshBuilder);
                vTickMeshBuilder.Commit();
                vTickMeshBuilder.CommitColors(Color.clear);

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

                    var quadObj = new GameObject("Quad");
                    quadObj.transform.SetParent(tickObj.transform, false);
                    quadObj.transform.localPosition = new Vector3(0, 0, 1.25f);
                    quadObj.transform.localRotation = TickQuatRot;
                    quadObj.transform.localScale    = quadScale;
                    quadObj.AddComponent <MeshRenderer>();

                    MeshFilter quadFilt = quadObj.AddComponent <MeshFilter>();
                    quadFilt.sharedMesh = vTickMeshBuilder.Mesh;
                }
            }

            ////

            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, vGrabArc, 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");
        }
		////////////////////////////////////////////////////////////////////////////////////////////////
		/*--------------------------------------------------------------------------------------------*/
		public void Awake() {
			vHueSettings = new ItemVisualSettingsStandard();
			
			vHueSlider = (ISliderItem)gameObject.GetComponent<HovercastItem>().GetItem();
			vHueSlider.OnValueChanged += HandleValueChanged;
		}
Beispiel #10
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");
        }
		////////////////////////////////////////////////////////////////////////////////////////////////
		/*--------------------------------------------------------------------------------------------*/
		public virtual void Build(IHovercastMenuState pMenuState, IBaseItemState pItemState,
													float pArcAngle, IItemVisualSettings pSettings) {
			vMenuState = pMenuState;
			vItemState = pItemState;
			vAngle0 = -pArcAngle/2f;
			vAngle1 = pArcAngle/2f;
			vSettings = (ItemVisualSettingsStandard)pSettings;
			vSliderItem = (ISliderItem)vItemState.Item;
			vTicks = new GameObject[vSliderItem.Ticks];

			const float pi = (float)Math.PI;

			vGrabArc = pi/40f;
			vSlideDegree0 = (vAngle0+vGrabArc/2)/pi*180;
			vSlideDegrees = (vAngle1-vAngle0-vGrabArc)/pi*180;
			vZeroValue = (0-vSliderItem.RangeMin)/(vSliderItem.RangeMax-vSliderItem.RangeMin);

			////

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

			var trackObj = new GameObject("Track");
			trackObj.transform.SetParent(gameObject.transform, false);
			trackObj.transform.localRotation = Quaternion.AngleAxis(vAngle0/pi*180, Vector3.up);

			vTrack = new UiItemSliderTrackRenderer(trackObj);
			vTrackSegments = new ReadList<DisplayUtil.TrackSegment>();
			vTrackCuts = new ReadList<DisplayUtil.TrackSegment>();

			////

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

				vTickMeshBuilder = new MeshBuilder();
				MeshUtil.BuildQuadMesh(vTickMeshBuilder);
				vTickMeshBuilder.Commit();
				vTickMeshBuilder.CommitColors(Color.clear);

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

					var quadObj = new GameObject("Quad");
					quadObj.transform.SetParent(tickObj.transform, false);
					quadObj.transform.localPosition = new Vector3(0, 0, 1.25f);
					quadObj.transform.localRotation = TickQuatRot;
					quadObj.transform.localScale = quadScale;
					quadObj.AddComponent<MeshRenderer>();

					MeshFilter quadFilt = quadObj.AddComponent<MeshFilter>();
					quadFilt.sharedMesh = vTickMeshBuilder.Mesh;
				}
			}

			////

			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, vGrabArc, 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");
		}
		////////////////////////////////////////////////////////////////////////////////////////////////
		/*--------------------------------------------------------------------------------------------*/
		public virtual void Build(IHoverboardPanelState pPanelState,
										IHoverboardLayoutState pLayoutState, IBaseItemState pItemState,
										IItemVisualSettings pSettings) {
			vPanelState = pPanelState;
			vLayoutState = pLayoutState;
			vItemState = pItemState;
			vSettings = (ItemVisualSettingsStandard)pSettings;
			vSliderItem = (ISliderItem)vItemState.Item;
			vTicks = new GameObject[vSliderItem.Ticks];

			vWidth = UiItem.Size*vSliderItem.Width;
			vHeight = UiItem.Size*vSliderItem.Height;
			vIsVert = (vHeight > vWidth);
			vGrabW = 1;
			vZeroValue = (0-vSliderItem.RangeMin)/(vSliderItem.RangeMax-vSliderItem.RangeMin);

			gameObject.transform.SetParent(gameObject.transform, false);
			gameObject.transform.localPosition = new Vector3(vWidth/2, 0, vHeight/2f);
			gameObject.transform.localRotation = Quaternion.AngleAxis((vIsVert ? 90 : 0), Vector3.up);

			if ( vIsVert ) { //swap dimensions here + rotate graphics later
				float tempW = vWidth;
				vWidth = vHeight;
				vHeight = tempW;
			}

			vSlideX0 = (vGrabW-vWidth)/2;
			vSlideW = vWidth-vGrabW;

			////

			vHiddenRect = new UiHoverMeshRectBg(gameObject);
			vHiddenRect.UpdateSize(vWidth, vHeight);

			var trackObj = new GameObject("Track");
			trackObj.transform.SetParent(gameObject.transform, false);
			trackObj.transform.localPosition = new Vector3(-vWidth/2, 0, 0);

			vTrack = new UiItemSliderTrackRenderer(trackObj);
			vTrackSegments = new ReadList<DisplayUtil.TrackSegment>();
			vTrackCuts = new ReadList<DisplayUtil.TrackSegment>();

			////

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

				vTickMeshBuilder = new MeshBuilder();
				MeshUtil.BuildQuadMesh(vTickMeshBuilder);
				vTickMeshBuilder.Commit();
				vTickMeshBuilder.CommitColors(Color.clear);

				for ( int i = 0 ; i < vSliderItem.Ticks ; ++i ) {
					GameObject tickObj = new GameObject("Tick"+i);
					tickObj.transform.SetParent(gameObject.transform, false);
					tickObj.transform.localPosition = Vector3.right*(vSlideX0+vSlideW*i*percPerTick);
					tickObj.transform.localRotation = TickQuatRot;
					tickObj.transform.localScale = quadScale;
					tickObj.AddComponent<MeshRenderer>();

					MeshFilter tickFilt = tickObj.AddComponent<MeshFilter>();
					tickFilt.sharedMesh = vTickMeshBuilder.Mesh;

					vTicks[i] = tickObj;
				}
			}

			////

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

			var grabObj = new GameObject("Grab");
			grabObj.transform.SetParent(vGrabHold.transform, false);

			vGrab = grabObj.AddComponent<UiItemSliderGrabRenderer>();
			vGrab.IsVert = vIsVert;
			vGrab.Build(vPanelState, vLayoutState, vItemState, vSettings);

			if ( vIsVert ) {
				vGrab.SetCustomSize(vHeight, vGrabW, false);
			}
			else {
				vGrab.SetCustomSize(vGrabW, vHeight, false);
			}

			////

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

			var hoverObj = new GameObject("Hover");
			hoverObj.transform.SetParent(vHoverHold.transform, false);

			vHover = new UiHoverMeshRect(hoverObj, "Hover");
		}
Beispiel #13
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public virtual void Build(IHoverboardPanelState pPanelState,
                                  IHoverboardLayoutState pLayoutState, IBaseItemState pItemState,
                                  IItemVisualSettings pSettings)
        {
            vPanelState  = pPanelState;
            vLayoutState = pLayoutState;
            vItemState   = pItemState;
            vSettings    = (ItemVisualSettingsStandard)pSettings;
            vSliderItem  = (ISliderItem)vItemState.Item;
            vTicks       = new GameObject[vSliderItem.Ticks];

            vWidth     = UiItem.Size * vSliderItem.Width;
            vHeight    = UiItem.Size * vSliderItem.Height;
            vIsVert    = (vHeight > vWidth);
            vGrabW     = 1;
            vZeroValue = (0 - vSliderItem.RangeMin) / (vSliderItem.RangeMax - vSliderItem.RangeMin);

            gameObject.transform.SetParent(gameObject.transform, false);
            gameObject.transform.localPosition = new Vector3(vWidth / 2, 0, vHeight / 2f);
            gameObject.transform.localRotation = Quaternion.AngleAxis((vIsVert ? 90 : 0), Vector3.up);

            if (vIsVert)                 //swap dimensions here + rotate graphics later
            {
                float tempW = vWidth;
                vWidth  = vHeight;
                vHeight = tempW;
            }

            vSlideX0 = (vGrabW - vWidth) / 2;
            vSlideW  = vWidth - vGrabW;

            ////

            vHiddenRect = new UiHoverMeshRectBg(gameObject);
            vHiddenRect.UpdateSize(vWidth, vHeight);

            var trackObj = new GameObject("Track");

            trackObj.transform.SetParent(gameObject.transform, false);
            trackObj.transform.localPosition = new Vector3(-vWidth / 2, 0, 0);

            vTrack         = new UiItemSliderTrackRenderer(trackObj);
            vTrackSegments = new ReadList <DisplayUtil.TrackSegment>();
            vTrackCuts     = new ReadList <DisplayUtil.TrackSegment>();

            ////

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

                vTickMeshBuilder = new MeshBuilder();
                MeshUtil.BuildQuadMesh(vTickMeshBuilder);
                vTickMeshBuilder.Commit();
                vTickMeshBuilder.CommitColors(Color.clear);

                for (int i = 0; i < vSliderItem.Ticks; ++i)
                {
                    GameObject tickObj = new GameObject("Tick" + i);
                    tickObj.transform.SetParent(gameObject.transform, false);
                    tickObj.transform.localPosition = Vector3.right * (vSlideX0 + vSlideW * i * percPerTick);
                    tickObj.transform.localRotation = TickQuatRot;
                    tickObj.transform.localScale    = quadScale;
                    tickObj.AddComponent <MeshRenderer>();

                    MeshFilter tickFilt = tickObj.AddComponent <MeshFilter>();
                    tickFilt.sharedMesh = vTickMeshBuilder.Mesh;

                    vTicks[i] = tickObj;
                }
            }

            ////

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

            var grabObj = new GameObject("Grab");

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

            vGrab        = grabObj.AddComponent <UiItemSliderGrabRenderer>();
            vGrab.IsVert = vIsVert;
            vGrab.Build(vPanelState, vLayoutState, vItemState, vSettings);

            if (vIsVert)
            {
                vGrab.SetCustomSize(vHeight, vGrabW, false);
            }
            else
            {
                vGrab.SetCustomSize(vGrabW, vHeight, false);
            }

            ////

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

            var hoverObj = new GameObject("Hover");

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

            vHover = new UiHoverMeshRect(hoverObj, "Hover");
        }