1 vector pathlib_wateroutnode(vector start,vector end)
\r
5 pathlib_movenode_goodnode = 0;
\r
7 end_x = fsnap(end_x, pathlib_gridsize);
\r
8 end_y = fsnap(end_y, pathlib_gridsize);
\r
10 traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
\r
13 if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
\r
16 for(surface = start ; surface_z < (end_z + 32); ++surface_z)
\r
18 if(pointcontents(surface) == CONTENT_EMPTY)
\r
22 if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
\r
25 tracebox(start + '0 0 64', movenode_boxmin,movenode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
\r
26 if(trace_fraction == 1)
\r
27 pathlib_movenode_goodnode = 1;
\r
29 if(fabs(surface_z - end_z) > 32)
\r
30 pathlib_movenode_goodnode = 0;
\r
35 vector pathlib_swimnode(vector start,vector end, float /*unused*/)
\r
37 pathlib_movenode_goodnode = 0;
\r
39 if(pointcontents(start) != CONTENT_WATER)
\r
42 end_x = fsnap(end_x, pathlib_gridsize);
\r
43 end_y = fsnap(end_y, pathlib_gridsize);
\r
45 if(pointcontents(end) == CONTENT_EMPTY)
\r
46 return pathlib_wateroutnode( start, end);
\r
48 tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
\r
49 if(trace_fraction == 1)
\r
50 pathlib_movenode_goodnode = 1;
\r
55 vector pathlib_flynode(vector start,vector end)
\r
57 pathlib_movenode_goodnode = 0;
\r
59 end_x = fsnap(end_x, pathlib_gridsize);
\r
60 end_y = fsnap(end_y, pathlib_gridsize);
\r
62 tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
\r
63 if(trace_fraction == 1)
\r
64 pathlib_movenode_goodnode = 1;
\r
69 vector pathlib_walknode(vector start,vector end,float doedge)
\r
71 vector direction,point,last_point,s,e;
\r
72 float steps, distance, i;
\r
74 pathlib_movenode_goodnode = 0;
\r
76 end_x = fsnap(end_x,pathlib_gridsize);
\r
77 end_y = fsnap(end_y,pathlib_gridsize);
\r
78 start_x = fsnap(start_x,pathlib_gridsize);
\r
79 start_y = fsnap(start_y,pathlib_gridsize);
\r
82 traceline(start + movenode_stepup, start - movenode_maxdrop,MOVE_WORLDONLY,self);
\r
83 if(trace_fraction == 1.0)
\r
84 return trace_endpos;
\r
86 start = trace_endpos;
\r
88 // Find the direcion, without Z
\r
91 direction = normalize(e - s);
\r
93 distance = vlen(start - end);
\r
94 steps = rint(distance / movenode_stepsize);
\r
97 for(i = 1; i < steps; ++i)
\r
99 point = last_point + (direction * movenode_stepsize);
\r
100 traceline(point + movenode_stepup,point - movenode_maxdrop,MOVE_WORLDONLY,self);
\r
101 if(trace_fraction == 1.0)
\r
102 return trace_endpos;
\r
104 last_point = trace_endpos;
\r
107 point = last_point + (direction * movenode_stepsize);
\r
108 point_x = fsnap(point_x,pathlib_gridsize);
\r
109 point_y = fsnap(point_y,pathlib_gridsize);
\r
111 //dprint("end_x: ",ftos(end_x), " end_y: ",ftos(end_y),"\n");
\r
112 //dprint("point_x:",ftos(point_x)," point_y:",ftos(point_y),"\n\n");
\r
114 traceline(point + movenode_stepup, point - movenode_maxdrop,MOVE_WORLDONLY,self);
\r
115 if(trace_fraction == 1.0)
\r
116 return trace_endpos;
\r
118 last_point = trace_endpos;
\r
120 tracebox(start + movenode_boxup, movenode_boxmin,movenode_boxmax, last_point + movenode_boxup, MOVE_WORLDONLY, self);
\r
121 if(trace_fraction != 1.0)
\r
122 return trace_endpos;
\r
124 pathlib_movenode_goodnode = 1;
\r