Advertisement
scroton

Untitled

Feb 25th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. function int ProjectileInterceptBruteForce(int stid, int ttid, int spd, int ptid)
  2. {
  3. int sX, sY, sZ, tX, tY, tZ, tVelX, tVelY, tVelZ;
  4. int tVelX_t, tVelY_t, tVelZ_t, tXf, tYf, tZf;
  5. int T_S_z, Z_spd_t, X_spd_t, Y_spd_t, XY_spd_t, spd_t;
  6. int t, t_inc, sml_t, n, nmax, i, imax, diff, smldiff;
  7. int check = 1, check2 = 1;
  8.  
  9. sX = GetActorX(stid);
  10. sY = GetActorY(stid);
  11. sZ = GetActorZ(stid);
  12.  
  13. tX = GetActorX(ttid);
  14. tY = GetActorY(ttid);
  15. tZ = GetActorZ(ttid);
  16.  
  17. sZ += 32.0;
  18. tZ += 36.0;
  19.  
  20. //tZ += 26.5; for comparison with Thing_ProjectileIntercept
  21.  
  22. tVelX = GetActorVelX(ttid);
  23. tVelY = GetActorVelY(ttid);
  24. tVelZ = GetActorVelZ(ttid);
  25.  
  26. if(CheckFlag(ttid,"NOGRAVITY") && CheckFlag(ttid,"FLOAT")){ tVelZ = 0; }
  27.  
  28. while(check){
  29.  
  30. t = sml_t - t_inc;
  31.  
  32. if(!i){
  33. t = 1.0;
  34. t_inc = 10.0;
  35. nmax = 50; }
  36.  
  37. else if(i == 1){
  38. if(sml_t > 500.0){ check = 0; } //stop trying to get closer if it's out of range, it's just a waste
  39. else{
  40. t_inc = 1.0;
  41. nmax = 20; }}
  42.  
  43. else if(i == 2){
  44. t_inc = 0.1;
  45. nmax = 20; }
  46.  
  47. else if(i == 3){
  48. t_inc = 0.01;
  49. nmax = 20; }
  50.  
  51. else if(i == 4){
  52. t_inc = 0.001;
  53. nmax = 20; }
  54.  
  55. else if(i == 5){
  56. t_inc = 1;
  57. nmax = 140; }
  58.  
  59. else if(i == 6){ check = 0; }
  60.  
  61. ++i;
  62. n = 0;
  63. check2 = 1;
  64.  
  65. while(check && check2){
  66.  
  67.  
  68. tVelX_t = FixedMul(t,tVelX);
  69. tVelY_t = FixedMul(t,tVelY);
  70. tVelZ_t = FixedMul(t,tVelZ);
  71. tXf = tX + tVelX_t;
  72. tYf = tY + tVelY_t;
  73. tZf = tZ + tVelZ_t;
  74.  
  75. Z_spd_t = FixedDiv((T_S_z + tVelZ_t), t);
  76. X_spd_t = FixedDiv(tXf - sx, t);
  77. Y_spd_t = FixedDiv(tYf - sy, t);
  78. XY_spd_t = VectorLength(X_spd_t, Y_spd_t);
  79. spd_t = VectorLength(XY_spd_t, Z_spd_t);
  80.  
  81. diff = abs(spd - spd_t);
  82.  
  83. if((diff < smldiff) || n == 0){
  84. smldiff = diff;
  85. sml_t = t; }
  86. ++n;
  87. t += t_inc;
  88. if(n > nmax){ check2 = 0; }}}
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. t = sml_t;
  97.  
  98. tVelX_t = FixedMul(t,tVelX);
  99. tVelY_t = FixedMul(t,tVelY);
  100. tVelZ_t = FixedMul(t,tVelZ);
  101. tXf = tX + tVelX_t;
  102. tYf = tY + tVelY_t;
  103. tZf = tZ + tVelZ_t;
  104.  
  105. log(s: "t = ", f: t);
  106.  
  107. int Z_spd = FixedDiv(tZf - sZ, t);
  108. int X_spd = FixedDiv(tXf - sX, t);
  109. int Y_spd = FixedDiv(tYf - sY, t);
  110.  
  111. Thing_ProjectileIntercept (stid, 201, 0, ttid, ptid);
  112.  
  113. SetActorPosition(ptid, sX, sY, sZ, 0);
  114. SetActorAngle(ptid,VectorAngle(tXf - sX, tYf - sY));
  115. SetActorVelocity(ptid,X_spd,Y_spd,Z_spd,0,0);
  116.  
  117. return t;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement