Remove tunnel/bridge spacing setting, use usual signal drag spacing
This commit is contained in:
@@ -1464,6 +1464,7 @@ static void ReReserveTrainPath(Train *v)
|
|||||||
* - p1 = (bit 17) - 1 = don't modify an existing signal but don't fail either, 0 = always set new signal type
|
* - p1 = (bit 17) - 1 = don't modify an existing signal but don't fail either, 0 = always set new signal type
|
||||||
* - p1 = (bit 18) - permit creation of/conversion to bidirectionally signalled bridges/tunnels
|
* - p1 = (bit 18) - permit creation of/conversion to bidirectionally signalled bridges/tunnels
|
||||||
* - p1 = (bit 19-22)-signal style
|
* - p1 = (bit 19-22)-signal style
|
||||||
|
* - p1 = (bit 23-27)-signal spacing
|
||||||
* @param p2 used for CmdBuildManySignals() to copy direction of first signal
|
* @param p2 used for CmdBuildManySignals() to copy direction of first signal
|
||||||
* @param text unused
|
* @param text unused
|
||||||
* @return the cost of this operation or an error
|
* @return the cost of this operation or an error
|
||||||
@@ -1511,6 +1512,10 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||||||
CommandCost cost;
|
CommandCost cost;
|
||||||
/* handle signals simulation on tunnel/bridge. */
|
/* handle signals simulation on tunnel/bridge. */
|
||||||
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
||||||
|
int signal_spacing = GB(p1, 23, 5);
|
||||||
|
if (signal_spacing == 0) return_cmd_error(STR_ERROR_THERE_IS_NO_RAILROAD_TRACK);
|
||||||
|
signal_spacing = Clamp<int>(signal_spacing, 1, 16);
|
||||||
|
|
||||||
TileIndex tile_exit = GetOtherTunnelBridgeEnd(tile);
|
TileIndex tile_exit = GetOtherTunnelBridgeEnd(tile);
|
||||||
if (TracksOverlap(GetTunnelBridgeTrackBits(tile)) || TracksOverlap(GetTunnelBridgeTrackBits(tile_exit))) return_cmd_error(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK);
|
if (TracksOverlap(GetTunnelBridgeTrackBits(tile)) || TracksOverlap(GetTunnelBridgeTrackBits(tile_exit))) return_cmd_error(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK);
|
||||||
bool bidirectional = HasBit(p1, 18) && (sigtype == SIGTYPE_PBS);
|
bool bidirectional = HasBit(p1, 18) && (sigtype == SIGTYPE_PBS);
|
||||||
@@ -1597,7 +1602,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||||||
if (IsTunnelBridgeWithSignalSimulation(tile)) {
|
if (IsTunnelBridgeWithSignalSimulation(tile)) {
|
||||||
c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(tile, tile_exit);
|
c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(tile, tile_exit);
|
||||||
} else {
|
} else {
|
||||||
uint spacing = GetBestTunnelBridgeSignalSimulationSpacing(GetTileOwner(tile), tile, tile_exit);
|
uint spacing = GetBestTunnelBridgeSignalSimulationSpacing(tile, tile_exit, signal_spacing);
|
||||||
SetTunnelBridgeSignalSimulationSpacing(tile, spacing);
|
SetTunnelBridgeSignalSimulationSpacing(tile, spacing);
|
||||||
SetTunnelBridgeSignalSimulationSpacing(tile_exit, spacing);
|
SetTunnelBridgeSignalSimulationSpacing(tile_exit, spacing);
|
||||||
for (TileIndex t : { tile, tile_exit }) {
|
for (TileIndex t : { tile, tile_exit }) {
|
||||||
@@ -2035,6 +2040,7 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin
|
|||||||
SB(param1, 5, 3, sigtype);
|
SB(param1, 5, 3, sigtype);
|
||||||
SB(param1, 19, 4, signal_style);
|
SB(param1, 19, 4, signal_style);
|
||||||
if (!remove && signal_ctr == 0) SetBit(param1, 17);
|
if (!remove && signal_ctr == 0) SetBit(param1, 17);
|
||||||
|
if (!remove) SB(param1, 23, 5, Clamp<int>(GB(p2, 24, 8), 1, 16));
|
||||||
|
|
||||||
/* Pick the correct orientation for the track direction */
|
/* Pick the correct orientation for the track direction */
|
||||||
signals = 0;
|
signals = 0;
|
||||||
|
@@ -306,6 +306,7 @@ static void GenericPlaceSignals(TileIndex tile)
|
|||||||
SB(p1, 9, 6, cycle_types);
|
SB(p1, 9, 6, cycle_types);
|
||||||
}
|
}
|
||||||
SB(p1, 18, 1, _settings_client.gui.adv_sig_bridge_tun_modes);
|
SB(p1, 18, 1, _settings_client.gui.adv_sig_bridge_tun_modes);
|
||||||
|
SB(p1, 23, 5, Clamp<int>(_settings_client.gui.drag_signals_density, 1, 16));
|
||||||
|
|
||||||
DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS |
|
DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS |
|
||||||
CMD_MSG((w != nullptr && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE),
|
CMD_MSG((w != nullptr && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE),
|
||||||
|
@@ -3652,7 +3652,7 @@ bool AfterLoadGame()
|
|||||||
if (SlXvIsFeaturePresent(XSLFI_SIG_TUNNEL_BRIDGE, 1, 7)) {
|
if (SlXvIsFeaturePresent(XSLFI_SIG_TUNNEL_BRIDGE, 1, 7)) {
|
||||||
/* spacing setting moved to company settings */
|
/* spacing setting moved to company settings */
|
||||||
for (Company *c : Company::Iterate()) {
|
for (Company *c : Company::Iterate()) {
|
||||||
c->settings.simulated_wormhole_signals = _settings_game.construction.old_simulated_wormhole_signals;
|
c->settings.old_simulated_wormhole_signals = _settings_game.construction.old_simulated_wormhole_signals;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SlXvIsFeaturePresent(XSLFI_SIG_TUNNEL_BRIDGE, 1, 8)) {
|
if (SlXvIsFeaturePresent(XSLFI_SIG_TUNNEL_BRIDGE, 1, 8)) {
|
||||||
@@ -3662,7 +3662,14 @@ bool AfterLoadGame()
|
|||||||
DiagDirection dir = GetTunnelBridgeDirection(t);
|
DiagDirection dir = GetTunnelBridgeDirection(t);
|
||||||
if (dir == DIAGDIR_NE || dir == DIAGDIR_SE) {
|
if (dir == DIAGDIR_NE || dir == DIAGDIR_SE) {
|
||||||
TileIndex other = GetOtherTunnelBridgeEnd(t);
|
TileIndex other = GetOtherTunnelBridgeEnd(t);
|
||||||
uint spacing = GetBestTunnelBridgeSignalSimulationSpacing(GetTileOwner(t), t, other);
|
Owner owner = GetTileOwner(t);
|
||||||
|
int target;
|
||||||
|
if (Company::IsValidID(owner)) {
|
||||||
|
target = Company::Get(owner)->settings.old_simulated_wormhole_signals;
|
||||||
|
} else {
|
||||||
|
target = 4;
|
||||||
|
}
|
||||||
|
uint spacing = GetBestTunnelBridgeSignalSimulationSpacing(t, other, target);
|
||||||
SetTunnelBridgeSignalSimulationSpacing(t, spacing);
|
SetTunnelBridgeSignalSimulationSpacing(t, spacing);
|
||||||
SetTunnelBridgeSignalSimulationSpacing(other, spacing);
|
SetTunnelBridgeSignalSimulationSpacing(other, spacing);
|
||||||
}
|
}
|
||||||
|
@@ -89,7 +89,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_DEPARTURE_BOARDS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "departure_boards", nullptr, nullptr, nullptr },
|
{ XSLFI_DEPARTURE_BOARDS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "departure_boards", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, 2, 2, "timetable_start_ticks", nullptr, nullptr, nullptr },
|
{ XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, 2, 2, "timetable_start_ticks", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_TOWN_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 2, 2, "town_cargo_adj", nullptr, nullptr, nullptr },
|
{ XSLFI_TOWN_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 2, 2, "town_cargo_adj", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 9, 9, "signal_tunnel_bridge", nullptr, nullptr, "XBSS" },
|
{ XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 10, 10, "signal_tunnel_bridge", nullptr, nullptr, "XBSS" },
|
||||||
{ XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 8, 8, "improved_breakdowns", nullptr, nullptr, nullptr },
|
{ XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 8, 8, "improved_breakdowns", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_CONSIST_BREAKDOWN_FLAG, XSCF_NULL, 1, 1, "consist_breakdown_flag", nullptr, nullptr, nullptr },
|
{ XSLFI_CONSIST_BREAKDOWN_FLAG, XSCF_NULL, 1, 1, "consist_breakdown_flag", nullptr, nullptr, nullptr },
|
||||||
{ XSLFI_TT_WAIT_IN_DEPOT, XSCF_NULL, 1, 1, "tt_wait_in_depot", nullptr, nullptr, nullptr },
|
{ XSLFI_TT_WAIT_IN_DEPOT, XSCF_NULL, 1, 1, "tt_wait_in_depot", nullptr, nullptr, nullptr },
|
||||||
|
@@ -1993,7 +1993,6 @@ static SettingsContainer &GetSettingsTree()
|
|||||||
company->Add(new SettingEntry("company.infra_others_buy_in_depot[3]"));
|
company->Add(new SettingEntry("company.infra_others_buy_in_depot[3]"));
|
||||||
company->Add(new SettingEntry("company.advance_order_on_clone"));
|
company->Add(new SettingEntry("company.advance_order_on_clone"));
|
||||||
company->Add(new SettingEntry("company.copy_clone_add_to_group"));
|
company->Add(new SettingEntry("company.copy_clone_add_to_group"));
|
||||||
company->Add(new SettingEntry("company.simulated_wormhole_signals"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPage *accounting = main->Add(new SettingsPage(STR_CONFIG_SETTING_ACCOUNTING));
|
SettingsPage *accounting = main->Add(new SettingsPage(STR_CONFIG_SETTING_ACCOUNTING));
|
||||||
|
@@ -753,7 +753,8 @@ struct CompanySettings {
|
|||||||
uint16 timetable_autofill_rounding; ///< round up timetable times to be a multiple of this number of ticks
|
uint16 timetable_autofill_rounding; ///< round up timetable times to be a multiple of this number of ticks
|
||||||
bool advance_order_on_clone; ///< when cloning a vehicle or copying/sharing an order list, advance the current order to a suitable point
|
bool advance_order_on_clone; ///< when cloning a vehicle or copying/sharing an order list, advance the current order to a suitable point
|
||||||
bool copy_clone_add_to_group; ///< whether to add cloned vehicles to the source vehicle's group, when cloning a vehicle without sharing orders
|
bool copy_clone_add_to_group; ///< whether to add cloned vehicles to the source vehicle's group, when cloning a vehicle without sharing orders
|
||||||
byte simulated_wormhole_signals; ///< tunnel/bridge signal simulation spacing
|
|
||||||
|
byte old_simulated_wormhole_signals; ///< no longer needs a setting: tunnel/bridge signal simulation spacing
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Debug settings. */
|
/** Debug settings. */
|
||||||
|
@@ -255,7 +255,7 @@ patxname = ""copy_clone_add_to_group""
|
|||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = CompanySettings
|
base = CompanySettings
|
||||||
var = simulated_wormhole_signals
|
var = old_simulated_wormhole_signals
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
flags = SF_PER_COMPANY
|
flags = SF_PER_COMPANY
|
||||||
def = 4
|
def = 4
|
||||||
@@ -265,4 +265,5 @@ str = STR_CONFIG_SETTING_SIMULATE_SIGNALS
|
|||||||
strhelp = STR_CONFIG_SETTING_SIMULATE_SIGNALS_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_SIMULATE_SIGNALS_HELPTEXT
|
||||||
strval = STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE
|
strval = STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE
|
||||||
cat = SC_ADVANCED
|
cat = SC_ADVANCED
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 1, 9)
|
||||||
patxname = ""simulated_wormhole_signals""
|
patxname = ""simulated_wormhole_signals""
|
||||||
|
@@ -13,8 +13,7 @@
|
|||||||
#include "map_func.h"
|
#include "map_func.h"
|
||||||
#include "tile_map.h"
|
#include "tile_map.h"
|
||||||
|
|
||||||
uint GetTunnelBridgeSignalSimulationSpacingTarget(Owner owner);
|
uint GetBestTunnelBridgeSignalSimulationSpacing(TileIndex begin, TileIndex end, int target);
|
||||||
uint GetBestTunnelBridgeSignalSimulationSpacing(Owner owner, TileIndex begin, TileIndex end);
|
|
||||||
uint GetTunnelBridgeSignalSimulationSignalCount(TileIndex begin, TileIndex end);
|
uint GetTunnelBridgeSignalSimulationSignalCount(TileIndex begin, TileIndex end);
|
||||||
|
|
||||||
void MarkTunnelBridgeSignalDirty(TileIndex tile, bool exit);
|
void MarkTunnelBridgeSignalDirty(TileIndex tile, bool exit);
|
||||||
|
@@ -134,18 +134,8 @@ void MarkBridgeOrTunnelDirtyOnReservationChange(TileIndex tile, ViewportMarkDirt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint GetTunnelBridgeSignalSimulationSpacingTarget(Owner owner)
|
uint GetBestTunnelBridgeSignalSimulationSpacing(TileIndex begin, TileIndex end, int target)
|
||||||
{
|
{
|
||||||
if (Company::IsValidID(owner)) {
|
|
||||||
return Company::Get(owner)->settings.simulated_wormhole_signals;
|
|
||||||
} else {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint GetBestTunnelBridgeSignalSimulationSpacing(Owner owner, TileIndex begin, TileIndex end)
|
|
||||||
{
|
|
||||||
int target = GetTunnelBridgeSignalSimulationSpacingTarget(owner);
|
|
||||||
if (target <= 2) return target;
|
if (target <= 2) return target;
|
||||||
int length = GetTunnelBridgeLength(begin, end);
|
int length = GetTunnelBridgeLength(begin, end);
|
||||||
if (target > length || ((length + 1) % target) == 0) return target;
|
if (target > length || ((length + 1) % target) == 0) return target;
|
||||||
|
Reference in New Issue
Block a user