Esempio n. 1
0
        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);
        }