public static void Init() { //if (MastersByFilename != null) return; MastersByFilename = new Dictionary <string, List <ObjectRegistryEntry> >(); var objProvider = GameContent.Get.WorldObjects; lock (objProvider.Entries) { lock (MastersByFilename) { foreach (var objectInfo in objProvider.Entries.Values) { var 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); } } } } }
private void ObjectTree_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { var node = ObjectTree.SelectedNode; if (node == null) { ObjNameLabel.Text = "No Object Selected."; ObjDescLabel.Text = ""; ObjMultitileLabel.Text = ""; SelectedFile = null; SelectedObj = null; } ObjectRegistryEntry entry = null; SourceNodeToEnt.TryGetValue(node, out entry); if (entry == null) { //chose a filename ObjNameLabel.Text = node.Text+".iff"; ObjDescLabel.Text = "Object File"; ObjMultitileLabel.Text = "Contains "+ObjectRegistry.MastersByFilename[node.Text].Count+" master objects."; SelectedFile = node.Text; SelectedObj = null; ObjThumbnail.ShowObject(0); } else { ObjNameLabel.Text = entry.Name; SelectedFile = entry.Filename; SelectedObj = entry; ObjThumbnail.ShowObject(entry.GUID); ObjDescLabel.Text = "§----"; if (entry.Group == 0) { ObjMultitileLabel.Text = "Single-tile object."; } else if (entry.SubIndex < 0) { ObjMultitileLabel.Text = "Multitile master object."; } else { ObjMultitileLabel.Text = "Multitile part. ("+(entry.SubIndex>>8)+", "+(entry.SubIndex&0xFF)+")"; } } if (SelectedChanged != null) SelectedChanged(); }
public void ChangeActiveObject(ObjectRegistryEntry obj) { ActiveObjTable = obj; SetTargetObject(Content.Content.Get().WorldObjects.Get(obj.GUID)); }
public bool RegenObjMeta(GameIffResource res) { var objd = res.List<OBJD>(); var entries = new List<ObjectRegistryEntry>(); foreach (var obj in objd) { ObjectRegistryEntry entry = new ObjectRegistryEntry { GUID = obj.GUID, Filename = res.MainIff.Filename, Name = obj.ChunkLabel, Group = (short)obj.MasterID, SubIndex = obj.SubIndex }; entries.Add(entry); } if (entries.Count == 0) return false; entries = entries.OrderBy(x => x.SubIndex).OrderBy(x => x.Group).ToList(); var GUID = (ActiveObj == null) ? 0 : ActiveObj.OBJ.GUID; //populate object selected box with options ObjCombo.Items.Clear(); int i = 0; foreach (var item in entries) { ObjCombo.Items.Add(item); if (item.GUID == GUID) ObjCombo.SelectedIndex = i; i++; } if (ObjCombo.SelectedIndex == -1) ObjCombo.SelectedIndex = 0; Text = "Edit Object - " + ActiveObjTable.Filename; return true; }
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); } } } }