TbBool creature_can_navigate_to_with_storage_f(const struct Thing *creatng, const struct Coord3d *pos, NaviRouteFlags flags, const char *func_name) { AriadneReturn aret; NAVIDBG(8,"%s: Route for %s index %d from %3d,%3d to %3d,%3d", func_name, thing_model_name(creatng),(int)creatng->index, (int)creatng->mappos.x.stl.num, (int)creatng->mappos.y.stl.num, (int)pos->x.stl.num, (int)pos->y.stl.num); aret = ariadne_initialise_creature_route_f((struct Thing *)creatng, pos, get_creature_speed(creatng), flags, func_name); NAVIDBG(18,"Ariadne returned %d",(int)aret); return (aret == AridRet_OK); }
void delaunay_stack_point(long pt_x, long pt_y) { long tri_idx,cor_idx; long dst_tri_idx,dst_cor_idx; long tri_id2, i; NAVIDBG(19,"Starting"); //_DK_delaunay_stack_point(pt_x, pt_y); return; tri_idx = triangle_find8(pt_x << 8, pt_y << 8); if (tri_idx == -1) { NAVIDBG(19,"Tri not found"); return; } delaunay_add_triangle(tri_idx); for (cor_idx=0; cor_idx < 3; cor_idx++) { tri_id2 = Triangles[tri_idx].tags[cor_idx]; if (tri_id2 != -1) { delaunay_add_triangle(tri_id2); } } if (point_find(pt_x, pt_y, &dst_tri_idx, &dst_cor_idx)) { tri_idx = dst_tri_idx; cor_idx = dst_cor_idx; unsigned long k; k = 0; do { tri_id2 = Triangles[tri_idx].tags[cor_idx]; if (tri_id2 == -1) { NAVIDBG(19,"Tag not found"); break; } i = link_find(tri_id2, tri_idx); if (i == -1) { NAVIDBG(19,"Link not found"); break; } cor_idx = MOD3[i+1]; tri_idx = tri_id2; delaunay_add_triangle(tri_idx); k++; if (k >= TRIANLGLES_COUNT) { ERRORDBG(9,"Infinite loop detected"); break; } } while (tri_idx != dst_tri_idx); } NAVIDBG(19,"Done"); }
long delaunay_seeded(long start_x, long start_y, long end_x, long end_y) { long tri_idx,cor_idx; long tri_id2,cor_id2; long count; NAVIDBG(19,"Starting"); //return _DK_delaunay_seeded(start_x, start_y, end_x, end_y); tags_init(); delaunay_init(); delaunay_stack_point(start_x, start_y); delaunay_stack_point(start_x, end_y); delaunay_stack_point(end_x, start_y); delaunay_stack_point(end_x, end_y); count = 0; while (ix_delaunay > 0) { ix_delaunay--; tri_idx = delaunay_stack[ix_delaunay]; for (cor_idx=0; cor_idx < 3; cor_idx++) { if (!optimise_heuristic(tri_idx, cor_idx)) continue; count++; edge_rotateAC(tri_idx, cor_idx); if (ix_delaunay+4 >= DELAUNAY_COUNT) { ERRORLOG("stack full"); return count; } for (cor_id2=0; cor_id2 < 3; cor_id2++) { tri_id2 = Triangles[tri_idx].tags[cor_id2]; if (tri_id2 == -1) continue; delaunay_add_triangle(tri_id2); } } } return count; }