BinaryExtensions.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System.IO;
  2. using UnityEngine;
  3. namespace MeidoPhotoStudio.Plugin;
  4. public static class BinaryExtensions
  5. {
  6. public static string ReadNullableString(this BinaryReader binaryReader) =>
  7. binaryReader.ReadBoolean()
  8. ? binaryReader.ReadString()
  9. : null;
  10. public static void WriteNullableString(this BinaryWriter binaryWriter, string str)
  11. {
  12. binaryWriter.Write(str is not null);
  13. if (str is not null)
  14. binaryWriter.Write(str);
  15. }
  16. public static void Write(this BinaryWriter binaryWriter, Vector3 vector3)
  17. {
  18. binaryWriter.Write(vector3.x);
  19. binaryWriter.Write(vector3.y);
  20. binaryWriter.Write(vector3.z);
  21. }
  22. public static void WriteVector3(this BinaryWriter binaryWriter, Vector3 vector3)
  23. {
  24. binaryWriter.Write(vector3.x);
  25. binaryWriter.Write(vector3.y);
  26. binaryWriter.Write(vector3.z);
  27. }
  28. public static Vector2 ReadVector2(this BinaryReader binaryReader) =>
  29. new(binaryReader.ReadSingle(), binaryReader.ReadSingle());
  30. public static Vector3 ReadVector3(this BinaryReader binaryReader) =>
  31. new(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
  32. public static Vector4 ReadVector4(this BinaryReader binaryReader) =>
  33. new(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
  34. public static void Write(this BinaryWriter binaryWriter, Quaternion quaternion)
  35. {
  36. binaryWriter.Write(quaternion.x);
  37. binaryWriter.Write(quaternion.y);
  38. binaryWriter.Write(quaternion.z);
  39. binaryWriter.Write(quaternion.w);
  40. }
  41. public static void WriteQuaternion(this BinaryWriter binaryWriter, Quaternion quaternion)
  42. {
  43. binaryWriter.Write(quaternion.x);
  44. binaryWriter.Write(quaternion.y);
  45. binaryWriter.Write(quaternion.z);
  46. binaryWriter.Write(quaternion.w);
  47. }
  48. public static Quaternion ReadQuaternion(this BinaryReader binaryReader) =>
  49. new(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
  50. public static void Write(this BinaryWriter binaryWriter, Color colour)
  51. {
  52. binaryWriter.Write(colour.r);
  53. binaryWriter.Write(colour.g);
  54. binaryWriter.Write(colour.b);
  55. binaryWriter.Write(colour.a);
  56. }
  57. public static void WriteColour(this BinaryWriter binaryWriter, Color colour)
  58. {
  59. binaryWriter.Write(colour.r);
  60. binaryWriter.Write(colour.g);
  61. binaryWriter.Write(colour.b);
  62. binaryWriter.Write(colour.a);
  63. }
  64. public static Color ReadColour(this BinaryReader binaryReader) =>
  65. new(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
  66. public static Matrix4x4 ReadMatrix4x4(this BinaryReader binaryReader)
  67. {
  68. Matrix4x4 matrix = default;
  69. for (var i = 0; i < 16; i++)
  70. matrix[i] = binaryReader.ReadSingle();
  71. return matrix;
  72. }
  73. }