Changeset - r7319:94412b8dacf8
[Not reviewed]
master
0 5 0
rubidium - 17 years ago 2007-07-24 19:56:43
rubidium@openttd.org
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
5 files changed with 125 insertions and 76 deletions:
0 comments (0 inline, 0 general)
src/industry.h
Show inline comments
 
@@ -105,7 +105,7 @@ struct Industry {
 
	uint16 last_month_transported[2];   ///< total units transported per cargo in the last full month
 
	uint16 counter;                     ///< used for animation and/or production (if available cargo)
 

	
 
	IndustryType type;                  ///< type of industry. see IT_COAL_MINE and others
 
	IndustryType type;                  ///< type of industry.
 
	OwnerByte owner;                    ///< owner of the industry.  Which SHOULD always be (imho) OWNER_NONE
 
	byte random_color;                  ///< randomized colour of the industry, for display purpose
 
	Year last_prod_year;                ///< last year of production
 
@@ -332,46 +332,6 @@ static inline void DeleteIndustry(Indust
 
extern const Industry **_industry_sort;
 
extern bool _industry_sort_dirty;
 

	
 
enum {
 
	IT_COAL_MINE           =   0,
 
	IT_POWER_STATION       =   1,
 
	IT_SAWMILL             =   2,
 
	IT_FOREST              =   3,
 
	IT_OIL_REFINERY        =   4,
 
	IT_OIL_RIG             =   5,
 
	IT_FACTORY             =   6,
 
	IT_PRINTING_WORKS      =   7,
 
	IT_STEEL_MILL          =   8,
 
	IT_FARM                =   9,
 
	IT_COPPER_MINE         =  10,
 
	IT_OIL_WELL            =  11,
 
	IT_BANK_TEMP           =  12,
 
	IT_FOOD_PROCESS        =  13,
 
	IT_PAPER_MILL          =  14,
 
	IT_GOLD_MINE           =  15,
 
	IT_BANK_TROPIC_ARCTIC  =  16,
 
	IT_DIAMOND_MINE        =  17,
 
	IT_IRON_MINE           =  18,
 
	IT_FRUIT_PLANTATION    =  19,
 
	IT_RUBBER_PLANTATION   =  20,
 
	IT_WATER_SUPPLY        =  21,
 
	IT_WATER_TOWER         =  22,
 
	IT_FACTORY_2           =  23,
 
	IT_FARM_2              =  24,
 
	IT_LUMBER_MILL         =  25,
 
	IT_COTTON_CANDY        =  26,
 
	IT_CANDY_FACTORY       =  27,
 
	IT_BATTERY_FARM        =  28,
 
	IT_COLA_WELLS          =  29,
 
	IT_TOY_SHOP            =  30,
 
	IT_TOY_FACTORY         =  31,
 
	IT_PLASTIC_FOUNTAINS   =  32,
 
	IT_FIZZY_DRINK_FACTORY =  33,
 
	IT_BUBBLE_GENERATOR    =  34,
 
	IT_TOFFEE_QUARRY       =  35,
 
	IT_SUGAR_MINE          =  36,
 
	IT_END,
 
	IT_INVALID             = 255,
 
};
 
static const uint8 IT_INVALID = 255;
 

	
 
#endif /* INDUSTRY_H */
src/industry_cmd.cpp
Show inline comments
 
@@ -1669,7 +1669,7 @@ void GenerateIndustries()
 

	
 
	/* Find the total amount of industries */
 
	if (_opt.diff.number_industries > 0) {
 
		for (it = IT_COAL_MINE; it < NUM_INDUSTRYTYPES; it++) {
 
		for (it = 0; it < NUM_INDUSTRYTYPES; it++) {
 

	
 
			ind_spc = GetIndustrySpec(it);
 

	
 
@@ -1694,7 +1694,7 @@ void GenerateIndustries()
 
	SetGeneratingWorldProgress(GWP_INDUSTRY, i);
 

	
 
	if (_opt.diff.number_industries > 0) {
 
		for (it = IT_COAL_MINE; it < NUM_INDUSTRYTYPES; it++) {
 
		for (it = 0; it < NUM_INDUSTRYTYPES; it++) {
 
			/* Once the number of industries has been determined, let's really create them.
 
			 * The test for chance allows us to try create industries that are available only
 
			 * for this landscape.
src/industry_gui.cpp
Show inline comments
 
@@ -114,7 +114,7 @@ static void BuildDynamicIndustryWndProc(
 

	
 
			/* We'll perform two distinct loops, one for secondary industries, and the other one for
 
			 * primary ones. Each loop will fill the _fund_gui structure. */
 
			for (ind = IT_COAL_MINE; ind < NUM_INDUSTRYTYPES; ind++) {
 
			for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) {
 
				indsp = GetIndustrySpec(ind);
 
				if (indsp->enabled && (!indsp->IsRawIndustry() || _game_mode == GM_EDITOR)) {
 
					_fund_gui.index[_fund_gui.count] = ind;
 
@@ -124,7 +124,7 @@ static void BuildDynamicIndustryWndProc(
 
			}
 

	
 
			if (_patches.raw_industry_construction != 0 && _game_mode != GM_EDITOR) {
 
				for (ind = IT_COAL_MINE; ind < NUM_INDUSTRYTYPES; ind++) {
 
				for (ind = 0; ind < NUM_INDUSTRYTYPES; ind++) {
 
					indsp = GetIndustrySpec(ind);
 
					if (indsp->enabled && indsp->IsRawIndustry()) {
 
						_fund_gui.index[_fund_gui.count] = ind;
src/station_cmd.cpp
Show inline comments
 
@@ -137,6 +137,12 @@ static Station* GetStationAround(TileInd
 
	return (closest_station == INVALID_STATION) ? NULL : GetStation(closest_station);
 
}
 

	
 
/**
 
 * Function to check whether the given tile matches some criterion.
 
 * @param tile the tile to check
 
 * @return true if it matches, false otherwise
 
 */
 
typedef bool (*CMSAMatcher)(TileIndex tile);
 

	
 
/**
 
 * Counts the numbers of tiles matching a specific type in the area around
 
@@ -146,39 +152,85 @@ static Station* GetStationAround(TileInd
 
 *                 in all other cases this parameter is ignored
 
 * @return the result the noumber of matching tiles around
 
 */
 
static int CountMapSquareAround(TileIndex tile, TileType type, IndustryType industry)
 
static int CountMapSquareAround(TileIndex tile, CMSAMatcher cmp)
 
{
 
	int num = 0;
 

	
 
	for (int dx = -3; dx <= 3; dx++) {
 
		for (int dy = -3; dy <= 3; dy++) {
 
			TileIndex cur_tile = TILE_MASK(tile + TileDiffXY(dx, dy));
 

	
 
			if (IsTileType(cur_tile, type)) {
 
				switch (type) {
 
					case MP_INDUSTRY:
 
						if (GetIndustryType(cur_tile) == industry)
 
							num++;
 
						break;
 

	
 
					case MP_WATER:
 
						if (!IsWater(cur_tile))
 
							break;
 
						/* FALL THROUGH WHEN WATER TILE */
 
					case MP_TREES:
 
						num++;
 
						break;
 

	
 
					default:
 
						break;
 
				}
 
			}
 
			if (cmp(TILE_MASK(tile + TileDiffXY(dx, dy)))) num++;
 
		}
 
	}
 

	
 
	return num;
 
}
 

	
 
/**
 
 * Check whether the tile is a mine.
 
 * @param tile the tile to investigate.
 
 * @return true if and only if the tile is a mine
 
 */
 
static bool CMSAMine(TileIndex tile)
 
{
 
	/* No industry */
 
	if (!IsTileType(tile, MP_INDUSTRY)) return false;
 

	
 
	const IndustrySpec *indsp = GetIndustrySpec(GetIndustryByTile(tile)->type);
 

	
 
	/* No extractive industry */
 
	if ((indsp->life_type & INDUSTRYLIFE_EXTRACTIVE) == 0) return false;
 

	
 
	for (uint i = 0; i < lengthof(indsp->produced_cargo); i++) {
 
		/* The industry extracts something non-liquid, i.e. no oil or plastic, so it is a mine */
 
		if (indsp->produced_cargo[i] != CT_INVALID && (GetCargo(indsp->produced_cargo[i])->classes & CC_LIQUID) == 0) return true;
 
	}
 

	
 
	return false;
 
}
 

	
 
/**
 
 * Check whether the tile is water.
 
 * @param tile the tile to investigate.
 
 * @return true if and only if the tile is a mine
 
 */
 
static bool CMSAWater(TileIndex tile)
 
{
 
	return IsTileType(tile, MP_WATER) && IsWater(tile);
 
}
 

	
 
/**
 
 * Check whether the tile is a tree.
 
 * @param tile the tile to investigate.
 
 * @return true if and only if the tile is a mine
 
 */
 
static bool CMSATree(TileIndex tile)
 
{
 
	return IsTileType(tile, MP_TREES);
 
}
 

	
 
/**
 
 * Check whether the tile is a forest.
 
 * @param tile the tile to investigate.
 
 * @return true if and only if the tile is a mine
 
 */
 
static bool CMSAForest(TileIndex tile)
 
{
 
	/* No industry */
 
	if (!IsTileType(tile, MP_INDUSTRY)) return false;
 

	
 
	const IndustrySpec *indsp = GetIndustrySpec(GetIndustryByTile(tile)->type);
 

	
 
	/* No extractive industry */
 
	if ((indsp->life_type & INDUSTRYLIFE_ORGANIC) == 0) return false;
 

	
 
	for (uint i = 0; i < lengthof(indsp->produced_cargo); i++) {
 
		/* The industry produces wood. */
 
		if (indsp->produced_cargo[i] != CT_INVALID && GetCargo(indsp->produced_cargo[i])->label == 'WOOD') return true;
 
	}
 

	
 
	return false;
 
}
 

	
 
#define M(x) ((x) - STR_SV_STNAME)
 

	
 
static bool GenerateStationName(Station *st, TileIndex tile, int flag)
 
@@ -221,11 +273,7 @@ static bool GenerateStationName(Station 
 

	
 
	/* check mine? */
 
	if (HASBIT(free_names, M(STR_SV_STNAME_MINES))) {
 
		if (CountMapSquareAround(tile, MP_INDUSTRY, IT_COAL_MINE) >= 2 ||
 
				CountMapSquareAround(tile, MP_INDUSTRY, IT_IRON_MINE) >= 2 ||
 
				CountMapSquareAround(tile, MP_INDUSTRY, IT_COPPER_MINE) >= 2 ||
 
				CountMapSquareAround(tile, MP_INDUSTRY, IT_GOLD_MINE) >= 2 ||
 
				CountMapSquareAround(tile, MP_INDUSTRY, IT_DIAMOND_MINE) >= 2) {
 
		if (CountMapSquareAround(tile, CMSAMine) >= 2) {
 
			found = M(STR_SV_STNAME_MINES);
 
			goto done;
 
		}
 
@@ -243,15 +291,15 @@ static bool GenerateStationName(Station 
 
	/* Check lakeside */
 
	if (HASBIT(free_names, M(STR_SV_STNAME_LAKESIDE)) &&
 
			DistanceFromEdge(tile) < 20 &&
 
			CountMapSquareAround(tile, MP_WATER, 0) >= 5) {
 
			CountMapSquareAround(tile, CMSAWater) >= 5) {
 
		found = M(STR_SV_STNAME_LAKESIDE);
 
		goto done;
 
	}
 

	
 
	/* Check woods */
 
	if (HASBIT(free_names, M(STR_SV_STNAME_WOODS)) && (
 
				CountMapSquareAround(tile, MP_TREES, 0) >= 8 ||
 
				CountMapSquareAround(tile, MP_INDUSTRY, IT_FOREST) >= 2)
 
				CountMapSquareAround(tile, CMSATree) >= 8 ||
 
				CountMapSquareAround(tile, CMSAForest) >= 2)
 
			) {
 
		found = _opt.landscape == LT_TROPIC ?
 
			M(STR_SV_STNAME_FOREST) : M(STR_SV_STNAME_WOODS);
src/table/build_industry.h
Show inline comments
 
@@ -1091,6 +1091,47 @@ static const uint8 _farm_sounds[] = { SN
 
/** Array with... hem... a sound of toyland */
 
static const uint8 _plastic_mine_sounds[] = { SND_33_PLASTIC_MINE };
 

	
 
enum {
 
	IT_COAL_MINE           =   0,
 
	IT_POWER_STATION       =   1,
 
	IT_SAWMILL             =   2,
 
	IT_FOREST              =   3,
 
	IT_OIL_REFINERY        =   4,
 
	IT_OIL_RIG             =   5,
 
	IT_FACTORY             =   6,
 
	IT_PRINTING_WORKS      =   7,
 
	IT_STEEL_MILL          =   8,
 
	IT_FARM                =   9,
 
	IT_COPPER_MINE         =  10,
 
	IT_OIL_WELL            =  11,
 
	IT_BANK_TEMP           =  12,
 
	IT_FOOD_PROCESS        =  13,
 
	IT_PAPER_MILL          =  14,
 
	IT_GOLD_MINE           =  15,
 
	IT_BANK_TROPIC_ARCTIC  =  16,
 
	IT_DIAMOND_MINE        =  17,
 
	IT_IRON_MINE           =  18,
 
	IT_FRUIT_PLANTATION    =  19,
 
	IT_RUBBER_PLANTATION   =  20,
 
	IT_WATER_SUPPLY        =  21,
 
	IT_WATER_TOWER         =  22,
 
	IT_FACTORY_2           =  23,
 
	IT_FARM_2              =  24,
 
	IT_LUMBER_MILL         =  25,
 
	IT_COTTON_CANDY        =  26,
 
	IT_CANDY_FACTORY       =  27,
 
	IT_BATTERY_FARM        =  28,
 
	IT_COLA_WELLS          =  29,
 
	IT_TOY_SHOP            =  30,
 
	IT_TOY_FACTORY         =  31,
 
	IT_PLASTIC_FOUNTAINS   =  32,
 
	IT_FIZZY_DRINK_FACTORY =  33,
 
	IT_BUBBLE_GENERATOR    =  34,
 
	IT_TOFFEE_QUARRY       =  35,
 
	IT_SUGAR_MINE          =  36,
 
	IT_END,
 
};
 

	
 
/**
 
 * Writes the properties of an industry into the IndustrySpec struct.
 
 * @param tbl  tile table
0 comments (0 inline, 0 general)