18
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-14 09:06:58 +01:00

feat: separate engine start switches for the vehicles in multiple (eu07/maszyna#80)

In vehicles like the ST43, the SP32 or the SN61 every engine of a train in
multiple has its own start and stop buttons in the cab. Until now the cab's
line breaker / engine start switch (main_sw, main_on_bt, main_off_bt) always
started and stopped the engines of all the vehicles under its control.

- .fiz, Engine: JointEngineStart=Yes|No (default Yes, as before). With No
  the cab's main_* work the cab's own vehicle only, and an engine stopping on
  its own (stalled, out of fuel) stops only its own vehicle instead of every
  engine in the train.
- .mmd: mainb_sw, mainb_on_bt, mainb_off_bt work the second vehicle with an
  engine under the cab's control, mainc_sw, mainc_on_bt, mainc_off_bt the
  third one. They count along the control cable from the cab's vehicle,
  behind the cab first. Like main_*, the start switch has to be held for the
  vehicle's IniCDelay with the vehicle ready (MainSwitchCheck); an impulse
  switch of an electric locomotive with series motors closes on release.
- New commands, added at the end of the command list: linebreakertoggleb,
  linebreakeropenb, linebreakercloseb, linebreakertogglec, linebreakeropenc,
  linebreakerclosec. No default keys.
- The logic is in vehicle/enginestart.{h,cpp} (core library), tested in
  tests/unit/test_engine_start.cpp.

Nothing changes for existing vehicles: the new key and the new cab controls
are optional, and without them the code does what it did before.

Game data (SVN, not changed here, to be done separately; the code works
without it): for the SN61 (dynamic/pkp/sn61_v2), whose cab models already
have the buttons start02/stop02/start03/stop03,
- sn61.fiz, sn61-86.fiz, sn61_v1.fiz and the other SN61 .fiz: add
  JointEngineStart=No to the Engine: line;
- sn61.mmd.inc (and the other SN61 includes): after main_on_bt add
  mainb_off_bt: { stop02 mov -0.005 0 0.1 ... }
  mainb_on_bt: { start02 mov -0.005 0 0.1 ... }
  mainc_off_bt: { stop03 mov -0.005 0 0.1 ... }
  mainc_on_bt: { start03 mov -0.005 0 0.1 ... }
  with the sounds of main_off_bt / main_on_bt.
The tooltips "line breaker B" / "line breaker C" are new strings for lang/*.po.
This commit is contained in:
jerrrrycho
2026-11-08 07:12:30 +01:00
parent 68fdf1efdf
commit 13ded6cdfa
13 changed files with 682 additions and 5 deletions

View File

@@ -406,6 +406,12 @@ commanddescription_sequence Commands_descriptions = {
{"wiperswitchdecrease", command_target::vehicle, command_mode::oneoff},
{"lightsset", command_target::vehicle, command_mode::oneoff},
{"oilfuelpumptoggle", command_target::vehicle, command_mode::oneoff},
{"linebreakertoggleb", command_target::vehicle, command_mode::oneoff},
{"linebreakeropenb", command_target::vehicle, command_mode::oneoff},
{"linebreakercloseb", command_target::vehicle, command_mode::oneoff},
{"linebreakertogglec", command_target::vehicle, command_mode::oneoff},
{"linebreakeropenc", command_target::vehicle, command_mode::oneoff},
{"linebreakerclosec", command_target::vehicle, command_mode::oneoff},
};
// Maps of command and coresponding strings
@@ -791,6 +797,12 @@ std::unordered_map<std::string, user_command> const commandMap = {
{"wiperswitchdecrease", user_command::wiperswitchdecrease},
{"lightsset", user_command::lightsset},
{"oilfuelpumptoggle", user_command::oilfuelpumptoggle},
{"linebreakertoggleb", user_command::linebreakertoggleb},
{"linebreakeropenb", user_command::linebreakeropenb},
{"linebreakercloseb", user_command::linebreakercloseb},
{"linebreakertogglec", user_command::linebreakertogglec},
{"linebreakeropenc", user_command::linebreakeropenc},
{"linebreakerclosec", user_command::linebreakerclosec},
{"none", user_command::none}};
} // namespace simulation