OpenRA.Map.SaveBinaryData C# (CSharp) Method

SaveBinaryData() public method

public SaveBinaryData ( ) : byte[]
return byte[]
        public byte[] SaveBinaryData()
        {
            var dataStream = new MemoryStream();
            using (var writer = new BinaryWriter(dataStream))
            {
                // Binary data version
                writer.Write(TileFormat);

                // Size
                writer.Write((ushort)MapSize.X);
                writer.Write((ushort)MapSize.Y);

                // Data offsets
                var tilesOffset = 17;
                var heightsOffset = Grid.MaximumTerrainHeight > 0 ? 3 * MapSize.X * MapSize.Y + 17 : 0;
                var resourcesOffset = (Grid.MaximumTerrainHeight > 0 ? 4 : 3) * MapSize.X * MapSize.Y + 17;

                writer.Write((uint)tilesOffset);
                writer.Write((uint)heightsOffset);
                writer.Write((uint)resourcesOffset);

                // Tile data
                if (tilesOffset != 0)
                {
                    for (var i = 0; i < MapSize.X; i++)
                    {
                        for (var j = 0; j < MapSize.Y; j++)
                        {
                            var tile = Tiles[new MPos(i, j)];
                            writer.Write(tile.Type);
                            writer.Write(tile.Index);
                        }
                    }
                }

                // Height data
                if (heightsOffset != 0)
                    for (var i = 0; i < MapSize.X; i++)
                        for (var j = 0; j < MapSize.Y; j++)
                            writer.Write(Height[new MPos(i, j)]);

                // Resource data
                if (resourcesOffset != 0)
                {
                    for (var i = 0; i < MapSize.X; i++)
                    {
                        for (var j = 0; j < MapSize.Y; j++)
                        {
                            var tile = Resources[new MPos(i, j)];
                            writer.Write(tile.Type);
                            writer.Write(tile.Index);
                        }
                    }
                }
            }

            return dataStream.ToArray();
        }