예제 #1
0
        private void KeyboardSelection(KeyboardState keyboardState)
        {
            if (Interactables.Count > 0)
            {
                //If no interactable has been selected, select the first one:
                if (kb_selectedInteractable == null && keyboardState.GetPressedKeys().Length > 0)
                {
                    kb_selectedInteractable = Interactables[0];
                    kb_selectedInteractable.Select();

                    return;
                }

                if (keyboardState.IsKeyDown(Keys.Up) || keyboardState.IsKeyDown(Keys.Tab))
                {
                    int nextIndex = Interactables.IndexOf(kb_selectedInteractable) - 1;

                    if (nextIndex < 0)
                    {
                        nextIndex = Interactables.Count - 1;
                    }

                    //Only deselect the current interactable if it's not currently selected by the mouse.
                    if (kb_selectedInteractable != ms_selectedInteractable)
                    {
                        kb_selectedInteractable.Deselect();
                    }

                    kb_selectedInteractable = Interactables[nextIndex];
                    kb_selectedInteractable.Select();
                }
                else if (keyboardState.IsKeyDown(Keys.Down) || (keyboardState.IsKeyDown(Keys.Tab) && keyboardState.IsKeyDown(Keys.LeftShift)))
                {
                    int nextIndex = Interactables.IndexOf(kb_selectedInteractable) + 1;

                    if (nextIndex >= Interactables.Count)
                    {
                        nextIndex = 0;
                    }

                    //Only deselect the current interactable if it's not currently selected by the mouse.
                    if (kb_selectedInteractable != ms_selectedInteractable)
                    {
                        kb_selectedInteractable.Deselect();
                    }

                    kb_selectedInteractable = Interactables[nextIndex];
                    kb_selectedInteractable.Select();
                }

                //Keyboard selection callback:
                if (kb_selectCallbacks != null)
                {
                    kb_selectCallbacks.SetArguments(kb_selectedInteractable);
                    kb_selectCallbacks.Invoke();
                }
            }
        }