RigsofRods
Soft-body Physics Simulation
InputEngine.cpp
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2023 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #include "InputEngine.h"
23 
24 #include "Actor.h"
25 #include "AppContext.h"
26 #include "Console.h"
27 #include "ContentManager.h"
28 #include "GUIManager.h"
29 #include "Language.h"
30 
31 #include <regex>
32 
33 using namespace RoR;
34 
35 const char* mOISDeviceType[6] = {"Unknown Device", "Keyboard", "Mouse", "JoyStick", "Tablet", "Other Device"};
36 
38  // Common: generic
39  {"COMMON_ACCELERATE_SIMULATION", EV_COMMON_ACCELERATE_SIMULATION, "Keyboard CTRL+EQUALS", _LC("InputEvent", "accelerate the simulation")},
40  {"COMMON_DECELERATE_SIMULATION", EV_COMMON_DECELERATE_SIMULATION, "Keyboard SHIFT+EQUALS", _LC("InputEvent", "decelerate the simulation")},
41  {"COMMON_RESET_SIMULATION_PACE", EV_COMMON_RESET_SIMULATION_PACE, "Keyboard BACKSLASH", _LC("InputEvent", "reset the simulation pace")},
42  {"COMMON_OUTPUT_POSITION", EV_COMMON_OUTPUT_POSITION, "Keyboard H", _LC("InputEvent", "write current position to log (you can open the logfile and reuse the position)")},
43  {"COMMON_QUIT_GAME", EV_COMMON_QUIT_GAME, "Keyboard EXPL+ESCAPE", _LC("InputEvent", "exit the game")},
44  {"COMMON_QUICKLOAD", EV_COMMON_QUICKLOAD, "Keyboard MULTIPLY", _LC("InputEvent", "quickload scene")},
45  {"COMMON_QUICKSAVE", EV_COMMON_QUICKSAVE, "Keyboard DIVIDE", _LC("InputEvent", "quicksave scene")},
46  {"COMMON_SCREENSHOT", EV_COMMON_SCREENSHOT, "Keyboard EXPL+SYSRQ", _LC("InputEvent", "take a screenshot")},
47  {"COMMON_SCREENSHOT_BIG", EV_COMMON_SCREENSHOT_BIG, "Keyboard EXPL+CTRL+SYSRQ", _LC("InputEvent", "take a big screenshot (3 times the screen size)")},
48  {"COMMON_TOGGLE_MAT_DEBUG", EV_COMMON_TOGGLE_MAT_DEBUG, "", _LC("InputEvent", "debug purpose - dont use")},
49  {"COMMON_TOGGLE_PHYSICS", EV_COMMON_TOGGLE_PHYSICS, "Keyboard EXPL+J", _LC("InputEvent", "enable or disable physics")},
50  {"COMMON_FOV_LESS", EV_COMMON_FOV_LESS, "Keyboard EXPL+NUMPAD7", _LC("InputEvent", "decreases the current FOV value")},
51  {"COMMON_FOV_MORE", EV_COMMON_FOV_MORE, "Keyboard EXPL+CTRL+NUMPAD7", _LC("InputEvent", "increase the current FOV value")},
52  {"COMMON_FOV_RESET", EV_COMMON_FOV_RESET, "Keyboard EXPL+SHIFT+NUMPAD7", _LC("InputEvent", "reset the FOV value")},
53  {"COMMON_SAVE_TERRAIN", EV_COMMON_SAVE_TERRAIN, "Keyboard EXPL+ALT+SHIF+CTRL+M",_LC("InputEvent", "save the currently loaded terrain to a mesh file")},
54  {"COMMON_TOGGLE_TERRAIN_EDITOR", EV_COMMON_TOGGLE_TERRAIN_EDITOR, "Keyboard EXPL+SHIFT+Y", _LC("InputEvent", "toggle terrain editor")},
55  {"COMMON_FULLSCREEN_TOGGLE", EV_COMMON_FULLSCREEN_TOGGLE, "Keyboard EXPL+ALT+RETURN", _LC("InputEvent", "toggle between windowed and fullscreen mode")},
56 
57  // Comon: actor interaction
58  {"COMMON_ENTER_OR_EXIT_TRUCK", EV_COMMON_ENTER_OR_EXIT_TRUCK, "Keyboard RETURN", _LC("InputEvent", "enter or exit a truck")},
59  {"COMMON_ENTER_NEXT_TRUCK", EV_COMMON_ENTER_NEXT_TRUCK, "Keyboard EXPL+CTRL+RBRACKET", _LC("InputEvent", "enter next truck")},
60  {"COMMON_ENTER_PREVIOUS_TRUCK", EV_COMMON_ENTER_PREVIOUS_TRUCK, "Keyboard EXPL+CTRL+LBRACKET", _LC("InputEvent", "enter previous truck")},
61  {"COMMON_REMOVE_CURRENT_TRUCK", EV_COMMON_REMOVE_CURRENT_TRUCK, "Keyboard EXPL+CTRL+DELETE", _LC("InputEvent", "remove current truck")},
62  {"COMMON_TRUCK_REMOVE", EV_COMMON_TRUCK_REMOVE, "Keyboard EXPL+CTRL+SHIFT+DELETE",_LC("InputEvent", "delete current truck")},
63  {"COMMON_RESPAWN_LAST_TRUCK", EV_COMMON_RESPAWN_LAST_TRUCK, "Keyboard EXPL+CTRL+PERIOD", _LC("InputEvent", "respawn last truck")},
64  {"COMMON_GET_NEW_VEHICLE", EV_COMMON_GET_NEW_VEHICLE, "Keyboard EXPL+CTRL+G", _LC("InputEvent", "get new vehicle")},
65  {"COMMON_PRESSURE_LESS", EV_COMMON_PRESSURE_LESS, "Keyboard LBRACKET", _LC("InputEvent", "decrease tire pressure (note: only very few trucks support this)")},
66  {"COMMON_PRESSURE_MORE", EV_COMMON_PRESSURE_MORE, "Keyboard RBRACKET", _LC("InputEvent", "increase tire pressure (note: only very few trucks support this)")},
67  {"COMMON_LOCK", EV_COMMON_LOCK, "Keyboard EXPL+L", _LC("InputEvent", "connect hook node to a node in close proximity")},
68  {"COMMON_AUTOLOCK", EV_COMMON_AUTOLOCK, "Keyboard EXPL+ALT+L", _LC("InputEvent", "unlock autolock hook node")},
69  {"COMMON_ROPELOCK", EV_COMMON_ROPELOCK, "Keyboard EXPL+CTRL+L", _LC("InputEvent", "connect a rope to a node in close proximity")},
70  {"COMMON_REPAIR_TRUCK", EV_COMMON_REPAIR_TRUCK, "Keyboard BACK", _LC("InputEvent", "repair truck")},
71  {"COMMON_LIVE_REPAIR_MODE", EV_COMMON_LIVE_REPAIR_MODE, "Keyboard ALT+BACK", _LC("InputEvent", "toggle truck interactive repair mode")},
72  {"COMMON_RESCUE_TRUCK", EV_COMMON_RESCUE_TRUCK, "Keyboard EXPL+R", _LC("InputEvent", "teleport to rescue truck")},
73  {"COMMON_RESET_TRUCK", EV_COMMON_RESET_TRUCK, "Keyboard I", _LC("InputEvent", "reset truck to original starting position")},
74  {"COMMON_TOGGLE_RESET_MODE", EV_COMMON_TOGGLE_RESET_MODE, "Keyboard EXPL+APOSTROPHE", _LC("InputEvent", "toggle reset mode")},
75  {"COMMON_SECURE_LOAD", EV_COMMON_SECURE_LOAD, "Keyboard O", _LC("InputEvent", "tie a load to the truck")},
76  {"COMMON_TOGGLE_TRUCK_BEACONS", EV_COMMON_TOGGLE_TRUCK_BEACONS, "Keyboard M", _LC("InputEvent", "toggle truck beacons")},
77  {"COMMON_TOGGLE_TRUCK_LOW_BEAMS", EV_COMMON_TOGGLE_TRUCK_LOW_BEAMS, "Keyboard EXPL+N", _LC("InputEvent", "toggle truck low beams")},
78  {"COMMON_CYCLE_TRUCK_LIGHTS", EV_COMMON_CYCLE_TRUCK_LIGHTS, "Keyboard EXPL+CTRL+N", _LC("InputEvent", "cycle between light modes")},
79  {"COMMON_TOGGLE_TRUCK_HIGH_BEAMS",EV_COMMON_TOGGLE_TRUCK_HIGH_BEAMS,"Keyboard EXPL+SHIFT+N", _LC("InputEvent", "toggle truck high beams")},
80  {"COMMON_TOGGLE_TRUCK_FOG_LIGHTS",EV_COMMON_TOGGLE_TRUCK_FOG_LIGHTS,"Keyboard EXPL+ALT+N", _LC("InputEvent", "toggle truck fog lights")},
81  {"COMMON_TOGGLE_CUSTOM_PARTICLES",EV_COMMON_TOGGLE_CUSTOM_PARTICLES,"Keyboard G", _LC("InputEvent", "toggle particle cannon")},
82  {"COMMON_TOGGLE_REPLAY_MODE", EV_COMMON_TOGGLE_REPLAY_MODE, "Keyboard EXPL+CTRL+J", _LC("InputEvent", "enable or disable replay mode")},
83  {"COMMON_REPLAY_FORWARD", EV_COMMON_REPLAY_FORWARD, "Keyboard EXPL+RIGHT", _LC("InputEvent", "more replay forward")},
84  {"COMMON_REPLAY_BACKWARD", EV_COMMON_REPLAY_BACKWARD, "Keyboard EXPL+LEFT", _LC("InputEvent", "more replay backward")},
85  {"COMMON_REPLAY_FAST_FORWARD", EV_COMMON_REPLAY_FAST_FORWARD, "Keyboard EXPL+SHIFT+RIGHT", _LC("InputEvent", "move replay fast forward")},
86  {"COMMON_REPLAY_FAST_BACKWARD", EV_COMMON_REPLAY_FAST_BACKWARD, "Keyboard EXPL+SHIFT+LEFT", _LC("InputEvent", "move replay fast backward")},
87 
88  // Common: UI
89  {"COMMON_CONSOLE_TOGGLE", EV_COMMON_CONSOLE_TOGGLE, "Keyboard EXPL+GRAVE", _LC("InputEvent", "show / hide the console")},
90  {"COMMON_ENTER_CHATMODE", EV_COMMON_ENTER_CHATMODE, "Keyboard EXPL+Y", _LC("InputEvent", "enter the chat")},
91  {"COMMON_SEND_CHAT", EV_COMMON_SEND_CHAT, "Keyboard RETURN", _LC("InputEvent", "sends the entered text")},
92  {"COMMON_HIDE_GUI", EV_COMMON_HIDE_GUI, "Keyboard EXPL+U", _LC("InputEvent", "hide all GUI elements")},
93  {"COMMON_TOGGLE_DASHBOARD", EV_COMMON_TOGGLE_DASHBOARD, "Keyboard EXPL+CTRL+U", _LC("InputEvent", "display or hide the dashboard overlay")},
94  {"COMMON_TOGGLE_DEBUG_VIEW", EV_COMMON_TOGGLE_DEBUG_VIEW, "Keyboard EXPL+K", _LC("InputEvent", "toggle debug view")},
95  {"COMMON_CYCLE_DEBUG_VIEWS", EV_COMMON_CYCLE_DEBUG_VIEWS, "Keyboard EXPL+CTRL+K", _LC("InputEvent", "cycle debug views")},
96  {"COMMON_TRUCK_INFO", EV_COMMON_TRUCK_INFO, "Keyboard EXPL+T", _LC("InputEvent", "toggle truck HUD")},
97  {"COMMON_TRUCK_DESCRIPTION", EV_COMMON_TRUCK_DESCRIPTION, "Keyboard EXPL+CTRL+T", _LC("InputEvent", "toggle truck description")},
98  {"COMMON_NETCHATDISPLAY", EV_COMMON_NETCHATDISPLAY, "Keyboard EXPL+SHIFT+U", _LC("InputEvent", "display or hide net chat")},
99  {"COMMON_NETCHATMODE", EV_COMMON_NETCHATMODE, "Keyboard EXPL+CTRL+U", _LC("InputEvent", "toggle between net chat display modes")},
100  {"COMMON_TOGGLE_STATS", EV_COMMON_TOGGLE_STATS, "Keyboard EXPL+F", _LC("InputEvent", "toggle Ogre statistics (FPS etc.)")},
101 
102  // Common: savegames
103  {"COMMON_QUICKSAVE_01", EV_COMMON_QUICKSAVE_01, "Keyboard EXPL+ALT+CTRL+1", _LC("InputEvent", "save scene in slot 01")},
104  {"COMMON_QUICKSAVE_02", EV_COMMON_QUICKSAVE_02, "Keyboard EXPL+ALT+CTRL+2", _LC("InputEvent", "save scene in slot 02")},
105  {"COMMON_QUICKSAVE_03", EV_COMMON_QUICKSAVE_03, "Keyboard EXPL+ALT+CTRL+3", _LC("InputEvent", "save scene in slot 03")},
106  {"COMMON_QUICKSAVE_04", EV_COMMON_QUICKSAVE_04, "Keyboard EXPL+ALT+CTRL+4", _LC("InputEvent", "save scene in slot 04")},
107  {"COMMON_QUICKSAVE_05", EV_COMMON_QUICKSAVE_05, "Keyboard EXPL+ALT+CTRL+5", _LC("InputEvent", "save scene in slot 05")},
108  {"COMMON_QUICKSAVE_06", EV_COMMON_QUICKSAVE_06, "Keyboard EXPL+ALT+CTRL+6", _LC("InputEvent", "save scene in slot 06")},
109  {"COMMON_QUICKSAVE_07", EV_COMMON_QUICKSAVE_07, "Keyboard EXPL+ALT+CTRL+7", _LC("InputEvent", "save scene in slot 07")},
110  {"COMMON_QUICKSAVE_08", EV_COMMON_QUICKSAVE_08, "Keyboard EXPL+ALT+CTRL+8", _LC("InputEvent", "save scene in slot 08")},
111  {"COMMON_QUICKSAVE_09", EV_COMMON_QUICKSAVE_09, "Keyboard EXPL+ALT+CTRL+9", _LC("InputEvent", "save scene in slot 09")},
112  {"COMMON_QUICKSAVE_10", EV_COMMON_QUICKSAVE_10, "Keyboard EXPL+ALT+CTRL+0", _LC("InputEvent", "save scene in slot 10")},
113 
114  {"COMMON_QUICKLOAD_01", EV_COMMON_QUICKLOAD_01, "Keyboard EXPL+ALT+1", _LC("InputEvent", "load scene from slot 01")},
115  {"COMMON_QUICKLOAD_02", EV_COMMON_QUICKLOAD_02, "Keyboard EXPL+ALT+2", _LC("InputEvent", "load scene from slot 02")},
116  {"COMMON_QUICKLOAD_03", EV_COMMON_QUICKLOAD_03, "Keyboard EXPL+ALT+3", _LC("InputEvent", "load scene from slot 03")},
117  {"COMMON_QUICKLOAD_04", EV_COMMON_QUICKLOAD_04, "Keyboard EXPL+ALT+4", _LC("InputEvent", "load scene from slot 04")},
118  {"COMMON_QUICKLOAD_05", EV_COMMON_QUICKLOAD_05, "Keyboard EXPL+ALT+5", _LC("InputEvent", "load scene from slot 05")},
119  {"COMMON_QUICKLOAD_06", EV_COMMON_QUICKLOAD_06, "Keyboard EXPL+ALT+6", _LC("InputEvent", "load scene from slot 06")},
120  {"COMMON_QUICKLOAD_07", EV_COMMON_QUICKLOAD_07, "Keyboard EXPL+ALT+7", _LC("InputEvent", "load scene from slot 07")},
121  {"COMMON_QUICKLOAD_08", EV_COMMON_QUICKLOAD_08, "Keyboard EXPL+ALT+8", _LC("InputEvent", "load scene from slot 08")},
122  {"COMMON_QUICKLOAD_09", EV_COMMON_QUICKLOAD_09, "Keyboard EXPL+ALT+9", _LC("InputEvent", "load scene from slot 09")},
123  {"COMMON_QUICKLOAD_10", EV_COMMON_QUICKLOAD_10, "Keyboard EXPL+ALT+0", _LC("InputEvent", "load scene from slot 10")},
124 
125  // Truck: generic
126  {"TRUCK_ACCELERATE", EV_TRUCK_ACCELERATE, "Keyboard UP", _LC("InputEvent", "accelerate the truck")},
127  {"TRUCK_ACCELERATE_MODIFIER_25", EV_TRUCK_ACCELERATE_MODIFIER_25, "Keyboard ALT+UP", _LC("InputEvent", "accelerate with 25 percent pedal input")},
128  {"TRUCK_ACCELERATE_MODIFIER_50", EV_TRUCK_ACCELERATE_MODIFIER_50, "Keyboard CTRL+UP", _LC("InputEvent", "accelerate with 50 percent pedal input")},
129  {"TRUCK_BLINK_LEFT", EV_TRUCK_BLINK_LEFT, "Keyboard EXPL+COMMA", _LC("InputEvent", "toggle left direction indicator (blinker)")},
130  {"TRUCK_BLINK_RIGHT", EV_TRUCK_BLINK_RIGHT, "Keyboard EXPL+PERIOD", _LC("InputEvent", "toggle right direction indicator (blinker)")},
131  {"TRUCK_BLINK_WARN", EV_TRUCK_BLINK_WARN, "Keyboard EXPL+MINUS", _LC("InputEvent", "toggle all direction indicators")},
132  {"TRUCK_BRAKE", EV_TRUCK_BRAKE, "Keyboard DOWN", _LC("InputEvent", "brake")},
133  {"TRUCK_BRAKE_MODIFIER_25", EV_TRUCK_BRAKE_MODIFIER_25, "Keyboard ALT+DOWN", _LC("InputEvent", "brake with 25 percent pedal input")},
134  {"TRUCK_BRAKE_MODIFIER_50", EV_TRUCK_BRAKE_MODIFIER_50, "Keyboard CTRL+DOWN", _LC("InputEvent", "brake with 50 percent pedal input")},
135  {"TRUCK_HORN", EV_TRUCK_HORN, "Keyboard H", _LC("InputEvent", "truck horn")},
136  {"TRUCK_LIGHTTOGGLE1", EV_TRUCK_LIGHTTOGGLE01, "Keyboard EXPL+CTRL+1", _LC("InputEvent", "toggle custom light 1")},
137  {"TRUCK_LIGHTTOGGLE2", EV_TRUCK_LIGHTTOGGLE02, "Keyboard EXPL+CTRL+2", _LC("InputEvent", "toggle custom light 2")},
138  {"TRUCK_LIGHTTOGGLE3", EV_TRUCK_LIGHTTOGGLE03, "Keyboard EXPL+CTRL+3", _LC("InputEvent", "toggle custom light 3")},
139  {"TRUCK_LIGHTTOGGLE4", EV_TRUCK_LIGHTTOGGLE04, "Keyboard EXPL+CTRL+4", _LC("InputEvent", "toggle custom light 4")},
140  {"TRUCK_LIGHTTOGGLE5", EV_TRUCK_LIGHTTOGGLE05, "Keyboard EXPL+CTRL+5", _LC("InputEvent", "toggle custom light 5")},
141  {"TRUCK_LIGHTTOGGLE6", EV_TRUCK_LIGHTTOGGLE06, "Keyboard EXPL+CTRL+6", _LC("InputEvent", "toggle custom light 6")},
142  {"TRUCK_LIGHTTOGGLE7", EV_TRUCK_LIGHTTOGGLE07, "Keyboard EXPL+CTRL+7", _LC("InputEvent", "toggle custom light 7")},
143  {"TRUCK_LIGHTTOGGLE8", EV_TRUCK_LIGHTTOGGLE08, "Keyboard EXPL+CTRL+8", _LC("InputEvent", "toggle custom light 8")},
144  {"TRUCK_LIGHTTOGGLE9", EV_TRUCK_LIGHTTOGGLE09, "Keyboard EXPL+CTRL+9", _LC("InputEvent", "toggle custom light 9")},
145  {"TRUCK_LIGHTTOGGLE10", EV_TRUCK_LIGHTTOGGLE10, "Keyboard EXPL+CTRL+0", _LC("InputEvent", "toggle custom light 10")},
146  {"TRUCK_PARKING_BRAKE", EV_TRUCK_PARKING_BRAKE, "Keyboard P", _LC("InputEvent", "toggle parking brake")},
147  {"TRUCK_TRAILER_PARKING_BRAKE", EV_TRUCK_TRAILER_PARKING_BRAKE, "Keyboard EXPL+CTRL+P", _LC("InputEvent", "toggle trailer parking brake")},
148  {"TRUCK_ANTILOCK_BRAKE", EV_TRUCK_ANTILOCK_BRAKE, "Keyboard EXPL+SHIFT+B", _LC("InputEvent", "toggle antilock brake")},
149  {"TRUCK_TOGGLE_VIDEOCAMERA", EV_TRUCK_TOGGLE_VIDEOCAMERA, "Keyboard EXPL+CTRL+V", _LC("InputEvent", "toggle videocamera")},
150  {"TRUCK_TRACTION_CONTROL", EV_TRUCK_TRACTION_CONTROL, "Keyboard EXPL+SHIFT+T", _LC("InputEvent", "toggle traction control")},
151  {"TRUCK_CRUISE_CONTROL", EV_TRUCK_CRUISE_CONTROL, "Keyboard EXPL+SPACE", _LC("InputEvent", "toggle cruise control")},
152  {"TRUCK_CRUISE_CONTROL_READJUST", EV_TRUCK_CRUISE_CONTROL_READJUST, "Keyboard EXPL+CTRL+SPACE", _LC("InputEvent", "match target speed / rpm with current truck speed / rpm")},
153  {"TRUCK_CRUISE_CONTROL_ACCL", EV_TRUCK_CRUISE_CONTROL_ACCL, "Keyboard EXPL+CTRL+R", _LC("InputEvent", "increase target speed / rpm")},
154  {"TRUCK_CRUISE_CONTROL_DECL", EV_TRUCK_CRUISE_CONTROL_DECL, "Keyboard EXPL+CTRL+F", _LC("InputEvent", "decrease target speed / rpm")},
155  {"TRUCK_STARTER", EV_TRUCK_STARTER, "Keyboard S", _LC("InputEvent", "hold to start the engine")},
156  {"TRUCK_STEER_LEFT", EV_TRUCK_STEER_LEFT, "Keyboard LEFT", _LC("InputEvent", "steer left")},
157  {"TRUCK_STEER_RIGHT", EV_TRUCK_STEER_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "steer right")},
158  {"TRUCK_TOGGLE_CONTACT", EV_TRUCK_TOGGLE_CONTACT, "Keyboard X", _LC("InputEvent", "toggle ignition")},
159  {"TRUCK_TOGGLE_FORWARDCOMMANDS", EV_TRUCK_TOGGLE_FORWARDCOMMANDS, "Keyboard EXPL+CTRL+SHIFT+F", _LC("InputEvent", "toggle forwardcommands")},
160  {"TRUCK_TOGGLE_IMPORTCOMMANDS", EV_TRUCK_TOGGLE_IMPORTCOMMANDS, "Keyboard EXPL+CTRL+SHIFT+I", _LC("InputEvent", "toggle importcommands")},
161  {"TRUCK_TOGGLE_PHYSICS", EV_TRUCK_TOGGLE_PHYSICS, "Keyboard END", _LC("InputEvent", "toggle physics")},
162  {"TRUCK_TOGGLE_INTER_AXLE_DIFF", EV_TRUCK_TOGGLE_INTER_AXLE_DIFF, "Keyboard EXPL+ALT+W", _LC("InputEvent", "cycle between available inter axle differential modes")},
163  {"TRUCK_TOGGLE_INTER_WHEEL_DIFF", EV_TRUCK_TOGGLE_INTER_WHEEL_DIFF, "Keyboard EXPL+W", _LC("InputEvent", "cycle between available inter wheel differential modes")},
164  {"TRUCK_TOGGLE_TCASE_4WD_MODE", EV_TRUCK_TOGGLE_TCASE_4WD_MODE, "Keyboard EXPL+CTRL+W", _LC("InputEvent", "toggle transfer case mode")},
165  {"TRUCK_TOGGLE_TCASE_GEAR_RATIO", EV_TRUCK_TOGGLE_TCASE_GEAR_RATIO, "Keyboard EXPL+SHIFT+W", _LC("InputEvent", "toggle transfer case gear ratio")},
166  {"TRUCK_LEFT_MIRROR_LEFT", EV_TRUCK_LEFT_MIRROR_LEFT, "Keyboard EXPL+SEMICOLON", _LC("InputEvent", "move left mirror to the left")},
167  {"TRUCK_LEFT_MIRROR_RIGHT", EV_TRUCK_LEFT_MIRROR_RIGHT, "Keyboard EXPL+CTRL+SEMICOLON", _LC("InputEvent", "move left mirror to the right")},
168  {"TRUCK_RIGHT_MIRROR_LEFT", EV_TRUCK_RIGHT_MIRROR_LEFT, "Keyboard EXPL+COLON", _LC("InputEvent", "more right mirror to the left")},
169  {"TRUCK_RIGHT_MIRROR_RIGHT", EV_TRUCK_RIGHT_MIRROR_RIGHT, "Keyboard EXPL+CTRL+COLON", _LC("InputEvent", "move right mirror to the right")},
170 
171  // Truck: transmission
172  {"TRUCK_AUTOSHIFT_DOWN", EV_TRUCK_AUTOSHIFT_DOWN, "Keyboard PGDOWN", _LC("InputEvent", "shift automatic transmission one gear down")},
173  {"TRUCK_AUTOSHIFT_UP", EV_TRUCK_AUTOSHIFT_UP, "Keyboard PGUP", _LC("InputEvent", "shift automatic transmission one gear up")},
174  {"TRUCK_MANUAL_CLUTCH", EV_TRUCK_MANUAL_CLUTCH, "Keyboard LSHIFT", _LC("InputEvent", "manual clutch (for manual transmission)")},
175  {"TRUCK_SHIFT_DOWN", EV_TRUCK_SHIFT_DOWN, "Keyboard Z", _LC("InputEvent", "shift one gear down in manual transmission mode")},
176  {"TRUCK_SHIFT_NEUTRAL", EV_TRUCK_SHIFT_NEUTRAL, "Keyboard D", _LC("InputEvent", "shift to neutral gear in manual transmission mode")},
177  {"TRUCK_SHIFT_UP", EV_TRUCK_SHIFT_UP, "Keyboard A", _LC("InputEvent", "shift one gear up in manual transmission mode")},
178  {"TRUCK_SHIFT_GEAR_REVERSE", EV_TRUCK_SHIFT_GEAR_REVERSE, "", _LC("InputEvent", "shift directly to reverse gear")},
179  {"TRUCK_SHIFT_GEAR1", EV_TRUCK_SHIFT_GEAR01, "", _LC("InputEvent", "shift directly to first gear")},
180  {"TRUCK_SHIFT_GEAR2", EV_TRUCK_SHIFT_GEAR02, "", _LC("InputEvent", "shift directly to second gear")},
181  {"TRUCK_SHIFT_GEAR3", EV_TRUCK_SHIFT_GEAR03, "", _LC("InputEvent", "shift directly to third gear")},
182  {"TRUCK_SHIFT_GEAR4", EV_TRUCK_SHIFT_GEAR04, "", _LC("InputEvent", "shift directly to fourth gear")},
183  {"TRUCK_SHIFT_GEAR5", EV_TRUCK_SHIFT_GEAR05, "", _LC("InputEvent", "shift directly to 5th gear")},
184  {"TRUCK_SHIFT_GEAR6", EV_TRUCK_SHIFT_GEAR06, "", _LC("InputEvent", "shift directly to 6th gear")},
185  {"TRUCK_SHIFT_GEAR7", EV_TRUCK_SHIFT_GEAR07, "", _LC("InputEvent", "shift directly to 7th gear")},
186  {"TRUCK_SHIFT_GEAR8", EV_TRUCK_SHIFT_GEAR08, "", _LC("InputEvent", "shift directly to 8th gear")},
187  {"TRUCK_SHIFT_GEAR9", EV_TRUCK_SHIFT_GEAR09, "", _LC("InputEvent", "shift directly to 9th gear")},
188  {"TRUCK_SHIFT_GEAR10", EV_TRUCK_SHIFT_GEAR10, "", _LC("InputEvent", "shift directly to 10th gear")},
189  {"TRUCK_SHIFT_GEAR11", EV_TRUCK_SHIFT_GEAR11, "", _LC("InputEvent", "shift directly to 11th gear")},
190  {"TRUCK_SHIFT_GEAR12", EV_TRUCK_SHIFT_GEAR12, "", _LC("InputEvent", "shift directly to 12th gear")},
191  {"TRUCK_SHIFT_GEAR13", EV_TRUCK_SHIFT_GEAR13, "", _LC("InputEvent", "shift directly to 13th gear")},
192  {"TRUCK_SHIFT_GEAR14", EV_TRUCK_SHIFT_GEAR14, "", _LC("InputEvent", "shift directly to 14th gear")},
193  {"TRUCK_SHIFT_GEAR15", EV_TRUCK_SHIFT_GEAR15, "", _LC("InputEvent", "shift directly to 15th gear")},
194  {"TRUCK_SHIFT_GEAR16", EV_TRUCK_SHIFT_GEAR16, "", _LC("InputEvent", "shift directly to 16th gear")},
195  {"TRUCK_SHIFT_GEAR17", EV_TRUCK_SHIFT_GEAR17, "", _LC("InputEvent", "shift directly to 17th gear")},
196  {"TRUCK_SHIFT_GEAR18", EV_TRUCK_SHIFT_GEAR18, "", _LC("InputEvent", "shift directly to 18th gear")},
197  {"TRUCK_SHIFT_LOWRANGE", EV_TRUCK_SHIFT_LOWRANGE, "", _LC("InputEvent", "sets low range (1-6) for H-shaft")},
198  {"TRUCK_SHIFT_MIDRANGE", EV_TRUCK_SHIFT_MIDRANGE, "", _LC("InputEvent", "sets middle range (7-12) for H-shaft")},
199  {"TRUCK_SHIFT_HIGHRANGE", EV_TRUCK_SHIFT_HIGHRANGE, "", _LC("InputEvent", "sets high range (13-18) for H-shaft")},
200  {"TRUCK_SWITCH_SHIFT_MODES", EV_TRUCK_SWITCH_SHIFT_MODES, "Keyboard Q", _LC("InputEvent", "toggle between transmission modes")},
201 
202  // Airplane
203  {"AIRPLANE_STEER_RIGHT", EV_AIRPLANE_STEER_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "steer right")},
204  {"AIRPLANE_BRAKE", EV_AIRPLANE_BRAKE, "Keyboard B", _LC("InputEvent", "normal brake for an aircraft")},
205  {"AIRPLANE_ELEVATOR_DOWN", EV_AIRPLANE_ELEVATOR_DOWN, "Keyboard DOWN", _LC("InputEvent", "pull the elevator down in an aircraft.")},
206  {"AIRPLANE_ELEVATOR_UP", EV_AIRPLANE_ELEVATOR_UP, "Keyboard UP", _LC("InputEvent", "pull the elevator up in an aircraft.")},
207  {"AIRPLANE_FLAPS_FULL", EV_AIRPLANE_FLAPS_FULL, "Keyboard CTRL+2", _LC("InputEvent", "full flaps in an aircraft.")},
208  {"AIRPLANE_FLAPS_LESS", EV_AIRPLANE_FLAPS_LESS, "Keyboard EXPL+1", _LC("InputEvent", "one step less flaps.")},
209  {"AIRPLANE_FLAPS_MORE", EV_AIRPLANE_FLAPS_MORE, "Keyboard EXPL+2", _LC("InputEvent", "one step more flaps.")},
210  {"AIRPLANE_FLAPS_NONE", EV_AIRPLANE_FLAPS_NONE, "Keyboard CTRL+1", _LC("InputEvent", "no flaps.")},
211  {"AIRPLANE_PARKING_BRAKE", EV_AIRPLANE_PARKING_BRAKE, "Keyboard P", _LC("InputEvent", "airplane parking brake.")},
212  {"AIRPLANE_REVERSE", EV_AIRPLANE_REVERSE, "Keyboard R", _LC("InputEvent", "reverse the turboprops")},
213  {"AIRPLANE_RUDDER_LEFT", EV_AIRPLANE_RUDDER_LEFT, "Keyboard Z", _LC("InputEvent", "rudder left")},
214  {"AIRPLANE_RUDDER_RIGHT", EV_AIRPLANE_RUDDER_RIGHT, "Keyboard X", _LC("InputEvent", "rudder right")},
215  {"AIRPLANE_STEER_LEFT", EV_AIRPLANE_STEER_LEFT, "Keyboard LEFT", _LC("InputEvent", "steer left")},
216  {"AIRPLANE_STEER_RIGHT", EV_AIRPLANE_STEER_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "steer right")},
217  {"AIRPLANE_THROTTLE_AXIS", EV_AIRPLANE_THROTTLE_AXIS, "None", _LC("InputEvent", "throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)")},
218  {"AIRPLANE_THROTTLE_DOWN", EV_AIRPLANE_THROTTLE_DOWN, "Keyboard EXPL+PGDOWN", _LC("InputEvent", "decreases the airplane thrust")},
219  {"AIRPLANE_THROTTLE_FULL", EV_AIRPLANE_THROTTLE_FULL, "Keyboard CTRL+PGUP", _LC("InputEvent", "full thrust")},
220  {"AIRPLANE_THROTTLE_NO", EV_AIRPLANE_THROTTLE_NO, "Keyboard CTRL+PGDOWN", _LC("InputEvent", "no thrust")},
221  {"AIRPLANE_THROTTLE_UP", EV_AIRPLANE_THROTTLE_UP, "Keyboard EXPL+PGUP", _LC("InputEvent", "increase the airplane thrust")},
222  {"AIRPLANE_TOGGLE_ENGINES", EV_AIRPLANE_TOGGLE_ENGINES, "Keyboard CTRL+HOME", _LC("InputEvent", "switch all engines on / off")},
223  {"AIRPLANE_AIRBRAKES_NONE", EV_AIRPLANE_AIRBRAKES_NONE, "Keyboard CTRL+3", _LC("InputEvent", "no airbrakes")},
224  {"AIRPLANE_AIRBRAKES_FULL", EV_AIRPLANE_AIRBRAKES_FULL, "Keyboard CTRL+4", _LC("InputEvent", "full airbrakes")},
225  {"AIRPLANE_AIRBRAKES_LESS", EV_AIRPLANE_AIRBRAKES_LESS, "Keyboard EXPL+3", _LC("InputEvent", "less airbrakes")},
226  {"AIRPLANE_AIRBRAKES_MORE", EV_AIRPLANE_AIRBRAKES_MORE, "Keyboard EXPL+4", _LC("InputEvent", "more airbrakes")},
227  {"AIRPLANE_THROTTLE", EV_AIRPLANE_THROTTLE, "", _LC("InputEvent", "airplane throttle")},
228 
229  // Boat
230  {"BOAT_CENTER_RUDDER", EV_BOAT_CENTER_RUDDER, "Keyboard PGDOWN", _LC("InputEvent", "center the rudder")},
231  {"BOAT_REVERSE", EV_BOAT_REVERSE, "Keyboard PGUP", _LC("InputEvent", "no thrust")},
232  {"BOAT_STEER_LEFT", EV_BOAT_STEER_LEFT, "Keyboard LEFT", _LC("InputEvent", "steer left a step")},
233  {"BOAT_STEER_LEFT_AXIS", EV_BOAT_STEER_LEFT_AXIS, "None", _LC("InputEvent", "steer left (analog value!)")},
234  {"BOAT_STEER_RIGHT", EV_BOAT_STEER_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "steer right a step")},
235  {"BOAT_STEER_RIGHT_AXIS", EV_BOAT_STEER_RIGHT_AXIS, "None", _LC("InputEvent", "steer right (analog value!)")},
236  {"BOAT_THROTTLE_AXIS", EV_BOAT_THROTTLE_AXIS, "None", _LC("InputEvent", "throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)")},
237  {"BOAT_THROTTLE_DOWN", EV_BOAT_THROTTLE_DOWN, "Keyboard DOWN", _LC("InputEvent", "decrease throttle")},
238  {"BOAT_THROTTLE_UP", EV_BOAT_THROTTLE_UP, "Keyboard UP", _LC("InputEvent", "increase throttle")},
239 
240  // Commands
241  {"COMMANDS_01", EV_COMMANDS_01, "Keyboard EXPL+F1", _LC("InputEvent", "Command 1")},
242  {"COMMANDS_02", EV_COMMANDS_02, "Keyboard EXPL+F2", _LC("InputEvent", "Command 2")},
243  {"COMMANDS_03", EV_COMMANDS_03, "Keyboard EXPL+F3", _LC("InputEvent", "Command 3")},
244  {"COMMANDS_04", EV_COMMANDS_04, "Keyboard EXPL+F4", _LC("InputEvent", "Command 4")},
245  {"COMMANDS_05", EV_COMMANDS_05, "Keyboard EXPL+F5", _LC("InputEvent", "Command 5")},
246  {"COMMANDS_06", EV_COMMANDS_06, "Keyboard EXPL+F6", _LC("InputEvent", "Command 6")},
247  {"COMMANDS_07", EV_COMMANDS_07, "Keyboard EXPL+F7", _LC("InputEvent", "Command 7")},
248  {"COMMANDS_08", EV_COMMANDS_08, "Keyboard EXPL+F8", _LC("InputEvent", "Command 8")},
249  {"COMMANDS_09", EV_COMMANDS_09, "Keyboard EXPL+F9", _LC("InputEvent", "Command 9")},
250  {"COMMANDS_10", EV_COMMANDS_10, "Keyboard EXPL+F10", _LC("InputEvent", "Command 10")},
251  {"COMMANDS_11", EV_COMMANDS_11, "Keyboard EXPL+F11", _LC("InputEvent", "Command 11")},
252  {"COMMANDS_12", EV_COMMANDS_12, "Keyboard EXPL+F12", _LC("InputEvent", "Command 12")},
253  {"COMMANDS_13", EV_COMMANDS_13, "Keyboard EXPL+CTRL+F1", _LC("InputEvent", "Command 13")},
254  {"COMMANDS_14", EV_COMMANDS_14, "Keyboard EXPL+CTRL+F2", _LC("InputEvent", "Command 14")},
255  {"COMMANDS_15", EV_COMMANDS_15, "Keyboard EXPL+CTRL+F3", _LC("InputEvent", "Command 15")},
256  {"COMMANDS_16", EV_COMMANDS_16, "Keyboard EXPL+CTRL+F4", _LC("InputEvent", "Command 16")},
257  {"COMMANDS_17", EV_COMMANDS_17, "Keyboard EXPL+CTRL+F5", _LC("InputEvent", "Command 17")},
258  {"COMMANDS_18", EV_COMMANDS_18, "Keyboard EXPL+CTRL+F6", _LC("InputEvent", "Command 18")},
259  {"COMMANDS_19", EV_COMMANDS_19, "Keyboard EXPL+CTRL+F7", _LC("InputEvent", "Command 19")},
260  {"COMMANDS_20", EV_COMMANDS_20, "Keyboard EXPL+CTRL+F8", _LC("InputEvent", "Command 20")},
261  {"COMMANDS_21", EV_COMMANDS_21, "Keyboard EXPL+CTRL+F9", _LC("InputEvent", "Command 21")},
262  {"COMMANDS_22", EV_COMMANDS_22, "Keyboard EXPL+CTRL+F10", _LC("InputEvent", "Command 22")},
263  {"COMMANDS_23", EV_COMMANDS_23, "Keyboard EXPL+CTRL+F11", _LC("InputEvent", "Command 23")},
264  {"COMMANDS_24", EV_COMMANDS_24, "Keyboard EXPL+CTRL+F12", _LC("InputEvent", "Command 24")},
265  {"COMMANDS_25", EV_COMMANDS_25, "Keyboard EXPL+SHIFT+F1", _LC("InputEvent", "Command 25")},
266  {"COMMANDS_26", EV_COMMANDS_26, "Keyboard EXPL+SHIFT+F2", _LC("InputEvent", "Command 26")},
267  {"COMMANDS_27", EV_COMMANDS_27, "Keyboard EXPL+SHIFT+F3", _LC("InputEvent", "Command 27")},
268  {"COMMANDS_28", EV_COMMANDS_28, "Keyboard EXPL+SHIFT+F4", _LC("InputEvent", "Command 28")},
269  {"COMMANDS_29", EV_COMMANDS_29, "Keyboard EXPL+SHIFT+F5", _LC("InputEvent", "Command 29")},
270  {"COMMANDS_30", EV_COMMANDS_30, "Keyboard EXPL+SHIFT+F6", _LC("InputEvent", "Command 30")},
271  {"COMMANDS_31", EV_COMMANDS_31, "Keyboard EXPL+SHIFT+F7", _LC("InputEvent", "Command 31")},
272  {"COMMANDS_32", EV_COMMANDS_32, "Keyboard EXPL+SHIFT+F8", _LC("InputEvent", "Command 32")},
273  {"COMMANDS_33", EV_COMMANDS_33, "Keyboard EXPL+SHIFT+F9", _LC("InputEvent", "Command 33")},
274  {"COMMANDS_34", EV_COMMANDS_34, "Keyboard EXPL+SHIFT+F10", _LC("InputEvent", "Command 34")},
275  {"COMMANDS_35", EV_COMMANDS_35, "Keyboard EXPL+SHIFT+F11", _LC("InputEvent", "Command 35")},
276  {"COMMANDS_36", EV_COMMANDS_36, "Keyboard EXPL+SHIFT+F12", _LC("InputEvent", "Command 36")},
277  {"COMMANDS_37", EV_COMMANDS_37, "Keyboard EXPL+ALT+F1", _LC("InputEvent", "Command 37")},
278  {"COMMANDS_38", EV_COMMANDS_38, "Keyboard EXPL+ALT+F2", _LC("InputEvent", "Command 38")},
279  {"COMMANDS_39", EV_COMMANDS_39, "Keyboard EXPL+ALT+F3", _LC("InputEvent", "Command 39")},
280  {"COMMANDS_40", EV_COMMANDS_40, "Keyboard EXPL+ALT+F4", _LC("InputEvent", "Command 40")},
281  {"COMMANDS_41", EV_COMMANDS_41, "Keyboard EXPL+ALT+F5", _LC("InputEvent", "Command 41")},
282  {"COMMANDS_42", EV_COMMANDS_42, "Keyboard EXPL+ALT+F6", _LC("InputEvent", "Command 42")},
283  {"COMMANDS_43", EV_COMMANDS_43, "Keyboard EXPL+ALT+F7", _LC("InputEvent", "Command 43")},
284  {"COMMANDS_44", EV_COMMANDS_44, "Keyboard EXPL+ALT+F8", _LC("InputEvent", "Command 44")},
285  {"COMMANDS_45", EV_COMMANDS_45, "Keyboard EXPL+ALT+F9", _LC("InputEvent", "Command 45")},
286  {"COMMANDS_46", EV_COMMANDS_46, "Keyboard EXPL+ALT+F10", _LC("InputEvent", "Command 46")},
287  {"COMMANDS_47", EV_COMMANDS_47, "Keyboard EXPL+ALT+F11", _LC("InputEvent", "Command 47")},
288  {"COMMANDS_48", EV_COMMANDS_48, "Keyboard EXPL+ALT+F12", _LC("InputEvent", "Command 48")},
289  {"COMMANDS_49", EV_COMMANDS_49, "Keyboard EXPL+CTRL+SHIFT+F1", _LC("InputEvent", "Command 49")},
290  {"COMMANDS_50", EV_COMMANDS_50, "Keyboard EXPL+CTRL+SHIFT+F2", _LC("InputEvent", "Command 50")},
291  {"COMMANDS_51", EV_COMMANDS_51, "Keyboard EXPL+CTRL+SHIFT+F3", _LC("InputEvent", "Command 51")},
292  {"COMMANDS_52", EV_COMMANDS_52, "Keyboard EXPL+CTRL+SHIFT+F4", _LC("InputEvent", "Command 52")},
293  {"COMMANDS_53", EV_COMMANDS_53, "Keyboard EXPL+CTRL+SHIFT+F5", _LC("InputEvent", "Command 53")},
294  {"COMMANDS_54", EV_COMMANDS_54, "Keyboard EXPL+CTRL+SHIFT+F6", _LC("InputEvent", "Command 54")},
295  {"COMMANDS_55", EV_COMMANDS_55, "Keyboard EXPL+CTRL+SHIFT+F7", _LC("InputEvent", "Command 55")},
296  {"COMMANDS_56", EV_COMMANDS_56, "Keyboard EXPL+CTRL+SHIFT+F8", _LC("InputEvent", "Command 56")},
297  {"COMMANDS_57", EV_COMMANDS_57, "Keyboard EXPL+CTRL+SHIFT+F9", _LC("InputEvent", "Command 57")},
298  {"COMMANDS_58", EV_COMMANDS_58, "Keyboard EXPL+CTRL+SHIFT+F10", _LC("InputEvent", "Command 58")},
299  {"COMMANDS_59", EV_COMMANDS_59, "Keyboard EXPL+CTRL+SHIFT+F11", _LC("InputEvent", "Command 59")},
300  {"COMMANDS_60", EV_COMMANDS_60, "Keyboard EXPL+CTRL+SHIFT+F12", _LC("InputEvent", "Command 60")},
301  {"COMMANDS_61", EV_COMMANDS_61, "Keyboard EXPL+CTRL+ALT+F1", _LC("InputEvent", "Command 61")},
302  {"COMMANDS_62", EV_COMMANDS_62, "Keyboard EXPL+CTRL+ALT+F2", _LC("InputEvent", "Command 62")},
303  {"COMMANDS_63", EV_COMMANDS_63, "Keyboard EXPL+CTRL+ALT+F3", _LC("InputEvent", "Command 63")},
304  {"COMMANDS_64", EV_COMMANDS_64, "Keyboard EXPL+CTRL+ALT+F4", _LC("InputEvent", "Command 64")},
305  {"COMMANDS_65", EV_COMMANDS_65, "Keyboard EXPL+CTRL+ALT+F5", _LC("InputEvent", "Command 65")},
306  {"COMMANDS_66", EV_COMMANDS_66, "Keyboard EXPL+CTRL+ALT+F6", _LC("InputEvent", "Command 66")},
307  {"COMMANDS_67", EV_COMMANDS_67, "Keyboard EXPL+CTRL+ALT+F7", _LC("InputEvent", "Command 67")},
308  {"COMMANDS_68", EV_COMMANDS_68, "Keyboard EXPL+CTRL+ALT+F8", _LC("InputEvent", "Command 68")},
309  {"COMMANDS_69", EV_COMMANDS_69, "Keyboard EXPL+CTRL+ALT+F9", _LC("InputEvent", "Command 69")},
310  {"COMMANDS_70", EV_COMMANDS_70, "Keyboard EXPL+CTRL+ALT+F10", _LC("InputEvent", "Command 70")},
311  {"COMMANDS_71", EV_COMMANDS_71, "Keyboard EXPL+CTRL+ALT+F11", _LC("InputEvent", "Command 71")},
312  {"COMMANDS_72", EV_COMMANDS_72, "Keyboard EXPL+CTRL+ALT+F12", _LC("InputEvent", "Command 72")},
313  {"COMMANDS_73", EV_COMMANDS_73, "Keyboard EXPL+CTRL+SHIFT+ALT+F1",_LC("InputEvent", "Command 73")},
314  {"COMMANDS_74", EV_COMMANDS_74, "Keyboard EXPL+CTRL+SHIFT+ALT+F2",_LC("InputEvent", "Command 74")},
315  {"COMMANDS_75", EV_COMMANDS_75, "Keyboard EXPL+CTRL+SHIFT+ALT+F3",_LC("InputEvent", "Command 75")},
316  {"COMMANDS_76", EV_COMMANDS_76, "Keyboard EXPL+CTRL+SHIFT+ALT+F4",_LC("InputEvent", "Command 76")},
317  {"COMMANDS_77", EV_COMMANDS_77, "Keyboard EXPL+CTRL+SHIFT+ALT+F5",_LC("InputEvent", "Command 77")},
318  {"COMMANDS_78", EV_COMMANDS_78, "Keyboard EXPL+CTRL+SHIFT+ALT+F6",_LC("InputEvent", "Command 78")},
319  {"COMMANDS_79", EV_COMMANDS_79, "Keyboard EXPL+CTRL+SHIFT+ALT+F7",_LC("InputEvent", "Command 79")},
320  {"COMMANDS_80", EV_COMMANDS_80, "Keyboard EXPL+CTRL+SHIFT+ALT+F8",_LC("InputEvent", "Command 80")},
321  {"COMMANDS_81", EV_COMMANDS_81, "Keyboard EXPL+CTRL+SHIFT+ALT+F9",_LC("InputEvent", "Command 81")},
322  {"COMMANDS_82", EV_COMMANDS_82, "Keyboard EXPL+CTRL+SHIFT+ALT+F10",_LC("InputEvent", "Command 82")},
323  {"COMMANDS_83", EV_COMMANDS_83, "Keyboard EXPL+CTRL+SHIFT+ALT+F11",_LC("InputEvent", "Command 83")},
324  {"COMMANDS_84", EV_COMMANDS_84, "Keyboard EXPL+CTRL+SHIFT+ALT+F12",_LC("InputEvent", "Command 84")},
325 
326  // Character
327  {"CHARACTER_BACKWARDS", EV_CHARACTER_BACKWARDS, "Keyboard S", _LC("InputEvent", "step backwards with the character")},
328  {"CHARACTER_FORWARD", EV_CHARACTER_FORWARD, "Keyboard W", _LC("InputEvent", "step forward with the character")},
329  {"CHARACTER_JUMP", EV_CHARACTER_JUMP, "Keyboard SPACE", _LC("InputEvent", "let the character jump")},
330  {"CHARACTER_LEFT", EV_CHARACTER_LEFT, "Keyboard LEFT", _LC("InputEvent", "rotate character left")},
331  {"CHARACTER_RIGHT", EV_CHARACTER_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "rotate character right")},
332  {"CHARACTER_RUN", EV_CHARACTER_RUN, "Keyboard SHIFT+W", _LC("InputEvent", "let the character run")},
333  {"CHARACTER_SIDESTEP_LEFT", EV_CHARACTER_SIDESTEP_LEFT, "Keyboard A", _LC("InputEvent", "sidestep to the left")},
334  {"CHARACTER_SIDESTEP_RIGHT", EV_CHARACTER_SIDESTEP_RIGHT, "Keyboard D", _LC("InputEvent", "sidestep to the right")},
335  {"CHARACTER_ROT_UP", EV_CHARACTER_ROT_UP, "Keyboard UP", _LC("InputEvent", "rotate view up")},
336  {"CHARACTER_ROT_DOWN", EV_CHARACTER_ROT_DOWN, "Keyboard DOWN", _LC("InputEvent", "rotate view down")},
337 
338  // Camera
339  {"CAMERA_CHANGE", EV_CAMERA_CHANGE, "Keyboard EXPL+C", _LC("InputEvent", "change camera mode")},
340  {"CAMERA_LOOKBACK", EV_CAMERA_LOOKBACK, "Keyboard NUMPAD1", _LC("InputEvent", "look back (toggles between normal and lookback)")},
341  {"CAMERA_RESET", EV_CAMERA_RESET, "Keyboard NUMPAD5", _LC("InputEvent", "reset the camera position")},
342  {"CAMERA_ROTATE_DOWN", EV_CAMERA_ROTATE_DOWN, "Keyboard NUMPAD2", _LC("InputEvent", "rotate camera down")},
343  {"CAMERA_ROTATE_LEFT", EV_CAMERA_ROTATE_LEFT, "Keyboard NUMPAD4", _LC("InputEvent", "rotate camera left")},
344  {"CAMERA_ROTATE_RIGHT", EV_CAMERA_ROTATE_RIGHT, "Keyboard NUMPAD6", _LC("InputEvent", "rotate camera right")},
345  {"CAMERA_ROTATE_UP", EV_CAMERA_ROTATE_UP, "Keyboard NUMPAD8", _LC("InputEvent", "rotate camera up")},
346  {"CAMERA_ZOOM_IN", EV_CAMERA_ZOOM_IN, "Keyboard EXPL+NUMPAD9", _LC("InputEvent", "zoom camera in")},
347  {"CAMERA_ZOOM_IN_FAST", EV_CAMERA_ZOOM_IN_FAST, "Keyboard SHIFT+NUMPAD9", _LC("InputEvent", "zoom camera in faster")},
348  {"CAMERA_ZOOM_OUT", EV_CAMERA_ZOOM_OUT, "Keyboard EXPL+NUMPAD3", _LC("InputEvent", "zoom camera out")},
349  {"CAMERA_ZOOM_OUT_FAST", EV_CAMERA_ZOOM_OUT_FAST, "Keyboard SHIFT+NUMPAD3", _LC("InputEvent", "zoom camera out faster")},
350  {"CAMERA_FREE_MODE_FIX", EV_CAMERA_FREE_MODE_FIX, "Keyboard EXPL+ALT+C", _LC("InputEvent", "fix the camera to a position")},
351  {"CAMERA_FREE_MODE", EV_CAMERA_FREE_MODE, "Keyboard EXPL+SHIFT+C", _LC("InputEvent", "enable / disable free camera mode")},
352  {"CAMERA_UP", EV_CAMERA_UP, "Keyboard Q", _LC("InputEvent", "move camera up")},
353  {"CAMERA_DOWN", EV_CAMERA_DOWN, "Keyboard Z", _LC("InputEvent", "move camera down")},
354 
355  // Sky
356  {"SKY_DECREASE_TIME", EV_SKY_DECREASE_TIME, "Keyboard EXPL+SUBTRACT", _LC("InputEvent", "decrease day-time")},
357  {"SKY_DECREASE_TIME_FAST", EV_SKY_DECREASE_TIME_FAST, "Keyboard SHIFT+SUBTRACT", _LC("InputEvent", "decrease day-time a lot faster")},
358  {"SKY_INCREASE_TIME", EV_SKY_INCREASE_TIME, "Keyboard EXPL+ADD", _LC("InputEvent", "increase day-time")},
359  {"SKY_INCREASE_TIME_FAST", EV_SKY_INCREASE_TIME_FAST, "Keyboard SHIFT+ADD", _LC("InputEvent", "increase day-time a lot faster")},
360 
361  // Grass
362  {"GRASS_LESS", EV_GRASS_LESS, "", _LC("InputEvent", "EXPERIMENTAL: remove some grass")},
363  {"GRASS_MORE", EV_GRASS_MORE, "", _LC("InputEvent", "EXPERIMENTAL: add some grass")},
364  {"GRASS_MOST", EV_GRASS_MOST, "", _LC("InputEvent", "EXPERIMENTAL: set maximum amount of grass")},
365  {"GRASS_NONE", EV_GRASS_NONE, "", _LC("InputEvent", "EXPERIMENTAL: remove grass completely")},
366  {"GRASS_SAVE", EV_GRASS_SAVE, "", _LC("InputEvent", "EXPERIMENTAL: save changes to the grass density image")},
367 
368  // Survey map
369  {"SURVEY_MAP_TOGGLE_ICONS", EV_SURVEY_MAP_TOGGLE_ICONS, "Keyboard EXPL+CTRL+SHIFT+ALT+TAB",_LC("InputEvent", "toggle map icons")},
370  {"SURVEY_MAP_TOGGLE", EV_SURVEY_MAP_TOGGLE, "Keyboard EXPL+CTRL+SHIFT+TAB", _LC("InputEvent", "toggle map")},
371  {"SURVEY_MAP_CYCLE", EV_SURVEY_MAP_CYCLE, "Keyboard EXPL+TAB", _LC("InputEvent", "cycle map modes")},
372  {"SURVEY_MAP_ZOOM_IN", EV_SURVEY_MAP_ZOOM_IN, "Keyboard EXPL+CTRL+TAB", _LC("InputEvent", "zoom in")},
373  {"SURVEY_MAP_ZOOM_OUT", EV_SURVEY_MAP_ZOOM_OUT, "Keyboard EXPL+SHIFT+TAB", _LC("InputEvent", "zoom out")},
374 
375  // Menu
376  {"MENU_DOWN", EV_MENU_DOWN, "Keyboard DOWN", _LC("InputEvent", "select next element in current category")},
377  {"MENU_LEFT", EV_MENU_LEFT, "Keyboard LEFT", _LC("InputEvent", "select previous category")},
378  {"MENU_RIGHT", EV_MENU_RIGHT, "Keyboard RIGHT", _LC("InputEvent", "select next category")},
379  {"MENU_SELECT", EV_MENU_SELECT, "Keyboard EXPL+RETURN", _LC("InputEvent", "select focussed item and close menu")},
380  {"MENU_UP", EV_MENU_UP, "Keyboard UP", _LC("InputEvent", "select previous element in current category")},
381 
382  // Truck editing
383  {"TRUCKEDIT_RELOAD", EV_TRUCKEDIT_RELOAD, "Keyboard EXPL+SHIFT+CTRL+R", _LC("InputEvent", "reload truck")},
384 
385  // Road editing
386  {"ROAD_EDITOR_POINT_INSERT", EV_ROAD_EDITOR_POINT_INSERT, "Keyboard EXPL+INSERT", _LC("InputEvent", "insert road point") },
387  {"ROAD_EDITOR_POINT_GOTO", EV_ROAD_EDITOR_POINT_GOTO, "Keyboard EXPL+G", _LC("InputEvent", "go to road point") },
388  {"ROAD_EDITOR_POINT_SET_POS", EV_ROAD_EDITOR_POINT_SET_POS, "Keyboard EXPL+M", _LC("InputEvent", "set road point position") },
389  {"ROAD_EDITOR_POINT_DELETE", EV_ROAD_EDITOR_POINT_DELETE, "Keyboard EXPL+DELETE", _LC("InputEvent", "delete road point") },
390  {"ROAD_EDITOR_REBUILD_MESH", EV_ROAD_EDITOR_REBUILD_MESH, "Keyboard EXPL+B", _LC("InputEvent", "regenerate road mesh") },
391 
392  // The end, DO NOT MODIFY
393  {"", -1, "", ""},
394 };
395 
396 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
397 #define strnlen(str,len) strlen(str)
398 #endif
399 
400 //Use this define to signify OIS will be used as a DLL
401 //(so that dll import/export macros are in effect)
402 #define OIS_DYNAMIC_LIB
403 #include <OIS.h>
404 
405 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
406 #include <X11/Xlib.h>
407 //#include <linux/LinuxMouse.h>
408 #endif
409 
410 using namespace std;
411 using namespace Ogre;
412 using namespace OIS;
413 
414 const std::string InputEngine::DEFAULT_MAPFILE = "input.map";
415 
417  free_joysticks(0)
418  , mForceFeedback(0)
419  , mInputManager(0)
420  , mKeyboard(0)
421  , mMouse(0)
422  , uniqueCounter(0)
423 {
424  for (int i = 0; i < MAX_JOYSTICKS; i++)
425  mJoy[i] = 0;
426 
427  LOG("*** Loading OIS ***");
428 
429  initAllKeys();
430  setup();
431  windowResized(App::GetAppContext()->GetRenderWindow());
432 }
433 
435 {
436  destroy();
437 }
438 
440 {
441  if (mInputManager)
442  {
443  LOG("*** Terminating OIS ***");
444  if (mMouse)
445  {
446  mInputManager->destroyInputObject(mMouse);
447  mMouse = 0;
448  }
449  if (mKeyboard)
450  {
451  mInputManager->destroyInputObject(mKeyboard);
452  mKeyboard = 0;
453  }
454  if (mJoy)
455  {
456  for (int i = 0; i < MAX_JOYSTICKS; i++)
457  {
458  if (!mJoy[i])
459  continue;
460  mInputManager->destroyInputObject(mJoy[i]);
461  mJoy[i] = 0;
462  }
463  }
464 
465  OIS::InputManager::destroyInputSystem(mInputManager);
466  mInputManager = 0;
467  }
468 }
469 
471 {
472  size_t hWnd = 0;
473  App::GetAppContext()->GetRenderWindow()->getCustomAttribute("WINDOW", &hWnd);
474 
475  LOG("*** Initializing OIS ***");
476 
477  //try to delete old ones first (linux can only handle one at a time)
478  destroy();
479 
480  ParamList pl;
481  pl.insert(OIS::ParamList::value_type("WINDOW", TOSTRING(hWnd)));
482  if (App::io_input_grab_mode->getEnum<IoInputGrabMode>() != RoR::IoInputGrabMode::ALL)
483  {
484 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
485  pl.insert(OIS::ParamList::value_type("x11_mouse_hide", "true"));
486  pl.insert(OIS::ParamList::value_type("XAutoRepeatOn", "false"));
487  pl.insert(OIS::ParamList::value_type("x11_mouse_grab", "false"));
488  pl.insert(OIS::ParamList::value_type("x11_keyboard_grab", "false"));
489 #else
490  pl.insert(OIS::ParamList::value_type("w32_mouse", "DISCL_FOREGROUND"));
491  pl.insert(OIS::ParamList::value_type("w32_mouse", "DISCL_NONEXCLUSIVE"));
492  pl.insert(OIS::ParamList::value_type("w32_keyboard", "DISCL_FOREGROUND"));
493  pl.insert(OIS::ParamList::value_type("w32_keyboard", "DISCL_NONEXCLUSIVE"));
494 #endif // LINUX
495  }
496 
497 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
498  if (App::io_input_grab_mode->getEnum<IoInputGrabMode>() != IoInputGrabMode::ALL)
499  {
500  ShowCursor(FALSE);
501  }
502  else
503  {
504  ShowCursor(TRUE); // To make `MSG_APP_REINIT_INPUT_REQUESTED` work correctly
505  }
506 #endif
507 
508  mInputManager = OIS::InputManager::createInputSystem(pl);
509 
510  //Print debugging information
511  unsigned int v = mInputManager->getVersionNumber();
512  LOG("OIS Version: " + TOSTRING(v>>16) + String(".") + TOSTRING((v>>8) & 0x000000FF) + String(".") + TOSTRING(v & 0x000000FF));
513  LOG("+ Release Name: " + mInputManager->getVersionName());
514  LOG("+ Manager: " + mInputManager->inputSystemName());
515  LOG("+ Total Keyboards: " + TOSTRING(mInputManager->getNumberOfDevices(OISKeyboard)));
516  LOG("+ Total Mice: " + TOSTRING(mInputManager->getNumberOfDevices(OISMouse)));
517  LOG("+ Total JoySticks: " + TOSTRING(mInputManager->getNumberOfDevices(OISJoyStick)));
518 
519  //List all devices
520  OIS::DeviceList deviceList = mInputManager->listFreeDevices();
521  for (OIS::DeviceList::iterator i = deviceList.begin(); i != deviceList.end(); ++i)
522  LOG("* Device: " + String(mOISDeviceType[i->first]) + String(" Vendor: ") + i->second);
523 
524  //Create all devices (We only catch joystick exceptions here, as, most people have Key/Mouse)
525  mKeyboard = 0;
526 
527  try
528  {
529  mKeyboard = static_cast<Keyboard*>(mInputManager->createInputObject(OISKeyboard, true));
530  mKeyboard->setTextTranslation(OIS::Keyboard::Unicode);
531  }
532  catch (OIS::Exception& ex)
533  {
534  LOG(String("Exception raised on keyboard creation: ") + String(ex.eText));
535  }
536 
537 
538  try
539  {
540  //This demo uses at most 10 joysticks - use old way to create (i.e. disregard vendor)
541  int numSticks = std::min(mInputManager->getNumberOfDevices(OISJoyStick), 10);
542  free_joysticks = 0;
543  for (int i = 0; i < numSticks; ++i)
544  {
545  mJoy[i] = (JoyStick*)mInputManager->createInputObject(OISJoyStick, true);
546  free_joysticks++;
547  //create force feedback too
548  //here, we take the first device we can get, but we could take a device index
549  if (!mForceFeedback)
550  mForceFeedback = (OIS::ForceFeedback*)mJoy[i]->queryInterface(OIS::Interface::ForceFeedback);
551 
552  LOG("Creating Joystick " + TOSTRING(i + 1) + " (" + mJoy[i]->vendor() + ")");
553  LOG("* Axes: " + TOSTRING(mJoy[i]->getNumberOfComponents(OIS_Axis)));
554  LOG("* Sliders: " + TOSTRING(mJoy[i]->getNumberOfComponents(OIS_Slider)));
555  LOG("* POV/HATs: " + TOSTRING(mJoy[i]->getNumberOfComponents(OIS_POV)));
556  LOG("* Buttons: " + TOSTRING(mJoy[i]->getNumberOfComponents(OIS_Button)));
557  LOG("* Vector3: " + TOSTRING(mJoy[i]->getNumberOfComponents(OIS_Vector3)));
558  }
559  }
560  catch (OIS::Exception& ex)
561  {
562  LOG(String("Exception raised on joystick creation: ") + String(ex.eText));
563  }
564 
565  try
566  {
567  mMouse = static_cast<Mouse*>(mInputManager->createInputObject(OISMouse, true));
568  }
569  catch (OIS::Exception& ex)
570  {
571  LOG(String("Exception raised on mouse creation: ") + String(ex.eText));
572  }
573 
574 
575  if (free_joysticks)
576  {
577  for (int i = 0; i < free_joysticks; i++)
578  joyState[i] = mJoy[i]->getJoyStickState();
579  }
580 
581  // set the mouse to the middle of the screen, hackish!
582 #if _WIN32
583  // under linux, this will not work and the cursor will never reach (0,0)
584  if (mMouse && RoR::App::GetAppContext()->GetRenderWindow())
585  {
586  OIS::MouseState& mutableMouseState = const_cast<OIS::MouseState &>(mMouse->getMouseState());
587  mutableMouseState.X.abs = RoR::App::GetAppContext()->GetRenderWindow()->getWidth() * 0.5f;
588  mutableMouseState.Y.abs = RoR::App::GetAppContext()->GetRenderWindow()->getHeight() * 0.5f;
589  }
590 #endif // _WIN32
591 
592  // load default mappings
593  this->loadConfigFile(-1);
594 
595  // then load device (+OS) specific mappings
596  for (int i = 0; i < free_joysticks; ++i)
597  {
598  this->loadConfigFile(i);
599  }
601 }
602 
603 OIS::MouseState InputEngine::getMouseState()
604 {
605  return mMouse->getMouseState();
606 }
607 
608 String InputEngine::getKeyNameForKeyCode(OIS::KeyCode keycode)
609 {
610  if (keycode == KC_LSHIFT || keycode == KC_RSHIFT)
611  return "SHIFT";
612  if (keycode == KC_LCONTROL || keycode == KC_RCONTROL)
613  return "CTRL";
614  if (keycode == KC_LMENU || keycode == KC_RMENU)
615  return "ALT";
616  for (allit = allkeys.begin(); allit != allkeys.end(); allit++)
617  {
618  if (allit->second == keycode)
619  return allit->first;
620  }
621  return "unknown";
622 }
623 
625 {
626  mKeyboard->capture();
627  mMouse->capture();
628 
629  for (int i = 0; i < free_joysticks; i++)
630  {
631  if (mJoy[i])
632  {
633  mJoy[i]->capture();
634  }
635  }
636 }
637 
638 void InputEngine::windowResized(Ogre::RenderWindow* rw)
639 {
640  //update mouse area
641  unsigned int width, height, depth;
642  int left, top;
643  rw->getMetrics(width, height, depth, left, top);
644  const OIS::MouseState& ms = mMouse->getMouseState();
645  ms.width = width;
646  ms.height = height;
647 }
648 
649 void InputEngine::SetKeyboardListener(OIS::KeyListener* keyboard_listener)
650 {
651  ROR_ASSERT(mKeyboard != nullptr);
652  mKeyboard->setEventCallback(keyboard_listener);
653 }
654 
655 void InputEngine::SetMouseListener(OIS::MouseListener* mouse_listener)
656 {
657  ROR_ASSERT(mMouse != nullptr);
658  mMouse->setEventCallback(mouse_listener);
659 }
660 
661 void InputEngine::SetJoystickListener(OIS::JoyStickListener* obj)
662 {
663  for (int i = 0; i < free_joysticks; i++)
664  {
665  mJoy[i]->setEventCallback(obj);
666  }
667 }
668 
669 /* --- Joystick Events ------------------------------------------ */
670 void InputEngine::ProcessJoystickEvent(const OIS::JoyStickEvent& arg)
671 {
672  int i = arg.device->getID();
673  if (i < 0 || i >= MAX_JOYSTICKS)
674  i = 0;
675  joyState[i] = arg.state;
676 }
677 
678 /* --- Key Events ------------------------------------------ */
679 void InputEngine::ProcessKeyPress(const OIS::KeyEvent& arg)
680 {
681  keyState[arg.key] = 1;
682 }
683 
684 void InputEngine::ProcessKeyRelease(const OIS::KeyEvent& arg)
685 {
686  keyState[arg.key] = 0;
687 }
688 
689 /* --- Mouse Events ------------------------------------------ */
690 void InputEngine::ProcessMouseEvent(const OIS::MouseEvent& arg)
691 {
692  mouseState = arg.state;
693 }
694 
695 /* --- Custom Methods ------------------------------------------ */
697 {
698  for (std::map<int, bool>::iterator iter = keyState.begin(); iter != keyState.end(); ++iter)
699  {
700  iter->second = false;
701  }
702 }
703 
705 {
706  event_values_simulated[eventID] = value;
707 }
708 
710 {
711  event_states_supressed[eventID] = supress;
712 }
713 
715 {
716  return (getEventValue(eventID) > 0.5f);
717 }
718 
719 bool InputEngine::getEventBoolValueBounce(int eventID, float time)
720 {
721  if (event_times[eventID] > 0)
722  return false;
723  else
724  {
725  bool res = getEventBoolValue(eventID);
726  if (res)
727  event_times[eventID] = time;
728  return res;
729  }
730 }
731 
733 {
734  return event_times[eventID];
735 }
736 
738 {
739  for (std::map<int, float>::iterator it = event_times.begin(); it != event_times.end(); it++)
740  {
741  if (it->second > 0)
742  it->second -= dt;
743  //else
744  // erase element?
745  }
746 }
747 
748 float InputEngine::deadZone(float axisValue, float dz)
749 {
750  // no deadzone?
751  if (dz < 0.0001f)
752  return axisValue;
753 
754  // check for deadzone
755  if (fabs(axisValue) < dz)
756  // dead zone case
757  return 0.0f;
758  else
759  // non-deadzone, remap the remaining part
760  return (axisValue - dz) * (1.0f / (1.0f - dz));
761 }
762 
763 float InputEngine::axisLinearity(float axisValue, float linearity)
764 {
765  return (axisValue * linearity);
766 }
767 
768 float InputEngine::logval(float val)
769 {
770  if (val > 0)
771  return log10(1.0 / (1.1 - val)) / 1.0;
772  if (val == 0)
773  return 0;
774  return -log10(1.0 / (1.1 + val)) / 1.0;
775 }
776 
777 String InputEngine::getEventCommand(int eventID)
778 {
779  std::vector<event_trigger_t>& t_vec = events[eventID];
780  if (t_vec.size() > 0)
781  {
782  // TODO: handle multiple mappings for one event code - currently we only check the first one.
783  return this->composeEventCommandString(t_vec[0]);
784  }
785  return "";
786 }
787 
788 std::string InputEngine::getEventCommandTrimmed(int eventID)
789 {
790  std::string result = regex_replace(App::GetInputEngine()->getEventCommand(eventID).c_str(), std::regex("EXPL\\+"), "");
791  return result;
792 }
793 
795 {
796  return this->composeEventCommandString(evt);
797 }
798 
799 String InputEngine::getEventConfig(int eventID)
800 {
801  std::vector<event_trigger_t>& t_vec = events[eventID];
802  if (t_vec.size() > 0)
803  {
804  // TODO: handle multiple mappings for one event code - currently we only check the first one.
805  return this->composeEventConfigString(t_vec[0]);
806  }
807  return "";
808 }
809 
811 {
812  for (int i = 0; i < EV_MODE_LAST; i++)
813  {
814  if (eventInfo[i].eventID == eventID)
815  {
816  return eventInfo[i].defaultKey;
817  }
818  }
819  return "";
820 }
821 
823 {
824  switch (trig.eventtype)
825  {
826  case ET_Keyboard:
827  case ET_JoystickButton:
828  return trig.configline; // Configline contains the key/button
829 
830  case ET_JoystickPov:
831  return fmt::format("{} {}", trig.joystickPovNumber, trig.configline); // Configline contains the direction - display it.
832 
833  case ET_JoystickSliderX:
834  return fmt::format("X {}", trig.joystickSliderNumber); // Must show axis separately. Configline contains just the options.
835 
836  case ET_JoystickSliderY:
837  return fmt::format("Y {}", trig.joystickSliderNumber); // Must show axis separately. Configline contains just the options.
838 
839  default: // Joystick axes
840  return fmt::format("{}", trig.joystickAxisNumber); // Configline contains just the options.
841  }
842 }
843 
845 {
846  switch (trig.eventtype)
847  {
848  case ET_Keyboard:
849  case ET_JoystickButton:
850  case ET_JoystickPov:
851  return this->composeEventCommandString(trig);
852 
853  // Sliders: Include redundant X/Y and options.
854  case ET_JoystickSliderX:
855  return fmt::format("X {} {}", trig.joystickSliderNumber, trig.configline); // Configline contains just the options.
856  case ET_JoystickSliderY:
857  return fmt::format("Y {} {}", trig.joystickSliderNumber, trig.configline); // Configline contains just the options.
858 
859  // Joystick axes and sliders - include options.
860  default:
861  return fmt::format("{} {}", trig.joystickAxisNumber, trig.configline); // Configline contains just the options.
862  }
863 }
864 
866 {
867  std::vector<event_trigger_t> t_vec = events[eventID];
868  if (t_vec.size() > 0)
869  {
870  if (t_vec[0].eventtype != ET_NONE) // TODO: handle multiple mappings for one event code - currently we only check the first one.
871  return true;
872  }
873  return false;
874 }
875 
877 {
878  std::vector<event_trigger_t> t_vec = events[eventID];
879  for (std::vector<event_trigger_t>::iterator i = t_vec.begin(); i != t_vec.end(); i++)
880  {
881  event_trigger_t t = *i;
882  if (t.eventtype == ET_Keyboard)
883  return t.keyCode;
884  }
885  return -1;
886 }
887 
888 bool InputEngine::isEventAnalog(int eventID)
889 {
890  std::vector<event_trigger_t> t_vec = events[eventID];
891  if (t_vec.size() > 0)
892  {
893  //loop through all eventtypes, because we want to find a analog device wether it is the first device or not
894  //this means a analog device is always preferred over a digital one
895  for (unsigned int i = 0; i < t_vec.size(); i++)
896  {
897  if ((t_vec[i].eventtype == ET_MouseAxisX
898  || t_vec[i].eventtype == ET_MouseAxisY
899  || t_vec[i].eventtype == ET_MouseAxisZ
900  || t_vec[i].eventtype == ET_JoystickAxisAbs
901  || t_vec[i].eventtype == ET_JoystickAxisRel
902  || t_vec[i].eventtype == ET_JoystickSliderX
903  || t_vec[i].eventtype == ET_JoystickSliderY)
904  //check if value comes from analog device
905  //this way, only valid events (e.g. joystick mapped, but unplugged) are recognized as analog events
906  && getEventValue(eventID, true, InputSourceType::IST_ANALOG) != 0.0)
907  {
908  return true;
909  }
910  }
911  }
912  return false;
913 }
914 
915 float InputEngine::getEventValue(int eventID, bool pure, InputSourceType valueSource /*= InputSourceType::IST_ANY*/)
916 {
917  const float simulatedValue = event_values_simulated[eventID];
918  if (simulatedValue != 0.f)
919  return simulatedValue;
920 
921  if (event_states_supressed[eventID])
922  return 0.f;
923 
924  float returnValue = 0;
925  std::vector<event_trigger_t> t_vec = events[eventID];
926  float value = 0;
927  for (std::vector<event_trigger_t>::iterator i = t_vec.begin(); i != t_vec.end(); i++)
928  {
929  event_trigger_t t = *i;
930 
931  if (valueSource == InputSourceType::IST_DIGITAL || valueSource == InputSourceType::IST_ANY)
932  {
933  switch (t.eventtype)
934  {
935  case ET_NONE:
936  break;
937  case ET_Keyboard:
938  if (!keyState[t.keyCode])
939  break;
940 
941  // only use explicite mapping, if two keys with different modifiers exist, i.e. F1 and SHIFT+F1.
942  // check for modificators
943  if (t.explicite)
944  {
945  if (t.ctrl != (keyState[KC_LCONTROL] || keyState[KC_RCONTROL]))
946  break;
947  if (t.shift != (keyState[KC_LSHIFT] || keyState[KC_RSHIFT]))
948  break;
949  if (t.alt != (keyState[KC_LMENU] || keyState[KC_RMENU]))
950  break;
951  }
952  else
953  {
954  if (t.ctrl && !(keyState[KC_LCONTROL] || keyState[KC_RCONTROL]))
955  break;
956  if (t.shift && !(keyState[KC_LSHIFT] || keyState[KC_RSHIFT]))
957  break;
958  if (t.alt && !(keyState[KC_LMENU] || keyState[KC_RMENU]))
959  break;
960  }
961  value = 1;
962  break;
963  case ET_MouseButton:
964  //if (t.mouseButtonNumber == 0)
965  // TODO: FIXME
966  value = mouseState.buttonDown(MB_Left);
967  break;
968  case ET_JoystickButton:
969  {
971  {
972  value = 0;
973  continue;
974  }
975  if (t.joystickButtonNumber >= (int)mJoy[t.joystickNumber]->getNumberOfComponents(OIS_Button))
976  {
977 #ifndef NOOGRE
978  LOG("*** Joystick has not enough buttons for mapping: need button "+TOSTRING(t.joystickButtonNumber) + ", availabe buttons: "+TOSTRING(mJoy[t.joystickNumber]->getNumberOfComponents(OIS_Button)));
979 #endif
980  value = 0;
981  continue;
982  }
983  value = joyState[t.joystickNumber].mButtons[t.joystickButtonNumber];
984  }
985  break;
986  case ET_JoystickPov:
987  {
989  {
990  value = 0;
991  continue;
992  }
993  if (t.joystickPovNumber >= (int)mJoy[t.joystickNumber]->getNumberOfComponents(OIS_POV))
994  {
995 #ifndef NOOGRE
996  LOG("*** Joystick has not enough POVs for mapping: need POV "+TOSTRING(t.joystickPovNumber) + ", availabe POVs: "+TOSTRING(mJoy[t.joystickNumber]->getNumberOfComponents(OIS_POV)));
997 #endif
998  value = 0;
999  continue;
1000  }
1001  if (joyState[t.joystickNumber].mPOV[t.joystickPovNumber].direction & t.joystickPovDirection)
1002  value = 1;
1003  else
1004  value = 0;
1005  }
1006  break;
1007  }
1008  }
1009  if (valueSource == InputSourceType::IST_ANALOG || valueSource == InputSourceType::IST_ANY)
1010  {
1011  switch (t.eventtype)
1012  {
1013  case ET_MouseAxisX:
1014  value = mouseState.X.abs / 32767;
1015  break;
1016  case ET_MouseAxisY:
1017  value = mouseState.Y.abs / 32767;
1018  break;
1019  case ET_MouseAxisZ:
1020  value = mouseState.Z.abs / 32767;
1021  break;
1022 
1023  case ET_JoystickAxisRel:
1024  case ET_JoystickAxisAbs:
1025  {
1027  {
1028  value = 0;
1029  continue;
1030  }
1031  if (t.joystickAxisNumber >= (int)joyState[t.joystickNumber].mAxes.size())
1032  {
1033 #ifndef NOOGRE
1034  LOG("*** Joystick has not enough axis for mapping: need axe "+TOSTRING(t.joystickAxisNumber) + ", availabe axis: "+TOSTRING(joyState[t.joystickNumber].mAxes.size()));
1035 #endif
1036  value = 0;
1037  continue;
1038  }
1039  Axis axe = joyState[t.joystickNumber].mAxes[t.joystickAxisNumber];
1040 
1041  if (t.eventtype == ET_JoystickAxisRel)
1042  {
1043  value = (float)axe.rel / (float)mJoy[t.joystickNumber]->MAX_AXIS;
1044  }
1045  else
1046  {
1047  value = (float)axe.abs / (float)mJoy[t.joystickNumber]->MAX_AXIS;
1048  switch (t.joystickAxisRegion)
1049  {
1050  case 0:
1051  // normal case, full axis used
1052  value = (value + 1) / 2;
1053  break;
1054  case -1:
1055  // lower range used
1056  if (value > 0)
1057  value = 0;
1058  else
1059  value = -value;
1060  break;
1061  case 1:
1062  // upper range used
1063  if (value < 0)
1064  value = 0;
1065  break;
1066  }
1067 
1068  if (t.joystickAxisHalf)
1069  {
1070  // XXX: TODO: write this
1071  //float a = (double)((value+1.0)/2.0);
1072  //float b = (double)(1.0-(value+1.0)/2.0);
1073  //LOG("half: "+TOSTRING(value)+" / "+TOSTRING(a)+" / "+TOSTRING(b));
1074  //no dead zone in half axis
1075  value = (1.0 + value) / 2.0;
1076  if (t.joystickAxisReverse)
1077  value = 1.0 - value;
1078  if (!pure)
1079  value = axisLinearity(value, t.joystickAxisLinearity);
1080  }
1081  else
1082  {
1083  //LOG("not half: "+TOSTRING(value)+" / "+TOSTRING(deadZone(value, t.joystickAxisDeadzone)) +" / "+TOSTRING(t.joystickAxisDeadzone) );
1084  if (t.joystickAxisReverse)
1085  value = 1 - value;
1086  if (!pure)
1087  // no deadzone when using oure value
1088  value = deadZone(value, t.joystickAxisDeadzone);
1089  if (!pure)
1090  value = axisLinearity(value, t.joystickAxisLinearity);
1091  }
1092  // digital mapping of analog axis
1093  if (t.joystickAxisUseDigital)
1094  if (value >= 0.5)
1095  value = 1;
1096  else
1097  value = 0;
1098  }
1099  }
1100  break;
1101  case ET_JoystickSliderX:
1102  case ET_JoystickSliderY:
1103  {
1105  {
1106  value = 0;
1107  continue;
1108  }
1109  if (t.eventtype == ET_JoystickSliderX)
1110  value = (float)joyState[t.joystickNumber].mSliders[t.joystickSliderNumber].abX / (float)mJoy[t.joystickNumber]->MAX_AXIS;
1111  else if (t.eventtype == ET_JoystickSliderY)
1112  value = (float)joyState[t.joystickNumber].mSliders[t.joystickSliderNumber].abY / (float)mJoy[t.joystickNumber]->MAX_AXIS;
1113  value = (value + 1) / 2; // full axis
1114  if (t.joystickSliderReverse)
1115  value = 1.0 - value; // reversed
1116  }
1117  break;
1118  }
1119  }
1120  // only return if grater zero, otherwise check all other bombinations
1121  if (value > returnValue)
1122  returnValue = value;
1123  }
1124  return returnValue;
1125 }
1126 
1127 bool InputEngine::isKeyDown(OIS::KeyCode key)
1128 {
1129  if (!mKeyboard)
1130  return false;
1131  return this->mKeyboard->isKeyDown(key);
1132 }
1133 
1134 bool InputEngine::isKeyDownEffective(OIS::KeyCode mod)
1135 {
1136  return this->keyState[mod];
1137 }
1138 
1139 bool InputEngine::isKeyDownValueBounce(OIS::KeyCode mod, float time)
1140 {
1141  if (event_times[-mod] > 0)
1142  return false;
1143  else
1144  {
1145  bool res = isKeyDown(mod);
1146  if (res)
1147  event_times[-mod] = time;
1148  return res;
1149  }
1150 }
1151 
1153 {
1154  switch (evt.eventtype)
1155  {
1156  case ET_NONE:
1157  return "None";
1158  case ET_Keyboard:
1159  return "Keyboard";
1160  case ET_MouseButton:
1161  case ET_MouseAxisX:
1162  case ET_MouseAxisY:
1163  case ET_MouseAxisZ:
1164  return "Mouse";
1165  case ET_JoystickButton:
1166  case ET_JoystickAxisAbs:
1167  case ET_JoystickAxisRel:
1168  case ET_JoystickPov:
1169  case ET_JoystickSliderX:
1170  case ET_JoystickSliderY:
1171  return "Joystick: " + getJoyVendor(evt.joystickNumber);
1172  }
1173  return "unknown";
1174 }
1175 
1176 // static
1178 {
1179  switch (type)
1180  {
1181  case ET_NONE: return "None";
1182  case ET_Keyboard: return "Keyboard";
1183  case ET_MouseButton: return "MouseButton";
1184  case ET_MouseAxisX: return "MouseAxisX";
1185  case ET_MouseAxisY: return "MouseAxisY";
1186  case ET_MouseAxisZ: return "MouseAxisZ";
1187  case ET_JoystickButton: return "JoystickButton";
1188  case ET_JoystickAxisAbs:
1189  case ET_JoystickAxisRel: return "JoystickAxis"; // Default is 'abs', 'rel' is created by option RELATIVE.
1190  case ET_JoystickPov: return "JoystickPov";
1191  case ET_JoystickSliderX:
1192  case ET_JoystickSliderY: return "JoystickSlider"; // Axis is given by special parameter.
1193  default: return "unknown";
1194  }
1195 }
1196 
1198 {
1199  this->addEvent(eventID);
1200  events[eventID].push_back(t);
1201 }
1202 
1203 void InputEngine::addEvent(int eventID)
1204 {
1205  uniqueCounter++;
1206 
1207  if (eventID == -1)
1208  //unknown event, discard
1209  return;
1210  if (events.find(eventID) == events.end())
1211  {
1212  events[eventID] = std::vector<event_trigger_t>();
1213  event_values_simulated[eventID] = 0.f;
1214  event_states_supressed[eventID] = false;
1215  }
1216 }
1217 
1218 void InputEngine::addEventDefault(int eventID, int deviceID /*= -1*/)
1219 {
1220  if (eventID == -1)
1221  //unknown event, discard
1222  return;
1223 
1224  std::string line = fmt::format("{} {}", this->eventIDToName(eventID), this->getEventDefaultConfig(eventID));
1225  this->processLine(line.c_str(), deviceID);
1226 }
1227 
1228 void InputEngine::updateEvent(int eventID, const event_trigger_t& t)
1229 {
1230  if (eventID == -1)
1231  //unknown event, discard
1232  return;
1233  if (events.find(eventID) == events.end())
1234  {
1235  events[eventID] = std::vector<event_trigger_t>();
1236  events[eventID].clear();
1237  }
1238  events[eventID].push_back(t);
1239 }
1240 
1241 void InputEngine::eraseEvent(int eventID, const event_trigger_t* t)
1242 {
1243  if (events.find(eventID) != events.end())
1244  {
1245  TriggerVec& triggers = events[eventID];
1246  for (size_t i = 0; i < triggers.size(); i++)
1247  {
1248  if (t == &triggers[i])
1249  {
1250  triggers.erase(triggers.begin() + i);
1251  return;
1252  }
1253  }
1254  }
1255 }
1256 
1257 void InputEngine::clearEvents(int eventID)
1258 {
1259  if (events.find(eventID) != events.end())
1260  {
1261  events[eventID].clear();
1262  }
1263 }
1264 
1266 {
1267  for (auto& ev_pair: events)
1268  {
1269  if (ev_pair.second.size() > 0)
1270  {
1271  auto itor = ev_pair.second.begin();
1272  while (itor != ev_pair.second.end())
1273  {
1274  if (itor->configDeviceID == deviceID)
1275  itor = ev_pair.second.erase(itor);
1276  else
1277  itor++;
1278  }
1279  }
1280  }
1281 }
1282 
1284 {
1285  events.clear(); // remove all bindings
1286  this->resetKeys(); // reset input states
1287 }
1288 
1289 bool InputEngine::processLine(const char* line, int deviceID)
1290 {
1291  static String cur_comment = "";
1292 
1293  char eventName[256] = "", evtype[256] = "";
1294  const char delimiters[] = "+";
1295  size_t linelen = strnlen(line, 1024);
1296  enum eventtypes eventtype = ET_NONE;
1297 
1298  int joyNo = 0;
1299  float defaultDeadzone = 0.1f;
1300  float defaultLinearity = 1.0f;
1301  if (line[0] == ';' || linelen < 5)
1302  {
1303  cur_comment += line;;
1304  return false;
1305  }
1306  sscanf(line, "%s %s", eventName, evtype);
1307  if (strnlen(eventName, 255) == 0 || strnlen(evtype, 255) == 0)
1308  return false;
1309 
1310  if (!strncmp(evtype, "Keyboard", 8))
1311  eventtype = ET_Keyboard;
1312  else if (!strncmp(evtype, "MouseButton", 10))
1313  eventtype = ET_MouseButton;
1314  else if (!strncmp(evtype, "MouseAxisX", 9))
1315  eventtype = ET_MouseAxisX;
1316  else if (!strncmp(evtype, "MouseAxisY", 9))
1317  eventtype = ET_MouseAxisY;
1318  else if (!strncmp(evtype, "MouseAxisZ", 9))
1319  eventtype = ET_MouseAxisZ;
1320  else if (!strncmp(evtype, "JoystickButton", 14))
1321  eventtype = ET_JoystickButton;
1322  else if (!strncmp(evtype, "JoystickAxis", 12))
1323  eventtype = ET_JoystickAxisAbs;
1324  //else if (!strncmp(evtype, "JoystickAxis", 250)) eventtype = ET_JoystickAxisRel;
1325  else if (!strncmp(evtype, "JoystickPov", 11))
1326  eventtype = ET_JoystickPov;
1327  else if (!strncmp(evtype, "JoystickSlider", 14))
1328  eventtype = ET_JoystickSliderX;
1329  else if (!strncmp(evtype, "JoystickSliderX", 15))
1330  eventtype = ET_JoystickSliderX;
1331  else if (!strncmp(evtype, "JoystickSliderY", 15))
1332  eventtype = ET_JoystickSliderY;
1333  else if (!strncmp(evtype, "None", 4))
1334  eventtype = ET_NONE;
1335 
1336  switch (eventtype)
1337  {
1338  case ET_Keyboard:
1339  {
1340  bool alt = false;
1341  bool shift = false;
1342  bool ctrl = false;
1343  bool expl = false;
1344 
1345  char* keycode = 0;
1346  char keycodes[256] = {};
1347  char keycodes_work[256] = {};
1348 
1349  OIS::KeyCode key = KC_UNASSIGNED;
1350 
1351  sscanf(line, "%s %s %s", eventName, evtype, keycodes);
1352  // separate all keys and construct the key combination
1353  //LOG("try to add key: " + String(eventName)+","+ String(evtype)+","+String(keycodes));
1354  strncpy(keycodes_work, keycodes, 255);
1355  keycodes_work[255] = '\0';
1356  char* token = strtok(keycodes_work, delimiters);
1357 
1358  while (token != NULL)
1359  {
1360  if (strncmp(token, "SHIFT", 5) == 0)
1361  shift = true;
1362  else if (strncmp(token, "CTRL", 4) == 0)
1363  ctrl = true;
1364  else if (strncmp(token, "ALT", 3) == 0)
1365  alt = true;
1366  else if (strncmp(token, "EXPL", 4) == 0)
1367  expl = true;
1368  keycode = token;
1369  token = strtok(NULL, delimiters);
1370  }
1371 
1372  allit = allkeys.find(keycode);
1373  if (allit == allkeys.end())
1374  {
1375 #ifndef NOOGRE
1376  LOG("unknown key: " + string(keycodes));
1377 #endif
1378  key = KC_UNASSIGNED;
1379  }
1380  else
1381  {
1382  //LOG("found key: " + string(keycode) + " = " + TOSTRING((int)key));
1383  key = allit->second;
1384  }
1385  int eventID = resolveEventName(String(eventName));
1386  if (eventID == -1)
1387  {
1388  LOG("Error while processing input config: Unknown Event: "+String(eventName));
1389  return false;
1390  }
1391  event_trigger_t t_key = newEvent();
1392  t_key.configDeviceID = deviceID;
1393  t_key.eventtype = ET_Keyboard;
1394  t_key.shift = shift;
1395  t_key.ctrl = ctrl;
1396  t_key.alt = alt;
1397  t_key.keyCode = key;
1398  t_key.explicite = expl;
1399 
1400  strncpy(t_key.configline, keycodes, 128);
1401  strncpy(t_key.group, getEventGroup(eventName).c_str(), 128);
1402  strncpy(t_key.tmp_eventname, eventName, 128);
1403 
1404  strncpy(t_key.comments, cur_comment.c_str(), 1024);
1405  addEvent(eventID, t_key);
1406 
1407  return true;
1408  }
1409  case ET_JoystickButton:
1410  {
1411  int buttonNo = 0;
1412  char tmp2[256] = {};
1413  sscanf(line, "%s %s %d %d %s", eventName, evtype, &joyNo, &buttonNo, tmp2);
1414  event_trigger_t t_joy = newEvent();
1415  t_joy.configDeviceID = deviceID;
1416  int eventID = resolveEventName(String(eventName));
1417  if (eventID == -1)
1418  return false;
1419  t_joy.eventtype = ET_JoystickButton;
1420  t_joy.joystickNumber = (deviceID == -1 ? joyNo : deviceID);
1421  t_joy.joystickButtonNumber = buttonNo;
1422  if (!strcmp(tmp2, "!NEW!"))
1423  {
1424  strncpy(t_joy.configline, tmp2, 128);
1425  }
1426  else
1427  {
1428  char tmp[256] = {};
1429  sprintf(tmp, "%d", buttonNo);
1430  strncpy(t_joy.configline, tmp, 128);
1431  }
1432  strncpy(t_joy.group, getEventGroup(eventName).c_str(), 128);
1433  strncpy(t_joy.tmp_eventname, eventName, 128);
1434  strncpy(t_joy.comments, cur_comment.c_str(), 1024);
1435  cur_comment = "";
1436  addEvent(eventID, t_joy);
1437  return true;
1438  }
1439  case ET_JoystickAxisRel:
1440  case ET_JoystickAxisAbs:
1441  {
1442  int axisNo = 0;
1443  char options[256] = {};
1444  sscanf(line, "%s %s %d %d %s", eventName, evtype, &joyNo, &axisNo, options);
1445  int eventID = resolveEventName(String(eventName));
1446  if (eventID == -1)
1447  return false;
1448 
1449  bool half = false;
1450  bool reverse = false;
1451  bool linear = false;
1452  bool relative = false;
1453  bool usedigital = false;
1454  float deadzone = defaultDeadzone;
1455  float linearity = defaultLinearity;
1456  int jAxisRegion = 0;
1457  // 0 = all
1458  // -1 = lower
1459  // 1 = upper
1460  char tmp[256] = {};
1461  strcpy(tmp, options);
1462  tmp[255] = '\0';
1463  char* token = strtok(tmp, delimiters);
1464  while (token != NULL)
1465  {
1466  if (strncmp(token, "HALF", 4) == 0)
1467  half = true;
1468  else if (strncmp(token, "REVERSE", 7) == 0)
1469  reverse = true;
1470  else if (strncmp(token, "LINEAR", 6) == 0)
1471  linear = true;
1472  else if (strncmp(token, "UPPER", 5) == 0)
1473  jAxisRegion = 1;
1474  else if (strncmp(token, "LOWER", 5) == 0)
1475  jAxisRegion = -1;
1476  else if (strncmp(token, "RELATIVE", 8) == 0)
1477  relative = true;
1478  else if (strncmp(token, "DIGITAL", 7) == 0)
1479  usedigital = true;
1480  else if (strncmp(token, "DEADZONE", 8) == 0 && strnlen(token, 250) > 9)
1481  {
1482  char tmp2[256] = {};
1483  strcpy(tmp2, token + 9);
1484  deadzone = atof(tmp2);
1485  //LOG("got deadzone: " + TOSTRING(deadzone)+", "+String(tmp2));
1486  }
1487  else if (strncmp(token, "LINEARITY", 9) == 0 && strnlen(token, 250) > 10)
1488  {
1489  char tmp2[256] = {};
1490  strcpy(tmp2, token + 10);
1491  linearity = atof(tmp2);
1492  }
1493  token = strtok(NULL, delimiters);
1494  }
1495 
1496  if (relative)
1497  eventtype = ET_JoystickAxisRel;
1498 
1499  event_trigger_t t_joy = newEvent();
1500  t_joy.configDeviceID = deviceID;
1501  t_joy.eventtype = eventtype;
1502  t_joy.joystickAxisRegion = jAxisRegion;
1503  t_joy.joystickAxisUseDigital = usedigital;
1504  t_joy.joystickAxisDeadzone = deadzone;
1505  t_joy.joystickAxisHalf = half;
1506  t_joy.joystickAxisLinearity = linearity;
1507  t_joy.joystickAxisReverse = reverse;
1508  t_joy.joystickAxisNumber = axisNo;
1509  t_joy.joystickNumber = (deviceID == -1 ? joyNo : deviceID);
1510  strncpy(t_joy.configline, options, 128);
1511  strncpy(t_joy.group, getEventGroup(eventName).c_str(), 128);
1512  strncpy(t_joy.tmp_eventname, eventName, 128);
1513  strncpy(t_joy.comments, cur_comment.c_str(), 1024);
1514  cur_comment = "";
1515  addEvent(eventID, t_joy);
1516  //LOG("added axis: " + TOSTRING(axisNo));
1517  return true;
1518  }
1519  case ET_NONE:
1520  {
1521  int eventID = resolveEventName(String(eventName));
1522  if (eventID == -1)
1523  return false;
1524  // Insert event with no trigger
1525  addEvent(eventID);
1526  return true;
1527  }
1528  case ET_MouseButton:
1529  case ET_MouseAxisX:
1530  case ET_MouseAxisY:
1531  case ET_MouseAxisZ:
1532  // no mouse support D:
1533  return false;
1534  case ET_JoystickPov:
1535  {
1536  int povNumber = 0;
1537  char dir[256] = {};
1538  sscanf(line, "%s %s %d %d %s", eventName, evtype, &joyNo, &povNumber, dir);
1539  int eventID = resolveEventName(String(eventName));
1540  if (eventID == -1)
1541  return false;
1542 
1543  int direction = OIS::Pov::Centered;
1544  if (!strcmp(dir, "North"))
1545  direction = OIS::Pov::North;
1546  if (!strcmp(dir, "South"))
1547  direction = OIS::Pov::South;
1548  if (!strcmp(dir, "East"))
1549  direction = OIS::Pov::East;
1550  if (!strcmp(dir, "West"))
1551  direction = OIS::Pov::West;
1552  if (!strcmp(dir, "NorthEast"))
1553  direction = OIS::Pov::NorthEast;
1554  if (!strcmp(dir, "SouthEast"))
1555  direction = OIS::Pov::SouthEast;
1556  if (!strcmp(dir, "NorthWest"))
1557  direction = OIS::Pov::NorthWest;
1558  if (!strcmp(dir, "SouthWest"))
1559  direction = OIS::Pov::SouthWest;
1560 
1561  event_trigger_t t_pov = newEvent();
1562  t_pov.configDeviceID = deviceID;
1563  t_pov.eventtype = eventtype;
1564  t_pov.joystickNumber = (deviceID == -1 ? joyNo : deviceID);
1565  t_pov.joystickPovNumber = povNumber;
1566  t_pov.joystickPovDirection = direction;
1567 
1568  strncpy(t_pov.group, getEventGroup(eventName).c_str(), 128);
1569  strncpy(t_pov.tmp_eventname, eventName, 128);
1570  strncpy(t_pov.comments, cur_comment.c_str(), 1024);
1571  strncpy(t_pov.configline, dir, 128);
1572  cur_comment = "";
1573  addEvent(eventID, t_pov);
1574  //LOG("added axis: " + TOSTRING(axisNo));
1575  return true;
1576  }
1577  case ET_JoystickSliderX:
1578  case ET_JoystickSliderY:
1579  {
1580  int sliderNumber = 0;
1581  char options[256] = {};
1582  char type;
1583  sscanf(line, "%s %s %d %c %d %s", eventName, evtype, &joyNo, &type, &sliderNumber, options);
1584  int eventID = resolveEventName(String(eventName));
1585  if (eventID == -1)
1586  return false;
1587 
1588  bool reverse = false;
1589  char tmp[256] = {};
1590  strncpy(tmp, options, 255);
1591  tmp[255] = '\0';
1592  char* token = strtok(tmp, delimiters);
1593  while (token != NULL)
1594  {
1595  if (strncmp(token, "REVERSE", 7) == 0)
1596  reverse = true;
1597 
1598  token = strtok(NULL, delimiters);
1599  }
1600 
1601  event_trigger_t t_slider = newEvent();
1602  t_slider.configDeviceID = deviceID;
1603 
1604  if (type == 'Y' || type == 'y')
1605  eventtype = ET_JoystickSliderY;
1606  else if (type == 'X' || type == 'x')
1607  eventtype = ET_JoystickSliderX;
1608 
1609  t_slider.eventtype = eventtype;
1610  t_slider.joystickNumber = (deviceID == -1 ? joyNo : deviceID);
1611  t_slider.joystickSliderNumber = sliderNumber;
1612  t_slider.joystickSliderReverse = reverse;
1613  // TODO: add region support to sliders!
1614  t_slider.joystickSliderRegion = 0;
1615  strncpy(t_slider.configline, options, 128);
1616  strncpy(t_slider.group, getEventGroup(eventName).c_str(), 128);
1617  strncpy(t_slider.tmp_eventname, eventName, 128);
1618  strncpy(t_slider.comments, cur_comment.c_str(), 1024);
1619  cur_comment = "";
1620  addEvent(eventID, t_slider);
1621  //LOG("added axis: " + TOSTRING(axisNo));
1622  return true;
1623  }
1624  default:
1625  return false;
1626  }
1627 }
1628 
1629 int InputEngine::getCurrentJoyButton(int& joystickNumber, int& button)
1630 {
1631  for (int j = 0; j < free_joysticks; j++)
1632  {
1633  for (int i = 0; i < (int)joyState[j].mButtons.size(); i++)
1634  {
1635  if (joyState[j].mButtons[i])
1636  {
1637  joystickNumber = j;
1638  button = i;
1639  return 1;
1640  }
1641  }
1642  }
1643  return 0;
1644 }
1645 
1646 int InputEngine::getCurrentPovValue(int& joystickNumber, int& pov, int& povdir)
1647 {
1648  for (int j = 0; j < free_joysticks; j++)
1649  {
1650  for (int i = 0; i < MAX_JOYSTICK_POVS; i++)
1651  {
1652  if (joyState[j].mPOV[i].direction != Pov::Centered)
1653  {
1654  joystickNumber = j;
1655  pov = i;
1656  povdir = joyState[j].mPOV[i].direction;
1657  return 1;
1658  }
1659  }
1660  }
1661  return 0;
1662 }
1663 
1665 {
1666  OIS::MouseState const& mstate = mMouse->getMouseState();
1667  Ogre::Vector2 res;
1668  res.x = static_cast<float>(mstate.X.abs) / static_cast<float>(mstate.width);
1669  res.y = static_cast<float>(mstate.Y.abs) / static_cast<float>(mstate.height);
1670  return res;
1671 }
1672 
1674 {
1675  event_trigger_t res;
1676  memset(&res, 0, sizeof(event_trigger_t));
1677  return res;
1678 }
1679 
1680 int InputEngine::getJoyComponentCount(OIS::ComponentType type, int joystickNumber)
1681 {
1682  if (joystickNumber > free_joysticks || !mJoy[joystickNumber])
1683  return 0;
1684  return mJoy[joystickNumber]->getNumberOfComponents(type);
1685 }
1686 
1687 std::string InputEngine::getJoyVendor(int joystickNumber)
1688 {
1689  if (joystickNumber > free_joysticks || !mJoy[joystickNumber])
1690  return "unknown";
1691  return mJoy[joystickNumber]->vendor();
1692 }
1693 
1694 JoyStickState* InputEngine::getCurrentJoyState(int joystickNumber)
1695 {
1696  if (joystickNumber > free_joysticks)
1697  return 0;
1698  return &joyState[joystickNumber];
1699 }
1700 
1702 {
1703  std::map<int, bool>::iterator i;
1704  int keyCounter = 0;
1705  int modCounter = 0;
1706 
1707  // list all modificators first
1708  for (i = keyState.begin(); i != keyState.end(); i++)
1709  {
1710  if (i->second)
1711  {
1712  if (i->first != KC_LSHIFT && i->first != KC_RSHIFT && i->first != KC_LCONTROL && i->first != KC_RCONTROL && i->first != KC_LMENU && i->first != KC_RMENU)
1713  continue;
1714  modCounter++;
1715  String keyName = getKeyNameForKeyCode((OIS::KeyCode)i->first);
1716  if (*combo == "")
1717  *combo = keyName;
1718  else
1719  *combo = *combo + "+" + keyName;
1720  }
1721  }
1722 
1723  // now list all keys
1724  for (i = keyState.begin(); i != keyState.end(); i++)
1725  {
1726  if (i->second)
1727  {
1728  if (i->first == KC_LSHIFT || i->first == KC_RSHIFT || i->first == KC_LCONTROL || i->first == KC_RCONTROL || i->first == KC_LMENU || i->first == KC_RMENU)
1729  continue;
1730  String keyName = getKeyNameForKeyCode((OIS::KeyCode)i->first);
1731  if (*combo == "")
1732  *combo = keyName;
1733  else
1734  *combo = *combo + "+" + keyName;
1735  keyCounter++;
1736  }
1737  }
1738 
1739  //
1740  if (modCounter > 0 && keyCounter == 0)
1741  {
1742  return -modCounter;
1743  }
1744  else if (keyCounter == 0 && modCounter == 0)
1745  {
1746  *combo = _L("(Please press a key)");
1747  return 0;
1748  }
1749  return keyCounter;
1750 }
1751 
1752 String InputEngine::getEventGroup(String eventName)
1753 {
1754  const char delimiters[] = "_";
1755  char tmp[256] = {};
1756  strncpy(tmp, eventName.c_str(), 255);
1757  tmp[255] = '\0';
1758  char* token = strtok(tmp, delimiters);
1759  while (token != NULL)
1760  {
1761  return String(token);
1762  }
1763  return "";
1764 }
1765 
1767 {
1769  return false;
1770  bool isSlider = (t->eventtype == ET_JoystickSliderX || t->eventtype == ET_JoystickSliderY);
1771  strcpy(t->configline, "");
1772 
1773  if (isSlider)
1774  {
1775  if (t->joystickSliderReverse && !strlen(t->configline))
1776  strcat(t->configline, "REVERSE");
1777  else if (t->joystickSliderReverse && strlen(t->configline))
1778  strcat(t->configline, "+REVERSE");
1779 
1780  if (t->joystickSliderRegion == 1 && !strlen(t->configline))
1781  strcat(t->configline, "UPPER");
1782  else if (t->joystickSliderRegion == 1 && strlen(t->configline))
1783  strcat(t->configline, "+UPPER");
1784  else if (t->joystickSliderRegion == -1 && !strlen(t->configline))
1785  strcat(t->configline, "LOWER");
1786  else if (t->joystickSliderRegion == -1 && strlen(t->configline))
1787  strcat(t->configline, "+LOWER");
1788 
1789  // is this is a slider, ignore the rest
1790  return true;
1791  }
1792 
1793  if (t->joystickAxisReverse && !strlen(t->configline))
1794  strcat(t->configline, "REVERSE");
1795  else if (t->joystickAxisReverse && strlen(t->configline))
1796  strcat(t->configline, "+REVERSE");
1797 
1798  if (t->joystickAxisRegion == 1 && !strlen(t->configline))
1799  strcat(t->configline, "UPPER");
1800  else if (t->joystickAxisRegion == 1 && strlen(t->configline))
1801  strcat(t->configline, "+UPPER");
1802  else if (t->joystickAxisRegion == -1 && !strlen(t->configline))
1803  strcat(t->configline, "LOWER");
1804  else if (t->joystickAxisRegion == -1 && strlen(t->configline))
1805  strcat(t->configline, "+LOWER");
1806 
1807  if (fabs(t->joystickAxisDeadzone - 0.1) > 0.0001f)
1808  {
1809  char tmp[256] = {};
1810  sprintf(tmp, "DEADZONE=%0.2f", t->joystickAxisDeadzone);
1811  if (strlen(t->configline))
1812  {
1813  strcat(t->configline, "+");
1814  strcat(t->configline, tmp);
1815  }
1816  else
1817  strcat(t->configline, tmp);
1818  }
1819  if (fabs(1.0f - t->joystickAxisLinearity) > 0.01f)
1820  {
1821  char tmp[256] = {};
1822  sprintf(tmp, "LINEARITY=%0.2f", t->joystickAxisLinearity);
1823  if (strlen(t->configline))
1824  {
1825  strcat(t->configline, "+");
1826  strcat(t->configline, tmp);
1827  }
1828  else
1829  strcat(t->configline, tmp);
1830  }
1831  return true;
1832 }
1833 
1835 {
1836  for (int i = 0; i < EV_MODE_LAST; i++)
1837  {
1838  if (events.find(eventInfo[i].eventID) == events.end())
1839  {
1840  // not existing, insert default
1841 
1842  char tmp[256] = "";
1843  sprintf(tmp, "%s %s", eventInfo[i].name.c_str(), eventInfo[i].defaultKey.c_str());
1844 
1846  }
1847  }
1848 }
1849 
1850 // Loads config file specific to a device and OS (or default config if deviceID is -1).
1852 {
1853  String fileName;
1854  if (deviceID == -1)
1855  {
1856  fileName = DEFAULT_MAPFILE;
1857  }
1858  else
1859  {
1860  ROR_ASSERT(deviceID < free_joysticks);
1861 
1862  String deviceStr = mJoy[deviceID]->vendor();
1863 
1864  // care about unsuitable chars
1865  String repl = "\\/ #@?!$%^&*()+=-><.:'|\";";
1866  for (unsigned int c = 0; c < repl.size(); c++)
1867  {
1868  deviceStr = StringUtil::replaceAll(deviceStr, repl.substr(c, 1), "_");
1869  }
1870 
1871  // Look for OS-specific device mapping
1872  String osSpecificMapFile;
1873 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
1874  osSpecificMapFile = deviceStr + ".windows.map";
1875 #elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
1876  osSpecificMapFile = deviceStr + ".linux.map";
1877 #endif
1878  if (osSpecificMapFile != "" &&
1879  ResourceGroupManager::getSingleton().resourceExists(RGN_CONFIG, osSpecificMapFile))
1880  {
1881  fileName = osSpecificMapFile;
1882  }
1883  else
1884  {
1885  // Load generic device mapping
1886  fileName = deviceStr + ".map";
1887  }
1888 
1889  m_loaded_configs[deviceID] = fileName;
1890  }
1891 
1892  return this->loadMapping(fileName, deviceID);
1893 }
1894 
1896 {
1897  ROR_ASSERT(deviceID < free_joysticks);
1898 
1899  if (deviceID == -1)
1900  return this->saveMapping(DEFAULT_MAPFILE, deviceID);
1901  else
1902  return this->saveMapping(m_loaded_configs[deviceID], deviceID);
1903 }
1904 
1905 std::string const& InputEngine::getLoadedConfigFile(int deviceID /*= -1*/)
1906 {
1907  ROR_ASSERT(deviceID < free_joysticks);
1908  if (deviceID == -1)
1909  return DEFAULT_MAPFILE;
1910  else
1911  return m_loaded_configs[deviceID];
1912 }
1913 
1914 bool InputEngine::loadMapping(String fileName, int deviceID)
1915 {
1916  char line[1025] = "";
1917  int oldState = uniqueCounter;
1918 
1919  LOG(" * Loading input mapping " + fileName);
1920  {
1921  DataStreamPtr ds;
1922  try
1923  {
1924  ds = ResourceGroupManager::getSingleton().openResource(fileName, RGN_CONFIG);
1925  }
1926  catch (...)
1927  {
1928  return false;
1929  }
1930  while (!ds->eof())
1931  {
1932  size_t size = 1024;
1933  if (ds->tell() + size >= ds->size())
1934  size = ds->size() - ds->tell();
1935  if (ds->tell() >= ds->size())
1936  break;
1937  size_t readnum = ds->readLine(line, size);
1938  if (readnum > 5)
1939  processLine(line, deviceID);
1940  }
1941  }
1942 
1943  int newEvents = uniqueCounter - oldState;
1944  LOG(" * Input map successfully loaded: " + TOSTRING(newEvents) + " entries");
1945  return true;
1946 }
1947 
1948 bool InputEngine::saveMapping(String fileName, int deviceID)
1949 {
1950  const int COL1_WIDTH = 34; // total 35
1951  const int COL2_WIDTH = 19; // total 20
1952 
1953  try
1954  {
1955  // Open file for writing (overwrite existing).
1956  Ogre::DataStreamPtr ds = Ogre::ResourceGroupManager::getSingleton().createResource(
1957  fileName, RGN_CONFIG, /*overwrite:*/true);
1958 
1959  // Loop events and filter by device.
1960  for (auto& ev_pair: events)
1961  {
1962  for (event_trigger_t& ev: ev_pair.second)
1963  {
1964  if (ev.configDeviceID == deviceID)
1965  {
1966  // We found a matching event - compose config line and write it.
1967 
1968  string conf_string = this->composeEventConfigString(ev);
1969  switch (ev.eventtype)
1970  {
1971  case ET_JoystickButton:
1972  case ET_JoystickAxisAbs:
1973  case ET_JoystickAxisRel:
1974  case ET_JoystickPov:
1975  case ET_JoystickSliderX:
1976  case ET_JoystickSliderY:
1977  conf_string = fmt::format("0 {}", conf_string); // Dummy device number (unused)
1978  break;
1979  default:;
1980  }
1981 
1982  std::string line = fmt::format("{:<{}} {:<{}} {}\n", // padding: ("{:<{}}", "abc", 10) writes "abc "
1983  this->eventIDToName(ev_pair.first), COL1_WIDTH,
1984  this->getEventTypeName(ev.eventtype), COL2_WIDTH,
1985  conf_string);
1986  ds->write(line.c_str(), line.size());
1987  }
1988  }
1989  }
1990  return true; // Closes `ds`
1991  }
1992  catch (Ogre::Exception& e) // Already logged by OGRE
1993  {
1995  fmt::format("Failed to write '{}', {}", fileName, e.getDescription()));
1996  return false;
1997  }
1998 }
1999 
2000 int InputEngine::resolveEventName(String eventName)
2001 {
2002  int i = 0;
2003  while (i != EV_MODE_LAST)
2004  {
2005  if (eventInfo[i].name == eventName)
2006  return eventInfo[i].eventID;
2007  i++;
2008  }
2009  LOG("unknown event (ignored): " + eventName);
2010  return -1;
2011 }
2012 
2013 String InputEngine::eventIDToName(int eventID)
2014 {
2015  int i = 0;
2016  while (i != EV_MODE_LAST)
2017  {
2018  if (eventInfo[i].eventID == eventID)
2019  return eventInfo[i].name;
2020  i++;
2021  }
2022  return "unknown";
2023 }
2024 
2026 {
2027  int i = 0;
2028  while (i != EV_MODE_LAST)
2029  {
2030  if (eventInfo[i].eventID == eventID)
2031  return eventInfo[i].description;
2032  i++;
2033  }
2034  return "unknown";
2035 }
2036 
2038 {
2039  allkeys["0"] = KC_0;
2040  allkeys["1"] = KC_1;
2041  allkeys["2"] = KC_2;
2042  allkeys["3"] = KC_3;
2043  allkeys["4"] = KC_4;
2044  allkeys["5"] = KC_5;
2045  allkeys["6"] = KC_6;
2046  allkeys["7"] = KC_7;
2047  allkeys["8"] = KC_8;
2048  allkeys["9"] = KC_9;
2049  allkeys["A"] = KC_A;
2050  allkeys["ABNT_C1"] = KC_ABNT_C1;
2051  allkeys["ABNT_C2"] = KC_ABNT_C2;
2052  allkeys["ADD"] = KC_ADD;
2053  allkeys["APOSTROPHE"] = KC_APOSTROPHE;
2054  allkeys["APPS"] = KC_APPS;
2055  allkeys["AT"] = KC_AT;
2056  allkeys["AX"] = KC_AX;
2057  allkeys["B"] = KC_B;
2058  allkeys["BACK"] = KC_BACK;
2059  allkeys["BACKSLASH"] = KC_BACKSLASH;
2060  allkeys["C"] = KC_C;
2061  allkeys["CALCULATOR"] = KC_CALCULATOR;
2062  allkeys["CAPITAL"] = KC_CAPITAL;
2063  allkeys["COLON"] = KC_COLON;
2064  allkeys["COMMA"] = KC_COMMA;
2065  allkeys["CONVERT"] = KC_CONVERT;
2066  allkeys["D"] = KC_D;
2067  allkeys["DECIMAL"] = KC_DECIMAL;
2068  allkeys["DELETE"] = KC_DELETE;
2069  allkeys["DIVIDE"] = KC_DIVIDE;
2070  allkeys["DOWN"] = KC_DOWN;
2071  allkeys["E"] = KC_E;
2072  allkeys["END"] = KC_END;
2073  allkeys["EQUALS"] = KC_EQUALS;
2074  allkeys["ESCAPE"] = KC_ESCAPE;
2075  allkeys["F"] = KC_F;
2076  allkeys["F1"] = KC_F1;
2077  allkeys["F10"] = KC_F10;
2078  allkeys["F11"] = KC_F11;
2079  allkeys["F12"] = KC_F12;
2080  allkeys["F13"] = KC_F13;
2081  allkeys["F14"] = KC_F14;
2082  allkeys["F15"] = KC_F15;
2083  allkeys["F2"] = KC_F2;
2084  allkeys["F3"] = KC_F3;
2085  allkeys["F4"] = KC_F4;
2086  allkeys["F5"] = KC_F5;
2087  allkeys["F6"] = KC_F6;
2088  allkeys["F7"] = KC_F7;
2089  allkeys["F8"] = KC_F8;
2090  allkeys["F9"] = KC_F9;
2091  allkeys["G"] = KC_G;
2092  allkeys["GRAVE"] = KC_GRAVE;
2093  allkeys["H"] = KC_H;
2094  allkeys["HOME"] = KC_HOME;
2095  allkeys["I"] = KC_I;
2096  allkeys["INSERT"] = KC_INSERT;
2097  allkeys["J"] = KC_J;
2098  allkeys["K"] = KC_K;
2099  allkeys["KANA"] = KC_KANA;
2100  allkeys["KANJI"] = KC_KANJI;
2101  allkeys["L"] = KC_L;
2102  allkeys["LBRACKET"] = KC_LBRACKET;
2103  allkeys["LCONTROL"] = KC_LCONTROL;
2104  allkeys["LEFT"] = KC_LEFT;
2105  allkeys["LMENU"] = KC_LMENU;
2106  allkeys["LSHIFT"] = KC_LSHIFT;
2107  allkeys["LWIN"] = KC_LWIN;
2108  allkeys["M"] = KC_M;
2109  allkeys["MAIL"] = KC_MAIL;
2110  allkeys["MEDIASELECT"] = KC_MEDIASELECT;
2111  allkeys["MEDIASTOP"] = KC_MEDIASTOP;
2112  allkeys["MINUS"] = KC_MINUS;
2113  allkeys["MULTIPLY"] = KC_MULTIPLY;
2114  allkeys["MUTE"] = KC_MUTE;
2115  allkeys["MYCOMPUTER"] = KC_MYCOMPUTER;
2116  allkeys["N"] = KC_N;
2117  allkeys["NEXTTRACK"] = KC_NEXTTRACK;
2118  allkeys["NOCONVERT"] = KC_NOCONVERT;
2119  allkeys["NUMLOCK"] = KC_NUMLOCK;
2120  allkeys["NUMPAD0"] = KC_NUMPAD0;
2121  allkeys["NUMPAD1"] = KC_NUMPAD1;
2122  allkeys["NUMPAD2"] = KC_NUMPAD2;
2123  allkeys["NUMPAD3"] = KC_NUMPAD3;
2124  allkeys["NUMPAD4"] = KC_NUMPAD4;
2125  allkeys["NUMPAD5"] = KC_NUMPAD5;
2126  allkeys["NUMPAD6"] = KC_NUMPAD6;
2127  allkeys["NUMPAD7"] = KC_NUMPAD7;
2128  allkeys["NUMPAD8"] = KC_NUMPAD8;
2129  allkeys["NUMPAD9"] = KC_NUMPAD9;
2130  allkeys["NUMPADCOMMA"] = KC_NUMPADCOMMA;
2131  allkeys["NUMPADENTER"] = KC_NUMPADENTER;
2132  allkeys["NUMPADEQUALS"] = KC_NUMPADEQUALS;
2133  allkeys["O"] = KC_O;
2134  allkeys["OEM_102"] = KC_OEM_102;
2135  allkeys["P"] = KC_P;
2136  allkeys["PAUSE"] = KC_PAUSE;
2137  allkeys["PERIOD"] = KC_PERIOD;
2138  allkeys["PGDOWN"] = KC_PGDOWN;
2139  allkeys["PGUP"] = KC_PGUP;
2140  allkeys["PLAYPAUSE"] = KC_PLAYPAUSE;
2141  allkeys["POWER"] = KC_POWER;
2142  allkeys["PREVTRACK"] = KC_PREVTRACK;
2143  allkeys["Q"] = KC_Q;
2144  allkeys["R"] = KC_R;
2145  allkeys["RBRACKET"] = KC_RBRACKET;
2146  allkeys["RCONTROL"] = KC_RCONTROL;
2147  allkeys["RETURN"] = KC_RETURN;
2148  allkeys["RIGHT"] = KC_RIGHT;
2149  allkeys["RMENU"] = KC_RMENU;
2150  allkeys["RSHIFT"] = KC_RSHIFT;
2151  allkeys["RWIN"] = KC_RWIN;
2152  allkeys["S"] = KC_S;
2153  allkeys["SCROLL"] = KC_SCROLL;
2154  allkeys["SEMICOLON"] = KC_SEMICOLON;
2155  allkeys["SLASH"] = KC_SLASH;
2156  allkeys["SLEEP"] = KC_SLEEP;
2157  allkeys["SPACE"] = KC_SPACE;
2158  allkeys["STOP"] = KC_STOP;
2159  allkeys["SUBTRACT"] = KC_SUBTRACT;
2160  allkeys["SYSRQ"] = KC_SYSRQ;
2161  allkeys["T"] = KC_T;
2162  allkeys["TAB"] = KC_TAB;
2163  allkeys["U"] = KC_U;
2164  allkeys["UNDERLINE"] = KC_UNDERLINE;
2165  allkeys["UNLABELED"] = KC_UNLABELED;
2166  allkeys["UP"] = KC_UP;
2167  allkeys["V"] = KC_V;
2168  allkeys["VOLUMEDOWN"] = KC_VOLUMEDOWN;
2169  allkeys["VOLUMEUP"] = KC_VOLUMEUP;
2170  allkeys["W"] = KC_W;
2171  allkeys["WAKE"] = KC_WAKE;
2172  allkeys["WEBBACK"] = KC_WEBBACK;
2173  allkeys["WEBFAVORITES"] = KC_WEBFAVORITES;
2174  allkeys["WEBFORWARD"] = KC_WEBFORWARD;
2175  allkeys["WEBHOME"] = KC_WEBHOME;
2176  allkeys["WEBREFRESH"] = KC_WEBREFRESH;
2177  allkeys["WEBSEARCH"] = KC_WEBSEARCH;
2178  allkeys["WEBSTOP"] = KC_WEBSTOP;
2179  allkeys["X"] = KC_X;
2180  allkeys["Y"] = KC_Y;
2181  allkeys["YEN"] = KC_YEN;
2182  allkeys["Z"] = KC_Z;
2183 }
2184 
2186 {
2187  std::map<int, std::vector<event_trigger_t>>::iterator it = events.find(eventID);
2188 
2189  if (it == events.end())
2190  return String();
2191  if (it->second.empty())
2192  return String();
2193 
2194  std::vector<event_trigger_t>::iterator it2 = it->second.begin();
2195  return getKeyNameForKeyCode((OIS::KeyCode)it2->keyCode);
2196 }
2197 
2198 Ogre::String InputEngine::getModifierKeyName(OIS::KeyCode key)
2199 {
2200  switch (key)
2201  {
2202  case OIS::KC_LMENU: return _LC("ModifierKey", "Left Alt");
2203  case OIS::KC_LSHIFT: return _LC("ModifierKey", "Left Shift");
2204  case OIS::KC_LCONTROL: return _LC("ModifierKey", "Left Ctrl");
2205 
2206  case OIS::KC_RMENU: return _LC("ModifierKey", "Right Alt");
2207  case OIS::KC_RSHIFT: return _LC("ModifierKey", "Right Shift");
2208  case OIS::KC_RCONTROL: return _LC("ModifierKey", "Right Ctrl");
2209 
2210  default: return "";
2211  }
2212 }
Script2Game::KC_SUBTRACT
enum Script2Game::inputEvents KC_SUBTRACT
ROR_ASSERT
#define ROR_ASSERT(_EXPR)
Definition: Application.h:40
Script2Game::KC_4
enum Script2Game::inputEvents KC_4
Script2Game::KC_NUMPAD1
enum Script2Game::inputEvents KC_NUMPAD1
RoR::EV_COMMON_SCREENSHOT
@ EV_COMMON_SCREENSHOT
take a screenshot
Definition: InputEngine.h:261
RoR::EV_AIRPLANE_RUDDER_RIGHT
@ EV_AIRPLANE_RUDDER_RIGHT
rudder right
Definition: InputEngine.h:91
RoR::InputEngine::BUILTIN_MAPPING_DEVICEID
static const int BUILTIN_MAPPING_DEVICEID
virtual device ID for builtin defaults
Definition: InputEngine.h:465
RoR::EV_COMMANDS_83
@ EV_COMMANDS_83
Command 83.
Definition: InputEngine.h:221
RoR::InputEngine::~InputEngine
~InputEngine()
Definition: InputEngine.cpp:434
RoR::EV_COMMANDS_08
@ EV_COMMANDS_08
Command 8.
Definition: InputEngine.h:146
RoR::InputEngine::processLine
bool processLine(const char *line, int deviceID=-1)
Definition: InputEngine.cpp:1289
RoR::EV_AIRPLANE_THROTTLE
@ EV_AIRPLANE_THROTTLE
Definition: InputEngine.h:94
RoR::EV_COMMANDS_72
@ EV_COMMANDS_72
Command 72.
Definition: InputEngine.h:210
RoR::InputEngine::clearAllEvents
void clearAllEvents()
Purges all configured bindings.
Definition: InputEngine.cpp:1283
RoR::EV_SURVEY_MAP_CYCLE
@ EV_SURVEY_MAP_CYCLE
cycle overview-map mode
Definition: InputEngine.h:292
RoR::InputEngine::initAllKeys
void initAllKeys()
Definition: InputEngine.cpp:2037
RoR::InputEngine::setEventStatusSupressed
void setEventStatusSupressed(events eventID, bool supress)
Definition: InputEngine.cpp:709
RoR::EV_CAMERA_ZOOM_OUT_FAST
@ EV_CAMERA_ZOOM_OUT_FAST
zoom camera out faster
Definition: InputEngine.h:128
mOISDeviceType
const char * mOISDeviceType[6]
Definition: InputEngine.cpp:35
RoR::EV_COMMON_REPLAY_FORWARD
@ EV_COMMON_REPLAY_FORWARD
Definition: InputEngine.h:255
RoR::InputEngine::getEventCommandTrimmed
std::string getEventCommandTrimmed(int eventID)
Omits 'EXPL' modifier.
Definition: InputEngine.cpp:788
RoR::EV_COMMANDS_66
@ EV_COMMANDS_66
Command 66.
Definition: InputEngine.h:204
RoR::EV_COMMANDS_06
@ EV_COMMANDS_06
Command 6.
Definition: InputEngine.h:144
RoR::InputEngine::getEventTypeName
static const char * getEventTypeName(eventtypes type)
Enum to string helper.
Definition: InputEngine.cpp:1177
RoR::EV_SURVEY_MAP_TOGGLE
@ EV_SURVEY_MAP_TOGGLE
toggle overview-map mode
Definition: InputEngine.h:293
Script2Game::KC_INSERT
enum Script2Game::inputEvents KC_INSERT
RoR::EV_AIRPLANE_THROTTLE_DOWN
@ EV_AIRPLANE_THROTTLE_DOWN
decreases the airplane thrust
Definition: InputEngine.h:96
RoR::EV_COMMANDS_37
@ EV_COMMANDS_37
Command 37.
Definition: InputEngine.h:175
Script2Game::KC_1
enum Script2Game::inputEvents KC_1
RoR::EV_GRASS_MORE
@ EV_GRASS_MORE
EXPERIMENTAL: add some grass.
Definition: InputEngine.h:282
RGN_CONFIG
#define RGN_CONFIG
Definition: Application.h:48
RoR::InputEngine::getCurrentKeyCombo
int getCurrentKeyCombo(Ogre::String *combo)
Returns number of non-modifier keys pressed (or modifier count as negative number).
Definition: InputEngine.cpp:1701
RoR::InputEngine::resetKeys
void resetKeys()
Definition: InputEngine.cpp:696
Script2Game::KC_HOME
enum Script2Game::inputEvents KC_HOME
RoR::EV_TRUCK_BRAKE_MODIFIER_50
@ EV_TRUCK_BRAKE_MODIFIER_50
brake with 50 percent pedal input
Definition: InputEngine.h:308
Script2Game::KC_LBRACKET
enum Script2Game::inputEvents KC_LBRACKET
RoR::event_trigger_t::ctrl
bool ctrl
Definition: InputEngine.h:423
Script2Game::KC_PAUSE
enum Script2Game::inputEvents KC_PAUSE
RoR::EV_TRUCK_SHIFT_UP
@ EV_TRUCK_SHIFT_UP
shift one gear up in manual transmission mode
Definition: InputEngine.h:355
RoR::EV_COMMANDS_60
@ EV_COMMANDS_60
Command 50.
Definition: InputEngine.h:198
RoR::EV_COMMANDS_58
@ EV_COMMANDS_58
Command 58.
Definition: InputEngine.h:196
Script2Game::KC_NUMPAD7
enum Script2Game::inputEvents KC_NUMPAD7
RoR::EV_COMMANDS_40
@ EV_COMMANDS_40
Command 40.
Definition: InputEngine.h:178
RoR::EV_COMMON_RESET_TRUCK
@ EV_COMMON_RESET_TRUCK
reset truck to original starting position
Definition: InputEngine.h:257
RoR::EV_COMMON_QUICKLOAD_10
@ EV_COMMON_QUICKLOAD_10
Definition: InputEngine.h:392
RoR::EV_COMMON_REPAIR_TRUCK
@ EV_COMMON_REPAIR_TRUCK
repair truck to original condition
Definition: InputEngine.h:250
RoR::EV_COMMON_CONSOLE_TOGGLE
@ EV_COMMON_CONSOLE_TOGGLE
show / hide the console
Definition: InputEngine.h:227
RoR::EV_COMMANDS_53
@ EV_COMMANDS_53
Command 53.
Definition: InputEngine.h:191
RoR::EV_TRUCK_TOGGLE_CONTACT
@ EV_TRUCK_TOGGLE_CONTACT
toggle ignition
Definition: InputEngine.h:360
RoR::EV_COMMON_TOGGLE_PHYSICS
@ EV_COMMON_TOGGLE_PHYSICS
toggle physics on/off
Definition: InputEngine.h:271
RoR::EV_TRUCK_RIGHT_MIRROR_RIGHT
@ EV_TRUCK_RIGHT_MIRROR_RIGHT
Definition: InputEngine.h:330
RoR::InputEvent::eventID
int eventID
Definition: InputEngine.h:410
RoR::InputEngine::free_joysticks
int free_joysticks
Number of detected game controllers.
Definition: InputEngine.h:576
RoR::InputEngine::updateKeyBounces
void updateKeyBounces(float dt)
Definition: InputEngine.cpp:737
RoR::InputSourceType::IST_ANALOG
@ IST_ANALOG
RoR::InputEngine::getDeviceName
Ogre::String getDeviceName(event_trigger_t const &evt)
Definition: InputEngine.cpp:1152
RoR::EV_TRUCK_LIGHTTOGGLE06
@ EV_TRUCK_LIGHTTOGGLE06
toggle custom light 6
Definition: InputEngine.h:321
RoR::event_trigger_t::joystickAxisReverse
bool joystickAxisReverse
Definition: InputEngine.h:436
RoR::InputSourceType::IST_ANY
@ IST_ANY
RoR::InputEngine::loadConfigFile
bool loadConfigFile(int deviceID=-1)
Loads config file specific to a device and OS (or default config if deviceID is -1).
Definition: InputEngine.cpp:1851
RoR::InputEngine::saveMapping
bool saveMapping(Ogre::String fileName, int deviceID)
Definition: InputEngine.cpp:1948
RoR::EV_COMMON_TOGGLE_TRUCK_BEACONS
@ EV_COMMON_TOGGLE_TRUCK_BEACONS
toggle truck beacons
Definition: InputEngine.h:273
RoR::EV_TRUCK_RIGHT_MIRROR_LEFT
@ EV_TRUCK_RIGHT_MIRROR_LEFT
Definition: InputEngine.h:329
RoR::EV_TRUCK_BLINK_RIGHT
@ EV_TRUCK_BLINK_RIGHT
toggle right direction indicator (blinker)
Definition: InputEngine.h:304
RoR::EV_COMMANDS_26
@ EV_COMMANDS_26
Command 26.
Definition: InputEngine.h:164
Script2Game::KC_NUMPAD4
enum Script2Game::inputEvents KC_NUMPAD4
RoR::EV_COMMANDS_32
@ EV_COMMANDS_32
Command 32.
Definition: InputEngine.h:170
RoR::EV_COMMON_ENTER_OR_EXIT_TRUCK
@ EV_COMMON_ENTER_OR_EXIT_TRUCK
enter or exit a truck
Definition: InputEngine.h:229
RoR::EV_COMMANDS_54
@ EV_COMMANDS_54
Command 54.
Definition: InputEngine.h:192
RoR::EV_BOAT_STEER_LEFT_AXIS
@ EV_BOAT_STEER_LEFT_AXIS
steer left (analog value!)
Definition: InputEngine.h:104
Script2Game::KC_PGDOWN
enum Script2Game::inputEvents KC_PGDOWN
RoR::InputEngine::saveConfigFile
bool saveConfigFile(int deviceID=-1)
Wites events with matching deviceID to loaded file with matching deviceID (or default file if deviceI...
Definition: InputEngine.cpp:1895
Script2Game::KC_MINUS
enum Script2Game::inputEvents KC_MINUS
RoR::EV_CAMERA_ROTATE_UP
@ EV_CAMERA_ROTATE_UP
rotate camera up
Definition: InputEngine.h:123
RoR::EV_COMMON_TOGGLE_RESET_MODE
@ EV_COMMON_TOGGLE_RESET_MODE
toggle truck reset truck mode (soft vs. hard)
Definition: InputEngine.h:258
RoR::EV_COMMANDS_61
@ EV_COMMANDS_61
Command 61.
Definition: InputEngine.h:199
RoR::event_trigger_t::joystickAxisHalf
bool joystickAxisHalf
Definition: InputEngine.h:437
Script2Game::KC_DELETE
enum Script2Game::inputEvents KC_DELETE
RoR::EV_COMMON_TOGGLE_TRUCK_FOG_LIGHTS
@ EV_COMMON_TOGGLE_TRUCK_FOG_LIGHTS
toggle truck fog lights (on/off); doesn't need low beams, doesn't use 't' lights.
Definition: InputEngine.h:277
Script2Game::KC_NUMPAD9
enum Script2Game::inputEvents KC_NUMPAD9
RoR::InputEngine::getEventConfig
Ogre::String getEventConfig(int eventID)
Definition: InputEngine.cpp:799
Script2Game::KC_6
enum Script2Game::inputEvents KC_6
Script2Game::KC_PGUP
enum Script2Game::inputEvents KC_PGUP
ContentManager.h
RoR::AppContext::GetRenderWindow
Ogre::RenderWindow * GetRenderWindow()
Definition: AppContext.h:67
RoR::InputEngine::setup
void setup()
Definition: InputEngine.cpp:470
RoR::InputEngine::getMouseState
OIS::MouseState getMouseState()
Definition: InputEngine.cpp:603
Script2Game::KC_GRAVE
enum Script2Game::inputEvents KC_GRAVE
RoR::EV_COMMANDS_03
@ EV_COMMANDS_03
Command 3.
Definition: InputEngine.h:141
RoR::InputEngine::clearEventsByDevice
void clearEventsByDevice(int deviceID)
Clears all bindings with given deviceID (-1 is no exception).
Definition: InputEngine.cpp:1265
RoR::App::GetAppContext
AppContext * GetAppContext()
Definition: Application.cpp:266
Script2Game::KC_F10
enum Script2Game::inputEvents KC_F10
RoR::EV_MENU_UP
@ EV_MENU_UP
select previous element in current category
Definition: InputEngine.h:290
format
Truck file format(technical spec)
RoR::EV_CAMERA_ZOOM_IN
@ EV_CAMERA_ZOOM_IN
zoom camera in
Definition: InputEngine.h:125
RoR::InputEngine::joyState
OIS::JoyStickState joyState[MAX_JOYSTICKS]
Definition: InputEngine.h:582
RoR::InputEvent::defaultKey
Ogre::String defaultKey
Definition: InputEngine.h:411
RoR::EV_CHARACTER_ROT_DOWN
@ EV_CHARACTER_ROT_DOWN
Definition: InputEngine.h:134
RoR::EV_COMMANDS_69
@ EV_COMMANDS_69
Command 69.
Definition: InputEngine.h:207
RoR::InputEngine::newEvent
event_trigger_t newEvent()
Definition: InputEngine.cpp:1673
RoR::EV_COMMON_AUTOLOCK
@ EV_COMMON_AUTOLOCK
unlock autolock hook node
Definition: InputEngine.h:226
RoR::EV_TRUCK_SHIFT_GEAR09
@ EV_TRUCK_SHIFT_GEAR09
shift directly into this gear
Definition: InputEngine.h:340
RoR::EV_TRUCK_BLINK_WARN
@ EV_TRUCK_BLINK_WARN
toggle all direction indicators
Definition: InputEngine.h:305
RoR::event_trigger_t::joystickPovDirection
int joystickPovDirection
Definition: InputEngine.h:442
RoR::EV_TRUCK_SHIFT_GEAR04
@ EV_TRUCK_SHIFT_GEAR04
shift directly into this gear
Definition: InputEngine.h:335
RoR::EV_AIRPLANE_AIRBRAKES_NONE
@ EV_AIRPLANE_AIRBRAKES_NONE
Definition: InputEngine.h:80
RoR::EV_COMMANDS_45
@ EV_COMMANDS_45
Command 45.
Definition: InputEngine.h:183
RoR::EV_TRUCK_SHIFT_GEAR01
@ EV_TRUCK_SHIFT_GEAR01
shift directly into this gear
Definition: InputEngine.h:332
RoR::ET_JoystickSliderX
@ ET_JoystickSliderX
Definition: InputEngine.h:62
RoR::event_trigger_t::eventtype
enum eventtypes eventtype
Definition: InputEngine.h:418
RoR::EV_TRUCK_LIGHTTOGGLE04
@ EV_TRUCK_LIGHTTOGGLE04
toggle custom light 4
Definition: InputEngine.h:319
Script2Game::KC_F8
enum Script2Game::inputEvents KC_F8
RoR::EV_COMMON_ENTER_PREVIOUS_TRUCK
@ EV_COMMON_ENTER_PREVIOUS_TRUCK
enter previous truck
Definition: InputEngine.h:231
RoR::ET_JoystickPov
@ ET_JoystickPov
Definition: InputEngine.h:61
RoR::EV_TRUCK_CRUISE_CONTROL_READJUST
@ EV_TRUCK_CRUISE_CONTROL_READJUST
match target speed / rpm with current truck speed / rpm
Definition: InputEngine.h:312
Script2Game::KC_RETURN
enum Script2Game::inputEvents KC_RETURN
RoR::EV_COMMON_QUICKLOAD_01
@ EV_COMMON_QUICKLOAD_01
Definition: InputEngine.h:383
Script2Game::KC_EQUALS
enum Script2Game::inputEvents KC_EQUALS
RoR::InputEngine::TriggerVec
std::vector< event_trigger_t > TriggerVec
Definition: InputEngine.h:460
RoR::InputEngine::getKeyForCommand
Ogre::String getKeyForCommand(int eventID)
Definition: InputEngine.cpp:2185
RoR::ET_MouseAxisX
@ ET_MouseAxisX
Definition: InputEngine.h:55
RoR::EV_COMMANDS_02
@ EV_COMMANDS_02
Command 2.
Definition: InputEngine.h:140
RoR::InputEngine::SetJoystickListener
void SetJoystickListener(OIS::JoyStickListener *obj)
Definition: InputEngine.cpp:661
RoR::EV_CHARACTER_BACKWARDS
@ EV_CHARACTER_BACKWARDS
step backwards with the character
Definition: InputEngine.h:129
RoR::EV_TRUCK_CRUISE_CONTROL
@ EV_TRUCK_CRUISE_CONTROL
toggle cruise control
Definition: InputEngine.h:309
RoR::EV_TRUCK_SHIFT_GEAR12
@ EV_TRUCK_SHIFT_GEAR12
shift directly into this gear
Definition: InputEngine.h:343
RoR::event_trigger_t::joystickAxisLinearity
float joystickAxisLinearity
Definition: InputEngine.h:434
RoR::InputEngine::axisLinearity
float axisLinearity(float axisValue, float linearity)
Definition: InputEngine.cpp:763
RoR::EV_COMMANDS_17
@ EV_COMMANDS_17
Command 17.
Definition: InputEngine.h:155
RoR::EV_COMMON_LIVE_REPAIR_MODE
@ EV_COMMON_LIVE_REPAIR_MODE
toggles live repair and recovery mode, controlled by keyboard
Definition: InputEngine.h:251
RoR::EV_COMMON_HIDE_GUI
@ EV_COMMON_HIDE_GUI
hide all GUI elements
Definition: InputEngine.h:238
RoR::EV_COMMANDS_09
@ EV_COMMANDS_09
Command 9.
Definition: InputEngine.h:147
Script2Game::KC_RIGHT
enum Script2Game::inputEvents KC_RIGHT
AppContext.h
System integration layer; inspired by OgreBites::ApplicationContext.
RoR::EV_COMMANDS_79
@ EV_COMMANDS_79
Command 79.
Definition: InputEngine.h:217
RoR::EV_COMMON_QUICKSAVE_07
@ EV_COMMON_QUICKSAVE_07
Definition: InputEngine.h:378
Console.h
RoR::Console::putMessage
void putMessage(MessageArea area, MessageType type, std::string const &msg, std::string icon="")
Definition: Console.cpp:97
RoR::InputEngine::event_times
std::map< int, float > event_times
Definition: InputEngine.h:588
RoR::EV_SURVEY_MAP_ZOOM_IN
@ EV_SURVEY_MAP_ZOOM_IN
increase survey map scale
Definition: InputEngine.h:294
RoR::EV_COMMON_GET_NEW_VEHICLE
@ EV_COMMON_GET_NEW_VEHICLE
get new vehicle
Definition: InputEngine.h:244
RoR::EV_COMMANDS_50
@ EV_COMMANDS_50
Command 50.
Definition: InputEngine.h:188
RoR::EV_TRUCK_TOGGLE_FORWARDCOMMANDS
@ EV_TRUCK_TOGGLE_FORWARDCOMMANDS
toggle forwardcommands
Definition: InputEngine.h:361
RoR::EV_TRUCK_TRACTION_CONTROL
@ EV_TRUCK_TRACTION_CONTROL
toggle antilockbrake system
Definition: InputEngine.h:369
RoR::EV_COMMANDS_18
@ EV_COMMANDS_18
Command 18.
Definition: InputEngine.h:156
Script2Game::KC_ESCAPE
enum Script2Game::inputEvents KC_ESCAPE
RoR::EV_BOAT_THROTTLE_DOWN
@ EV_BOAT_THROTTLE_DOWN
decrease throttle
Definition: InputEngine.h:108
RoR::EV_TRUCK_SHIFT_GEAR06
@ EV_TRUCK_SHIFT_GEAR06
shift directly into this gear
Definition: InputEngine.h:337
RoR::EV_TRUCK_SHIFT_DOWN
@ EV_TRUCK_SHIFT_DOWN
shift one gear down in manual transmission mode
Definition: InputEngine.h:331
RoR::EV_COMMANDS_41
@ EV_COMMANDS_41
Command 41.
Definition: InputEngine.h:179
RoR::EV_TRUCK_BRAKE_MODIFIER_25
@ EV_TRUCK_BRAKE_MODIFIER_25
brake with 25 percent pedal input
Definition: InputEngine.h:307
RoR::event_trigger_t::alt
bool alt
Definition: InputEngine.h:425
RoR::EV_MENU_RIGHT
@ EV_MENU_RIGHT
select next category
Definition: InputEngine.h:288
RoR::EV_GRASS_MOST
@ EV_GRASS_MOST
EXPERIMENTAL: set maximum amount of grass.
Definition: InputEngine.h:283
RoR::EV_TRUCK_LIGHTTOGGLE05
@ EV_TRUCK_LIGHTTOGGLE05
toggle custom light 5
Definition: InputEngine.h:320
RoR::EV_COMMON_ENTER_NEXT_TRUCK
@ EV_COMMON_ENTER_NEXT_TRUCK
enter next truck
Definition: InputEngine.h:230
RoR::EV_ROAD_EDITOR_REBUILD_MESH
@ EV_ROAD_EDITOR_REBUILD_MESH
Definition: InputEngine.h:400
RoR::ET_Keyboard
@ ET_Keyboard
Definition: InputEngine.h:53
RoR::EV_COMMON_FOV_LESS
@ EV_COMMON_FOV_LESS
decreases the current FOV value
Definition: InputEngine.h:234
RoR::EV_MENU_DOWN
@ EV_MENU_DOWN
select next element in current category
Definition: InputEngine.h:286
RoR::EV_COMMON_PRESSURE_MORE
@ EV_COMMON_PRESSURE_MORE
increase tire pressure (note: only very few trucks support this)
Definition: InputEngine.h:246
RoR::EV_TRUCK_SHIFT_GEAR13
@ EV_TRUCK_SHIFT_GEAR13
shift directly into this gear
Definition: InputEngine.h:344
RoR::EV_COMMON_SCREENSHOT_BIG
@ EV_COMMON_SCREENSHOT_BIG
take a BIG screenshot
Definition: InputEngine.h:262
RoR::EV_COMMON_QUICKSAVE_06
@ EV_COMMON_QUICKSAVE_06
Definition: InputEngine.h:377
RoR::EV_TRUCK_ACCELERATE_MODIFIER_50
@ EV_TRUCK_ACCELERATE_MODIFIER_50
accelerate with 50 percent pedal input
Definition: InputEngine.h:299
RoR::EV_MENU_LEFT
@ EV_MENU_LEFT
select previous category
Definition: InputEngine.h:287
RoR::EV_COMMON_FULLSCREEN_TOGGLE
@ EV_COMMON_FULLSCREEN_TOGGLE
Definition: InputEngine.h:237
RoR::EV_AIRPLANE_RUDDER_LEFT
@ EV_AIRPLANE_RUDDER_LEFT
rudder left
Definition: InputEngine.h:90
Language.h
Script2Game::KC_SLASH
enum Script2Game::inputEvents KC_SLASH
RoR::EV_COMMON_QUICKLOAD_09
@ EV_COMMON_QUICKLOAD_09
Definition: InputEngine.h:391
RoR::EV_COMMANDS_48
@ EV_COMMANDS_48
Command 48.
Definition: InputEngine.h:186
RoR::EV_CHARACTER_ROT_UP
@ EV_CHARACTER_ROT_UP
Definition: InputEngine.h:135
RoR::InputEngine::logval
float logval(float val)
Definition: InputEngine.cpp:768
RoR::EV_TRUCK_SHIFT_GEAR10
@ EV_TRUCK_SHIFT_GEAR10
shift directly into this gear
Definition: InputEngine.h:341
RoR::InputEngine::getEventBoolValueBounce
bool getEventBoolValueBounce(int eventID, float time=0.2f)
Definition: InputEngine.cpp:719
RoR::event_trigger_t::joystickAxisNumber
int joystickAxisNumber
Definition: InputEngine.h:432
RoR::InputEngine::getEventValue
float getEventValue(int eventID, bool pure=false, InputSourceType valueSource=InputSourceType::IST_ANY)
valueSource: IST_ANY=digital and analog devices, IST_DIGITAL=only digital, IST_ANALOG=only analog
Definition: InputEngine.cpp:915
RoR::EV_CHARACTER_RIGHT
@ EV_CHARACTER_RIGHT
rotate character right
Definition: InputEngine.h:133
RoR::EV_TRUCK_ACCELERATE_MODIFIER_25
@ EV_TRUCK_ACCELERATE_MODIFIER_25
accelerate with 25 percent pedal input
Definition: InputEngine.h:298
RoR::Console::CONSOLE_SYSTEM_ERROR
@ CONSOLE_SYSTEM_ERROR
Definition: Console.h:52
RoR::InputEngine::addEvent
void addEvent(int eventID, event_trigger_t &t)
Registers new trigger for this event.
Definition: InputEngine.cpp:1197
RoR::EV_COMMANDS_67
@ EV_COMMANDS_67
Command 67.
Definition: InputEngine.h:205
GUIManager.h
RoR::EV_COMMON_SAVE_TERRAIN
@ EV_COMMON_SAVE_TERRAIN
save terrain mesh to file
Definition: InputEngine.h:260
RoR::ET_MouseButton
@ ET_MouseButton
Definition: InputEngine.h:54
RoR::event_trigger_t::comments
char comments[1024]
Definition: InputEngine.h:453
RoR::EV_TRUCK_SHIFT_GEAR17
@ EV_TRUCK_SHIFT_GEAR17
shift directly into this gear
Definition: InputEngine.h:348
Actor.h
RoR::EV_AIRPLANE_REVERSE
@ EV_AIRPLANE_REVERSE
reverse the turboprops
Definition: InputEngine.h:89
RoR::InputEngine::getJoyVendor
std::string getJoyVendor(int joystickNumber)
Definition: InputEngine.cpp:1687
RoR::event_trigger_t
Definition: InputEngine.h:415
RoR::EV_COMMANDS_39
@ EV_COMMANDS_39
Command 39.
Definition: InputEngine.h:177
RoR::InputEngine::isKeyDown
bool isKeyDown(OIS::KeyCode mod)
Asks OIS directly.
Definition: InputEngine.cpp:1127
RoR::InputEngine::completeMissingEvents
void completeMissingEvents()
Definition: InputEngine.cpp:1834
RoR::InputEngine::getKeboardKeyForCommand
int getKeboardKeyForCommand(int eventID)
Returns -1 if not Keyboard.
Definition: InputEngine.cpp:876
RoR::EV_COMMANDS_14
@ EV_COMMANDS_14
Command 14.
Definition: InputEngine.h:152
RoR::event_trigger_t::explicite
bool explicite
Definition: InputEngine.h:422
RoR::ET_MouseAxisY
@ ET_MouseAxisY
Definition: InputEngine.h:56
RoR::EV_COMMANDS_59
@ EV_COMMANDS_59
Command 59.
Definition: InputEngine.h:197
RoR::ET_MouseAxisZ
@ ET_MouseAxisZ
Definition: InputEngine.h:57
RoR::EV_TRUCK_LIGHTTOGGLE10
@ EV_TRUCK_LIGHTTOGGLE10
toggle custom light 10
Definition: InputEngine.h:325
RoR::EV_TRUCK_SHIFT_GEAR08
@ EV_TRUCK_SHIFT_GEAR08
shift directly into this gear
Definition: InputEngine.h:339
RoR::InputEngine::updateConfigline
bool updateConfigline(event_trigger_t *t)
Definition: InputEngine.cpp:1766
RoR::InputEngine::loadMapping
bool loadMapping(Ogre::String fileName, int deviceID)
Definition: InputEngine.cpp:1914
RoR::EV_TRUCK_SHIFT_GEAR15
@ EV_TRUCK_SHIFT_GEAR15
shift directly into this gear
Definition: InputEngine.h:346
RoR::EV_AIRPLANE_FLAPS_MORE
@ EV_AIRPLANE_FLAPS_MORE
one step more flaps.
Definition: InputEngine.h:86
RoR::EV_COMMON_QUICKSAVE
@ EV_COMMON_QUICKSAVE
quicksave scene to the disk
Definition: InputEngine.h:248
RoR::EV_TRUCK_SHIFT_GEAR14
@ EV_TRUCK_SHIFT_GEAR14
shift directly into this gear
Definition: InputEngine.h:345
RoR::EV_COMMON_ACCELERATE_SIMULATION
@ EV_COMMON_ACCELERATE_SIMULATION
accelerate the simulation speed
Definition: InputEngine.h:223
RoR::InputEngine::getEventCommand
Ogre::String getEventCommand(int eventID)
Definition: InputEngine.cpp:777
RoR::EV_TRUCK_STEER_LEFT
@ EV_TRUCK_STEER_LEFT
steer left
Definition: InputEngine.h:357
RoR::EV_COMMON_QUICKSAVE_09
@ EV_COMMON_QUICKSAVE_09
Definition: InputEngine.h:380
RoR::EV_COMMON_PRESSURE_LESS
@ EV_COMMON_PRESSURE_LESS
decrease tire pressure (note: only very few trucks support this)
Definition: InputEngine.h:245
Script2Game::KC_LSHIFT
enum Script2Game::inputEvents KC_LSHIFT
RoR::EV_CAMERA_ZOOM_OUT
@ EV_CAMERA_ZOOM_OUT
zoom camera out
Definition: InputEngine.h:127
Script2Game::KC_F4
enum Script2Game::inputEvents KC_F4
RoR::EV_COMMANDS_38
@ EV_COMMANDS_38
Command 38.
Definition: InputEngine.h:176
TOSTRING
#define TOSTRING(x)
Definition: Application.h:56
Script2Game::KC_NUMPAD0
enum Script2Game::inputEvents KC_NUMPAD0
RoR::EV_BOAT_THROTTLE_UP
@ EV_BOAT_THROTTLE_UP
increase throttle
Definition: InputEngine.h:109
RoR::InputEngine::getCurrentPovValue
int getCurrentPovValue(int &joystickNumber, int &pov, int &povdir)
Definition: InputEngine.cpp:1646
RoR::EV_CAMERA_FREE_MODE
@ EV_CAMERA_FREE_MODE
Definition: InputEngine.h:116
RoR::InputEngine::getEventDefaultConfig
Ogre::String getEventDefaultConfig(int eventID)
Definition: InputEngine.cpp:810
RoR::EV_MODE_LAST
@ EV_MODE_LAST
Definition: InputEngine.h:404
RoR::InputEngine::getMouseNormalizedScreenPos
Ogre::Vector2 getMouseNormalizedScreenPos()
Returns XY position in range from 0 (top/left) to 1 (bottom/right)
Definition: InputEngine.cpp:1664
RoR::EV_CAMERA_ZOOM_IN_FAST
@ EV_CAMERA_ZOOM_IN_FAST
zoom camera in faster
Definition: InputEngine.h:126
RoR::EV_COMMANDS_31
@ EV_COMMANDS_31
Command 31.
Definition: InputEngine.h:169
RoR::EV_TRUCK_TRAILER_PARKING_BRAKE
@ EV_TRUCK_TRAILER_PARKING_BRAKE
toggle trailer parking brake
Definition: InputEngine.h:328
RoR::InputEngine::getCurrentJoyButton
int getCurrentJoyButton(int &joystickNumber, int &button)
Definition: InputEngine.cpp:1629
Script2Game::KC_9
enum Script2Game::inputEvents KC_9
RoR::EV_TRUCK_SHIFT_GEAR18
@ EV_TRUCK_SHIFT_GEAR18
shift directly into this gear
Definition: InputEngine.h:349
RoR::EV_COMMANDS_15
@ EV_COMMANDS_15
Command 15.
Definition: InputEngine.h:153
RoR::EV_AIRPLANE_AIRBRAKES_LESS
@ EV_AIRPLANE_AIRBRAKES_LESS
Definition: InputEngine.h:78
RoR::EV_COMMON_CYCLE_TRUCK_LIGHTS
@ EV_COMMON_CYCLE_TRUCK_LIGHTS
cycle truck front light mode (off -> running light -> low beams -> off).
Definition: InputEngine.h:274
RoR::InputEngine::windowResized
void windowResized(Ogre::RenderWindow *rw)
Definition: InputEngine.cpp:638
RoR::InputEvent::description
Ogre::UTFString description
Definition: InputEngine.h:412
Script2Game::KC_F11
enum Script2Game::inputEvents KC_F11
RoR::InputEngine::Capture
void Capture()
Definition: InputEngine.cpp:624
RoR::EV_COMMANDS_24
@ EV_COMMANDS_24
Command 24.
Definition: InputEngine.h:162
Script2Game::KC_F7
enum Script2Game::inputEvents KC_F7
RoR::event_trigger_t::configDeviceID
int configDeviceID
For which device (which config file) was this binding defined?
Definition: InputEngine.h:419
RoR::EV_BOAT_REVERSE
@ EV_BOAT_REVERSE
no thrust
Definition: InputEngine.h:102
RoR::InputEngine::getKeyNameForKeyCode
std::string getKeyNameForKeyCode(OIS::KeyCode keycode)
Definition: InputEngine.cpp:608
RoR::EV_COMMON_QUICKLOAD_06
@ EV_COMMON_QUICKLOAD_06
Definition: InputEngine.h:388
RoR::EV_COMMANDS_74
@ EV_COMMANDS_74
Command 74.
Definition: InputEngine.h:212
RoR::EV_COMMANDS_64
@ EV_COMMANDS_64
Command 64.
Definition: InputEngine.h:202
RoR::EV_COMMANDS_23
@ EV_COMMANDS_23
Command 23.
Definition: InputEngine.h:161
RoR::InputEngine::InputEngine
InputEngine()
Definition: InputEngine.cpp:416
Script2Game::KC_SEMICOLON
enum Script2Game::inputEvents KC_SEMICOLON
RoR::EV_CAMERA_ROTATE_LEFT
@ EV_CAMERA_ROTATE_LEFT
rotate camera left
Definition: InputEngine.h:121
RoR::EV_TRUCK_STARTER
@ EV_TRUCK_STARTER
hold to start the engine
Definition: InputEngine.h:356
RoR::EV_COMMANDS_51
@ EV_COMMANDS_51
Command 51.
Definition: InputEngine.h:189
RoR::EV_TRUCK_LIGHTTOGGLE01
@ EV_TRUCK_LIGHTTOGGLE01
toggle custom light 1
Definition: InputEngine.h:316
Script2Game::KC_NUMPAD6
enum Script2Game::inputEvents KC_NUMPAD6
RoR::EV_ROAD_EDITOR_POINT_SET_POS
@ EV_ROAD_EDITOR_POINT_SET_POS
Definition: InputEngine.h:397
RoR::EV_TRUCK_LEFT_MIRROR_LEFT
@ EV_TRUCK_LEFT_MIRROR_LEFT
Definition: InputEngine.h:314
RoR::InputEngine::composeEventCommandString
std::string composeEventCommandString(event_trigger_t const &trig)
Definition: InputEngine.cpp:822
Script2Game::KC_NUMPAD5
enum Script2Game::inputEvents KC_NUMPAD5
RoR::InputEngine::isKeyDownValueBounce
bool isKeyDownValueBounce(OIS::KeyCode mod, float time=0.2f)
Definition: InputEngine.cpp:1139
Script2Game::KC_TAB
enum Script2Game::inputEvents KC_TAB
RoR::EV_COMMON_RESPAWN_LAST_TRUCK
@ EV_COMMON_RESPAWN_LAST_TRUCK
respawn last truck
Definition: InputEngine.h:233
Script2Game::KC_PERIOD
enum Script2Game::inputEvents KC_PERIOD
RoR::InputEngine::ProcessMouseEvent
void ProcessMouseEvent(const OIS::MouseEvent &arg)
Definition: InputEngine.cpp:690
RoR::EV_COMMANDS_82
@ EV_COMMANDS_82
Command 82.
Definition: InputEngine.h:220
RoR::EV_COMMON_QUICKLOAD_02
@ EV_COMMON_QUICKLOAD_02
Definition: InputEngine.h:384
RoR::event_trigger_t::joystickAxisRegion
int joystickAxisRegion
Definition: InputEngine.h:435
Script2Game::KC_F6
enum Script2Game::inputEvents KC_F6
RoR::InputEngine::mJoy
OIS::JoyStick * mJoy[MAX_JOYSTICKS]
Definition: InputEngine.h:575
RoR::EV_CHARACTER_SIDESTEP_RIGHT
@ EV_CHARACTER_SIDESTEP_RIGHT
sidestep to the right
Definition: InputEngine.h:138
RoR::EV_COMMON_NETCHATDISPLAY
@ EV_COMMON_NETCHATDISPLAY
Definition: InputEngine.h:241
RoR::EV_COMMON_QUICKLOAD_07
@ EV_COMMON_QUICKLOAD_07
Definition: InputEngine.h:389
RoR::EV_COMMON_REPLAY_BACKWARD
@ EV_COMMON_REPLAY_BACKWARD
Definition: InputEngine.h:252
RoR::EV_ROAD_EDITOR_POINT_GOTO
@ EV_ROAD_EDITOR_POINT_GOTO
Definition: InputEngine.h:398
RoR::EV_COMMON_QUICKLOAD_05
@ EV_COMMON_QUICKLOAD_05
Definition: InputEngine.h:387
strnlen
#define strnlen(str, len)
Definition: InputEngine.cpp:397
RoR::InputEngine::ProcessKeyRelease
void ProcessKeyRelease(const OIS::KeyEvent &arg)
Definition: InputEngine.cpp:684
Script2Game::KC_END
enum Script2Game::inputEvents KC_END
RoR::EV_CAMERA_ROTATE_DOWN
@ EV_CAMERA_ROTATE_DOWN
rotate camera down
Definition: InputEngine.h:120
RoR::InputEngine::updateEvent
void updateEvent(int eventID, const event_trigger_t &t)
Definition: InputEngine.cpp:1228
RoR::EV_AIRPLANE_TOGGLE_ENGINES
@ EV_AIRPLANE_TOGGLE_ENGINES
switch all engines on / off
Definition: InputEngine.h:100
RoR::EV_COMMON_TOGGLE_DASHBOARD
@ EV_COMMON_TOGGLE_DASHBOARD
display or hide the dashboard overlay
Definition: InputEngine.h:239
RoR::InputEngine::m_loaded_configs
std::string m_loaded_configs[MAX_JOYSTICKS]
Definition: InputEngine.h:590
RoR::InputEvent::name
Ogre::String name
Definition: InputEngine.h:409
RoR::event_trigger_t::joystickSliderReverse
int joystickSliderReverse
Definition: InputEngine.h:446
Script2Game::KC_F1
enum Script2Game::inputEvents KC_F1
RoR::EV_COMMON_QUICKSAVE_02
@ EV_COMMON_QUICKSAVE_02
Definition: InputEngine.h:373
RoR::event_trigger_t::joystickAxisDeadzone
float joystickAxisDeadzone
Definition: InputEngine.h:433
RoR::EV_SKY_INCREASE_TIME
@ EV_SKY_INCREASE_TIME
increase day-time
Definition: InputEngine.h:112
RoR::EV_COMMANDS_21
@ EV_COMMANDS_21
Command 21.
Definition: InputEngine.h:159
RoR::event_trigger_t::tmp_eventname
char tmp_eventname[128]
Definition: InputEngine.h:452
RoR::EV_COMMANDS_30
@ EV_COMMANDS_30
Command 30.
Definition: InputEngine.h:168
RoR::EV_BOAT_STEER_LEFT
@ EV_BOAT_STEER_LEFT
steer left a step
Definition: InputEngine.h:103
RoR::EV_TRUCK_LIGHTTOGGLE02
@ EV_TRUCK_LIGHTTOGGLE02
toggle custom light 2
Definition: InputEngine.h:317
RoR::EV_TRUCK_TOGGLE_TCASE_4WD_MODE
@ EV_TRUCK_TOGGLE_TCASE_4WD_MODE
toggle the transfer case 4wd mode
Definition: InputEngine.h:366
RoR::EV_COMMON_QUICKLOAD
@ EV_COMMON_QUICKLOAD
quickload scene from the disk
Definition: InputEngine.h:247
RoR::InputEngine::uniqueCounter
int uniqueCounter
Definition: InputEngine.h:578
RoR::EV_TRUCK_TOGGLE_VIDEOCAMERA
@ EV_TRUCK_TOGGLE_VIDEOCAMERA
toggle videocamera update
Definition: InputEngine.h:368
RoR::EV_COMMANDS_07
@ EV_COMMANDS_07
Command 7.
Definition: InputEngine.h:145
RoR::EV_COMMANDS_56
@ EV_COMMANDS_56
Command 56.
Definition: InputEngine.h:194
Script2Game::KC_SPACE
enum Script2Game::inputEvents KC_SPACE
MAX_JOYSTICK_POVS
#define MAX_JOYSTICK_POVS
Definition: InputEngine.h:41
RoR::EV_COMMON_REPLAY_FAST_FORWARD
@ EV_COMMON_REPLAY_FAST_FORWARD
Definition: InputEngine.h:254
RoR::EV_COMMON_SEND_CHAT
@ EV_COMMON_SEND_CHAT
send the chat text
Definition: InputEngine.h:264
Script2Game::KC_DOWN
enum Script2Game::inputEvents KC_DOWN
RoR::InputEngine::eventIDToName
static Ogre::String eventIDToName(int eventID)
Definition: InputEngine.cpp:2013
Script2Game::KC_8
enum Script2Game::inputEvents KC_8
Script2Game::KC_ADD
enum Script2Game::inputEvents KC_ADD
RoR::EV_COMMANDS_75
@ EV_COMMANDS_75
Command 75.
Definition: InputEngine.h:213
RoR::EV_COMMANDS_68
@ EV_COMMANDS_68
Command 68.
Definition: InputEngine.h:206
RoR::InputEngine::isEventDefined
bool isEventDefined(int eventID)
Definition: InputEngine.cpp:865
RoR::InputEngine::getEventBoolValue
bool getEventBoolValue(int eventID)
Definition: InputEngine.cpp:714
RoR::InputEngine::mForceFeedback
OIS::ForceFeedback * mForceFeedback
Definition: InputEngine.h:577
RoR::event_trigger_t::shift
bool shift
Definition: InputEngine.h:424
RoR::EV_CHARACTER_RUN
@ EV_CHARACTER_RUN
let the character run
Definition: InputEngine.h:136
RoR::EV_MENU_SELECT
@ EV_MENU_SELECT
select focussed item and close menu
Definition: InputEngine.h:289
Script2Game::KC_F12
enum Script2Game::inputEvents KC_F12
RoR::App::GetConsole
Console * GetConsole()
Definition: Application.cpp:270
RoR::EV_COMMON_LOCK
@ EV_COMMON_LOCK
connect hook node to a node in close proximity
Definition: InputEngine.h:240
RoR::EV_COMMANDS_57
@ EV_COMMANDS_57
Command 57.
Definition: InputEngine.h:195
RoR::InputEngine::getJoyComponentCount
int getJoyComponentCount(OIS::ComponentType type, int joystickNumber)
Definition: InputEngine.cpp:1680
RoR::EV_COMMON_TRUCK_REMOVE
@ EV_COMMON_TRUCK_REMOVE
Definition: InputEngine.h:280
RoR::EV_COMMON_QUICKSAVE_08
@ EV_COMMON_QUICKSAVE_08
Definition: InputEngine.h:379
RoR::EV_TRUCK_TOGGLE_INTER_WHEEL_DIFF
@ EV_TRUCK_TOGGLE_INTER_WHEEL_DIFF
toggle the inter wheel differential mode
Definition: InputEngine.h:364
RoR::InputEngine::setEventSimulatedValue
void setEventSimulatedValue(events eventID, float value)
Definition: InputEngine.cpp:704
RoR::ET_JoystickAxisRel
@ ET_JoystickAxisRel
Definition: InputEngine.h:60
RoR::InputEngine::event_states_supressed
std::map< int, bool > event_states_supressed
Definition: InputEngine.h:589
Script2Game::KC_F2
enum Script2Game::inputEvents KC_F2
RoR::EV_COMMANDS_46
@ EV_COMMANDS_46
Command 46.
Definition: InputEngine.h:184
Script2Game::KC_RBRACKET
enum Script2Game::inputEvents KC_RBRACKET
RoR::event_trigger_t::group
char group[128]
Definition: InputEngine.h:451
RoR::EV_BOAT_CENTER_RUDDER
@ EV_BOAT_CENTER_RUDDER
center the rudder
Definition: InputEngine.h:101
RoR::EV_COMMANDS_76
@ EV_COMMANDS_76
Command 76.
Definition: InputEngine.h:214
RoR::EV_COMMON_TOGGLE_MAT_DEBUG
@ EV_COMMON_TOGGLE_MAT_DEBUG
debug purpose - dont use (currently not used)
Definition: InputEngine.h:269
Script2Game::KC_5
enum Script2Game::inputEvents KC_5
RoR::InputEngine::resolveEventName
static int resolveEventName(Ogre::String eventName)
Definition: InputEngine.cpp:2000
RoR::EV_AIRPLANE_AIRBRAKES_MORE
@ EV_AIRPLANE_AIRBRAKES_MORE
Definition: InputEngine.h:79
RoR::EV_TRUCK_SHIFT_HIGHRANGE
@ EV_TRUCK_SHIFT_HIGHRANGE
select high range (13-18) for H-shaft
Definition: InputEngine.h:351
RoR::EV_AIRPLANE_FLAPS_FULL
@ EV_AIRPLANE_FLAPS_FULL
full flaps in an aircraft.
Definition: InputEngine.h:84
RoR::EV_CHARACTER_FORWARD
@ EV_CHARACTER_FORWARD
step forward with the character
Definition: InputEngine.h:130
RoR::EV_TRUCK_HORN
@ EV_TRUCK_HORN
truck horn
Definition: InputEngine.h:313
RoR::InputEngine::ProcessJoystickEvent
void ProcessJoystickEvent(const OIS::JoyStickEvent &arg)
Definition: InputEngine.cpp:670
RoR::EV_SURVEY_MAP_ZOOM_OUT
@ EV_SURVEY_MAP_ZOOM_OUT
decrease survey map scale
Definition: InputEngine.h:295
RoR::EV_COMMON_FOV_MORE
@ EV_COMMON_FOV_MORE
increases the current FOV value
Definition: InputEngine.h:235
Script2Game::KC_3
enum Script2Game::inputEvents KC_3
RoR::InputEngine::addEventDefault
void addEventDefault(int eventID, int deviceID=-1)
Adds a new trigger with builtin value for this event.
Definition: InputEngine.cpp:1218
RoR::ET_JoystickAxisAbs
@ ET_JoystickAxisAbs
Definition: InputEngine.h:59
RoR::EV_GRASS_LESS
@ EV_GRASS_LESS
EXPERIMENTAL: remove some grass.
Definition: InputEngine.h:281
RoR::EV_CAMERA_LOOKBACK
@ EV_CAMERA_LOOKBACK
look back (toggles between normal and lookback)
Definition: InputEngine.h:118
RoR::EV_CAMERA_FREE_MODE_FIX
@ EV_CAMERA_FREE_MODE_FIX
Definition: InputEngine.h:117
RoR::EV_COMMANDS_55
@ EV_COMMANDS_55
Command 55.
Definition: InputEngine.h:193
RoR::EV_BOAT_THROTTLE_AXIS
@ EV_BOAT_THROTTLE_AXIS
throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)
Definition: InputEngine.h:107
RoR::event_trigger_t::keyCode
int keyCode
Definition: InputEngine.h:421
RoR::EV_COMMON_SECURE_LOAD
@ EV_COMMON_SECURE_LOAD
tie a load to the truck
Definition: InputEngine.h:263
RoR::EV_COMMANDS_84
@ EV_COMMANDS_84
Command 84.
Definition: InputEngine.h:222
RoR::eventtypes
eventtypes
Definition: InputEngine.h:50
RoR::EV_COMMON_TOGGLE_REPLAY_MODE
@ EV_COMMON_TOGGLE_REPLAY_MODE
toggle replay mode
Definition: InputEngine.h:270
RoR::EV_COMMON_TOGGLE_TERRAIN_EDITOR
@ EV_COMMON_TOGGLE_TERRAIN_EDITOR
toggle terrain editor
Definition: InputEngine.h:267
Script2Game::KC_F9
enum Script2Game::inputEvents KC_F9
RoR::EV_COMMON_TOGGLE_TRUCK_LOW_BEAMS
@ EV_COMMON_TOGGLE_TRUCK_LOW_BEAMS
toggle truck low beams (on/off); also toggles running lights.
Definition: InputEngine.h:275
Script2Game::KC_NUMLOCK
enum Script2Game::inputEvents KC_NUMLOCK
Script2Game::KC_APOSTROPHE
enum Script2Game::inputEvents KC_APOSTROPHE
RoR::InputEngine::DEFAULT_MAPFILE
static const std::string DEFAULT_MAPFILE
= "input.map";
Definition: InputEngine.h:463
RoR::EV_COMMON_REPLAY_FAST_BACKWARD
@ EV_COMMON_REPLAY_FAST_BACKWARD
Definition: InputEngine.h:253
RoR::EV_TRUCK_SHIFT_GEAR02
@ EV_TRUCK_SHIFT_GEAR02
shift directly into this gear
Definition: InputEngine.h:333
RoR::EV_COMMANDS_19
@ EV_COMMANDS_19
Command 19.
Definition: InputEngine.h:157
Script2Game::KC_BACKSLASH
enum Script2Game::inputEvents KC_BACKSLASH
MAX_JOYSTICKS
#define MAX_JOYSTICKS
Definition: InputEngine.h:40
RoR::EV_SURVEY_MAP_TOGGLE_ICONS
@ EV_SURVEY_MAP_TOGGLE_ICONS
toggle map icons
Definition: InputEngine.h:291
RoR::InputEngine::getCurrentJoyState
OIS::JoyStickState * getCurrentJoyState(int joystickNumber)
Definition: InputEngine.cpp:1694
Script2Game::KC_LWIN
enum Script2Game::inputEvents KC_LWIN
_LC
#define _LC(ctx, str)
Definition: Language.h:42
RoR::InputEngine::getEventGroup
std::string getEventGroup(Ogre::String eventName)
Definition: InputEngine.cpp:1752
RoR::InputEvent
Definition: InputEngine.h:407
RoR::EV_TRUCK_SWITCH_SHIFT_MODES
@ EV_TRUCK_SWITCH_SHIFT_MODES
toggle between transmission modes
Definition: InputEngine.h:359
RoR::event_trigger_t::configline
char configline[256]
Mixed use: keyboard=key, joyButton=buttonNum, POV=direction, joyAxes=options.
Definition: InputEngine.h:450
RoR::EV_TRUCK_LIGHTTOGGLE08
@ EV_TRUCK_LIGHTTOGGLE08
toggle custom light 8
Definition: InputEngine.h:323
RoR::EV_COMMON_QUICKSAVE_04
@ EV_COMMON_QUICKSAVE_04
Definition: InputEngine.h:375
RoR::EV_COMMANDS_47
@ EV_COMMANDS_47
Command 47.
Definition: InputEngine.h:185
eventInfo
InputEvent eventInfo[]
Definition: InputEngine.cpp:37
RoR::ET_JoystickButton
@ ET_JoystickButton
Definition: InputEngine.h:58
RoR::ET_JoystickSliderY
@ ET_JoystickSliderY
Definition: InputEngine.h:63
RoR::EV_COMMANDS_77
@ EV_COMMANDS_77
Command 77.
Definition: InputEngine.h:215
RoR::InputEngine::eventIDToDescription
static Ogre::String eventIDToDescription(int eventID)
Definition: InputEngine.cpp:2025
RoR::EV_COMMANDS_35
@ EV_COMMANDS_35
Command 35.
Definition: InputEngine.h:173
RoR::EV_COMMANDS_01
@ EV_COMMANDS_01
Command 1.
Definition: InputEngine.h:139
Script2Game::KC_NUMPAD8
enum Script2Game::inputEvents KC_NUMPAD8
RoR::EV_TRUCK_LIGHTTOGGLE03
@ EV_TRUCK_LIGHTTOGGLE03
toggle custom light 3
Definition: InputEngine.h:318
RoR::EV_COMMANDS_63
@ EV_COMMANDS_63
Command 63.
Definition: InputEngine.h:201
RoR::App::io_input_grab_mode
CVar * io_input_grab_mode
Definition: Application.cpp:197
Script2Game::KC_RWIN
enum Script2Game::inputEvents KC_RWIN
RoR::InputEngine::allit
std::map< std::string, OIS::KeyCode >::iterator allit
Definition: InputEngine.h:598
RoR::EV_TRUCK_TOGGLE_TCASE_GEAR_RATIO
@ EV_TRUCK_TOGGLE_TCASE_GEAR_RATIO
toggle the transfer case gear ratio
Definition: InputEngine.h:367
RoR::EV_COMMANDS_71
@ EV_COMMANDS_71
Command 71.
Definition: InputEngine.h:209
RoR::EV_CAMERA_RESET
@ EV_CAMERA_RESET
reset the camera position
Definition: InputEngine.h:119
RoR::EV_TRUCK_ACCELERATE
@ EV_TRUCK_ACCELERATE
accelerate the truck
Definition: InputEngine.h:297
RoR::InputEngine::getTriggerCommand
Ogre::String getTriggerCommand(event_trigger_t const &evt)
Definition: InputEngine.cpp:794
RoR::InputEngine::event_values_simulated
std::map< int, float > event_values_simulated
Definition: InputEngine.h:587
RoR::EV_TRUCK_MANUAL_CLUTCH
@ EV_TRUCK_MANUAL_CLUTCH
manual clutch (for manual transmission)
Definition: InputEngine.h:326
Script2Game::KC_RSHIFT
enum Script2Game::inputEvents KC_RSHIFT
RoR::EV_COMMANDS_22
@ EV_COMMANDS_22
Command 22.
Definition: InputEngine.h:160
RoR::EV_AIRPLANE_FLAPS_NONE
@ EV_AIRPLANE_FLAPS_NONE
no flaps.
Definition: InputEngine.h:87
RoR::InputEngine::mKeyboard
OIS::Keyboard * mKeyboard
Definition: InputEngine.h:574
RoR::EV_COMMANDS_81
@ EV_COMMANDS_81
Command 81.
Definition: InputEngine.h:219
RoR::EV_TRUCK_LIGHTTOGGLE09
@ EV_TRUCK_LIGHTTOGGLE09
toggle custom light 9
Definition: InputEngine.h:324
RoR::EV_COMMON_NETCHATMODE
@ EV_COMMON_NETCHATMODE
Definition: InputEngine.h:242
RoR::event_trigger_t::joystickSliderRegion
int joystickSliderRegion
Definition: InputEngine.h:447
RoR::EV_TRUCK_SHIFT_GEAR03
@ EV_TRUCK_SHIFT_GEAR03
shift directly into this gear
Definition: InputEngine.h:334
RoR::EV_CAMERA_CHANGE
@ EV_CAMERA_CHANGE
change camera mode
Definition: InputEngine.h:114
RoR::EV_SKY_DECREASE_TIME
@ EV_SKY_DECREASE_TIME
decrease day-time
Definition: InputEngine.h:110
RoR::EV_AIRPLANE_STEER_RIGHT
@ EV_AIRPLANE_STEER_RIGHT
steer right
Definition: InputEngine.h:93
RoR::EV_AIRPLANE_FLAPS_LESS
@ EV_AIRPLANE_FLAPS_LESS
one step less flaps.
Definition: InputEngine.h:85
Script2Game::KC_F5
enum Script2Game::inputEvents KC_F5
Script2Game::KC_7
enum Script2Game::inputEvents KC_7
RoR::EV_COMMANDS_10
@ EV_COMMANDS_10
Command 10.
Definition: InputEngine.h:148
RoR::event_trigger_t::joystickAxisUseDigital
bool joystickAxisUseDigital
Definition: InputEngine.h:438
RoR::EV_GRASS_NONE
@ EV_GRASS_NONE
EXPERIMENTAL: remove grass completely.
Definition: InputEngine.h:284
RoR::InputSourceType
InputSourceType
Definition: InputEngine.h:67
RoR::EV_AIRPLANE_THROTTLE_FULL
@ EV_AIRPLANE_THROTTLE_FULL
full thrust
Definition: InputEngine.h:97
RoR::InputEngine::getLoadedConfigFile
std::string const & getLoadedConfigFile(int deviceID=-1)
Returns filename from loadConfigFile() call.
Definition: InputEngine.cpp:1905
RoR::InputSourceType::IST_DIGITAL
@ IST_DIGITAL
_L
#define _L
Definition: ErrorUtils.cpp:34
RoR::EV_TRUCK_STEER_RIGHT
@ EV_TRUCK_STEER_RIGHT
steer right
Definition: InputEngine.h:358
RoR::EV_COMMON_TOGGLE_TRUCK_HIGH_BEAMS
@ EV_COMMON_TOGGLE_TRUCK_HIGH_BEAMS
toggle truck high beams (on/off); doesn't need low beams, doesn't use 't' lights.
Definition: InputEngine.h:276
RoR::EV_COMMANDS_70
@ EV_COMMANDS_70
Command 70.
Definition: InputEngine.h:208
RoR::EV_COMMANDS_20
@ EV_COMMANDS_20
Command 20.
Definition: InputEngine.h:158
RoR::InputEngine::clearEvents
void clearEvents(int eventID)
Clears all bindings for given event.
Definition: InputEngine.cpp:1257
RoR::EV_COMMON_QUICKSAVE_10
@ EV_COMMON_QUICKSAVE_10
Definition: InputEngine.h:381
RoR::EV_TRUCK_TOGGLE_PHYSICS
@ EV_TRUCK_TOGGLE_PHYSICS
toggle physics simulation
Definition: InputEngine.h:365
RoR::EV_TRUCK_TOGGLE_INTER_AXLE_DIFF
@ EV_TRUCK_TOGGLE_INTER_AXLE_DIFF
toggle the inter axle differential mode
Definition: InputEngine.h:363
RoR::EV_AIRPLANE_THROTTLE_NO
@ EV_AIRPLANE_THROTTLE_NO
no thrust
Definition: InputEngine.h:98
RoR::EV_COMMANDS_12
@ EV_COMMANDS_12
Command 12.
Definition: InputEngine.h:150
RoR::EV_COMMON_TRUCK_DESCRIPTION
@ EV_COMMON_TRUCK_DESCRIPTION
toggle truck description
Definition: InputEngine.h:279
RoR::EV_COMMANDS_62
@ EV_COMMANDS_62
Command 62.
Definition: InputEngine.h:200
RoR::EV_COMMANDS_28
@ EV_COMMANDS_28
Command 28.
Definition: InputEngine.h:166
Script2Game::KC_UP
enum Script2Game::inputEvents KC_UP
RoR::App::GetInputEngine
InputEngine * GetInputEngine()
Definition: Application.cpp:271
RoR::EV_TRUCK_TOGGLE_IMPORTCOMMANDS
@ EV_TRUCK_TOGGLE_IMPORTCOMMANDS
toggle importcommands
Definition: InputEngine.h:362
RoR::EV_SKY_DECREASE_TIME_FAST
@ EV_SKY_DECREASE_TIME_FAST
decrease day-time a lot faster
Definition: InputEngine.h:111
RoR::IoInputGrabMode::ALL
@ ALL
RoR::EV_ROAD_EDITOR_POINT_DELETE
@ EV_ROAD_EDITOR_POINT_DELETE
Definition: InputEngine.h:399
RoR::EV_TRUCK_SHIFT_GEAR07
@ EV_TRUCK_SHIFT_GEAR07
shift directly into this gear
Definition: InputEngine.h:338
RoR::event_trigger_t::joystickSliderNumber
int joystickSliderNumber
Definition: InputEngine.h:445
RoR::EV_TRUCK_SHIFT_GEAR16
@ EV_TRUCK_SHIFT_GEAR16
shift directly into this gear
Definition: InputEngine.h:347
RoR::EV_COMMON_ENTER_CHATMODE
@ EV_COMMON_ENTER_CHATMODE
enter the chat mode
Definition: InputEngine.h:228
RoR::EV_COMMANDS_52
@ EV_COMMANDS_52
Command 52.
Definition: InputEngine.h:190
RoR::EV_BOAT_STEER_RIGHT
@ EV_BOAT_STEER_RIGHT
steer right a step
Definition: InputEngine.h:105
RoR::EV_GRASS_SAVE
@ EV_GRASS_SAVE
EXPERIMENTAL: save changes to the grass density image.
Definition: InputEngine.h:285
RoR::EV_COMMANDS_33
@ EV_COMMANDS_33
Command 33.
Definition: InputEngine.h:171
RoR::EV_COMMANDS_13
@ EV_COMMANDS_13
Command 13.
Definition: InputEngine.h:151
RoR::ET_NONE
@ ET_NONE
Definition: InputEngine.h:52
RoR::EV_CHARACTER_SIDESTEP_LEFT
@ EV_CHARACTER_SIDESTEP_LEFT
sidestep to the left
Definition: InputEngine.h:137
RoR::EV_COMMON_TOGGLE_CUSTOM_PARTICLES
@ EV_COMMON_TOGGLE_CUSTOM_PARTICLES
toggle particle cannon
Definition: InputEngine.h:268
RoR::EV_AIRPLANE_AIRBRAKES_FULL
@ EV_AIRPLANE_AIRBRAKES_FULL
Definition: InputEngine.h:77
RoR::EV_COMMANDS_42
@ EV_COMMANDS_42
Command 42.
Definition: InputEngine.h:180
RoR::EV_TRUCK_BLINK_LEFT
@ EV_TRUCK_BLINK_LEFT
toggle left direction indicator (blinker)
Definition: InputEngine.h:303
RoR::EV_COMMANDS_49
@ EV_COMMANDS_49
Command 49.
Definition: InputEngine.h:187
RoR::EV_AIRPLANE_PARKING_BRAKE
@ EV_AIRPLANE_PARKING_BRAKE
airplane parking brake.
Definition: InputEngine.h:88
RoR::EV_TRUCK_LIGHTTOGGLE07
@ EV_TRUCK_LIGHTTOGGLE07
toggle custom light 7
Definition: InputEngine.h:322
RoR::EV_TRUCK_AUTOSHIFT_UP
@ EV_TRUCK_AUTOSHIFT_UP
shift automatic transmission one gear up
Definition: InputEngine.h:302
RoR::InputEngine::getModifierKeyName
Ogre::String getModifierKeyName(OIS::KeyCode key)
Definition: InputEngine.cpp:2198
InputEngine.h
Handles controller inputs from player. Defines input events and binding mechanism,...
RoR::EV_AIRPLANE_ELEVATOR_UP
@ EV_AIRPLANE_ELEVATOR_UP
pull the elevator up in an aircraft.
Definition: InputEngine.h:83
RoR::InputEngine::SetMouseListener
void SetMouseListener(OIS::MouseListener *obj)
Definition: InputEngine.cpp:655
Ogre
Definition: ExtinguishableFireAffector.cpp:35
RoR::EV_COMMON_OUTPUT_POSITION
@ EV_COMMON_OUTPUT_POSITION
write current position to log (you can open the logfile and reuse the position)
Definition: InputEngine.h:243
Script2Game::KC_MULTIPLY
enum Script2Game::inputEvents KC_MULTIPLY
RoR::InputEngine::isEventAnalog
bool isEventAnalog(int eventID)
Definition: InputEngine.cpp:888
RoR::event_trigger_t::joystickButtonNumber
int joystickButtonNumber
Definition: InputEngine.h:430
RoR::EV_COMMANDS_43
@ EV_COMMANDS_43
Command 43.
Definition: InputEngine.h:181
RoR::EV_AIRPLANE_BRAKE
@ EV_AIRPLANE_BRAKE
normal brake for an aircraft.
Definition: InputEngine.h:81
RoR::EV_AIRPLANE_THROTTLE_UP
@ EV_AIRPLANE_THROTTLE_UP
increase the airplane thrust
Definition: InputEngine.h:99
Script2Game::KC_F3
enum Script2Game::inputEvents KC_F3
RoR::InputEngine::isKeyDownEffective
bool isKeyDownEffective(OIS::KeyCode mod)
Reads RoR internal buffer.
Definition: InputEngine.cpp:1134
RoR::InputEngine::mInputManager
OIS::InputManager * mInputManager
Definition: InputEngine.h:566
RoR::InputEngine::eraseEvent
void eraseEvent(int eventID, const event_trigger_t *t)
Definition: InputEngine.cpp:1241
RoR::EV_COMMANDS_27
@ EV_COMMANDS_27
Command 27.
Definition: InputEngine.h:165
RoR::EV_COMMANDS_29
@ EV_COMMANDS_29
Command 29.
Definition: InputEngine.h:167
RoR::EV_ROAD_EDITOR_POINT_INSERT
@ EV_ROAD_EDITOR_POINT_INSERT
Definition: InputEngine.h:396
RoR::Console::CONSOLE_MSGTYPE_INFO
@ CONSOLE_MSGTYPE_INFO
Generic message.
Definition: Console.h:60
RoR::EV_TRUCK_AUTOSHIFT_DOWN
@ EV_TRUCK_AUTOSHIFT_DOWN
shift automatic transmission one gear down
Definition: InputEngine.h:301
RoR::InputEngine::mMouse
OIS::Mouse * mMouse
Definition: InputEngine.h:573
Script2Game::KC_LEFT
enum Script2Game::inputEvents KC_LEFT
RoR::EV_COMMANDS_16
@ EV_COMMANDS_16
Command 16.
Definition: InputEngine.h:154
RoR::EV_COMMON_QUICKLOAD_04
@ EV_COMMON_QUICKLOAD_04
Definition: InputEngine.h:386
RoR::EV_COMMON_TRUCK_INFO
@ EV_COMMON_TRUCK_INFO
toggle truck HUD
Definition: InputEngine.h:278
RoR::InputEngine::destroy
void destroy()
Definition: InputEngine.cpp:439
RoR::EV_CAMERA_UP
@ EV_CAMERA_UP
Definition: InputEngine.h:124
RoR::EV_COMMON_QUIT_GAME
@ EV_COMMON_QUIT_GAME
exit the game
Definition: InputEngine.h:249
RoR::EV_TRUCKEDIT_RELOAD
@ EV_TRUCKEDIT_RELOAD
Definition: InputEngine.h:394
RoR::EV_TRUCK_CRUISE_CONTROL_DECL
@ EV_TRUCK_CRUISE_CONTROL_DECL
decrease target speed / rpm
Definition: InputEngine.h:311
RoR::event_trigger_t::joystickPovNumber
int joystickPovNumber
Definition: InputEngine.h:441
RoR::EV_TRUCK_SHIFT_GEAR11
@ EV_TRUCK_SHIFT_GEAR11
shift directly into this gear
Definition: InputEngine.h:342
RoR::EV_AIRPLANE_STEER_LEFT
@ EV_AIRPLANE_STEER_LEFT
steer left
Definition: InputEngine.h:92
RoR::EV_COMMON_TOGGLE_STATS
@ EV_COMMON_TOGGLE_STATS
toggle Ogre statistics (FPS etc.)
Definition: InputEngine.h:272
RoR::events
events
Definition: InputEngine.h:74
RoR::EV_COMMON_RESET_SIMULATION_PACE
@ EV_COMMON_RESET_SIMULATION_PACE
reset the simulation speed
Definition: InputEngine.h:225
RoR::EV_COMMON_CYCLE_DEBUG_VIEWS
@ EV_COMMON_CYCLE_DEBUG_VIEWS
cycle debug view mode
Definition: InputEngine.h:266
RoR::InputEngine::composeEventConfigString
std::string composeEventConfigString(event_trigger_t const &trig)
Definition: InputEngine.cpp:844
RoR::EV_COMMANDS_11
@ EV_COMMANDS_11
Command 11.
Definition: InputEngine.h:149
RoR::InputEngine::keyState
std::map< int, bool > keyState
Definition: InputEngine.h:581
RoR::EV_AIRPLANE_THROTTLE_AXIS
@ EV_AIRPLANE_THROTTLE_AXIS
throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)
Definition: InputEngine.h:95
RoR::EV_COMMON_DECELERATE_SIMULATION
@ EV_COMMON_DECELERATE_SIMULATION
decelerate the simulation speed
Definition: InputEngine.h:224
RoR::EV_COMMON_QUICKSAVE_03
@ EV_COMMON_QUICKSAVE_03
Definition: InputEngine.h:374
RoR::EV_CHARACTER_LEFT
@ EV_CHARACTER_LEFT
rotate character left
Definition: InputEngine.h:132
RoR::EV_COMMANDS_44
@ EV_COMMANDS_44
Command 44.
Definition: InputEngine.h:182
RoR::EV_TRUCK_CRUISE_CONTROL_ACCL
@ EV_TRUCK_CRUISE_CONTROL_ACCL
increase target speed / rpm
Definition: InputEngine.h:310
Script2Game::KC_NUMPAD3
enum Script2Game::inputEvents KC_NUMPAD3
RoR::InputEngine::allkeys
std::map< std::string, OIS::KeyCode > allkeys
Definition: InputEngine.h:597
Script2Game::KC_2
enum Script2Game::inputEvents KC_2
RoR::EV_AIRPLANE_ELEVATOR_DOWN
@ EV_AIRPLANE_ELEVATOR_DOWN
pull the elevator down in an aircraft.
Definition: InputEngine.h:82
RoR::EV_COMMANDS_34
@ EV_COMMANDS_34
Command 34.
Definition: InputEngine.h:172
RoR::EV_COMMANDS_73
@ EV_COMMANDS_73
Command 73.
Definition: InputEngine.h:211
RoR::EV_COMMON_FOV_RESET
@ EV_COMMON_FOV_RESET
reset the FOV value
Definition: InputEngine.h:236
RoR::EV_CAMERA_DOWN
@ EV_CAMERA_DOWN
Definition: InputEngine.h:115
RoR::EV_TRUCK_SHIFT_NEUTRAL
@ EV_TRUCK_SHIFT_NEUTRAL
shift to neutral gear in manual transmission mode
Definition: InputEngine.h:354
Script2Game::KC_NUMPAD2
enum Script2Game::inputEvents KC_NUMPAD2
RoR
Definition: AppContext.h:36
RoR::EV_COMMANDS_36
@ EV_COMMANDS_36
Command 36.
Definition: InputEngine.h:174
RoR::EV_COMMON_QUICKSAVE_05
@ EV_COMMON_QUICKSAVE_05
Definition: InputEngine.h:376
RoR::EV_CAMERA_ROTATE_RIGHT
@ EV_CAMERA_ROTATE_RIGHT
rotate camera right
Definition: InputEngine.h:122
RoR::EV_COMMON_REMOVE_CURRENT_TRUCK
@ EV_COMMON_REMOVE_CURRENT_TRUCK
remove current truck
Definition: InputEngine.h:232
RoR::EV_COMMANDS_25
@ EV_COMMANDS_25
Command 25.
Definition: InputEngine.h:163
RoR::InputEngine::ProcessKeyPress
void ProcessKeyPress(const OIS::KeyEvent &arg)
Definition: InputEngine.cpp:679
Script2Game::KC_0
enum Script2Game::inputEvents KC_0
RoR::EV_BOAT_STEER_RIGHT_AXIS
@ EV_BOAT_STEER_RIGHT_AXIS
steer right (analog value!)
Definition: InputEngine.h:106
RoR::event_trigger_t::joystickNumber
int joystickNumber
Definition: InputEngine.h:429
RoR::EV_SKY_INCREASE_TIME_FAST
@ EV_SKY_INCREASE_TIME_FAST
increase day-time a lot faster
Definition: InputEngine.h:113
RoR::InputEngine::mouseState
OIS::MouseState mouseState
Definition: InputEngine.h:583
RoR::EV_COMMON_RESCUE_TRUCK
@ EV_COMMON_RESCUE_TRUCK
teleport to rescue truck
Definition: InputEngine.h:256
OIS
Definition: ForceFeedback.h:25
RoR::EV_COMMANDS_78
@ EV_COMMANDS_78
Command 78.
Definition: InputEngine.h:216
RoR::EV_TRUCK_PARKING_BRAKE
@ EV_TRUCK_PARKING_BRAKE
toggle parking brake
Definition: InputEngine.h:327
RoR::EV_TRUCK_BRAKE
@ EV_TRUCK_BRAKE
brake
Definition: InputEngine.h:306
RoR::EV_COMMANDS_65
@ EV_COMMANDS_65
Command 65.
Definition: InputEngine.h:203
RoR::EV_COMMON_ROPELOCK
@ EV_COMMON_ROPELOCK
connect hook node to a node in close proximity
Definition: InputEngine.h:259
RoR::EV_COMMON_QUICKLOAD_08
@ EV_COMMON_QUICKLOAD_08
Definition: InputEngine.h:390
RoR::EV_COMMANDS_04
@ EV_COMMANDS_04
Command 4.
Definition: InputEngine.h:142
RoR::EV_TRUCK_SHIFT_GEAR05
@ EV_TRUCK_SHIFT_GEAR05
shift directly into this gear
Definition: InputEngine.h:336
RoR::EV_COMMON_TOGGLE_DEBUG_VIEW
@ EV_COMMON_TOGGLE_DEBUG_VIEW
toggle debug view mode
Definition: InputEngine.h:265
RoR::InputEngine::getEventBounceTime
float getEventBounceTime(int eventID)
Definition: InputEngine.cpp:732
RoR::EV_TRUCK_ANTILOCK_BRAKE
@ EV_TRUCK_ANTILOCK_BRAKE
toggle antilockbrake system
Definition: InputEngine.h:300
RoR::EV_TRUCK_SHIFT_GEAR_REVERSE
@ EV_TRUCK_SHIFT_GEAR_REVERSE
shift directly into this gear
Definition: InputEngine.h:350
RoR::EV_CHARACTER_JUMP
@ EV_CHARACTER_JUMP
let the character jump
Definition: InputEngine.h:131
RoR::InputEngine::deadZone
float deadZone(float axis, float dz)
Definition: InputEngine.cpp:748
RoR::InputEngine::SetKeyboardListener
void SetKeyboardListener(OIS::KeyListener *obj)
Definition: InputEngine.cpp:649
RoR::EV_TRUCK_SHIFT_LOWRANGE
@ EV_TRUCK_SHIFT_LOWRANGE
select low range (1-6) for H-shaft
Definition: InputEngine.h:352
RoR::EV_COMMON_QUICKLOAD_03
@ EV_COMMON_QUICKLOAD_03
Definition: InputEngine.h:385
RoR::EV_TRUCK_SHIFT_MIDRANGE
@ EV_TRUCK_SHIFT_MIDRANGE
select middle range (7-12) for H-shaft
Definition: InputEngine.h:353
RoR::EV_COMMANDS_05
@ EV_COMMANDS_05
Command 5.
Definition: InputEngine.h:143
Script2Game::KC_COMMA
enum Script2Game::inputEvents KC_COMMA
RoR::EV_TRUCK_LEFT_MIRROR_RIGHT
@ EV_TRUCK_LEFT_MIRROR_RIGHT
Definition: InputEngine.h:315
RoR::EV_COMMON_QUICKSAVE_01
@ EV_COMMON_QUICKSAVE_01
Definition: InputEngine.h:372
RoR::EV_COMMANDS_80
@ EV_COMMANDS_80
Command 80.
Definition: InputEngine.h:218