mirror of https://github.com/OpenTTD/OpenTTD
(svn r16966) -Codechange: BEGIN_TILE_LOOP and END_TILE_LOOP reworked into TILE_LOOP, which means no more duplication of parameters between BEGIN_TILE_LOOP and END_TILE_LOOP
parent
47a37b6093
commit
2ec12a3f58
|
@ -142,11 +142,11 @@
|
||||||
if (!HasHeliport(industry_id)) return INVALID_TILE;
|
if (!HasHeliport(industry_id)) return INVALID_TILE;
|
||||||
|
|
||||||
const Industry *ind = ::Industry::Get(industry_id);
|
const Industry *ind = ::Industry::Get(industry_id);
|
||||||
BEGIN_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy);
|
TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy) {
|
||||||
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
||||||
return tile_cur;
|
return tile_cur;
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy);
|
}
|
||||||
|
|
||||||
return INVALID_TILE;
|
return INVALID_TILE;
|
||||||
}
|
}
|
||||||
|
@ -164,11 +164,11 @@
|
||||||
if (!HasDock(industry_id)) return INVALID_TILE;
|
if (!HasDock(industry_id)) return INVALID_TILE;
|
||||||
|
|
||||||
const Industry *ind = ::Industry::Get(industry_id);
|
const Industry *ind = ::Industry::Get(industry_id);
|
||||||
BEGIN_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy);
|
TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy) {
|
||||||
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
||||||
return tile_cur;
|
return tile_cur;
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy);
|
}
|
||||||
|
|
||||||
return INVALID_TILE;
|
return INVALID_TILE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,9 +192,9 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
|
||||||
return st->truck_stops->xy;
|
return st->truck_stops->xy;
|
||||||
} else if (st->airport_tile != INVALID_TILE) {
|
} else if (st->airport_tile != INVALID_TILE) {
|
||||||
const AirportFTAClass *fta = st->Airport();
|
const AirportFTAClass *fta = st->Airport();
|
||||||
BEGIN_TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile) {
|
TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile) {
|
||||||
if (!::IsHangar(tile)) return tile;
|
if (!::IsHangar(tile)) return tile;
|
||||||
} END_TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile)
|
}
|
||||||
}
|
}
|
||||||
return INVALID_TILE;
|
return INVALID_TILE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,7 @@ void AITileList::AddRectangle(TileIndex t1, TileIndex t2)
|
||||||
uint w = TileX(t2) - TileX(t1) + 1;
|
uint w = TileX(t2) - TileX(t1) + 1;
|
||||||
uint h = TileY(t2) - TileY(t1) + 1;
|
uint h = TileY(t2) - TileY(t1) + 1;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(t, w, h, t1) {
|
TILE_LOOP(t, w, h, t1) this->AddItem(t);
|
||||||
this->AddItem(t);
|
|
||||||
} END_TILE_LOOP(t, w, h, t1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AITileList::AddTile(TileIndex tile)
|
void AITileList::AddTile(TileIndex tile)
|
||||||
|
@ -56,9 +54,7 @@ void AITileList::RemoveRectangle(TileIndex t1, TileIndex t2)
|
||||||
uint w = TileX(t2) - TileX(t1) + 1;
|
uint w = TileX(t2) - TileX(t1) + 1;
|
||||||
uint h = TileY(t2) - TileY(t1) + 1;
|
uint h = TileY(t2) - TileY(t1) + 1;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(t, w, h, t1) {
|
TILE_LOOP(t, w, h, t1) this->RemoveItem(t);
|
||||||
this->RemoveItem(t);
|
|
||||||
} END_TILE_LOOP(t, w, h, t1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AITileList::RemoveTile(TileIndex tile)
|
void AITileList::RemoveTile(TileIndex tile)
|
||||||
|
@ -85,7 +81,7 @@ AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_i
|
||||||
|
|
||||||
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
|
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
|
TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
|
||||||
if (!::IsValidTile(cur_tile)) continue;
|
if (!::IsValidTile(cur_tile)) continue;
|
||||||
/* Exclude all tiles that belong to this industry */
|
/* Exclude all tiles that belong to this industry */
|
||||||
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;
|
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;
|
||||||
|
@ -102,7 +98,7 @@ AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_i
|
||||||
}
|
}
|
||||||
|
|
||||||
this->AddTile(cur_tile);
|
this->AddTile(cur_tile);
|
||||||
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius))
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_id, int radius)
|
AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_id, int radius)
|
||||||
|
@ -122,7 +118,7 @@ AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_i
|
||||||
|
|
||||||
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
|
if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
|
TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) {
|
||||||
if (!::IsValidTile(cur_tile)) continue;
|
if (!::IsValidTile(cur_tile)) continue;
|
||||||
/* Exclude all tiles that belong to this industry */
|
/* Exclude all tiles that belong to this industry */
|
||||||
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;
|
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue;
|
||||||
|
@ -139,7 +135,7 @@ AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_i
|
||||||
}
|
}
|
||||||
|
|
||||||
this->AddTile(cur_tile);
|
this->AddTile(cur_tile);
|
||||||
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius))
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AITileList_StationType::AITileList_StationType(StationID station_id, AIStation::StationType station_type)
|
AITileList_StationType::AITileList_StationType(StationID station_id, AIStation::StationType station_type)
|
||||||
|
@ -157,10 +153,10 @@ AITileList_StationType::AITileList_StationType(StationID station_id, AIStation::
|
||||||
if ((station_type & AIStation::STATION_AIRPORT) != 0) station_type_value |= (1 << ::STATION_AIRPORT) | (1 << ::STATION_OILRIG);
|
if ((station_type & AIStation::STATION_AIRPORT) != 0) station_type_value |= (1 << ::STATION_AIRPORT) | (1 << ::STATION_OILRIG);
|
||||||
if ((station_type & AIStation::STATION_DOCK) != 0) station_type_value |= (1 << ::STATION_DOCK) | (1 << ::STATION_OILRIG);
|
if ((station_type & AIStation::STATION_DOCK) != 0) station_type_value |= (1 << ::STATION_DOCK) | (1 << ::STATION_OILRIG);
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(cur_tile, rect->right - rect->left + 1, rect->bottom - rect->top + 1, ::TileXY(rect->left, rect->top)) {
|
TILE_LOOP(cur_tile, rect->right - rect->left + 1, rect->bottom - rect->top + 1, ::TileXY(rect->left, rect->top)) {
|
||||||
if (!::IsTileType(cur_tile, MP_STATION)) continue;
|
if (!::IsTileType(cur_tile, MP_STATION)) continue;
|
||||||
if (::GetStationIndex(cur_tile) != station_id) continue;
|
if (::GetStationIndex(cur_tile) != station_id) continue;
|
||||||
if (!HasBit(station_type_value, ::GetStationType(cur_tile))) continue;
|
if (!HasBit(station_type_value, ::GetStationType(cur_tile))) continue;
|
||||||
this->AddTile(cur_tile);
|
this->AddTile(cur_tile);
|
||||||
} END_TILE_LOOP(cur_tile, rect->right - rect->left + 1, rect->bottom - rect->top + 1, ::TileXY(rect->left, rect->top))
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,7 @@ Industry::~Industry()
|
||||||
* This means that we do not have to clear tiles either. */
|
* This means that we do not have to clear tiles either. */
|
||||||
if (this->width == 0) return;
|
if (this->width == 0) return;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile_cur, this->width, this->height, this->xy);
|
TILE_LOOP(tile_cur, this->width, this->height, this->xy) {
|
||||||
if (IsTileType(tile_cur, MP_INDUSTRY)) {
|
if (IsTileType(tile_cur, MP_INDUSTRY)) {
|
||||||
if (GetIndustryIndex(tile_cur) == this->index) {
|
if (GetIndustryIndex(tile_cur) == this->index) {
|
||||||
/* MakeWaterKeepingClass() can also handle 'land' */
|
/* MakeWaterKeepingClass() can also handle 'land' */
|
||||||
|
@ -149,17 +149,17 @@ Industry::~Industry()
|
||||||
} else if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
} else if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) {
|
||||||
DeleteOilRig(tile_cur);
|
DeleteOilRig(tile_cur);
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile_cur, this->width, this->height, this->xy);
|
}
|
||||||
|
|
||||||
if (GetIndustrySpec(this->type)->behaviour & INDUSTRYBEH_PLANT_FIELDS) {
|
if (GetIndustrySpec(this->type)->behaviour & INDUSTRYBEH_PLANT_FIELDS) {
|
||||||
/* Remove the farmland and convert it to regular tiles over time. */
|
/* Remove the farmland and convert it to regular tiles over time. */
|
||||||
BEGIN_TILE_LOOP(tile_cur, 42, 42, this->xy - TileDiffXY(21, 21)) {
|
TILE_LOOP(tile_cur, 42, 42, this->xy - TileDiffXY(21, 21)) {
|
||||||
tile_cur = TILE_MASK(tile_cur);
|
tile_cur = TILE_MASK(tile_cur);
|
||||||
if (IsTileType(tile_cur, MP_CLEAR) && IsClearGround(tile_cur, CLEAR_FIELDS) &&
|
if (IsTileType(tile_cur, MP_CLEAR) && IsClearGround(tile_cur, CLEAR_FIELDS) &&
|
||||||
GetIndustryIndexOfField(tile_cur) == this->index) {
|
GetIndustryIndexOfField(tile_cur) == this->index) {
|
||||||
SetIndustryIndexOfField(tile_cur, INVALID_INDUSTRY);
|
SetIndustryIndexOfField(tile_cur, INVALID_INDUSTRY);
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_cur, 42, 42, this->xy - TileDiff(21, 21))
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* don't let any disaster vehicle target invalid industry */
|
/* don't let any disaster vehicle target invalid industry */
|
||||||
|
@ -957,10 +957,10 @@ static void PlantFarmField(TileIndex tile, IndustryID industry)
|
||||||
|
|
||||||
/* check the amount of bad tiles */
|
/* check the amount of bad tiles */
|
||||||
count = 0;
|
count = 0;
|
||||||
BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
|
TILE_LOOP(cur_tile, size_x, size_y, tile) {
|
||||||
assert(cur_tile < MapSize());
|
assert(cur_tile < MapSize());
|
||||||
count += IsBadFarmFieldTile(cur_tile);
|
count += IsBadFarmFieldTile(cur_tile);
|
||||||
END_TILE_LOOP(cur_tile, size_x, size_y, tile)
|
}
|
||||||
if (count * 2 >= size_x * size_y) return;
|
if (count * 2 >= size_x * size_y) return;
|
||||||
|
|
||||||
/* determine type of field */
|
/* determine type of field */
|
||||||
|
@ -969,14 +969,14 @@ static void PlantFarmField(TileIndex tile, IndustryID industry)
|
||||||
field_type = GB(r, 8, 8) * 9 >> 8;
|
field_type = GB(r, 8, 8) * 9 >> 8;
|
||||||
|
|
||||||
/* make field */
|
/* make field */
|
||||||
BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
|
TILE_LOOP(cur_tile, size_x, size_y, tile) {
|
||||||
assert(cur_tile < MapSize());
|
assert(cur_tile < MapSize());
|
||||||
if (!IsBadFarmFieldTile2(cur_tile)) {
|
if (!IsBadFarmFieldTile2(cur_tile)) {
|
||||||
MakeField(cur_tile, field_type, industry);
|
MakeField(cur_tile, field_type, industry);
|
||||||
SetClearCounter(cur_tile, counter);
|
SetClearCounter(cur_tile, counter);
|
||||||
MarkTileDirtyByTile(cur_tile);
|
MarkTileDirtyByTile(cur_tile);
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(cur_tile, size_x, size_y, tile)
|
}
|
||||||
|
|
||||||
type = 3;
|
type = 3;
|
||||||
if (_settings_game.game_creation.landscape != LT_ARCTIC && _settings_game.game_creation.landscape != LT_TROPIC) {
|
if (_settings_game.game_creation.landscape != LT_ARCTIC && _settings_game.game_creation.landscape != LT_TROPIC) {
|
||||||
|
@ -1340,7 +1340,7 @@ static bool CheckCanTerraformSurroundingTiles(TileIndex tile, uint height, int i
|
||||||
if (TileX(tile) == 0 || TileY(tile) == 0 || GetTileType(tile) == MP_VOID) return false;
|
if (TileX(tile) == 0 || TileY(tile) == 0 || GetTileType(tile) == MP_VOID) return false;
|
||||||
|
|
||||||
tile += TileDiffXY(-1, -1);
|
tile += TileDiffXY(-1, -1);
|
||||||
BEGIN_TILE_LOOP(tile_walk, size_x, size_y, tile) {
|
TILE_LOOP(tile_walk, size_x, size_y, tile) {
|
||||||
curh = TileHeight(tile_walk);
|
curh = TileHeight(tile_walk);
|
||||||
/* Is the tile clear? */
|
/* Is the tile clear? */
|
||||||
if ((GetTileType(tile_walk) != MP_CLEAR) && (GetTileType(tile_walk) != MP_TREES))
|
if ((GetTileType(tile_walk) != MP_CLEAR) && (GetTileType(tile_walk) != MP_TREES))
|
||||||
|
@ -1356,7 +1356,7 @@ static bool CheckCanTerraformSurroundingTiles(TileIndex tile, uint height, int i
|
||||||
if (TileX(tile_walk) == 0 || TileY(tile_walk) == 0 || !CheckCanTerraformSurroundingTiles(tile_walk + TileDiffXY(-1, -1), height, internal + 1))
|
if (TileX(tile_walk) == 0 || TileY(tile_walk) == 0 || !CheckCanTerraformSurroundingTiles(tile_walk + TileDiffXY(-1, -1), height, internal + 1))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_walk, size_x, size_y, tile);
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1399,7 +1399,7 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags,
|
||||||
CompanyID old_company = _current_company;
|
CompanyID old_company = _current_company;
|
||||||
_current_company = OWNER_TOWN;
|
_current_company = OWNER_TOWN;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile_walk, size_x, size_y, cur_tile) {
|
TILE_LOOP(tile_walk, size_x, size_y, cur_tile) {
|
||||||
curh = TileHeight(tile_walk);
|
curh = TileHeight(tile_walk);
|
||||||
if (curh != h) {
|
if (curh != h) {
|
||||||
/* This tile needs terraforming. Check if we can do that without
|
/* This tile needs terraforming. Check if we can do that without
|
||||||
|
@ -1415,11 +1415,11 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
|
}
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
/* Terraform the land under the industry */
|
/* Terraform the land under the industry */
|
||||||
BEGIN_TILE_LOOP(tile_walk, size_x, size_y, cur_tile) {
|
TILE_LOOP(tile_walk, size_x, size_y, cur_tile) {
|
||||||
curh = TileHeight(tile_walk);
|
curh = TileHeight(tile_walk);
|
||||||
while (curh != h) {
|
while (curh != h) {
|
||||||
/* We give the terraforming for free here, because we can't calculate
|
/* We give the terraforming for free here, because we can't calculate
|
||||||
|
@ -1428,7 +1428,7 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags,
|
||||||
DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
|
DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
|
||||||
curh += (curh > h) ? -1 : 1;
|
curh += (curh > h) ? -1 : 1;
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_current_company = old_company;
|
_current_company = old_company;
|
||||||
|
|
|
@ -327,7 +327,7 @@ uint DistanceMaxPlusManhattan(TileIndex, TileIndex); ///< Max + Manhattan
|
||||||
uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map
|
uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts a loop which iterates to a square of tiles
|
* A loop which iterates to a square of tiles
|
||||||
*
|
*
|
||||||
* This macro starts 2 nested loops which iterates over a square of tiles.
|
* This macro starts 2 nested loops which iterates over a square of tiles.
|
||||||
*
|
*
|
||||||
|
@ -336,22 +336,10 @@ uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the ma
|
||||||
* @param h The heigth (y-width) of the square
|
* @param h The heigth (y-width) of the square
|
||||||
* @param tile The start tile of the square
|
* @param tile The start tile of the square
|
||||||
*/
|
*/
|
||||||
#define BEGIN_TILE_LOOP(var, w, h, tile) \
|
#define TILE_LOOP(var, w, h, tile) \
|
||||||
{ \
|
for (uint var = tile, cur_h = (h); cur_h > 0; --cur_h, var += TileDiffXY(0, 1) - (w)) \
|
||||||
int h_cur = h; \
|
for (uint cur_w = (w); cur_w > 0; --cur_w, var++)
|
||||||
uint var = tile; \
|
|
||||||
do { \
|
|
||||||
int w_cur = w; \
|
|
||||||
do {
|
|
||||||
/**
|
|
||||||
* Ends the square-loop used before
|
|
||||||
*
|
|
||||||
* @see BEGIN_TILE_LOOP
|
|
||||||
*/
|
|
||||||
#define END_TILE_LOOP(var, w, h, tile) \
|
|
||||||
} while (++var, --w_cur != 0); \
|
|
||||||
} while (var += TileDiffXY(0, 1) - (w), --h_cur != 0); \
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Convert a DiagDirection to a TileIndexDiff
|
* Convert a DiagDirection to a TileIndexDiff
|
||||||
*
|
*
|
||||||
|
|
|
@ -389,7 +389,7 @@ bool StartStopIndustryTileAnimation(const Industry *ind, IndustryAnimationTrigge
|
||||||
{
|
{
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
uint32 random = Random();
|
uint32 random = Random();
|
||||||
BEGIN_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
|
TILE_LOOP(tile, ind->width, ind->height, ind->xy) {
|
||||||
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
|
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
|
||||||
if (StartStopIndustryTileAnimation(tile, iat, random)) {
|
if (StartStopIndustryTileAnimation(tile, iat, random)) {
|
||||||
SB(random, 0, 16, Random());
|
SB(random, 0, 16, Random());
|
||||||
|
@ -397,7 +397,7 @@ bool StartStopIndustryTileAnimation(const Industry *ind, IndustryAnimationTrigge
|
||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -433,9 +433,9 @@ void TriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger)
|
||||||
|
|
||||||
void TriggerIndustry(Industry *ind, IndustryTileTrigger trigger)
|
void TriggerIndustry(Industry *ind, IndustryTileTrigger trigger)
|
||||||
{
|
{
|
||||||
BEGIN_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
|
TILE_LOOP(tile, ind->width, ind->height, ind->xy) {
|
||||||
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
|
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
|
||||||
DoTriggerIndustryTile(tile, trigger, ind);
|
DoTriggerIndustryTile(tile, trigger, ind);
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -415,9 +415,9 @@ bool StationRect::BeforeAddRect(TileIndex tile, int w, int h, StationRectMode mo
|
||||||
int width = right_a - left_a + 1;
|
int width = right_a - left_a + 1;
|
||||||
int height = bottom_a - top_a + 1;
|
int height = bottom_a - top_a + 1;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile, width, height, top_left)
|
TILE_LOOP(tile, width, height, top_left) {
|
||||||
if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == st_id) return true;
|
if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == st_id) return true;
|
||||||
END_TILE_LOOP(tile, width, height, top_left);
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ static uint GetNumRoadStopsInStation(const Station *st, RoadStopType type)
|
||||||
static Station *GetStationAround(TileIndex tile, int w, int h, StationID closest_station)
|
static Station *GetStationAround(TileIndex tile, int w, int h, StationID closest_station)
|
||||||
{
|
{
|
||||||
/* check around to see if there's any stations there */
|
/* check around to see if there's any stations there */
|
||||||
BEGIN_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1))
|
TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1)) {
|
||||||
if (IsTileType(tile_cur, MP_STATION)) {
|
if (IsTileType(tile_cur, MP_STATION)) {
|
||||||
StationID t = GetStationIndex(tile_cur);
|
StationID t = GetStationIndex(tile_cur);
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ static Station *GetStationAround(TileIndex tile, int w, int h, StationID closest
|
||||||
return CHECK_STATIONS_ERR;
|
return CHECK_STATIONS_ERR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1))
|
}
|
||||||
return (closest_station == INVALID_STATION) ? NULL : Station::Get(closest_station);
|
return (closest_station == INVALID_STATION) ? NULL : Station::Get(closest_station);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,7 +649,7 @@ CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, DoCommandFlag fla
|
||||||
CommandCost cost(EXPENSES_CONSTRUCTION);
|
CommandCost cost(EXPENSES_CONSTRUCTION);
|
||||||
int allowed_z = -1;
|
int allowed_z = -1;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
|
TILE_LOOP(tile_cur, w, h, tile) {
|
||||||
if (MayHaveBridgeAbove(tile_cur) && IsBridgeAbove(tile_cur)) {
|
if (MayHaveBridgeAbove(tile_cur) && IsBridgeAbove(tile_cur)) {
|
||||||
return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST);
|
return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST);
|
||||||
}
|
}
|
||||||
|
@ -709,7 +709,7 @@ CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, DoCommandFlag fla
|
||||||
if (CmdFailed(ret)) return ret;
|
if (CmdFailed(ret)) return ret;
|
||||||
cost.AddCost(ret);
|
cost.AddCost(ret);
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_cur, w, h, tile)
|
}
|
||||||
|
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
@ -735,12 +735,12 @@ static bool CanExpandRailStation(const Station *st, TileArea &cur_ta, Axis axis)
|
||||||
} else {
|
} else {
|
||||||
/* do not allow modifying non-uniform stations,
|
/* do not allow modifying non-uniform stations,
|
||||||
* the uniform-stations code wouldn't handle it well */
|
* the uniform-stations code wouldn't handle it well */
|
||||||
BEGIN_TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile)
|
TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile) {
|
||||||
if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station
|
if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station
|
||||||
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED;
|
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile)
|
}
|
||||||
|
|
||||||
/* check so the orientation is the same */
|
/* check so the orientation is the same */
|
||||||
if (GetRailStationAxis(st->train_station.tile) != axis) {
|
if (GetRailStationAxis(st->train_station.tile) != axis) {
|
||||||
|
@ -1147,7 +1147,7 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, DoCommandFlag flags, ui
|
||||||
SmallVector<Station *, 4> affected_stations;
|
SmallVector<Station *, 4> affected_stations;
|
||||||
|
|
||||||
/* Do the action for every tile into the area */
|
/* Do the action for every tile into the area */
|
||||||
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
|
TILE_LOOP(tile2, size_x, size_y, tile) {
|
||||||
/* Make sure the specified tile is a railroad station */
|
/* Make sure the specified tile is a railroad station */
|
||||||
if (!IsRailStationTile(tile2)) {
|
if (!IsRailStationTile(tile2)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1208,7 +1208,7 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, DoCommandFlag flags, ui
|
||||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), true);
|
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile2, size_x, size_y, tile)
|
}
|
||||||
|
|
||||||
for (Station **stp = affected_stations.Begin(); stp != affected_stations.End(); stp++) {
|
for (Station **stp = affected_stations.Begin(); stp != affected_stations.End(); stp++) {
|
||||||
Station *st = *stp;
|
Station *st = *stp;
|
||||||
|
@ -1837,10 +1837,10 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
{
|
{
|
||||||
const byte *b = _airport_sections[p1];
|
const byte *b = _airport_sections[p1];
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
|
TILE_LOOP(tile_cur, w, h, tile) {
|
||||||
MakeAirport(tile_cur, st->owner, st->index, *b);
|
MakeAirport(tile_cur, st->owner, st->index, *b);
|
||||||
b++;
|
b++;
|
||||||
} END_TILE_LOOP(tile_cur, w, h, tile)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
st->UpdateVirtCoord();
|
st->UpdateVirtCoord();
|
||||||
|
@ -1886,14 +1886,14 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
|
||||||
if (a->targetairport == st->index && a->state != FLYING) return CMD_ERROR;
|
if (a->targetairport == st->index && a->state != FLYING) return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
|
TILE_LOOP(tile_cur, w, h, tile) {
|
||||||
if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
|
if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
DeleteAnimatedTile(tile_cur);
|
DeleteAnimatedTile(tile_cur);
|
||||||
DoClearSquare(tile_cur);
|
DoClearSquare(tile_cur);
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile_cur, w, h, tile)
|
}
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
for (uint i = 0; i < afc->nof_depots; ++i) {
|
for (uint i = 0; i < afc->nof_depots; ++i) {
|
||||||
|
|
|
@ -1132,9 +1132,9 @@ static const Station *FindStationsNearby(TileArea ta, bool distant_join)
|
||||||
_deleted_stations_nearby.Clear();
|
_deleted_stations_nearby.Clear();
|
||||||
|
|
||||||
/* Check the inside, to return, if we sit on another station */
|
/* Check the inside, to return, if we sit on another station */
|
||||||
BEGIN_TILE_LOOP(t, ta.w, ta.h, ta.tile)
|
TILE_LOOP(t, ta.w, ta.h, ta.tile) {
|
||||||
if (t < MapSize() && IsTileType(t, MP_STATION) && Station::IsValidID(GetStationIndex(t))) return Station::GetByTile(t);
|
if (t < MapSize() && IsTileType(t, MP_STATION) && Station::IsValidID(GetStationIndex(t))) return Station::GetByTile(t);
|
||||||
END_TILE_LOOP(t, ta.w, ta.h, ta.tile)
|
}
|
||||||
|
|
||||||
/* Look for deleted stations */
|
/* Look for deleted stations */
|
||||||
const BaseStation *st;
|
const BaseStation *st;
|
||||||
|
|
|
@ -385,7 +385,7 @@ CommandCost CmdLevelLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
Money money = GetAvailableMoneyForCommand();
|
Money money = GetAvailableMoneyForCommand();
|
||||||
CommandCost cost(EXPENSES_CONSTRUCTION);
|
CommandCost cost(EXPENSES_CONSTRUCTION);
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
|
TILE_LOOP(tile2, size_x, size_y, tile) {
|
||||||
uint curh = TileHeight(tile2);
|
uint curh = TileHeight(tile2);
|
||||||
while (curh != h) {
|
while (curh != h) {
|
||||||
CommandCost ret = DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
|
CommandCost ret = DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
|
||||||
|
@ -403,7 +403,7 @@ CommandCost CmdLevelLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
cost.AddCost(ret);
|
cost.AddCost(ret);
|
||||||
curh += (curh > h) ? -1 : 1;
|
curh += (curh > h) ? -1 : 1;
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile2, size_x, size_y, tile)
|
}
|
||||||
|
|
||||||
return (cost.GetCost() == 0) ? CMD_ERROR : cost;
|
return (cost.GetCost() == 0) ? CMD_ERROR : cost;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,11 +58,11 @@ static void GenerateDesertArea(TileIndex end, TileIndex start)
|
||||||
size_y = (ey - sy) + 1;
|
size_y = (ey - sy) + 1;
|
||||||
|
|
||||||
_generating_world = true;
|
_generating_world = true;
|
||||||
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
||||||
SetTropicZone(tile, (_ctrl_pressed) ? TROPICZONE_NORMAL : TROPICZONE_DESERT);
|
SetTropicZone(tile, (_ctrl_pressed) ? TROPICZONE_NORMAL : TROPICZONE_DESERT);
|
||||||
DoCommandP(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
|
DoCommandP(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
|
||||||
MarkTileDirtyByTile(tile);
|
MarkTileDirtyByTile(tile);
|
||||||
} END_TILE_LOOP(tile, size_x, size_y, 0);
|
}
|
||||||
_generating_world = false;
|
_generating_world = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ static void GenerateRockyArea(TileIndex end, TileIndex start)
|
||||||
size_x = (ex - sx) + 1;
|
size_x = (ex - sx) + 1;
|
||||||
size_y = (ey - sy) + 1;
|
size_y = (ey - sy) + 1;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
||||||
switch (GetTileType(tile)) {
|
switch (GetTileType(tile)) {
|
||||||
case MP_TREES:
|
case MP_TREES:
|
||||||
if (GetTreeGround(tile) == TREE_GROUND_SHORE) continue;
|
if (GetTreeGround(tile) == TREE_GROUND_SHORE) continue;
|
||||||
|
@ -96,7 +96,7 @@ static void GenerateRockyArea(TileIndex end, TileIndex start)
|
||||||
}
|
}
|
||||||
MarkTileDirtyByTile(tile);
|
MarkTileDirtyByTile(tile);
|
||||||
success = true;
|
success = true;
|
||||||
} END_TILE_LOOP(tile, size_x, size_y, 0);
|
}
|
||||||
|
|
||||||
if (success) SndPlayTileFx(SND_1F_SPLAT, end);
|
if (success) SndPlayTileFx(SND_1F_SPLAT, end);
|
||||||
}
|
}
|
||||||
|
@ -410,22 +410,22 @@ static void CommonRaiseLowerBigLand(TileIndex tile, int mode)
|
||||||
if (mode != 0) {
|
if (mode != 0) {
|
||||||
/* Raise land */
|
/* Raise land */
|
||||||
h = 15; // XXX - max height
|
h = 15; // XXX - max height
|
||||||
BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
|
TILE_LOOP(tile2, sizex, sizey, tile) {
|
||||||
h = min(h, TileHeight(tile2));
|
h = min(h, TileHeight(tile2));
|
||||||
} END_TILE_LOOP(tile2, sizex, sizey, tile)
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Lower land */
|
/* Lower land */
|
||||||
h = 0;
|
h = 0;
|
||||||
BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
|
TILE_LOOP(tile2, sizex, sizey, tile) {
|
||||||
h = max(h, TileHeight(tile2));
|
h = max(h, TileHeight(tile2));
|
||||||
} END_TILE_LOOP(tile2, sizex, sizey, tile)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
|
TILE_LOOP(tile2, sizex, sizey, tile) {
|
||||||
if (TileHeight(tile2) == h) {
|
if (TileHeight(tile2) == h) {
|
||||||
DoCommandP(tile2, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND);
|
DoCommandP(tile2, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND);
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile2, sizex, sizey, tile)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -370,9 +370,9 @@ static bool IsRadioTowerNearby(TileIndex tile)
|
||||||
uint w = min(TileX(tile), 4U) + 1 + min(MapMaxX() - TileX(tile), 4U);
|
uint w = min(TileX(tile), 4U) + 1 + min(MapMaxX() - TileX(tile), 4U);
|
||||||
uint h = min(TileY(tile), 4U) + 1 + min(MapMaxY() - TileY(tile), 4U);
|
uint h = min(TileY(tile), 4U) + 1 + min(MapMaxY() - TileY(tile), 4U);
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile, w, h, tile_s)
|
TILE_LOOP(tile, w, h, tile_s) {
|
||||||
if (IsTransmitterTile(tile)) return true;
|
if (IsTransmitterTile(tile)) return true;
|
||||||
END_TILE_LOOP(tile, w, h, tile_s)
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,7 +307,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
/* Outside the editor you can only drag canals, and not areas */
|
/* Outside the editor you can only drag canals, and not areas */
|
||||||
if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR;
|
if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR;
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
||||||
CommandCost ret;
|
CommandCost ret;
|
||||||
|
|
||||||
Slope slope = GetTileSlope(tile, NULL);
|
Slope slope = GetTileSlope(tile, NULL);
|
||||||
|
@ -335,7 +335,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
cost.AddCost(_price.clear_water);
|
cost.AddCost(_price.clear_water);
|
||||||
} END_TILE_LOOP(tile, size_x, size_y, 0);
|
}
|
||||||
|
|
||||||
if (cost.GetCost() == 0) {
|
if (cost.GetCost() == 0) {
|
||||||
return_cmd_error(STR_ERROR_ALREADY_BUILT);
|
return_cmd_error(STR_ERROR_ALREADY_BUILT);
|
||||||
|
@ -749,11 +749,11 @@ static void FloodVehicles(TileIndex tile)
|
||||||
if (!_settings_game.station.nonuniform_stations && IsTileType(tile, MP_STATION) && GetStationType(tile) == STATION_RAIL) {
|
if (!_settings_game.station.nonuniform_stations && IsTileType(tile, MP_STATION) && GetStationType(tile) == STATION_RAIL) {
|
||||||
const Station *st = Station::GetByTile(tile);
|
const Station *st = Station::GetByTile(tile);
|
||||||
|
|
||||||
BEGIN_TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile)
|
TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile) {
|
||||||
if (st->TileBelongsToRailStation(t)) {
|
if (st->TileBelongsToRailStation(t)) {
|
||||||
FindVehicleOnPos(tile, &z, &FloodVehicleProc);
|
FindVehicleOnPos(tile, &z, &FloodVehicleProc);
|
||||||
}
|
}
|
||||||
END_TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile)
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue