RigsofRods
2023.09
Soft-body Physics Simulation
Go to the documentation of this file.
35 const char *
mOISDeviceType [6] = {
"Unknown Device" ,
"Keyboard" ,
"Mouse" ,
"JoyStick" ,
"Tablet" ,
"Other Device" };
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)" )},
47 {
"COMMON_SCREENSHOT_BIG" ,
EV_COMMON_SCREENSHOT_BIG ,
"Keyboard EXPL+CTRL+SYSRQ" ,
_LC (
"InputEvent" ,
"take a big screenshot (3 times the screen size)" )},
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" )},
55 {
"COMMON_FULLSCREEN_TOGGLE" ,
EV_COMMON_FULLSCREEN_TOGGLE ,
"Keyboard EXPL+ALT+RETURN" ,
_LC (
"InputEvent" ,
"toggle between windowed and fullscreen mode" )},
62 {
"COMMON_TRUCK_REMOVE" ,
EV_COMMON_TRUCK_REMOVE ,
"Keyboard EXPL+CTRL+SHIFT+DELETE" ,
_LC (
"InputEvent" ,
"delete current truck" )},
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" )},
73 {
"COMMON_RESET_TRUCK" ,
EV_COMMON_RESET_TRUCK ,
"Keyboard I" ,
_LC (
"InputEvent" ,
"reset truck to original starting position" )},
92 {
"COMMON_HIDE_GUI" ,
EV_COMMON_HIDE_GUI ,
"Keyboard EXPL+U" ,
_LC (
"InputEvent" ,
"hide all GUI elements" )},
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.)" )},
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" )},
135 {
"TRUCK_HORN" ,
EV_TRUCK_HORN ,
"Keyboard H" ,
_LC (
"InputEvent" ,
"truck horn" )},
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" )},
155 {
"TRUCK_STARTER" ,
EV_TRUCK_STARTER ,
"Keyboard S" ,
_LC (
"InputEvent" ,
"hold to start the engine" )},
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)" )},
177 {
"TRUCK_SHIFT_DOWN" ,
EV_TRUCK_SHIFT_DOWN ,
"Keyboard Z" ,
_LC (
"InputEvent" ,
"shift one gear down in manual transmission mode" )},
178 {
"TRUCK_SHIFT_NEUTRAL" ,
EV_TRUCK_SHIFT_NEUTRAL ,
"Keyboard D" ,
_LC (
"InputEvent" ,
"shift to neutral gear in manual transmission mode" )},
179 {
"TRUCK_SHIFT_UP" ,
EV_TRUCK_SHIFT_UP ,
"Keyboard A" ,
_LC (
"InputEvent" ,
"shift one gear up in manual transmission mode" )},
207 {
"AIRPLANE_BRAKE" ,
EV_AIRPLANE_BRAKE ,
"Keyboard B" ,
_LC (
"InputEvent" ,
"normal brake for an aircraft" )},
220 {
"AIRPLANE_THROTTLE_AXIS" ,
EV_AIRPLANE_THROTTLE_AXIS ,
"None" ,
_LC (
"InputEvent" ,
"throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)" )},
239 {
"BOAT_THROTTLE_AXIS" ,
EV_BOAT_THROTTLE_AXIS ,
"None" ,
_LC (
"InputEvent" ,
"throttle axis. Only use this if you have fitting hardware :) (i.e. a Slider)" )},
244 {
"COMMANDS_01" ,
EV_COMMANDS_01 ,
"Keyboard EXPL+F1" ,
_LC (
"InputEvent" ,
"Command 1" )},
245 {
"COMMANDS_02" ,
EV_COMMANDS_02 ,
"Keyboard EXPL+F2" ,
_LC (
"InputEvent" ,
"Command 2" )},
246 {
"COMMANDS_03" ,
EV_COMMANDS_03 ,
"Keyboard EXPL+F3" ,
_LC (
"InputEvent" ,
"Command 3" )},
247 {
"COMMANDS_04" ,
EV_COMMANDS_04 ,
"Keyboard EXPL+F4" ,
_LC (
"InputEvent" ,
"Command 4" )},
248 {
"COMMANDS_05" ,
EV_COMMANDS_05 ,
"Keyboard EXPL+F5" ,
_LC (
"InputEvent" ,
"Command 5" )},
249 {
"COMMANDS_06" ,
EV_COMMANDS_06 ,
"Keyboard EXPL+F6" ,
_LC (
"InputEvent" ,
"Command 6" )},
250 {
"COMMANDS_07" ,
EV_COMMANDS_07 ,
"Keyboard EXPL+F7" ,
_LC (
"InputEvent" ,
"Command 7" )},
251 {
"COMMANDS_08" ,
EV_COMMANDS_08 ,
"Keyboard EXPL+F8" ,
_LC (
"InputEvent" ,
"Command 8" )},
252 {
"COMMANDS_09" ,
EV_COMMANDS_09 ,
"Keyboard EXPL+F9" ,
_LC (
"InputEvent" ,
"Command 9" )},
253 {
"COMMANDS_10" ,
EV_COMMANDS_10 ,
"Keyboard EXPL+F10" ,
_LC (
"InputEvent" ,
"Command 10" )},
254 {
"COMMANDS_11" ,
EV_COMMANDS_11 ,
"Keyboard EXPL+F11" ,
_LC (
"InputEvent" ,
"Command 11" )},
255 {
"COMMANDS_12" ,
EV_COMMANDS_12 ,
"Keyboard EXPL+F12" ,
_LC (
"InputEvent" ,
"Command 12" )},
256 {
"COMMANDS_13" ,
EV_COMMANDS_13 ,
"Keyboard EXPL+CTRL+F1" ,
_LC (
"InputEvent" ,
"Command 13" )},
257 {
"COMMANDS_14" ,
EV_COMMANDS_14 ,
"Keyboard EXPL+CTRL+F2" ,
_LC (
"InputEvent" ,
"Command 14" )},
258 {
"COMMANDS_15" ,
EV_COMMANDS_15 ,
"Keyboard EXPL+CTRL+F3" ,
_LC (
"InputEvent" ,
"Command 15" )},
259 {
"COMMANDS_16" ,
EV_COMMANDS_16 ,
"Keyboard EXPL+CTRL+F4" ,
_LC (
"InputEvent" ,
"Command 16" )},
260 {
"COMMANDS_17" ,
EV_COMMANDS_17 ,
"Keyboard EXPL+CTRL+F5" ,
_LC (
"InputEvent" ,
"Command 17" )},
261 {
"COMMANDS_18" ,
EV_COMMANDS_18 ,
"Keyboard EXPL+CTRL+F6" ,
_LC (
"InputEvent" ,
"Command 18" )},
262 {
"COMMANDS_19" ,
EV_COMMANDS_19 ,
"Keyboard EXPL+CTRL+F7" ,
_LC (
"InputEvent" ,
"Command 19" )},
263 {
"COMMANDS_20" ,
EV_COMMANDS_20 ,
"Keyboard EXPL+CTRL+F8" ,
_LC (
"InputEvent" ,
"Command 20" )},
264 {
"COMMANDS_21" ,
EV_COMMANDS_21 ,
"Keyboard EXPL+CTRL+F9" ,
_LC (
"InputEvent" ,
"Command 21" )},
265 {
"COMMANDS_22" ,
EV_COMMANDS_22 ,
"Keyboard EXPL+CTRL+F10" ,
_LC (
"InputEvent" ,
"Command 22" )},
266 {
"COMMANDS_23" ,
EV_COMMANDS_23 ,
"Keyboard EXPL+CTRL+F11" ,
_LC (
"InputEvent" ,
"Command 23" )},
267 {
"COMMANDS_24" ,
EV_COMMANDS_24 ,
"Keyboard EXPL+CTRL+F12" ,
_LC (
"InputEvent" ,
"Command 24" )},
268 {
"COMMANDS_25" ,
EV_COMMANDS_25 ,
"Keyboard EXPL+SHIFT+F1" ,
_LC (
"InputEvent" ,
"Command 25" )},
269 {
"COMMANDS_26" ,
EV_COMMANDS_26 ,
"Keyboard EXPL+SHIFT+F2" ,
_LC (
"InputEvent" ,
"Command 26" )},
270 {
"COMMANDS_27" ,
EV_COMMANDS_27 ,
"Keyboard EXPL+SHIFT+F3" ,
_LC (
"InputEvent" ,
"Command 27" )},
271 {
"COMMANDS_28" ,
EV_COMMANDS_28 ,
"Keyboard EXPL+SHIFT+F4" ,
_LC (
"InputEvent" ,
"Command 28" )},
272 {
"COMMANDS_29" ,
EV_COMMANDS_29 ,
"Keyboard EXPL+SHIFT+F5" ,
_LC (
"InputEvent" ,
"Command 29" )},
273 {
"COMMANDS_30" ,
EV_COMMANDS_30 ,
"Keyboard EXPL+SHIFT+F6" ,
_LC (
"InputEvent" ,
"Command 30" )},
274 {
"COMMANDS_31" ,
EV_COMMANDS_31 ,
"Keyboard EXPL+SHIFT+F7" ,
_LC (
"InputEvent" ,
"Command 31" )},
275 {
"COMMANDS_32" ,
EV_COMMANDS_32 ,
"Keyboard EXPL+SHIFT+F8" ,
_LC (
"InputEvent" ,
"Command 32" )},
276 {
"COMMANDS_33" ,
EV_COMMANDS_33 ,
"Keyboard EXPL+SHIFT+F9" ,
_LC (
"InputEvent" ,
"Command 33" )},
277 {
"COMMANDS_34" ,
EV_COMMANDS_34 ,
"Keyboard EXPL+SHIFT+F10" ,
_LC (
"InputEvent" ,
"Command 34" )},
278 {
"COMMANDS_35" ,
EV_COMMANDS_35 ,
"Keyboard EXPL+SHIFT+F11" ,
_LC (
"InputEvent" ,
"Command 35" )},
279 {
"COMMANDS_36" ,
EV_COMMANDS_36 ,
"Keyboard EXPL+SHIFT+F12" ,
_LC (
"InputEvent" ,
"Command 36" )},
280 {
"COMMANDS_37" ,
EV_COMMANDS_37 ,
"Keyboard EXPL+ALT+F1" ,
_LC (
"InputEvent" ,
"Command 37" )},
281 {
"COMMANDS_38" ,
EV_COMMANDS_38 ,
"Keyboard EXPL+ALT+F2" ,
_LC (
"InputEvent" ,
"Command 38" )},
282 {
"COMMANDS_39" ,
EV_COMMANDS_39 ,
"Keyboard EXPL+ALT+F3" ,
_LC (
"InputEvent" ,
"Command 39" )},
283 {
"COMMANDS_40" ,
EV_COMMANDS_40 ,
"Keyboard EXPL+ALT+F4" ,
_LC (
"InputEvent" ,
"Command 40" )},
284 {
"COMMANDS_41" ,
EV_COMMANDS_41 ,
"Keyboard EXPL+ALT+F5" ,
_LC (
"InputEvent" ,
"Command 41" )},
285 {
"COMMANDS_42" ,
EV_COMMANDS_42 ,
"Keyboard EXPL+ALT+F6" ,
_LC (
"InputEvent" ,
"Command 42" )},
286 {
"COMMANDS_43" ,
EV_COMMANDS_43 ,
"Keyboard EXPL+ALT+F7" ,
_LC (
"InputEvent" ,
"Command 43" )},
287 {
"COMMANDS_44" ,
EV_COMMANDS_44 ,
"Keyboard EXPL+ALT+F8" ,
_LC (
"InputEvent" ,
"Command 44" )},
288 {
"COMMANDS_45" ,
EV_COMMANDS_45 ,
"Keyboard EXPL+ALT+F9" ,
_LC (
"InputEvent" ,
"Command 45" )},
289 {
"COMMANDS_46" ,
EV_COMMANDS_46 ,
"Keyboard EXPL+ALT+F10" ,
_LC (
"InputEvent" ,
"Command 46" )},
290 {
"COMMANDS_47" ,
EV_COMMANDS_47 ,
"Keyboard EXPL+ALT+F11" ,
_LC (
"InputEvent" ,
"Command 47" )},
291 {
"COMMANDS_48" ,
EV_COMMANDS_48 ,
"Keyboard EXPL+ALT+F12" ,
_LC (
"InputEvent" ,
"Command 48" )},
292 {
"COMMANDS_49" ,
EV_COMMANDS_49 ,
"Keyboard EXPL+CTRL+SHIFT+F1" ,
_LC (
"InputEvent" ,
"Command 49" )},
293 {
"COMMANDS_50" ,
EV_COMMANDS_50 ,
"Keyboard EXPL+CTRL+SHIFT+F2" ,
_LC (
"InputEvent" ,
"Command 50" )},
294 {
"COMMANDS_51" ,
EV_COMMANDS_51 ,
"Keyboard EXPL+CTRL+SHIFT+F3" ,
_LC (
"InputEvent" ,
"Command 51" )},
295 {
"COMMANDS_52" ,
EV_COMMANDS_52 ,
"Keyboard EXPL+CTRL+SHIFT+F4" ,
_LC (
"InputEvent" ,
"Command 52" )},
296 {
"COMMANDS_53" ,
EV_COMMANDS_53 ,
"Keyboard EXPL+CTRL+SHIFT+F5" ,
_LC (
"InputEvent" ,
"Command 53" )},
297 {
"COMMANDS_54" ,
EV_COMMANDS_54 ,
"Keyboard EXPL+CTRL+SHIFT+F6" ,
_LC (
"InputEvent" ,
"Command 54" )},
298 {
"COMMANDS_55" ,
EV_COMMANDS_55 ,
"Keyboard EXPL+CTRL+SHIFT+F7" ,
_LC (
"InputEvent" ,
"Command 55" )},
299 {
"COMMANDS_56" ,
EV_COMMANDS_56 ,
"Keyboard EXPL+CTRL+SHIFT+F8" ,
_LC (
"InputEvent" ,
"Command 56" )},
300 {
"COMMANDS_57" ,
EV_COMMANDS_57 ,
"Keyboard EXPL+CTRL+SHIFT+F9" ,
_LC (
"InputEvent" ,
"Command 57" )},
301 {
"COMMANDS_58" ,
EV_COMMANDS_58 ,
"Keyboard EXPL+CTRL+SHIFT+F10" ,
_LC (
"InputEvent" ,
"Command 58" )},
302 {
"COMMANDS_59" ,
EV_COMMANDS_59 ,
"Keyboard EXPL+CTRL+SHIFT+F11" ,
_LC (
"InputEvent" ,
"Command 59" )},
303 {
"COMMANDS_60" ,
EV_COMMANDS_60 ,
"Keyboard EXPL+CTRL+SHIFT+F12" ,
_LC (
"InputEvent" ,
"Command 60" )},
304 {
"COMMANDS_61" ,
EV_COMMANDS_61 ,
"Keyboard EXPL+CTRL+ALT+F1" ,
_LC (
"InputEvent" ,
"Command 61" )},
305 {
"COMMANDS_62" ,
EV_COMMANDS_62 ,
"Keyboard EXPL+CTRL+ALT+F2" ,
_LC (
"InputEvent" ,
"Command 62" )},
306 {
"COMMANDS_63" ,
EV_COMMANDS_63 ,
"Keyboard EXPL+CTRL+ALT+F3" ,
_LC (
"InputEvent" ,
"Command 63" )},
307 {
"COMMANDS_64" ,
EV_COMMANDS_64 ,
"Keyboard EXPL+CTRL+ALT+F4" ,
_LC (
"InputEvent" ,
"Command 64" )},
308 {
"COMMANDS_65" ,
EV_COMMANDS_65 ,
"Keyboard EXPL+CTRL+ALT+F5" ,
_LC (
"InputEvent" ,
"Command 65" )},
309 {
"COMMANDS_66" ,
EV_COMMANDS_66 ,
"Keyboard EXPL+CTRL+ALT+F6" ,
_LC (
"InputEvent" ,
"Command 66" )},
310 {
"COMMANDS_67" ,
EV_COMMANDS_67 ,
"Keyboard EXPL+CTRL+ALT+F7" ,
_LC (
"InputEvent" ,
"Command 67" )},
311 {
"COMMANDS_68" ,
EV_COMMANDS_68 ,
"Keyboard EXPL+CTRL+ALT+F8" ,
_LC (
"InputEvent" ,
"Command 68" )},
312 {
"COMMANDS_69" ,
EV_COMMANDS_69 ,
"Keyboard EXPL+CTRL+ALT+F9" ,
_LC (
"InputEvent" ,
"Command 69" )},
313 {
"COMMANDS_70" ,
EV_COMMANDS_70 ,
"Keyboard EXPL+CTRL+ALT+F10" ,
_LC (
"InputEvent" ,
"Command 70" )},
314 {
"COMMANDS_71" ,
EV_COMMANDS_71 ,
"Keyboard EXPL+CTRL+ALT+F11" ,
_LC (
"InputEvent" ,
"Command 71" )},
315 {
"COMMANDS_72" ,
EV_COMMANDS_72 ,
"Keyboard EXPL+CTRL+ALT+F12" ,
_LC (
"InputEvent" ,
"Command 72" )},
316 {
"COMMANDS_73" ,
EV_COMMANDS_73 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F1" ,
_LC (
"InputEvent" ,
"Command 73" )},
317 {
"COMMANDS_74" ,
EV_COMMANDS_74 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F2" ,
_LC (
"InputEvent" ,
"Command 74" )},
318 {
"COMMANDS_75" ,
EV_COMMANDS_75 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F3" ,
_LC (
"InputEvent" ,
"Command 75" )},
319 {
"COMMANDS_76" ,
EV_COMMANDS_76 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F4" ,
_LC (
"InputEvent" ,
"Command 76" )},
320 {
"COMMANDS_77" ,
EV_COMMANDS_77 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F5" ,
_LC (
"InputEvent" ,
"Command 77" )},
321 {
"COMMANDS_78" ,
EV_COMMANDS_78 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F6" ,
_LC (
"InputEvent" ,
"Command 78" )},
322 {
"COMMANDS_79" ,
EV_COMMANDS_79 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F7" ,
_LC (
"InputEvent" ,
"Command 79" )},
323 {
"COMMANDS_80" ,
EV_COMMANDS_80 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F8" ,
_LC (
"InputEvent" ,
"Command 80" )},
324 {
"COMMANDS_81" ,
EV_COMMANDS_81 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F9" ,
_LC (
"InputEvent" ,
"Command 81" )},
325 {
"COMMANDS_82" ,
EV_COMMANDS_82 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F10" ,
_LC (
"InputEvent" ,
"Command 82" )},
326 {
"COMMANDS_83" ,
EV_COMMANDS_83 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F11" ,
_LC (
"InputEvent" ,
"Command 83" )},
327 {
"COMMANDS_84" ,
EV_COMMANDS_84 ,
"Keyboard EXPL+CTRL+SHIFT+ALT+F12" ,
_LC (
"InputEvent" ,
"Command 84" )},
331 {
"CHARACTER_FORWARD" ,
EV_CHARACTER_FORWARD ,
"Keyboard W" ,
_LC (
"InputEvent" ,
"step forward with the character" )},
332 {
"CHARACTER_JUMP" ,
EV_CHARACTER_JUMP ,
"Keyboard SPACE" ,
_LC (
"InputEvent" ,
"let the character jump" )},
333 {
"CHARACTER_LEFT" ,
EV_CHARACTER_LEFT ,
"Keyboard LEFT" ,
_LC (
"InputEvent" ,
"rotate character left" )},
334 {
"CHARACTER_RIGHT" ,
EV_CHARACTER_RIGHT ,
"Keyboard RIGHT" ,
_LC (
"InputEvent" ,
"rotate character right" )},
335 {
"CHARACTER_RUN" ,
EV_CHARACTER_RUN ,
"Keyboard SHIFT+W" ,
_LC (
"InputEvent" ,
"let the character run" )},
342 {
"CAMERA_CHANGE" ,
EV_CAMERA_CHANGE ,
"Keyboard EXPL+C" ,
_LC (
"InputEvent" ,
"change camera mode" )},
343 {
"CAMERA_LOOKBACK" ,
EV_CAMERA_LOOKBACK ,
"Keyboard NUMPAD1" ,
_LC (
"InputEvent" ,
"look back (toggles between normal and lookback)" )},
344 {
"CAMERA_RESET" ,
EV_CAMERA_RESET ,
"Keyboard NUMPAD5" ,
_LC (
"InputEvent" ,
"reset the camera position" )},
349 {
"CAMERA_ZOOM_IN" ,
EV_CAMERA_ZOOM_IN ,
"Keyboard EXPL+NUMPAD9" ,
_LC (
"InputEvent" ,
"zoom camera in" )},
351 {
"CAMERA_ZOOM_OUT" ,
EV_CAMERA_ZOOM_OUT ,
"Keyboard EXPL+NUMPAD3" ,
_LC (
"InputEvent" ,
"zoom camera out" )},
354 {
"CAMERA_FREE_MODE" ,
EV_CAMERA_FREE_MODE ,
"Keyboard EXPL+SHIFT+C" ,
_LC (
"InputEvent" ,
"enable / disable free camera mode" )},
355 {
"CAMERA_UP" ,
EV_CAMERA_UP ,
"Keyboard Q" ,
_LC (
"InputEvent" ,
"move camera up" )},
356 {
"CAMERA_DOWN" ,
EV_CAMERA_DOWN ,
"Keyboard Z" ,
_LC (
"InputEvent" ,
"move camera down" )},
365 {
"GRASS_LESS" ,
EV_GRASS_LESS ,
"" ,
_LC (
"InputEvent" ,
"EXPERIMENTAL: remove some grass" )},
366 {
"GRASS_MORE" ,
EV_GRASS_MORE ,
"" ,
_LC (
"InputEvent" ,
"EXPERIMENTAL: add some grass" )},
367 {
"GRASS_MOST" ,
EV_GRASS_MOST ,
"" ,
_LC (
"InputEvent" ,
"EXPERIMENTAL: set maximum amount of grass" )},
368 {
"GRASS_NONE" ,
EV_GRASS_NONE ,
"" ,
_LC (
"InputEvent" ,
"EXPERIMENTAL: remove grass completely" )},
369 {
"GRASS_SAVE" ,
EV_GRASS_SAVE ,
"" ,
_LC (
"InputEvent" ,
"EXPERIMENTAL: save changes to the grass density image" )},
379 {
"MENU_DOWN" ,
EV_MENU_DOWN ,
"Keyboard DOWN" ,
_LC (
"InputEvent" ,
"select next element in current category" )},
380 {
"MENU_LEFT" ,
EV_MENU_LEFT ,
"Keyboard LEFT" ,
_LC (
"InputEvent" ,
"select previous category" )},
381 {
"MENU_RIGHT" ,
EV_MENU_RIGHT ,
"Keyboard RIGHT" ,
_LC (
"InputEvent" ,
"select next category" )},
382 {
"MENU_SELECT" ,
EV_MENU_SELECT ,
"Keyboard EXPL+RETURN" ,
_LC (
"InputEvent" ,
"select focussed item and close menu" )},
383 {
"MENU_UP" ,
EV_MENU_UP ,
"Keyboard UP" ,
_LC (
"InputEvent" ,
"select previous element in current category" )},
386 {
"TRUCKEDIT_RELOAD" ,
EV_TRUCKEDIT_RELOAD ,
"Keyboard EXPL+SHIFT+CTRL+R" ,
_LC (
"InputEvent" ,
"reload truck" )},
399 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
400 #define strnlen(str,len) strlen(str)
405 #define OIS_DYNAMIC_LIB
408 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
409 #include <X11/Xlib.h>
414 using namespace Ogre ;
430 LOG(
"*** Loading OIS ***" );
446 LOG(
"*** Terminating OIS ***" );
478 LOG(
"*** Initializing OIS ***" );
484 pl.insert(OIS::ParamList::value_type(
"WINDOW" ,
TOSTRING (hWnd)));
487 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
488 pl.insert(OIS::ParamList::value_type(
"x11_mouse_hide" ,
"true" ));
489 pl.insert(OIS::ParamList::value_type(
"XAutoRepeatOn" ,
"false" ));
490 pl.insert(OIS::ParamList::value_type(
"x11_mouse_grab" ,
"false" ));
491 pl.insert(OIS::ParamList::value_type(
"x11_keyboard_grab" ,
"false" ));
493 pl.insert(OIS::ParamList::value_type(
"w32_mouse" ,
"DISCL_FOREGROUND" ));
494 pl.insert(OIS::ParamList::value_type(
"w32_mouse" ,
"DISCL_NONEXCLUSIVE" ));
495 pl.insert(OIS::ParamList::value_type(
"w32_keyboard" ,
"DISCL_FOREGROUND" ));
496 pl.insert(OIS::ParamList::value_type(
"w32_keyboard" ,
"DISCL_NONEXCLUSIVE" ));
500 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
515 LOG(
"OIS Version: " +
TOSTRING (v>>16) + String(
"." ) +
TOSTRING ((v>>8) & 0x000000FF) + String(
"." ) +
TOSTRING (v & 0x000000FF));
523 OIS::DeviceList deviceList =
mInputManager ->listFreeDevices();
524 for (OIS::DeviceList::iterator i = deviceList.begin(); i != deviceList.end(); ++i)
525 LOG(
"* Device: " + String(
mOISDeviceType [i->first]) + String(
" Vendor: " ) + i->second);
533 mKeyboard ->setTextTranslation(OIS::Keyboard::Unicode);
535 catch (OIS::Exception& ex)
537 LOG(String(
"Exception raised on keyboard creation: " ) + String(ex.eText));
544 int numSticks = std::min(
mInputManager ->getNumberOfDevices(OISJoyStick), 10);
546 for (
int i = 0; i < numSticks; ++i)
553 mForceFeedback = (OIS::ForceFeedback*)
mJoy [i]->queryInterface(OIS::Interface::ForceFeedback);
555 LOG(
"Creating Joystick " +
TOSTRING (i + 1) +
" (" +
mJoy [i]->vendor() +
")" );
556 LOG(
"* Axes: " +
TOSTRING (
mJoy [i]->getNumberOfComponents(OIS_Axis)));
557 LOG(
"* Sliders: " +
TOSTRING (
mJoy [i]->getNumberOfComponents(OIS_Slider)));
558 LOG(
"* POV/HATs: " +
TOSTRING (
mJoy [i]->getNumberOfComponents(OIS_POV)));
559 LOG(
"* Buttons: " +
TOSTRING (
mJoy [i]->getNumberOfComponents(OIS_Button)));
560 LOG(
"* Vector3: " +
TOSTRING (
mJoy [i]->getNumberOfComponents(OIS_Vector3)));
563 catch (OIS::Exception& ex)
565 LOG(String(
"Exception raised on joystick creation: " ) + String(ex.eText));
572 catch (OIS::Exception& ex)
574 LOG(String(
"Exception raised on mouse creation: " ) + String(ex.eText));
589 OIS::MouseState& mutableMouseState =
const_cast< OIS::MouseState &
> (
mMouse ->getMouseState());
623 if (keycode == KC_LCONTROL || keycode == KC_RCONTROL)
625 if (keycode == KC_LMENU || keycode == KC_RMENU)
629 if (
allit ->second == keycode)
654 unsigned int width, height, depth;
656 rw->getMetrics(width, height, depth, left, top);
657 const OIS::MouseState& ms =
mMouse ->getMouseState();
665 mKeyboard ->setEventCallback(keyboard_listener);
671 mMouse ->setEventCallback(mouse_listener);
678 mJoy [i]->setEventCallback(obj);
685 int i = arg.device->getID();
714 if (_id == OIS::MB_Left)
738 for (std::map<int, bool>::iterator iter =
keyState .begin(); iter !=
keyState .end(); ++iter)
740 iter->second =
false ;
805 if (fabs(axisValue) < dz)
810 return (axisValue - dz) * (1.0f / (1.0f - dz));
815 return (axisValue * linearity);
821 return log10(1.0 / (1.1 - val)) / 1.0;
824 return -log10(1.0 / (1.1 + val)) / 1.0;
829 std::vector<event_trigger_t>& t_vec =
events [eventID];
830 if (t_vec.size() > 0)
851 std::vector<event_trigger_t>& t_vec =
events [eventID];
852 if (t_vec.size() > 0)
917 std::vector<event_trigger_t> t_vec =
events [eventID];
918 if (t_vec.size() > 0)
920 if (t_vec[0].eventtype !=
ET_NONE )
928 std::vector<event_trigger_t> t_vec =
events [eventID];
929 for (std::vector<event_trigger_t>::iterator i = t_vec.begin(); i != t_vec.end(); i++)
940 std::vector<event_trigger_t> t_vec =
events [eventID];
941 if (t_vec.size() > 0)
945 for (
unsigned int i = 0; i < t_vec.size(); i++)
968 if (simulatedValue != 0.f)
969 return simulatedValue;
974 float returnValue = 0;
975 std::vector<event_trigger_t> t_vec =
events [eventID];
977 for (std::vector<event_trigger_t>::iterator i = t_vec.begin(); i != t_vec.end(); i++)
1102 value = (value + 1) / 2;
1125 value = (1.0 + value) / 2.0;
1127 value = 1.0 - value;
1163 value = (value + 1) / 2;
1165 value = 1.0 - value;
1171 if (value > returnValue)
1172 returnValue = value;
1243 default :
return "unknown" ;
1250 events [eventID].push_back(t);
1262 events [eventID] = std::vector<event_trigger_t>();
1285 events [eventID] = std::vector<event_trigger_t>();
1288 events [eventID].push_back(t);
1296 for (
size_t i = 0; i < triggers.size(); i++)
1298 if (t == &triggers[i])
1300 triggers.erase(triggers.begin() + i);
1317 for (
auto & ev_pair:
events )
1319 if (ev_pair.second.size() > 0)
1321 auto itor = ev_pair.second.begin();
1322 while (itor != ev_pair.second.end())
1324 if (itor->configDeviceID == deviceID)
1325 itor = ev_pair.second.erase(itor);
1341 static String cur_comment =
"" ;
1343 char eventName[256] =
"" , evtype[256] =
"" ;
1344 const char delimiters[] =
"+" ;
1345 size_t linelen =
strnlen (line, 1024);
1349 float defaultDeadzone = 0.1f;
1350 float defaultLinearity = 1.0f;
1351 if (line[0] ==
';' || linelen < 5)
1353 cur_comment += line;;
1356 sscanf(line,
"%s %s" , eventName, evtype);
1360 if (!strncmp(evtype,
"Keyboard" , 8))
1362 else if (!strncmp(evtype,
"MouseButton" , 10))
1364 else if (!strncmp(evtype,
"MouseAxisX" , 9))
1366 else if (!strncmp(evtype,
"MouseAxisY" , 9))
1368 else if (!strncmp(evtype,
"MouseAxisZ" , 9))
1370 else if (!strncmp(evtype,
"JoystickButton" , 14))
1372 else if (!strncmp(evtype,
"JoystickAxis" , 12))
1375 else if (!strncmp(evtype,
"JoystickPov" , 11))
1377 else if (!strncmp(evtype,
"JoystickSlider" , 14))
1379 else if (!strncmp(evtype,
"JoystickSliderX" , 15))
1381 else if (!strncmp(evtype,
"JoystickSliderY" , 15))
1383 else if (!strncmp(evtype,
"None" , 4))
1396 char keycodes[256] = {};
1397 char keycodes_work[256] = {};
1399 OIS::KeyCode key = KC_UNASSIGNED;
1401 sscanf(line,
"%s %s %s" , eventName, evtype, keycodes);
1404 strncpy(keycodes_work, keycodes, 255);
1405 keycodes_work[255] =
'\0' ;
1406 char * token = strtok(keycodes_work, delimiters);
1408 while (token != NULL)
1410 if (strncmp(token,
"SHIFT" , 5) == 0)
1412 else if (strncmp(token,
"CTRL" , 4) == 0)
1414 else if (strncmp(token,
"ALT" , 3) == 0)
1416 else if (strncmp(token,
"EXPL" , 4) == 0)
1419 token = strtok(NULL, delimiters);
1426 LOG(
"unknown key: " +
string (keycodes));
1428 key = KC_UNASSIGNED;
1433 key =
allit ->second;
1438 LOG(
"Error while processing input config: Unknown Event: " +String(eventName));
1444 t_key.
shift = shift;
1454 strncpy(t_key.
comments , cur_comment.c_str(), 1024);
1462 char tmp2[256] = {};
1463 sscanf(line,
"%s %s %d %d %s" , eventName, evtype, &joyNo, &buttonNo, tmp2);
1472 if (!strcmp(tmp2,
"!NEW!" ))
1479 sprintf(tmp,
"%d" , buttonNo);
1484 strncpy(t_joy.
comments , cur_comment.c_str(), 1024);
1493 char options[256] = {};
1494 sscanf(line,
"%s %s %d %d %s" , eventName, evtype, &joyNo, &axisNo, options);
1500 bool reverse =
false ;
1501 bool linear =
false ;
1502 bool relative =
false ;
1503 bool usedigital =
false ;
1504 float deadzone = defaultDeadzone;
1505 float linearity = defaultLinearity;
1506 int jAxisRegion = 0;
1511 strcpy(tmp, options);
1513 char * token = strtok(tmp, delimiters);
1514 while (token != NULL)
1516 if (strncmp(token,
"HALF" , 4) == 0)
1518 else if (strncmp(token,
"REVERSE" , 7) == 0)
1520 else if (strncmp(token,
"LINEAR" , 6) == 0)
1522 else if (strncmp(token,
"UPPER" , 5) == 0)
1524 else if (strncmp(token,
"LOWER" , 5) == 0)
1526 else if (strncmp(token,
"RELATIVE" , 8) == 0)
1528 else if (strncmp(token,
"DIGITAL" , 7) == 0)
1530 else if (strncmp(token,
"DEADZONE" , 8) == 0 &&
strnlen (token, 250) > 9)
1532 char tmp2[256] = {};
1533 strcpy(tmp2, token + 9);
1534 deadzone = atof(tmp2);
1537 else if (strncmp(token,
"LINEARITY" , 9) == 0 &&
strnlen (token, 250) > 10)
1539 char tmp2[256] = {};
1540 strcpy(tmp2, token + 10);
1541 linearity = atof(tmp2);
1543 token = strtok(NULL, delimiters);
1563 strncpy(t_joy.
comments , cur_comment.c_str(), 1024);
1588 sscanf(line,
"%s %s %d %d %s" , eventName, evtype, &joyNo, &povNumber, dir);
1593 int direction = OIS::Pov::Centered;
1594 if (!strcmp(dir,
"North" ))
1595 direction = OIS::Pov::North;
1596 if (!strcmp(dir,
"South" ))
1597 direction = OIS::Pov::South;
1598 if (!strcmp(dir,
"East" ))
1599 direction = OIS::Pov::East;
1600 if (!strcmp(dir,
"West" ))
1601 direction = OIS::Pov::West;
1602 if (!strcmp(dir,
"NorthEast" ))
1603 direction = OIS::Pov::NorthEast;
1604 if (!strcmp(dir,
"SouthEast" ))
1605 direction = OIS::Pov::SouthEast;
1606 if (!strcmp(dir,
"NorthWest" ))
1607 direction = OIS::Pov::NorthWest;
1608 if (!strcmp(dir,
"SouthWest" ))
1609 direction = OIS::Pov::SouthWest;
1620 strncpy(t_pov.
comments , cur_comment.c_str(), 1024);
1630 int sliderNumber = 0;
1631 char options[256] = {};
1633 sscanf(line,
"%s %s %d %c %d %s" , eventName, evtype, &joyNo, &type, &sliderNumber, options);
1638 bool reverse =
false ;
1640 strncpy(tmp, options, 255);
1642 char * token = strtok(tmp, delimiters);
1643 while (token != NULL)
1645 if (strncmp(token,
"REVERSE" , 7) == 0)
1648 token = strtok(NULL, delimiters);
1654 if (type ==
'Y' || type ==
'y' )
1656 else if (type ==
'X' || type ==
'x' )
1668 strncpy(t_slider.
comments , cur_comment.c_str(), 1024);
1683 for (
int i = 0; i < (int)
joyState [j].mButtons.size(); i++)
1702 if (
joyState [j].mPOV[i].direction != Pov::Centered)
1706 povdir =
joyState [j].mPOV[i].direction;
1716 OIS::MouseState
const & mstate =
mMouse ->getMouseState();
1718 res.x =
static_cast< float > (mstate.X.abs) /
static_cast< float > (mstate.width);
1719 res.y =
static_cast< float > (mstate.Y.abs) /
static_cast< float > (mstate.height);
1734 return mJoy [joystickNumber]->getNumberOfComponents(type);
1741 return mJoy [joystickNumber]->vendor();
1753 std::map<int, bool>::iterator i;
1762 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)
1769 *combo = *combo +
"+" + keyName;
1778 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)
1784 *combo = *combo +
"+" + keyName;
1790 if (modCounter > 0 && keyCounter == 0)
1794 else if (keyCounter == 0 && modCounter == 0)
1796 *combo =
_L (
"(Please press a key)" );
1804 const char delimiters[] =
"_" ;
1806 strncpy(tmp, eventName.c_str(), 255);
1808 char * token = strtok(tmp, delimiters);
1809 while (token != NULL)
1811 return String(token);
1912 String deviceStr =
mJoy [deviceID]->vendor();
1915 String repl =
"\\/ #@?!$%^&*()+=-><.:'|\";" ;
1916 for (
unsigned int c = 0; c < repl.size(); c++)
1918 deviceStr = StringUtil::replaceAll(deviceStr, repl.substr(c, 1),
"_" );
1922 String osSpecificMapFile;
1923 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
1924 osSpecificMapFile = deviceStr +
".windows.map" ;
1925 #elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
1926 osSpecificMapFile = deviceStr +
".linux.map" ;
1928 if (osSpecificMapFile !=
"" &&
1929 ResourceGroupManager::getSingleton().resourceExists(
RGN_CONFIG , osSpecificMapFile))
1931 fileName = osSpecificMapFile;
1936 fileName = deviceStr +
".map" ;
1966 char line[1025] =
"" ;
1969 LOG(
" * Loading input mapping " + fileName);
1974 ds = ResourceGroupManager::getSingleton().openResource(fileName,
RGN_CONFIG );
1983 if (ds->tell() + size >= ds->size())
1984 size = ds->size() - ds->tell();
1985 if (ds->tell() >= ds->size())
1987 size_t readnum = ds->readLine(line, size);
1994 LOG(
" * Input map successfully loaded: " +
TOSTRING (newEvents) +
" entries" );
2000 const int COL1_WIDTH = 34;
2001 const int COL2_WIDTH = 19;
2006 Ogre::DataStreamPtr ds = Ogre::ResourceGroupManager::getSingleton().createResource(
2010 for (
auto & ev_pair:
events )
2032 std::string line =
fmt::format (
"{:<{}} {:<{}} {}\n" ,
2034 this->getEventTypeName(ev.
eventtype ), COL2_WIDTH,
2036 ds->write(line.c_str(), line.size());
2042 catch (Ogre::Exception& e)
2045 fmt::format (
"Failed to write '{}', {}" , fileName, e.getDescription()));
2059 LOG(
"unknown event (ignored): " + eventName);
2100 allkeys [
"ABNT_C1" ] = KC_ABNT_C1;
2101 allkeys [
"ABNT_C2" ] = KC_ABNT_C2;
2111 allkeys [
"CALCULATOR" ] = KC_CALCULATOR;
2112 allkeys [
"CAPITAL" ] = KC_CAPITAL;
2115 allkeys [
"CONVERT" ] = KC_CONVERT;
2117 allkeys [
"DECIMAL" ] = KC_DECIMAL;
2119 allkeys [
"DIVIDE" ] = KC_DIVIDE;
2153 allkeys [
"LCONTROL" ] = KC_LCONTROL;
2160 allkeys [
"MEDIASELECT" ] = KC_MEDIASELECT;
2161 allkeys [
"MEDIASTOP" ] = KC_MEDIASTOP;
2165 allkeys [
"MYCOMPUTER" ] = KC_MYCOMPUTER;
2167 allkeys [
"NEXTTRACK" ] = KC_NEXTTRACK;
2168 allkeys [
"NOCONVERT" ] = KC_NOCONVERT;
2180 allkeys [
"NUMPADCOMMA" ] = KC_NUMPADCOMMA;
2181 allkeys [
"NUMPADENTER" ] = KC_NUMPADENTER;
2182 allkeys [
"NUMPADEQUALS" ] = KC_NUMPADEQUALS;
2184 allkeys [
"OEM_102" ] = KC_OEM_102;
2190 allkeys [
"PLAYPAUSE" ] = KC_PLAYPAUSE;
2192 allkeys [
"PREVTRACK" ] = KC_PREVTRACK;
2196 allkeys [
"RCONTROL" ] = KC_RCONTROL;
2203 allkeys [
"SCROLL" ] = KC_SCROLL;
2214 allkeys [
"UNDERLINE" ] = KC_UNDERLINE;
2215 allkeys [
"UNLABELED" ] = KC_UNLABELED;
2218 allkeys [
"VOLUMEDOWN" ] = KC_VOLUMEDOWN;
2219 allkeys [
"VOLUMEUP" ] = KC_VOLUMEUP;
2222 allkeys [
"WEBBACK" ] = KC_WEBBACK;
2223 allkeys [
"WEBFAVORITES" ] = KC_WEBFAVORITES;
2224 allkeys [
"WEBFORWARD" ] = KC_WEBFORWARD;
2225 allkeys [
"WEBHOME" ] = KC_WEBHOME;
2226 allkeys [
"WEBREFRESH" ] = KC_WEBREFRESH;
2227 allkeys [
"WEBSEARCH" ] = KC_WEBSEARCH;
2228 allkeys [
"WEBSTOP" ] = KC_WEBSTOP;
2237 std::map<int, std::vector<event_trigger_t>>::iterator it =
events .find(eventID);
2241 if (it->second.empty())
2244 std::vector<event_trigger_t>::iterator it2 = it->second.begin();
2252 case OIS::KC_LMENU:
return _LC (
"ModifierKey" ,
"Left Alt" );
2254 case OIS::KC_LCONTROL:
return _LC (
"ModifierKey" ,
"Left Ctrl" );
2256 case OIS::KC_RMENU:
return _LC (
"ModifierKey" ,
"Right Alt" );
2258 case OIS::KC_RCONTROL:
return _LC (
"ModifierKey" ,
"Right Ctrl" );
#define ROR_ASSERT(_EXPR)
Ogre::RenderWindow * GetRenderWindow()
AppContext * GetAppContext()
Truck file format(technical spec)
enum eventtypes eventtype
float joystickAxisLinearity
System integration layer; inspired by OgreBites::ApplicationContext.
void putMessage(MessageArea area, MessageType type, std::string const &msg, std::string icon="")
#define BITMASK_SET_0(VAR, FLAGS)
int configDeviceID
For which device (which config file) was this binding defined?
#define BITMASK_SET_1(VAR, FLAGS)
int joystickSliderReverse
float joystickAxisDeadzone
char configline[256]
Mixed use: keyboard=key, joyButton=buttonNum, POV=direction, joyAxes=options.
CVar * io_input_grab_mode
bool joystickAxisUseDigital
InputEngine * GetInputEngine()
@ CONSOLE_MSGTYPE_INFO
Generic message.