Add client setting to show all signals using the default sprites
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user