BITKit/Packages/Runtime~/Core/Binary/UnityMathematicsSupport.cs

100 lines
2.9 KiB
C#

using System.IO;
using Unity.Mathematics;
namespace BITKit
{
public static class UnityMathematicsSupportExtensions
{
#region float3
public static float3 ReadFloat3(this BinaryReader reader)
{
return new float3()
{
x = reader.ReadSingle(),
y = reader.ReadSingle(),
z = reader.ReadSingle(),
};
}
public static void WriteFloat3(this BinaryWriter writer, float3 value)
{
value.x = MathB.Fix(value.x);
value.y = MathB.Fix(value.y);
value.z = MathB.Fix(value.z);
writer.Write(value.x);
writer.Write(value.y);
writer.Write(value.z);
}
#endregion
#region float4
public static float4 ReadFloat4(this BinaryReader reader)
{
return new float4()
{
x = reader.ReadSingle(),
y = reader.ReadSingle(),
z = reader.ReadSingle(),
w = reader.ReadSingle(),
};
}
public static void WriteFloat4(this BinaryWriter writer, float4 value)
{
value.x = MathB.Fix(value.x);
value.y = MathB.Fix(value.y);
value.z = MathB.Fix(value.z);
value.w = MathB.Fix(value.z);
writer.Write(value.x);
writer.Write(value.y);
writer.Write(value.z);
writer.Write(value.w);
}
#endregion
#region quaternion
public static quaternion ReadQuaternion(this BinaryReader reader)
{
return new(reader.ReadFloat4());
}
public static void WriteQuaternion(this BinaryWriter writer, quaternion value)
{
writer.WriteFloat4(value.value);
}
#endregion
}
public class UnityMathematicsSupport_float3 : NetMessageReader<float3>
{
public override float3 ReadBinary(BinaryReader reader)
{
return reader.ReadFloat3();
}
public override void WriteBinary(BinaryWriter writer, float3 value)
{
writer.WriteFloat3(value);
}
}
public class UnityMathematicsSupport_float4 : NetMessageReader<float4>
{
public override float4 ReadBinary(BinaryReader reader)
{
return reader.ReadFloat4();
}
public override void WriteBinary(BinaryWriter writer, float4 value)
{
writer.WriteFloat4(value);
}
}
public class UnityMathematicsSupport_quaternion : NetMessageReader<quaternion>
{
public override quaternion ReadBinary(BinaryReader reader)
{
return reader.ReadFloat4();
}
public override void WriteBinary(BinaryWriter writer, quaternion value)
{
writer.WriteQuaternion(value);
}
}
}