Esempio n. 1
0
        /*--------------------------------------------------------------------------------------------*/
        public void OnRowSwitched(IItemDataSelectable pItemData)
        {
            HovercastRowSwitchingInfo switchInfo =
                pItemData.gameObject.GetComponent <HovercastRowSwitchingInfo>();

            if (switchInfo == null)
            {
                Debug.LogError("Selected item requires a '" +
                               typeof(HovercastRowSwitchingInfo).Name + "' component.", pItemData.gameObject);
                return;
            }

            if (PreviousRow != null)
            {
                PreviousRow.gameObject.SetActive(false);
            }

            if (switchInfo.NavigateBack)
            {
                NavigateBack(switchInfo.RowEntryTransition);
            }
            else
            {
                NavigateToRow(switchInfo.NavigateToRow, switchInfo.RowEntryTransition);
            }
        }
        /*--------------------------------------------------------------------------------------------*/
        private void FillCursorLists()
        {
            for (int i = 0; i < vItems.Count; i++)
            {
                HoverItemData           data       = vItems[i].Data;
                IItemDataSelectable     selData    = (IItemDataSelectable)data;
                HoverItemHighlightState highState  = data.GetComponent <HoverItemHighlightState>();
                ICursorData             cursorData = highState.NearestHighlight.Value.Cursor;

                if (cursorData.Idle.Progress >= 1)
                {
                    selData.DeselectStickySelections();
                    continue;
                }

                HoverItemSelectionState selState = data.GetComponent <HoverItemSelectionState>();
                HoverRenderer           rend     = data.GetComponent <HoverItemRendererUpdater>().ActiveRenderer;

                var info = new StickySelectionInfo {
                    ItemWorldPosition = rend.GetCenterWorldPosition(),
                    SelectionProgress = selState.SelectionProgress
                };

                cursorData.ActiveStickySelections.Add(info);
            }
        }
        /*--------------------------------------------------------------------------------------------*/
        private void UpdateSelectionProgress()
        {
            HoverItemHighlightState highState = GetComponent <HoverItemHighlightState>();

            if (vSelectionStart == null)
            {
                HoverItemData       itemData = GetComponent <HoverItem>().Data;
                IItemDataSelectable selData  = (itemData as IItemDataSelectable);

                if (selData == null || !selData.IsStickySelected)
                {
                    SelectionProgress = 0;
                    return;
                }

                HoverItemHighlightState.Highlight?nearestHigh = highState.NearestHighlight;
                float nearDist    = highState.InteractionSettings.StickyReleaseDistance;
                float minHighDist = (nearestHigh == null ? float.MaxValue : nearestHigh.Value.Distance);

                SelectionProgress = Mathf.InverseLerp(nearDist, vDistanceUponSelection, minHighDist);
                return;
            }

            float ms = (float)(DateTime.UtcNow - (DateTime)vSelectionStart).TotalMilliseconds;

            SelectionProgress = Math.Min(1, ms / highState.InteractionSettings.SelectionMilliseconds);
        }
Esempio n. 4
0
        /*--------------------------------------------------------------------------------------------*/
        private bool UpdateState()
        {
            HoverItemData       itemData = GetComponent <HoverItem>().Data;
            IItemDataSelectable selData  = (itemData as IItemDataSelectable);

            WasSelectedThisFrame = false;

            if (selData == null)
            {
                return(false);
            }

            ////

            HoverItemHighlightState highState = GetComponent <HoverItemHighlightState>();

            bool canSelect = (
                !highState.IsHighlightPrevented &&
                highState.IsNearestAcrossAllItemsForAnyCursor &&
                selData.AllowSelection
                );

            if (SelectionProgress <= 0 || !canSelect)
            {
                selData.DeselectStickySelections();
            }

            if (!canSelect || highState.MaxHighlightProgress < 1)
            {
                IsSelectionPrevented = false;
                vSelectionStart      = null;
                return(false);
            }

            ////

            if (IsSelectionPrevented)
            {
                vSelectionStart = null;
                return(false);
            }

            if (vSelectionStart == null)
            {
                vSelectionStart = DateTime.UtcNow;
                return(false);
            }

            if (SelectionProgress < 1)
            {
                return(false);
            }

            vSelectionStart        = null;
            IsSelectionPrevented   = true;
            WasSelectedThisFrame   = true;
            vDistanceUponSelection = highState.NearestHighlight.Value.Distance;
            selData.Select();
            return(true);
        }
