Example #1
0
        public static Inventory.SubInventory ReadSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryReader reader, List <INodeParser> parsers)
        {
            var subInventory = new Inventory.SubInventory();

            subInventory.InventoryId = reader.ReadUInt64();
            var count = reader.ReadUInt32();

            var parser = parsers.FirstOrDefault(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA);

            Debug.Assert(parser != null);

            for (var i = 0; i < count; ++i)
            {
                var nextItemHeader = ItemDataParser.ReadNextItemEntry(reader);
                var item           = (ItemData)parser.Read(inventoryNode.Children[(int)nodeOffset + i], reader, parsers);

                if (!nextItemHeader.BelongsToItemData(item))
                {
                    throw new InvalidDataException($"Expected next item to be '{nextItemHeader}' but found '{item}'");
                }

                subInventory.Items.Add(item);

                inventoryNode.Children[(int)nodeOffset + i].Value = item;
                item.Node = inventoryNode.Children[(int)nodeOffset + i];
            }

            return(subInventory);
        }
Example #2
0
        public static void WriteSubInventory(NodeWriter writer, Inventory.SubInventory subInventory)
        {
            writer.Write(subInventory.InventoryId);
            writer.Write(subInventory.NumberOfItems);

            for (var i = 0; i < subInventory.NumberOfItems; ++i)
            {
                var nextItem = subInventory.Items[i];
                ItemDataParser.WriteNextItemEntryFromItem(writer, nextItem);
                writer.Write(nextItem.Node);
            }
        }
        public static Inventory.SubInventory ReadSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryReader reader, List <INodeParser> parsers)
        {
            var subInventory = new Inventory.SubInventory();

            subInventory.InventoryId   = reader.ReadUInt64();
            subInventory.NumberOfItems = reader.ReadUInt32();

            subInventory.ItemHeaders = new ItemData.NextItemEntry[subInventory.NumberOfItems];
            subInventory.Items       = new ItemData[subInventory.NumberOfItems];
            var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA).FirstOrDefault();

            Debug.Assert(parser != null);

            for (var i = 0; i < subInventory.NumberOfItems; ++i)
            {
                subInventory.ItemHeaders[i] = ItemDataParser.ReadNextItemEntry(reader);
                subInventory.Items[i]       = (ItemData)parser.Read(inventoryNode.Children[(int)nodeOffset + i], reader, parsers);
                inventoryNode.Children[(int)nodeOffset + i].Value = subInventory.Items[i];
            }

            return(subInventory);
        }
Example #4
0
 private void CreateSubInventoryTabPage(Inventory.SubInventory subInventory)
 {
     InventoryTabControl.Items.Add(new SubInventoryTabItem(subInventory, SaveFile));
 }
        public static void WriteSubInventory(NodeEntry inventoryNode, uint nodeOffset, BinaryWriter writer, Inventory.SubInventory subInventory, List <INodeParser> parsers)
        {
            writer.Write(subInventory.InventoryId);
            writer.Write(subInventory.NumberOfItems);

            var parser = parsers.Where(p => p.ParsableNodeName == Constants.NodeNames.ITEM_DATA).FirstOrDefault();

            Debug.Assert(parser != null);

            for (var i = 0; i < subInventory.NumberOfItems; ++i)
            {
                ItemDataParser.WriteNextItemEntry(writer, subInventory.ItemHeaders[i]);
                writer.Write(parser.Write(inventoryNode.Children[(int)nodeOffset + i], parsers));
            }
        }