Inline BestShipPath(), BestAirPath() glue
Following commits will simplify the resulting code.
This commit is contained in:
parent
92e64d7638
commit
e450c31ddb
7 changed files with 70 additions and 89 deletions
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* ---
|
||||
*
|
||||
* 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 <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#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;
|
||||
}
|
|
@ -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 <config.h>
|
||||
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
* Known contributors to this file:
|
||||
* Chad Zabel, 1994
|
||||
* Ken Stevens, 1995
|
||||
* Markus Armbruster, 2004-2011
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -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,
|
||||
if (path_find(sp->shp_x, sp->shp_y,
|
||||
sp->shp_destx[0], sp->shp_desty[0],
|
||||
sp->shp_own);
|
||||
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));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue