private static MapCellState DeserializeMapCellState(BinaryReader Reader, MapCell cell, MapPoint point)
        {
            if (cell == null)
            {
                return(null);
            }
            MapCellState state = new MapCellState(cell, point);

            state.Place = DeserializeMapPlaceState(Reader, cell.Place);

            MapWall northWall = cell.GetWall(MapDirection.North);
            MapWall southWall = cell.GetWall(MapDirection.South);
            MapWall westWall  = cell.GetWall(MapDirection.West);
            MapWall eastWall  = cell.GetWall(MapDirection.East);

            if (northWall != null)
            {
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, northWall, MapDirection.North));
            }
            if (southWall != null)
            {
                state.SetWall(MapDirection.South, DeserializeMapWallState(Reader, southWall, MapDirection.South));
            }
            if (westWall != null)
            {
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, westWall, MapDirection.West));
            }
            if (eastWall != null)
            {
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, eastWall, MapDirection.East));
            }

            return(state);
        }
        private static MapCellState DeserializeMapCellState(BinaryReader Reader, MapCell cell, MapPoint point)
        {
            if (cell == null) return null;
            MapCellState state = new MapCellState(cell, point);

            state.Place = DeserializeMapPlaceState(Reader, cell.Place);

            MapWall northWall = cell.GetWall(MapDirection.North);
            MapWall southWall = cell.GetWall(MapDirection.South);
            MapWall westWall = cell.GetWall(MapDirection.West);
            MapWall eastWall = cell.GetWall(MapDirection.East);

            if (northWall != null)
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, northWall, MapDirection.North));
            if (southWall != null)
                state.SetWall(MapDirection.South, DeserializeMapWallState(Reader, southWall, MapDirection.South));
            if (westWall != null)
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, westWall, MapDirection.West));
            if (eastWall != null)
                state.SetWall(MapDirection.North, DeserializeMapWallState(Reader, eastWall, MapDirection.East));

            return state;
        }