Пример #1
0
        public byte[] Write(ScenarioFile file)
        {
            var scenarioData = new List<byte>();

            scenarioData.AddRange(Encoding.ASCII.GetBytes("SCENARIO\r\n"));
            scenarioData.AddRange(BitConverter.GetBytes(Version));
            scenarioData.AddRange(BitConverter.GetBytes(file.ContentFiles.Count));

            file.ContentFiles[0] = CreateAreaSubFile(file.ZoneData);

            var ndfBinWriter = new NdfbinWriter();
            file.ContentFiles[1] = ndfBinWriter.Write(file.NdfBinary, false);

            foreach (var contentFile in file.ContentFiles)
            {
                scenarioData.AddRange(BitConverter.GetBytes(contentFile.Length));
                scenarioData.AddRange(contentFile);
            }

            byte[] hash = MD5.Create().ComputeHash(scenarioData.ToArray());

            scenarioData.InsertRange(10, hash.Concat(new byte[] { 0x00, 0x00 }));

            return scenarioData.ToArray();
        }
Пример #2
0
        public ZoneEditorData(ScenarioFile sf, NdfEditorMainViewModel model,string path)
        {
            scenarioFile = sf;
            editor = new Editor(this, path);

            data = new NdfEditorMainViewModel(sf.NdfBinary);
            foreach(var area in sf.ZoneData.AreaManagers[1]){
                //var nodes=Geometry.getOutline(area.Content);
                //var zone = new Outline(nodes);
                //zoneOutlines.Add(zone);
                zoneNumber++;
                var zone = new Zone(editor, area);
                scenarioItems.Add(zone);
                zones.Add(zone);
                editor.addScenarioItem(zone);
                Console.WriteLine("name:");
                Console.WriteLine(area.Name);
                Console.WriteLine("en name");
                /*Console.WriteLine("zone\n");
                foreach (var c in area.Content.ClippedAreas)
                {
                    Console.Write("vertices=[");
            var scen = area.Content;
            foreach (var v in scen.Vertices.GetRange(c.StartVertex,c.VertexCount))
            {
                Console.WriteLine("{0:G},{1:G},{2:G};", (int)v.X, (int)v.Y, (int)v.Center);
            }
            Console.WriteLine("]");

            Console.Write("tri=[");
            foreach (var v in scen.Triangles.GetRange(c.StartTriangle,c.TriangleCount))
            {
                Console.WriteLine("{0},{1},{2};", (int)v.Point1, (int)v.Point2, (int)v.Point3);
            }
            Console.WriteLine("]");
                }*/

            }

            doZoneProperties();
            Application.EnableVisualStyles();
            Application.Run(editor);
            //Application.SetCompatibleTextRenderingDefault(false);
        }
Пример #3
0
        public ScenarioFile Read(Stream s)
        {
            var f = new ScenarioFile();

            var buffer = new byte[10];
            s.Read(buffer, 0, buffer.Length);

            if (!Utils.ByteArrayCompare(Encoding.ASCII.GetBytes("SCENARIO\r\n"), buffer))
                throw new InvalidDataException("Wrong scenario header magic!");

            buffer = new byte[16];
            s.Read(buffer, 0, buffer.Length);
            f.Checksum = buffer;

            s.Seek(2, SeekOrigin.Current);

            buffer = new byte[4];
            s.Read(buffer, 0, buffer.Length);
            f.Version = BitConverter.ToInt32(buffer, 0);

            s.Read(buffer, 0, buffer.Length);
            int subFilesCount = BitConverter.ToInt32(buffer, 0);

            for (int i = 0; i < subFilesCount; i++)
            {
                s.Read(buffer, 0, buffer.Length);
                var contentFileBuffer = new byte[BitConverter.ToUInt32(buffer, 0)];
                s.Read(contentFileBuffer, 0, contentFileBuffer.Length);
                f.ContentFiles.Add(contentFileBuffer);
            }

            var reader = new NdfbinReader();
            f.NdfBinary = reader.Read(f.ContentFiles[1]);

            f.ZoneData = ReadZoneData(f.ContentFiles[0]);

            return f;
        }