diff --git a/KeepersCompound.LGS/Extensions.cs b/KeepersCompound.LGS/Extensions.cs index 078e5a9..9d30ca7 100644 --- a/KeepersCompound.LGS/Extensions.cs +++ b/KeepersCompound.LGS/Extensions.cs @@ -1,4 +1,3 @@ -using System.IO; using System.Numerics; using System.Text; @@ -12,16 +11,37 @@ public static class Extensions return raw * 360 / (ushort.MaxValue + 1); } + public static void WriteRotation(this BinaryWriter writer, Vector3 rotation) + { + var raw = rotation * (ushort.MaxValue + 1) / 360; + writer.Write((ushort)raw.X); + writer.Write((ushort)raw.Y); + writer.Write((ushort)raw.Z); + } + public static Vector3 ReadVec3(this BinaryReader reader) { return new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } + public static void WriteVec3(this BinaryWriter writer, Vector3 vec) + { + writer.Write(vec.X); + writer.Write(vec.Y); + writer.Write(vec.Z); + } + public static Vector2 ReadVec2(this BinaryReader reader) { return new Vector2(reader.ReadSingle(), reader.ReadSingle()); } + public static void WriteVec2(this BinaryWriter writer, Vector2 vec) + { + writer.Write(vec.X); + writer.Write(vec.Y); + } + public static string ReadNullString(this BinaryReader reader, int length) { var tmpName = Encoding.UTF8.GetString(reader.ReadBytes(length)); @@ -29,4 +49,12 @@ public static class Extensions if (idx >= 0) tmpName = tmpName[..idx]; return tmpName; } + + public static void WriteNullString(this BinaryWriter writer, string nullString, int length) + { + var writeBytes = new byte[length]; + var stringBytes = Encoding.UTF8.GetBytes(nullString); + stringBytes[..Math.Min(length, stringBytes.Length)].CopyTo(writeBytes, 0); + writer.Write(writeBytes); + } }