Beispiel #1
0
        /// <summary>
        /// Reads the .data file of the sector.
        /// </summary>
        /// <param name="path">The .data file of the sector.</param>
        private void ReadData(string path)
        {
            using var fs = CreateOpenFileStream(path);
            using var r  = new BinaryReader(fs);

            // Header
            var dataHeader = new Header();

            dataHeader.Deserialize(r);

            // Items
            while (r.BaseStream.Position < r.BaseStream.Length)
            {
                var uid = r.ReadUInt64();
                if (uid == dataEof)
                {
                    break;
                }

                MapItem item;
                if (!MapItems.TryGetValue(uid, out item))
                {
                    throw new KeyNotFoundException($"{ToString()}.data contains " +
                                                   $"unknown UID {uid} - can't continue.");
                }
                var serializer = (IDataPayload)MapItemSerializerFactory.Get(item.ItemType);
                serializer.DeserializeDataPayload(r, item);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Reads items from a .base or .aux file.
        /// </summary>
        /// <param name="r">The reader.</param>
        /// <param name="file">The file which is being read.</param>
        private void ReadItems(BinaryReader r, ItemFile file)
        {
            var itemCount = r.ReadUInt32();

            MapItems.EnsureCapacity(MapItems.Count + (int)itemCount);
            for (int i = 0; i < itemCount; i++)
            {
                var itemType = (ItemType)r.ReadInt32();

                var serializer = MapItemSerializerFactory.Get(itemType);
                var item       = serializer.Deserialize(r);

                // deal with signs which can be in aux *and* base
                if (item is Sign sign && file != sign.DefaultItemFile)
                {
                    sign.ItemFile = file;
                }
Beispiel #3
0
        private void ReadItems(BinaryReader r, uint itemCount)
        {
            Items = new List <MapItem>((int)itemCount);
            for (int i = 0; i < itemCount; i++)
            {
                var itemType = (ItemType)r.ReadInt32();

                var serializer = MapItemSerializerFactory.Get(itemType);
                var item       = serializer.Deserialize(r);

                if (item.HasDataPayload)
                {
                    (serializer as IDataPayload).DeserializeDataPayload(r, item);
                }

                Items.Add(item);
            }
        }