Add client setting to show all signals using the default sprites
This commit is contained in:
@@ -1546,6 +1546,8 @@ STR_CONFIG_SETTING_SHOW_TRAIN_WEIGHT_RATIOS_IN_DETAILS :Show train weig
|
||||
STR_CONFIG_SETTING_SHOW_TRAIN_WEIGHT_RATIOS_IN_DETAILS_HELPTEXT :Show train weight ratios in the vehicle details window
|
||||
STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF :Show restricted electric signals using default graphics: {STRING2}
|
||||
STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF_HELPTEXT :Show electric signals with routing restriction programs using the default signal graphics with a blue signal post, instead of using any NewGRF signal graphics. This is to make it easier to visually distinguish restricted signals.
|
||||
STR_CONFIG_SETTING_SHOW_ALL_SIG_DEF :Show all signals using default graphics: {STRING2}
|
||||
STR_CONFIG_SETTING_SHOW_ALL_SIG_DEF_HELPTEXT :Show all signals using the default signal graphics, instead of using any NewGRF signal graphics. This is to make it easier to see the state and type of signals when NewGRFs provide unclear or inaccessible signal graphics.
|
||||
STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES :Show advanced routing restriction features: {STRING2}
|
||||
STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES_HELPTEXT :Show advanced routing restriction features. When disabled, some advanced features are not shown in the UI, but are still available to all players.
|
||||
STR_CONFIG_SETTING_SHOW_PROGSIG_FEATURES :Show programmable pre-signal feature: {STRING2}
|
||||
|
@@ -146,6 +146,8 @@ static PalSpriteID GetRailTypeCustomSignalSprite(const RailtypeInfo *rti, TileIn
|
||||
*/
|
||||
CustomSignalSpriteResult GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalType type, SignalVariant var, uint8 aspect, bool gui, bool restricted)
|
||||
{
|
||||
if (_settings_client.gui.show_all_signal_default) return { { 0, PAL_NONE }, false };
|
||||
|
||||
PalSpriteID spr = GetRailTypeCustomSignalSprite(rti, tile, type, var, aspect, gui, restricted);
|
||||
if (spr.sprite != 0) return { spr, HasBit(rti->ctrl_flags, RTCF_RESTRICTEDSIG) };
|
||||
|
||||
|
@@ -499,6 +499,7 @@ RailTypes GetRailTypes(bool introduces);
|
||||
RailType GetRailTypeByLabel(RailTypeLabel label, bool allow_alternate_labels = true);
|
||||
|
||||
void ResetRailTypes();
|
||||
void UpdateRailGuiSprites();
|
||||
void InitRailTypes();
|
||||
RailType AllocateRailType(RailTypeLabel label);
|
||||
|
||||
|
@@ -111,13 +111,29 @@ void ResolveRailTypeGUISprites(RailtypeInfo *rti)
|
||||
SPR_IMG_SIGNAL_SEMAPHORE_PROG, SPR_IMG_SIGNAL_SEMAPHORE_NO_ENTRY},
|
||||
};
|
||||
|
||||
auto default_sprite = [&](SignalVariant var, SignalType type) -> SpriteID {
|
||||
SpriteID spr = _signal_lookup[var][type];
|
||||
if (_settings_client.gui.show_all_signal_default) {
|
||||
if (type == SIGTYPE_PROG) {
|
||||
spr += SPR_DUP_PROGSIGNAL_BASE - SPR_PROGSIGNAL_BASE;
|
||||
} else if (type == SIGTYPE_NO_ENTRY) {
|
||||
spr += SPR_DUP_EXTRASIGNAL_BASE - SPR_EXTRASIGNAL_BASE;
|
||||
} else if (var == SIG_ELECTRIC && type == SIGTYPE_NORMAL) {
|
||||
spr += SPR_DUP_ORIGINAL_SIGNALS_BASE - SPR_ORIGINAL_SIGNALS_BASE;
|
||||
} else {
|
||||
spr += SPR_DUP_SIGNALS_BASE - SPR_SIGNALS_BASE;
|
||||
}
|
||||
}
|
||||
return spr;
|
||||
};
|
||||
|
||||
for (SignalType type = SIGTYPE_NORMAL; type < SIGTYPE_END; type = (SignalType)(type + 1)) {
|
||||
for (SignalVariant var = SIG_ELECTRIC; var <= SIG_SEMAPHORE; var = (SignalVariant)(var + 1)) {
|
||||
PalSpriteID red = GetCustomSignalSprite(rti, INVALID_TILE, type, var, 0, true).sprite;
|
||||
if (red.sprite != 0) {
|
||||
rti->gui_sprites.signals[type][var][0] = { red.sprite + SIGNAL_TO_SOUTH, red.pal };
|
||||
} else {
|
||||
rti->gui_sprites.signals[type][var][0] = { _signal_lookup[var][type], PAL_NONE };
|
||||
rti->gui_sprites.signals[type][var][0] = { default_sprite(var, type), PAL_NONE };
|
||||
}
|
||||
if (type == SIGTYPE_NO_ENTRY) {
|
||||
rti->gui_sprites.signals[type][var][1] = rti->gui_sprites.signals[type][var][0];
|
||||
@@ -127,7 +143,7 @@ void ResolveRailTypeGUISprites(RailtypeInfo *rti)
|
||||
if (green.sprite != 0) {
|
||||
rti->gui_sprites.signals[type][var][1] = { green.sprite + SIGNAL_TO_SOUTH, green.pal };
|
||||
} else {
|
||||
rti->gui_sprites.signals[type][var][1] = { _signal_lookup[var][type] + 1, PAL_NONE };
|
||||
rti->gui_sprites.signals[type][var][1] = { default_sprite(var, type) + 1, PAL_NONE };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -194,6 +210,13 @@ void SortRailTypes()
|
||||
std::sort(_sorted_railtypes.begin(), _sorted_railtypes.end(), CompareRailTypes);
|
||||
}
|
||||
|
||||
void UpdateRailGuiSprites()
|
||||
{
|
||||
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
|
||||
ResolveRailTypeGUISprites(&_railtypes[rt]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve sprites of custom rail types
|
||||
*/
|
||||
@@ -2752,7 +2775,7 @@ void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track track, Sign
|
||||
is_custom_sprite = file != nullptr && (file->flags & SFF_USERGRF) && !(file->flags & SFF_OGFX);
|
||||
}
|
||||
|
||||
if (is_custom_sprite && show_restricted && _settings_client.gui.show_restricted_signal_default && !result.restricted_valid && variant == SIG_ELECTRIC) {
|
||||
if (_settings_client.gui.show_all_signal_default || (is_custom_sprite && show_restricted && _settings_client.gui.show_restricted_signal_default && !result.restricted_valid && variant == SIG_ELECTRIC)) {
|
||||
/* Use duplicate sprite block, instead of GRF-specified signals */
|
||||
if (type == SIGTYPE_PROG) {
|
||||
if (variant == SIG_SEMAPHORE) {
|
||||
|
@@ -1765,6 +1765,7 @@ static SettingsContainer &GetSettingsTree()
|
||||
graphics->Add(new SettingEntry("gui.show_vehicle_route"));
|
||||
graphics->Add(new SettingEntry("gui.dash_level_of_route_lines"));
|
||||
graphics->Add(new SettingEntry("gui.show_restricted_signal_default"));
|
||||
graphics->Add(new SettingEntry("gui.show_all_signal_default"));
|
||||
}
|
||||
|
||||
SettingsPage *sound = main->Add(new SettingsPage(STR_CONFIG_SETTING_SOUND));
|
||||
|
@@ -217,6 +217,7 @@ struct GUISettings : public TimeSettings {
|
||||
bool show_train_weight_ratios_in_details; ///< show train weight ratios in vehicle details window top widget
|
||||
bool show_vehicle_group_in_details; ///< show vehicle group in vehicle details window top widget
|
||||
bool show_restricted_signal_default; ///< Show restricted electric signals using the default sprite
|
||||
bool show_all_signal_default; ///< Show all signals using the default sprite
|
||||
bool show_adv_tracerestrict_features; ///< Show advanced trace restrict features in UI
|
||||
bool show_progsig_ui; ///< Show programmable pre-signals feature in UI
|
||||
bool show_noentrysig_ui; ///< Show no-entry signals feature in UI
|
||||
|
@@ -5195,6 +5195,14 @@ str = STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF
|
||||
strhelp = STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF_HELPTEXT
|
||||
post_cb = [](auto) { MarkWholeScreenDirty(); }
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = gui.show_all_signal_default
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = false
|
||||
str = STR_CONFIG_SETTING_SHOW_ALL_SIG_DEF
|
||||
strhelp = STR_CONFIG_SETTING_SHOW_ALL_SIG_DEF_HELPTEXT
|
||||
post_cb = [](auto) { UpdateRailGuiSprites(); MarkWholeScreenDirty(); }
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = gui.show_adv_tracerestrict_features
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
|
@@ -1765,9 +1765,11 @@ static void DrawTunnelBridgeRampSingleSignal(const TileInfo *ti, bool is_green,
|
||||
if (variant == SIG_ELECTRIC && type == SIGTYPE_NORMAL) {
|
||||
/* Normal electric signals are picked from original sprites. */
|
||||
sprite = { SPR_ORIGINAL_SIGNALS_BASE + ((position << 1) + is_green), PAL_NONE };
|
||||
if (_settings_client.gui.show_all_signal_default) sprite.sprite += SPR_DUP_ORIGINAL_SIGNALS_BASE - SPR_ORIGINAL_SIGNALS_BASE;
|
||||
} else {
|
||||
/* All other signals are picked from add on sprites. */
|
||||
sprite = { SPR_SIGNALS_BASE + ((type - 1) * 16 + variant * 64 + (position << 1) + is_green) + (IsSignalSpritePBS(type) ? 64 : 0), PAL_NONE };
|
||||
if (_settings_client.gui.show_all_signal_default) sprite.sprite += SPR_DUP_SIGNALS_BASE - SPR_SIGNALS_BASE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1889,9 +1891,11 @@ static void DrawBridgeSignalOnMiddlePart(const TileInfo *ti, TileIndex bridge_st
|
||||
if (variant == SIG_ELECTRIC) {
|
||||
/* Normal electric signals are picked from original sprites. */
|
||||
sprite.sprite = SPR_ORIGINAL_SIGNALS_BASE + (position << 1) + (state == SIGNAL_STATE_GREEN ? 1 : 0);
|
||||
if (_settings_client.gui.show_all_signal_default) sprite.sprite += SPR_DUP_ORIGINAL_SIGNALS_BASE - SPR_ORIGINAL_SIGNALS_BASE;
|
||||
} else {
|
||||
/* All other signals are picked from add on sprites. */
|
||||
sprite.sprite = SPR_SIGNALS_BASE + (variant * 64) + (position << 1) - 16 + (state == SIGNAL_STATE_GREEN ? 1 : 0);
|
||||
if (_settings_client.gui.show_all_signal_default) sprite.sprite += SPR_DUP_SIGNALS_BASE - SPR_SIGNALS_BASE;
|
||||
}
|
||||
sprite.pal = PAL_NONE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user