Add client setting to show all signals using the default sprites

This commit is contained in:
Jonathan G Rennison
2021-12-27 18:31:27 +00:00
parent 621677343f
commit f65a166308
8 changed files with 45 additions and 3 deletions

View File

@@ -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) {