public static Vector3 GetEulerFromQuaternion(Quaternion q, Vector3 refEuler)
{
Vector3[] equivalentEulerAngles = GetEquivalentEulerAngles(q);
for (int i = 0; i < equivalentEulerAngles.Length; i++)
{
equivalentEulerAngles[i] = new Vector3((Mathf.Repeat((equivalentEulerAngles[i].x - refEuler.x) + 180f, 360f) + refEuler.x) - 180f, (Mathf.Repeat((equivalentEulerAngles[i].y - refEuler.y) + 180f, 360f) + refEuler.y) - 180f, (Mathf.Repeat((equivalentEulerAngles[i].z - refEuler.z) + 180f, 360f) + refEuler.z) - 180f);
float num2 = Mathf.Repeat(equivalentEulerAngles[i].x, 360f);
if (Mathf.Abs((float) (num2 - 90f)) < 1f)
{
float num3 = equivalentEulerAngles[i].z - equivalentEulerAngles[i].y;
float num4 = refEuler.z - refEuler.y;
float num5 = num3 - num4;
equivalentEulerAngles[i].z = refEuler.z + (num5 * 0.5f);
equivalentEulerAngles[i].y = refEuler.y - (num5 * 0.5f);
}
if (Mathf.Abs((float) (num2 - 270f)) < 1f)
{
float num6 = equivalentEulerAngles[i].z + equivalentEulerAngles[i].y;
float num7 = refEuler.z + refEuler.y;
float num8 = num6 - num7;
equivalentEulerAngles[i].z = refEuler.z + (num8 * 0.5f);
equivalentEulerAngles[i].y = refEuler.y + (num8 * 0.5f);
}
}
Vector3 vector = equivalentEulerAngles[0];
Vector3 vector2 = equivalentEulerAngles[0] - refEuler;
float sqrMagnitude = vector2.sqrMagnitude;
for (int j = 1; j < equivalentEulerAngles.Length; j++)
{
Vector3 vector3 = equivalentEulerAngles[j] - refEuler;
float num11 = vector3.sqrMagnitude;
if (num11 < sqrMagnitude)
{
sqrMagnitude = num11;
vector = equivalentEulerAngles[j];
}
}
return vector;
}