Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function int ProjectileInterceptBruteForce(int stid, int ttid, int spd, int ptid)
- {
- int sX, sY, sZ, tX, tY, tZ, tVelX, tVelY, tVelZ;
- int tVelX_t, tVelY_t, tVelZ_t, tXf, tYf, tZf;
- int T_S_z, Z_spd_t, X_spd_t, Y_spd_t, XY_spd_t, spd_t;
- int t, t_inc, sml_t, n, nmax, i, imax, diff, smldiff;
- int check = 1, check2 = 1;
- sX = GetActorX(stid);
- sY = GetActorY(stid);
- sZ = GetActorZ(stid);
- tX = GetActorX(ttid);
- tY = GetActorY(ttid);
- tZ = GetActorZ(ttid);
- sZ += 32.0;
- tZ += 36.0;
- //tZ += 26.5; for comparison with Thing_ProjectileIntercept
- tVelX = GetActorVelX(ttid);
- tVelY = GetActorVelY(ttid);
- tVelZ = GetActorVelZ(ttid);
- if(CheckFlag(ttid,"NOGRAVITY") && CheckFlag(ttid,"FLOAT")){ tVelZ = 0; }
- while(check){
- t = sml_t - t_inc;
- if(!i){
- t = 1.0;
- t_inc = 10.0;
- nmax = 50; }
- else if(i == 1){
- if(sml_t > 500.0){ check = 0; } //stop trying to get closer if it's out of range, it's just a waste
- else{
- t_inc = 1.0;
- nmax = 20; }}
- else if(i == 2){
- t_inc = 0.1;
- nmax = 20; }
- else if(i == 3){
- t_inc = 0.01;
- nmax = 20; }
- else if(i == 4){
- t_inc = 0.001;
- nmax = 20; }
- else if(i == 5){
- t_inc = 1;
- nmax = 140; }
- else if(i == 6){ check = 0; }
- ++i;
- n = 0;
- check2 = 1;
- while(check && check2){
- tVelX_t = FixedMul(t,tVelX);
- tVelY_t = FixedMul(t,tVelY);
- tVelZ_t = FixedMul(t,tVelZ);
- tXf = tX + tVelX_t;
- tYf = tY + tVelY_t;
- tZf = tZ + tVelZ_t;
- Z_spd_t = FixedDiv((T_S_z + tVelZ_t), t);
- X_spd_t = FixedDiv(tXf - sx, t);
- Y_spd_t = FixedDiv(tYf - sy, t);
- XY_spd_t = VectorLength(X_spd_t, Y_spd_t);
- spd_t = VectorLength(XY_spd_t, Z_spd_t);
- diff = abs(spd - spd_t);
- if((diff < smldiff) || n == 0){
- smldiff = diff;
- sml_t = t; }
- ++n;
- t += t_inc;
- if(n > nmax){ check2 = 0; }}}
- t = sml_t;
- tVelX_t = FixedMul(t,tVelX);
- tVelY_t = FixedMul(t,tVelY);
- tVelZ_t = FixedMul(t,tVelZ);
- tXf = tX + tVelX_t;
- tYf = tY + tVelY_t;
- tZf = tZ + tVelZ_t;
- log(s: "t = ", f: t);
- int Z_spd = FixedDiv(tZf - sZ, t);
- int X_spd = FixedDiv(tXf - sX, t);
- int Y_spd = FixedDiv(tYf - sY, t);
- Thing_ProjectileIntercept (stid, 201, 0, ttid, ptid);
- SetActorPosition(ptid, sX, sY, sZ, 0);
- SetActorAngle(ptid,VectorAngle(tXf - sX, tYf - sY));
- SetActorVelocity(ptid,X_spd,Y_spd,Z_spd,0,0);
- return t;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement