Guest User

Untitled

a guest
Jan 28th, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  1.   hyp = (viewx==curline->v1->x && viewy==curline->v1->y)?
  2.     0 : R_PointToDist (curline->v1->x, curline->v1->y);
  3.  
  4.   // if wall is horizontal or vertical, finding the distance to it is trivial
  5.   if (curline->v1->y == curline->v2->y)
  6.     rw_distance = D_abs(viewy - curline->v1->y);
  7.   else if (curline->v1->x == curline->v2->x)
  8.     rw_distance = D_abs(viewx - curline->v1->x);
  9.   else
  10.   {
  11.     fixed_t sineval = finecosine[offsetangle >> ANGLETOFINESHIFT];
  12.     // use old code for short walls and for walls that arent too oblique
  13.     if (hyp < 1024 << FRACBITS && sineval > 2000)
  14.     {
  15.       rw_distance = FixedMul(hyp, sineval);
  16.     }
  17.     else
  18.     {
  19.       int_64_t a, c;
  20.       fixed_t dx, dy;
  21.       fixed_t rwd_x_offset, rwd_y_offset;
  22.       fixed_t recentered_v1x, recentered_v1y, recentered_v2x, recentered_v2y;
  23.       const int bb = 11;
  24.  
  25.       recentered_v1x = (curline->v1->x - viewx) >> bb;
  26.       recentered_v1y = (curline->v1->y - viewy) >> bb;
  27.       recentered_v2x = (curline->v2->x - viewx) >> bb;
  28.       recentered_v2y = (curline->v2->y - viewy) >> bb;
  29.  
  30.       dx = recentered_v2x - recentered_v1x;
  31.       dy = recentered_v2y - recentered_v1y;
  32.  
  33.       a = (int_64_t)recentered_v1x * recentered_v2y - (int_64_t)recentered_v1y * recentered_v2x;
  34.       c = (int_64_t)dx * dx + (int_64_t)dy * dy;
  35.       if (!c)
  36.         c = 1; // just in case
  37.  
  38.       rwd_x_offset = ((fixed_t)(a * (-dy) / c)) << bb;
  39.       rwd_y_offset = ((fixed_t)(a * ( dx) / c)) << bb;
  40.  
  41.       if (!rwd_x_offset && !rwd_y_offset)
  42.         rw_distance = 0;
  43.       else
  44.         rw_distance = R_PointToDist(viewx + rwd_x_offset, viewy + rwd_y_offset);
  45.     }
  46.   }
Advertisement
Add Comment
Please, Sign In to add comment