public static Vector3 GetEulerFromQuaternion(Quaternion q, Vector3 refEuler)
{
Vector3[] equivalentEulerAngles = QuaternionCurveTangentCalculation.GetEquivalentEulerAngles(q);
for (int index = 0; index < equivalentEulerAngles.Length; ++index)
{
equivalentEulerAngles[index] = new Vector3((float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].x - (double)refEuler.x + 180.0), 360f) + (double)refEuler.x - 180.0), (float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].y - (double)refEuler.y + 180.0), 360f) + (double)refEuler.y - 180.0), (float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].z - (double)refEuler.z + 180.0), 360f) + (double)refEuler.z - 180.0));
float num1 = Mathf.Repeat(equivalentEulerAngles[index].x, 360f);
if ((double)Mathf.Abs(num1 - 90f) < 1.0)
{
float num2 = equivalentEulerAngles[index].z - equivalentEulerAngles[index].y - (refEuler.z - refEuler.y);
equivalentEulerAngles[index].z = refEuler.z + num2 * 0.5f;
equivalentEulerAngles[index].y = refEuler.y - num2 * 0.5f;
}
if ((double)Mathf.Abs(num1 - 270f) < 1.0)
{
float num2 = equivalentEulerAngles[index].z + equivalentEulerAngles[index].y - (refEuler.z + refEuler.y);
equivalentEulerAngles[index].z = refEuler.z + num2 * 0.5f;
equivalentEulerAngles[index].y = refEuler.y + num2 * 0.5f;
}
}
Vector3 vector3 = equivalentEulerAngles[0];
float num = (equivalentEulerAngles[0] - refEuler).sqrMagnitude;
for (int index = 1; index < equivalentEulerAngles.Length; ++index)
{
float sqrMagnitude = (equivalentEulerAngles[index] - refEuler).sqrMagnitude;
if ((double)sqrMagnitude < (double)num)
{
num = sqrMagnitude;
vector3 = equivalentEulerAngles[index];
}
}
return(vector3);
}