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;
}
}