Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/LIV/SDK/Unity/Extensions.cs
2026-02-21 16:45:37 +08:00

36 lines
1.1 KiB
C#

using UnityEngine;
namespace LIV.SDK.Unity
{
public static class Extensions
{
private static float _copysign(float sizeval, float signval)
{
return ((int)Mathf.Sign(signval) != 1) ? (0f - Mathf.Abs(sizeval)) : Mathf.Abs(sizeval);
}
public static Quaternion GetRotation(this Matrix4x4 matrix)
{
Quaternion result = new Quaternion
{
w = Mathf.Sqrt(Mathf.Max(0f, 1f + matrix.m00 + matrix.m11 + matrix.m22)) / 2f,
x = Mathf.Sqrt(Mathf.Max(0f, 1f + matrix.m00 - matrix.m11 - matrix.m22)) / 2f,
y = Mathf.Sqrt(Mathf.Max(0f, 1f - matrix.m00 + matrix.m11 - matrix.m22)) / 2f,
z = Mathf.Sqrt(Mathf.Max(0f, 1f - matrix.m00 - matrix.m11 + matrix.m22)) / 2f
};
result.x = _copysign(result.x, matrix.m21 - matrix.m12);
result.y = _copysign(result.y, matrix.m02 - matrix.m20);
result.z = _copysign(result.z, matrix.m10 - matrix.m01);
return result;
}
public static Vector3 GetPosition(this Matrix4x4 matrix)
{
float m = matrix.m03;
float m2 = matrix.m13;
float m3 = matrix.m23;
return new Vector3(m, m2, m3);
}
}
}