Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. function eulerToAxis(%euler)
  2. {
  3. %euler = VectorScale(%euler,$pi / 180);
  4. %matrix = MatrixCreateFromEuler(%euler);
  5. return getWords(%matrix,3,6);
  6. }
  7.  
  8. function axisToEuler(%axis)
  9. {
  10. %angleOver2 = getWord(%axis,3) * 0.5;
  11. %angleOver2 = -%angleOver2;
  12. %sinThetaOver2 = mSin(%angleOver2);
  13. %cosThetaOver2 = mCos(%angleOver2);
  14. %q0 = %cosThetaOver2;
  15. %q1 = getWord(%axis,0) * %sinThetaOver2;
  16. %q2 = getWord(%axis,1) * %sinThetaOver2;
  17. %q3 = getWord(%axis,2) * %sinThetaOver2;
  18. %q0q0 = %q0 * %q0;
  19. %q1q2 = %q1 * %q2;
  20. %q0q3 = %q0 * %q3;
  21. %q1q3 = %q1 * %q3;
  22. %q0q2 = %q0 * %q2;
  23. %q2q2 = %q2 * %q2;
  24. %q2q3 = %q2 * %q3;
  25. %q0q1 = %q0 * %q1;
  26. %q3q3 = %q3 * %q3;
  27. %m13 = 2.0 * (%q1q3 - %q0q2);
  28. %m21 = 2.0 * (%q1q2 - %q0q3);
  29. %m22 = 2.0 * %q0q0 - 1.0 + 2.0 * %q2q2;
  30. %m23 = 2.0 * (%q2q3 + %q0q1);
  31. %m33 = 2.0 * %q0q0 - 1.0 + 2.0 * %q3q3;
  32. return mRadToDeg(mAsin(%m23)) SPC mRadToDeg(mAtan(-%m13, %m33)) SPC mRadToDeg(mAtan(-%m21, %m22));
  33. }
  34.  
  35. function relativeRotate(%player, %obj, %angle)
  36. {
  37. if(!isObject(%player) || !isObject(%obj))
  38. return;
  39.  
  40. %playerX = getWord(%player.position, 0);
  41. %playerY = getWord(%player.position, 1);
  42. %objX = getWord(%obj.position, 0);
  43. %objY = getWord(%obj.position, 1);
  44. %rads = mDegToRad(%angle);
  45. %dX = %playerX - %objX;
  46. %dY = %playerY - %objY;
  47. %rX = mCos(%rads) * %dX - mSin(%rads) * %dY + %objX;
  48. %rY = mSin(%rads) * %dX + mCos(%rads) * %dY + %objY;
  49.  
  50. %pos = %rX SPC %rY SPC getWord(%player.position, 2);
  51.  
  52. %rot = getWords(%player.getTransform(), 3, 6);
  53. %erot = axisToEuler(%rot);
  54. %erot = getWords(%erot, 0, 1) SPC (getWord(%erot, 2) + %angle);
  55.  
  56. if(getWord(%erot, 2) > 360)
  57. %erot = vectorSub(%erot, "0 0 360");
  58.  
  59. %rot = eulerToAxis(%erot);
  60.  
  61. %player.setTransform(%pos SPC %rot);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement