//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ internal void Build(ArcState pArcState, ArcSegmentState pSegState, float pArcAngle, ISettings pSettings) { vArcState = pArcState; vSegState = pSegState; ArcAngle = pArcAngle; vSegState.SetCursorDistanceFunction(CalcCursorDistance); vCursorBaseTx = gameObject.transform.parent.parent.parent.parent; //HovercastSetup const float pi = (float)Math.PI; const float slideBufferAngle = pi / 80f; vSlideDegrees = (pArcAngle - slideBufferAngle * 2) / (float)Math.PI * 180; vSlideDir0 = MeshUtil.GetRingPoint(1, -pArcAngle / 2f + slideBufferAngle); //// Type rendType = pSettings.GetUiArcSegmentRendererType(vSegState.NavItem); ArcSegmentSettings colors = pSettings.GetArcSegmentSettings(vSegState.NavItem); var rendObj = new GameObject("Renderer"); rendObj.transform.SetParent(gameObject.transform, false); vRenderer = (IUiArcSegmentRenderer)rendObj.AddComponent(rendType); vRenderer.Build(vArcState, vSegState, pArcAngle, colors); }
/*--------------------------------------------------------------------------------------------*/ public void Fill(ArcSegmentSettings pSettings) { TextSize = pSettings.TextSize; TextColor = pSettings.TextColor; TextFont = pSettings.TextFont; ArrowIconColor = pSettings.ArrowIconColor; ToggleIconColor = pSettings.ToggleIconColor; BackgroundColor = pSettings.BackgroundColor; EdgeColor = pSettings.EdgeColor; HighlightColor = pSettings.HighlightColor; SliderTickColor = pSettings.SliderTickColor; }
/*--------------------------------------------------------------------------------------------*/ private void UpdateMenuColorOpacity() { ArcSegmentSettings sett = DemoSettingsComponent.ArcSegmentSettings; Color c = sett.BackgroundColor; c.a = vMenuOpacity; sett.BackgroundColor = c; c = sett.SliderFillColor; c.a = 0.5f * vMenuOpacity; sett.SliderFillColor = c; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public override void Build(ArcState pArcState, ArcSegmentState pSegState, float pArcAngle, ArcSegmentSettings pSettings) { base.Build(pArcState, pSegState, pArcAngle, pSettings); vIcon = GameObject.CreatePrimitive(PrimitiveType.Quad); vIcon.name = "Icon"; vIcon.transform.SetParent(gameObject.transform, false); vIcon.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vIcon.renderer.sharedMaterial.color = Color.clear; vIcon.renderer.sharedMaterial.mainTexture = GetIconTexture(); vIcon.transform.localRotation = vLabel.CanvasLocalRotation; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public override ArcSegmentSettings GetArcSegmentSettings(NavItem pNavItem) { if (ArcSegmentSettings == null) { ArcSegmentSettings = base.GetArcSegmentSettings(null); } if (pNavItem == DemoNavComponent.NavDelegate.Items.ColorHue) { var sett = new DemoHueSliderSettings(pNavItem); sett.Fill(ArcSegmentSettings); return(sett); } return(ArcSegmentSettings); }
/*--------------------------------------------------------------------------------------------*/ private void HandleColorThemeSelected(NavItem pItem) { ArcSegmentSettings sett = DemoSettingsComponent.ArcSegmentSettings; sett.TextColor = new Color(1, 1, 0.7f); sett.ArrowIconColor = new Color(1, 1, 0.7f); sett.ToggleIconColor = new Color(1, 1, 0.7f); sett.BackgroundColor = new Color(0.05f, 0.25f, 0.45f, 0.5f); sett.EdgeColor = new Color(0.1f, 0.9f, 0.2f); sett.HighlightColor = new Color(0.1f, 0.5f, 0.9f); sett.SelectionColor = new Color(0.1f, 0.9f, 0.2f); sett.SliderTrackColor = new Color(0.1f, 0.5f, 0.9f, 0.5f); sett.SliderFillColor = new Color(0.1f, 0.9f, 0.2f, 0.5f); sett.SliderTickColor = new Color(1, 1, 1, 0.2f); UpdateMenuColorOpacity(); }
/*--------------------------------------------------------------------------------------------*/ public virtual void SetSettings(ArcSegmentSettings pSettings) { vSettings = pSettings; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public virtual void Build(ArcState pArcState, ArcSegmentState pSegState, float pArcAngle, ArcSegmentSettings pSettings) { vArcState = pArcState; vSegState = pSegState; vAngle0 = -pArcAngle / 2f + AngleInset; vAngle1 = pArcAngle / 2f - AngleInset; vSettings = pSettings; vMeshSteps = (int)Math.Round(Math.Max(2, (vAngle1 - vAngle0) / Math.PI * 60)); //// vBackground = new GameObject("Background"); vBackground.transform.SetParent(gameObject.transform, false); vBackground.AddComponent <MeshFilter>(); vBackground.AddComponent <MeshRenderer>(); vBackground.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vBackground.renderer.sharedMaterial.renderQueue -= 300; vBackground.renderer.sharedMaterial.color = Color.clear; vEdge = new GameObject("Edge"); vEdge.transform.SetParent(gameObject.transform, false); vEdge.AddComponent <MeshFilter>(); vEdge.AddComponent <MeshRenderer>(); vEdge.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vEdge.renderer.sharedMaterial.renderQueue -= 300; vEdge.renderer.sharedMaterial.color = Color.clear; vHighlight = new GameObject("Highlight"); vHighlight.transform.SetParent(gameObject.transform, false); vHighlight.AddComponent <MeshFilter>(); vHighlight.AddComponent <MeshRenderer>(); vHighlight.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vHighlight.renderer.sharedMaterial.renderQueue -= 200; vHighlight.renderer.sharedMaterial.color = Color.clear; vSelect = new GameObject("Select"); vSelect.transform.SetParent(gameObject.transform, false); vSelect.AddComponent <MeshFilter>(); vSelect.AddComponent <MeshRenderer>(); vSelect.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vSelect.renderer.sharedMaterial.renderQueue -= 10; vSelect.renderer.sharedMaterial.color = Color.clear; //// Mesh bgMesh = vBackground.GetComponent <MeshFilter>().mesh; BuildMesh(bgMesh, 1); vSelectionPoints = new List <Vector3>(); for (int i = 1; i < bgMesh.vertices.Length; i += 2) { vSelectionPoints.Add(bgMesh.vertices[i]); } MeshUtil.BuildRingMesh(vEdge.GetComponent <MeshFilter>().mesh, 0.99f, 1.0f, vAngle0, vAngle1, vMeshSteps); //// var labelObj = new GameObject("Label"); labelObj.transform.SetParent(gameObject.transform, false); labelObj.transform.localPosition = new Vector3(0, 0, 1); labelObj.transform.localScale = new Vector3(1, 1, (vArcState.IsLeft ? 1 : -1)); vLabel = labelObj.AddComponent <UiLabel>(); vLabel.IsLeft = vArcState.IsLeft; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public virtual void Build(ArcState pArcState, ArcSegmentState pSegState, float pArcAngle, ArcSegmentSettings pSettings) { vArcState = pArcState; vSegState = pSegState; vAngle0 = -pArcAngle / 2f + UiSelectRenderer.AngleInset; vAngle1 = pArcAngle / 2f - UiSelectRenderer.AngleInset; vSettings = pSettings; vNavSlider = (NavItemSlider)vSegState.NavItem; vMeshSteps = (int)Math.Round(Math.Max(2, (vAngle1 - vAngle0) / Math.PI * 60)); const float pi = (float)Math.PI; vSliderAngleHalf = pi / 80f; vSlideDegree0 = (vAngle0 + vSliderAngleHalf) / pi * 180; vSlideDegrees = (vAngle1 - vAngle0 - vSliderAngleHalf * 2) / pi * 180; //// vTrack = new GameObject("Track"); vTrack.transform.SetParent(gameObject.transform, false); vTrack.AddComponent <MeshFilter>(); vTrack.AddComponent <MeshRenderer>(); vTrack.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vTrack.renderer.sharedMaterial.renderQueue -= 600; vTrack.renderer.sharedMaterial.color = Color.clear; vFill = new GameObject("Fill"); vFill.transform.SetParent(gameObject.transform, false); vFill.AddComponent <MeshFilter>(); vFill.AddComponent <MeshRenderer>(); vFill.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vFill.renderer.sharedMaterial.renderQueue -= 500; vFill.renderer.sharedMaterial.color = Color.clear; vTrackMesh = vTrack.GetComponent <MeshFilter>().mesh; vFillMesh = vFill.GetComponent <MeshFilter>().mesh; //// vTickMat = new Material(Shader.Find("Unlit/AlphaSelfIllum")); vTickMat.renderQueue -= 400; vTickMat.color = Color.clear; if (vNavSlider.Ticks > 1) { Vector3 quadScale = new Vector3(UiSelectRenderer.AngleInset * 2, 0.36f, 0.1f); float percPerTick = 1 / (float)(vNavSlider.Ticks - 1); vTicks = new GameObject[vNavSlider.Ticks]; for (int i = 0; i < vNavSlider.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 <UiSliderGrabRenderer>(); vGrab.Build(vArcState, vSegState, vSliderAngleHalf * 2, pSettings); }