/* 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 }, { "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 }, }; // Maps of command and coresponding strings std::unordered_map 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}, {"none", user_command::none}}; } // 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( 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( 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( 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); }