Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
        }