コード例 #1
0
ファイル: AutoComplete.cs プロジェクト: bradparks/tni-unity
        void UpdateAutoCompleteListActual(bool isChain)
        {
            //float startTime = Time.realtimeSinceStartup;
            string startingAutoCompleteKey = autoCompleteKey;

            CompletionItem[] completionItems = new CompletionItem[0];
            if (startingAutoCompleteKey == ".")
            {
                startingAutoCompleteKey = "";
            }

            if (isChain)
            {
                completionItems = editor.syntaxRule.GetChainCompletionItems();
            }
            else
            {
                completionItems = editor.syntaxRule.GetGlobalCompletionItems();
            }

            //Debug.Log("AutoCompleteKey: "+startingAutoCompleteKey+" "+isChain);
            //Dictionary<string,,GameObject> bb;
            //bb = new Dictionary<string, UnityEngine.GameObject>
            List <UIDEFuzzySearchItem> inputItems = new List <UIDEFuzzySearchItem>();

            for (int i = 0; i < completionItems.Length; i++)
            {
                if (completionItems[i] == null)
                {
                    continue;
                }
                if (completionItems[i].displayName.Length == 0)
                {
                    continue;
                }
                char c = completionItems[i].displayName[0];
                if (!char.IsLetter(c) && c != '_')
                {
                    continue;
                }

                if (completionItems[i].isType || completionItems[i].isClassOrStruct)
                {
                    completionItems[i].name = completionItems[i].GetCompletionFriendlyName();
                }

                UIDEFuzzySearchItem fuzzyItem = new UIDEFuzzySearchItem();
                fuzzyItem.text       = CleanStringForSearch(completionItems[i].displayName);
                fuzzyItem.metaObject = completionItems[i];
                inputItems.Add(fuzzyItem);
            }

            UIDEFuzzySearchItem[] sortedFuzzyItems = UIDEFuzzySearch.GetSortedList(startingAutoCompleteKey, inputItems.ToArray(), false, false);

            List <CompletionItem> sortedCompletionItems = new List <CompletionItem>();

            //Type sorting
            CompletionItem      lastMetaItem  = null;
            UIDEFuzzySearchItem lastFuzzyItem = null;

            for (int i = 0; i < sortedFuzzyItems.Length; i++)
            {
                CompletionItem metaItem = (CompletionItem)sortedFuzzyItems[i].metaObject;
                if (lastFuzzyItem != null && lastFuzzyItem.score == sortedFuzzyItems[i].score)
                {
                    int compareValue = metaItem.Compare(lastMetaItem);
                    if (compareValue == 1)
                    {
                        sortedCompletionItems.Insert(i - 1, metaItem);
                    }
                    else
                    {
                        sortedCompletionItems.Add(metaItem);
                    }
                }
                else
                {
                    sortedCompletionItems.Add(metaItem);
                }
                lastMetaItem  = metaItem;
                lastFuzzyItem = sortedFuzzyItems[i];
            }

            int                   bestIndex = 0;
            UIDEHashTable         hashTable = new UIDEHashTable();
            List <CompletionItem> acItems   = new List <CompletionItem>();

            for (int i = 0; i < sortedCompletionItems.Count; i++)
            {
                //CompletionItem newItem = new CompletionItem();
                //newItem.fuzzyItem = items[i];

                CompletionItem existingItem = (CompletionItem)hashTable.Get(sortedCompletionItems[i].displayName);
                //if (existingItem != null) {
                //	existingItem.others.Add(newItem);
                //}
                //else {
                if (existingItem == null)
                {
                    hashTable.Set(sortedCompletionItems[i].displayName, sortedCompletionItems[i]);
                    acItems.Add(sortedCompletionItems[i]);
                }
                //selectedText
            }

            if (acItems.Count <= maxHeight)
            {
                List <CompletionItem> newACItems = new List <CompletionItem>();
                for (int i = 0; i < acItems.Count; i++)
                {
                    bool isInsert = (i % 2) == 0;
                    if (isInsert)
                    {
                        bestIndex++;
                        newACItems.Insert(0, acItems[i]);
                    }
                    else
                    {
                        newACItems.Add(acItems[i]);
                    }
                }
                acItems   = newACItems;
                bestIndex = Mathf.Max(bestIndex - 1, 0);
            }

            while (holdAutoCompleteUpdate)
            {
                Thread.Sleep(1);
            }

            itemList = acItems;

            selectedIndex = bestIndex;
            wantsFunishedUpdateAutoComplete = true;

            editor.editorWindow.Repaint();
            //Debug.Log(Time.realtimeSinceStartup-startTime);
        }