コード例 #1
0
        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);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: ObjectBrowser.cs プロジェクト: RHY3756547/FreeSO
        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();
        }
コード例 #3
0
ファイル: ObjectWindow.cs プロジェクト: RHY3756547/FreeSO
 public void ChangeActiveObject(ObjectRegistryEntry obj)
 {
     ActiveObjTable = obj;
     SetTargetObject(Content.Content.Get().WorldObjects.Get(obj.GUID));
 }
コード例 #4
0
ファイル: ObjectWindow.cs プロジェクト: RHY3756547/FreeSO
        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;
        }
コード例 #5
0
ファイル: ObjectRegistry.cs プロジェクト: RHY3756547/FreeSO
        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);
                    }
                }
            }
        }