A game about forced loneliness, made by TACStudios
1#if UNITY_EDITOR
2using System;
3using System.Linq;
4
5namespace UnityEngine.InputSystem.Editor
6{
7 [Serializable]
8 internal class AdvancedDropdownState
9 {
10 [Serializable]
11 private class AdvancedDropdownItemState
12 {
13 public AdvancedDropdownItemState(AdvancedDropdownItem item)
14 {
15 itemId = item.id;
16 }
17
18 public int itemId;
19 public int selectedIndex = -1;
20 public Vector2 scroll;
21 }
22
23 [SerializeField]
24 private AdvancedDropdownItemState[] states = new AdvancedDropdownItemState[0];
25 private AdvancedDropdownItemState m_LastSelectedState;
26
27 private AdvancedDropdownItemState GetStateForItem(AdvancedDropdownItem item)
28 {
29 if (m_LastSelectedState != null && m_LastSelectedState.itemId == item.id)
30 return m_LastSelectedState;
31 for (int i = 0; i < states.Length; i++)
32 {
33 if (states[i].itemId == item.id)
34 {
35 m_LastSelectedState = states[i];
36 return m_LastSelectedState;
37 }
38 }
39 Array.Resize(ref states, states.Length + 1);
40 states[states.Length - 1] = new AdvancedDropdownItemState(item);
41 m_LastSelectedState = states[states.Length - 1];
42 return states[states.Length - 1];
43 }
44
45 internal void MoveDownSelection(AdvancedDropdownItem item)
46 {
47 var state = GetStateForItem(item);
48 var selectedIndex = state.selectedIndex;
49 do
50 {
51 ++selectedIndex;
52 }
53 while (selectedIndex < item.children.Count() && item.children.ElementAt(selectedIndex).IsSeparator());
54
55 if (selectedIndex >= item.children.Count())
56 selectedIndex = 0;
57
58 if (selectedIndex < item.children.Count())
59 SetSelectionOnItem(item, selectedIndex);
60 }
61
62 internal void MoveUpSelection(AdvancedDropdownItem item)
63 {
64 var state = GetStateForItem(item);
65 var selectedIndex = state.selectedIndex;
66 do
67 {
68 --selectedIndex;
69 }
70 while (selectedIndex >= 0 && item.children.ElementAt(selectedIndex).IsSeparator());
71
72 if (selectedIndex < 0)
73 selectedIndex = item.children.Count() - 1;
74
75 if (selectedIndex >= 0)
76 SetSelectionOnItem(item, selectedIndex);
77 }
78
79 internal void SetSelectionOnItem(AdvancedDropdownItem item, int selectedIndex)
80 {
81 var state = GetStateForItem(item);
82
83 if (selectedIndex < 0)
84 {
85 state.selectedIndex = 0;
86 }
87 else if (selectedIndex >= item.children.Count())
88 {
89 state.selectedIndex = item.children.Count() - 1;
90 }
91 else
92 {
93 state.selectedIndex = selectedIndex;
94 }
95 }
96
97 internal void ClearSelectionOnItem(AdvancedDropdownItem item)
98 {
99 GetStateForItem(item).selectedIndex = -1;
100 }
101
102 internal int GetSelectedIndex(AdvancedDropdownItem item)
103 {
104 return GetStateForItem(item).selectedIndex;
105 }
106
107 internal void SetSelectedIndex(AdvancedDropdownItem item, int index)
108 {
109 GetStateForItem(item).selectedIndex = index;
110 }
111
112 internal AdvancedDropdownItem GetSelectedChild(AdvancedDropdownItem item)
113 {
114 var index = GetSelectedIndex(item);
115 if (!item.children.Any() || index < 0 || index >= item.children.Count())
116 return null;
117 return item.children.ElementAt(index);
118 }
119
120 internal Vector2 GetScrollState(AdvancedDropdownItem item)
121 {
122 return GetStateForItem(item).scroll;
123 }
124
125 internal void SetScrollState(AdvancedDropdownItem item, Vector2 scrollState)
126 {
127 GetStateForItem(item).scroll = scrollState;
128 }
129 }
130}
131
132#endif // UNITY_EDITOR