This repository was archived by the owner on Nov 20, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 56
Expand file tree
/
Copy pathcommand.cpp
More file actions
895 lines (867 loc) · 54.1 KB
/
command.cpp
File metadata and controls
895 lines (867 loc) · 54.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
/*
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},
{"generictoggle10", command_target::vehicle, command_mode::oneoff},
{"generictoggle11", command_target::vehicle, command_mode::oneoff},
{"generictoggle12", command_target::vehicle, command_mode::oneoff},
{"generictoggle13", command_target::vehicle, command_mode::oneoff},
{"generictoggle14", command_target::vehicle, command_mode::oneoff},
{"generictoggle15", command_target::vehicle, command_mode::oneoff},
{"generictoggle16", command_target::vehicle, command_mode::oneoff},
{"generictoggle17", command_target::vehicle, command_mode::oneoff},
{"generictoggle18", command_target::vehicle, command_mode::oneoff},
{"generictoggle19", command_target::vehicle, command_mode::oneoff},
{"generictoggle20", command_target::vehicle, command_mode::oneoff},
{"generictoggle21", command_target::vehicle, command_mode::oneoff},
{"generictoggle22", command_target::vehicle, command_mode::oneoff},
{"generictoggle23", command_target::vehicle, command_mode::oneoff},
{"generictoggle24", command_target::vehicle, command_mode::oneoff},
{"generictoggle25", command_target::vehicle, command_mode::oneoff},
{"generictoggle26", command_target::vehicle, command_mode::oneoff},
{"generictoggle27", command_target::vehicle, command_mode::oneoff},
{"generictoggle28", command_target::vehicle, command_mode::oneoff},
{"generictoggle29", 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},
{"lightsset", 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},
{"generictoggle10", user_command::generictoggle10},
{"generictoggle11", user_command::generictoggle11},
{"generictoggle12", user_command::generictoggle12},
{"generictoggle13", user_command::generictoggle13},
{"generictoggle14", user_command::generictoggle14},
{"generictoggle15", user_command::generictoggle15},
{"generictoggle16", user_command::generictoggle16},
{"generictoggle17", user_command::generictoggle17},
{"generictoggle18", user_command::generictoggle18},
{"generictoggle19", user_command::generictoggle19},
{"generictoggle20", user_command::generictoggle20},
{"generictoggle21", user_command::generictoggle21},
{"generictoggle22", user_command::generictoggle22},
{"generictoggle23", user_command::generictoggle23},
{"generictoggle24", user_command::generictoggle24},
{"generictoggle25", user_command::generictoggle25},
{"generictoggle26", user_command::generictoggle26},
{"generictoggle27", user_command::generictoggle27},
{"generictoggle28", user_command::generictoggle28},
{"generictoggle29", user_command::generictoggle29},
{"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},
{"lightsset", user_command::lightsset},
{"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);
}