public static Layer FromBinary(BinaryReader reader)
{
Layer layer = new Layer
{
Width = reader.ReadInt16(),
Height = reader.ReadInt16(),
Flags = reader.ReadInt16()
};
layer.Visible = (~layer.Flags & 1) == 1;
layer.Parallax = (layer.Flags & 2) == 2;
layer.ParallaxX = reader.ReadSingle();
layer.ParallaxY = reader.ReadSingle();
layer.ScrollX = reader.ReadSingle();
layer.ScrollY = reader.ReadSingle();
int segs = reader.ReadInt32();
layer.Reflective = reader.ReadBoolean();
reader.ReadBytes(3); // reserved
short length = reader.ReadInt16();
layer.Name = new string(reader.ReadChars(length));
layer._tiles = new TwoArray<short>(layer.Width, layer.Height);
for (int i = 0, size = layer.Width*layer.Height; i < size; ++i)
layer._tiles.Array[i] = reader.ReadInt16();
for (int i = 0; i < segs; ++i) layer.Segments.Add(new Segment(reader));
return layer;
}