public MultiplayerConfig LoadMultiplayer(byte[] data) { MemoryStream memoryStream = new MemoryStream(data); BinaryReader br = new BinaryReader(memoryStream); //Read compressed bytes int uncompressedSize = br.ReadInt32(); //Uncompress bytes byte[] uncompressedBytes = new byte[uncompressedSize]; GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress); int bytesRead = 0; while (true) { int read = gzipStream.Read(uncompressedBytes, bytesRead, uncompressedSize - bytesRead); if (read == 0) { break; } bytesRead += read; } br = new BinaryReader(new MemoryStream(uncompressedBytes)); //Load world from uncompressed bytes MultiplayerConfig config = LoadMultiplayer(br); tileManager.Create(config.tileDefinitions, sizeXbits, sizeYbits, sizeZbits); itemManager.Create(config.itemDefinitions); avatarManager.Create(config.avatarDefinitions); sectorManager.Create(); dayCycleManager.Create(null); tileManager.Load(br); itemManager.Load(br); sectorManager.Load(br); dayCycleManager.Load(br); //Player avatar int playerObjectId = br.ReadInt32(); Player player = (Player)avatarManager.CreateAvatar(avatarManager.GetAvatarDefinitionById("player"), playerObjectId, new Vector3(), false); player.Load(br); cwListener.CreateObject(player); gameplay.WorldLoaded(); return(config); }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { m_sectorManager.Load(new FileInfo(ofdLoadSandbox.FileName)); bool changed = false; foreach (var ship in m_sectorManager.Sector.CubeGrids) { foreach (var cube in ship.CubeBlocks) { Type cubeType = cube.GetType(); if (cubeType == typeof(CubeBlockEntity)) { CubeBlockEntity cubeBlock = (CubeBlockEntity)cube; if (cubeBlock.Name == "LargeBlockInteriorWall") { MyBlockOrientation orientation = cubeBlock.BlockOrientation; if (orientation.Up == Base6Directions.Direction.Up) { orientation.Up = Base6Directions.Direction.Down; changed = true; } else if (orientation.Up == Base6Directions.Direction.Down) { orientation.Up = Base6Directions.Direction.Up; changed = true; } cubeBlock.BlockOrientation = orientation; } } } } if (changed) { m_sectorManager.Save(); MessageBox.Show("Save completed!"); } else { MessageBox.Show("Nothing needs to be changed (No Interior wall was found)"); } }