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 void SerializeMapCellState(BinaryWriter Writer, MapCellState CellState)
        {
            if (CellState == null) return;

            MapWallState northWall = CellState.GetWall(MapDirection.North);
            MapWallState southWall = CellState.GetWall(MapDirection.South);
            MapWallState westWall = CellState.GetWall(MapDirection.West);
            MapWallState eastWall = CellState.GetWall(MapDirection.East);

            SerializeMapPlaceState(Writer, CellState.Place);

            if (northWall != null) SerializeMapWallState(Writer, northWall);
            if (southWall != null) SerializeMapWallState(Writer, southWall);
            if (westWall != null) SerializeMapWallState(Writer, westWall);
            if (eastWall != null) SerializeMapWallState(Writer, eastWall);
        }