From f0927e7f6417f26f3894a8757db959027a904dfb Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 3 May 2013 20:52:02 +0200 Subject: [PATCH] prod() duplicates materials_cost(), clean up Rename materials_cost() to prod_materials_cost(), give external linkage, use it in prod(). --- include/prototypes.h | 1 + include/types.h | 1 + src/lib/commands/prod.c | 21 ++++----------------- src/lib/update/produce.c | 14 +++++++++----- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/include/prototypes.h b/include/prototypes.h index 0291f5e0b..63d0a8d93 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -716,6 +716,7 @@ extern int bank_income(struct sctstr *, int); /* produce.c */ extern int produce(struct natstr *, struct sctstr *, short *, int, int, int, int *, int *); +extern int prod_materials_cost(struct pchrstr *, short[], int *); extern double prod_eff(int, float); /* removewants.c */ extern int update_removewants(void); diff --git a/include/types.h b/include/types.h index 542ff1d76..44f8753d5 100644 --- a/include/types.h +++ b/include/types.h @@ -48,6 +48,7 @@ struct nchrstr; struct nstr_item; struct nstr_sect; struct nukstr; +struct pchrstr; struct player; struct plist; struct plnstr; diff --git a/src/lib/commands/prod.c b/src/lib/commands/prod.c index 882ff28cb..504b7fe25 100644 --- a/src/lib/commands/prod.c +++ b/src/lib/commands/prod.c @@ -29,7 +29,7 @@ * Known contributors to this file: * David Muir Sharnoff, 1987 * Steve McClure, 1997-2000 - * Markus Armbruster, 2004-2010 + * Markus Armbruster, 2004-2013 */ #include @@ -202,13 +202,13 @@ prod(void) if (dchr[type].d_prd < 0) continue; - unit_work = 0; pp = &pchr[dchr[type].d_prd]; vtype = pp->p_type; if (pp->p_nrndx) resource = (unsigned char *)§ + pp->p_nrndx; else resource = NULL; + used = prod_materials_cost(pp, sect.sct_item, &unit_work); /* * sect p_e (inc improvements) */ @@ -216,25 +216,12 @@ prod(void) unit_work++; p_e *= *resource / 100.0; } + if (unit_work == 0) + unit_work = 1; /* * production effic. */ prodeff = prod_eff(type, natp->nat_level[pp->p_nlndx]); - /* - * raw material limit - */ - used = 9999; - for (i = 0; i < MAXPRCON; ++i) { - it = pp->p_ctype[i]; - if (!pp->p_camt[i]) - continue; - if (CANT_HAPPEN(it <= I_NONE || I_MAX < it)) - continue; - used = MIN(used, sect.sct_item[it] / pp->p_camt[i]); - unit_work += pp->p_camt[i]; - } - if (unit_work == 0) - unit_work = 1; /* * is production limited by resources or * workforce? diff --git a/src/lib/update/produce.c b/src/lib/update/produce.c index f0dec1ed5..f72dd75c5 100644 --- a/src/lib/update/produce.c +++ b/src/lib/update/produce.c @@ -27,7 +27,7 @@ * produce.c: Produce goodies * * Known contributors to this file: - * Markus Armbruster, 2004-2010 + * Markus Armbruster, 2004-2013 */ #include @@ -39,7 +39,6 @@ #include "update.h" static void materials_charge(struct pchrstr *, short *, int); -static int materials_cost(struct pchrstr *, short *, int *); static char *levelnames[] = { "Technology", "Research", "Education", "Happiness" @@ -73,7 +72,8 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, *amount = 0; *cost = 0; - if ((material_limit = materials_cost(product, vec, &unit_work)) <= 0) + material_limit = prod_materials_cost(product, vec, &unit_work); + if (material_limit <= 0) return 0; /* * calculate production efficiency. @@ -172,8 +172,12 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, return 0; } -static int -materials_cost(struct pchrstr *pp, short *vec, int *costp) +/* + * Return how much of product PP can be made from materials VEC[]. + * Store amount of work per unit in *COSTP. + */ +int +prod_materials_cost(struct pchrstr *pp, short vec[], int *costp) { int count; int cost; -- 2.43.0