public void SaveRawToFile(string outputFilePath, Meta.Meta meta)
{
int x = outputFilePath.LastIndexOf('.');
string temp = outputFilePath.Substring(0, x + 1) + meta.type + "raw";
if (meta.type == "snd!" &&
(meta.Map.HaloVersion == HaloVersionEnum.Halo2 ||
meta.Map.HaloVersion == HaloVersionEnum.Halo2Vista))
{
Stream s = File.Open(temp + "layout", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
Sound temps = (Sound)meta.raw;
b.Serialize(s, temps.Permutations);
s.Flush();
s.Close();
}
XmlTextWriter xtw = new XmlTextWriter(temp + ".xml", Encoding.Default);
xtw.Formatting = Formatting.Indented;
xtw.WriteStartElement("RawData");
xtw.WriteAttributeString("TagType", meta.type);
xtw.WriteAttributeString("TagName", meta.name);
xtw.WriteAttributeString("RawType", meta.raw.containerType.ToString());
xtw.WriteAttributeString("RawChunkCount", this.rawChunks.Count.ToString());
xtw.WriteAttributeString("Date", DateTime.Today.ToShortDateString());
xtw.WriteAttributeString("Time", DateTime.Now.ToShortTimeString());
xtw.WriteAttributeString("EntityVersion", "0.1");
BinaryWriter BW = new BinaryWriter(new FileStream(temp, FileMode.Create));
int loc = 0;
for (x = 0; x < this.rawChunks.Count; x++)
{
RawDataChunk r = this.rawChunks[x];
if (r.offset == -1)
{
continue;
}
xtw.WriteStartElement("RawChunk");
xtw.WriteAttributeString("RawDataType", r.rawDataType.ToString());
xtw.WriteAttributeString("PointerMetaOffset", r.pointerMetaOffset.ToString());
xtw.WriteAttributeString("ChunkSize", r.size.ToString());
xtw.WriteAttributeString("RawDataOffset", loc.ToString());
xtw.WriteAttributeString("PointsToOffset", r.offset.ToString());
xtw.WriteAttributeString("RawLocation", r.rawLocation.ToString());
xtw.WriteEndElement();
BW.BaseStream.Write(r.MS.ToArray(), 0, r.size);
loc += r.size;
}
BW.Flush();
BW.Close();
xtw.WriteEndElement();
xtw.Flush();
xtw.Close();
}