]> git.pond.sub.org Git - empserver/commitdiff
(feed_land): Simplify. Amount of food taken from ship could be off by
authorMarkus Armbruster <armbru@pond.sub.org>
Thu, 11 Mar 2004 15:27:59 +0000 (15:27 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 11 Mar 2004 15:27:59 +0000 (15:27 +0000)
one due to rounding, fix.  However, the fixed code is currently
unreachable, as caller runs resupply_commod() before feed_land().
(feed_ship): Simplify.  No functional changes.

src/lib/update/land.c
src/lib/update/ship.c

index 4aad1a3720608ae1fc06054e7f05d46be8558d84..7c403526702491a97a457803eae9183264e9b0a9 100644 (file)
@@ -364,29 +364,32 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed,
          int doit)
 {
     double food_eaten, ship_eaten;
+    int ifood_eaten;
     double people_left;
-    int can_eat, need;
+    int need;
     int total_people;
     int starved;
-    struct lchrstr *lcp;
     struct shpstr *sp;
 
     if (opt_NOFOOD)
        return 0;               /* no food no work to be done */
 
-    lcp = &lchr[(int)lp->lnd_type];
-
-    food_eaten = (etus * eatrate) * total_mil(lp);
+    total_people = total_mil(lp);
+    food_eaten = etus * eatrate * total_people;
+    ifood_eaten = (int)food_eaten;
+    if (food_eaten - ifood_eaten > 0)
+       ifood_eaten++;
     starved = 0;
     *needed = 0;
+
     /*
      * If we're on a ship, and we don't have enough food,
      * get some food off the carrying ship. (Don't starve
      * the ship, tho...
      */
 /* doit - Only try to take food off the ship during the update */
-    if ((food_eaten > vec[I_FOOD]) && (lp->lnd_ship >= 0) && doit) {
-       need = (int)food_eaten - vec[I_FOOD];
+    if (ifood_eaten > vec[I_FOOD] && lp->lnd_ship >= 0 && doit) {
+       need = ifood_eaten - vec[I_FOOD];
        sp = getshipp(lp->lnd_ship);
        ship_eaten = etus * eatrate * (sp->shp_item[I_CIVIL]
                                       + sp->shp_item[I_MILIT]
@@ -400,26 +403,13 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed,
        }
     }
 
-    if (food_eaten > vec[I_FOOD]) {
-       *needed = food_eaten - vec[I_FOOD];
-       if (*needed < (food_eaten - vec[I_FOOD]))
-           (*needed)++;
-       can_eat = (vec[I_FOOD] / (etus * eatrate));
-       total_people = total_mil(lp);
-       /* only want to starve off at most 1/2 the populace. */
-       if (can_eat < (total_people / 2))
-           can_eat = total_people / 2;
-
+    if (ifood_eaten > vec[I_FOOD]) {
+       *needed = ifood_eaten - vec[I_FOOD];
        people_left = (vec[I_FOOD] + 0.01) / (food_eaten + 0.01);
        /* only want to starve off at most 1/2 the populace. */
        if (people_left < 0.5)
            people_left = 0.5;
-/*             lp->lnd_effic *= people_left;*/
-       starved = vec[I_MILIT] - (vec[I_MILIT] * people_left);
-/*             if (!player->simulation)
-                       wu(0, lp->lnd_own, "%d mil starved on unit %s.\n",
-                          starved,
-                          prland(lp));*/
+       starved = total_people * (1 - people_left);
        vec[I_MILIT] -= starved;
        vec[I_FOOD] = 0;
     } else {
index dc81e1fcfb30bec2f1c8e09cc9a8cab86b88284f..e9e303dcc775bada92ac9c6a0fc229477f61fa7e 100644 (file)
@@ -438,47 +438,41 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
     if (opt_NOFOOD)
        return 0;               /* no food no work to do */
 
-    food_eaten =
-       (etus * eatrate) * (vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW]);
+    total_people = vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW];
+    food_eaten = etus * eatrate * total_people;
     ifood_eaten = (int)food_eaten;
-    if ((food_eaten - ifood_eaten) > 0)
+    if (food_eaten - ifood_eaten > 0)
        ifood_eaten++;
     starved = 0;
     *needed = 0;
-    if (!player->simulation && food_eaten > vec[I_FOOD])
+    if (!player->simulation && ifood_eaten > vec[I_FOOD])
        vec[I_FOOD] += supply_commod(sp->shp_own, sp->shp_x, sp->shp_y,
-                                    I_FOOD, (ifood_eaten - vec[I_FOOD]));
+                                    I_FOOD, ifood_eaten - vec[I_FOOD]);
 
-    if (food_eaten > vec[I_FOOD]) {
 /* doit - only steal food from land units during the update */
-       if (sp->shp_nland > 0 && doit) {
-           snxtitem_all(&ni, EF_LAND);
-           while ((lp = (struct lndstr *)nxtitemp(&ni, 0)) &&
-                  (food_eaten > vec[I_FOOD])) {
-               if (lp->lnd_ship != sp->shp_uid)
-                   continue;
-               need = ifood_eaten - vec[I_FOOD];
-               land_eaten = (etus * eatrate) * (double)lnd_getmil(lp);
-               if (lp->lnd_item[I_FOOD] - need > land_eaten) {
-                   vec[I_FOOD] += need;
-                   lp->lnd_item[I_FOOD] -= need;
-               } else if (lp->lnd_item[I_FOOD] - land_eaten > 0) {
-                   vec[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
-                   lp->lnd_item[I_FOOD] -= lp->lnd_item[I_FOOD] - land_eaten;
-               }
+    if (ifood_eaten > vec[I_FOOD] && sp->shp_nland > 0 && doit) {
+       snxtitem_all(&ni, EF_LAND);
+       while ((lp = (struct lndstr *)nxtitemp(&ni, 0)) &&
+              ifood_eaten > vec[I_FOOD]) {
+           if (lp->lnd_ship != sp->shp_uid)
+               continue;
+           need = ifood_eaten - vec[I_FOOD];
+           land_eaten = etus * eatrate * lnd_getmil(lp);
+           if (lp->lnd_item[I_FOOD] - need > land_eaten) {
+               vec[I_FOOD] += need;
+               lp->lnd_item[I_FOOD] -= need;
+           } else if (lp->lnd_item[I_FOOD] - land_eaten > 0) {
+               vec[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
+               lp->lnd_item[I_FOOD] -= lp->lnd_item[I_FOOD] - land_eaten;
            }
        }
     }
 
-    if (food_eaten > vec[I_FOOD]) {
-       *needed = food_eaten - vec[I_FOOD];
-       if (*needed < (food_eaten - vec[I_FOOD]))
-           (*needed)++;
-       can_eat = (vec[I_FOOD] / (etus * eatrate));
-       total_people = vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW];
-
+    if (ifood_eaten > vec[I_FOOD]) {
+       *needed = ifood_eaten - vec[I_FOOD];
+       can_eat = vec[I_FOOD] / (etus * eatrate);
        /* only want to starve off at most 1/2 the populace. */
-       if (can_eat < (total_people / 2))
+       if (can_eat < total_people / 2)
            can_eat = total_people / 2;
 
        to_starve = total_people - can_eat;