src/industry_cmd.cpp
changeset 7144 8e73641511f3
parent 7132 0af71cb216ff
child 7145 0bb6d7c2de2f
--- a/src/industry_cmd.cpp	Tue Jul 03 17:34:43 2007 +0000
+++ b/src/industry_cmd.cpp	Tue Jul 03 19:16:34 2007 +0000
@@ -1622,56 +1622,52 @@
 	int j;
 	const IndustrySpec *indspec = GetIndustrySpec(i->type);
 
-	switch (indspec->life_type) {
-		case INDUSTRYLIFE_NOT_CLOSABLE:
-			return;
-
-		case INDUSTRYLIFE_CLOSABLE:
-			if ((byte)(_cur_year - i->last_prod_year) < 5 || !CHANCE16(1, 180))
-				closeit = false;
-			break;
-
-		default: /* INDUSTRY_PRODUCTION */
-			for (j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
-				uint32 r = Random();
-				int old_prod, new_prod, percent;
-				int mag;
-
-				new_prod = old_prod = i->production_rate[j];
-
-				if (CHANCE16I(20, 1024, r)) new_prod -= max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
-				/* Chance of increasing becomes better when more is transported */
-				if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16) &&
-						((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) == 0 || _opt.landscape != LT_TEMPERATE)) {
-					new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
-				}
+	if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
 
-				new_prod = clamp(new_prod, 1, 255);
-				/* Do not stop closing the industry when it has the lowest possible production rate */
-				if (new_prod == old_prod && old_prod > 1) {
-					closeit = false;
-					continue;
-				}
-
-				percent = new_prod * 100 / old_prod - 100;
-				i->production_rate[j] = new_prod;
-
-				/* Close the industry when it has the lowest possible production rate */
-				if (new_prod > 1) closeit = false;
+	if (HASBIT(indspec->life_type, INDUSTRYLIFE_ORGANIC) || HASBIT(indspec->life_type, INDUSTRYLIFE_EXTRACTIVE)) {
+		for (j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
+			uint32 r = Random();
+			int old_prod, new_prod, percent;
+			int mag;
 
-				mag = abs(percent);
-				if (mag >= 10) {
-					SetDParam(2, mag);
-					SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
-					SetDParam(1, i->index);
-					AddNewsItem(
-						percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
-						NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
-						i->xy + TileDiffXY(1, 1), 0
-					);
-				}
+			new_prod = old_prod = i->production_rate[j];
+
+			if (CHANCE16I(20, 1024, r)) new_prod -= max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
+			/* Chance of increasing becomes better when more is transported */
+			if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16) &&
+					((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) == 0 || _opt.landscape != LT_TEMPERATE)) {
+				new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
 			}
-			break;
+
+			new_prod = clamp(new_prod, 1, 255);
+			/* Do not stop closing the industry when it has the lowest possible production rate */
+			if (new_prod == old_prod && old_prod > 1) {
+				closeit = false;
+				continue;
+			}
+
+			percent = (old_prod == 0) ? 100 : (new_prod * 100 / old_prod - 100);
+			i->production_rate[j] = new_prod;
+
+			/* Close the industry when it has the lowest possible production rate */
+			if (new_prod > 1) closeit = false;
+
+			mag = abs(percent);
+			if (mag >= 10) {
+				SetDParam(2, mag);
+				SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
+				SetDParam(1, i->index);
+				AddNewsItem(
+					percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
+					NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
+					i->xy + TileDiffXY(1, 1), 0
+				);
+			}
+		}
+	}
+
+	if (HASBIT(indspec->life_type, INDUSTRYLIFE_PROCESSING)) {
+		if ((byte)(_cur_year - i->last_prod_year) < 5 || !CHANCE16(1, 180)) closeit = false;
 	}
 
 	/* If industry will be closed down, show this */
@@ -1785,59 +1781,55 @@
 	int type = i->type;
 	const IndustrySpec *indspec = GetIndustrySpec(type);
 
-	switch (indspec->life_type) {
-		case INDUSTRYLIFE_NOT_CLOSABLE:
-			return;
-
-		case INDUSTRYLIFE_PRODUCTION:
-			/* decrease or increase */
-			if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
-				only_decrease = true;
-
-			if (only_decrease || CHANCE16(1, 3)) {
-				/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
-				if (!only_decrease && (i->last_month_pct_transported[0] > 153) != CHANCE16(1, 3)) {
-					/* Increase production */
-					if (i->prod_level != 0x80) {
-						byte b;
-
-						i->prod_level <<= 1;
+	if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
 
-						b = i->production_rate[0] * 2;
-						if (i->production_rate[0] >= 128)
-							b = 0xFF;
-						i->production_rate[0] = b;
-
-						b = i->production_rate[1] * 2;
-						if (i->production_rate[1] >= 128)
-							b = 0xFF;
-						i->production_rate[1] = b;
+	if (HASBIT(indspec->life_type, INDUSTRYLIFE_ORGANIC) || HASBIT(indspec->life_type, INDUSTRYLIFE_EXTRACTIVE)) {
+		/* decrease or increase */
+		if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
+			only_decrease = true;
 
-						str = indspec->production_up_text;
-					}
+		if (only_decrease || CHANCE16(1, 3)) {
+			/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
+			if (!only_decrease && (i->last_month_pct_transported[0] > 153) != CHANCE16(1, 3)) {
+				/* Increase production */
+				if (i->prod_level != 0x80) {
+					byte b;
+
+					i->prod_level <<= 1;
+
+					b = i->production_rate[0] * 2;
+					if (i->production_rate[0] >= 128)
+						b = 0xFF;
+					i->production_rate[0] = b;
+
+					b = i->production_rate[1] * 2;
+					if (i->production_rate[1] >= 128)
+						b = 0xFF;
+					i->production_rate[1] = b;
+
+					str = indspec->production_up_text;
+				}
+			} else {
+				/* Decrease production */
+				if (i->prod_level == 4) {
+					i->prod_level = 0;
+					str = indspec->closure_text;
 				} else {
-					/* Decrease production */
-					if (i->prod_level == 4) {
-						i->prod_level = 0;
-						str = indspec->closure_text;
-					} else {
-						i->prod_level >>= 1;
-						i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
-						i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
+					i->prod_level >>= 1;
+					i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
+					i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
 
-						str = indspec->production_down_text;
-					}
+					str = indspec->production_down_text;
 				}
 			}
-			break;
-
-		case INDUSTRYLIFE_CLOSABLE:
-			/* maybe close */
-			if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
-				i->prod_level = 0;
-				str = indspec->closure_text;
-			}
-			break;
+		}
+	}
+	if (HASBIT(indspec->life_type, INDUSTRYLIFE_PROCESSING)) {
+		/* maybe close */
+		if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
+			i->prod_level = 0;
+			str = indspec->closure_text;
+		}
 	}
 
 	if (str != STR_NULL) {