diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index d335d1e3bd..eeb0fcfb7d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -284,13 +284,13 @@ static void GenericPlaceSignals(TileIndex tile) /* Which signals should we cycle through? */ SignalCycleGroups cycle_types; - if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) { + if (_settings_client.gui.cycle_signal_types == SIGNAL_CYCLE_PATH) { + cycle_types = SCG_PBS; + } else if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) { cycle_types = SCG_BLOCK | SCG_PBS; } else if (_settings_client.gui.cycle_signal_types == SIGNAL_CYCLE_ALL) { cycle_types = SCG_PBS; if (_settings_client.gui.signal_gui_mode == SIGNAL_GUI_ALL) cycle_types |= SCG_BLOCK; - } else if (_settings_client.gui.cycle_signal_types == SIGNAL_CYCLE_PATH) { - cycle_types = SCG_PBS; } else { cycle_types = SCG_CURRENT_GROUP; } diff --git a/src/signal.cpp b/src/signal.cpp index c1c83f8baa..a0e3f59d32 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -70,18 +70,18 @@ static const TrackdirBits _enterdir_to_trackdirbits[DIAGDIR_END] = { SignalType NextSignalType(SignalType cur, SignalCycleGroups which_signals) { + if (which_signals == SCG_CURRENT_GROUP) which_signals = IsPbsSignal(cur) ? SCG_PBS : SCG_BLOCK; + bool pbs = which_signals & SCG_PBS; + bool block = which_signals & SCG_BLOCK; + if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) { switch (cur) { case SIGTYPE_PBS: return SIGTYPE_PBS_ONEWAY; - case SIGTYPE_PBS_ONEWAY: return SIGTYPE_BLOCK; + case SIGTYPE_PBS_ONEWAY: return block ? SIGTYPE_BLOCK : SIGTYPE_PBS; default: return SIGTYPE_PBS; } } - if (which_signals == SCG_CURRENT_GROUP) which_signals = IsPbsSignal(cur) ? SCG_PBS : SCG_BLOCK; - bool pbs = which_signals & SCG_PBS; - bool block = which_signals & SCG_BLOCK; - switch(cur) { case SIGTYPE_BLOCK: return block ? SIGTYPE_ENTRY : SIGTYPE_PBS; case SIGTYPE_ENTRY: return block ? SIGTYPE_EXIT : SIGTYPE_PBS;