Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. //===========================================================================
  2. //
  3. // AlignToPlane
  4. // Original code written by ZZYZX
  5. //
  6. //===========================================================================
  7.  
  8. static void AlignToPlane(Actor a = null, double pitchAdjust = 0, bool ceiling = false, double adjustSpeed = 1.0)
  9. {
  10. if (!a) return;
  11. double ceilingAdjust = 0;
  12. Vector3 fnormal;
  13. if (!ceiling)
  14. {
  15. fnormal = a.CurSector.FloorPlane.Normal;
  16. }
  17. else
  18. {
  19. fnormal = a.CurSector.CeilingPlane.Normal;
  20. ceilingAdjust = 180.0;
  21. }
  22. Vector2 fnormalp1 = (fnormal.x != 0 || fnormal.y != 0) ? (fnormal.x, fnormal.y).Unit() : (0, 0);
  23. Vector2 fnormalp2 = ((fnormal.x, fnormal.y).Length(), fnormal.z);
  24. double dang = a.Angle;
  25. double fang = atan2(fnormalp1.y, fnormalp1.x);
  26. double fpitch = atan2(fnormalp2.x, fnormalp2.y);
  27. double ddiff1 = sin(fang - (dang - pitchAdjust));
  28. double ddiff2 = cos(fang - dang);
  29.  
  30. double pitchTarget = (fpitch * ddiff2 - pitchAdjust) + ceilingAdjust;
  31. double rollTarget = -fpitch * ddiff1 + ceilingAdjust;
  32. double angleTarget = dang + ceilingAdjust;
  33.  
  34. if(a.Pitch < pitchTarget)
  35. {
  36. a.Pitch += adjustSpeed;
  37. if(a.Pitch > pitchTarget)
  38. {
  39. a.Pitch = pitchTarget;
  40. }
  41. }
  42. else if(a.Pitch > pitchTarget)
  43. {
  44. a.Pitch -= adjustSpeed;
  45. if(a.Pitch < pitchTarget)
  46. {
  47. a.Pitch = pitchTarget;
  48. }
  49. }
  50. if(a.Roll < rollTarget)
  51. {
  52. a.Roll += adjustSpeed;
  53. if(a.Roll > rollTarget)
  54. {
  55. a.Roll = rollTarget;
  56. }
  57. }
  58. else if(a.Roll > rollTarget)
  59. {
  60. a.Roll -= adjustSpeed;
  61. if(a.Roll < rollTarget)
  62. {
  63. a.Roll = rollTarget;
  64. }
  65. }
  66. if(a.Angle < angleTarget)
  67. {
  68. a.Angle += adjustSpeed;
  69. if(a.Angle > angleTarget)
  70. {
  71. a.Angle = angleTarget;
  72. }
  73. }
  74. else if(a.Angle > angleTarget)
  75. {
  76. a.Angle -= adjustSpeed;
  77. if(a.Angle < angleTarget)
  78. {
  79. a.Angle = angleTarget;
  80. }
  81. }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement