/// <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); } }
/// <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; }
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); } }