update: Separate MOB_ACCESS from normal mobility update
The update uses mob_sect(), mob_ship(), mob_plane() and mob_land() for two related, but different jobs: to give the previous turn's remaining MOB_ACCESS mobility, and to give this update's new mobility. The two were probably conflated in an attempt to share code, but it actually just complicates things. Collect the MOB_ACCESS code in new function mob_access_all(), and the normal mobility update code in new function mob_inc_all(). Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
d861902783
commit
25d48124d0
3 changed files with 66 additions and 84 deletions
|
@ -103,14 +103,12 @@ extern void prod_land(int, int, struct bp *, int);
|
||||||
/* material.c */
|
/* material.c */
|
||||||
extern int get_materials(struct sctstr *, short[], int);
|
extern int get_materials(struct sctstr *, short[], int);
|
||||||
/* mobility.c */
|
/* mobility.c */
|
||||||
extern void mob_sect(void);
|
extern void mob_inc_all(int);
|
||||||
extern void mob_ship(void);
|
|
||||||
extern void mob_land(void);
|
|
||||||
extern void mob_plane(void);
|
|
||||||
extern void sct_do_upd_mob(struct sctstr *sp);
|
extern void sct_do_upd_mob(struct sctstr *sp);
|
||||||
extern void shp_do_upd_mob(struct shpstr *sp);
|
extern void shp_do_upd_mob(struct shpstr *sp);
|
||||||
extern void lnd_do_upd_mob(struct lndstr *lp);
|
extern void lnd_do_upd_mob(struct lndstr *lp);
|
||||||
extern void pln_do_upd_mob(struct plnstr *pp);
|
extern void pln_do_upd_mob(struct plnstr *pp);
|
||||||
|
extern void mob_access_all(void);
|
||||||
/* move_sat.c */
|
/* move_sat.c */
|
||||||
extern void move_sat(struct plnstr *);
|
extern void move_sat(struct plnstr *);
|
||||||
/* nat.c */
|
/* nat.c */
|
||||||
|
|
|
@ -65,13 +65,9 @@ update_main(void)
|
||||||
for (n = 0; n < MAXNOC; n++)
|
for (n = 0; n < MAXNOC; n++)
|
||||||
clear_telegram_is_new(n);
|
clear_telegram_is_new(n);
|
||||||
|
|
||||||
/* First, make sure all mobility is updated correctly. */
|
/* Credit the turn's remaining MOB_ACCESS mobility */
|
||||||
if (opt_MOB_ACCESS) {
|
if (opt_MOB_ACCESS)
|
||||||
mob_ship();
|
mob_access_all();
|
||||||
mob_sect();
|
|
||||||
mob_plane();
|
|
||||||
mob_land();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt_AUTO_POWER)
|
if (opt_AUTO_POWER)
|
||||||
update_power();
|
update_power();
|
||||||
|
@ -117,15 +113,8 @@ update_main(void)
|
||||||
finish_sects(etu);
|
finish_sects(etu);
|
||||||
prod_nat(etu);
|
prod_nat(etu);
|
||||||
age_levels(etu);
|
age_levels(etu);
|
||||||
|
mob_inc_all(etu);
|
||||||
|
|
||||||
/* Only update mobility for non-MOB_ACCESS here, since it doesn't
|
|
||||||
get done for MOB_ACCESS anyway during the update */
|
|
||||||
if (!opt_MOB_ACCESS) {
|
|
||||||
mob_ship();
|
|
||||||
mob_sect();
|
|
||||||
mob_plane();
|
|
||||||
mob_land();
|
|
||||||
}
|
|
||||||
if (update_demand == UPD_DEMAND_SCHED
|
if (update_demand == UPD_DEMAND_SCHED
|
||||||
|| update_demand == UPD_DEMAND_ASYNC)
|
|| update_demand == UPD_DEMAND_ASYNC)
|
||||||
update_removewants();
|
update_removewants();
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Dave Pare, 1986
|
* Dave Pare, 1986
|
||||||
* Steve McClure, 1998-1999
|
* Steve McClure, 1998-1999
|
||||||
* Markus Armbruster, 2004-2008
|
* Markus Armbruster, 2004-2016
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -125,21 +125,41 @@ pln_do_upd_mob(struct plnstr *pp)
|
||||||
do_upd_checking = 0;
|
do_upd_checking = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Increase mobility of everything for @etus ETUs, update timestamps */
|
||||||
void
|
void
|
||||||
mob_sect(void)
|
mob_inc_all(int etus)
|
||||||
{
|
{
|
||||||
struct sctstr *sp;
|
struct sctstr *sectp;
|
||||||
int n, etus;
|
struct shpstr *sp;
|
||||||
|
struct plnstr *pp;
|
||||||
|
struct lndstr *lp;
|
||||||
|
int i;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
time(&now);
|
time(&now);
|
||||||
for (n = 0; NULL != (sp = getsectid(n)); n++) {
|
|
||||||
sp->sct_timestamp = now;
|
for (i = 0; (sectp = getsectid(i)); i++) {
|
||||||
if (opt_MOB_ACCESS)
|
sectp->sct_timestamp = now;
|
||||||
etus = game_reset_tick(&sp->sct_access);
|
if (!opt_MOB_ACCESS)
|
||||||
else
|
do_mob_sect(sectp, etus);
|
||||||
etus = etu_per_update;
|
}
|
||||||
do_mob_sect(sp, etus);
|
|
||||||
|
for (i = 0; (sp = getshipp(i)); i++) {
|
||||||
|
sp->shp_timestamp = now;
|
||||||
|
if (!opt_MOB_ACCESS)
|
||||||
|
do_mob_ship(sp, etus);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; (pp = getplanep(i)); i++) {
|
||||||
|
pp->pln_timestamp = now;
|
||||||
|
if (!opt_MOB_ACCESS)
|
||||||
|
do_mob_plane(pp, etus);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; (lp = getlandp(i)); i++) {
|
||||||
|
lp->lnd_timestamp = now;
|
||||||
|
if (!opt_MOB_ACCESS)
|
||||||
|
do_mob_land(lp, etus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,24 +182,6 @@ do_mob_sect(struct sctstr *sp, int etus)
|
||||||
sp->sct_mobil = value;
|
sp->sct_mobil = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
mob_ship(void)
|
|
||||||
{
|
|
||||||
struct shpstr *sp;
|
|
||||||
int n, etus;
|
|
||||||
time_t now;
|
|
||||||
|
|
||||||
time(&now);
|
|
||||||
for (n = 0; NULL != (sp = getshipp(n)); n++) {
|
|
||||||
sp->shp_timestamp = now;
|
|
||||||
if (opt_MOB_ACCESS)
|
|
||||||
etus = game_reset_tick(&sp->shp_access);
|
|
||||||
else
|
|
||||||
etus = etu_per_update;
|
|
||||||
do_mob_ship(sp, etus);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_mob_ship(struct shpstr *sp, int etus)
|
do_mob_ship(struct shpstr *sp, int etus)
|
||||||
{
|
{
|
||||||
|
@ -197,24 +199,6 @@ do_mob_ship(struct shpstr *sp, int etus)
|
||||||
sp->shp_mobil = (signed char)value;
|
sp->shp_mobil = (signed char)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
mob_land(void)
|
|
||||||
{
|
|
||||||
struct lndstr *lp;
|
|
||||||
int n, etus;
|
|
||||||
time_t now;
|
|
||||||
|
|
||||||
time(&now);
|
|
||||||
for (n = 0; NULL != (lp = getlandp(n)); n++) {
|
|
||||||
lp->lnd_timestamp = now;
|
|
||||||
if (opt_MOB_ACCESS)
|
|
||||||
etus = game_reset_tick(&lp->lnd_access);
|
|
||||||
else
|
|
||||||
etus = etu_per_update;
|
|
||||||
do_mob_land(lp, etus);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_mob_land(struct lndstr *lp, int etus)
|
do_mob_land(struct lndstr *lp, int etus)
|
||||||
{
|
{
|
||||||
|
@ -246,24 +230,6 @@ do_mob_land(struct lndstr *lp, int etus)
|
||||||
lp->lnd_mobil = value;
|
lp->lnd_mobil = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
mob_plane(void)
|
|
||||||
{
|
|
||||||
struct plnstr *pp;
|
|
||||||
int n, etus;
|
|
||||||
time_t now;
|
|
||||||
|
|
||||||
time(&now);
|
|
||||||
for (n = 0; NULL != (pp = getplanep(n)); n++) {
|
|
||||||
pp->pln_timestamp = now;
|
|
||||||
if (opt_MOB_ACCESS)
|
|
||||||
etus = game_reset_tick(&pp->pln_access);
|
|
||||||
else
|
|
||||||
etus = etu_per_update;
|
|
||||||
do_mob_plane(pp, etus);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_mob_plane(struct plnstr *pp, int etus)
|
do_mob_plane(struct plnstr *pp, int etus)
|
||||||
{
|
{
|
||||||
|
@ -280,3 +246,32 @@ do_mob_plane(struct plnstr *pp, int etus)
|
||||||
value = plane_mob_max;
|
value = plane_mob_max;
|
||||||
pp->pln_mobil = value;
|
pp->pln_mobil = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Credit the turn's remaining MOB_ACCESS mobility.
|
||||||
|
* Exactly as if everything was accessed right now.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
mob_access_all(void)
|
||||||
|
{
|
||||||
|
struct sctstr *sectp;
|
||||||
|
struct shpstr *sp;
|
||||||
|
struct plnstr *pp;
|
||||||
|
struct lndstr *lp;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (CANT_HAPPEN(!opt_MOB_ACCESS))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; (sectp = getsectid(i)); i++)
|
||||||
|
do_mob_sect(sectp, game_reset_tick(§p->sct_access));
|
||||||
|
|
||||||
|
for (i = 0; (sp = getshipp(i)); i++)
|
||||||
|
do_mob_ship(sp, game_reset_tick(&sp->shp_access));
|
||||||
|
|
||||||
|
for (i = 0; (pp = getplanep(i)); i++)
|
||||||
|
do_mob_plane(pp, game_reset_tick(&pp->pln_access));
|
||||||
|
|
||||||
|
for (i = 0; (lp = getlandp(i)); i++)
|
||||||
|
do_mob_land(lp, game_reset_tick(&lp->lnd_access));
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue