public static List <int> GetNewSelection(int clickedInstanceID, List <int> allInstanceIDs, List <int> selectedInstanceIDs, int lastClickedInstanceID, bool keepMultiSelection, bool useShiftAsActionKey, bool allowMultiSelection) { List <int> list = new List <int>(); bool flag = Event.current.shift || (EditorGUI.actionKey && useShiftAsActionKey); bool flag2 = EditorGUI.actionKey && !useShiftAsActionKey; if (!allowMultiSelection) { flag2 = (flag = false); } if (flag2) { list.AddRange(selectedInstanceIDs); if (list.Contains(clickedInstanceID)) { list.Remove(clickedInstanceID); } else { list.Add(clickedInstanceID); } } else { if (flag) { if (clickedInstanceID == lastClickedInstanceID) { return(selectedInstanceIDs); } int num; int num2; if (!InternalEditorUtility.GetFirstAndLastSelected(allInstanceIDs, selectedInstanceIDs, out num, out num2)) { list.Add(clickedInstanceID); return(list); } int num3 = -1; int num4 = -1; for (int i = 0; i < allInstanceIDs.Count; i++) { if (allInstanceIDs[i] == clickedInstanceID) { num3 = i; } if (lastClickedInstanceID != 0 && allInstanceIDs[i] == lastClickedInstanceID) { num4 = i; } } int num5 = 0; if (num4 != -1) { num5 = ((num3 <= num4) ? -1 : 1); } int num6; int num7; if (num3 > num2) { num6 = num; num7 = num3; } else { if (num3 >= num && num3 < num2) { if (num5 > 0) { num6 = num3; num7 = num2; } else { num6 = num; num7 = num3; } } else { num6 = num3; num7 = num2; } } for (int j = num6; j <= num7; j++) { list.Add(allInstanceIDs[j]); } } else { if (keepMultiSelection && selectedInstanceIDs.Contains(clickedInstanceID)) { list.AddRange(selectedInstanceIDs); return(list); } list.Add(clickedInstanceID); } } return(list); }