Changeset - r7608:77bc663268b5
[Not reviewed]
master
0 2 0
belugas - 17 years ago 2007-09-22 00:59:27
belugas@openttd.org
(svn r11137) -Feature: [NewGRF] Add support for bit 17 of property 1A for Industries. This bit enables the protection of the last instance of an industry type once raise.
2 files changed with 27 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/industry.h
Show inline comments
 
@@ -81,6 +81,7 @@ enum IndustyBehaviour {
 
	INDUSTRYBEH_AIRPLANE_ATTACKS      = 1 << 11, ///< can be exploded by a military airplane (oil refinery)
 
	INDUSTRYBEH_CHOPPER_ATTACKS       = 1 << 12, ///< can be exploded by a military helicopter (factory)
 
	INDUSTRYBEH_CAN_SUBSIDENCE        = 1 << 13, ///< can cause a subsidence (coal mine, shaft that collapses)
 
	INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type
 
};
 

	
 

	
src/industry_cmd.cpp
Show inline comments
 
@@ -1694,6 +1694,24 @@ void GenerateIndustries()
 
	}
 
}
 

	
 
/**
 
 * Protects an industry from closure if the appropriate flags and conditions are met
 
 * INDUSTRYBEH_CANCLOSE_LASTINSTANCE must be set (which, by default, it is not) and the
 
 * count of industries of this type must one (or lower) in order to be protected
 
 * against closure.
 
 * @param type IndustryType been queried
 
 * @result true if protection is on, false otherwise (except for oil wells)
 
 */
 
static bool CheckIndustryCloseDownProtection(IndustryType type)
 
{
 
	const IndustrySpec *indspec = GetIndustrySpec(type);
 

	
 
	/* oil wells (or the industries with that flag set) are always allowed to closedown */
 
	if (indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD && _opt.landscape == LT_TEMPERATE) return false;
 
	return (indspec->behaviour & INDUSTRYBEH_CANCLOSE_LASTINSTANCE && GetIndustryTypeCount(type) <= 1);
 
}
 

	
 

	
 
/** Change industry production or do closure
 
 * @param i Industry for which changes are performed
 
 */
 
@@ -1752,7 +1770,7 @@ static void ExtChangeIndustryProduction(
 
	}
 

	
 
	/* If industry will be closed down, show this */
 
	if (closeit) {
 
	if (closeit && !CheckIndustryCloseDownProtection(i->type)) {
 
		i->prod_level = 0;
 
		SetDParam(0, i->index);
 
		AddNewsItem(
 
@@ -1895,8 +1913,12 @@ static void ChangeIndustryProduction(Ind
 
			} else {
 
				/* Decrease production */
 
				if (i->prod_level == 4) {
 
					i->prod_level = 0;
 
					str = indspec->closure_text;
 
					/* Really set the production to 0 when the industrytype allows it,
 
					 * since it is equivalent to closing it. */
 
					if (!CheckIndustryCloseDownProtection(i->type)) {
 
						i->prod_level = 0;
 
						str = indspec->closure_text;
 
					}
 
				} else {
 
					i->prod_level >>= 1;
 
					i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
 
@@ -1909,7 +1931,7 @@ static void ChangeIndustryProduction(Ind
 
	}
 
	if (indspec->life_type & INDUSTRYLIFE_PROCESSING) {
 
		/* maybe close */
 
		if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
 
		if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2) && !CheckIndustryCloseDownProtection(i->type)) {
 
			i->prod_level = 0;
 
			str = indspec->closure_text;
 
		}
0 comments (0 inline, 0 general)