/*--------------------------------------------------------------------------------------------*/ public virtual void Update() { vMainAlpha = UiItemSelectRenderer.GetArcAlpha(vMenuState) * vAnimAlpha; if (!vItemState.Item.IsEnabled || !vItemState.Item.IsAncestryEnabled) { vMainAlpha *= 0.333f; } Color colBg = vSettings.BackgroundColor; colBg.a *= vMainAlpha; vHoverSlice.UpdateBackground(colBg); if (vSettings.TextSize != vLabel.FontSize) { vLabel.SetSize( UiItemSelectRenderer.ArcCanvasThickness * UiItemSelectRenderer.ArcCanvasScale, vSettings.TextSize * 1.5f * UiItemSelectRenderer.ArcCanvasScale, vSettings.TextSize * 0.6f, UiItemSelectRenderer.ArcCanvasScale ); } vLabel.Alpha = vMainAlpha; vLabel.FontName = vSettings.TextFont; vLabel.FontSize = vSettings.TextSize; vLabel.Color = vSettings.TextColor; vLabel.Label = vItemState.Item.Label; }
/*--------------------------------------------------------------------------------------------*/ public virtual void Update() { vMainAlpha = UiItemSelectRenderer.GetArcAlpha(vMenuState) * vAnimAlpha; if (!vItemState.Item.IsEnabled || !vItemState.Item.AreParentsEnabled) { vMainAlpha *= 0.333f; } float easedVal = GetEasedValue(vSliderItem.Value, vSliderItem.SnappedValue); float easedHover = (vSliderItem.HoverValue == null ? easedVal : GetEasedValue((float)vSliderItem.HoverValue, (float)vSliderItem.HoverSnappedValue)); float hoverArcHalf = 0; Color colTrack = vSettings.SliderTrackColor; Color colFill = vSettings.SliderFillColor; Color colTick = vSettings.SliderTickColor; colTrack.a *= vMainAlpha; colFill.a *= vMainAlpha; colTick.a *= vMainAlpha; vTrackA.UpdateBackground(colTrack); vTrackB.UpdateBackground(colTrack); vFillA.UpdateBackground(colFill); vFillB.UpdateBackground(colFill); vTickMat.color = colTick; float slideDeg = vSlideDegree0 + vSlideDegrees * easedVal; vGrabHold.transform.localRotation = Quaternion.AngleAxis(slideDeg, Vector3.up); if (vSliderItem.HoverSnappedValue != null) { slideDeg = vSlideDegree0 + vSlideDegrees * easedHover; vHoverHold.transform.localRotation = Quaternion.AngleAxis(slideDeg, Vector3.up); float high = vItemState.MaxHighlightProgress; float select = 1 - (float)Math.Pow(1 - vItemState.SelectionProgress, 1.5f); Color colBg = vSettings.BackgroundColor; Color colHigh = vSettings.HighlightColor; Color colSel = vSettings.SelectionColor; colBg.a *= high * vMainAlpha; colHigh.a *= high * vMainAlpha; colSel.a *= select * vMainAlpha; vHover.UpdateBackground(colBg); vHover.UpdateHighlight(colHigh, high); vHover.UpdateSelect(colSel, select); hoverArcHalf = vGrabArcHalf * high * 0.333f - UiHoverMeshSlice.AngleInset; } UpdateMeshes(easedVal, easedHover, hoverArcHalf); }
/*--------------------------------------------------------------------------------------------*/ public virtual void Update() { vMainAlpha = GetArcAlpha(vMenuState) * vAnimAlpha; if (!vItemState.Item.IsEnabled || !vItemState.Item.AreParentsEnabled) { vMainAlpha *= 0.333f; } ISelectableItem selItem = (vItemState.Item as ISelectableItem); float high = vItemState.MaxHighlightProgress; bool showEdge = (vItemState.IsNearestHighlight && !vItemState.IsSelectionPrevented && selItem != null && selItem.AllowSelection); float edge = (showEdge ? high : 0); float select = 1 - (float)Math.Pow(1 - vItemState.SelectionProgress, 1.5f); float selectAlpha = select; if (selItem != null && selItem.IsStickySelected) { selectAlpha = 1; } Color colBg = vSettings.BackgroundColor; Color colEdge = vSettings.EdgeColor; Color colHigh = vSettings.HighlightColor; Color colSel = vSettings.SelectionColor; colBg.a *= vMainAlpha; colEdge.a *= edge * vMainAlpha; colHigh.a *= high * vMainAlpha; colSel.a *= selectAlpha * vMainAlpha; vHoverSlice.UpdateBackground(colBg); vHoverSlice.UpdateEdge(colEdge); vHoverSlice.UpdateHighlight(colHigh, high); vHoverSlice.UpdateSelect(colSel, select); if (vSettings.TextSize != vLabel.FontSize) { vLabel.SetSize(ArcCanvasThickness * ArcCanvasScale, vSettings.TextSize * 1.5f * ArcCanvasScale, ArcCanvasScale); } vLabel.Alpha = vMainAlpha; vLabel.FontName = vSettings.TextFont; vLabel.FontSize = vSettings.TextSize; vLabel.Color = vSettings.TextColor; vLabel.Label = vItemState.Item.Label; }
/*--------------------------------------------------------------------------------------------*/ public virtual void Update() { float high = vItemState.MaxHighlightProgress; bool showEdge = DisplayUtil.IsEdgeVisible(vItemState); float edge = (showEdge ? high : 0); float select = vItemState.SelectionProgress; float alpha = Math.Max(0, 1 - (float)Math.Pow(1 - vMenuState.DisplayStrength, 2)); float enabledAnimProg = GetEnabledAnimProgress(); if (vSelItem.IsEnabled && vMenuState.NavBackStrength > select) { select = vMenuState.NavBackStrength; edge = select; } select = 1 - (float)Math.Pow(1 - select, 1.5f); Color colBg = vSettings.BackgroundColor; Color colEdge = vSettings.EdgeColor; Color colHigh = vSettings.HighlightColor; Color colSel = vSettings.SelectionColor; Color colIcon = vSettings.ArrowIconColor; colBg.a *= alpha * Mathf.Lerp(0.333f, 1, enabledAnimProg); colEdge.a *= edge * alpha; colHigh.a *= high * alpha; colSel.a *= select * alpha; colIcon.a *= (vItemState.MaxHighlightProgress * 0.75f + 0.25f) * alpha * enabledAnimProg; vHoverSlice.UpdateBackground(colBg); vHoverSlice.UpdateEdge(colEdge); vHoverSlice.UpdateHighlight(colHigh, high); vHoverSlice.UpdateSelect(colSel, select); vIconMeshBuilder.CommitColors(colIcon); vIcon.transform.localScale = Vector3.one * vSettings.TextSize * 0.75f * UiItemSelectRenderer.ArcCanvasScale; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ 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 Update() { vMainAlpha = UiItemSelectRenderer.GetArcAlpha(vMenuState) * vAnimAlpha; if (!vSliderItem.IsEnabled || !vSliderItem.IsAncestryEnabled) { vMainAlpha *= 0.333f; } const int easePower = 3; int snaps = vSliderItem.Snaps; float easedVal = DisplayUtil.GetEasedValue( snaps, vSliderItem.Value, vSliderItem.SnappedValue, easePower); float easedHover = easedVal; float hoverArc = 0; if (vSliderItem.HoverValue != null) { easedHover = DisplayUtil.GetEasedValue(snaps, (float)vSliderItem.HoverValue, (float)vSliderItem.HoverSnappedValue, easePower); } Color colTrack = vSettings.SliderTrackColor; Color colFill = vSettings.SliderFillColor; Color colTick = vSettings.SliderTickColor; colTrack.a *= vMainAlpha; colFill.a *= vMainAlpha; colTick.a *= vMainAlpha; vTrack.SetColors(colTrack, colFill); if (vTickMeshBuilder != null) { vTickMeshBuilder.CommitColors(colTick); } //// float slideDeg = vSlideDegree0 + vSlideDegrees * easedVal; vGrabHold.transform.localRotation = Quaternion.AngleAxis(slideDeg, Vector3.up); if (vSliderItem.HoverValue != null) { slideDeg = vSlideDegree0 + vSlideDegrees * easedHover; vHoverHold.transform.localRotation = Quaternion.AngleAxis(slideDeg, Vector3.up); float high = vItemState.MaxHighlightProgress; float select = 1 - (float)Math.Pow(1 - vItemState.SelectionProgress, 1.5f); Color colBg = vSettings.BackgroundColor; Color colHigh = vSettings.HighlightColor; Color colSel = vSettings.SelectionColor; colBg.a *= high * vMainAlpha; colHigh.a *= high * vMainAlpha; colSel.a *= select * vMainAlpha; vHover.UpdateBackground(colBg); vHover.UpdateHighlight(colHigh, high); vHover.UpdateSelect(colSel, select); hoverArc = vGrabArc * high * HoverBarRelW; } UpdateMeshes(easedVal, easedHover, hoverArc); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ 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"); }