mirror of https://github.com/OpenTTD/OpenTTD
(svn r7174) -CodeChange: CheckStationSpreadOut() now uses MergePoint() for bounding rectangle calculation.
parent
ea0018fced
commit
0e290fd388
|
@ -234,37 +234,6 @@ static Station* GetStationAround(TileIndex tile, int w, int h, StationID closest
|
||||||
return (closest_station == INVALID_STATION) ? NULL : GetStation(closest_station);
|
return (closest_station == INVALID_STATION) ? NULL : GetStation(closest_station);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool CheckStationSpreadOut(Station *st, TileIndex tile, int w, int h)
|
|
||||||
{
|
|
||||||
StationID station_index = st->index;
|
|
||||||
uint i;
|
|
||||||
uint x1 = TileX(tile);
|
|
||||||
uint y1 = TileY(tile);
|
|
||||||
uint x2 = x1 + w - 1;
|
|
||||||
uint y2 = y1 + h - 1;
|
|
||||||
uint t;
|
|
||||||
|
|
||||||
for (i = 0; i != MapSize(); i++) {
|
|
||||||
if (IsTileType(i, MP_STATION) && GetStationIndex(i) == station_index) {
|
|
||||||
t = TileX(i);
|
|
||||||
if (t < x1) x1 = t;
|
|
||||||
if (t > x2) x2 = t;
|
|
||||||
|
|
||||||
t = TileY(i);
|
|
||||||
if (t < y1) y1 = t;
|
|
||||||
if (t > y2) y2 = t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (y2 - y1 >= _patches.station_spread || x2 - x1 >= _patches.station_spread) {
|
|
||||||
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Station *AllocateStation(void)
|
static Station *AllocateStation(void)
|
||||||
{
|
{
|
||||||
Station *st = NULL;
|
Station *st = NULL;
|
||||||
|
@ -652,7 +621,7 @@ typedef struct ottd_Rectangle {
|
||||||
uint max_y;
|
uint max_y;
|
||||||
} ottd_Rectangle;
|
} ottd_Rectangle;
|
||||||
|
|
||||||
static void MergePoint(ottd_Rectangle* rect, TileIndex tile)
|
static inline void MergePoint(ottd_Rectangle* rect, TileIndex tile)
|
||||||
{
|
{
|
||||||
uint x = TileX(tile);
|
uint x = TileX(tile);
|
||||||
uint y = TileY(tile);
|
uint y = TileY(tile);
|
||||||
|
@ -763,6 +732,23 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
|
||||||
InvalidateWindowWidget(WC_STATION_VIEW, st->index, 4);
|
InvalidateWindowWidget(WC_STATION_VIEW, st->index, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool CheckStationSpreadOut(Station *st, TileIndex tile, int w, int h)
|
||||||
|
{
|
||||||
|
StationID station_index = st->index;
|
||||||
|
uint x1 = TileX(tile);
|
||||||
|
uint y1 = TileY(tile);
|
||||||
|
ottd_Rectangle r = {x1, y1, x1 + w - 1, y1 + h - 1};
|
||||||
|
// get station bounding rect
|
||||||
|
for (tile = 0; tile < MapSize(); tile++) {
|
||||||
|
if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == station_index) MergePoint(&r, tile);
|
||||||
|
}
|
||||||
|
// check if bounding rect doesn't exceed the maximum station spread
|
||||||
|
if (r.max_x - r.min_x >= _patches.station_spread || r.max_y - r.min_y >= _patches.station_spread) {
|
||||||
|
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static void UpdateStationSignCoord(Station *st)
|
static void UpdateStationSignCoord(Station *st)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue