diff --git a/src/base_station_base.h b/src/base_station_base.h --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -94,6 +94,17 @@ struct BaseStation : StationPool::PoolIt { return BaseStation::Get(GetStationIndex(tile)); } + + /** + * Check whether the base station currently is in use; in use means + * that it is not scheduled for deletion and that it still has some + * facilities left. + * @return true if still in use + */ + FORCEINLINE bool IsInUse() const + { + return (this->facilities & ~FACIL_WAYPOINT) != 0; + } }; #define FOR_ALL_BASE_STATIONS(var) FOR_ALL_ITEMS_FROM(BaseStation, station_index, var, 0) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2570,7 +2570,7 @@ static VehicleEnterTileStatus VehicleEnt */ static bool StationHandleBigTick(BaseStation *st) { - if ((st->facilities & ~FACIL_WAYPOINT) == 0 && ++st->delete_ctr >= 8) { + if (!st->IsInUse() && ++st->delete_ctr >= 8) { delete st; return false; } @@ -2698,7 +2698,7 @@ static void UpdateStationRating(Station /* called for every station each tick */ static void StationHandleSmallTick(BaseStation *st) { - if ((st->facilities & FACIL_WAYPOINT) != 0 || st->facilities == 0) return; + if ((st->facilities & FACIL_WAYPOINT) != 0 || !st->IsInUse()) return; byte b = st->delete_ctr + 1; if (b >= 185) b = 0; diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -638,7 +638,7 @@ static void ResetLandscapeConfirmationCa FOR_ALL_BASE_STATIONS(st) { /* There can be buoys, remove them */ if (IsBuoyTile(st->xy)) DoCommand(st->xy, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); - if ((st->facilities & ~FACIL_WAYPOINT) == 0) delete st; + if (!st->IsInUse()) delete st; } MarkWholeScreenDirty(); diff --git a/src/viewport.cpp b/src/viewport.cpp --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1220,7 +1220,7 @@ static void ViewportAddSigns(DrawPixelIn static void AddWaypoint(const Waypoint *wp, StringID str, uint16 width) { - AddStringToDraw(wp->sign.left + 1, wp->sign.top + 1, str, wp->index, 0, (wp->owner == OWNER_NONE || (wp->facilities & ~FACIL_WAYPOINT) == 0) ? 0xE : _company_colours[wp->owner], width); + AddStringToDraw(wp->sign.left + 1, wp->sign.top + 1, str, wp->index, 0, (wp->owner == OWNER_NONE || !wp->IsInUse()) ? 0xE : _company_colours[wp->owner], width); } diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -107,7 +107,7 @@ static Waypoint *FindDeletedWaypointClos uint thres = 8; FOR_ALL_WAYPOINTS(wp) { - if ((wp->facilities & ~FACIL_WAYPOINT) == 0 && wp->string_id == str && (wp->owner == _current_company || wp->owner == OWNER_NONE)) { + if (!wp->IsInUse() && wp->string_id == str && (wp->owner == _current_company || wp->owner == OWNER_NONE)) { uint cur_dist = DistanceManhattan(tile, wp->xy); if (cur_dist < thres) { diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -59,9 +59,9 @@ public: virtual void OnPaint() { /* You can only change your own waypoints */ - this->SetWidgetDisabledState(WAYPVW_RENAME, (this->wp->facilities & ~FACIL_WAYPOINT) == 0 || (this->wp->owner != _local_company && this->wp->owner != OWNER_NONE)); - /* Disable the widget for waypoints with no owner (after company bankrupt) */ - this->SetWidgetDisabledState(WAYPVW_SHOW_VEHICLES, (this->wp->facilities & ~FACIL_WAYPOINT) == 0); + this->SetWidgetDisabledState(WAYPVW_RENAME, !this->wp->IsInUse() || (this->wp->owner != _local_company && this->wp->owner != OWNER_NONE)); + /* Disable the widget for waypoints with no use */ + this->SetWidgetDisabledState(WAYPVW_SHOW_VEHICLES, !this->wp->IsInUse()); SetDParam(0, this->wp->index); this->DrawWidgets();