/*--------------------------------------------------------------------------------------------*/ 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); } }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ 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; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ 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"); }