public static void WriteTexture(Stream stream, Image image, bool generateMipmaps, bool premultiplyAlpha, bool keepSourceImageInTag) { if (premultiplyAlpha) { image = new Image(image); Image.PremultiplyAlpha(image); } List <Image> list = new List <Image>(); if (generateMipmaps) { list.AddRange(Image.GenerateMipmaps(image)); } else { list.Add(image); } EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream); engineBinaryWriter.Write(keepSourceImageInTag); engineBinaryWriter.Write(list[0].Width); engineBinaryWriter.Write(list[0].Height); engineBinaryWriter.Write(list.Count); foreach (Image item in list) { for (int i = 0; i < item.Pixels.Length; i++) { engineBinaryWriter.Write(item.Pixels[i]); } } }
/// <summary> /// 创建复制文件 /// </summary> /// <param name="player"></param> /// <param name="directory"></param> /// <param name="path"></param> /// <param name="Start"></param> /// <param name="End"></param> public static void CreateCopy(CreatorAPI creatorAPI, string directory, string path, Point3 Start, Point3 End) { int count = 0; CreatorMain.Math.StartEnd(ref Start, ref End); FileStream fileStream = new FileStream(directory + "/" + path, FileMode.Create); EngineBinaryWriter binaryWriter = new EngineBinaryWriter(fileStream, true); binaryWriter.Write(Start.X - End.X); binaryWriter.Write(Start.Y - End.Y); binaryWriter.Write(Start.Z - End.Z); for (int x = End.X; x <= Start.X; x++) { for (int y = End.Y; y <= Start.Y; y++) { for (int z = End.Z; z <= Start.Z; z++) { binaryWriter.Write(GameManager.Project.FindSubsystem <SubsystemTerrain>(true).Terrain.GetCellValueFast(x, y, z)); count++; } } } binaryWriter.Dispose(); fileStream.Dispose(); creatorAPI.componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage($"复制成功,共{count}个方块", true, true); }
public static void WriteImage(Stream stream, Image image) { EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream); engineBinaryWriter.Write(image.Width); engineBinaryWriter.Write(image.Height); for (int i = 0; i < image.Pixels.Length; i++) { engineBinaryWriter.Write(image.Pixels[i]); } }
public static void ImportCopywMod(string path, string importFile) { List <string> list = new List <string>(); Stream stream = File.OpenRead(importFile); StreamReader streamReader = new StreamReader(stream); string text = streamReader.ReadToEnd(); streamReader.Dispose(); stream.Dispose(); foreach (string data in text.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { list.Add(data); } FileStream fileStream = new FileStream(path, FileMode.Create); EngineBinaryWriter binaryWriter = new EngineBinaryWriter(fileStream, true); string[] data2 = list[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); int MaxX = int.Parse(data2[0]); int MaxY = int.Parse(data2[1]); int MaxZ = int.Parse(data2[2]); list.RemoveAt(0); binaryWriter.Write(MaxX); binaryWriter.Write(MaxY); binaryWriter.Write(MaxZ); for (int x = 0; x <= MaxX; x++) { for (int y = 0; y <= MaxY; y++) { for (int z = 0; z <= MaxZ; z++) { int blockID = 0; for (int i = 0; i < list.Count; i++) { string[] database = list[i].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (int.Parse(database[0]) == x && int.Parse(database[1]) == y && int.Parse(database[2]) == z) { blockID = int.Parse(database[3]); list.RemoveAt(i); } } binaryWriter.Write(blockID); } } } binaryWriter.Dispose(); fileStream.Dispose(); }
private static void TextWriter(MemoryStream memoryStream, FileStream fileStream) { byte[] array = new byte[fileStream.Length]; fileStream.Read(array, 0, (int)fileStream.Length); EngineBinaryWriter binaryWriter = new EngineBinaryWriter(memoryStream, false); binaryWriter.Write(Encoding.UTF8.GetString(array)); }
public static void WriteBitmapFont(Stream stream, Image image, char firstCode, char fallbackCode, Vector2 spacing, float scale, Vector2 offset, bool generateMipmaps, bool premultiplyAlpha) { EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream); BitmapFont bitmapFont = BitmapFont.InternalLoad(image, firstCode, fallbackCode, spacing, scale, offset, 1, premultiplyAlpha, createTexture: false); engineBinaryWriter.Write(bitmapFont.m_glyphsByCode.Count((BitmapFont.Glyph g) => g != null)); for (int i = 0; i < bitmapFont.m_glyphsByCode.Length; i++) { BitmapFont.Glyph glyph = bitmapFont.m_glyphsByCode[i]; if (glyph != null) { engineBinaryWriter.Write(glyph.Code); engineBinaryWriter.Write(glyph.TexCoord1); engineBinaryWriter.Write(glyph.TexCoord2); engineBinaryWriter.Write(glyph.Offset); engineBinaryWriter.Write(glyph.Width); } } engineBinaryWriter.Write(bitmapFont.GlyphHeight); engineBinaryWriter.Write(bitmapFont.Spacing); engineBinaryWriter.Write(bitmapFont.Scale); engineBinaryWriter.Write(bitmapFont.FallbackGlyph.Code); TextureContentWriter.WriteTexture(stream, bitmapFont.m_image, generateMipmaps, premultiplyAlpha: false, keepSourceImageInTag: false); }
/// <summary> /// 普通文本文件导入 /// </summary> /// <param name="path"></param> /// <param name="importFile"></param> public static void ImportOnekeyoMod2(string path, string importFile) { List <string> list = new List <string>(); Stream stream = File.OpenRead(importFile); StreamReader streamReader = new StreamReader(stream); string text = streamReader.ReadToEnd(); streamReader.Dispose(); stream.Dispose(); FileStream fileStream = new FileStream(path, FileMode.Create); EngineBinaryWriter binaryWriter = new EngineBinaryWriter(fileStream, true); foreach (string data in text.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { binaryWriter.Write(int.Parse(data)); } binaryWriter.Dispose(); fileStream.Dispose(); }
private static void FontWriter(MemoryStream memoryStream, FileStream fileStream) { EngineBinaryWriter binaryWriter = new EngineBinaryWriter(memoryStream, false); StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8); int num = int.Parse(streamReader.ReadLine()); binaryWriter.Write(num); for (int i = 0; i < num; i++) { string[] data = streamReader.ReadLine().Split('\t'); binaryWriter.Write(char.Parse(data[0])); binaryWriter.Write(float.Parse(data[1])); binaryWriter.Write(float.Parse(data[2])); binaryWriter.Write(float.Parse(data[3])); binaryWriter.Write(float.Parse(data[4])); binaryWriter.Write(float.Parse(data[5])); binaryWriter.Write(float.Parse(data[6])); binaryWriter.Write(float.Parse(data[7])); } binaryWriter.Write(float.Parse(streamReader.ReadLine())); string[] floatItem = streamReader.ReadLine().Split('\t'); binaryWriter.Write(float.Parse(floatItem[0])); binaryWriter.Write(float.Parse(floatItem[1])); binaryWriter.Write(float.Parse(streamReader.ReadLine())); binaryWriter.Write(char.Parse(streamReader.ReadLine())); }
private static void PngWriter(MemoryStream memoryStream, FileStream fileStream, bool modelpng = false) { PngReader pngReader = new PngReader(fileStream); EngineBinaryWriter binaryWriter = new EngineBinaryWriter(memoryStream, false); binaryWriter.Write(false); pngReader.ShouldCloseStream = false; pngReader.ChunkLoadBehaviour = ChunkLoadBehaviour.LOAD_CHUNK_NEVER; pngReader.MaxTotalBytesRead = 9223372036854775807L; ImageLines imageLines = pngReader.ReadRowsByte(); pngReader.End(); Image image = new Image(pngReader.ImgInfo.Cols, pngReader.ImgInfo.Rows); int n = 0; for (int i = 0; i < image.Height; i++) { byte[] array = imageLines.ScanlinesB[i]; int num = 0; for (int j = 0; j < image.Width; j++) { byte r = array[num++]; byte g = array[num++]; byte b = array[num++]; byte a = array[num++]; image.Pixels[n++] = new Color(r, g, b, a); } } List <Image> list = new List <Image>(); if (IsPowerOf2(image.Width) && IsPowerOf2(image.Height)) { list.AddRange(Image.GenerateMipmaps(image, 2147483647)); } else { list.Add(image); modelpng = true; } if (modelpng) { goto IL_00; } binaryWriter.Write(image.Width); binaryWriter.Write(image.Height); binaryWriter.Write(1); for (int i = 0; i < image.Height; i++) { byte[] array = imageLines.ScanlinesB[i]; int num = 0; for (int j = 0; j < image.Width; j++) { byte r = array[num++]; byte g = array[num++]; byte b = array[num++]; byte a = array[num++]; binaryWriter.Write(new Color(r, g, b, a).PackedValue); } } return; IL_00: binaryWriter.Write(list[0].Width); binaryWriter.Write(list[0].Height); binaryWriter.Write(list.Count); foreach (Image current in list) { for (int j = 0; j < current.Pixels.Length; j++) { binaryWriter.Write(current.Pixels[j].PackedValue); } } }
public static void PAK(string directory) { if (!Directory.Exists(directory)) { Console.WriteLine("PAK包文件夹不存在"); return; } List <ContentInfo> list = new List <ContentInfo>(); list = Files(list, directory); List <long> list2 = new List <long>(); new DirectoryInfo(directory); if (directory.EndsWith("/") || directory.EndsWith("\\")) { directory = directory.Substring(0, directory.Length - 1); } FileStream fileStream; if (File.Exists(directory + ".pak")) { if (File.Exists(directory + "_sign.pak")) { fileStream = new FileStream(directory + "_sign.pak", FileMode.Open); } else { fileStream = new FileStream(directory + "_sign.pak", FileMode.Create); } } else { fileStream = new FileStream(directory + ".pak", FileMode.Create); } EngineBinaryWriter binaryWriter = new EngineBinaryWriter(fileStream, true); binaryWriter.Write((byte)80); binaryWriter.Write((byte)65); binaryWriter.Write((byte)75); binaryWriter.Write((byte)0); binaryWriter.Write(0); binaryWriter.Write(list.Count); foreach (ContentInfo current in list) { binaryWriter.Write(current.Name.Substring(directory.Length + 1, current.Name.Length - directory.Length - 1)); binaryWriter.Write(current.TypeName); list2.Add(binaryWriter.BaseStream.Position); binaryWriter.Write(0); binaryWriter.Write(0); } long position = binaryWriter.BaseStream.Position; long num = position; binaryWriter.Seek(4, SeekOrigin.Begin); binaryWriter.Write((int)position); int num2 = 0; int num3 = 0; long num4 = 0L; foreach (ContentInfo current2 in list) { binaryWriter.Seek((int)num, SeekOrigin.Begin); binaryWriter.Write((byte)222); binaryWriter.Write((byte)173); binaryWriter.Write((byte)190); binaryWriter.Write((byte)239); num = binaryWriter.BaseStream.Position; num3 = (int)num; Stream stream = PackData(current2.Name, current2.TypeName); fileStream.Seek(binaryWriter.BaseStream.Position, SeekOrigin.Begin); stream.CopyTo(fileStream); num4 = stream.Position; stream.Close(); num = binaryWriter.BaseStream.Position; binaryWriter.Seek((int)list2[num2++], SeekOrigin.Begin); binaryWriter.Write((int)((long)num3 - position)); binaryWriter.Write((int)num4); Console.WriteLine(current2.Name); } binaryWriter.Close(); fileStream.Close(); Console.WriteLine("打包完成"); }
public static void Coppy_zone(string path, Point3 Point1, Point3 Point2, SubsystemTerrain subsystemTerrain, ComponentPlayer player) { int startX = Math.Min(Point1.X, Point2.X); int endX = Math.Max(Point1.X, Point2.X); int startY = Math.Min(Point1.Y, Point2.Y); int endY = Math.Max(Point1.Y, Point2.Y); int startZ = Math.Min(Point1.Z, Point2.Z); int endZ = Math.Max(Point1.Z, Point2.Z); FileStream fileStream = new FileStream(path, FileMode.Create); EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter((Stream)fileStream, true); engineBinaryWriter.Write((byte)79); engineBinaryWriter.Write((byte)110); engineBinaryWriter.Write((byte)101); engineBinaryWriter.Write((byte)75); engineBinaryWriter.Write((byte)101); engineBinaryWriter.Write((byte)121); engineBinaryWriter.Write((byte)0); engineBinaryWriter.Write(0); blockCount = 0; BlockList.Clear(); for (int x = 0; x <= endX - startX; x++) { for (int y = 0; y <= endY - startY; y++) { for (int z = 0; z <= endZ - startZ; z++) { BlockMem blmem = new BlockMem(); int X, Y, Z; if (Point1.X > Point2.X) { blmem.x = -x; X = Point1.X - x; } else { blmem.x = x; X = Point1.X + x; } if (Point1.Y > Point2.Y) { blmem.y = -y; Y = Point1.Y - y; } else { blmem.y = y; Y = Point1.Y + y; } if (Point1.Z > Point2.Z) { blmem.z = -z; Z = Point1.Z - z; } else { blmem.z = z; Z = Point1.Z + z; } blmem.id = subsystemTerrain.Terrain.GetCellValueFast(X, Y, Z); engineBinaryWriter.Write(blmem.x); engineBinaryWriter.Write(blmem.y); engineBinaryWriter.Write(blmem.z); engineBinaryWriter.Write(blmem.id); ++blockCount; BlockList.Add(blmem); blockCount++; } } } player.ComponentGui.DisplaySmallMessage(string.Format("Sucsses {0} place blocks", blockCount), true, true); engineBinaryWriter.BaseStream.Position = 7L; engineBinaryWriter.Write(blockCount); engineBinaryWriter.Dispose(); fileStream.Dispose(); }
public static void WriteModelData(Stream stream, ModelData modelData, Matrix transform) { EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream); engineBinaryWriter.Write(modelData.Bones.Count); foreach (ModelBoneData bone in modelData.Bones) { engineBinaryWriter.Write(bone.ParentBoneIndex); engineBinaryWriter.Write(bone.Name); engineBinaryWriter.Write((bone.ParentBoneIndex < 0) ? (bone.Transform * transform) : bone.Transform); } engineBinaryWriter.Write(modelData.Meshes.Count); foreach (ModelMeshData mesh in modelData.Meshes) { engineBinaryWriter.Write(mesh.ParentBoneIndex); engineBinaryWriter.Write(mesh.Name); engineBinaryWriter.Write(mesh.MeshParts.Count); engineBinaryWriter.Write(mesh.BoundingBox); foreach (ModelMeshPartData meshPart in mesh.MeshParts) { engineBinaryWriter.Write(meshPart.BuffersDataIndex); engineBinaryWriter.Write(meshPart.StartIndex); engineBinaryWriter.Write(meshPart.IndicesCount); engineBinaryWriter.Write(meshPart.BoundingBox); } } engineBinaryWriter.Write(modelData.Buffers.Count); foreach (ModelBuffersData buffer in modelData.Buffers) { engineBinaryWriter.Write(buffer.VertexDeclaration.VertexElements.Count); foreach (VertexElement vertexElement in buffer.VertexDeclaration.VertexElements) { engineBinaryWriter.Write(vertexElement.Offset); engineBinaryWriter.Write((int)vertexElement.Format); engineBinaryWriter.Write(vertexElement.Semantic); } engineBinaryWriter.Write(buffer.Vertices.Length); engineBinaryWriter.Write(buffer.Vertices); engineBinaryWriter.Write(buffer.Indices.Length); engineBinaryWriter.Write(buffer.Indices); } }