Fix #13392: Signs of removed stations are no longer visible. (#13395)

Add "Ghost" option for station sign visibility.
This commit is contained in:
Peter Nelson 2025-01-28 19:10:32 +00:00 committed by GitHub
parent 77f4d776c4
commit b70438b76a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 15 additions and 3 deletions

View File

@ -457,6 +457,7 @@ STR_SETTINGS_MENU_STATION_NAMES_LORRY :Lorry stops
STR_SETTINGS_MENU_STATION_NAMES_BUS :Bus stops
STR_SETTINGS_MENU_STATION_NAMES_SHIP :Docks
STR_SETTINGS_MENU_STATION_NAMES_PLANE :Airports
STR_SETTINGS_MENU_STATION_NAMES_GHOST :Ghost
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Waypoint names displayed
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Signs displayed
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Competitor signs and names displayed

View File

@ -61,6 +61,9 @@ enum StationFacility : uint8_t {
};
DECLARE_ENUM_AS_BIT_SET(StationFacility)
/** Fake 'facility' to allow toggling display of recently-removed station signs. */
static constexpr StationFacility FACIL_GHOST{1U << 6};
/** The vehicles that may have visited a station */
enum StationHadVehicleOfType : uint8_t {
HVOT_NONE = 0, ///< Station has seen no vehicles

View File

@ -12,7 +12,7 @@ extern std::string _config_language_file;
static constexpr std::initializer_list<const char*> _support8bppmodes{"no", "system", "hardware"};
static constexpr std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"};
static constexpr std::initializer_list<const char*> _facility_display_opt_modes{"TRAIN", "TRUCK_STOP", "BUS_STOP", "AIRPORT", "DOCK"};
static constexpr std::initializer_list<const char*> _facility_display_opt_modes{"TRAIN", "TRUCK_STOP", "BUS_STOP", "AIRPORT", "DOCK", "", "GHOST"};
#ifdef WITH_COCOA
extern bool _allow_hidpi_window;
@ -69,7 +69,7 @@ full = _display_opt_modes
name = ""facility_display_opt""
type = SLE_UINT8
var = _facility_display_opt
def = (1 << FACIL_TRAIN | 1 << FACIL_TRUCK_STOP | 1 << FACIL_BUS_STOP | 1 << FACIL_AIRPORT | 1 << FACIL_DOCK)
def = (FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK | FACIL_GHOST)
full = _facility_display_opt_modes
[SDTG_BOOL]

View File

@ -241,6 +241,7 @@ enum OptionMenuEntries {
OME_SHOW_STATIONNAMES_BUS,
OME_SHOW_STATIONNAMES_SHIP,
OME_SHOW_STATIONNAMES_PLANE,
OME_SHOW_STATIONNAMES_GHOST,
OME_SHOW_WAYPOINTNAMES,
OME_SHOW_SIGNS,
OME_SHOW_COMPETITOR_SIGNS,
@ -281,6 +282,7 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_BUS_STOP) != 0, STR_SETTINGS_MENU_STATION_NAMES_BUS, OME_SHOW_STATIONNAMES_BUS, false, false, 1));
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_DOCK) != 0, STR_SETTINGS_MENU_STATION_NAMES_SHIP, OME_SHOW_STATIONNAMES_SHIP, false, false, 1));
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_AIRPORT) != 0, STR_SETTINGS_MENU_STATION_NAMES_PLANE, OME_SHOW_STATIONNAMES_PLANE, false, false, 1));
list.push_back(MakeDropDownListCheckedItem((_facility_display_opt & FACIL_GHOST) != 0, STR_SETTINGS_MENU_STATION_NAMES_GHOST, OME_SHOW_STATIONNAMES_GHOST, false, false, 1));
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
@ -331,6 +333,7 @@ static CallBackFunction MenuClickSettings(int index)
case OME_SHOW_STATIONNAMES_BUS: ToggleFacilityDisplay(FACIL_BUS_STOP); break;
case OME_SHOW_STATIONNAMES_SHIP: ToggleFacilityDisplay(FACIL_DOCK); break;
case OME_SHOW_STATIONNAMES_PLANE: ToggleFacilityDisplay(FACIL_AIRPORT); break;
case OME_SHOW_STATIONNAMES_GHOST: ToggleFacilityDisplay(FACIL_GHOST); break;
case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
case OME_SHOW_COMPETITOR_SIGNS:

View File

@ -1448,7 +1448,12 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi)
case ViewportSignKdtreeItem::VKI_STATION: {
if (!show_stations) break;
const BaseStation *st = BaseStation::Get(item.id.station);
if ((_facility_display_opt & st->facilities) == 0) break;
/* If no facilities are present the station is a ghost station. */
StationFacility facilities = st->facilities;
if (facilities == FACIL_NONE) facilities = FACIL_GHOST;
if ((_facility_display_opt & facilities) == 0) break;
/* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */
if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break;