mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r16934) -Codechange: introduce a simple helper function to check whether a station is pending deletion or not
This commit is contained in:
parent
c1ffbc3bce
commit
803cf87885
@ -94,6 +94,17 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> {
|
||||
{
|
||||
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)
|
||||
|
@ -2570,7 +2570,7 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i
|
||||
*/
|
||||
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 *st)
|
||||
/* 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;
|
||||
|
@ -638,7 +638,7 @@ static void ResetLandscapeConfirmationCallback(Window *w, bool confirmed)
|
||||
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();
|
||||
|
@ -1220,7 +1220,7 @@ static void ViewportAddSigns(DrawPixelInfo *dpi)
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,7 +107,7 @@ static Waypoint *FindDeletedWaypointCloseTo(TileIndex tile, StringID str)
|
||||
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) {
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user