Dwarrowdelf.TerrainGen.TerrainData.LoadTerrain C# (CSharp) Method

LoadTerrain() public static method

public static LoadTerrain ( string path, string expectedName, IntSize3 expectedSize ) : TerrainData
path string
expectedName string
expectedSize IntSize3
return TerrainData
        public static unsafe TerrainData LoadTerrain(string path, string expectedName, IntSize3 expectedSize)
        {
            if (File.Exists(path) == false)
                return null;

            using (var stream = File.OpenRead(path))
            {
                TerrainData terrain;

                using (var br = new BinaryReader(stream, Encoding.Default, true))
                {
                    var name = br.ReadString();

                    if (name != expectedName)
                        return null;

                    int w = br.ReadInt32();
                    int h = br.ReadInt32();
                    int d = br.ReadInt32();

                    var size = new IntSize3(w, h, d);

                    if (size != expectedSize)
                        return null;

                    terrain = new TerrainData(size);
                }

                fixed (TileData* v = terrain.m_tileGrid)
                {
                    byte* p = (byte*)v;

                    int len = terrain.Size.Volume * sizeof(TileData);

                    using (var memStream = new UnmanagedMemoryStream(p, 0, len, FileAccess.Write))
                        CopyTo(stream, memStream, len);
                }

                fixed (byte* p = terrain.m_levelMap)
                {
                    int len = terrain.Size.Plane.Area * sizeof(byte);

                    using (var memStream = new UnmanagedMemoryStream(p, 0, len, FileAccess.Write))
                        CopyTo(stream, memStream, len);
                }

                return terrain;
            }
        }