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); }
/// <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); } } } }
/// <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); } } } }
/// <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); } }
/// <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); }
internal void SerializeDimensionHeader(DimensionHeader header, AbstractWorldSink sink, string dimensionRoot) { sink.Receive(header, dimensionRoot + Path.DirectorySeparatorChar + header.ID + ".header", header.ID); }