diff --git a/eAmuseCore/KBinXML/EnumHelpers.cs b/eAmuseCore/KBinXML/EnumHelpers.cs index 675bc3b..239e417 100644 --- a/eAmuseCore/KBinXML/EnumHelpers.cs +++ b/eAmuseCore/KBinXML/EnumHelpers.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace eAmuseCore.KBinXML +namespace eAmuseCore.KBinXML.Helpers { static class EnumHelpers { @@ -163,9 +163,30 @@ namespace eAmuseCore.KBinXML return input.TakeD(1).First(); } - public static IEnumerable Box(this IEnumerable input) + public static void AddU8(this List list, byte data) { - return input.Select(v => (object)v); + list.Add(data); + } + + public static void AddS8(this List list, sbyte data) + { + list.Add(unchecked((byte)data)); + } + + public static void AddU32(this List list, uint data) + { + IEnumerable bytes = BitConverter.GetBytes(data); + if (BitConverter.IsLittleEndian) + bytes = bytes.Reverse(); + list.AddRange(bytes); + } + + public static void AddS32(this List list, int data) + { + IEnumerable bytes = BitConverter.GetBytes(data); + if (BitConverter.IsLittleEndian) + bytes = bytes.Reverse(); + list.AddRange(bytes); } public static IEnumerable TakeBytesAligned(ref IEnumerable input, int size = -1) diff --git a/eAmuseCore/KBinXML/KBinXML.cs b/eAmuseCore/KBinXML/KBinXML.cs index 6bef1f9..7569cf0 100644 --- a/eAmuseCore/KBinXML/KBinXML.cs +++ b/eAmuseCore/KBinXML/KBinXML.cs @@ -2,9 +2,10 @@ using System.Text; using System.Linq; using System.Xml.Linq; -using System.Reflection; using System.Collections.Generic; +using eAmuseCore.KBinXML.Helpers; + namespace eAmuseCore.KBinXML { public class KBinXML @@ -59,6 +60,19 @@ namespace eAmuseCore.KBinXML public IEnumerable Bytes { get; private set; } public Encoding BinEncoding { get; private set; } + public KBinXML(XDocument doc, Encoding encoding, bool compress = true) + { + Document = doc; + compressed = compress; + BinEncoding = encoding; + + Generate(); + } + + public KBinXML(XDocument doc, bool compress = true) + :this(doc, Encoding.GetEncoding(932), compress) + { } + public KBinXML(IEnumerable input) { Bytes = input; @@ -66,25 +80,19 @@ namespace eAmuseCore.KBinXML Parse(); } - public KBinXML(XDocument doc, Encoding encoding, bool compress = true) - { - Document = doc; - compressed = compress; - BinEncoding = encoding; - } - - public KBinXML(XDocument doc, bool compress = true) - { - Document = doc; - compressed = compress; - BinEncoding = Encoding.GetEncoding(932); - } - public override string ToString() { return Document.ToString(); } + private void Generate() + { + List header = new List(8); + } + + private List nodeList = null, dataList = null; + private int dataByteOffset = 0, dataWordOffset = 0; + private void Parse() { IEnumerable input = Bytes; diff --git a/eAmuseCore/KBinXML/SixBit.cs b/eAmuseCore/KBinXML/SixBit.cs index b09595d..ad3a89c 100644 --- a/eAmuseCore/KBinXML/SixBit.cs +++ b/eAmuseCore/KBinXML/SixBit.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; -using System.Collections; using System.Numerics; -using System.Text; using System.Linq; using System; +using eAmuseCore.KBinXML.Helpers; + namespace eAmuseCore.KBinXML { static class SixBit diff --git a/eAmuseCore/KBinXML/TypeHelpers.cs b/eAmuseCore/KBinXML/TypeHelpers.cs index 7655904..50a7c1f 100644 --- a/eAmuseCore/KBinXML/TypeHelpers.cs +++ b/eAmuseCore/KBinXML/TypeHelpers.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; -namespace eAmuseCore.KBinXML +namespace eAmuseCore.KBinXML.Helpers { public interface IKValue { diff --git a/eAmuseCore/KBinXML/XmlTypes.cs b/eAmuseCore/KBinXML/XmlTypes.cs index ec0acd3..ee0c538 100644 --- a/eAmuseCore/KBinXML/XmlTypes.cs +++ b/eAmuseCore/KBinXML/XmlTypes.cs @@ -4,9 +4,10 @@ using System.Collections.Generic; using System.Reflection; using System.Net; using System.Text; -using System.Collections; using System.Globalization; +using eAmuseCore.KBinXML.Helpers; + namespace eAmuseCore.KBinXML.XmlTypes { #pragma warning disable IDE0060 // Remove unused parameter