1 vector plib_points2[8];
\r
2 vector plib_points[8];
\r
5 float pathlib_expandnode_starf(entity node, vector start, vector goal)
\r
11 where = node.origin;
\r
13 f = PLIB_FORWARD * pathlib_gridsize;
\r
14 r = PLIB_RIGHT * pathlib_gridsize;
\r
17 plib_points[0] = where + f;
\r
20 plib_points[1] = where - f;
\r
23 plib_points[2] = where + r;
\r
26 plib_points[3] = where - r;
\r
29 plib_points[4] = where + f + r;
\r
32 plib_points[5] = where + f - r;
\r
35 plib_points[6] = where - f + r;
\r
38 plib_points[7] = where - f - r;
\r
43 fc = pathlib_heuristic(t,goal) + pathlib_cost(node,t,pathlib_gridsize);
\r
49 plib_points2[0] = plib_points[0];
\r
51 bp = plib_points[0];
\r
52 for(i = 0; i < 8; ++i)
\r
55 nap = pathlib_nodeatpoint(plib_points[i]);
\r
57 if(nap.owner == openlist)
\r
63 if(plib_fvals[i] < fc)
\r
65 bp = plib_points[i];
\r
67 plib_points2[fc2] = plib_points[i];
\r
72 nap = pathlib_nodeatpoint(plib_points[i]);
\r
74 if not nap.owner == closedlist)
\r
80 pathlib_makenode(node,start,bp,goal,pathlib_gridsize);
\r
82 for(i = 0; i < 3; ++i)
\r
84 pathlib_makenode(node,start,plib_points2[i],goal,pathlib_gridsize);
\r
87 return pathlib_open_cnt;
\r
90 float pathlib_expandnode_star(entity node, vector start, vector goal)
\r
92 vector point,where,f,r;
\r
94 where = node.origin;
\r
96 f = PLIB_FORWARD * pathlib_gridsize;
\r
97 r = PLIB_RIGHT * pathlib_gridsize;
\r
101 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
105 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
109 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
113 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
116 point = where + f + r;
\r
117 pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
\r
120 point = where + f - r;
\r
121 pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
\r
124 point = where - f + r;
\r
125 pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
\r
128 point = where - f - r;
\r
129 pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
\r
131 return pathlib_open_cnt;
\r
134 float pathlib_expandnode_octagon(entity node, vector start, vector goal)
\r
136 vector point,where,f,r;
\r
138 where = node.origin;
\r
140 f = PLIB_FORWARD * pathlib_gridsize;
\r
141 r = PLIB_RIGHT * pathlib_gridsize;
\r
145 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
149 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
153 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
157 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
159 f = PLIB_FORWARD * pathlib_gridsize * 0.5;
\r
160 r = PLIB_RIGHT * pathlib_gridsize * 0.5;
\r
163 point = where + f + r;
\r
164 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
168 point = where + f - r;
\r
169 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
173 point = where - f + r;
\r
174 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
177 point = where - f - r;
\r
178 pathlib_makenode(node,start,point,goal,pathlib_movecost);
\r
180 return pathlib_open_cnt;
\r
183 float pathlib_expandnode_box(entity node, vector start, vector goal)
\r
187 for(v_z = node.origin_z - pathlib_gridsize; v_z <= node.origin_z + pathlib_gridsize; v_z += pathlib_gridsize)
\r
188 for(v_y = node.origin_y - pathlib_gridsize; v_y <= node.origin_y + pathlib_gridsize; v_y += pathlib_gridsize)
\r
189 for(v_x = node.origin_x - pathlib_gridsize; v_x <= node.origin_x + pathlib_gridsize; v_x += pathlib_gridsize)
\r
191 //if(vlen(v - node.origin))
\r
192 pathlib_makenode(node,start,v,goal,pathlib_movecost);
\r
195 return pathlib_open_cnt;
\r