From: Markus Armbruster Date: Sun, 5 May 2013 20:34:59 +0000 (+0200) Subject: Rearrange produce() and prod() a bit to make them more similar X-Git-Tag: v4.3.31~16 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=739852dd3f43fa8eb2a49cdadee2b1c66d79c22c Rearrange produce() and prod() a bit to make them more similar --- diff --git a/src/lib/commands/prod.c b/src/lib/commands/prod.c index 9f7cc8b8d..1bc240855 100644 --- a/src/lib/commands/prod.c +++ b/src/lib/commands/prod.c @@ -72,17 +72,17 @@ prod(void) double real; /* floating pt version of act */ int work; int totpop; - int act; /* actual production */ + int material_consume; /* actual production */ double cost; int i; - int max; /* production w/infinite materials */ + int max_consume; /* production w/infinite materials */ int nsect; double take; double mtake; int there; int unit_work; /* sum of component amounts */ - int used; /* production w/infinite workforce */ - int res_limit; + int mat_limit, res_limit; + int worker_limit; i_type it; i_type vtype; unsigned char *resource; @@ -174,10 +174,6 @@ prod(void) if (eff < 60) continue; - p_e = eff / 100.0; - if (p_e > 1.0) - p_e = 1.0; - if (type == SCT_ENLIST) { int maxmil; int enlisted; @@ -195,7 +191,7 @@ prod(void) } if (enlisted < 0) enlisted = 0; - prprod(sect.sct_x, sect.sct_y, type, p_e, 1.0, work, + prprod(sect.sct_x, sect.sct_y, type, eff / 100.0, 1.0, work, ichr[I_MILIT].i_mnem, enlisted, maxmil, enlisted * 3, "c\0\0", &enlisted, &enlisted, nsect++); continue; @@ -209,32 +205,29 @@ prod(void) resource = (unsigned char *)§ + pp->p_nrndx; else resource = NULL; - used = prod_materials_cost(pp, sect.sct_item, &unit_work); - /* - * sect p_e (inc improvements) - */ + + mat_limit = prod_materials_cost(pp, sect.sct_item, &unit_work); + + /* sector p.e. */ + p_e = eff / 100.0; if (resource) { 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]); - /* - * is production limited by resources or - * workforce? - */ - max = (int)(work * p_e / (double)unit_work + 0.5); + + worker_limit = (int)(work * p_e / (double)unit_work + 0.5); res_limit = prod_resource_limit(pp, resource); - if (max > res_limit) - max = res_limit; - act = MIN(used, max); - real = (double)act * prodeff; - maxr = (double)max * prodeff; + max_consume = res_limit; + if (max_consume > worker_limit) + max_consume = worker_limit; + material_consume = MIN(max_consume, mat_limit); + + prodeff = prod_eff(type, natp->nat_level[pp->p_nlndx]); + real = (double)material_consume * prodeff; + maxr = (double)max_consume * prodeff; if (vtype != I_NONE) { real = MIN(999.0, real); diff --git a/src/lib/update/produce.c b/src/lib/update/produce.c index 2085c36e0..2483aca1f 100644 --- a/src/lib/update/produce.c +++ b/src/lib/update/produce.c @@ -75,29 +75,27 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, material_limit = prod_materials_cost(product, vec, &unit_work); if (material_limit <= 0) return 0; - /* - * calculate production efficiency. - */ + + /* sector p.e. */ p_e = neweff / 100.0; if (resource) { unit_work++; p_e *= *resource / 100.0; } - /* - * determine number that can be made with - * the available workforce - */ if (unit_work == 0) unit_work = 1; - material_consume = material_limit; + worker_limit = roundavg(work * p_e / unit_work); + res_limit = prod_resource_limit(product, resource); + + material_consume = res_limit; if (material_consume > worker_limit) material_consume = worker_limit; - res_limit = prod_resource_limit(product, resource); - if (material_consume > res_limit) - material_consume = res_limit; + if (material_consume > material_limit) + material_consume = material_limit; if (material_consume == 0) return 0; + prodeff = prod_eff(desig, np->nat_level[product->p_nlndx]); if (prodeff <= 0.0 && !player->simulation) { wu(0, sp->sct_own,