//=========== READING ============ #region Reading /**<summary>Reads the specified number of string entries.</summary>*/ public void Read(BinaryReader reader, int numEntries = 1) { for (int i = 0; i < numEntries; i++) { StringEntry entry = new StringEntry(); entry.Read(reader); this.Entries.Add(entry); } }
//=========== HELPERS ============ #region Helpers /**<summary>Reads and decodes the chunk.</summary>*/ private static void ReadInfoFromChunk(BinaryReader chunkReader, ref ObjectDataInfo objInfo, Languages language) { ChunkHeader chunkHeader = new ChunkHeader(); chunkHeader.Read(chunkReader); byte[] decodedChunkData = Chunk.Read(chunkReader, chunkHeader); using (MemoryStream stream = new MemoryStream(decodedChunkData)) { BinaryReader reader = new BinaryReader(stream); switch (objInfo.Type) { case ObjectTypes.Attraction: objInfo.Header = new AttractionHeader(); break; case ObjectTypes.SmallScenery: objInfo.Header = new SmallSceneryHeader(); break; case ObjectTypes.LargeScenery: objInfo.Header = new LargeSceneryHeader(); break; case ObjectTypes.Wall: objInfo.Header = new WallHeader(); break; case ObjectTypes.PathBanner: objInfo.Header = new PathBannerHeader(); break; case ObjectTypes.Footpath: objInfo.Header = new FootpathHeader(); break; case ObjectTypes.PathAddition: objInfo.Header = new PathAdditionHeader(); break; case ObjectTypes.SceneryGroup: objInfo.Header = new SceneryGroupHeader(); break; case ObjectTypes.ParkEntrance: objInfo.Header = new ParkEntranceHeader(); break; case ObjectTypes.Water: objInfo.Header = new WaterHeader(); break; case ObjectTypes.ScenarioText: objInfo.Header = new ScenarioTextHeader(); break; } // Get the object's header objInfo.Header.Read(reader); // Get the object's subtype for better classification objInfo.Subtype = objInfo.Header.ObjectSubtype; // Get the object's name in the specified language StringEntry entry = new StringEntry(); entry.Read(reader); objInfo.Name = entry.GetWithFallback(language); } }