ME3Explorer.KFreonTPFTools3.FindTreeDuplicates C# (CSharp) Method

FindTreeDuplicates() private method

private FindTreeDuplicates ( ) : void
return void
        private void FindTreeDuplicates()
        {
            List<TPFTexInfo> temptexes = new List<TPFTexInfo>(LoadedTexes);
            DebugOutput.PrintLn("Searching for Tree duplicates...");
            int offset = 0;
            // KFreon: For each loaded texture, find its duplicates in the tree and add them as seperate textures
            for (int i = 0; i < temptexes.Count; i++)
            {
                if (temptexes[i].isDef || temptexes[i].wasAnalysed)
                    continue;

                TPFTexInfo curr = temptexes[i];//.Clone();
                if (curr.Hash == 0)
                    return;

                int tempoffset = 0;

                // KFreon: Search tree for duplicates
                for (int j = 0; j < Tree.TexCount; j++)
                {
                    TreeTexInfo treetex = Tree.GetTex(j);
                    if (curr.Hash == treetex.Hash)
                    {
                        // KFreon: If texture already set up, then treetex is a duplicate
                        if (curr.Files.Count != 0)
                        {
                            // KFreon: Clone current for duplicate
                            TPFTexInfo temp = curr.Clone();

                            // KFreon: Clear texture lists
                            temp.Files.Clear();
                            temp.ExpIDs.Clear();
                            temp.OriginalFiles.Clear();
                            temp.OriginalExpIDs.Clear();

                            // KFreon: Change duplicate specific entries
                            temp.UpdateTex(j, treetex);
                            temp.TreeDuplicates.Add(offset + ++tempoffset + i);
                            curr.TreeDuplicates.Add(curr.TreeDuplicates.Count + offset + i);
                            temp.TreeDuplicates.Sort();
                            curr.TreeDuplicates.Sort();

                            // KFreon: File duplicates
                            if (curr.FileDuplicates.Count != 0)
                            {
                                for (int k = 0; k < curr.FileDuplicates.Count; k++)
                                {
                                    TPFTexInfo currTex = curr.FileDuplicates[k];
                                    TPFTexInfo tempTex = temp.FileDuplicates[k];

                                    currTex.TreeDuplicates = new List<int>(curr.TreeDuplicates);
                                    tempTex.TreeDuplicates = new List<int>(temp.TreeDuplicates);

                                    curr.FileDuplicates[k] = currTex;
                                    temp.FileDuplicates[k] = tempTex;
                                }
                            }

                            LoadedTexes.Insert(offset + i, temp);
                        }
                        else
                        {
                            // KFreon: Update current details
                            curr.UpdateTex(j, treetex);
                            if (curr.FileDuplicates != null)
                                foreach (var duplicate in curr.FileDuplicates)
                                    duplicate.UpdateTex(j, treetex);
                        }
                    }
                }
                LoadedTexes[offset + tempoffset + i] = curr;
                offset += tempoffset;
            }
        }
KFreonTPFTools3