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(); }
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); }
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; }