From e450c31ddb36ae9219ddc5c6c733b7e6d8ce48d3 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 26 Mar 2011 08:03:19 +0100 Subject: [PATCH] Inline BestShipPath(), BestAirPath() glue Following commits will simplify the resulting code. --- include/path.h | 4 --- include/prototypes.h | 2 -- src/lib/common/path.c | 74 --------------------------------------- src/lib/subs/mission.c | 16 +++++++-- src/lib/subs/paths.c | 27 ++++++++++++-- src/lib/subs/unitsub.c | 16 +++++++-- src/lib/update/nav_ship.c | 20 +++++++++-- 7 files changed, 70 insertions(+), 89 deletions(-) delete mode 100644 src/lib/common/path.c diff --git a/include/path.h b/include/path.h index b061426c3..8efa85f77 100644 --- a/include/path.h +++ b/include/path.h @@ -81,10 +81,6 @@ extern void path_find_print_stats(void); #define path_find_print_stats() ((void)0) #endif -/* src/lib/common/path.c */ -extern char *BestShipPath(char *, int, int, int, int, int); -extern char *BestAirPath(char *, int, int, int, int); - /* src/lib/subs/paths.c */ extern char *getpath(char *, char *, coord, coord, int, int, enum p_mode); extern double fcost(struct sctstr *, natid); diff --git a/include/prototypes.h b/include/prototypes.h index 53a283983..5ea60bfcb 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -281,8 +281,6 @@ extern int mapdist(int, int, int, int); /* in path.h */ /* nstreval.c */ /* in nsc.h */ -/* path.c */ -/* in path.h */ /* rdsched.c */ extern int read_schedule(char *, time_t[], int, time_t, time_t); /* res_pop.c */ diff --git a/src/lib/common/path.c b/src/lib/common/path.c deleted file mode 100644 index 178d7ffb2..000000000 --- a/src/lib/common/path.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak, - * Ken Stevens, Steve McClure, Markus Armbruster - * - * Empire is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --- - * - * See files README, COPYING and CREDITS in the root of the source - * tree for related information and legal notices. It is expected - * that future projects/authors will amend these files as needed. - * - * --- - * - * path.c: Path finding interface code - * - * Known contributors to this file: - * Phil Lapsley, 1991 - * Dave Pare, 1991 - * Thomas Ruschak, 1993 - * Steve McClure, 1997 - * Markus Armbruster, 2011 - */ - -#include - -#include -#include "file.h" -#include "optlist.h" -#include "path.h" -#include "sect.h" -#include "xy.h" - -char * -BestShipPath(char *path, int fx, int fy, int tx, int ty, int owner) -{ - size_t len; - - if (path_find(fx, fy, tx, ty, owner, MOB_SAIL) < 0) - return NULL; - len = path_find_route(path, 100, fx, fy, tx, ty); - if (len >= 100) - return NULL; - if (len == 0) - strcpy(path, "h"); - return path; -} - -char * -BestAirPath(char *path, int fx, int fy, int tx, int ty) -{ - size_t len; - - if (path_find(fx, fy, tx, ty, 0, MOB_FLY) < 0) - return NULL; - len = path_find_route(path, 100, fx, fy, tx, ty); - if (len >= 100) - return NULL; - if (len == 0) - strcpy(path, "h"); - return path; -} diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index 4f50f352b..dfeaaaf9a 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -29,7 +29,7 @@ * Known contributors to this file: * Ken Stevens, 1995 * Steve McClure, 1996-2000 - * Markus Armbruster, 2003-2009 + * Markus Armbruster, 2003-2011 */ #include @@ -615,6 +615,7 @@ perform_mission_bomb(int dam, struct emp_qelem *bombers, coord x, coord y, struct airport *air; char buf[512]; char *pp; + size_t len; air = (struct airport *)qp; md = mapdist(x, y, air->x, air->y); @@ -635,7 +636,18 @@ perform_mission_bomb(int dam, struct emp_qelem *bombers, coord x, coord y, mission_pln_arm(&e, air->x, air->y, 2 * md, 'e', NULL); - pp = BestAirPath(buf, air->x, air->y, x, y); + if (path_find(air->x, air->y, x, y, 0, MOB_FLY) < 0) + pp = NULL; + else { + len = path_find_route(buf, 100, air->x, air->y, x, y); + if (len >= 100) + pp = NULL; + else { + if (len == 0) + strcpy(buf, "h"); + pp = buf; + } + } if (CANT_HAPPEN(!pp)) continue; performed = 1; diff --git a/src/lib/subs/paths.c b/src/lib/subs/paths.c index 546d11dd7..f0c100553 100644 --- a/src/lib/subs/paths.c +++ b/src/lib/subs/paths.c @@ -94,6 +94,7 @@ getpath(char *buf, char *arg, coord x, coord y, int onlyown, char buf2[1024]; char *p = buf; char *bp; + size_t len; char prompt[128]; coord dx, dy; struct sctstr sect; @@ -118,10 +119,32 @@ more: pr("Destination sectors not allowed here!\n"); break; case P_FLYING: - bp = BestAirPath(buf2, x, y, dx, dy); + if (path_find(x, y, dx, dy, 0, MOB_FLY) < 0) + bp = NULL; + else { + len = path_find_route(buf2, 100, x, y, dx, dy); + if (len >= 100) + bp = NULL; + else { + if (len == 0) + strcpy(buf2, "h"); + bp = buf2; + } + } break; case P_SAILING: - bp = BestShipPath(buf2, x, y, dx, dy, player->cnum); + if (path_find(x, y, dx, dy, player->cnum, MOB_SAIL) < 0) + bp = NULL; + else { + len = path_find_route(buf2, 100, x, y, dx, dy); + if (len >= 100) + bp = NULL; + else { + if (len == 0) + strcpy(buf2, "h"); + bp = buf2; + } + } break; } if (bp && p + strlen(bp) + 1 < buf + MAX_PATH_LEN) { diff --git a/src/lib/subs/unitsub.c b/src/lib/subs/unitsub.c index fec85c042..4d2d3d99b 100644 --- a/src/lib/subs/unitsub.c +++ b/src/lib/subs/unitsub.c @@ -157,8 +157,20 @@ unit_path(int together, struct empobj *unit, char *buf) return NULL; } if (unit->ef_type == EF_SHIP) { - cp = BestShipPath(buf, unit->x, unit->y, - d_sect.sct_x, d_sect.sct_y, player->cnum); + if (path_find(unit->x, unit->y, d_sect.sct_x, d_sect.sct_y, + player->cnum, MOB_SAIL) < 0) + cp = NULL; + else { + len = path_find_route(buf, 100, unit->x, unit->y, + d_sect.sct_x, d_sect.sct_y); + if (len >= 100) + cp = NULL; + else { + if (len == 0) + strcpy(buf, "h"); + cp = buf; + } + } if (!cp || unit->mobil <= 0) { pr("Can't get to '%s' right now.\n", xyas(d_sect.sct_x, d_sect.sct_y, player->cnum)); diff --git a/src/lib/update/nav_ship.c b/src/lib/update/nav_ship.c index 972d8b63c..c8aeb5426 100644 --- a/src/lib/update/nav_ship.c +++ b/src/lib/update/nav_ship.c @@ -29,6 +29,7 @@ * Known contributors to this file: * Chad Zabel, 1994 * Ken Stevens, 1995 + * Markus Armbruster, 2004-2011 */ #include @@ -242,6 +243,7 @@ int nav_ship(struct shpstr *sp) { char *cp; + size_t len; int stopping; int quit; int didsomething = 0; @@ -274,9 +276,21 @@ nav_ship(struct shpstr *sp) if (QEMPTY(&ship_list)) return 0; - cp = BestShipPath(buf, sp->shp_x, sp->shp_y, - sp->shp_destx[0], sp->shp_desty[0], - sp->shp_own); + if (path_find(sp->shp_x, sp->shp_y, + sp->shp_destx[0], sp->shp_desty[0], + sp->shp_own, MOB_SAIL) < 0) + cp = NULL; + else { + len = path_find_route(buf, 100, sp->shp_x, sp->shp_y, + sp->shp_destx[0], sp->shp_desty[0]); + if (len >= 100) + cp = NULL; + else { + if (len == 0) + strcpy(buf, "h"); + cp = buf; + } + } if (!cp) { wu(0, sp->shp_own, "%s bad path, ship put on standby\n", prship(sp)); -- 2.43.0