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 confirm(char *);
|
||||||
extern int askyn(char *);
|
extern int askyn(char *);
|
||||||
/* bridgefall.c */
|
/* bridgefall.c */
|
||||||
|
extern int bridge_support_at(struct sctstr *, int);
|
||||||
extern void bridge_damaged(struct sctstr *);
|
extern void bridge_damaged(struct sctstr *);
|
||||||
extern void bridgefall(struct sctstr *);
|
extern void bridgefall(struct sctstr *);
|
||||||
/* bsanct.c */
|
/* bsanct.c */
|
||||||
|
|
|
@ -48,6 +48,35 @@
|
||||||
|
|
||||||
static void knockdown(struct sctstr *);
|
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.
|
* Check bridges at and around SP after damage to SP.
|
||||||
* If SP is an inefficent bridge, splash it.
|
* If SP is an inefficent bridge, splash it.
|
||||||
|
@ -74,42 +103,16 @@ void
|
||||||
bridgefall(struct sctstr *sp)
|
bridgefall(struct sctstr *sp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int j;
|
|
||||||
struct sctstr sect;
|
struct sctstr sect;
|
||||||
struct sctstr bh_sect;
|
|
||||||
int nx;
|
int nx;
|
||||||
int ny;
|
int ny;
|
||||||
int nnx;
|
|
||||||
int nny;
|
|
||||||
|
|
||||||
for (i = 1; i <= 6; i++) {
|
for (i = 1; i <= 6; i++) {
|
||||||
nx = sp->sct_x + diroff[i][0];
|
nx = sp->sct_x + diroff[i][0];
|
||||||
ny = sp->sct_y + diroff[i][1];
|
ny = sp->sct_y + diroff[i][1];
|
||||||
getsect(nx, ny, §);
|
getsect(nx, ny, §);
|
||||||
if (sect.sct_type != SCT_BSPAN)
|
if (sect.sct_type == SCT_BSPAN
|
||||||
continue;
|
&& !bridge_support_at(§, DIR_BACK(i))) {
|
||||||
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) {
|
|
||||||
knockdown(§);
|
knockdown(§);
|
||||||
putsect(§);
|
putsect(§);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue