Files
maszyna/command.cpp
2025-09-04 20:27:45 +02:00

853 lines
51 KiB
C++

/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v.
2.0. If a copy of the MPL was not
distributed with this file, You can
obtain one at
http://mozilla.org/MPL/2.0/.
*/
#include "stdafx.h"
#include "command.h"
#include "Globals.h"
#include "Logs.h"
#include "Timer.h"
#include "utilities.h"
#include "simulation.h"
#include "Train.h"
namespace simulation {
command_queue Commands;
commanddescription_sequence Commands_descriptions = {
{"aidriverenable", command_target::vehicle, command_mode::oneoff},
{"aidriverdisable", command_target::vehicle, command_mode::oneoff},
{"jointcontrollerset", command_target::vehicle, command_mode::oneoff},
{"mastercontrollerincrease", command_target::vehicle, command_mode::oneoff},
{"mastercontrollerincreasefast", command_target::vehicle, command_mode::oneoff},
{"mastercontrollerdecrease", command_target::vehicle, command_mode::oneoff},
{"mastercontrollerdecreasefast", command_target::vehicle, command_mode::oneoff},
{"mastercontrollerset", command_target::vehicle, command_mode::oneoff},
{"secondcontrollerincrease", command_target::vehicle, command_mode::oneoff},
{"secondcontrollerincreasefast", command_target::vehicle, command_mode::oneoff},
{"secondcontrollerdecrease", command_target::vehicle, command_mode::oneoff},
{"secondcontrollerdecreasefast", command_target::vehicle, command_mode::oneoff},
{"secondcontrollerset", command_target::vehicle, command_mode::oneoff},
{"mucurrentindicatorothersourceactivate", command_target::vehicle, command_mode::oneoff},
{"independentbrakeincrease", command_target::vehicle, command_mode::continuous},
{"independentbrakeincreasefast", command_target::vehicle, command_mode::oneoff},
{"independentbrakedecrease", command_target::vehicle, command_mode::continuous},
{"independentbrakedecreasefast", command_target::vehicle, command_mode::oneoff},
{"independentbrakeset", command_target::vehicle, command_mode::oneoff},
{"independentbrakebailoff", command_target::vehicle, command_mode::oneoff},
{"universalbrakebutton1", command_target::vehicle, command_mode::oneoff},
{"universalbrakebutton2", command_target::vehicle, command_mode::oneoff},
{"universalbrakebutton3", command_target::vehicle, command_mode::oneoff},
{"trainbrakeincrease", command_target::vehicle, command_mode::continuous},
{"trainbrakedecrease", command_target::vehicle, command_mode::continuous},
{"trainbrakeset", command_target::vehicle, command_mode::oneoff},
{"trainbrakecharging", command_target::vehicle, command_mode::oneoff},
{"trainbrakerelease", command_target::vehicle, command_mode::oneoff},
{"trainbrakefirstservice", command_target::vehicle, command_mode::oneoff},
{"trainbrakeservice", command_target::vehicle, command_mode::oneoff},
{"trainbrakefullservice", command_target::vehicle, command_mode::oneoff},
{"trainbrakehandleoff", command_target::vehicle, command_mode::oneoff},
{"trainbrakeemergency", command_target::vehicle, command_mode::oneoff},
{"trainbrakebasepressureincrease", command_target::vehicle, command_mode::oneoff},
{"trainbrakebasepressuredecrease", command_target::vehicle, command_mode::oneoff},
{"trainbrakebasepressurereset", command_target::vehicle, command_mode::oneoff},
{"trainbrakeoperationtoggle", command_target::vehicle, command_mode::oneoff},
{"manualbrakeincrease", command_target::vehicle, command_mode::oneoff},
{"manualbrakedecrease", command_target::vehicle, command_mode::oneoff},
{"alarmchaintoggle", command_target::vehicle, command_mode::oneoff},
{"alarmchainenable", command_target::vehicle, command_mode::oneoff},
{"alarmchaindisable", command_target::vehicle, command_mode::oneoff},
{"wheelspinbrakeactivate", command_target::vehicle, command_mode::oneoff},
{"sandboxactivate", command_target::vehicle, command_mode::oneoff},
{"autosandboxtoggle", command_target::vehicle, command_mode::oneoff},
{"autosandboxactivate", command_target::vehicle, command_mode::oneoff},
{"autosandboxdeactivate", command_target::vehicle, command_mode::oneoff},
{"reverserincrease", command_target::vehicle, command_mode::oneoff},
{"reverserdecrease", command_target::vehicle, command_mode::oneoff},
{"reverserforwardhigh", command_target::vehicle, command_mode::oneoff},
{"reverserforward", command_target::vehicle, command_mode::oneoff},
{"reverserneutral", command_target::vehicle, command_mode::oneoff},
{"reverserbackward", command_target::vehicle, command_mode::oneoff},
{"waterpumpbreakertoggle", command_target::vehicle, command_mode::oneoff},
{"waterpumpbreakerclose", command_target::vehicle, command_mode::oneoff},
{"waterpumpbreakeropen", command_target::vehicle, command_mode::oneoff},
{"waterpumptoggle", command_target::vehicle, command_mode::oneoff},
{"waterpumpenable", command_target::vehicle, command_mode::oneoff},
{"waterpumpdisable", command_target::vehicle, command_mode::oneoff},
{"waterheaterbreakertoggle", command_target::vehicle, command_mode::oneoff},
{"waterheaterbreakerclose", command_target::vehicle, command_mode::oneoff},
{"waterheaterbreakeropen", command_target::vehicle, command_mode::oneoff},
{"waterheatertoggle", command_target::vehicle, command_mode::oneoff},
{"waterheaterenable", command_target::vehicle, command_mode::oneoff},
{"waterheaterdisable", command_target::vehicle, command_mode::oneoff},
{"watercircuitslinktoggle", command_target::vehicle, command_mode::oneoff},
{"watercircuitslinkenable", command_target::vehicle, command_mode::oneoff},
{"watercircuitslinkdisable", command_target::vehicle, command_mode::oneoff},
{"fuelpumptoggle", command_target::vehicle, command_mode::oneoff},
{"fuelpumpenable", command_target::vehicle, command_mode::oneoff},
{"fuelpumpdisable", command_target::vehicle, command_mode::oneoff},
{"oilpumptoggle", command_target::vehicle, command_mode::oneoff},
{"oilpumpenable", command_target::vehicle, command_mode::oneoff},
{"oilpumpdisable", command_target::vehicle, command_mode::oneoff},
{"linebreakertoggle", command_target::vehicle, command_mode::oneoff},
{"linebreakeropen", command_target::vehicle, command_mode::oneoff},
{"linebreakerclose", command_target::vehicle, command_mode::oneoff},
{"convertertoggle", command_target::vehicle, command_mode::oneoff},
{"converterenable", command_target::vehicle, command_mode::oneoff},
{"converterdisable", command_target::vehicle, command_mode::oneoff},
{"convertertogglelocal", command_target::vehicle, command_mode::oneoff},
{"converteroverloadrelayreset", command_target::vehicle, command_mode::oneoff},
{"compressortoggle", command_target::vehicle, command_mode::oneoff},
{"compressorenable", command_target::vehicle, command_mode::oneoff},
{"compressordisable", command_target::vehicle, command_mode::oneoff},
{"compressortogglelocal", command_target::vehicle, command_mode::oneoff},
{"compressorpresetactivatenext", command_target::vehicle, command_mode::oneoff},
{"compressorpresetactivateprevious", command_target::vehicle, command_mode::oneoff},
{"compressorpresetactivatedefault", command_target::vehicle, command_mode::oneoff},
{"motoroverloadrelaythresholdtoggle", command_target::vehicle, command_mode::oneoff},
{"motoroverloadrelaythresholdsetlow", command_target::vehicle, command_mode::oneoff},
{"motoroverloadrelaythresholdsethigh", command_target::vehicle, command_mode::oneoff},
{"motoroverloadrelayreset", command_target::vehicle, command_mode::oneoff},
{"universalrelayreset1", command_target::vehicle, command_mode::oneoff},
{"universalrelayreset2", command_target::vehicle, command_mode::oneoff},
{"universalrelayreset3", command_target::vehicle, command_mode::oneoff},
{"notchingrelaytoggle", command_target::vehicle, command_mode::oneoff},
{"epbrakecontroltoggle", command_target::vehicle, command_mode::oneoff},
{"epbrakecontrolenable", command_target::vehicle, command_mode::oneoff},
{"epbrakecontroldisable", command_target::vehicle, command_mode::oneoff},
{"trainbrakeoperationmodeincrease", command_target::vehicle, command_mode::oneoff},
{"trainbrakeoperationmodedecrease", command_target::vehicle, command_mode::oneoff},
{"brakeactingspeedincrease", command_target::vehicle, command_mode::oneoff},
{"brakeactingspeeddecrease", command_target::vehicle, command_mode::oneoff},
{"brakeactingspeedsetcargo", command_target::vehicle, command_mode::oneoff},
{"brakeactingspeedsetpassenger", command_target::vehicle, command_mode::oneoff},
{"brakeactingspeedsetrapid", command_target::vehicle, command_mode::oneoff},
{"brakeloadcompensationincrease", command_target::vehicle, command_mode::oneoff},
{"brakeloadcompensationdecrease", command_target::vehicle, command_mode::oneoff},
{"mubrakingindicatortoggle", command_target::vehicle, command_mode::oneoff},
{"alerteracknowledge", command_target::vehicle, command_mode::oneoff},
{"cabsignalacknowledge", command_target::vehicle, command_mode::oneoff},
{"hornlowactivate", command_target::vehicle, command_mode::oneoff},
{"hornhighactivate", command_target::vehicle, command_mode::oneoff},
{"whistleactivate", command_target::vehicle, command_mode::oneoff},
{"radiotoggle", command_target::vehicle, command_mode::oneoff},
{"radioenable", command_target::vehicle, command_mode::oneoff},
{"radiodisable", command_target::vehicle, command_mode::oneoff},
{"radiochannelincrease", command_target::vehicle, command_mode::oneoff},
{"radiochanneldecrease", command_target::vehicle, command_mode::oneoff},
{"radiochannelset", command_target::vehicle, command_mode::oneoff},
{"radiostopsend", command_target::vehicle, command_mode::oneoff},
{"radiostopenable", command_target::vehicle, command_mode::oneoff},
{"radiostopdisable", command_target::vehicle, command_mode::oneoff},
{"radiostoptest", command_target::vehicle, command_mode::oneoff},
{"radiocall3send", command_target::vehicle, command_mode::oneoff},
{"radiovolumeincrease", command_target::vehicle, command_mode::oneoff},
{"radiovolumedecrease", command_target::vehicle, command_mode::oneoff},
{"radiovolumeset", command_target::vehicle, command_mode::oneoff},
{"cabchangeforward", command_target::vehicle, command_mode::oneoff},
{"cabchangebackward", command_target::vehicle, command_mode::oneoff},
{"modernlightdimmerdecrease", command_target::vehicle, command_mode::oneoff},
{"modernlightdimmerincrease", command_target::vehicle, command_mode::oneoff},
{ "viewturn", command_target::entity, command_mode::oneoff },
{ "movehorizontal", command_target::entity, command_mode::oneoff },
{ "movehorizontalfast", command_target::entity, command_mode::oneoff },
{ "movevertical", command_target::entity, command_mode::oneoff },
{ "moveverticalfast", command_target::entity, command_mode::oneoff },
{ "moveleft", command_target::entity, command_mode::oneoff },
{ "moveright", command_target::entity, command_mode::oneoff },
{ "moveforward", command_target::entity, command_mode::oneoff },
{ "moveback", command_target::entity, command_mode::oneoff },
{ "moveup", command_target::entity, command_mode::oneoff },
{ "movedown", command_target::entity, command_mode::oneoff },
{ "nearestcarcouplingincrease", command_target::vehicle, command_mode::oneoff },
{ "nearestcarcouplingdisconnect", command_target::vehicle, command_mode::oneoff },
{ "nearestcarcoupleradapterattach", command_target::vehicle, command_mode::oneoff },
{ "nearestcarcoupleradapterremove", command_target::vehicle, command_mode::oneoff },
{ "occupiedcarcouplingdisconnect", command_target::vehicle, command_mode::oneoff },
{ "occupiedcarcouplingdisconnectback", command_target::vehicle, command_mode::oneoff },
{ "doortoggleleft", command_target::vehicle, command_mode::oneoff },
{ "doortoggleright", command_target::vehicle, command_mode::oneoff },
{ "doorpermitleft", command_target::vehicle, command_mode::oneoff },
{ "doorpermitright", command_target::vehicle, command_mode::oneoff },
{ "doorpermitpresetactivatenext", command_target::vehicle, command_mode::oneoff },
{ "doorpermitpresetactivateprevious", command_target::vehicle, command_mode::oneoff },
{ "dooropenleft", command_target::vehicle, command_mode::oneoff },
{ "dooropenright", command_target::vehicle, command_mode::oneoff },
{ "dooropenall", command_target::vehicle, command_mode::oneoff },
{ "doorcloseleft", command_target::vehicle, command_mode::oneoff },
{ "doorcloseright", command_target::vehicle, command_mode::oneoff },
{ "doorcloseall", command_target::vehicle, command_mode::oneoff },
{ "doorsteptoggle", command_target::vehicle, command_mode::oneoff },
{ "doormodetoggle", command_target::vehicle, command_mode::oneoff },
{ "mirrorstoggle", command_target::vehicle, command_mode::oneoff },
{ "departureannounce", command_target::vehicle, command_mode::oneoff },
{ "doorlocktoggle", command_target::vehicle, command_mode::oneoff },
{ "pantographcompressorvalvetoggle", command_target::vehicle, command_mode::oneoff },
{ "pantographcompressorvalveenable", command_target::vehicle, command_mode::oneoff },
{ "pantographcompressorvalvedisable", command_target::vehicle, command_mode::oneoff },
{ "pantographcompressoractivate", command_target::vehicle, command_mode::oneoff },
{ "pantographtogglefront", command_target::vehicle, command_mode::oneoff },
{ "pantographtogglerear", command_target::vehicle, command_mode::oneoff },
{ "pantographraisefront", command_target::vehicle, command_mode::oneoff },
{ "pantographraiserear", command_target::vehicle, command_mode::oneoff },
{ "pantographlowerfront", command_target::vehicle, command_mode::oneoff },
{ "pantographlowerrear", command_target::vehicle, command_mode::oneoff },
{ "pantographlowerall", command_target::vehicle, command_mode::oneoff },
{ "pantographselectnext", command_target::vehicle, command_mode::oneoff },
{ "pantographselectprevious", command_target::vehicle, command_mode::oneoff },
{ "pantographtoggleselected", command_target::vehicle, command_mode::oneoff },
{ "pantographraiseselected", command_target::vehicle, command_mode::oneoff },
{ "pantographlowerselected", command_target::vehicle, command_mode::oneoff },
{ "pantographvalvesupdate", command_target::vehicle, command_mode::oneoff },
{ "pantographvalvesoff", command_target::vehicle, command_mode::oneoff },
{ "heatingtoggle", command_target::vehicle, command_mode::oneoff },
{ "heatingenable", command_target::vehicle, command_mode::oneoff },
{ "heatingdisable", command_target::vehicle, command_mode::oneoff },
{ "lightspresetactivatenext", command_target::vehicle, command_mode::oneoff },
{ "lightspresetactivateprevious", command_target::vehicle, command_mode::oneoff },
{ "headlighttoggleleft", command_target::vehicle, command_mode::oneoff },
{ "headlightenableleft", command_target::vehicle, command_mode::oneoff },
{ "headlightdisableleft", command_target::vehicle, command_mode::oneoff },
{ "headlighttoggleright", command_target::vehicle, command_mode::oneoff },
{ "headlightenableright", command_target::vehicle, command_mode::oneoff },
{ "headlightdisableright", command_target::vehicle, command_mode::oneoff },
{ "headlighttoggleupper", command_target::vehicle, command_mode::oneoff },
{ "headlightenableupper", command_target::vehicle, command_mode::oneoff },
{ "headlightdisableupper", command_target::vehicle, command_mode::oneoff },
{ "redmarkertoggleleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkerenableleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkerdisableleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkertoggleright", command_target::vehicle, command_mode::oneoff },
{ "redmarkerenableright", command_target::vehicle, command_mode::oneoff },
{ "redmarkerdisableright", command_target::vehicle, command_mode::oneoff },
{ "headlighttogglerearleft", command_target::vehicle, command_mode::oneoff },
{ "headlightenablerearleft", command_target::vehicle, command_mode::oneoff },
{ "headlightdisablerearleft", command_target::vehicle, command_mode::oneoff },
{ "headlighttogglerearright", command_target::vehicle, command_mode::oneoff },
{ "headlightenablerearright", command_target::vehicle, command_mode::oneoff },
{ "headlightdisablerearright", command_target::vehicle, command_mode::oneoff },
{ "headlighttogglerearupper", command_target::vehicle, command_mode::oneoff },
{ "headlightenablerearupper", command_target::vehicle, command_mode::oneoff },
{ "headlightdisablerearupper", command_target::vehicle, command_mode::oneoff },
{ "redmarkertogglerearleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkerenablerearleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkerdisablerearleft", command_target::vehicle, command_mode::oneoff },
{ "redmarkertogglerearright", command_target::vehicle, command_mode::oneoff },
{ "redmarkerenablerearright", command_target::vehicle, command_mode::oneoff },
{ "redmarkerdisablerearright", command_target::vehicle, command_mode::oneoff },
{ "redmarkerstoggle", command_target::vehicle, command_mode::oneoff },
{ "endsignalstoggle", command_target::vehicle, command_mode::oneoff },
{ "headlightsdimtoggle", command_target::vehicle, command_mode::oneoff },
{ "headlightsdimenable", command_target::vehicle, command_mode::oneoff },
{ "headlightsdimdisable", command_target::vehicle, command_mode::oneoff },
{ "motorconnectorsopen", command_target::vehicle, command_mode::oneoff },
{ "motorconnectorsclose", command_target::vehicle, command_mode::oneoff },
{ "motordisconnect", command_target::vehicle, command_mode::oneoff },
{ "interiorlighttoggle", command_target::vehicle, command_mode::oneoff },
{ "interiorlightenable", command_target::vehicle, command_mode::oneoff },
{ "interiorlightdisable", command_target::vehicle, command_mode::oneoff },
{ "interiorlightdimtoggle", command_target::vehicle, command_mode::oneoff },
{ "interiorlightdimenable", command_target::vehicle, command_mode::oneoff },
{ "interiorlightdimdisable", command_target::vehicle, command_mode::oneoff },
{ "compartmentlightstoggle", command_target::vehicle, command_mode::oneoff },
{ "compartmentlightsenable", command_target::vehicle, command_mode::oneoff },
{ "compartmentlightsdisable", command_target::vehicle, command_mode::oneoff },
{ "instrumentlighttoggle", command_target::vehicle, command_mode::oneoff },
{ "instrumentlightenable", command_target::vehicle, command_mode::oneoff },
{ "instrumentlightdisable", command_target::vehicle, command_mode::oneoff },
{ "dashboardlighttoggle", command_target::vehicle, command_mode::oneoff },
{ "dashboardlightenable", command_target::vehicle, command_mode::oneoff },
{ "dashboardlightdisable", command_target::vehicle, command_mode::oneoff },
{ "timetablelighttoggle", command_target::vehicle, command_mode::oneoff },
{ "timetablelightenable", command_target::vehicle, command_mode::oneoff },
{ "timetablelightdisable", command_target::vehicle, command_mode::oneoff },
{ "generictoggle0", command_target::vehicle, command_mode::oneoff },
{ "generictoggle1", command_target::vehicle, command_mode::oneoff },
{ "generictoggle2", command_target::vehicle, command_mode::oneoff },
{ "generictoggle3", command_target::vehicle, command_mode::oneoff },
{ "generictoggle4", command_target::vehicle, command_mode::oneoff },
{ "generictoggle5", command_target::vehicle, command_mode::oneoff },
{ "generictoggle6", command_target::vehicle, command_mode::oneoff },
{ "generictoggle7", command_target::vehicle, command_mode::oneoff },
{ "generictoggle8", command_target::vehicle, command_mode::oneoff },
{ "generictoggle9", command_target::vehicle, command_mode::oneoff },
{ "batterytoggle", command_target::vehicle, command_mode::oneoff },
{ "batteryenable", command_target::vehicle, command_mode::oneoff },
{ "batterydisable", command_target::vehicle, command_mode::oneoff },
{ "cabactivationtoggle", command_target::vehicle, command_mode::oneoff },
{ "cabactivationenable", command_target::vehicle, command_mode::oneoff },
{ "cabactivationdisable", command_target::vehicle, command_mode::oneoff },
{ "motorblowerstogglefront", command_target::vehicle, command_mode::oneoff },
{ "motorblowerstogglerear", command_target::vehicle, command_mode::oneoff },
{ "motorblowersdisableall", command_target::vehicle, command_mode::oneoff },
{ "coolingfanstoggle", command_target::vehicle, command_mode::oneoff },
{ "tempomattoggle", command_target::vehicle, command_mode::oneoff },
{ "springbraketoggle", command_target::vehicle, command_mode::oneoff },
{ "springbrakeenable", command_target::vehicle, command_mode::oneoff },
{ "springbrakedisable", command_target::vehicle, command_mode::oneoff },
{ "springbrakeshutofftoggle", command_target::vehicle, command_mode::oneoff },
{ "springbrakeshutoffenable", command_target::vehicle, command_mode::oneoff },
{ "springbrakeshutoffdisable", command_target::vehicle, command_mode::oneoff },
{ "springbrakerelease", command_target::vehicle },
{ "distancecounteractivate", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolincrease", command_target::vehicle, command_mode::oneoff },
{ "speedcontroldecrease", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolpowerincrease", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolpowerdecrease", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton0", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton1", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton2", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton3", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton4", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton5", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton6", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton7", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton8", command_target::vehicle, command_mode::oneoff },
{ "speedcontrolbutton9", command_target::vehicle, command_mode::oneoff },
{ "inverterenable1", command_target::vehicle, command_mode::oneoff },
{ "inverterenable2", command_target::vehicle, command_mode::oneoff },
{ "inverterenable3", command_target::vehicle, command_mode::oneoff },
{ "inverterenable4", command_target::vehicle, command_mode::oneoff },
{ "inverterenable5", command_target::vehicle, command_mode::oneoff },
{ "inverterenable6", command_target::vehicle, command_mode::oneoff },
{ "inverterenable7", command_target::vehicle, command_mode::oneoff },
{ "inverterenable8", command_target::vehicle, command_mode::oneoff },
{ "inverterenable9", command_target::vehicle, command_mode::oneoff },
{ "inverterenable10", command_target::vehicle, command_mode::oneoff },
{ "inverterenable11", command_target::vehicle, command_mode::oneoff },
{ "inverterenable12", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable1", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable2", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable3", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable4", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable5", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable6", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable7", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable8", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable9", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable10", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable11", command_target::vehicle, command_mode::oneoff },
{ "inverterdisable12", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle1", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle2", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle3", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle4", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle5", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle6", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle7", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle8", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle9", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle10", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle11", command_target::vehicle, command_mode::oneoff },
{ "invertertoggle12", command_target::vehicle, command_mode::oneoff },
{ "globalradiostop", command_target::simulation, command_mode::oneoff },
{ "timejump", command_target::simulation, command_mode::oneoff },
{ "timejumplarge", command_target::simulation, command_mode::oneoff },
{ "timejumpsmall", command_target::simulation, command_mode::oneoff },
{ "setdatetime", command_target::simulation, command_mode::oneoff },
{ "setweather", command_target::simulation, command_mode::oneoff },
{ "settemperature", command_target::simulation, command_mode::oneoff },
{ "vehiclemoveforwards", command_target::vehicle, command_mode::oneoff },
{ "vehiclemovebackwards", command_target::vehicle, command_mode::oneoff },
{ "vehicleboost", command_target::vehicle, command_mode::oneoff },
{ "debugtoggle", command_target::simulation, command_mode::oneoff },
{ "focuspauseset", command_target::simulation, command_mode::oneoff },
{ "pausetoggle", command_target::simulation, command_mode::oneoff },
{ "entervehicle", command_target::simulation, command_mode::oneoff },
{ "resetconsist", command_target::simulation, command_mode::oneoff },
{ "fillcompressor", command_target::simulation, command_mode::oneoff },
{ "consistreleaser", command_target::simulation, command_mode::oneoff },
{ "queueevent", command_target::simulation, command_mode::oneoff },
{ "setlight", command_target::simulation, command_mode::oneoff },
{ "insertmodel", command_target::simulation, command_mode::oneoff },
{ "deletemodel", command_target::simulation, command_mode::oneoff },
{ "trainsetmove", command_target::simulation, command_mode::oneoff },
{ "consistteleport", command_target::simulation, command_mode::oneoff },
{ "pullalarmchain", command_target::simulation, command_mode::oneoff },
{ "sendaicommand", command_target::simulation, command_mode::oneoff },
{ "spawntrainset", command_target::simulation, command_mode::oneoff },
{ "destroytrainset", command_target::simulation, command_mode::oneoff },
{ "quitsimulation", command_target::simulation, command_mode::oneoff },
{"wiperswitchincrease", command_target::vehicle, command_mode::oneoff},
{"wiperswitchdecrease", command_target::vehicle, command_mode::oneoff},
};
// Maps of command and coresponding strings
std::unordered_map<std::string, user_command> commandMap = {
{"aidriverdisable", user_command::aidriverdisable},
{"jointcontrollerset", user_command::jointcontrollerset},
{"mastercontrollerincrease", user_command::mastercontrollerincrease},
{"mastercontrollerincreasefast", user_command::mastercontrollerincreasefast},
{"mastercontrollerdecrease", user_command::mastercontrollerdecrease},
{"mastercontrollerdecreasefast", user_command::mastercontrollerdecreasefast},
{"mastercontrollerset", user_command::mastercontrollerset},
{"secondcontrollerincrease", user_command::secondcontrollerincrease},
{"secondcontrollerincreasefast", user_command::secondcontrollerincreasefast},
{"secondcontrollerdecrease", user_command::secondcontrollerdecrease},
{"secondcontrollerdecreasefast", user_command::secondcontrollerdecreasefast},
{"secondcontrollerset", user_command::secondcontrollerset},
{"mucurrentindicatorothersourceactivate", user_command::mucurrentindicatorothersourceactivate},
{"independentbrakeincrease", user_command::independentbrakeincrease},
{"independentbrakeincreasefast", user_command::independentbrakeincreasefast},
{"independentbrakedecrease", user_command::independentbrakedecrease},
{"independentbrakedecreasefast", user_command::independentbrakedecreasefast},
{"independentbrakeset", user_command::independentbrakeset},
{"independentbrakebailoff", user_command::independentbrakebailoff},
{"universalbrakebutton1", user_command::universalbrakebutton1},
{"universalbrakebutton2", user_command::universalbrakebutton2},
{"universalbrakebutton3", user_command::universalbrakebutton3},
{"trainbrakeincrease", user_command::trainbrakeincrease},
{"trainbrakedecrease", user_command::trainbrakedecrease},
{"trainbrakeset", user_command::trainbrakeset},
{"trainbrakecharging", user_command::trainbrakecharging},
{"trainbrakerelease", user_command::trainbrakerelease},
{"trainbrakefirstservice", user_command::trainbrakefirstservice},
{"trainbrakeservice", user_command::trainbrakeservice},
{"trainbrakefullservice", user_command::trainbrakefullservice},
{"trainbrakehandleoff", user_command::trainbrakehandleoff},
{"trainbrakeemergency", user_command::trainbrakeemergency},
{"trainbrakebasepressureincrease", user_command::trainbrakebasepressureincrease},
{"trainbrakebasepressuredecrease", user_command::trainbrakebasepressuredecrease},
{"trainbrakebasepressurereset", user_command::trainbrakebasepressurereset},
{"trainbrakeoperationtoggle", user_command::trainbrakeoperationtoggle},
{"manualbrakeincrease", user_command::manualbrakeincrease},
{"manualbrakedecrease", user_command::manualbrakedecrease},
{"alarmchaintoggle", user_command::alarmchaintoggle},
{"alarmchainenable", user_command::alarmchainenable},
{"alarmchaindisable", user_command::alarmchaindisable},
{"wheelspinbrakeactivate", user_command::wheelspinbrakeactivate},
{"sandboxactivate", user_command::sandboxactivate},
{"autosandboxtoggle", user_command::autosandboxtoggle},
{"autosandboxactivate", user_command::autosandboxactivate},
{"autosandboxdeactivate", user_command::autosandboxdeactivate},
{"reverserincrease", user_command::reverserincrease},
{"reverserdecrease", user_command::reverserdecrease},
{"reverserforwardhigh", user_command::reverserforwardhigh},
{"reverserforward", user_command::reverserforward},
{"reverserneutral", user_command::reverserneutral},
{"reverserbackward", user_command::reverserbackward},
{"waterpumpbreakertoggle", user_command::waterpumpbreakertoggle},
{"waterpumpbreakerclose", user_command::waterpumpbreakerclose},
{"waterpumpbreakeropen", user_command::waterpumpbreakeropen},
{"waterpumptoggle", user_command::waterpumptoggle},
{"waterpumpenable", user_command::waterpumpenable},
{"waterpumpdisable", user_command::waterpumpdisable},
{"waterheaterbreakertoggle", user_command::waterheaterbreakertoggle},
{"waterheaterbreakerclose", user_command::waterheaterbreakerclose},
{"waterheaterbreakeropen", user_command::waterheaterbreakeropen},
{"waterheatertoggle", user_command::waterheatertoggle},
{"waterheaterenable", user_command::waterheaterenable},
{"waterheaterdisable", user_command::waterheaterdisable},
{"watercircuitslinktoggle", user_command::watercircuitslinktoggle},
{"watercircuitslinkenable", user_command::watercircuitslinkenable},
{"watercircuitslinkdisable", user_command::watercircuitslinkdisable},
{"fuelpumptoggle", user_command::fuelpumptoggle},
{"fuelpumpenable", user_command::fuelpumpenable},
{"fuelpumpdisable", user_command::fuelpumpdisable},
{"oilpumptoggle", user_command::oilpumptoggle},
{"oilpumpenable", user_command::oilpumpenable},
{"oilpumpdisable", user_command::oilpumpdisable},
{"linebreakertoggle", user_command::linebreakertoggle},
{"linebreakeropen", user_command::linebreakeropen},
{"linebreakerclose", user_command::linebreakerclose},
{"convertertoggle", user_command::convertertoggle},
{"converterenable", user_command::converterenable},
{"converterdisable", user_command::converterdisable},
{"convertertogglelocal", user_command::convertertogglelocal},
{"converteroverloadrelayreset", user_command::converteroverloadrelayreset},
{"compressortoggle", user_command::compressortoggle},
{"compressorenable", user_command::compressorenable},
{"compressordisable", user_command::compressordisable},
{"compressortogglelocal", user_command::compressortogglelocal},
{"compressorpresetactivatenext", user_command::compressorpresetactivatenext},
{"compressorpresetactivateprevious", user_command::compressorpresetactivateprevious},
{"compressorpresetactivatedefault", user_command::compressorpresetactivatedefault},
{"motoroverloadrelaythresholdtoggle", user_command::motoroverloadrelaythresholdtoggle},
{"motoroverloadrelaythresholdsetlow", user_command::motoroverloadrelaythresholdsetlow},
{"motoroverloadrelaythresholdsethigh", user_command::motoroverloadrelaythresholdsethigh},
{"motoroverloadrelayreset", user_command::motoroverloadrelayreset},
{"universalrelayreset1", user_command::universalrelayreset1},
{"universalrelayreset2", user_command::universalrelayreset2},
{"universalrelayreset3", user_command::universalrelayreset3},
{"notchingrelaytoggle", user_command::notchingrelaytoggle},
{"epbrakecontroltoggle", user_command::epbrakecontroltoggle},
{"epbrakecontrolenable", user_command::epbrakecontrolenable},
{"epbrakecontroldisable", user_command::epbrakecontroldisable},
{"trainbrakeoperationmodeincrease", user_command::trainbrakeoperationmodeincrease},
{"trainbrakeoperationmodedecrease", user_command::trainbrakeoperationmodedecrease},
{"brakeactingspeedincrease", user_command::brakeactingspeedincrease},
{"brakeactingspeeddecrease", user_command::brakeactingspeeddecrease},
{"brakeactingspeedsetcargo", user_command::brakeactingspeedsetcargo},
{"brakeactingspeedsetpassenger", user_command::brakeactingspeedsetpassenger},
{"brakeactingspeedsetrapid", user_command::brakeactingspeedsetrapid},
{"brakeloadcompensationincrease", user_command::brakeloadcompensationincrease},
{"brakeloadcompensationdecrease", user_command::brakeloadcompensationdecrease},
{"mubrakingindicatortoggle", user_command::mubrakingindicatortoggle},
{"alerteracknowledge", user_command::alerteracknowledge},
{"cabsignalacknowledge", user_command::cabsignalacknowledge},
{"hornlowactivate", user_command::hornlowactivate},
{"hornhighactivate", user_command::hornhighactivate},
{"whistleactivate", user_command::whistleactivate},
{"radiotoggle", user_command::radiotoggle},
{"radioenable", user_command::radioenable},
{"radiodisable", user_command::radiodisable},
{"radiochannelincrease", user_command::radiochannelincrease},
{"radiochanneldecrease", user_command::radiochanneldecrease},
{"radiochannelset", user_command::radiochannelset},
{"radiostopsend", user_command::radiostopsend},
{"radiostopenable", user_command::radiostopenable},
{"radiostopdisable", user_command::radiostopdisable},
{"radiostoptest", user_command::radiostoptest},
{"radiocall3send", user_command::radiocall3send},
{"radiovolumeincrease", user_command::radiovolumeincrease},
{"radiovolumedecrease", user_command::radiovolumedecrease},
{"radiovolumeset", user_command::radiovolumeset},
{"cabchangeforward", user_command::cabchangeforward},
{"cabchangebackward", user_command::cabchangebackward},
{"viewturn", user_command::viewturn},
{"movehorizontal", user_command::movehorizontal},
{"movehorizontalfast", user_command::movehorizontalfast},
{"movevertical", user_command::movevertical},
{"moveverticalfast", user_command::moveverticalfast},
{"moveleft", user_command::moveleft},
{"moveright", user_command::moveright},
{"moveforward", user_command::moveforward},
{"moveback", user_command::moveback},
{"moveup", user_command::moveup},
{"movedown", user_command::movedown},
{"nearestcarcouplingincrease", user_command::nearestcarcouplingincrease},
{"nearestcarcouplingdisconnect", user_command::nearestcarcouplingdisconnect},
{"nearestcarcoupleradapterattach", user_command::nearestcarcoupleradapterattach},
{"nearestcarcoupleradapterremove", user_command::nearestcarcoupleradapterremove},
{"occupiedcarcouplingdisconnect", user_command::occupiedcarcouplingdisconnect},
{"occupiedcarcouplingdisconnectback", user_command::occupiedcarcouplingdisconnectback},
{"doortoggleleft", user_command::doortoggleleft},
{"doortoggleright", user_command::doortoggleright},
{"doorpermitleft", user_command::doorpermitleft},
{"doorpermitright", user_command::doorpermitright},
{"doorpermitpresetactivatenext", user_command::doorpermitpresetactivatenext},
{"doorpermitpresetactivateprevious", user_command::doorpermitpresetactivateprevious},
{"dooropenleft", user_command::dooropenleft},
{"dooropenright", user_command::dooropenright},
{"dooropenall", user_command::dooropenall},
{"doorcloseleft", user_command::doorcloseleft},
{"doorcloseright", user_command::doorcloseright},
{"doorcloseall", user_command::doorcloseall},
{"doorsteptoggle", user_command::doorsteptoggle},
{"doormodetoggle", user_command::doormodetoggle},
{"mirrorstoggle", user_command::mirrorstoggle},
{"departureannounce", user_command::departureannounce},
{"doorlocktoggle", user_command::doorlocktoggle},
{"pantographcompressorvalvetoggle", user_command::pantographcompressorvalvetoggle},
{"pantographcompressorvalveenable", user_command::pantographcompressorvalveenable},
{"pantographcompressorvalvedisable", user_command::pantographcompressorvalvedisable},
{"pantographcompressoractivate", user_command::pantographcompressoractivate},
{"pantographtogglefront", user_command::pantographtogglefront},
{"pantographtogglerear", user_command::pantographtogglerear},
{"pantographraisefront", user_command::pantographraisefront},
{"pantographraiserear", user_command::pantographraiserear},
{"pantographlowerfront", user_command::pantographlowerfront},
{"pantographlowerrear", user_command::pantographlowerrear},
{"pantographlowerall", user_command::pantographlowerall},
{"pantographselectnext", user_command::pantographselectnext},
{"pantographselectprevious", user_command::pantographselectprevious},
{"pantographtoggleselected", user_command::pantographtoggleselected},
{"pantographraiseselected", user_command::pantographraiseselected},
{"pantographlowerselected", user_command::pantographlowerselected},
{"pantographvalvesupdate", user_command::pantographvalvesupdate},
{"pantographvalvesoff", user_command::pantographvalvesoff},
{"heatingtoggle", user_command::heatingtoggle},
{"heatingenable", user_command::heatingenable},
{"heatingdisable", user_command::heatingdisable},
{"lightspresetactivatenext", user_command::lightspresetactivatenext},
{"lightspresetactivateprevious", user_command::lightspresetactivateprevious},
{"headlighttoggleleft", user_command::headlighttoggleleft},
{"headlightenableleft", user_command::headlightenableleft},
{"headlightdisableleft", user_command::headlightdisableleft},
{"headlighttoggleright", user_command::headlighttoggleright},
{"headlightenableright", user_command::headlightenableright},
{"headlightdisableright", user_command::headlightdisableright},
{"headlighttoggleupper", user_command::headlighttoggleupper},
{"headlightenableupper", user_command::headlightenableupper},
{"headlightdisableupper", user_command::headlightdisableupper},
{"redmarkertoggleleft", user_command::redmarkertoggleleft},
{"redmarkerenableleft", user_command::redmarkerenableleft},
{"redmarkerdisableleft", user_command::redmarkerdisableleft},
{"redmarkertoggleright", user_command::redmarkertoggleright},
{"redmarkerenableright", user_command::redmarkerenableright},
{"redmarkerdisableright", user_command::redmarkerdisableright},
{"headlighttogglerearleft", user_command::headlighttogglerearleft},
{"headlightenablerearleft", user_command::headlightenablerearleft},
{"headlightdisablerearleft", user_command::headlightdisablerearleft},
{"headlighttogglerearright", user_command::headlighttogglerearright},
{"headlightenablerearright", user_command::headlightenablerearright},
{"headlightdisablerearright", user_command::headlightdisablerearright},
{"headlighttogglerearupper", user_command::headlighttogglerearupper},
{"headlightenablerearupper", user_command::headlightenablerearupper},
{"headlightdisablerearupper", user_command::headlightdisablerearupper},
{"redmarkertogglerearleft", user_command::redmarkertogglerearleft},
{"redmarkerenablerearleft", user_command::redmarkerenablerearleft},
{"redmarkerdisablerearleft", user_command::redmarkerdisablerearleft},
{"redmarkertogglerearright", user_command::redmarkertogglerearright},
{"redmarkerenablerearright", user_command::redmarkerenablerearright},
{"redmarkerdisablerearright", user_command::redmarkerdisablerearright},
{"redmarkerstoggle", user_command::redmarkerstoggle},
{"endsignalstoggle", user_command::endsignalstoggle},
{"headlightsdimtoggle", user_command::headlightsdimtoggle},
{"headlightsdimenable", user_command::headlightsdimenable},
{"headlightsdimdisable", user_command::headlightsdimdisable},
{"motorconnectorsopen", user_command::motorconnectorsopen},
{"motorconnectorsclose", user_command::motorconnectorsclose},
{"motordisconnect", user_command::motordisconnect},
{"interiorlighttoggle", user_command::interiorlighttoggle},
{"interiorlightenable", user_command::interiorlightenable},
{"interiorlightdisable", user_command::interiorlightdisable},
{"interiorlightdimtoggle", user_command::interiorlightdimtoggle},
{"interiorlightdimenable", user_command::interiorlightdimenable},
{"interiorlightdimdisable", user_command::interiorlightdimdisable},
{"compartmentlightstoggle", user_command::compartmentlightstoggle},
{"compartmentlightsenable", user_command::compartmentlightsenable},
{"compartmentlightsdisable", user_command::compartmentlightsdisable},
{"instrumentlighttoggle", user_command::instrumentlighttoggle},
{"instrumentlightenable", user_command::instrumentlightenable},
{"instrumentlightdisable", user_command::instrumentlightdisable},
{"dashboardlighttoggle", user_command::dashboardlighttoggle},
{"dashboardlightenable", user_command::dashboardlightenable},
{"dashboardlightdisable", user_command::dashboardlightdisable},
{"timetablelighttoggle", user_command::timetablelighttoggle},
{"timetablelightenable", user_command::timetablelightenable},
{"timetablelightdisable", user_command::timetablelightdisable},
{"generictoggle0", user_command::generictoggle0},
{"generictoggle1", user_command::generictoggle1},
{"generictoggle2", user_command::generictoggle2},
{"generictoggle3", user_command::generictoggle3},
{"generictoggle4", user_command::generictoggle4},
{"generictoggle5", user_command::generictoggle5},
{"generictoggle6", user_command::generictoggle6},
{"generictoggle7", user_command::generictoggle7},
{"generictoggle8", user_command::generictoggle8},
{"generictoggle9", user_command::generictoggle9},
{"batterytoggle", user_command::batterytoggle},
{"batteryenable", user_command::batteryenable},
{"batterydisable", user_command::batterydisable},
{"cabactivationtoggle", user_command::cabactivationtoggle},
{"cabactivationenable", user_command::cabactivationenable},
{"cabactivationdisable", user_command::cabactivationdisable},
{"motorblowerstogglefront", user_command::motorblowerstogglefront},
{"motorblowerstogglerear", user_command::motorblowerstogglerear},
{"motorblowersdisableall", user_command::motorblowersdisableall},
{"coolingfanstoggle", user_command::coolingfanstoggle},
{"tempomattoggle", user_command::tempomattoggle},
{"springbraketoggle", user_command::springbraketoggle},
{"springbrakeenable", user_command::springbrakeenable},
{"springbrakedisable", user_command::springbrakedisable},
{"springbrakeshutofftoggle", user_command::springbrakeshutofftoggle},
{"springbrakeshutoffenable", user_command::springbrakeshutoffenable},
{"springbrakeshutoffdisable", user_command::springbrakeshutoffdisable},
{"springbrakerelease", user_command::springbrakerelease},
{"distancecounteractivate", user_command::distancecounteractivate},
{"speedcontrolincrease", user_command::speedcontrolincrease},
{"speedcontroldecrease", user_command::speedcontroldecrease},
{"speedcontrolpowerincrease", user_command::speedcontrolpowerincrease},
{"speedcontrolpowerdecrease", user_command::speedcontrolpowerdecrease},
{"speedcontrolbutton0", user_command::speedcontrolbutton0},
{"speedcontrolbutton1", user_command::speedcontrolbutton1},
{"speedcontrolbutton2", user_command::speedcontrolbutton2},
{"speedcontrolbutton3", user_command::speedcontrolbutton3},
{"speedcontrolbutton4", user_command::speedcontrolbutton4},
{"speedcontrolbutton5", user_command::speedcontrolbutton5},
{"speedcontrolbutton6", user_command::speedcontrolbutton6},
{"speedcontrolbutton7", user_command::speedcontrolbutton7},
{"speedcontrolbutton8", user_command::speedcontrolbutton8},
{"speedcontrolbutton9", user_command::speedcontrolbutton9},
{"inverterenable1", user_command::inverterenable1},
{"inverterenable2", user_command::inverterenable2},
{"inverterenable3", user_command::inverterenable3},
{"inverterenable4", user_command::inverterenable4},
{"inverterenable5", user_command::inverterenable5},
{"inverterenable6", user_command::inverterenable6},
{"inverterenable7", user_command::inverterenable7},
{"inverterenable8", user_command::inverterenable8},
{"inverterenable9", user_command::inverterenable9},
{"inverterenable10", user_command::inverterenable10},
{"inverterenable11", user_command::inverterenable11},
{"inverterenable12", user_command::inverterenable12},
{"inverterdisable1", user_command::inverterdisable1},
{"inverterdisable2", user_command::inverterdisable2},
{"inverterdisable3", user_command::inverterdisable3},
{"inverterdisable4", user_command::inverterdisable4},
{"inverterdisable5", user_command::inverterdisable5},
{"inverterdisable6", user_command::inverterdisable6},
{"inverterdisable7", user_command::inverterdisable7},
{"inverterdisable8", user_command::inverterdisable8},
{"inverterdisable9", user_command::inverterdisable9},
{"inverterdisable10", user_command::inverterdisable10},
{"inverterdisable11", user_command::inverterdisable11},
{"inverterdisable12", user_command::inverterdisable12},
{"invertertoggle1", user_command::invertertoggle1},
{"invertertoggle2", user_command::invertertoggle2},
{"invertertoggle3", user_command::invertertoggle3},
{"invertertoggle4", user_command::invertertoggle4},
{"invertertoggle5", user_command::invertertoggle5},
{"invertertoggle6", user_command::invertertoggle6},
{"invertertoggle7", user_command::invertertoggle7},
{"invertertoggle8", user_command::invertertoggle8},
{"invertertoggle9", user_command::invertertoggle9},
{"invertertoggle10", user_command::invertertoggle10},
{"invertertoggle11", user_command::invertertoggle11},
{"invertertoggle12", user_command::invertertoggle12},
{"globalradiostop", user_command::globalradiostop},
{"timejump", user_command::timejump},
{"timejumplarge", user_command::timejumplarge},
{"timejumpsmall", user_command::timejumpsmall},
{"setdatetime", user_command::setdatetime},
{"setweather", user_command::setweather},
{"settemperature", user_command::settemperature},
{"vehiclemoveforwards", user_command::vehiclemoveforwards},
{"vehiclemovebackwards", user_command::vehiclemovebackwards},
{"vehicleboost", user_command::vehicleboost},
{"debugtoggle", user_command::debugtoggle},
{"focuspauseset", user_command::focuspauseset},
{"pausetoggle", user_command::pausetoggle},
{"entervehicle", user_command::entervehicle},
{"resetconsist", user_command::resetconsist},
{"fillcompressor", user_command::fillcompressor},
{"consistreleaser", user_command::consistreleaser},
{"queueevent", user_command::queueevent},
{"setlight", user_command::setlight},
{"insertmodel", user_command::insertmodel},
{"deletemodel", user_command::deletemodel},
{"dynamicmove", user_command::dynamicmove},
{"consistteleport", user_command::consistteleport},
{"pullalarmchain", user_command::pullalarmchain},
{"sendaicommand", user_command::sendaicommand},
{"spawntrainset", user_command::spawntrainset},
{"destroytrainset", user_command::destroytrainset},
{"quitsimulation", user_command::quitsimulation},
{"wiperswitchincrease", user_command::wiperswitchincrease},
{"wiperswitchdecrease", user_command::wiperswitchdecrease},
{"none", user_command::none}};
} // namespace simulation
void command_queue::update()
{
double delta = Timer::GetDeltaTime();
for (auto c : m_active_continuous)
{
command_data data({c.first, GLFW_REPEAT, 0.0, 0.0, delta, false, glm::vec3()}); // todo: improve
auto lookup = m_commands.emplace( c.second, commanddata_sequence() );
// recipient stack was either located or created, so we can add to it quite safely
lookup.first->second.emplace_back( data );
}
}
// posts specified command for specified recipient
void
command_queue::push( command_data const &Command, uint32_t const Recipient ) {
if (is_network_target(Recipient)) {
auto lookup = m_intercept_queue.emplace(Recipient, commanddata_sequence());
lookup.first->second.emplace_back(Command);
} else {
push_direct(Command, Recipient);
}
}
void command_queue::push_direct(const command_data &Command, const uint32_t Recipient) {
auto const &desc = simulation::Commands_descriptions[ static_cast<std::size_t>( Command.command ) ];
if (desc.mode == command_mode::continuous)
{
if (Command.action == GLFW_PRESS)
m_active_continuous.emplace(std::make_pair(Command.command, Recipient));
else if (Command.action == GLFW_RELEASE)
m_active_continuous.erase(std::make_pair(Command.command, Recipient));
else if (Command.action == GLFW_REPEAT)
return;
}
auto lookup = m_commands.emplace( Recipient, commanddata_sequence() );
// recipient stack was either located or created, so we can add to it quite safely
lookup.first->second.emplace_back( Command );
}
// retrieves oldest posted command for specified recipient, if any. returns: true on retrieval, false if there's nothing to retrieve
bool
command_queue::pop( command_data &Command, uint32_t const Recipient ) {
auto lookup = m_commands.find( Recipient );
if( lookup == m_commands.end() ) {
// no command stack for this recipient, so no commands
return false;
}
auto &commands = lookup->second;
if( true == commands.empty() ) {
return false;
}
// we have command stack with command(s) on it, retrieve and pop the first one
Command = commands.front();
commands.pop_front();
return true;
}
bool command_queue::is_network_target(uint32_t const Recipient) {
const command_target target = (command_target)(Recipient & ~0xffff);
if (target == command_target::entity)
return false;
return true;
}
command_queue::commands_map command_queue::pop_intercept_queue() {
commands_map map(m_intercept_queue);
m_intercept_queue.clear();
return map;
}
void command_queue::push_commands(const commands_map &commands) {
for (auto const &kv : commands)
for (command_data const &data : kv.second)
push_direct(data, kv.first);
}
void
command_relay::post(user_command const Command, double const Param1, double const Param2,
int const Action, uint16_t Recipient, glm::vec3 Position, const std::string *Payload) const {
auto const &command = simulation::Commands_descriptions[ static_cast<std::size_t>( Command ) ];
if (command.target == command_target::vehicle && Recipient == 0) {
// default 0 recipient is currently controlled train
if (simulation::Train == nullptr)
return;
Recipient = simulation::Train->id();
}
if( ( command.target == command_target::vehicle )
&& ( true == FreeFlyModeFlag )
&& ( ( false == DebugModeFlag )
&& ( true == Global.RealisticControlMode ) ) ) {
// in realistic control mode don't pass vehicle commands if the user isn't in one, unless we're in debug mode
return;
}
if (Position == glm::vec3(0.0f))
Position = Global.pCamera.Pos;
uint32_t combined_recipient = static_cast<uint32_t>( command.target ) | Recipient;
command_data commanddata({Command, Action, Param1, Param2, Timer::GetDeltaTime(), FreeFlyModeFlag, Position });
if (Payload)
commanddata.payload = *Payload;
simulation::Commands.push(commanddata, combined_recipient);
}