1 float fsnap(float val,float fsize)
\r
3 return rint(val / fsize) * fsize;
\r
6 vector vsnap(vector point,float fsize)
\r
10 vret_x = rint(point_x / fsize) * fsize;
\r
11 vret_y = rint(point_y / fsize) * fsize;
\r
12 vret_z = ceil(point_z / fsize) * fsize;
\r
17 float location_isok(vector point, float water_isok, float air_isok)
\r
21 if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
\r
24 pc = pointcontents(point);
\r
25 pc2 = pointcontents(point - '0 0 1');
\r
42 if (pc2 == CONTENT_SOLID)
\r
45 if (pc2 == CONTENT_EMPTY)
\r
49 if (pc2 == CONTENT_WATER)
\r
65 entity pathlib_nodeatpoint(vector where)
\r
69 ++pathlib_searched_cnt;
\r
71 where_x = fsnap(where_x,pathlib_gridsize);
\r
72 where_y = fsnap(where_y,pathlib_gridsize);
\r
74 node = findradius(where,pathlib_gridsize * 0.5);
\r
77 if(node.is_path_node == TRUE)
\r
86 float tile_check_cross(vector where)
\r
90 f = PLIB_FORWARD * tile_check_size;
\r
91 r = PLIB_RIGHT * tile_check_size;
\r
95 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
96 if not (location_isok(trace_endpos,1,0))
\r
101 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
102 if not (location_isok(trace_endpos,1,0))
\r
107 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
108 if not (location_isok(trace_endpos,1,0))
\r
113 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
114 if not (location_isok(trace_endpos,1,0))
\r
120 float tile_check_plus(vector where)
\r
124 f = PLIB_FORWARD * tile_check_size;
\r
125 r = PLIB_RIGHT * tile_check_size;
\r
129 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
130 if not (location_isok(trace_endpos,1,0))
\r
135 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
136 if not (location_isok(trace_endpos,1,0))
\r
142 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
143 if not (location_isok(trace_endpos,1,0))
\r
148 traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
\r
149 if not (location_isok(trace_endpos,1,0))
\r
155 float tile_check_star(vector where)
\r
157 if(tile_check_plus(where))
\r
158 return tile_check_cross(where);
\r