(svn r18717) -Codechange: use TileArea in industry instead of three separate variables. Also make use of TileArea functions for determining the 'width' and 'height' of an industry.

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
rubidium 15 years ago
parent 71f2789270
commit 87466a4ed0

@ -115,7 +115,7 @@
{
if (!IsValidIndustry(industry_id)) return INVALID_TILE;
return ::Industry::Get(industry_id)->xy;
return ::Industry::Get(industry_id)->location.tile;
}
/* static */ int32 AIIndustry::GetAmountOfStationsAround(IndustryID industry_id)
@ -124,7 +124,7 @@
Industry *ind = ::Industry::Get(industry_id);
StationList stations;
::FindStationsAroundTiles(TileArea(ind->xy, ind->width, ind->height), &stations);
::FindStationsAroundTiles(ind->location, &stations);
return (int32)stations.Length();
}
@ -162,7 +162,7 @@
if (!HasHeliport(industry_id)) return INVALID_TILE;
const Industry *ind = ::Industry::Get(industry_id);
TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy) {
TILE_LOOP(tile_cur, ind->location.w, ind->location.h, ind->location.tile) {
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
return tile_cur;
}
@ -184,7 +184,7 @@
if (!HasDock(industry_id)) return INVALID_TILE;
const Industry *ind = ::Industry::Get(industry_id);
TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy) {
TILE_LOOP(tile_cur, ind->location.w, ind->location.h, ind->location.tile) {
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
return tile_cur;
}

@ -86,7 +86,7 @@ AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_i
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
TILE_LOOP(cur_tile, i->location.w + radius * 2, i->location.h+ radius * 2, i->location.tile - ::TileDiffXY(radius, radius)) {
if (!::IsValidTile(cur_tile)) continue;
/* Exclude all tiles that belong to this industry */
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;
@ -123,7 +123,7 @@ AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_i
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
TILE_LOOP(cur_tile, i->location.w + radius * 2, i->location.h+ radius * 2, i->location.tile - ::TileDiffXY(radius, radius)) {
if (!::IsValidTile(cur_tile)) continue;
/* Exclude all tiles that belong to this industry */
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;

@ -401,8 +401,8 @@ static bool DisasterTick_Aircraft(DisasterVehicle *v, uint16 image_override, boo
if (v->current_order.GetDestination() == 2) {
if (GB(v->tick_counter, 0, 2) == 0) {
Industry *i = Industry::Get(v->dest_tile); // Industry destructor calls ReleaseDisastersTargetingIndustry, so this is valid
int x = TileX(i->xy) * TILE_SIZE;
int y = TileY(i->xy) * TILE_SIZE;
int x = TileX(i->location.tile) * TILE_SIZE;
int y = TileY(i->location.tile) * TILE_SIZE;
uint32 r = Random();
CreateEffectVehicleAbove(
@ -423,7 +423,7 @@ static bool DisasterTick_Aircraft(DisasterVehicle *v, uint16 image_override, boo
SetDParam(0, i->town->index);
AddIndustryNewsItem(news_message, NS_ACCIDENT, i->index); // delete the news, when the industry closes
SndPlayTileFx(SND_12_EXPLOSION, i->xy);
SndPlayTileFx(SND_12_EXPLOSION, i->location.tile);
}
} else if (v->current_order.GetDestination() == 0) {
int x = v->x_pos - (15 * TILE_SIZE);
@ -742,7 +742,7 @@ static void Disaster_Airplane_Init()
/* Start from the bottom (south side) of the map */
int x = (MapSizeX() + 9) * TILE_SIZE - 1;
int y = TileY(found->xy) * TILE_SIZE + 37;
int y = TileY(found->location.tile) * TILE_SIZE + 37;
InitializeDisasterVehicle(v, x, y, 135, DIR_NE, ST_AIRPLANE);
@ -772,7 +772,7 @@ static void Disaster_Helicopter_Init()
DisasterVehicle *v = new DisasterVehicle();
int x = -16 * TILE_SIZE;
int y = TileY(found->xy) * TILE_SIZE + 37;
int y = TileY(found->location.tile) * TILE_SIZE + 37;
InitializeDisasterVehicle(v, x, y, 135, DIR_SW, ST_HELICOPTER);
@ -861,10 +861,10 @@ static void Disaster_CoalMine_Init()
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CAN_SUBSIDENCE) && --index < 0) {
SetDParam(0, i->town->index);
AddNewsItem(STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE,
NS_ACCIDENT, NR_TILE, i->xy + TileDiffXY(1, 1)); // keep the news, even when the mine closes
NS_ACCIDENT, NR_TILE, i->location.tile + TileDiffXY(1, 1)); // keep the news, even when the mine closes
{
TileIndex tile = i->xy;
TileIndex tile = i->location.tile;
TileIndexDiff step = TileOffsByDiagDir((DiagDirection)GB(Random(), 0, 2));
for (uint n = 0; n < 30; n++) {

@ -896,7 +896,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
/* Check if industry temporarily refuses acceptance */
if (HasBit(indspec->callback_mask, CBM_IND_REFUSE_CARGO)) {
uint16 res = GetIndustryCallback(CBID_INDUSTRY_REFUSE_CARGO, 0, GetReverseCargoTranslation(cargo_type, indspec->grf_prop.grffile), ind, ind->type, ind->xy);
uint16 res = GetIndustryCallback(CBID_INDUSTRY_REFUSE_CARGO, 0, GetReverseCargoTranslation(cargo_type, indspec->grf_prop.grffile), ind, ind->type, ind->location.tile);
if (res == 0) continue;
}

@ -22,6 +22,7 @@
#include "tile_type.h"
#include "subsidy_type.h"
#include "industry_map.h"
#include "tilearea_type.h"
typedef Pool<Industry, IndustryID, 64, 64000> IndustryPool;
@ -33,9 +34,7 @@ extern IndustryPool _industry_pool;
struct Industry : IndustryPool::PoolItem<&_industry_pool> {
typedef PersistentStorageArray<uint32, 16> PersistentStorage;
TileIndex xy; ///< coordinates of the primary tile the industry is built one
byte width;
byte height;
TileArea location; ///< Location of the industry
const Town *town; ///< Nearest town
CargoID produced_cargo[2]; ///< 2 production cargo slots
uint16 produced_cargo_waiting[2]; ///< amount of cargo produced per cargo
@ -69,7 +68,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> {
PersistentStorage psa; ///< Persistent storage for NewGRF industries.
Industry(TileIndex tile = INVALID_TILE) : xy(tile) {}
Industry(TileIndex tile = INVALID_TILE) : location(tile, 0, 0) {}
~Industry();
/**

@ -142,9 +142,9 @@ Industry::~Industry()
/* Industry can also be destroyed when not fully initialized.
* This means that we do not have to clear tiles either. */
if (this->width == 0) return;
if (this->location.w == 0) return;
TILE_LOOP(tile_cur, this->width, this->height, this->xy) {
TILE_LOOP(tile_cur, this->location.w, this->location.h, this->location.tile) {
if (IsTileType(tile_cur, MP_INDUSTRY)) {
if (GetIndustryIndex(tile_cur) == this->index) {
/* MakeWaterKeepingClass() can also handle 'land' */
@ -163,7 +163,7 @@ Industry::~Industry()
if (GetIndustrySpec(this->type)->behaviour & INDUSTRYBEH_PLANT_FIELDS) {
/* Remove the farmland and convert it to regular tiles over time. */
TILE_LOOP(tile_cur, 42, 42, this->xy - TileDiffXY(21, 21)) {
TILE_LOOP(tile_cur, 42, 42, this->location.tile - TileDiffXY(21, 21)) {
tile_cur = TILE_MASK(tile_cur);
if (IsTileType(tile_cur, MP_CLEAR) && IsClearGround(tile_cur, CLEAR_FIELDS) &&
GetIndustryIndexOfField(tile_cur) == this->index) {
@ -509,7 +509,7 @@ static void TransportIndustryGoods(TileIndex tile)
const IndustrySpec *indspec = GetIndustrySpec(i->type);
bool moved_cargo = false;
StationFinder stations(TileArea(i->xy, i->width, i->height));
StationFinder stations(i->location);
for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) {
uint cw = min(i->produced_cargo_waiting[j], 255);
@ -1043,10 +1043,10 @@ static void PlantFarmField(TileIndex tile, IndustryID industry)
void PlantRandomFarmField(const Industry *i)
{
int x = i->width / 2 + Random() % 31 - 16;
int y = i->height / 2 + Random() % 31 - 16;
int x = i->location.w / 2 + Random() % 31 - 16;
int y = i->location.h / 2 + Random() % 31 - 16;
TileIndex tile = TileAddWrap(i->xy, x, y);
TileIndex tile = TileAddWrap(i->location.tile, x, y);
if (tile != INVALID_TILE) PlantFarmField(tile, i->index);
}
@ -1082,7 +1082,7 @@ static bool SearchLumberMillTrees(TileIndex tile, void *user_data)
*/
static void ChopLumberMillTrees(Industry *i)
{
TileIndex tile = i->xy;
TileIndex tile = i->location.tile;
if (!IsIndustryCompleted(tile)) return; ///< Can't proceed if not completed
@ -1101,7 +1101,7 @@ static void ProduceIndustryGoods(Industry *i)
if (Chance16R(1, 14, r) && (num = indsp->number_of_sounds) != 0) {
SndPlayTileFx(
(SoundFx)(indsp->random_sounds[((r >> 16) * num) >> 16]),
i->xy);
i->location.tile);
}
}
@ -1118,7 +1118,7 @@ static void ProduceIndustryGoods(Industry *i)
if ((indbehav & INDUSTRYBEH_PLANT_FIELDS) != 0) {
bool plant;
if (HasBit(indsp->callback_mask, CBM_IND_SPECIAL_EFFECT)) {
plant = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, Random(), 0, i, i->type, i->xy) != 0);
plant = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, Random(), 0, i, i->type, i->location.tile) != 0);
} else {
plant = Chance16(1, 8);
}
@ -1128,7 +1128,7 @@ static void ProduceIndustryGoods(Industry *i)
if ((indbehav & INDUSTRYBEH_CUT_TREES) != 0) {
bool cut = ((i->counter & 0x1FF) == 0);
if (HasBit(indsp->callback_mask, CBM_IND_SPECIAL_EFFECT)) {
cut = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, 0, 1, i, i->type, i->xy) != 0);
cut = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, 0, 1, i, i->type, i->location.tile) != 0);
}
if (cut) ChopLumberMillTrees(i);
@ -1499,7 +1499,7 @@ static bool CheckIfFarEnoughFromIndustry(TileIndex tile, int type)
FOR_ALL_INDUSTRIES(i) {
/* Within 14 tiles from another industry is considered close */
bool in_low_distance = DistanceMax(tile, i->xy) <= 14;
bool in_low_distance = DistanceMax(tile, i->location.tile) <= 14;
/* check if an industry that accepts the same goods is nearby */
if (in_low_distance &&
@ -1541,8 +1541,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
uint32 r;
uint j;
i->xy = tile;
i->width = i->height = 0;
i->location = TileArea(tile, 1, 1);
i->type = type;
IncIndustryTypeCount(type);
@ -1629,12 +1628,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
if (it->gfx != GFX_WATERTILE_SPECIALCHECK) {
byte size;
size = it->ti.x;
if (size > i->width) i->width = size;
size = it->ti.y;
if (size > i->height)i->height = size;
i->location.Add(cur_tile);
WaterClass wc = (IsWaterTile(cur_tile) ? GetWaterClass(cur_tile) : WATER_CLASS_INVALID);
@ -1654,9 +1648,6 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
}
} while ((++it)->ti.x != -0x80);
i->width++;
i->height++;
if (GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_PLANT_ON_BUILT) {
for (j = 0; j != 50; j++) PlantRandomFarmField(i);
}
@ -2031,7 +2022,7 @@ static void CanCargoServiceIndustry(CargoID cargo, Industry *ind, bool *c_accept
if (HasBit(indspec->callback_mask, CBM_IND_REFUSE_CARGO)) {
uint16 res = GetIndustryCallback(CBID_INDUSTRY_REFUSE_CARGO,
0, GetReverseCargoTranslation(cargo, indspec->grf_prop.grffile),
ind, ind->type, ind->xy);
ind, ind->type, ind->location.tile);
if (res == 0) continue;
}
*c_accepts = true;
@ -2066,7 +2057,7 @@ static int WhoCanServiceIndustry(Industry *ind)
{
/* Find all stations within reach of the industry */
StationList stations;
FindStationsAroundTiles(TileArea(ind->xy, ind->width, ind->height), &stations);
FindStationsAroundTiles(ind->location, &stations);
if (stations.Length() == 0) return 0; // No stations found at all => nobody services
@ -2168,7 +2159,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
bool callback_enabled = HasBit(indspec->callback_mask, monthly ? CBM_IND_MONTHLYPROD_CHANGE : CBM_IND_PRODUCTION_CHANGE);
if (callback_enabled) {
uint16 res = GetIndustryCallback(monthly ? CBID_INDUSTRY_MONTHLYPROD_CHANGE : CBID_INDUSTRY_PRODUCTION_CHANGE, 0, Random(), i, i->type, i->xy);
uint16 res = GetIndustryCallback(monthly ? CBID_INDUSTRY_MONTHLYPROD_CHANGE : CBID_INDUSTRY_PRODUCTION_CHANGE, 0, Random(), i, i->type, i->location.tile);
if (res != CALLBACK_FAILED) { // failed callback means "do nothing"
suppress_message = HasBit(res, 7);
/* Get the custom message if any */
@ -2343,7 +2334,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
AddNewsItem(str,
ns,
closeit ? NR_TILE : NR_INDUSTRY,
closeit ? i->xy + TileDiffXY(1, 1) : i->index);
closeit ? i->location.tile + TileDiffXY(1, 1) : i->index);
}
}

@ -63,7 +63,7 @@ static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind,
{
suffix[0] = '\0';
if (HasBit(indspec->callback_mask, CBM_IND_CARGO_SUFFIX)) {
uint16 callback = GetIndustryCallback(CBID_INDUSTRY_CARGO_SUFFIX, 0, (cst << 8) | cargo, const_cast<Industry *>(ind), ind_type, (cst != CST_FUND) ? ind->xy : INVALID_TILE);
uint16 callback = GetIndustryCallback(CBID_INDUSTRY_CARGO_SUFFIX, 0, (cst << 8) | cargo, const_cast<Industry *>(ind), ind_type, (cst != CST_FUND) ? ind->location.tile : INVALID_TILE);
if (GB(callback, 0, 8) != 0xFF) {
PrepareTextRefStackUsage(6);
GetString(suffix, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), suffix_last);
@ -580,7 +580,7 @@ public:
this->InitNested(desc, window_number);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(IVW_VIEWPORT);
nvp->InitializeViewport(this, Industry::Get(window_number)->xy + TileDiffXY(1, 1), ZOOM_LVL_INDUSTRY);
nvp->InitializeViewport(this, Industry::Get(window_number)->location.tile + TileDiffXY(1, 1), ZOOM_LVL_INDUSTRY);
}
virtual void OnPaint()
@ -674,7 +674,7 @@ public:
/* Get the extra message for the GUI */
if (HasBit(ind->callback_mask, CBM_IND_WINDOW_MORE_TEXT)) {
uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_WINDOW_MORE_TEXT, 0, 0, i, i->type, i->xy);
uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_WINDOW_MORE_TEXT, 0, 0, i, i->type, i->location.tile);
if (callback_res != CALLBACK_FAILED) {
StringID message = GetGRFStringID(ind->grf_prop.grffile->grfid, 0xD000 + callback_res);
if (message != STR_NULL && message != STR_UNDEFINED) {
@ -747,9 +747,9 @@ public:
case IVW_GOTO:
i = Industry::Get(this->window_number);
if (_ctrl_pressed) {
ShowExtraViewPortWindow(i->xy + TileDiffXY(1, 1));
ShowExtraViewPortWindow(i->location.tile + TileDiffXY(1, 1));
} else {
ScrollMainWindowToTile(i->xy + TileDiffXY(1, 1));
ScrollMainWindowToTile(i->location.tile + TileDiffXY(1, 1));
}
break;
}
@ -1124,9 +1124,9 @@ public:
p = y + this->vscroll.GetPosition();
if (p < this->industries.Length()) {
if (_ctrl_pressed) {
ShowExtraViewPortWindow(this->industries[p]->xy);
ShowExtraViewPortWindow(this->industries[p]->location.tile);
} else {
ScrollMainWindowToTile(this->industries[p]->xy);
ScrollMainWindowToTile(this->industries[p]->location.tile);
}
}
} break;

@ -92,7 +92,7 @@ static uint32 GetClosestIndustry(TileIndex tile, IndustryType type, const Indust
FOR_ALL_INDUSTRIES(i) {
if (i->type != type || i == current) continue;
best_dist = min(best_dist, DistanceManhattan(tile, i->xy));
best_dist = min(best_dist, DistanceManhattan(tile, i->location.tile));
}
return best_dist;
@ -132,7 +132,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
if (layout_filter == 0) {
/* If the filter is 0, it could be because none was specified as well as being really a 0.
* In either case, just do the regular var67 */
closest_dist = GetClosestIndustry(current->xy, ind_index, current);
closest_dist = GetClosestIndustry(current->location.tile, ind_index, current);
count = GetIndustryTypeCount(ind_index);
} else {
/* Count only those who match the same industry type and layout filter
@ -140,7 +140,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
const Industry *i;
FOR_ALL_INDUSTRIES(i) {
if (i->type == ind_index && i != current && i->selected_layout == layout_filter) {
closest_dist = min(closest_dist, DistanceManhattan(current->xy, i->xy));
closest_dist = min(closest_dist, DistanceManhattan(current->location.tile, i->location.tile));
count++;
}
}
@ -235,7 +235,7 @@ uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte par
case 0x46: return industry->construction_date; // Date when built - long format - (in days)
/* Get industry ID at offset param */
case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, industry->xy), industry);
case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, industry->location.tile), industry);
/* Get random tile bits at offset param */
case 0x61:
@ -269,15 +269,15 @@ uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte par
case 0x7C: return industry->psa.Get(parameter);
/* Industry structure access*/
case 0x80: return industry->xy;
case 0x81: return GB(industry->xy, 8, 8);
case 0x80: return industry->location.tile;
case 0x81: return GB(industry->location.tile, 8, 8);
/* Pointer to the town the industry is associated with */
case 0x82: return industry->town->index;
case 0x83:
case 0x84:
case 0x85: DEBUG(grf, 0, "NewGRFs shouldn't be doing pointer magic"); break; // not supported
case 0x86: return industry->width;
case 0x87: return industry->height;// xy dimensions
case 0x86: return industry->location.w;
case 0x87: return industry->location.h;// xy dimensions
case 0x88:
case 0x89: return industry->produced_cargo[variable - 0x88];
@ -455,8 +455,8 @@ bool CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, uint itspe
Industry ind;
ind.index = INVALID_INDUSTRY;
ind.xy = tile;
ind.width = 0;
ind.location.tile = tile;
ind.location.w = 0;
ind.type = type;
ind.selected_layout = itspec_index;
ind.town = ClosestTownFromTile(tile, UINT_MAX);
@ -516,7 +516,7 @@ void IndustryProductionCallback(Industry *ind, int reason)
{
const IndustrySpec *spec = GetIndustrySpec(ind->type);
ResolverObject object;
NewIndustryResolver(&object, ind->xy, ind, ind->type);
NewIndustryResolver(&object, ind->location.tile, ind, ind->type);
if ((spec->behaviour & INDUSTRYBEH_PRODCALLBACK_RANDOM) != 0) object.callback_param1 = Random();
int multiplier = 1;
if ((spec->behaviour & INDUSTRYBEH_PROD_MULTI_HNDLING) != 0) multiplier = ind->prod_level;

@ -86,7 +86,7 @@ static uint32 IndustryTileGetVariable(const ResolverObject *object, byte variabl
case 0x42: return GetTownRadiusGroup(ClosestTownFromTile(tile, UINT_MAX), tile);
/* Relative position */
case 0x43: return GetRelativePosition(tile, inds->xy);
case 0x43: return GetRelativePosition(tile, inds->location.tile);
/* Animation frame. Like house variable 46 but can contain anything 0..FF. */
case 0x44: return (IsTileType(tile, MP_INDUSTRY)) ? GetIndustryAnimationState(tile) : 0;
@ -271,8 +271,8 @@ bool PerformIndustryTileSlopeCheck(TileIndex ind_base_tile, TileIndex ind_tile,
{
Industry ind;
ind.index = INVALID_INDUSTRY;
ind.xy = ind_base_tile;
ind.width = 0;
ind.location.tile = ind_base_tile;
ind.location.w = 0;
ind.type = type;
uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_SHAPE_CHECK, 0, itspec_index, gfx, &ind, ind_tile);
@ -396,7 +396,7 @@ bool StartStopIndustryTileAnimation(const Industry *ind, IndustryAnimationTrigge
{
bool ret = true;
uint32 random = Random();
TILE_LOOP(tile, ind->width, ind->height, ind->xy) {
TILE_LOOP(tile, ind->location.w, ind->location.h, ind->location.tile) {
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
if (StartStopIndustryTileAnimation(tile, iat, random)) {
SB(random, 0, 16, Random());
@ -441,7 +441,7 @@ void TriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger)
void TriggerIndustry(Industry *ind, IndustryTileTrigger trigger)
{
TILE_LOOP(tile, ind->width, ind->height, ind->xy) {
TILE_LOOP(tile, ind->location.w, ind->location.h, ind->location.tile) {
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
DoTriggerIndustryTile(tile, trigger, ind);
}

@ -63,7 +63,7 @@ static TileIndex GetReferenceTile(NewsReferenceType reftype, uint32 ref)
switch (reftype) {
case NR_TILE: return (TileIndex)ref;
case NR_STATION: return Station::Get((StationID)ref)->xy;
case NR_INDUSTRY: return Industry::Get((IndustryID)ref)->xy + TileDiffXY(1, 1);
case NR_INDUSTRY: return Industry::Get((IndustryID)ref)->location.tile + TileDiffXY(1, 1);
case NR_TOWN: return Town::Get((TownID)ref)->xy;
default: return INVALID_TILE;
}

@ -17,10 +17,10 @@
#include "saveload.h"
static const SaveLoad _industry_desc[] = {
SLE_CONDVAR(Industry, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
SLE_CONDVAR(Industry, xy, SLE_UINT32, 6, SL_MAX_VERSION),
SLE_VAR(Industry, width, SLE_UINT8),
SLE_VAR(Industry, height, SLE_UINT8),
SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION),
SLE_VAR(Industry, location.w, SLE_UINT8),
SLE_VAR(Industry, location.h, SLE_UINT8),
SLE_REF(Industry, town, REF_TOWN),
SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo
SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, SL_MAX_VERSION),

@ -776,10 +776,10 @@ static bool LoadOldStation(LoadgameState *ls, int num)
}
static const OldChunks industry_chunk[] = {
OCL_SVAR( OC_TILE, Industry, xy ),
OCL_SVAR( OC_TILE, Industry, location.tile ),
OCL_VAR ( OC_UINT32, 1, &_old_town_index ),
OCL_SVAR( OC_UINT8, Industry, width ),
OCL_SVAR( OC_UINT8, Industry, height ),
OCL_SVAR( OC_UINT8, Industry, location.w ),
OCL_SVAR( OC_UINT8, Industry, location.h ),
OCL_NULL( 2 ), ///< used to be industry's produced_cargo
OCL_SVAR( OC_TTD | OC_UINT16, Industry, produced_cargo_waiting[0] ),
@ -825,7 +825,7 @@ static bool LoadOldIndustry(LoadgameState *ls, int num)
Industry *i = new (num) Industry();
if (!LoadChunk(ls, i, industry_chunk)) return false;
if (i->xy != 0) {
if (i->location.tile != 0) {
i->town = Town::Get(RemapTownIndex(_old_town_index));
if (_savegame_type == SGT_TTO) {

@ -236,7 +236,7 @@ static Subsidy *FindSubsidyCargoRoute()
/* Only want big towns */
if (t->population < SUBSIDY_CARGO_MIN_POPULATION) return NULL;
if (DistanceManhattan(i->xy, t->xy) > SUBSIDY_MAX_DISTANCE) return NULL;
if (DistanceManhattan(i->location.tile, t->xy) > SUBSIDY_MAX_DISTANCE) return NULL;
dst = t->index;
} else {
@ -252,7 +252,7 @@ static Subsidy *FindSubsidyCargoRoute()
return NULL;
}
if (DistanceManhattan(i->xy, i2->xy) > SUBSIDY_MAX_DISTANCE) return NULL;
if (DistanceManhattan(i->location.tile, i2->location.tile) > SUBSIDY_MAX_DISTANCE) return NULL;
dst = i2->index;
}

@ -83,7 +83,7 @@ struct SubsidyListWindow : Window {
/* determine src coordinate for subsidy and try to scroll to it */
TileIndex xy;
switch (s->src_type) {
case ST_INDUSTRY: xy = Industry::Get(s->src)->xy; break;
case ST_INDUSTRY: xy = Industry::Get(s->src)->location.tile; break;
case ST_TOWN: xy = Town::Get(s->src)->xy; break;
default: NOT_REACHED();
}
@ -93,7 +93,7 @@ struct SubsidyListWindow : Window {
/* otherwise determine dst coordinate for subsidy and scroll to it */
switch (s->dst_type) {
case ST_INDUSTRY: xy = Industry::Get(s->dst)->xy; break;
case ST_INDUSTRY: xy = Industry::Get(s->dst)->location.tile; break;
case ST_TOWN: xy = Town::Get(s->dst)->xy; break;
default: NOT_REACHED();
}

Loading…
Cancel
Save