(feed_ship): Work directly on land item arrays instead of copies made

by getvec().  This is safe, because the new code changes the item
array precisely when the old code writes back a changed copy.
This commit is contained in:
Markus Armbruster 2004-03-11 13:04:58 +00:00
parent 0716438b5b
commit 902a1c9f17

View file

@ -436,7 +436,7 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
int can_eat, need; int can_eat, need;
int total_people; int total_people;
int to_starve; int to_starve;
int starved, lvec[I_MAX + 1]; int starved;
struct nstr_item ni; struct nstr_item ni;
struct lndstr *lp; struct lndstr *lp;
@ -463,16 +463,14 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
if (lp->lnd_ship != sp->shp_uid) if (lp->lnd_ship != sp->shp_uid)
continue; continue;
need = ifood_eaten - vec[I_FOOD]; need = ifood_eaten - vec[I_FOOD];
getvec(VT_ITEM, lvec, (s_char *)lp, EF_LAND);
land_eaten = (etus * eatrate) * (double)lnd_getmil(lp); land_eaten = (etus * eatrate) * (double)lnd_getmil(lp);
if (lvec[I_FOOD] - need > land_eaten) { if (lp->lnd_item[I_FOOD] - need > land_eaten) {
vec[I_FOOD] += need; vec[I_FOOD] += need;
lvec[I_FOOD] -= need; lp->lnd_item[I_FOOD] -= need;
} else if ((lvec[I_FOOD] - land_eaten) > 0) { } else if (lp->lnd_item[I_FOOD] - land_eaten > 0) {
vec[I_FOOD] += (lvec[I_FOOD] - land_eaten); vec[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
lvec[I_FOOD] -= (lvec[I_FOOD] - land_eaten); lp->lnd_item[I_FOOD] -= lp->lnd_item[I_FOOD] - land_eaten;
} }
putvec(VT_ITEM, lvec, (s_char *)lp, EF_LAND);
} }
} }
} }