bridgefall: Factor bridge_support_at() out of bridgefall()
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
4824648978
commit
636752a234
2 changed files with 32 additions and 28 deletions
|
@ -392,6 +392,7 @@ extern void stop_service(void);
|
|||
extern int confirm(char *);
|
||||
extern int askyn(char *);
|
||||
/* bridgefall.c */
|
||||
extern int bridge_support_at(struct sctstr *, int);
|
||||
extern void bridge_damaged(struct sctstr *);
|
||||
extern void bridgefall(struct sctstr *);
|
||||
/* bsanct.c */
|
||||
|
|
|
@ -48,6 +48,35 @@
|
|||
|
||||
static void knockdown(struct sctstr *);
|
||||
|
||||
/*
|
||||
* Is there support for a bridge at SP?
|
||||
* Ignore support coming from direction IGNORE_DIR.
|
||||
*/
|
||||
int
|
||||
bridge_support_at(struct sctstr *sp, int ignore_dir)
|
||||
{
|
||||
int i, nx, ny;
|
||||
struct sctstr sect;
|
||||
|
||||
for (i = 1; i <= 6; i++) {
|
||||
if (i == ignore_dir)
|
||||
continue;
|
||||
nx = sp->sct_x + diroff[i][0];
|
||||
ny = sp->sct_y + diroff[i][1];
|
||||
getsect(nx, ny, §);
|
||||
if (opt_EASY_BRIDGES
|
||||
&& sect.sct_type != SCT_WATER && sect.sct_type != SCT_BSPAN)
|
||||
return 1;
|
||||
if (sect.sct_effic < 20)
|
||||
continue;
|
||||
if (sect.sct_type == SCT_BHEAD && sect.sct_newtype == SCT_BHEAD)
|
||||
return 1;
|
||||
if (sect.sct_type == SCT_BTOWER)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check bridges at and around SP after damage to SP.
|
||||
* If SP is an inefficent bridge, splash it.
|
||||
|
@ -74,42 +103,16 @@ void
|
|||
bridgefall(struct sctstr *sp)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
struct sctstr sect;
|
||||
struct sctstr bh_sect;
|
||||
int nx;
|
||||
int ny;
|
||||
int nnx;
|
||||
int nny;
|
||||
|
||||
for (i = 1; i <= 6; i++) {
|
||||
nx = sp->sct_x + diroff[i][0];
|
||||
ny = sp->sct_y + diroff[i][1];
|
||||
getsect(nx, ny, §);
|
||||
if (sect.sct_type != SCT_BSPAN)
|
||||
continue;
|
||||
for (j = 1; j <= 6; j++) {
|
||||
if (j == DIR_BACK(i))
|
||||
continue;
|
||||
nnx = nx + diroff[j][0];
|
||||
nny = ny + diroff[j][1];
|
||||
getsect(nnx, nny, &bh_sect);
|
||||
/* With EASY_BRIDGES, it just has to be next to any
|
||||
land */
|
||||
if (opt_EASY_BRIDGES) {
|
||||
if (bh_sect.sct_type != SCT_WATER &&
|
||||
bh_sect.sct_type != SCT_BSPAN)
|
||||
break;
|
||||
}
|
||||
if (bh_sect.sct_effic < 20)
|
||||
continue;
|
||||
if (bh_sect.sct_type == SCT_BHEAD &&
|
||||
bh_sect.sct_newtype == SCT_BHEAD)
|
||||
break;
|
||||
if (bh_sect.sct_type == SCT_BTOWER)
|
||||
break;
|
||||
}
|
||||
if (j > 6) {
|
||||
if (sect.sct_type == SCT_BSPAN
|
||||
&& !bridge_support_at(§, DIR_BACK(i))) {
|
||||
knockdown(§);
|
||||
putsect(§);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue