protected override bool ReadFile(StreamReader r) { if (!base.ReadFile(r)) { ParseError("Failed to read map INI."); return(false); } if (!SectionExists("IsoMapPack5")) { return(false); } IsoMapPack = UnpackSectionLZO("IsoMapPack5"); var TileCount = IsoMapPack.Length / TilePacked.ByteSize; Tiles.Clear(); for (var i = 0; i < TileCount; ++i) { var seg = new ArraySegment <byte>(IsoMapPack, i * TilePacked.ByteSize, TilePacked.ByteSize); var T = new TilePacked(); T.ReadFile(seg); Tiles.Add(T); } if (SectionExists("Preview") && SectionExists("PreviewPack")) { int[] PSize; if (Get4Integers("Preview", "Size", out PSize, new int[4])) { PreviewSize = new Rectangle(PSize[0], PSize[1], PSize[2], PSize[3]); if (PreviewSize.Width > 0 && PreviewSize.Height > 0) { Preview = new Color[PreviewSize.Width * PreviewSize.Height]; PreviewPack = UnpackSectionLZO("PreviewPack"); var pixelCount = PreviewPack.Length / 3; for (var y = 0; y < PreviewSize.Height; ++y) { for (var x = 0; x < PreviewSize.Width; ++x) { var ixPix = y * PreviewSize.Width + x; if (ixPix < pixelCount) { var R = PreviewPack[ixPix * 3]; var G = PreviewPack[ixPix * 3 + 1]; var B = PreviewPack[ixPix * 3 + 2]; Preview[ixPix] = new Color(R, G, B); } else { Preview[ixPix] = Color.Black; } } } } } } if (SectionExists("OverlayPack")) { Overlays.Clear(); var unpackedOverlays = UnpackSectionLCW("OverlayPack"); Overlays = unpackedOverlays.Select(s => (int)s).ToList(); } if (SectionExists("OverlayDataPack")) { OverlayStates.Clear(); var unpacked = UnpackSectionLCW("OverlayDataPack"); OverlayStates = unpacked.Select(s => (int)s).ToList(); } return(true); }
protected override bool ReadFile(StreamReader r) { if (!base.ReadFile(r)) { ParseError("Failed to read map INI."); return false; } if (!SectionExists("IsoMapPack5")) { return false; } IsoMapPack = UnpackSectionLZO("IsoMapPack5"); var TileCount = IsoMapPack.Length / TilePacked.ByteSize; Tiles.Clear(); for (var i = 0; i < TileCount; ++i) { var seg = new ArraySegment<byte>(IsoMapPack, i * TilePacked.ByteSize, TilePacked.ByteSize); var T = new TilePacked(); T.ReadFile(seg); Tiles.Add(T); } if (SectionExists("Preview") && SectionExists("PreviewPack")) { int[] PSize; if (Get4Integers("Preview", "Size", out PSize, new int[4])) { PreviewSize = new Rectangle(PSize[0], PSize[1], PSize[2], PSize[3]); if (PreviewSize.Width > 0 && PreviewSize.Height > 0) { Preview = new Color[PreviewSize.Width * PreviewSize.Height]; PreviewPack = UnpackSectionLZO("PreviewPack"); var pixelCount = PreviewPack.Length / 3; for (var y = 0; y < PreviewSize.Height; ++y) { for (var x = 0; x < PreviewSize.Width; ++x) { var ixPix = y * PreviewSize.Width + x; if (ixPix < pixelCount) { var R = PreviewPack[ixPix * 3]; var G = PreviewPack[ixPix * 3 + 1]; var B = PreviewPack[ixPix * 3 + 2]; Preview[ixPix] = new Color(R, G, B); } else { Preview[ixPix] = Color.Black; } } } } } } if (SectionExists("OverlayPack")) { Overlays.Clear(); var unpackedOverlays = UnpackSectionLCW("OverlayPack"); Overlays = unpackedOverlays.Select(s => (int)s).ToList(); } if (SectionExists("OverlayDataPack")) { OverlayStates.Clear(); var unpacked = UnpackSectionLCW("OverlayDataPack"); OverlayStates = unpacked.Select(s => (int)s).ToList(); } return true; }