public static void LoadTextureData(Stream stream, Texture2D texture, bool keepSourceImageInTag) { EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); int num = texture.Width; int num2 = texture.Height; byte[] array = new byte[4 * num * num2]; for (int i = 0; i < texture.MipLevelsCount; i++) { engineBinaryReader.Read(array, 0, 4 * num * num2); if (keepSourceImageInTag && i == 0) { Image image = new Image(num, num2); for (int j = 0; j < image.Pixels.Length; j++) { byte r = array[4 * j]; byte g = array[4 * j + 1]; byte b = array[4 * j + 2]; byte a = array[4 * j + 3]; image.Pixels[j] = new Color(r, g, b, a); } texture.Tag = image; } texture.SetData(i, array); num = MathUtils.Max(num / 2, 1); num2 = MathUtils.Max(num2 / 2, 1); } }
/// <summary> /// 导出成普通文本文件 /// </summary> /// <param name="path"></param> /// <param name="exportFile"></param> public static void ExportOnekeyoMod2(string path, string exportFile) { if (path.IsFileInUse()) { throw new FileLoadException("文件被占用"); } Stream exportFileStream = new FileStream(exportFile, FileMode.Create); Stream stream = File.Open(path, FileMode.Open); EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false); string data = ""; int MinX = engineBinaryReader.ReadInt32(); int MinY = engineBinaryReader.ReadInt32(); int MinZ = engineBinaryReader.ReadInt32(); int MaxX = engineBinaryReader.ReadInt32(); int MaxY = engineBinaryReader.ReadInt32(); int MaxZ = engineBinaryReader.ReadInt32(); data += $"{MinX}\n{MinY}\n{MinZ}\n{MaxX}\n{MaxY}\n{MaxZ}"; for (int x = MinX; x <= MaxX; x++) { for (int y = MinY; y <= MaxY; y++) { for (int z = MinZ; z <= MaxZ; z++) { data += $"\n{engineBinaryReader.ReadInt32()}"; } } } exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length); engineBinaryReader.Dispose(); stream.Dispose(); exportFileStream.Dispose(); }
public static void ExportCopywMod(string path, string exportFile) { if (path.IsFileInUse()) { throw new FileLoadException("文件被占用"); } Stream exportFileStream = new FileStream(exportFile, FileMode.Create); Stream stream = File.Open(path, FileMode.Open); EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false); string data = ""; int MaxX = engineBinaryReader.ReadInt32(); int MaxY = engineBinaryReader.ReadInt32(); int MaxZ = engineBinaryReader.ReadInt32(); data += $"{MaxX},{MaxY},{MaxZ}"; for (int x = 0; x <= MaxX; x++) { for (int y = 0; y <= MaxY; y++) { for (int z = 0; z <= MaxZ; z++) { int BlockID = engineBinaryReader.ReadInt32(); if (Terrain.ExtractContents(BlockID) != 0) { data += $"\n{x},{y},{z},{BlockID}"; } } } } exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length); engineBinaryReader.Dispose(); stream.Dispose(); exportFileStream.Dispose(); }
public static Texture2D ReadTexture(Stream stream) { EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); bool keepSourceImageInTag = engineBinaryReader.ReadBoolean(); int width = engineBinaryReader.ReadInt32(); int height = engineBinaryReader.ReadInt32(); int mipLevelsCount = engineBinaryReader.ReadInt32(); Texture2D texture2D = new Texture2D(width, height, mipLevelsCount, ColorFormat.Rgba8888); LoadTextureData(stream, texture2D, keepSourceImageInTag); return(texture2D); }
public static Image ReadImage(Stream stream) { EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); int width = engineBinaryReader.ReadInt32(); int height = engineBinaryReader.ReadInt32(); Image image = new Image(width, height); for (int i = 0; i < image.Pixels.Length; i++) { image.Pixels[i] = engineBinaryReader.ReadColor(); } return(image); }
public static void ReadHeaders(Stream stream, out FmtHeader fmtHeader, out DataHeader dataHeader, out long dataStart) { if (stream == null) { throw new ArgumentNullException("stream"); } if (!BitConverter.IsLittleEndian) { throw new InvalidOperationException("Unsupported system endianness."); } if (!IsWavStream(stream)) { throw new InvalidOperationException("Invalid WAV header."); } EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); fmtHeader = default(FmtHeader); dataHeader = default(DataHeader); dataStart = 0L; stream.Position += 12L; bool flag = false; bool flag2 = false; while (!flag || !flag2) { int num = engineBinaryReader.ReadInt32(); if (num == MakeFourCC("fmt ")) { stream.Position -= 4L; fmtHeader = engineBinaryReader.ReadStruct <FmtHeader>(); flag = true; } else if (num == MakeFourCC("data")) { stream.Position -= 4L; dataHeader = engineBinaryReader.ReadStruct <DataHeader>(); dataStart = stream.Position; flag2 = true; } else { int num2 = engineBinaryReader.ReadInt32(); stream.Position += num2; } } if (fmtHeader.Type != 1 || fmtHeader.ChannelsCount < 1 || fmtHeader.ChannelsCount > 2 || fmtHeader.SamplingFrequency < 8000 || fmtHeader.SamplingFrequency > 48000 || fmtHeader.BitsPerChannel != 16) { throw new InvalidOperationException("Unsupported WAV format."); } }
public static ModelData ReadModelData(Stream stream) { EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); ModelData modelData = new ModelData(); modelData.Bones.Capacity = engineBinaryReader.ReadInt32(); for (int i = 0; i < modelData.Bones.Capacity; i++) { ModelBoneData modelBoneData = new ModelBoneData(); modelData.Bones.Add(modelBoneData); modelBoneData.ParentBoneIndex = engineBinaryReader.ReadInt32(); modelBoneData.Name = engineBinaryReader.ReadString(); modelBoneData.Transform = engineBinaryReader.ReadMatrix(); } modelData.Meshes.Capacity = engineBinaryReader.ReadInt32(); for (int j = 0; j < modelData.Meshes.Capacity; j++) { ModelMeshData modelMeshData = new ModelMeshData(); modelData.Meshes.Add(modelMeshData); modelMeshData.ParentBoneIndex = engineBinaryReader.ReadInt32(); modelMeshData.Name = engineBinaryReader.ReadString(); modelMeshData.MeshParts.Capacity = engineBinaryReader.ReadInt32(); modelMeshData.BoundingBox = engineBinaryReader.ReadBoundingBox(); for (int k = 0; k < modelMeshData.MeshParts.Capacity; k++) { ModelMeshPartData modelMeshPartData = new ModelMeshPartData(); modelMeshData.MeshParts.Add(modelMeshPartData); modelMeshPartData.BuffersDataIndex = engineBinaryReader.ReadInt32(); modelMeshPartData.StartIndex = engineBinaryReader.ReadInt32(); modelMeshPartData.IndicesCount = engineBinaryReader.ReadInt32(); modelMeshPartData.BoundingBox = engineBinaryReader.ReadBoundingBox(); } } modelData.Buffers.Capacity = engineBinaryReader.ReadInt32(); for (int l = 0; l < modelData.Buffers.Capacity; l++) { ModelBuffersData modelBuffersData = new ModelBuffersData(); modelData.Buffers.Add(modelBuffersData); VertexElement[] array = new VertexElement[engineBinaryReader.ReadInt32()]; for (int m = 0; m < array.Length; m++) { array[m] = new VertexElement(engineBinaryReader.ReadInt32(), (VertexElementFormat)engineBinaryReader.ReadInt32(), engineBinaryReader.ReadString()); } modelBuffersData.VertexDeclaration = new VertexDeclaration(array); modelBuffersData.Vertices = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32()); modelBuffersData.Indices = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32()); } return(modelData); }
/// <summary> /// 导出成普通文本文件 /// </summary> /// <param name="path"></param> /// <param name="exportFile"></param> public static void ExportOnekeyoMod(string path, string exportFile) { if (path.IsFileInUse()) { throw new FileLoadException("文件被占用"); } Stream exportFileStream = new FileStream(exportFile, FileMode.Create); Stream stream = File.Open(path, FileMode.Open); EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false); string data = ""; int MinX = engineBinaryReader.ReadInt32(); int MinY = engineBinaryReader.ReadInt32(); int MinZ = engineBinaryReader.ReadInt32(); int MaxX = engineBinaryReader.ReadInt32(); int MaxY = engineBinaryReader.ReadInt32(); int MaxZ = engineBinaryReader.ReadInt32(); //data += $"{MinX}\n{MinY}\n{MinZ}\n{MaxX}\n{MaxY}\n{MaxZ}"; for (int x = MinX; x <= MaxX; x++) { for (int y = MinY; y <= MaxY; y++) { for (int z = MinZ; z <= MaxZ; z++) { int blockID = engineBinaryReader.ReadInt32(); if (Terrain.ExtractContents(blockID) == 0) { continue; } if (x == MaxX && y == MaxY && z == MaxZ) { data += $"{x},{y},{z},{blockID}\n"; continue; } data += $"{x},{y},{z},{blockID}\n"; } } } exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length); engineBinaryReader.Dispose(); stream.Dispose(); exportFileStream.Dispose(); }
/// <summary> /// 一键生成 /// </summary> /// <param name="creatorAPI"></param> /// <param name="path"></param> /// <param name="position"></param> public static void GenerationData(CreatorAPI creatorAPI, string path, Point3 position) { ChunkData chunkData = new ChunkData(creatorAPI); creatorAPI.revokeData = new ChunkData(creatorAPI); ComponentPlayer player = creatorAPI.componentMiner.ComponentPlayer; Stream fileStream = new FileStream(path, FileMode.Open).CreateStream(); EngineBinaryReader binaryReader = new EngineBinaryReader(fileStream, false); int count = 0; int MinX = binaryReader.ReadInt32(); int MinY = binaryReader.ReadInt32(); int MInZ = binaryReader.ReadInt32(); int MaxX = binaryReader.ReadInt32(); int MaxY = binaryReader.ReadInt32(); int MaxZ = binaryReader.ReadInt32(); for (int PositionX = MinX; PositionX <= MaxX; PositionX++) { for (int PositionY = MinY; PositionY <= MaxY; PositionY++) { for (int PositionZ = MInZ; PositionZ <= MaxZ; PositionZ++) { if (!creatorAPI.launch) { return; } int id = binaryReader.ReadInt32(); if (!creatorAPI.AirIdentify && Terrain.ExtractContents(id) == 0) { continue; } creatorAPI.CreateBlock(position.X + PositionX, position.Y + PositionY, position.Z + PositionZ, id, chunkData); count++; } } } binaryReader.Dispose(); fileStream.Dispose(); chunkData.Render(); creatorAPI.componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage($"操作成功,共{count}个方块", true, true); }
internal static void InitializeBitmapFont(Stream stream, BitmapFont bitmapFont) { EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream); int num = engineBinaryReader.ReadInt32(); BitmapFont.Glyph[] array = new BitmapFont.Glyph[num]; for (int i = 0; i < num; i++) { char code = engineBinaryReader.ReadChar(); Vector2 texCoord = engineBinaryReader.ReadVector2(); Vector2 texCoord2 = engineBinaryReader.ReadVector2(); Vector2 offset = engineBinaryReader.ReadVector2(); float width = engineBinaryReader.ReadSingle(); array[i] = new BitmapFont.Glyph(code, texCoord, texCoord2, offset, width); } float glyphHeight = engineBinaryReader.ReadSingle(); Vector2 spacing = engineBinaryReader.ReadVector2(); float scale = engineBinaryReader.ReadSingle(); char fallbackCode = engineBinaryReader.ReadChar(); Texture2D texture = TextureContentReader.ReadTexture(stream); bitmapFont.Initialize(texture, null, array, fallbackCode, glyphHeight, spacing, scale); }
private static void FontSave(Stream stream, Stream lstStream) { EngineBinaryReader binaryReader = new EngineBinaryReader(stream, false); int num = binaryReader.ReadInt32(); string data = ""; data += num + "\n"; for (int i = 0; i < num; i++) { data += binaryReader.ReadChar() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\n"; } data += binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadSingle() + "\t" + binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadChar(); lstStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length); }
public static void UnpackData(string text, string typeName) { if (typeName == "System.String") { FileStream input = File.OpenRead(text); EngineBinaryReader binaryReader = new EngineBinaryReader(input); binaryReader.BaseStream.Position = 0; string s = binaryReader.ReadString(); binaryReader.Close(); FileStream fileStream = File.Create(text + ".txt"); fileStream.Write(Encoding.UTF8.GetBytes(s), 0, Encoding.UTF8.GetBytes(s).Length); fileStream.Close(); File.Delete(text); return; } if (typeName == "System.Xml.Linq.XElement") { FileStream input2 = File.OpenRead(text); EngineBinaryReader binaryReader2 = new EngineBinaryReader(input2); binaryReader2.BaseStream.Position = 0; string s2 = binaryReader2.ReadString(); binaryReader2.Close(); FileStream fileStream2 = File.Create(text + ".xml"); fileStream2.Write(Encoding.UTF8.GetBytes(s2), 0, Encoding.UTF8.GetBytes(s2).Length); fileStream2.Close(); File.Delete(text); return; } if (typeName == "Engine.Graphics.Texture2D") { FileStream stream = File.OpenRead(text); EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false); engineBinaryReader.ReadByte(); int width = engineBinaryReader.ReadInt32(); int height = engineBinaryReader.ReadInt32(); Image image = new Image(width, height); engineBinaryReader.ReadInt32(); for (int i = 0; i < image.Pixels.Length; i++) { image.Pixels[i] = engineBinaryReader.ReadColor(); } engineBinaryReader.Close(); File.Delete(text); FileStream fileStream3 = File.Create(text + ".png"); Png.Save(image, fileStream3, Png.Format.RGBA8); fileStream3.Close(); /*FileStream fileStream = File.OpenRead(text); * FileStream fileStream2 = File.Create(text + ".png"); * fileStream.ReadByte(); * Image image = ImageContentReader.ReadImage(fileStream); * Png.Save(image,fileStream2,Png.Format.RGBA8); * fileStream2.Close(); * fileStream.Close(); * File.Delete(text);*/ } if (typeName == "Engine.Audio.SoundBuffer") { FileStream input = File.OpenRead(text); FileStream fileStream = File.Create(text + ".wav?"); input.CopyTo(fileStream); input.Close(); fileStream.Close(); File.Delete(text); /*ContentStream stream = new ContentStream(text); * FileStream fileStream = File.Create(text + ".wav"); * SoundBuffer data = Read(stream,null); * int ad = data.SamplesCount; * Console.WriteLine(ad); * SoundData sounddata = new SoundData((int)data.ChannelsCount,(int)data.SamplingFrequency,ad); * Wav.Save(sounddata, fileStream); * stream.Close(); * fileStream.Close(); * File.Delete(text);*/ } if (typeName == "Engine.Graphics.Model") { FileStream stream = File.OpenRead(text); if (Program.size != 0f && Program.size > 1f && Program.size < 255f) { string texts = dir + $"\\x{Program.size}Model\\"; if (!Directory.Exists(texts)) { Directory.CreateDirectory(texts); } string name = Path.GetFileNameWithoutExtension(text); //Console.WriteLine(texts + name + Program.size + "x.dae?"); FileStream i = File.Create(texts + name + Program.size + "x.dae?"); bool keepSourceVertexDataInTags = new BinaryReader(stream).ReadBoolean(); new BinaryWriter(i).Write(keepSourceVertexDataInTags); ModelData j = ModelDataContentReader.ReadModelData(stream); ModelDataContentWriter w = new ModelDataContentWriter(); w.ModelData = text; Vector3 scale = default(Vector3); if (scale == default(Vector3)) { scale = new Vector3(Program.size, Program.size, Program.size); } ModelDataContentWriter.WriteModelData(i, j, scale); i.Close(); } FileStream fileStream = File.Create(text + ".dae?"); stream.CopyTo(fileStream); stream.Close(); fileStream.Close(); File.Delete(text); /*FileStream input = File.OpenRead(text); * FileStream fileStream = File.Create(text + ".dae?"); * input.CopyTo(fileStream); * input.Close(); * fileStream.Close(); * File.Delete(text);*/ } if (typeName == "Engine.Graphics.Shader") { FileStream input = File.OpenRead(text); FileStream fileStream = File.Create(text + ".shader?"); input.CopyTo(fileStream); input.Close(); fileStream.Close(); File.Delete(text); return; } if (typeName == "Engine.Media.BitmapFont") { FileStream input = File.OpenRead(text); FileStream fileStream = File.Create(text + ".font?"); input.CopyTo(fileStream); input.Close(); fileStream.Close(); File.Delete(text); return; } if (typeName == "Engine.Media.StreamingSource") { FileStream input = File.OpenRead(text); FileStream fileStream = File.Create(text + ".ogg"); input.CopyTo(fileStream); input.Close(); fileStream.Close(); File.Delete(text); return; } }
/// <summary> /// 粘贴 /// </summary> /// <param name="creatorAPI"></param> /// <param name="path"></param> /// <param name="Start"></param> /// <param name="End"></param> /// <param name="type"></param> public static void PasetData(CreatorAPI creatorAPI, string path, Point3 Start, Point3 End) { ChunkData chunkData = new ChunkData(creatorAPI); creatorAPI.revokeData = new ChunkData(creatorAPI); ComponentPlayer player = creatorAPI.componentMiner.ComponentPlayer; Stream fileStream = new FileStream(path, FileMode.Open).CreateStream(); EngineBinaryReader binaryReader = new EngineBinaryReader(fileStream, false); int count = 0; int MaxX = binaryReader.ReadInt32(); int MaxY = binaryReader.ReadInt32(); int MaxZ = binaryReader.ReadInt32(); for (int PositionX = 0; PositionX <= MaxX; PositionX++) { for (int PositionY = 0; PositionY <= MaxY; PositionY++) { for (int PositionZ = 0; PositionZ <= MaxZ; PositionZ++) { if (!creatorAPI.launch) { return; } int x, y, z; int id = binaryReader.ReadInt32(); if (!creatorAPI.AirIdentify && Terrain.ExtractContents(id) == 0) { continue; } y = Start.Y + PositionY; if (Start.X <= End.X && Start.Z <= End.Z) { x = Start.X + PositionX; z = Start.Z + PositionZ; if (creatorAPI.pasteLimit && (End.X < x || End.Z < z)) { continue; } creatorAPI.CreateBlock(x, y, z, id, chunkData); } else if (Start.X >= End.X && Start.Z <= End.Z) { if (!creatorAPI.pasteRotate) { x = Start.X - MaxX + PositionX; z = Start.Z + PositionZ; if (creatorAPI.pasteLimit && (Start.X > x + Start.X - End.X || End.Z < z)) { continue; } creatorAPI.CreateBlock(x, y, z, id, chunkData); } else { int _x = Start.X - PositionZ; int _z = Start.Z + PositionX; if (creatorAPI.pasteLimit && (Start.X > _x + Start.X - End.X || End.Z < _z)) { continue; } creatorAPI.CreateBlock(_x, y, _z, id, chunkData); } } else if (Start.X >= End.X && Start.Z >= End.Z) { if (!creatorAPI.pasteRotate) { x = Start.X - MaxX + PositionX; z = Start.Z - MaxZ + PositionZ; if (creatorAPI.pasteLimit && (Start.X > x + Start.X - End.X || Start.Z > z + Start.Z - End.Z)) { continue; } creatorAPI.CreateBlock(x, y, z, id, chunkData); } else { int _x = Start.X - PositionX; int _z = Start.Z - PositionZ; if (creatorAPI.pasteLimit && (Start.X > _x + Start.X - End.X || Start.Z > _z + Start.Z - End.Z)) { continue; } creatorAPI.CreateBlock(_x, y, _z, id, chunkData); } } else if (Start.X <= End.X && Start.Z >= End.Z) { if (!creatorAPI.pasteRotate) { x = Start.X + PositionX; z = Start.Z - MaxZ + PositionZ; if (creatorAPI.pasteLimit && (End.X < x || Start.Z > z + Start.Z - End.Z)) { continue; } creatorAPI.CreateBlock(x, y, z, id, chunkData); } else { int _x = Start.X + PositionZ; int _z = Start.Z - PositionX; if (creatorAPI.pasteLimit && (End.X < _x || Start.Z > _z + Start.Z - End.Z)) { continue; } creatorAPI.CreateBlock(_x, y, _z, id, chunkData); } } count++; } } } binaryReader.Dispose(); fileStream.Dispose(); chunkData.Render(); creatorAPI.componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage($"粘贴成功,共{count}个方块", true, true); }