Esempio n. 5
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void SetSplitMode(IItemDataSelectable <bool> pItemData)
        {
            bool isSplit = pItemData.Value;

            HoverkeyMain.SetActive(!isSplit);
            HoverkeySplit.SetActive(isSplit);
            Hoverkey.RefreshKeyLists();
        }
    public void MakeHapticFeedbback(IItemDataSelectable itemdataSelectable, HoverkeyItemLabels labels)
    {
        //Debug.Log($"item select label: {itemdataSelectable.Label}");
        Debug.Log($"label data: {labels.DefaultLabel}");

        //todo determine hand.
        haptic.Execute(0, .05f, 75, 25, SteamVR_Input_Sources.RightHand);
    }
Esempio n. 7
0
        /*--------------------------------------------------------------------------------------------*/
        public void SetFontSize(IItemDataSelectable <float> pItemData)
        {
            HoverCanvas[] canvases = GetComponentsInChildren <HoverCanvas>(true);
            int           size     = Mathf.RoundToInt(((IItemDataSlider)pItemData).SnappedRangeValue);

            foreach (HoverCanvas canvas in canvases)
            {
                canvas.Label.TextComponent.fontSize = size;
            }
        }
Esempio n. 8
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void TryResetSelection(HoverItemHighlightState pHighState,
                                       IItemDataSelectable pSelData)
        {
            if (!pHighState.IsHighlightPrevented)
            {
                return;
            }

            vSelectionStart = null;
            pSelData?.DeselectStickySelections();
        }
