/// <summary>
        /// 创建一键生成文件
        /// </summary>
        /// <param name="creatorAPI"></param>
        /// <param name="directory"></param>
        /// <param name="path"></param>
        /// <param name="Start"></param>
        /// <param name="End"></param>
        /// <param name="position"></param>
        public static void CreateOnekey(CreatorAPI creatorAPI, string directory, string path, Point3 Start, Point3 End, Point3 position)
        {
            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(End.X - position.X);
            binaryWriter.Write(End.Y - position.Y);
            binaryWriter.Write(End.Z - position.Z);
            binaryWriter.Write(Start.X - position.X);
            binaryWriter.Write(Start.Y - position.Y);
            binaryWriter.Write(Start.Z - position.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);
        }
Beispiel #2
0
        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()));
        }
Beispiel #3
0
        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]);
                }
            }
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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]);
            }
        }
Beispiel #6
0
        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();
        }
        /// <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();
        }
        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);
            }
        }
Beispiel #9
0
        public static void Save(SoundData soundData, Stream stream)
        {
            if (soundData == null)
            {
                throw new ArgumentNullException("soundData");
            }
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream);
            WavHeader          structure          = default(WavHeader);

            structure.Riff     = MakeFourCC("RIFF");
            structure.FileSize = Utilities.SizeOf <WavHeader>() + Utilities.SizeOf <FmtHeader>() + Utilities.SizeOf <DataHeader>() + soundData.Data.Length;
            structure.Wave     = MakeFourCC("WAVE");
            engineBinaryWriter.WriteStruct(structure);
            FmtHeader structure2 = default(FmtHeader);

            structure2.Fmt               = MakeFourCC("fmt ");
            structure2.FormatSize        = 16;
            structure2.Type              = 1;
            structure2.ChannelsCount     = (short)soundData.ChannelsCount;
            structure2.SamplingFrequency = soundData.SamplingFrequency;
            structure2.BytesPerSecond    = soundData.ChannelsCount * 2 * soundData.SamplingFrequency;
            structure2.BytesPerSample    = (short)(soundData.ChannelsCount * 2);
            structure2.BitsPerChannel    = 16;
            engineBinaryWriter.WriteStruct(structure2);
            DataHeader structure3 = default(DataHeader);

            structure3.Data     = MakeFourCC("data");
            structure3.DataSize = soundData.Data.Length * 2;
            engineBinaryWriter.WriteStruct(structure3);
            byte[] array = new byte[soundData.Data.Length * 2];
            Buffer.BlockCopy(soundData.Data, 0, array, 0, array.Length);
            stream.Write(array, 0, array.Length);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
                }
            }
        }
Beispiel #12
0
        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();
        }