RAYREND.H
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:5k
源码类别:

游戏

开发平台:

Visual C++

  1. #include "ray.h"
  2. #include "fixed.h"
  3. #include "rayrt.h"
  4. #include "slopes.h"
  5. #include "globals.h"
  6. #include "abs.h"
  7. #include <stddef.h>
  8. #include "verttan.h"
  9. #define MIN_SLOPE_DIFF 5000
  10. #define MAX_WALL_RUNS 8000
  11. #define MAX_FLOOR_RUNS 4000
  12. extern "C" MYFIXED
  13. Win_Top_Sum, Win_Height_Sum,
  14. Win_Top_Increment, Win_Height_Increment;
  15. extern "C" long cur_angle_diff, intercept;
  16. extern "C" long render_x, render_y, render_z, render_view_angle;
  17. extern "C" MYFIXED vec_int_x, vec_int_y;
  18. extern "C" short WINDOW_LEFT, WINDOW_RIGHT;
  19. extern "C" long rotate_x, rotate_y, rotate_angle;
  20. extern "C" long int_x_diff;
  21. extern "C" long ray_slope;
  22. extern "C" long int_y_diff;
  23. extern "C" floor_run_info * floor_runs;
  24. extern "C" long floor_run_count;
  25. extern "C" wall_run_info * wall_runs;
  26. extern "C" long wall_run_count;
  27. inline short Get_Wall_Texture_Height(ptexture index) {
  28.    return wall[index].height;
  29. }
  30. inline short Get_Floor_Texture_Height(ptexture index) {
  31.    return floortex[index].height;
  32. }
  33. inline short Get_Sprite_Texture_Height(ptexture index) {
  34.    return wall[index].height;
  35. }
  36. inline short Get_Wall_Texture_Width(ptexture index) {
  37.    return wall[index].width;
  38. }
  39. inline short Get_Floor_Texture_Width(ptexture index) {
  40.    return floortex[index].width;
  41. }
  42. inline short Get_Sprite_Texture_Width(ptexture index) {
  43.    return wall[index].width;
  44. }
  45. inline Byte Get_Wall_Texture_Shift(ptexture index) {
  46.    return wall[index].shift;
  47. }
  48. inline Byte Get_Floor_Texture_Shift(ptexture index) {
  49.    return floortex[index].shift;
  50. }
  51. inline Byte Get_Sprite_Texture_Shift(ptexture index) {
  52.    return wall[index].shift;
  53. }
  54. inline Byte * Get_Wall_Texture(ptexture index) {
  55.    return wall[index].images[wall[index].cur_image];
  56. }
  57. inline Byte * Get_Sprite_Texture(ptexture index, short cur_anim) {
  58.    return wall[index].images[cur_anim];
  59. }
  60. inline Byte * Get_Floor_Texture(ptexture index) {
  61.    return floortex[index].images[floortex[index].cur_image];
  62. }
  63. inline Byte SecLight(sector * sec)
  64. {
  65. return (UCHAR)(sec->light & (UCHAR)SEC_LIGHT_MASK);
  66. }
  67. inline Byte SecLTSpeed(sector * sec)
  68. {
  69. return (UCHAR)((sec->light & (UCHAR)SEC_LTSPEED_MASK) >> (UCHAR)SEC_LTSPEED_SHIFT);
  70. }
  71. inline MYFIXED RotateX() {
  72.    return (rotate_x*rcos_table[rotate_angle]+rotate_y*rsin_table[rotate_angle]);
  73. }
  74. inline MYFIXED FixedRotateX() {
  75.    return (fixedmult(rotate_x,rcos_table[rotate_angle])+
  76.         fixedmult(rotate_y,rsin_table[rotate_angle]));
  77. }
  78. inline MYFIXED RotateY() {
  79.    return (rotate_y*rcos_table[rotate_angle]-rotate_x*rsin_table[rotate_angle]);
  80. }
  81. inline MYFIXED FixedRotateY() {
  82.    return (fixedmult(rotate_y,rcos_table[rotate_angle])-
  83.         fixedmult(rotate_x,rsin_table[rotate_angle]));
  84. }
  85. inline short Project(MYFIXED x, MYFIXED y) {
  86.    return (fixedmd(-x, SCALE_FACTOR, y) )+WINDOW_MIDDLEW;
  87. }
  88. inline sector * GetOppSec(seg * cur_seg)
  89. {
  90. sidedef * cur_sd=cur_seg->ld->s[!(short)cur_seg->left_sidedef];
  91. if (cur_sd != NULL) {
  92.    return cur_sd->sec;
  93. } else {
  94.    return NULL;
  95. }
  96. }
  97. inline MYFIXED GetCeilScVal(sector * sec, long distance)
  98. {
  99. if (distance<0)
  100.    return MAXMYFIXED;
  101. if (distance>=(MAXDIS<<SHIFT))
  102.    return (WINDOW_MIDDLE<<SHIFT);
  103. return fixedmult((((render_z-sec->ceil_height)<<SHIFT)+
  104.         fixedmult(distance, vert_angle_tangent)),fixeddiv(y_trans, distance))+
  105.         (WINDOW_MIDDLE << SHIFT);
  106. }
  107. inline MYFIXED GetFloorScVal(sector * sec, long distance)
  108. {
  109. if (distance<0)
  110.    return MAXMYFIXED;
  111. if (distance>=(MAXDIS<<SHIFT))
  112.    return (WINDOW_MIDDLE<<SHIFT);
  113. return fixedmult((((render_z-sec->floor_height)<<SHIFT)+
  114.         fixedmult(distance, vert_angle_tangent)),fixeddiv(y_trans, distance))+
  115.         (WINDOW_MIDDLE << SHIFT);
  116. }
  117. inline MYFIXED GetZScVal(long z, long distance)
  118. {
  119. if (distance<0)
  120.    return MAXMYFIXED;
  121. if (distance>=(MAXDIS<<SHIFT))
  122.    return (WINDOW_MIDDLE<<SHIFT);
  123. return fixedmult((((render_z-z)<<SHIFT)+
  124.         fixedmult(distance, vert_angle_tangent)),fixeddiv(y_trans, distance))+
  125.         (WINDOW_MIDDLE << SHIFT);
  126. }
  127. inline void Setup_Intersection(pvector2 base_v, pvector2 dest_v)
  128. {
  129.    long x_diff, y_diff;
  130.    x_diff=dest_v->x-base_v->x;
  131.    int_x_diff=x_diff;
  132.    y_diff=dest_v->y-base_v->y;
  133.    fixedmult64(y_diff, base_v->x);
  134.    fixedma64(-x_diff, base_v->y);
  135.    int_y_diff=y_diff;
  136. }
  137. inline long Get_Intersection_Y(short ray)
  138. {
  139. ray_slope=Get_Slope(ray);
  140. MYFIXED ray_x_diff=fixedmult(ray_slope,int_y_diff);
  141.    if (ABS(ray_x_diff-int_x_diff)>MIN_SLOPE_DIFF)
  142.       vec_int_y=fixeddiv64(ray_x_diff - int_x_diff);
  143.    else vec_int_y=MAXDIS;
  144. return vec_int_y;
  145. }
  146. inline long Get_Intersection_X()
  147. {
  148.    vec_int_x=fixedmult(vec_int_y, ray_slope);
  149.    return vec_int_x;
  150. }
  151. inline sector * GetSecFromSSec(ssector * cur_ss)
  152. {
  153.    seg * cur_seg=Seg_List+cur_ss->seg_start;
  154.    return (cur_seg->ld->s[(short)cur_seg->left_sidedef]->sec);
  155. }
  156. inline sector * GetSecFromSeg(seg * cur_seg)
  157. {
  158.    return (cur_seg->ld->s[(short)cur_seg->left_sidedef]->sec);
  159. }
  160. void BSP_Recursion_Draw();
  161. void Draw_Sub_Sector(pssector cur_ss);
  162. void Draw_Sub_Sector_Setup();
  163. void Draw_Sub_Sector_Close();
  164. void Translate_Vectors();
  165. void Ray_Caster(long x, long y, long z, long view_angle);
  166. void Render_2d(long x, long y, long view_angle);
  167. void Draw_SS_Sprites(pssector cur_ss);