/*--------------------------------------------------------------------------------------------*/ internal void UpdateWithCursor(CursorState pCursor) { bool allowSelect = (pCursor.IsInputAvailable && DisplayStrength > 0); Vector3? cursorPos = (allowSelect ? pCursor.Position : (Vector3?)null); NearestSegment = null; foreach ( SegmentState seg in vSegments ) { seg.UpdateWithCursor(cursorPos); if ( !allowSelect ) { continue; } if ( NearestSegment == null ) { NearestSegment = seg; continue; } if ( seg.HighlightDistance < NearestSegment.HighlightDistance ) { NearestSegment = seg; } } foreach ( SegmentState seg in vSegments ) { if ( seg.SetAsNearestSegment(seg == NearestSegment) ) { break; //stop loop upon actual selection because the segment list can change } } }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public MenuState(IInputProvider pInputProv, NavRoot pNavRoot,InteractionSettings pSettings){ vInputProv = pInputProv; vSettings = pSettings; Arc = new ArcState(pNavRoot, vSettings); Cursor = new CursorState(vSettings); OnSideChange += (() => {}); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public MenuState(IInputProvider pInputProv, NavRoot pNavRoot, InteractionSettings pSettings) { vInputProv = pInputProv; vSettings = pSettings; Arc = new ArcState(pNavRoot, vSettings); Cursor = new CursorState(vSettings); OnSideChange += (() => {}); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public void Build(ArcState pArcState, CursorState pCursorState, CursorSettings pSettings) { vArcState = pArcState; vCursorState = pCursorState; vSettings = pSettings; vRingObj = new GameObject("Ring"); vRingObj.transform.SetParent(gameObject.transform, false); vRingObj.AddComponent<MeshRenderer>(); vRingObj.AddComponent<MeshFilter>(); vRingObj.renderer.sharedMaterial = new Material(Shader.Find("Unlit/AlphaSelfIllumTop")); vRingMesh = vRingObj.GetComponent<MeshFilter>().mesh; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ internal void Build(ArcState pArcState, CursorState pCursorState, ICustomCursor pCustom, Transform pCameraTransform) { vArcState = pArcState; vCursorState = pCursorState; vCameraTx = pCameraTransform; //// Type rendType = pCustom.GetCursorRenderer(); vRendererHold = new GameObject("RendererHold"); vRendererHold.transform.SetParent(gameObject.transform, false); vRendererObj = new GameObject("Renderer"); vRendererObj.transform.SetParent(vRendererHold.transform, false); vRenderer = (IUiCursorRenderer)vRendererObj.AddComponent(rendType); vRenderer.Build(vArcState, vCursorState, pCustom.GetCursorSettings()); }
/*--------------------------------------------------------------------------------------------*/ internal void UpdateWithCursor(CursorState pCursor) { bool allowSelect = (pCursor.IsActive && DisplayStrength > 0); Vector3?cursorPos = (pCursor.IsActive ? pCursor.Position : (Vector3?)null); NearestSegment = null; foreach (ArcSegmentState seg in vSegments) { seg.UpdateWithCursor(cursorPos); if (!allowSelect) { continue; } if (NearestSegment == null) { NearestSegment = seg; continue; } if (seg.HighlightDistance < NearestSegment.HighlightDistance) { NearestSegment = seg; } } foreach (ArcSegmentState seg in vSegments) { if (seg.SetAsNearestSegment(seg == NearestSegment)) { break; } } }
/*--------------------------------------------------------------------------------------------*/ internal void UpdateWithCursor(CursorState pCursor) { bool allowSelect = (pCursor.IsInputAvailable && DisplayStrength > 0); Vector3?cursorPos = (allowSelect ? pCursor.Position : (Vector3?)null); NearestSegment = null; foreach (SegmentState seg in vSegments) { seg.UpdateWithCursor(cursorPos); if (!allowSelect) { continue; } if (NearestSegment == null) { NearestSegment = seg; continue; } if (seg.HighlightDistance < NearestSegment.HighlightDistance) { NearestSegment = seg; } } foreach (SegmentState seg in vSegments) { if (seg.SetAsNearestSegment(seg == NearestSegment)) { break; //stop loop upon actual selection because the segment list can change } } }