public static void Init()
{
//if (MastersByFilename != null) return;
MastersByFilename = new Dictionary<string, List<ObjectRegistryEntry>>();
var objProvider = Content.Content.Get().WorldObjects;
lock (objProvider.Entries)
{
foreach (GameObjectReference objectInfo in objProvider.Entries.Values)
{
ObjectRegistryEntry entry = new ObjectRegistryEntry
{
GUID = (uint)objectInfo.ID,
Filename = objectInfo.FileName,
Name = objectInfo.Name,
Group = objectInfo.Group,
SubIndex = objectInfo.SubIndex
};
List<ObjectRegistryEntry> dest = null;
if (!MastersByFilename.TryGetValue(entry.Filename, out dest))
{
dest = new List<ObjectRegistryEntry>();
MastersByFilename.Add(entry.Filename, dest);
}
var oldMaster = dest.FirstOrDefault(x => x.Group == entry.Group);
if (entry.SubIndex == -1 || entry.Group == 0)
{
//master, add to main dictionary.
if (oldMaster != null && entry.Group != 0)
{
//master was preemptively created. copy over values to existing.
oldMaster.GUID = entry.GUID;
oldMaster.Name = entry.Name;
}
else
{
entry.Children = new List<ObjectRegistryEntry>();
dest.Add(entry);
}
}
else
{
//non master.
if (oldMaster == null)
{
//create a placeholder master entry.
oldMaster = new ObjectRegistryEntry
{
Filename = entry.Filename,
Group = entry.Group,
SubIndex = -1
};
dest.Add(oldMaster);
oldMaster.Children = new List<ObjectRegistryEntry>();
}
oldMaster.Children.Add(entry);
}
}
}
}