Esempio n. 9
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void UpdateViaManager()
        {
            HoverItemHighlightState highState = GetComponent <HoverItemHighlightState>();
            HoverItemData           itemData  = GetComponent <HoverItem>().Data;
            IItemDataSelectable     selData   = (itemData as IItemDataSelectable);

            TryResetSelection(highState, selData);
            UpdateSelectionProgress(highState, selData);
            UpdateNearestCursor(highState);
            UpdateState(selData);
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private bool FilterItems(HoverItem pItem)
        {
            IItemDataSelectable selData = (pItem.Data as IItemDataSelectable);

            if (selData == null || !selData.IsStickySelected || !selData.AllowIdleDeselection)
            {
                return(false);
            }

            return(pItem.GetComponent <HoverItemHighlightState>().NearestHighlight != null);
        }
        /*--------------------------------------------------------------------------------------------*/
        private void HandleRadioValueChanged(IItemDataSelectable <bool> pSelData)
        {
            IItemDataRadio radData = (IItemDataRadio)pSelData;

            if (!radData.Value)
            {
                return;
            }

            DeselectRemainingRadioGroupMembers(radData);
        }
Esempio n. 12
0
        /*--------------------------------------------------------------------------------------------*/
        public void SetBgAlpha(IItemDataSelectable <float> pItemData)
        {
            float bgAlpha = ((IItemDataSlider)pItemData).SnappedRangeValue;

            if (Math.Abs(bgAlpha - vCurrBgAlpha) < 2 / 255f)
            {
                return;
            }

            vCurrBgAlpha = bgAlpha;
            SetTheme(vCurrTheme);
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private IEnumerator UpdateForAutoFire(IItemDataSelectable pSelItem)
        {
            if (DelaySeconds != vPrevDelaySec)
            {
                vWaitForSec   = new WaitForSeconds(DelaySeconds);
                vPrevDelaySec = DelaySeconds;
            }

            yield return(vWaitForSec);

            HoverItemData item = (HoverItemData)pSelItem;

            item.GetComponent <HoverItemSelectionState>().ReleaseSelectionPrevention();
        }
Esempio n. 14
0
    public void OnSliderRelease(IItemDataSelectable data)
    {
        //SlideNum = (int)Mathf.Round(data.Value);

        if (SlideNum > Slides.Count)
        {
            SlideNum = Slides.Count;
        }

        if (SlideNum <= 0)
        {
            SlideNum = 0;
        }

        Activate();
    }
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void UpdateIsHighlightPrevented()
        {
            HoverItem           hoverItem = GetComponent <HoverItem>();
            HoverItemData       itemData  = GetComponent <HoverItem>().Data;
            IItemDataSelectable selData   = (itemData as IItemDataSelectable);

            IsHighlightPrevented = (
                selData == null ||
                !itemData.IsEnabled ||
                //!itemData.IsVisible ||
                !itemData.IsAncestryEnabled ||
                //!itemData.IsAncestryVisible ||
                !hoverItem.gameObject.activeInHierarchy ||
                IsHighlightPreventedViaAnyDisplay()
                );
        }
Esempio n. 16
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void HandleKeySelected(IItemDataSelectable pItemData, HoverkeyItemLabels pLabels)
        {
            if (pLabels.ActionType == HoverkeyItemLabels.KeyActionType.Character)
            {
                char letter = (Hoverkey.IsInShiftMode && pLabels.HasShiftLabel ?
                               pLabels.ShiftLabel[0] : pLabels.DefaultLabel[0]);
                Enviro.AddLetter(letter);
                return;
            }

            if (pLabels.DefaultKey == KeyCode.Backspace)
            {
                Enviro.RemoveLatestLetter();
                return;
            }
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void TryResetSelection()
        {
            if (!GetComponent <HoverItemHighlightState>().IsHighlightPrevented)
            {
                return;
            }

            HoverItemData       itemData = GetComponent <HoverItem>().Data;
            IItemDataSelectable selData  = (itemData as IItemDataSelectable);

            vSelectionStart = null;

            if (selData != null)
            {
                selData.DeselectStickySelections();
            }
        }
Esempio n. 18
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private void HandleKeySelected(IItemDataSelectable pItemData, HoverkeyItemLabels pLabels)
        {
            switch (pLabels.ActionType)
            {
            case HoverkeyItemLabels.KeyActionType.Character:
                AddCharacter(pLabels);
                break;

            case HoverkeyItemLabels.KeyActionType.Control:
                AddControl(pLabels);
                break;

            case HoverkeyItemLabels.KeyActionType.Navigation:
                AddNavigation(pLabels);
                break;
            }

            SendInputFieldEvent(pLabels);
        }
Esempio n. 19
0
        /*--------------------------------------------------------------------------------------------*/
        private void UpdateSelectionProgress(HoverItemHighlightState pHighState,
                                             IItemDataSelectable pSelData)
        {
            if (vSelectionStart == null)
            {
                if (pSelData == null || !pSelData.IsStickySelected)
                {
                    SelectionProgress = 0;
                    return;
                }

                HoverItemHighlightState.Highlight?nearestHigh = pHighState.NearestHighlight;
                float nearDist    = pHighState.InteractionSettings.StickyReleaseDistance;
                float minHighDist = nearestHigh?.Distance ?? float.MaxValue;

                SelectionProgress = Mathf.InverseLerp(nearDist, vDistanceUponSelection, minHighDist);
                return;
            }

            float ms = (float)(DateTime.UtcNow - (DateTime)vSelectionStart).TotalMilliseconds;

            SelectionProgress = Math.Min(1, ms / pHighState.InteractionSettings.SelectionMilliseconds);
        }
Esempio n. 20
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 private HoverkeyItemLabels GetLabels(IItemDataSelectable pItemData)
 {
     return(pItemData.gameObject.GetComponent <HoverkeyItemLabels>());
 }
Esempio n. 21
0
 /*--------------------------------------------------------------------------------------------*/
 public void HandleItemValueChanged(IItemDataSelectable <bool> pItemData)
 {
     OnItemToggledEvent.Invoke(pItemData, GetLabels(pItemData));
 }
Esempio n. 22
0
 /*--------------------------------------------------------------------------------------------*/
 public void HandleItemDeselected(IItemDataSelectable pItemData)
 {
     OnItemDeselectedEvent.Invoke(pItemData, GetLabels(pItemData));
 }
        /*--------------------------------------------------------------------------------------------*/
        private bool UpdateState()
        {
            HoverItemData       itemData = GetComponent <HoverItem>().Data;
            IItemDataSelectable selData  = (itemData as IItemDataSelectable);

            WasSelectedThisFrame = false;

            if (selData == null || selData.IgnoreSelection)
            {
                return(false);
            }

            ////

            HoverItemHighlightState highState = GetComponent <HoverItemHighlightState>();
            bool hasNearestCursorWithFullHigh = false;

            bool canDeselect = (
                highState.IsHighlightPrevented ||
                !highState.IsNearestAcrossAllItemsForAnyCursor ||
                !selData.IsEnabled
                );

            for (int i = 0; i < highState.Highlights.Count; i++)
            {
                HoverItemHighlightState.Highlight high = highState.Highlights[i];

                if (high.IsNearestAcrossAllItems && high.Progress >= 1)
                {
                    hasNearestCursorWithFullHigh = true;
                    break;
                }
            }

            if (SelectionProgress <= 0 || canDeselect)
            {
                selData.DeselectStickySelections();
            }

            if (canDeselect || !hasNearestCursorWithFullHigh)
            {
                IsSelectionPrevented = false;
                vSelectionStart      = null;
                return(false);
            }

            ////

            if (IsSelectionPrevented)
            {
                vSelectionStart = null;
                return(false);
            }

            if (vSelectionStart == null)
            {
                vSelectionStart = DateTime.UtcNow;
                return(false);
            }

            if (SelectionProgress < 1)
            {
                return(false);
            }

            vSelectionStart        = null;
            IsSelectionPrevented   = true;
            WasSelectedThisFrame   = true;
            vDistanceUponSelection = highState.NearestHighlight.Value.Distance;
            selData.Select();
            return(true);
        }
Esempio n. 24
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 public void EnableWithBoolValue(IItemDataSelectable <bool> pItemData)
 {
     GetComponent <HoverItemData>().IsEnabled = pItemData.Value;
 }
Esempio n. 25
0
 /*--------------------------------------------------------------------------------------------*/
 public void SetAllowThumb(IItemDataSelectable <bool> pItemData)
 {
     vAllowThumb = pItemData.Value;
     UpdateCursorCapabilities();
 }
Esempio n. 26
0
 /*--------------------------------------------------------------------------------------------*/
 public void SetLightingPower(IItemDataSelectable <float> pItemData)
 {
     Enviro.SetLightIntensitiy(((IItemDataSlider)pItemData).RangeValue);
 }
Esempio n. 27
0
 /*--------------------------------------------------------------------------------------------*/
 public void SetLightingSpotlight(IItemDataSelectable pItemData)
 {
     Enviro.ShowSpotlight(pItemData.IsStickySelected);
 }
Esempio n. 28
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 public void OnOpenToggled(IItemDataSelectable pItemData)
 {
     IsOpen = !IsOpen;
     OnOpenToggledEvent.Invoke();
 }
Esempio n. 29
0
 /*--------------------------------------------------------------------------------------------*/
 public void SetFastSelect(IItemDataSelectable <bool> pItemData)
 {
     InteractionSettings.SelectionMilliseconds = (pItemData.Value ? 200 : 400);
 }
Esempio n. 30
0
 /*--------------------------------------------------------------------------------------------*/
 public void HideWithBoolValue(IItemDataSelectable <bool> pItemData)
 {
     GetComponent <HoverItemData>().gameObject.SetActive(!pItemData.Value);
 }