Ejemplo n.º 1
0
        private void SerializeDimensionHeader(Dimension dimension, AbstractWorldSink sink)
        {
            string          dimensionRoot = WorldStorage.DimensionPaths[dimension.ID];
            DimensionHeader header        = new DimensionHeader(dimension.DimensionName, dimension.ID, dimension.Width, dimension.Height);

            SerializeDimensionHeader(header, sink, dimensionRoot);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Parses the dimensions to setup for serialization.
        /// </summary>
        /// <param name="saveName"></param>
        private static void ParseDimensions()
        {
            if (World.Dimensions.Count > 0)
            {
                //We are saving
                foreach (Dimension item in World.Dimensions)
                {
                    DirectoryInfo dirInfo = Directory.CreateDirectory(WorldStorage.DimensionSaveFolder + Path.DirectorySeparatorChar + item.ID);

                    if (DimensionPaths.TryGetValue(item.ID, out string value) == false)
                    {
                        DimensionPaths.Add(item.ID, dirInfo.FullName);
                    }
                }
            }
            else
            {
                //We are loading
                foreach (string item in Directory.EnumerateDirectories(DimensionSaveFolder))
                {
                    string          dirName = Path.GetFileName(item);
                    DimensionHeader header  = DimensionStorage.LoadDimensionHeader(Guid.Parse(dirName), item);

                    if (!DimensionPaths.ContainsKey(header.ID))
                    {
                        DimensionPaths.Add(header.ID, item);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Parses the dimensions to setup for serialization.
        /// </summary>
        /// <param name="saveName"></param>
        private static void ParseDimensions()
        {
            if (World.Dimensions.Count > 0)
            {
                //Regenerate dimension paths each time to support saving in multiple save slots from one game.
                DimensionPaths.Clear();

                //We are saving
                foreach (Dimension item in World.Dimensions)
                {
                    DirectoryInfo dirInfo = Directory.CreateDirectory(WorldStorage.DimensionSaveFolder + Path.DirectorySeparatorChar + item.ID);
                    DimensionStorage.PrepareForDimension(item.ID);

                    if (!DimensionPaths.TryGetValue(item.ID, out string value))
                    {
                        DimensionPaths.Add(item.ID, dirInfo.FullName);
                    }
                }
            }
            else
            {
                //We are loading
                foreach (string item in Directory.EnumerateDirectories(DimensionSaveFolder))
                {
                    string          dirName = Path.GetFileName(item);
                    DimensionHeader header  = DimensionStorage.LoadDimensionHeader(Guid.Parse(dirName), item);

                    if (!DimensionPaths.ContainsKey(header.ID))
                    {
                        DimensionPaths.Add(header.ID, item);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Loads the dimension header for the specified dimension.
        /// </summary>
        /// <param name="id">The ID of the dimension.</param>
        /// <param name="dimensionRoot">The path to the dimension's root directory.</param>
        /// <returns></returns>
        internal DimensionHeader LoadDimensionHeader(Guid id, string dimensionRoot)
        {
            using (StreamReader sr = new StreamReader(dimensionRoot + Path.DirectorySeparatorChar + id + ".header"))
            {
                DimensionHeader result = (DimensionHeader)ProtoUtil.TypeModel.DeserializeWithLengthPrefix(sr.BaseStream, null, typeof(DimensionHeader), ProtoBuf.PrefixStyle.Base128, 0);

                return(result);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Loads the dimension, without actually loading any chunks.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        internal Dimension Load(Guid id)
        {
            Dimension       dimension; //need name, and chunks
            DimensionHeader header = this.LoadDimensionHeader(id);

            //A array of unloaded chunks.
            ProtoArray <Chunk> chunks = new ProtoArray <Chunk>(header.Width, header.Height);

            dimension = new Dimension(header.DimensionName, chunks, header.ID, WorldStorage.ItemStorage.LoadItemRegistry(id));

            return(dimension);
        }
Ejemplo n.º 6
0
 internal void SerializeDimensionHeader(DimensionHeader header, AbstractWorldSink sink, string dimensionRoot)
 {
     sink.Receive(header, dimensionRoot + Path.DirectorySeparatorChar + header.ID + ".header", header.ID);
 }