mirror of https://github.com/OpenTTD/OpenTTD
(svn r10459) -Codechange: add helper functions to determine whether an industry is a primary industry and how much it costs to build such an industry.
parent
472bfba5f8
commit
c86015203a
|
@ -147,6 +147,18 @@ struct IndustrySpec {
|
||||||
uint8 cleanup_flag; ///< flags indicating which data should be freed upon cleaning up
|
uint8 cleanup_flag; ///< flags indicating which data should be freed upon cleaning up
|
||||||
bool enabled; ///< entity still avaible (by default true).newgrf can disable it, though
|
bool enabled; ///< entity still avaible (by default true).newgrf can disable it, though
|
||||||
struct GRFFileProps grf_prop; ///< properties related the the grf file
|
struct GRFFileProps grf_prop; ///< properties related the the grf file
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is an industry with the spec a raw industry?
|
||||||
|
* @return true if it should be handled as a raw industry
|
||||||
|
*/
|
||||||
|
bool IsRawIndustry() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cost for constructing this industry
|
||||||
|
* @return the cost (inflation corrected etc)
|
||||||
|
*/
|
||||||
|
Money GetConstructionCost() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1505,17 +1505,13 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool raw_industry = indspec->accepts_cargo[0] == CT_INVALID && indspec->accepts_cargo[1] == CT_INVALID &&
|
|
||||||
indspec->accepts_cargo[2] == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CUT_TREES);
|
|
||||||
|
|
||||||
/* If the patch for raw-material industries is not on, you cannot build raw-material industries.
|
/* If the patch for raw-material industries is not on, you cannot build raw-material industries.
|
||||||
* Raw material industries are industries that do not accept cargo (at least for now)
|
* Raw material industries are industries that do not accept cargo (at least for now) */
|
||||||
* Exclude the lumber mill (only "raw" industry that can be built) */
|
if (_patches.raw_industry_construction == 0 && indspec->IsRawIndustry()) {
|
||||||
if (raw_industry && _patches.raw_industry_construction == 0) {
|
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raw_industry && _patches.raw_industry_construction == 2) {
|
if (_patches.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
/* Prospecting has a chance to fail, however we cannot guarantee that something can
|
/* Prospecting has a chance to fail, however we cannot guarantee that something can
|
||||||
* be built on the map, so the chance gets lower when the map is fuller, but there
|
* be built on the map, so the chance gets lower when the map is fuller, but there
|
||||||
|
@ -1539,7 +1535,7 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
|
if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CommandCost((_price.build_industry >> 8) * ((_patches.raw_industry_construction == 1) ? indspec->raw_industry_cost_multiplier : indspec->cost_multiplier));
|
return CommandCost(indspec->GetConstructionCost());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1895,6 +1891,23 @@ void InitializeIndustries()
|
||||||
_industry_sound_tile = 0;
|
_industry_sound_tile = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IndustrySpec::IsRawIndustry() const
|
||||||
|
{
|
||||||
|
/* Lumber mills are extractive/organic, but can always be built like a non-raw industry */
|
||||||
|
return (this->life_type & (INDUSTRYLIFE_EXTRACTIVE | INDUSTRYLIFE_ORGANIC)) != 0 &&
|
||||||
|
(this->behaviour & INDUSTRYBEH_CUT_TREES) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Money IndustrySpec::GetConstructionCost() const
|
||||||
|
{
|
||||||
|
return (_price.build_industry *
|
||||||
|
(_patches.raw_industry_construction == 1 && this->IsRawIndustry() ?
|
||||||
|
this->raw_industry_cost_multiplier :
|
||||||
|
this->cost_multiplier
|
||||||
|
)) >> 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern const TileTypeProcs _tile_type_industry_procs = {
|
extern const TileTypeProcs _tile_type_industry_procs = {
|
||||||
DrawTile_Industry, /* draw_tile_proc */
|
DrawTile_Industry, /* draw_tile_proc */
|
||||||
GetSlopeZ_Industry, /* get_slope_z_proc */
|
GetSlopeZ_Industry, /* get_slope_z_proc */
|
||||||
|
|
|
@ -39,7 +39,7 @@ static void BuildIndustryWndProc(Window *w, WindowEvent *e)
|
||||||
if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
|
if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
|
||||||
int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1];
|
int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1];
|
||||||
|
|
||||||
SetDParam(0, (_price.build_industry >> 8) * (_patches.raw_industry_construction == 1 ? GetIndustrySpec(ind_type)->raw_industry_cost_multiplier : GetIndustrySpec(ind_type)->cost_multiplier));
|
SetDParam(0, GetIndustrySpec(ind_type)->GetConstructionCost());
|
||||||
DrawStringCentered(85, w->height - 21, STR_482F_COST, 0);
|
DrawStringCentered(85, w->height - 21, STR_482F_COST, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue