public static float GetRotationAngle(LTRotation rotation) { var angle = (float)Math.Acos(rotation.W) * 2; float fSinAngle = (float)Math.Sin(angle * 0.5); var axisY = rotation.Y / fSinAngle; if (axisY > 0) { angle *= -1; } return(Rad2Deg(angle) + 90); }
public LTRotation GetPlayerRotation(int index) { LTRotation result = null; IntPtr PlayerObjectPtrAddress = GetPlayerObjectPtrAddress(index); IntPtr PlayerObjectPtr = IntPtr.Add(IntPtr.Zero, BitConverter.ToInt32(ReadMem(PlayerObjectPtrAddress), 0)); if (PlayerObjectPtr != IntPtr.Zero) { result = new LTRotation { X = BitConverter.ToSingle(ReadMem(IntPtr.Add(PlayerObjectPtr, 0xF4)), 0), Y = BitConverter.ToSingle(ReadMem(IntPtr.Add(PlayerObjectPtr, 0xF8)), 0), Z = BitConverter.ToSingle(ReadMem(IntPtr.Add(PlayerObjectPtr, 0xFC)), 0), W = BitConverter.ToSingle(ReadMem(IntPtr.Add(PlayerObjectPtr, 0x100)), 0), }; } return(result); }