Changeset 1323
- Timestamp:
- May 19, 2008, 10:50:09 AM (17 years ago)
- Location:
- code/branches/input
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/input/bin/keybindings.ini
r1293 r1323 1 1 [KeyBinder] 2 P_UNASSIGNED=activateConsole 3 R_UNASSIGNED= 4 H_UNASSIGNED= 5 P_ESCAPE="exit" 6 R_ESCAPE= 7 H_ESCAPE= 8 P_1= 9 R_1= 10 H_1= 11 P_2= 12 R_2= 13 H_2= 14 P_3= 15 R_3= 16 H_3= 17 P_4= 18 R_4= 19 H_4= 20 P_5= 21 R_5= 22 H_5= 23 P_6= 24 R_6= 25 H_6= 26 P_7="exec disco.txt" 27 R_7= 28 H_7= 29 P_8= 30 R_8= 31 H_8= 32 P_9="disco.txt" 33 R_9= 34 H_9= 35 P_0= 36 R_0= 37 H_0= 38 P_MINUS= 39 R_MINUS= 40 H_MINUS= 41 P_EQUALS=activateConsole 42 R_EQUALS= 43 H_EQUALS= 44 P_BACK= 45 R_BACK= 46 H_BACK= 47 P_TAB= 48 R_TAB= 49 H_TAB= 50 P_Q= 51 R_Q= 52 H_Q= 53 P_W= 54 R_W= 55 H_W= 56 P_E= 57 R_E= 58 H_E= 59 P_R= 60 R_R= 61 H_R= 62 P_T= 63 R_T= 64 H_T= 65 P_Y= 66 R_Y= 67 H_Y= 68 P_U= 69 R_U= 70 H_U= 71 P_I= 72 R_I= 73 H_I= 74 P_O= 75 R_O= 76 H_O= 77 P_P= 78 R_P= 79 H_P= 80 P_LBRACKET= 81 R_LBRACKET= 82 H_LBRACKET= 83 P_RBRACKET= 84 R_RBRACKET= 85 H_RBRACKET= 86 P_RETURN= 87 R_RETURN= 88 H_RETURN= 89 P_LCONTROL= 90 R_LCONTROL= 91 H_LCONTROL= 92 P_A= 93 R_A= 94 H_A= 95 P_S= 96 R_S= 97 H_S= 98 P_D= 99 R_D= 100 H_D= 101 P_F= 102 R_F= 103 H_F= 104 P_G= 105 R_G= 106 H_G= 107 P_H= 108 R_H= 109 H_H= 110 P_J= 111 R_J= 112 H_J= 113 P_K= 114 R_K= 115 H_K= 116 P_L= 117 R_L= 118 H_L= 119 P_SEMICOLON= 120 R_SEMICOLON= 121 H_SEMICOLON= 122 P_APOSTROPHE= 123 R_APOSTROPHE= 124 H_APOSTROPHE= 125 P_GRAVE=activateConsole 126 R_GRAVE= 127 H_GRAVE= 128 P_LSHIFT= 129 R_LSHIFT= 130 H_LSHIFT= 131 P_BACKSLASH= 132 R_BACKSLASH= 133 H_BACKSLASH= 134 P_Z= 135 R_Z= 136 H_Z= 137 P_X= 138 R_X= 139 H_X= 140 P_C= 141 R_C= 142 H_C= 143 P_V= 144 R_V= 145 H_V= 146 P_B= 147 R_B= 148 H_B= 149 P_N= 150 R_N= 151 H_N= 152 P_M= 153 R_M= 154 H_M= 155 P_COMMA= 156 R_COMMA= 157 H_COMMA= 158 P_PERIOD= 159 R_PERIOD= 160 H_PERIOD= 161 P_SLASH= 162 R_SLASH= 163 H_SLASH= 164 P_RSHIFT= 165 R_RSHIFT= 166 H_RSHIFT= 167 P_MULTIPLY= 168 R_MULTIPLY= 169 H_MULTIPLY= 170 P_LMENU= 171 R_LMENU= 172 H_LMENU= 173 P_SPACE= 174 R_SPACE= 175 H_SPACE= 176 P_CAPITAL= 177 R_CAPITAL= 178 H_CAPITAL= 179 P_F1= 180 R_F1= 181 H_F1= 182 P_F2= 183 R_F2= 184 H_F2= 185 P_F3= 186 R_F3= 187 H_F3= 188 P_F4= 189 R_F4= 190 H_F4= 191 P_F5= 192 R_F5= 193 H_F5= 194 P_F6= 195 R_F6= 196 H_F6= 197 P_F7= 198 R_F7= 199 H_F7= 200 P_F8= 201 R_F8= 202 H_F8= 203 P_F9= 204 R_F9= 205 H_F9= 206 P_F10= 207 R_F10= 208 H_F10= 209 P_NUMLOCK= 210 R_NUMLOCK= 211 H_NUMLOCK= 212 P_SCROLL= 213 R_SCROLL= 214 H_SCROLL= 215 P_NUMPAD7= 216 R_NUMPAD7= 217 H_NUMPAD7= 218 P_NUMPAD8= 219 R_NUMPAD8= 220 H_NUMPAD8= 221 P_NUMPAD9= 222 R_NUMPAD9= 223 H_NUMPAD9= 224 P_SUBTRACT= 225 R_SUBTRACT= 226 H_SUBTRACT= 227 P_NUMPAD4= 228 R_NUMPAD4= 229 H_NUMPAD4= 230 P_NUMPAD5= 231 R_NUMPAD5= 232 H_NUMPAD5= 233 P_NUMPAD6= 234 R_NUMPAD6= 235 H_NUMPAD6= 236 P_ADD= 237 R_ADD= 238 H_ADD= 239 P_NUMPAD1= 240 R_NUMPAD1= 241 H_NUMPAD1= 242 P_NUMPAD2= 243 R_NUMPAD2= 244 H_NUMPAD2= 245 P_NUMPAD3= 246 R_NUMPAD3= 247 H_NUMPAD3= 248 P_NUMPAD0= 249 R_NUMPAD0= 250 H_NUMPAD0= 251 P_DECIMAL= 252 R_DECIMAL= 253 H_DECIMAL= 254 P_= 255 R_= 256 H_= 257 P_OEM_102= 258 R_OEM_102= 259 H_OEM_102= 260 P_F11= 261 R_F11= 262 H_F11= 263 P_F12= 264 R_F12= 265 H_F12= 266 P_F13= 267 R_F13= 268 H_F13= 269 P_F14= 270 R_F14= 271 H_F14= 272 P_F15= 273 R_F15= 274 H_F15= 275 P_KANA= 276 R_KANA= 277 H_KANA= 278 P_ABNT_C1= 279 R_ABNT_C1= 280 H_ABNT_C1= 281 P_CONVERT= 282 R_CONVERT= 283 H_CONVERT= 284 P_NOCONVERT= 285 R_NOCONVERT= 286 H_NOCONVERT= 287 P_YEN= 288 R_YEN= 289 H_YEN= 290 P_ABNT_C2= 291 R_ABNT_C2= 292 H_ABNT_C2= 293 P_NUMPADEQUALS= 294 R_NUMPADEQUALS= 295 H_NUMPADEQUALS= 296 P_PREVTRACK= 297 R_PREVTRACK= 298 H_PREVTRACK= 299 P_AT= 300 R_AT= 301 H_AT= 302 P_COLON= 303 R_COLON= 304 H_COLON= 305 P_UNDERLINE= 306 R_UNDERLINE= 307 H_UNDERLINE= 308 P_KANJI= 309 R_KANJI= 310 H_KANJI= 311 P_STOP= 312 R_STOP= 313 H_STOP= 314 P_AX= 315 R_AX= 316 H_AX= 317 P_UNLABELED= 318 R_UNLABELED= 319 H_UNLABELED= 320 P_NEXTTRACK= 321 R_NEXTTRACK= 322 H_NEXTTRACK= 323 P_NUMPADENTER=activateConsole 324 R_NUMPADENTER= 325 H_NUMPADENTER= 326 P_RCONTROL= 327 R_RCONTROL= 328 H_RCONTROL= 329 P_MUTE= 330 R_MUTE= 331 H_MUTE= 332 P_CALCULATOR= 333 R_CALCULATOR= 334 H_CALCULATOR= 335 P_PLAYPAUSE= 336 R_PLAYPAUSE= 337 H_PLAYPAUSE= 338 P_MEDIASTOP=exit 339 R_MEDIASTOP= 340 H_MEDIASTOP= 341 P_VOLUMEDOWN= 342 R_VOLUMEDOWN= 343 H_VOLUMEDOWN= 344 P_VOLUMEUP= 345 R_VOLUMEUP= 346 H_VOLUMEUP= 347 P_WEBHOME= 348 R_WEBHOME= 349 H_WEBHOME= 350 P_NUMPADCOMMA= 351 R_NUMPADCOMMA= 352 H_NUMPADCOMMA= 353 P_DIVIDE= 354 R_DIVIDE= 355 H_DIVIDE= 356 P_SYSRQ= 357 R_SYSRQ= 358 H_SYSRQ= 359 P_RMENU= 360 R_RMENU= 361 H_RMENU= 362 P_PAUSE= 363 R_PAUSE= 364 H_PAUSE= 365 P_HOME= 366 R_HOME= 367 H_HOME= 368 P_UP= 369 R_UP= 370 H_UP= 371 P_PGUP= 372 R_PGUP= 373 H_PGUP= 374 P_LEFT= 375 R_LEFT= 376 H_LEFT= 377 P_RIGHT= 378 R_RIGHT= 379 H_RIGHT= 380 P_END= 381 R_END= 382 H_END= 383 P_DOWN= 384 R_DOWN= 385 H_DOWN= 386 P_PGDOWN= 387 R_PGDOWN= 388 H_PGDOWN= 389 P_INSERT= 390 R_INSERT= 391 H_INSERT= 392 P_DELETE= 393 R_DELETE= 394 H_DELETE= 395 P_LWIN= 396 R_LWIN= 397 H_LWIN= 398 P_RWIN= 399 R_RWIN= 400 H_RWIN= 401 P_APPS= 402 R_APPS= 403 H_APPS= 404 P_POWER= 405 R_POWER= 406 H_POWER= 407 P_SLEEP= 408 R_SLEEP= 409 H_SLEEP= 410 P_WAKE= 411 R_WAKE= 412 H_WAKE= 413 P_WEBSEARCH= 414 R_WEBSEARCH= 415 H_WEBSEARCH= 416 P_WEBFAVORITES= 417 R_WEBFAVORITES= 418 H_WEBFAVORITES= 419 P_WEBREFRESH= 420 R_WEBREFRESH= 421 H_WEBREFRESH= 422 P_WEBSTOP= 423 R_WEBSTOP= 424 H_WEBSTOP= 425 P_WEBFORWARD= 426 R_WEBFORWARD= 427 H_WEBFORWARD= 428 P_WEBBACK= 429 R_WEBBACK= 430 H_WEBBACK= 431 P_MYCOMPUTER= 432 R_MYCOMPUTER= 433 H_MYCOMPUTER= 434 P_MAIL= 435 R_MAIL= 436 H_MAIL= 437 P_MEDIASELECT= 438 R_MEDIASELECT= 439 H_MEDIASELECT= 440 P_MouseLeft= 441 R_MouseLeft= 442 H_MouseLeft= 443 P_MouseRight= 444 R_MouseRight= 445 H_MouseRight= 446 P_MouseMiddle= 447 R_MouseMiddle= 448 H_MouseMiddle= 449 P_MouseButton3= 450 R_MouseButton3= 451 H_MouseButton3= 452 P_MouseButton4= 453 R_MouseButton4= 454 H_MouseButton4= 455 P_MouseButton5= 456 R_MouseButton5= 457 H_MouseButton5= 458 P_MouseButton6= 459 R_MouseButton6= 460 H_MouseButton6= 461 P_MouseButton7= 462 R_MouseButton7= 463 H_MouseButton7= 464 P_JoyStick0= 465 R_JoyStick0= 466 H_JoyStick0= 467 P_JoyStick1= 468 R_JoyStick1= 469 H_JoyStick1= 470 P_JoyStick2= 471 R_JoyStick2= 472 H_JoyStick2= 473 P_JoyStick3= 474 R_JoyStick3= 475 H_JoyStick3= 476 P_JoyStick4= 477 R_JoyStick4= 478 H_JoyStick4= 479 P_JoyStick5= 480 R_JoyStick5= 481 H_JoyStick5= 482 P_JoyStick6= 483 R_JoyStick6= 484 H_JoyStick6= 485 P_JoyStick7= 486 R_JoyStick7= 487 H_JoyStick7= 488 P_JoyStick8= 489 R_JoyStick8= 490 H_JoyStick8= 491 P_JoyStick9= 492 R_JoyStick9= 493 H_JoyStick9= 494 P_JoyStick10= 495 R_JoyStick10= 496 H_JoyStick10= 497 P_JoyStick11= 498 R_JoyStick11= 499 H_JoyStick11= 500 P_JoyStick12= 501 R_JoyStick12= 502 H_JoyStick12= 503 P_JoyStick13= 504 R_JoyStick13= 505 H_JoyStick13= 506 P_JoyStick14= 507 R_JoyStick14= 508 H_JoyStick14= 509 P_JoyStick15= 510 R_JoyStick15= 511 H_JoyStick15= 512 P_JoyStick16= 513 R_JoyStick16= 514 H_JoyStick16= 515 P_JoyStick17= 516 R_JoyStick17= 517 H_JoyStick17= 518 P_JoyStick18= 519 R_JoyStick18= 520 H_JoyStick18= 521 P_JoyStick19= 522 R_JoyStick19= 523 H_JoyStick19= 524 P_JoyStick20= 525 R_JoyStick20= 526 H_JoyStick20= 527 P_JoyStick21= 528 R_JoyStick21= 529 H_JoyStick21= 530 P_JoyStick22= 531 R_JoyStick22= 532 H_JoyStick22= 533 P_JoyStick23= 534 R_JoyStick23= 535 H_JoyStick23= 536 P_JoyStick24= 537 R_JoyStick24= 538 H_JoyStick24= 539 P_JoyStick25= 540 R_JoyStick25= 541 H_JoyStick25= 542 P_JoyStick26= 543 R_JoyStick26= 544 H_JoyStick26= 545 P_JoyStick27= 546 R_JoyStick27= 547 H_JoyStick27= 548 P_JoyStick28= 549 R_JoyStick28= 550 H_JoyStick28= 551 P_JoyStick29= 552 R_JoyStick29= 553 H_JoyStick29= 554 P_JoyStick30= 555 R_JoyStick30= 556 H_JoyStick30= 557 P_JoyStick31= 558 R_JoyStick31= 559 H_JoyStick31= 2 KeyUNASSIGNED= 3 KeyESCAPE=OnHold fire | OnHold AxisAmp -2.4 lookUpDown | OnPress exit 4 Key1= 5 Key2= 6 Key3= 7 Key4= 8 Key5= 9 Key6= 10 Key7= 11 Key8= 12 Key9= 13 Key0= 14 KeyMINUS= 15 KeyEQUALS=activateConsole 16 KeyBACK= 17 KeyTAB= 18 KeyQ= 19 KeyW= 20 KeyE= 21 KeyR= 22 KeyT= 23 KeyY= 24 KeyU= 25 KeyI= 26 KeyO= 27 KeyP= 28 KeyLBRACKET= 29 KeyRBRACKET= 30 KeyRETURN= 31 KeyLCONTROL= 32 KeyA= 33 KeyS= 34 KeyD= 35 KeyF= 36 KeyG= 37 KeyH= 38 KeyJ= 39 KeyK= 40 KeyL= 41 KeySEMICOLON= 42 KeyAPOSTROPHE= 43 KeyGRAVE=activateConsole 44 KeyLSHIFT= 45 KeyBACKSLASH= 46 KeyZ= 47 KeyX= 48 KeyC= 49 KeyV= 50 KeyB= 51 KeyN= 52 KeyM= 53 KeyCOMMA= 54 KeyPERIOD= 55 KeySLASH= 56 KeyRSHIFT= 57 KeyMULTIPLY= 58 KeyLMENU= 59 KeySPACE= 60 KeyCAPITAL= 61 KeyF1= 62 KeyF2= 63 KeyF3= 64 KeyF4= 65 KeyF5= 66 KeyF6= 67 KeyF7= 68 KeyF8= 69 KeyF9= 70 KeyF10= 71 KeyNUMLOCK= 72 KeySCROLL= 73 KeyNUMPAD7= 74 KeyNUMPAD8= 75 KeyNUMPAD9= 76 KeySUBTRACT= 77 KeyNUMPAD4= 78 KeyNUMPAD5= 79 KeyNUMPAD6= 80 KeyADD= 81 KeyNUMPAD1= 82 KeyNUMPAD2= 83 KeyNUMPAD3= 84 KeyNUMPAD0= 85 KeyDECIMAL= 86 Key= 87 KeyOEM_102= 88 KeyF11= 89 KeyF12= 90 KeyF13= 91 KeyF14= 92 KeyF15= 93 KeyKANA= 94 KeyABNT_C1= 95 KeyCONVERT= 96 KeyNOCONVERT= 97 KeyYEN= 98 KeyABNT_C2= 99 KeyNUMPADEQUALS= 100 KeyPREVTRACK= 101 KeyAT= 102 KeyCOLON= 103 KeyUNDERLINE= 104 KeyKANJI= 105 KeySTOP= 106 KeyAX= 107 KeyUNLABELED= 108 KeyNEXTTRACK= 109 KeyNUMPADENTER=activateConsole 110 KeyRCONTROL= 111 KeyMUTE= 112 KeyCALCULATOR= 113 KeyPLAYPAUSE= 114 KeyMEDIASTOP= 115 KeyVOLUMEDOWN= 116 KeyVOLUMEUP= 117 KeyWEBHOME= 118 KeyNUMPADCOMMA= 119 KeyDIVIDE= 120 KeySYSRQ= 121 KeyRMENU= 122 KeyPAUSE= 123 KeyHOME= 124 KeyUP= 125 KeyPGUP= 126 KeyLEFT= 127 KeyRIGHT= 128 KeyEND= 129 KeyDOWN= 130 KeyPGDOWN= 131 KeyINSERT= 132 KeyDELETE= 133 KeyLWIN= 134 KeyRWIN= 135 KeyAPPS= 136 KeyPOWER= 137 KeySLEEP= 138 KeyWAKE= 139 KeyWEBSEARCH= 140 KeyWEBFAVORITES= 141 KeyWEBREFRESH= 142 KeyWEBSTOP=exit 143 KeyWEBFORWARD= 144 KeyWEBBACK= 145 KeyMYCOMPUTER= 146 KeyMAIL= 147 KeyMEDIASELECT= 148 MouseLeft= 149 MouseRight= 150 MouseMiddle= 151 MouseButton3= 152 MouseButton4= 153 MouseButton5= 154 MouseButton6= 155 MouseButton7= 156 MouseXPos= 157 MouseXNeg= 158 MouseYPos= 159 MouseYNeg= 160 MouseWheel1Pos= 161 MouseWheel1Neg= 162 MouseWheel2Pos= 163 MouseWheel2Neg= 164 JoyAxis1Pos= 165 JoyAxis1Neg= 166 JoyAxis2Pos= 167 JoyAxis2Neg= 168 JoyAxis3Pos= 169 JoyAxis3Neg= 170 JoyAxis4Pos= 171 JoyAxis4Neg= 172 JoyAxis5Pos= 173 JoyAxis5Neg= 174 JoyAxis6Pos= 175 JoyAxis6Neg= 176 JoyAxis7Pos= 177 JoyAxis7Neg= 178 JoyAxis8Pos= 179 JoyAxis8Neg= 180 JoyAxis9Pos= 181 JoyAxis9Neg= 182 JoyAxis10Pos= 183 JoyAxis10Neg= 184 JoyAxis11Pos= 185 JoyAxis11Neg= 186 JoyAxis12Pos= 187 JoyAxis12Neg= 188 JoyAxis13Pos= 189 JoyAxis13Neg= 190 JoyAxis14Pos= 191 JoyAxis14Neg= 192 JoyAxis15Pos= 193 JoyAxis15Neg= 194 JoyAxis16Pos= 195 JoyAxis16Neg= 196 JoyAxis17Pos= 197 JoyAxis17Neg= 198 JoyAxis18Pos= 199 JoyAxis18Neg= 200 JoyAxis19Pos= 201 JoyAxis19Neg= 202 JoyAxis20Pos= 203 JoyAxis20Neg= 204 JoyAxis21Pos= 205 JoyAxis21Neg= 206 JoyAxis22Pos= 207 JoyAxis22Neg= 208 JoyAxis23Pos= 209 JoyAxis23Neg= 210 JoyAxis24Pos= 211 JoyAxis24Neg= 212 JoyButton0= 213 JoyButton1= 214 JoyButton2= 215 JoyButton3= 216 JoyButton4= 217 JoyButton5= 218 JoyButton6= 219 JoyButton7= 220 JoyButton8= 221 JoyButton9= 222 JoyButton10= 223 JoyButton11= 224 JoyButton12= 225 JoyButton13= 226 JoyButton14= 227 JoyButton15= 228 JoyButton16= 229 JoyButton17= 230 JoyButton18= 231 JoyButton19= 232 JoyButton20= 233 JoyButton21= 234 JoyButton22= 235 JoyButton23= 236 JoyButton24= 237 JoyButton25= 238 JoyButton26= 239 JoyButton27= 240 JoyButton28= 241 JoyButton29= 242 JoyButton30= 243 JoyButton31= 244 JoyPOV1North= 245 JoyPOV1South= 246 JoyPOV1East= 247 JoyPOV1West= 248 JoyPOV2North= 249 JoyPOV2South= 250 JoyPOV2East= 251 JoyPOV2West= 252 JoyPOV3North= 253 JoyPOV3South= 254 JoyPOV3East= 255 JoyPOV3West= 256 JoyPOV4North= 257 JoyPOV4South= 258 JoyPOV4East= 259 JoyPOV4West= 560 260 -
code/branches/input/src/core/CommandExecutor.cc
r1214 r1323 31 31 #include "util/String.h" 32 32 #include "util/Convert.h" 33 #include "util/SubString.h" 33 34 #include "Identifier.h" 34 35 #include "Language.h" … … 173 174 } 174 175 175 KeybindMode CommandEvaluation::getKeybindMode()176 KeybindMode::Enum CommandEvaluation::getKeybindMode() 176 177 { 177 178 if (this->state_ == CS_Shortcut_Params || this->state_ == CS_Shortcut_Finished) … … 198 199 } 199 200 // FIXME: Had to insert a return statement 200 return (KeybindMode )0;201 return (KeybindMode::Enum)0; 201 202 } 202 203 -
code/branches/input/src/core/CommandExecutor.h
r1293 r1323 70 70 std::string read(const std::string& filename); 71 71 72 enum KeybindMode {}; // temporary73 74 72 /////////////////////// 75 73 // CommandEvaluation // … … 82 80 CommandEvaluation(); 83 81 84 KeybindMode getKeybindMode();82 KeybindMode::Enum getKeybindMode(); 85 83 bool isValid() const; 86 84 … … 89 87 inline std::string getAdditionalParameter() const 90 88 { return (this->additionalParameter_ != "") ? (" " + this->additionalParameter_) : ""; } 91 inline std::string getCommandString() const { return this->processedCommand_; }89 inline Executor* getExecutor() { return 0; } 92 90 93 91 void setEvaluatedParameter(unsigned int index, MultiTypeMath param); -
code/branches/input/src/core/CorePrereqs.h
r1293 r1323 78 78 #endif 79 79 80 namespace KeybindMode 81 { 82 enum Enum 83 { 84 None, 85 OnPress, 86 OnHold, 87 OnRelease 88 }; 89 }; 90 80 91 typedef std::string LanguageEntryLabel; 81 92 -
code/branches/input/src/core/Executor.h
r1062 r1323 233 233 MultiTypeMath defaultValue_[MAX_FUNCTOR_ARGUMENTS]; 234 234 bool bAddedDefaultValue_[MAX_FUNCTOR_ARGUMENTS]; 235 KeybindMode::Enum keybindMode_; 236 int axisParameter_; 235 237 236 238 private: -
code/branches/input/src/core/InputBuffer.cc
r1293 r1323 173 173 } 174 174 175 /** 176 * This tick() function is called by the InputManager if the InputBuffer is active. 177 * @param dt Delta time 178 */ 175 179 void InputBuffer::tick(float dt) 176 180 { -
code/branches/input/src/core/InputBuffer.h
r1293 r1323 43 43 {}; 44 44 45 class _CoreExport InputBuffer : public KeyHandler, public TickableReal45 class _CoreExport InputBuffer : public KeyHandler, public OrxonoxClass 46 46 { 47 47 struct InputBufferListenerTuple -
code/branches/input/src/core/InputHandler.cc
r1293 r1323 34 34 #include "InputHandler.h" 35 35 #include "util/Convert.h" 36 #include "util/SubString.h" 37 #include "util/String.h" 36 38 #include "Debug.h" 37 39 #include "ConfigValueIncludes.h" 38 40 #include "CoreIncludes.h" 39 41 #include "CommandExecutor.h" 42 #include "Executor.h" 40 43 41 44 namespace orxonox … … 51 54 { 52 55 RegisterObject(KeyBinder); 53 clearBindings(); 54 56 clearBindings(true); 57 58 // keys 55 59 std::string keyNames[] = { 56 "UNASSIGNED",57 "ESCAPE",58 "1",59 "2",60 "3",61 "4",62 "5",63 "6",64 "7",65 "8",66 "9",67 "0",68 "MINUS",69 "EQUALS",70 "BACK",71 "TAB",72 "Q",73 "W",74 "E",75 "R",76 "T",77 "Y",78 "U",79 "I",80 "O",81 "P",82 "LBRACKET",83 "RBRACKET",84 "RETURN",85 "LCONTROL",86 "A",87 "S",88 "D",89 "F",90 "G",91 "H",92 "J",93 "K",94 "L",95 "SEMICOLON",96 "APOSTROPHE",97 "GRAVE",98 "LSHIFT",99 "BACKSLASH",100 "Z",101 "X",102 "C",103 "V",104 "B",105 "N",106 "M",107 "COMMA",108 "PERIOD",109 "SLASH",110 "RSHIFT",111 "MULTIPLY",112 "LMENU",113 "SPACE",114 "CAPITAL",115 "F1",116 "F2",117 "F3",118 "F4",119 "F5",120 "F6",121 "F7",122 "F8",123 "F9",124 "F10",125 "NUMLOCK",126 "SCROLL",127 "NUMPAD7",128 "NUMPAD8",129 "NUMPAD9",130 "SUBTRACT",131 "NUMPAD4",132 "NUMPAD5",133 "NUMPAD6",134 "ADD",135 "NUMPAD1",136 "NUMPAD2",137 "NUMPAD3",138 "NUMPAD0",139 "DECIMAL",140 "","",141 "OEM_102",142 "F11",143 "F12",144 "","","","","","","","","","","",145 "F13",146 "F14",147 "F15",148 "","","","","","","","","","",149 "KANA",150 "","",151 "ABNT_C1",152 "","","","","",153 "CONVERT",154 "",155 "NOCONVERT",156 "",157 "YEN",158 "ABNT_C2",159 "","","","","","","","","","","","","","",160 "NUMPADEQUALS",161 "","",162 "PREVTRACK",163 "AT",164 "COLON",165 "UNDERLINE",166 "KANJI",167 "STOP",168 "AX",169 "UNLABELED",170 "NEXTTRACK",171 "","",172 "NUMPADENTER",173 "RCONTROL",174 "","",175 "MUTE",176 "CALCULATOR",177 "PLAYPAUSE",178 "",179 "MEDIASTOP",180 "","","","","","","","","",181 "VOLUMEDOWN",182 "",183 "VOLUMEUP",184 "",185 "WEBHOME",186 "NUMPADCOMMA",187 "",188 "DIVIDE",189 "",190 "SYSRQ",191 "RMENU",192 "","","","","","","","","","","","",193 "PAUSE",194 "",195 "HOME",196 "UP",197 "PGUP",198 "",199 "LEFT",200 "",201 "RIGHT",202 "",203 "END",204 "DOWN",205 "PGDOWN",206 "INSERT",207 "DELETE",208 "","","","","","","",209 "LWIN",210 "RWIN",211 "APPS",212 "POWER",213 "SLEEP",214 "","","",215 "WAKE",216 "",217 "WEBSEARCH",218 "WEBFAVORITES",219 "WEBREFRESH",220 "WEBSTOP",221 "WEBFORWARD",222 "WEBBACK",223 "MYCOMPUTER",224 "MAIL",225 "MEDIASELECT"60 "UNASSIGNED", 61 "ESCAPE", 62 "1", 63 "2", 64 "3", 65 "4", 66 "5", 67 "6", 68 "7", 69 "8", 70 "9", 71 "0", 72 "MINUS", 73 "EQUALS", 74 "BACK", 75 "TAB", 76 "Q", 77 "W", 78 "E", 79 "R", 80 "T", 81 "Y", 82 "U", 83 "I", 84 "O", 85 "P", 86 "LBRACKET", 87 "RBRACKET", 88 "RETURN", 89 "LCONTROL", 90 "A", 91 "S", 92 "D", 93 "F", 94 "G", 95 "H", 96 "J", 97 "K", 98 "L", 99 "SEMICOLON", 100 "APOSTROPHE", 101 "GRAVE", 102 "LSHIFT", 103 "BACKSLASH", 104 "Z", 105 "X", 106 "C", 107 "V", 108 "B", 109 "N", 110 "M", 111 "COMMA", 112 "PERIOD", 113 "SLASH", 114 "RSHIFT", 115 "MULTIPLY", 116 "LMENU", 117 "SPACE", 118 "CAPITAL", 119 "F1", 120 "F2", 121 "F3", 122 "F4", 123 "F5", 124 "F6", 125 "F7", 126 "F8", 127 "F9", 128 "F10", 129 "NUMLOCK", 130 "SCROLL", 131 "NUMPAD7", 132 "NUMPAD8", 133 "NUMPAD9", 134 "SUBTRACT", 135 "NUMPAD4", 136 "NUMPAD5", 137 "NUMPAD6", 138 "ADD", 139 "NUMPAD1", 140 "NUMPAD2", 141 "NUMPAD3", 142 "NUMPAD0", 143 "DECIMAL", 144 "","", 145 "OEM_102", 146 "F11", 147 "F12", 148 "","","","","","","","","","","", 149 "F13", 150 "F14", 151 "F15", 152 "","","","","","","","","","", 153 "KANA", 154 "","", 155 "ABNT_C1", 156 "","","","","", 157 "CONVERT", 158 "", 159 "NOCONVERT", 160 "", 161 "YEN", 162 "ABNT_C2", 163 "","","","","","","","","","","","","","", 164 "NUMPADEQUALS", 165 "","", 166 "PREVTRACK", 167 "AT", 168 "COLON", 169 "UNDERLINE", 170 "KANJI", 171 "STOP", 172 "AX", 173 "UNLABELED", 174 "NEXTTRACK", 175 "","", 176 "NUMPADENTER", 177 "RCONTROL", 178 "","", 179 "MUTE", 180 "CALCULATOR", 181 "PLAYPAUSE", 182 "", 183 "MEDIASTOP", 184 "","","","","","","","","", 185 "VOLUMEDOWN", 186 "", 187 "VOLUMEUP", 188 "", 189 "WEBHOME", 190 "NUMPADCOMMA", 191 "", 192 "DIVIDE", 193 "", 194 "SYSRQ", 195 "RMENU", 196 "","","","","","","","","","","","", 197 "PAUSE", 198 "", 199 "HOME", 200 "UP", 201 "PGUP", 202 "", 203 "LEFT", 204 "", 205 "RIGHT", 206 "", 207 "END", 208 "DOWN", 209 "PGDOWN", 210 "INSERT", 211 "DELETE", 212 "","","","","","","", 213 "LWIN", 214 "RWIN", 215 "APPS", 216 "POWER", 217 "SLEEP", 218 "","","", 219 "WAKE", 220 "", 221 "WEBSEARCH", 222 "WEBFAVORITES", 223 "WEBREFRESH", 224 "WEBSTOP", 225 "WEBFORWARD", 226 "WEBBACK", 227 "MYCOMPUTER", 228 "MAIL", 229 "MEDIASELECT" 226 230 }; 227 for (int i = 0; i < numberOfKeys_s; i++) 228 keyNames_[i] = keyNames[i]; 229 231 for (int i = 0; i < nKeys_s; i++) 232 namesKeys_[i] = "Key" + keyNames[i]; 233 234 // mouse buttons 230 235 std::string mouseButtonNames[] = { 231 236 "MouseLeft", "MouseRight", "MouseMiddle", 232 237 "MouseButton3", "MouseButton4", "MouseButton5", 233 238 "MouseButton6", "MouseButton7" }; 234 for (int i = 0; i < numberOfMouseButtons_s; i++) 235 mouseButtonNames_[i] = mouseButtonNames[i]; 236 237 for (int i = 0; i < numberOfJoyStickButtons_s; i++) 238 joyStickButtonNames_[i] = "JoyStick" + getConvertedValue<int, std::string>(i); 239 for (int i = 0; i < nMouseButtons_s; i++) 240 namesMouseButtons_[i] = mouseButtonNames[i]; 241 242 // joy stick buttons 243 for (int i = 0; i < 32; i++) 244 namesJoyStickButtons_[i] = "JoyButton" + getConvertedValue<int, std::string>(i); 245 for (int i = 32; i < nJoyStickButtons_s; i += 4) 246 { 247 namesJoyStickButtons_[i + 0] = "JoyPOV" + getConvertedValue<int, std::string>((i - 32)/4 + 1) + "North"; 248 namesJoyStickButtons_[i + 1] = "JoyPOV" + getConvertedValue<int, std::string>((i - 32)/4 + 1) + "South"; 249 namesJoyStickButtons_[i + 2] = "JoyPOV" + getConvertedValue<int, std::string>((i - 32)/4 + 1) + "East"; 250 namesJoyStickButtons_[i + 3] = "JoyPOV" + getConvertedValue<int, std::string>((i - 32)/4 + 1) + "West"; 251 } 252 253 // half axes 254 std::string rawNames[nHalfAxes_s/2]; 255 rawNames[0] = "MouseX"; 256 rawNames[1] = "MouseY"; 257 rawNames[2] = "MouseWheel1"; 258 rawNames[3] = "MouseWheel2"; 259 for (unsigned int i = 4; i < nHalfAxes_s/2; i++) 260 rawNames[i] = "JoyAxis" + getConvertedValue<int, std::string>(i - 3); 261 for (unsigned int i = 0; i < nHalfAxes_s/2; i++) 262 { 263 namesHalfAxes_[i * 2 + 0] = rawNames[i] + "Pos"; 264 namesHalfAxes_[i * 2 + 1] = rawNames[i] + "Neg"; 265 } 239 266 } 240 267 … … 244 271 KeyBinder::~KeyBinder() 245 272 { 273 // almost no destructors required because most of the arrays are static. 274 clearBindings(); // does some destruction work 246 275 } 247 276 … … 251 280 void KeyBinder::setConfigValues() 252 281 { 253 ConfigValueContainer* cont; 254 std::string modes[] = {"P_", "R_", "H_"}; 255 282 bool success = true; 256 283 // keys 257 for (int i = 0; i < numberOfKeys_s; i++) 258 { 259 for (int j = 0; j < 3; j++) 260 { 261 cont = getIdentifier()->getConfigValueContainer(modes[j] + keyNames_[i]); 262 if (!cont) 263 { 264 cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), modes[j] + keyNames_[i], ""); 265 getIdentifier()->addConfigValueContainer(modes[j] + keyNames_[i], cont); 266 } 267 switch (j) 268 { 269 case 0: 270 cont->getValue(&bindingsKeyPress_[i].commandStr); 271 break; 272 case 1: 273 cont->getValue(&bindingsKeyRelease_[i].commandStr); 274 break; 275 case 2: 276 cont->getValue(&bindingsKeyHold_[i].commandStr); 277 } 278 } 279 } 280 284 success |= readBindings(namesKeys_, bindingStringsKeys_, bindingsKeys_, nKeys_s); 281 285 // mouse buttons 282 for (int i = 0; i < numberOfMouseButtons_s; i++) 283 { 284 for (int j = 0; j < 3; j++) 285 { 286 cont = getIdentifier()->getConfigValueContainer(modes[j] + mouseButtonNames_[i]); 287 if (!cont) 288 { 289 cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), modes[j] + mouseButtonNames_[i], ""); 290 getIdentifier()->addConfigValueContainer(modes[j] + mouseButtonNames_[i], cont); 291 } 292 switch (j) 293 { 294 case 0: 295 cont->getValue(&bindingsMouseButtonPress_[i].commandStr); 296 break; 297 case 1: 298 cont->getValue(&bindingsMouseButtonRelease_[i].commandStr); 299 break; 300 case 2: 301 cont->getValue(&bindingsMouseButtonHold_[i].commandStr); 302 } 303 } 304 } 305 286 success |= readBindings(namesMouseButtons_, bindingStringsMouseButtons_, bindingsMouseButtons_, nMouseButtons_s); 306 287 // joy stick buttons 307 for (int i = 0; i < numberOfJoyStickButtons_s; i++) 308 { 309 for (int j = 0; j < 3; j++) 310 { 311 cont = getIdentifier()->getConfigValueContainer(modes[j] + joyStickButtonNames_[i]); 312 if (!cont) 313 { 314 cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), modes[j] + joyStickButtonNames_[i], ""); 315 getIdentifier()->addConfigValueContainer(modes[j] + joyStickButtonNames_[i], cont); 316 } 317 switch (j) 318 { 319 case 0: 320 cont->getValue(&bindingsJoyStickButtonPress_[i].commandStr); 321 break; 322 case 1: 323 cont->getValue(&bindingsJoyStickButtonRelease_[i].commandStr); 324 break; 325 case 2: 326 cont->getValue(&bindingsJoyStickButtonHold_[i].commandStr); 327 } 328 } 329 } 288 success |= readBindings(namesJoyStickButtons_, bindingStringsJoyStickButtons_, 289 bindingsJoyStickButtons_, nJoyStickButtons_s); 290 // half axes 291 success |= readBindings(namesHalfAxes_, bindingStringsHalfAxes_, bindingsHalfAxes_, nHalfAxes_s); 292 293 // TODO: what happens if parsing didn't succeed in all parts? nothing? 294 } 295 296 bool KeyBinder::readBindings(std::string* names, std::string* bindingStrings, 297 KeyBindingBundle* bindings, unsigned int size) 298 { 299 for (unsigned int i = 0; i < size; i++) 300 { 301 // config value stuff 302 ConfigValueContainer* cont = getIdentifier()->getConfigValueContainer(names[i]); 303 if (!cont) 304 { 305 cont = new ConfigValueContainer(CFT_Keybindings, getIdentifier(), names[i], ""); 306 getIdentifier()->addConfigValueContainer(names[i], cont); 307 } 308 std::string old = bindingStrings[i]; 309 cont->getValue(&bindingStrings[i]); 310 311 // keybinder stuff 312 if (old != bindingStrings[i]) 313 { 314 // binding has changed 315 if (bindingStrings[i] == "") 316 { 317 // empty binding, occurs at least the first time since init value is " " 318 bindings[i].OnPress.clear(); 319 bindings[i].OnRelease.clear(); 320 bindings[i].OnHold.clear(); 321 } 322 else 323 { 324 // actually parse the command(s) 325 SubString commands(bindingStrings[i], "|", SubString::WhiteSpaces, false, 326 '\\', false, '"', false, '(', ')', false, '\0'); 327 bindings[i].OnHold.nCommands = 0; 328 bindings[i].OnHold.commands = new SimpleCommand[64]; 329 bindings[i].OnPress.nCommands = 0; 330 bindings[i].OnPress.commands = new SimpleCommand[64]; 331 bindings[i].OnRelease.nCommands = 0; 332 bindings[i].OnRelease.commands = new SimpleCommand[64]; 333 for (unsigned int iCommand = 0; iCommand < commands.size(); iCommand++) 334 { 335 if (commands[iCommand] != "") 336 { 337 SubString tokens(commands[iCommand], " ", SubString::WhiteSpaces, false, 338 '\\', false, '"', false, '(', ')', false, '\0'); 339 340 unsigned int iToken = 0; 341 342 // first argument can be OnPress, OnHold OnRelease or nothing 343 KeybindMode::Enum mode = KeybindMode::None; 344 if (getLowercase(tokens[iToken]) == "onpress") 345 mode = KeybindMode::OnPress, iToken++; 346 if (getLowercase(tokens[iToken]) == "onrelease") 347 mode = KeybindMode::OnRelease, iToken++; 348 if (getLowercase(tokens[iToken]) == "onhold") 349 mode = KeybindMode::OnHold, iToken++; 350 351 if (iToken == tokens.size()) 352 continue; 353 354 SimpleCommand* cmd = new SimpleCommand(); 355 356 // second argument can be the amplitude for the case it as an axis command 357 // default amplitude is 1.0f 358 if (getLowercase(tokens[iToken]) == "axisamp") 359 { 360 iToken++; 361 float value; 362 if (iToken == tokens.size() || !convertValue(&value, tokens[iToken])) 363 { 364 CCOUT(2) << "Error while parsing key binding " << names[i] 365 << ". Numeric expression expected afer 'AxisAmp', switching to default value" << std::endl; 366 if (iToken == tokens.size()) 367 { 368 delete cmd; 369 continue; 370 } 371 cmd->axisModifier = 1.0f; 372 } 373 else 374 cmd->axisModifier = value; 375 iToken++; 376 } 377 else 378 cmd->axisModifier = 1.0f; 379 380 // no more arguments expected except for the actual command 381 if (iToken == tokens.size()) 382 { // no command given 383 delete cmd; 384 continue; 385 } 386 while (iToken != tokens.size()) 387 cmd->commandStr += tokens[iToken++] + " "; 388 389 // check whether we exceed 64 commands... 390 if (bindings[i].OnHold.nCommands == 64 || bindings[i].OnPress.nCommands == 64 391 || bindings[i].OnRelease.nCommands == 64) 392 { 393 CCOUT(2) << "Error while parsing key binding " << names[i] 394 << ". You shouldn't assign more than 64 key bindings to one key " 395 << "just to test the parser" << std::endl; 396 } 397 398 // evaluate the command 399 cmd->axisCommand = 0; 400 CommandEvaluation& eval = CommandExecutor::evaluate(cmd->commandStr); 401 // TOOD: check for axis command 402 if (false) 403 { 404 cmd->axisCommand->commandStr = cmd->commandStr; 405 cmd->commandStr = ""; 406 cmd->axisCommand->evaluation = eval; 407 // add command to the buffer if not yet existing 408 for (unsigned int iAxisCmd = 0; iAxisCmd < axisCommands_.size(); iAxisCmd++) 409 { 410 if (getLowercase(axisCommands_[iAxisCmd]->commandStr) == getLowercase(cmd->commandStr)) 411 { 412 // already in list 413 cmd->axisCommand = axisCommands_[iAxisCmd]; 414 break; 415 } 416 } 417 if (cmd->axisCommand == 0) 418 { 419 cmd->axisCommand = new AxisCommand(); 420 axisCommands_.push_back(cmd->axisCommand); 421 } 422 // TODO: check for relative/absolute command 423 cmd->axisCommand->bRelative = false; 424 425 // axis commands are always OnHold 426 *(bindings[i].OnHold.commands + bindings[i].OnHold.nCommands++) = *cmd; 427 } 428 else 429 { 430 cmd->evaluation = eval; 431 432 // TODO: determine whether the command is OnHold, OnPress or OnRelease 433 switch (mode) 434 { 435 case KeybindMode::None: 436 *(bindings[i].OnPress.commands + bindings[i].OnPress.nCommands++) = *cmd; 437 break; 438 case KeybindMode::OnPress: 439 *(bindings[i].OnPress.commands + bindings[i].OnPress.nCommands++) = *cmd; 440 break; 441 case KeybindMode::OnHold: 442 *(bindings[i].OnHold.commands + bindings[i].OnHold.nCommands++) = *cmd; 443 break; 444 case KeybindMode::OnRelease: 445 *(bindings[i].OnRelease.commands + bindings[i].OnRelease.nCommands++) = *cmd; 446 break; 447 } 448 } 449 } 450 } 451 452 // redimension arrays with simple commands 453 SimpleCommand* sCmd = bindings[i].OnHold.commands; 454 if (bindings[i].OnHold.nCommands) 455 { 456 bindings[i].OnHold.commands = new SimpleCommand[bindings[i].OnHold.nCommands]; 457 for (unsigned int iCmd = 0; iCmd < bindings[i].OnHold.nCommands; iCmd++) 458 bindings[i].OnHold.commands[iCmd] = sCmd[iCmd]; 459 } 460 else 461 bindings[i].OnHold.commands = 0; 462 delete[] sCmd; 463 464 sCmd = bindings[i].OnPress.commands; 465 if (bindings[i].OnPress.nCommands) 466 { 467 bindings[i].OnPress.commands = new SimpleCommand[bindings[i].OnPress.nCommands]; 468 for (unsigned int iCmd = 0; iCmd < bindings[i].OnPress.nCommands; iCmd++) 469 bindings[i].OnPress.commands[iCmd] = sCmd[iCmd]; 470 } 471 else 472 bindings[i].OnPress.commands = 0; 473 delete[] sCmd; 474 475 sCmd = bindings[i].OnRelease.commands; 476 if (bindings[i].OnRelease.nCommands) 477 { 478 bindings[i].OnRelease.commands = new SimpleCommand[bindings[i].OnRelease.nCommands]; 479 for (unsigned int iCmd = 0; iCmd < bindings[i].OnRelease.nCommands; iCmd++) 480 bindings[i].OnRelease.commands[iCmd] = sCmd[iCmd]; 481 } 482 else 483 bindings[i].OnRelease.commands = 0; 484 delete[] sCmd; 485 } 486 } 487 } 488 return true; 330 489 } 331 490 … … 333 492 @brief Overwrites all bindings with "" 334 493 */ 335 void KeyBinder::clearBindings() 336 { 337 for (int i = 0; i < numberOfKeys_s; i++) 338 { 339 bindingsKeyPress_ [i].commandStr = ""; 340 bindingsKeyRelease_[i].commandStr = ""; 341 bindingsKeyHold_ [i].commandStr = ""; 342 } 343 for (int i = 0; i < numberOfMouseButtons_s; i++) 344 { 345 bindingsMouseButtonPress_ [i].commandStr = ""; 346 bindingsMouseButtonRelease_[i].commandStr = ""; 347 bindingsMouseButtonHold_ [i].commandStr = ""; 348 } 349 for (int i = 0; i < numberOfJoyStickButtons_s; i++) 350 { 351 bindingsJoyStickButtonPress_ [i].commandStr = ""; 352 bindingsJoyStickButtonRelease_[i].commandStr = ""; 353 bindingsJoyStickButtonHold_ [i].commandStr = ""; 354 } 494 void KeyBinder::clearBindings(bool bInit) 495 { 496 for (int i = 0; i < nKeys_s; i++) 497 { 498 clearBundle(bindingsKeys_[i], bInit); 499 bindingStringsKeys_[i] = " "; 500 } 501 for (int i = 0; i < nMouseButtons_s; i++) 502 { 503 clearBundle(bindingsMouseButtons_[i], bInit); 504 bindingStringsMouseButtons_[i] = " "; 505 } 506 for (int i = 0; i < nJoyStickButtons_s; i++) 507 { 508 clearBundle(bindingsJoyStickButtons_[i], bInit); 509 bindingStringsJoyStickButtons_[i] = " "; 510 } 511 for (int i = 0; i < nHalfAxes_s; i++) 512 { 513 clearBundle(bindingsHalfAxes_[i], bInit); 514 bindingStringsHalfAxes_[i] = " "; 515 } 516 for (unsigned int i = 0; i < axisCommands_.size(); i++) 517 delete axisCommands_[i]; 518 axisCommands_.clear(); 519 } 520 521 void KeyBinder::clearBundle(KeyBindingBundle& bundle, bool bInit) 522 { 523 if (!bInit) 524 { 525 if (bundle.OnHold.nCommands) 526 delete[] bundle.OnHold.commands; 527 if (bundle.OnPress.nCommands) 528 delete[] bundle.OnPress.commands; 529 if (bundle.OnRelease.nCommands) 530 delete[] bundle.OnRelease.commands; 531 } 532 bundle.OnPress.nCommands = 0; 533 bundle.OnHold.nCommands = 0; 534 bundle.OnRelease.nCommands = 0; 355 535 } 356 536 … … 361 541 bool KeyBinder::loadBindings() 362 542 { 363 COUT(ORX_DEBUG) << "KeyBinder: Loading key bindings..." << std::endl; 543 COUT(3) << "KeyBinder: Loading key bindings..." << std::endl; 544 545 // clear half axes 546 for (unsigned int i = 0; i < nHalfAxes_s; i++) 547 { 548 halfAxes_[i].hasChanged = false; 549 halfAxes_[i].abs = 0.0f; 550 halfAxes_[i].rel = 0.0f; 551 halfAxes_[i].wasDown = false; 552 halfAxes_[i].threshold = 0.01f; 553 } 364 554 365 555 ConfigFileManager::getSingleton()->setFile(CFT_Keybindings, "keybindings.ini"); 556 clearBindings(); 366 557 setConfigValues(); 367 558 368 // evaluate the key bindings 369 // TODO: what if binding is invalid? 370 for (int i = 0; i < numberOfKeys_s; i++) 371 { 372 if (bindingsKeyPress_[i].commandStr != "") 373 { 374 bindingsKeyPress_[i].evaluation = CommandExecutor::evaluate(bindingsKeyPress_[i].commandStr); 375 bindingsKeyPress_[i].commandStr = bindingsKeyPress_[i].evaluation.getCommandString(); 376 } 377 } 378 379 COUT(ORX_DEBUG) << "KeyBinder: Loading key bindings done." << std::endl; 380 return true; 381 } 382 383 bool KeyBinder::executeSimpleBinding(KeyBinding& binding) 384 { 385 if (binding.commandStr != "") 386 { 387 if (binding.commandStr != binding.evaluation.getCommandString()) 388 { 389 // key binding has changed, reevaluate the command string. 390 binding.evaluation = CommandExecutor::evaluate(binding.commandStr); 391 binding.commandStr = binding.evaluation.getCommandString(); 392 } 393 COUT(ORX_DEBUG) << "Keybinding: Executing command: " << binding.commandStr << std::endl; 394 CommandExecutor::execute(binding.commandStr); 395 } 396 559 COUT(3) << "KeyBinder: Loading key bindings done." << std::endl; 560 return true; 561 } 562 563 void KeyBinder::tick(float dt) 564 { 565 // we have to process all the analog input since there is e.g. no 'mouseDoesntMove' event. 566 for (unsigned int i = 0; i < nHalfAxes_s; i++) 567 { 568 if (!halfAxes_[i].hasChanged) 569 { 570 if (!halfAxes_[i].wasDown && halfAxes_[i].abs > halfAxes_[i].threshold) 571 { 572 halfAxes_[i].wasDown = true; 573 if (bindingsHalfAxes_[i].OnPress.nCommands) 574 executeBinding(bindingsHalfAxes_[i].OnPress, halfAxes_[i].rel, halfAxes_[i].abs); 575 } 576 else if (halfAxes_[i].wasDown && halfAxes_[i].abs < halfAxes_[i].threshold) 577 { 578 halfAxes_[i].wasDown = false; 579 if (bindingsHalfAxes_[i].OnRelease.nCommands) 580 executeBinding(bindingsHalfAxes_[i].OnRelease, halfAxes_[i].rel, halfAxes_[i].abs); 581 } 582 if (halfAxes_[i].wasDown) 583 { 584 executeBinding(bindingsHalfAxes_[i].OnHold, halfAxes_[i].rel, halfAxes_[i].abs); 585 } 586 halfAxes_[i].hasChanged = false; 587 } 588 } 589 590 // execute all buffered bindings (addional parameter) 591 for (unsigned int i = 0; i < axisCommands_.size(); i++) 592 { 593 if (axisCommands_[i]->nValuesAdded > 0) 594 { 595 axisCommands_[i]->evaluation.setEvaluatedParameter(0, axisCommands_[i]->value); 596 // reset 597 axisCommands_[i]->nValuesAdded = 0; 598 axisCommands_[i]->value = 0.0f; 599 } 600 } 601 } 602 603 bool KeyBinder::executeBinding(KeyBinding& binding, float axisRel, float axisAbs) 604 { 605 // execute all the parsed commands in the string 606 for (unsigned int iCommand = 0; iCommand < binding.nCommands; iCommand++) 607 { 608 SimpleCommand& command = binding.commands[iCommand]; 609 if (command.axisCommand) 610 { 611 AxisCommand& axisCommand = *command.axisCommand; 612 // command has an additional parameter 613 if (command.axisCommand->bRelative) 614 { 615 // we have to calculate a relative movement. 616 // amplitude says how much one keystroke is 617 axisCommand.value += command.axisModifier * axisRel; 618 } 619 else 620 { 621 // we have to calculate absolute position of the axis. 622 // for a key this simply is 1, but multiplied by a user defined factor 623 // since there might be another axis that is affected, we have to wait and 624 // store the result in a temporary place 625 axisCommand.value = 626 (axisCommand.value * (axisCommand.nValuesAdded++) + command.axisModifier * axisAbs) 627 / axisCommand.nValuesAdded; 628 } 629 } 630 else 631 { 632 // simple command, just execute directly 633 // TODO: calculate whether this a Press, Release or Hold event 634 CommandExecutor::execute(command.evaluation); 635 } 636 } 397 637 return true; 398 638 } … … 406 646 { 407 647 // find the appropriate key binding 408 execute SimpleBinding(bindingsKeyPress_[int(evt.key)]);648 executeBinding(bindingsKeys_[int(evt.key)].OnPress, 1.0, 1.0); 409 649 410 650 return true; … … 418 658 { 419 659 // find the appropriate key binding 420 execute SimpleBinding(bindingsKeyRelease_[int(evt.key)]);660 executeBinding(bindingsKeys_[int(evt.key)].OnRelease, 1.0, 1.0); 421 661 422 662 return true; … … 430 670 { 431 671 // find the appropriate key binding 432 execute SimpleBinding(bindingsKeyHold_[int(evt.key)]);672 executeBinding(bindingsKeys_[int(evt.key)].OnHold, 1.0, 1.0); 433 673 434 674 return true; … … 439 679 @param e Mouse state information 440 680 */ 441 bool KeyBinder::mouseMoved(const MouseState &evt) 442 { 443 /*if (bindingMouseMoved_.commandStr != "") 444 { 445 if (bindingMouseMoved_.commandStr != bindingMouseMoved_.evaluation.getCommandString()) 446 { 447 // key binding has changed, reevaluate the command string. 448 bindingMouseMoved_.evaluation = CommandExecutor::evaluate(bindingMouseMoved_.commandStr); 449 bindingMouseMoved_.commandStr = bindingMouseMoved_.evaluation.getCommandString(); 450 } 451 COUT(3) << "Executing command: " << bindingMouseMoved_.commandStr << std::endl; 452 453 bindingMouseMoved_.evaluation.setEvaluatedParameter( 454 CommandExecutor::execute(bindingMouseMoved_.commandStr); 455 }*/ 681 bool KeyBinder::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) 682 { 683 halfAxes_[0].hasChanged = true; 684 halfAxes_[1].hasChanged = true; 685 halfAxes_[2].hasChanged = true; 686 halfAxes_[3].hasChanged = true; 687 // translate absolute mouse position into joystick like behaviour 688 if (clippingSize.x > clippingSize.y) 689 { 690 int margin = (clippingSize.x - clippingSize.y) / 2; 691 if (abs.x - margin > clippingSize.y) 692 { 693 halfAxes_[0].abs = 1.0f; 694 halfAxes_[1].abs = 0.0f; 695 } 696 else if (abs.x < margin) 697 { 698 halfAxes_[0].abs = 0.0f; 699 halfAxes_[1].abs = 1.0f; 700 } 701 else 702 { 703 float temp = ((float)abs.x) / clippingSize.y * 2 - 1; 704 if (temp > 0) 705 { 706 halfAxes_[0].abs = temp; 707 halfAxes_[1].abs = 0.0f; 708 } 709 else 710 { 711 halfAxes_[0].abs = 0.0f; 712 halfAxes_[1].abs = -temp; 713 } 714 } 715 716 float temp = -((float)abs.y) / clippingSize.y * 2 + 1; 717 if (temp > 0) 718 { 719 halfAxes_[2].abs = temp; 720 halfAxes_[3].abs = 0.0; 721 } 722 else 723 { 724 halfAxes_[2].abs = 0.0; 725 halfAxes_[3].abs = -temp; 726 } 727 } 728 else 729 { 730 float temp = ((float)abs.x) / clippingSize.x * 2 - 1; 731 if (temp > 0) 732 { 733 halfAxes_[0].abs = temp; 734 halfAxes_[1].abs = 0.0; 735 } 736 else 737 { 738 halfAxes_[0].abs = 0.0; 739 halfAxes_[1].abs = -temp; 740 } 741 742 int margin = (clippingSize.y - clippingSize.x) / 2; 743 if (abs.y - margin > clippingSize.x) 744 { 745 halfAxes_[2].abs = 0.0; 746 halfAxes_[3].abs = 1.0; 747 } 748 else if (abs.y < margin) 749 { 750 halfAxes_[2].abs = 1.0; 751 halfAxes_[3].abs = 0.0; 752 } 753 else 754 { 755 float temp = -((float)abs.y) / clippingSize.x * 2 + 1; 756 if (temp > 0) 757 { 758 halfAxes_[2].abs = temp; 759 halfAxes_[3].abs = 0.0; 760 } 761 else 762 { 763 halfAxes_[2].abs = 0.0; 764 halfAxes_[3].abs = -temp; 765 } 766 } 767 } 768 769 // relative movements 770 if (rel.x > 0) 771 { 772 halfAxes_[0].rel = rel.x; 773 halfAxes_[1].rel = 0.0; 774 } 775 else 776 { 777 halfAxes_[0].rel = 0.0; 778 halfAxes_[1].rel = rel.x; 779 } 780 781 if (rel.y /*!*/ < /*!*/ 0) 782 { 783 halfAxes_[0].rel = -rel.y; 784 halfAxes_[1].rel = 0.0; 785 } 786 else 787 { 788 halfAxes_[0].rel = 0.0; 789 halfAxes_[1].rel = -rel.y; 790 } 456 791 457 792 return true; … … 462 797 @param e Mouse state information 463 798 */ 464 bool KeyBinder::mouseScrolled(const MouseState &evt) 465 { 799 bool KeyBinder::mouseScrolled(int abs, int rel) 800 { 801 // TODO: obvious... 466 802 return true; 467 803 } … … 472 808 @param id The ID of the mouse button 473 809 */ 474 bool KeyBinder::mouseButtonPressed( const MouseState& state,MouseButton::Enum id)810 bool KeyBinder::mouseButtonPressed(MouseButton::Enum id) 475 811 { 476 812 // find the appropriate key binding 477 execute SimpleBinding(bindingsMouseButtonPress_[int(id)]);813 executeBinding(bindingsMouseButtons_[int(id)].OnPress, 1.0, 1.0); 478 814 479 815 return true; … … 485 821 @param id The ID of the mouse button 486 822 */ 487 bool KeyBinder::mouseButtonReleased( const MouseState& state,MouseButton::Enum id)823 bool KeyBinder::mouseButtonReleased(MouseButton::Enum id) 488 824 { 489 825 // find the appropriate key binding 490 execute SimpleBinding(bindingsMouseButtonRelease_[int(id)]);826 executeBinding(bindingsMouseButtons_[int(id)].OnRelease, 1.0, 1.0); 491 827 492 828 return true; … … 498 834 @param id The ID of the mouse button 499 835 */ 500 bool KeyBinder::mouseButtonHeld( const MouseState& state,MouseButton::Enum id)836 bool KeyBinder::mouseButtonHeld(MouseButton::Enum id) 501 837 { 502 838 // find the appropriate key binding 503 execute SimpleBinding(bindingsMouseButtonHold_[int(id)]);504 505 return true; 506 } 507 508 bool KeyBinder::joyStickButtonPressed( const JoyStickState& state, int button)839 executeBinding(bindingsMouseButtons_[int(id)].OnHold, 1.0, 1.0); 840 841 return true; 842 } 843 844 bool KeyBinder::joyStickButtonPressed(int joyStickID, int button) 509 845 { 510 846 // find the appropriate key binding 511 execute SimpleBinding(bindingsJoyStickButtonPress_[button]);512 513 return true; 514 } 515 516 bool KeyBinder::joyStickButtonReleased( const JoyStickState& state, int button)847 executeBinding(bindingsJoyStickButtons_[button].OnPress, 1.0, 1.0); 848 849 return true; 850 } 851 852 bool KeyBinder::joyStickButtonReleased(int joyStickID, int button) 517 853 { 518 854 // find the appropriate key binding 519 execute SimpleBinding(bindingsJoyStickButtonRelease_[button]);520 521 return true; 522 } 523 524 bool KeyBinder::joyStickButtonHeld( const JoyStickState& state, int button)855 executeBinding(bindingsJoyStickButtons_[button].OnRelease, 1.0, 1.0); 856 857 return true; 858 } 859 860 bool KeyBinder::joyStickButtonHeld(int joyStickID, int button) 525 861 { 526 862 // find the appropriate key binding 527 executeSimpleBinding(bindingsJoyStickButtonHold_[button]); 528 529 return true; 530 } 531 532 bool KeyBinder::joyStickAxisMoved(const JoyStickState& state, int axis) 533 { 534 return true; 535 } 536 537 bool KeyBinder::joyStickSliderMoved(const JoyStickState& state, int index) 538 { 539 return true; 540 } 541 542 bool KeyBinder::joyStickPovMoved(const JoyStickState& state, int index) 543 { 544 return true; 545 } 546 547 bool KeyBinder::joyStickVector3Moved(const JoyStickState& state, int index) 548 { 549 return true; 550 } 551 863 executeBinding(bindingsJoyStickButtons_[button].OnHold, 1.0, 1.0); 864 865 return true; 866 } 867 868 bool KeyBinder::joyStickAxisMoved(int joyStickID, int axis, int value) 869 { 870 // TODO: check whether 16 bit integer as general axis value is a good idea (works under windows) 871 halfAxes_[8 + axis].hasChanged = true; 872 if (value >= 0) 873 { 874 halfAxes_[8 + axis].abs = ((float)value)/0x1000; 875 halfAxes_[8 + axis].hasChanged = true; 876 } 877 else 878 { 879 halfAxes_[8 + axis + 1].abs = -((float)value)/0x1000; 880 halfAxes_[8 + axis + 1].hasChanged = true; 881 } 882 return true; 883 } 552 884 553 885 -
code/branches/input/src/core/InputHandler.h
r1293 r1323 40 40 41 41 #include "ois/OIS.h" 42 #include "util/Math.h" 42 43 #include "OrxonoxClass.h" 43 44 #include "CommandExecutor.h" … … 46 47 namespace orxonox 47 48 { 48 namespace KeybindSetting 49 { 50 enum KeybindSetting 51 { 52 None, 53 OnPress, 54 OnRelease, 55 Continuous, 56 }; 57 } 58 59 struct _CoreExport KeyBinding 49 struct _CoreExport AxisCommand 60 50 { 61 51 std::string commandStr; 62 52 CommandEvaluation evaluation; 63 }; 64 53 bool bRelative; 54 float value; 55 unsigned int nValuesAdded; 56 }; 57 58 struct _CoreExport SimpleCommand 59 { 60 // for simple binding; direct 61 std::string commandStr; 62 CommandEvaluation evaluation; 63 64 // axis binding; buffered 65 AxisCommand* axisCommand; 66 float axisModifier; 67 }; 68 69 struct _CoreExport KeyBinding 70 { 71 void clear() { commands = 0; nCommands = 0; } 72 SimpleCommand* commands; 73 unsigned int nCommands; 74 }; 75 76 struct _CoreExport KeyBindingBundle 77 { 78 KeyBinding OnPress; 79 KeyBinding OnRelease; 80 KeyBinding OnHold; 81 }; 82 83 struct _CoreExport HalfAxis 84 { 85 float rel; 86 float abs; 87 float threshold; 88 bool wasDown; 89 bool hasChanged; 90 }; 91 65 92 66 93 /** … … 75 102 76 103 bool loadBindings(); 77 void clearBindings( );104 void clearBindings(bool bInit = false); 78 105 79 106 void setConfigValues(); 80 107 81 108 private: // functions 82 83 bool executeSimpleBinding(KeyBinding &binding); 109 bool readBindings(std::string* names, std::string* bindingStrings, KeyBindingBundle* bindings, unsigned int size); 110 bool executeBinding(KeyBinding& binding, float axisRel, float axisAbs); 111 void clearBundle(KeyBindingBundle& bundle, bool bInit); 112 113 void tick(float dt); 84 114 85 115 bool keyPressed (const KeyEvent& evt); … … 87 117 bool keyHeld (const KeyEvent& evt); 88 118 89 bool mouseButtonPressed (const MouseState& state, MouseButton::Enum id); 90 bool mouseButtonReleased(const MouseState& state, MouseButton::Enum id); 91 bool mouseButtonHeld (const MouseState& state, MouseButton::Enum id); 92 bool mouseMoved (const MouseState& state); 93 bool mouseScrolled (const MouseState& state); 94 95 bool joyStickButtonPressed (const JoyStickState& state, int button); 96 bool joyStickButtonReleased(const JoyStickState& state, int button); 97 bool joyStickButtonHeld (const JoyStickState& state, int button); 98 bool joyStickAxisMoved (const JoyStickState& state, int axis) ; 99 bool joyStickSliderMoved (const JoyStickState& state, int index) ; 100 bool joyStickPovMoved (const JoyStickState& state, int index) ; 101 bool joyStickVector3Moved (const JoyStickState& state, int index) ; 119 bool mouseButtonPressed (MouseButton::Enum id); 120 bool mouseButtonReleased(MouseButton::Enum id); 121 bool mouseButtonHeld (MouseButton::Enum id); 122 bool mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize); 123 bool mouseScrolled (int abs, int rel); 124 125 bool joyStickButtonPressed (int joyStickID, int button); 126 bool joyStickButtonReleased(int joyStickID, int button); 127 bool joyStickButtonHeld (int joyStickID, int button); 128 bool joyStickAxisMoved (int joyStickID, int axis, int value) ; 102 129 103 130 private: // variables 104 105 131 //! denotes the number of different keys there are in OIS. 106 static const int numberOfKeys_s = 0xEE; 107 //! Array of input events for every pressed key 108 KeyBinding bindingsKeyPress_ [numberOfKeys_s]; 109 //! Array of input events for every released key 110 KeyBinding bindingsKeyRelease_[numberOfKeys_s]; 111 //! Array of input events for every held key 112 KeyBinding bindingsKeyHold_ [numberOfKeys_s]; 132 static const unsigned int nKeys_s = 0xEE; 133 //! Actual key bindings as bundle for Press, Hold and Release 134 KeyBindingBundle bindingsKeys_ [nKeys_s]; 113 135 //! Names of the keys as strings 114 std::string keyNames_[numberOfKeys_s]; 136 std::string namesKeys_ [nKeys_s]; 137 //! The configured string values 138 std::string bindingStringsKeys_[nKeys_s]; 115 139 116 140 //! denotes the number of different mouse buttons there are in OIS. 117 static const int numberOfMouseButtons_s = 8; 118 //! Array of input events for every pressed mouse button 119 KeyBinding bindingsMouseButtonPress_ [numberOfMouseButtons_s]; 120 //! Array of input events for every released mouse button 121 KeyBinding bindingsMouseButtonRelease_[numberOfMouseButtons_s]; 122 //! Array of input events for every held mouse button 123 KeyBinding bindingsMouseButtonHold_ [numberOfMouseButtons_s]; 124 //! Key binding for mouse moved event 125 KeyBinding bindingMouseMoved_; 126 //! Key binding for mouse scrolled event 127 KeyBinding bindingMouseScrolled_; 141 static const unsigned int nMouseButtons_s = 8; 142 //! Actual key bindings as bundle for Press, Hold and Release 143 KeyBindingBundle bindingsMouseButtons_ [nMouseButtons_s]; 128 144 //! Names of the mouse buttons as strings 129 std::string mouseButtonNames_[numberOfMouseButtons_s]; 145 std::string namesMouseButtons_ [nMouseButtons_s]; 146 //! The configured string values 147 std::string bindingStringsMouseButtons_[nMouseButtons_s]; 130 148 131 149 //! denotes the number of different joy stick buttons there are in OIS. 132 static const int numberOfJoyStickButtons_s = 32; 133 //! Array of input events for every pressed joy stick button 134 KeyBinding bindingsJoyStickButtonPress_ [numberOfJoyStickButtons_s]; 135 //! Array of input events for every released joy stick button 136 KeyBinding bindingsJoyStickButtonRelease_[numberOfJoyStickButtons_s]; 137 //! Array of input events for every held joy stick button 138 KeyBinding bindingsJoyStickButtonHold_ [numberOfJoyStickButtons_s]; 150 static const unsigned int nJoyStickButtons_s = 32 + 4 * 4; // 32 buttons and 4 POVs with 4 buttons 151 //! Actual key bindings as bundle for Press, Hold and Release 152 KeyBindingBundle bindingsJoyStickButtons_ [nJoyStickButtons_s]; 139 153 //! Names of the joy stick buttons as strings 140 std::string joyStickButtonNames_[numberOfJoyStickButtons_s]; 141 154 std::string namesJoyStickButtons_ [nJoyStickButtons_s]; 155 //! The configured string values 156 std::string bindingStringsJoyStickButtons_[nJoyStickButtons_s]; 157 158 //! denotes the number of half axes (every axis twice) there can be. 159 static const unsigned int nHalfAxes_s = 56; 160 /** 161 * Array with all the half axes for mouse and joy sticks. 162 * Bear in mind that the positions are fixed and that the first entry is the 163 * positive one and the second is negative. 164 * Sequence is as follows: 165 * 0 - 3: Mouse x and y 166 * 4 - 7: Mouse scroll wheels 1 and 2 (2 not yet supported) 167 * 8 - 23: joy stick (slider) axes 1 to 8 168 * 24 - 55: joy stick axes 1 - 16 169 */ 170 HalfAxis halfAxes_[nHalfAxes_s]; 171 //! Actual key bindings as bundle for Press, Hold and Release 172 KeyBindingBundle bindingsHalfAxes_ [nHalfAxes_s]; 173 //! Names of the half axes 174 std::string namesHalfAxes_ [nHalfAxes_s]; 175 //! The configured string values 176 std::string bindingStringsHalfAxes_[nHalfAxes_s]; 177 178 /** 179 * Commands that have additional parameters (axes) are executed at the end of 180 * the tick() so that all values can be buffered for single execution. 181 */ 182 std::vector<AxisCommand*> axisCommands_; 142 183 }; 143 184 -
code/branches/input/src/core/InputInterfaces.h
r1293 r1323 38 38 39 39 #include "ois/OIS.h" 40 #include "util/Math.h" 40 41 41 42 namespace orxonox … … 239 240 }; 240 241 241 typedef OIS::MouseState MouseState;242 243 class _CoreExport JoyStickState : OIS::JoyStickState242 //typedef OIS::MouseState MouseState; 243 244 /*class _CoreExport JoyStickState 244 245 { 245 246 public: … … 247 248 JoyStickState() { clear(); } 248 249 int mJoyStickID; 250 JoyStickState() { clear(); } 251 252 std::vector<bool> mButtons; 253 int axes[16]; 254 std::vector<Vector3> mVectors; 255 };*/ 256 257 class _CoreExport InputTickable 258 { 259 public: 260 virtual ~InputTickable() { } 261 virtual void tick(float dt) = 0; 249 262 }; 250 263 … … 252 265 @brief Interface class used for key input listeners. 253 266 */ 254 class _CoreExport KeyHandler 267 class _CoreExport KeyHandler : virtual public InputTickable 255 268 { 256 269 public: … … 264 277 @brief Interface class used for mouse input listeners. 265 278 */ 266 class _CoreExport MouseHandler 279 class _CoreExport MouseHandler : virtual public InputTickable 267 280 { 268 281 public: 269 282 virtual ~MouseHandler() { } 270 virtual bool mouseButtonPressed ( const MouseState& state,MouseButton::Enum id) = 0;271 virtual bool mouseButtonReleased( const MouseState& state,MouseButton::Enum id) = 0;272 virtual bool mouseButtonHeld ( const MouseState& state,MouseButton::Enum id) = 0;273 virtual bool mouseMoved ( const MouseState& state) = 0;274 virtual bool mouseScrolled ( const MouseState& state)= 0;283 virtual bool mouseButtonPressed (MouseButton::Enum id) = 0; 284 virtual bool mouseButtonReleased(MouseButton::Enum id) = 0; 285 virtual bool mouseButtonHeld (MouseButton::Enum id) = 0; 286 virtual bool mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) = 0; 287 virtual bool mouseScrolled (int abs, int rel) = 0; 275 288 }; 276 289 … … 279 292 @brief Interface class used for joy stick input listeners. 280 293 */ 281 class _CoreExport JoyStickHandler 294 class _CoreExport JoyStickHandler : virtual public InputTickable 282 295 { 283 296 public: 284 297 virtual ~JoyStickHandler() { } 285 virtual bool joyStickButtonPressed (const JoyStickState& state, int button) = 0; 286 virtual bool joyStickButtonReleased(const JoyStickState& state, int button) = 0; 287 virtual bool joyStickButtonHeld (const JoyStickState& state, int button) = 0; 288 virtual bool joyStickAxisMoved (const JoyStickState& state, int axis) = 0; 289 virtual bool joyStickSliderMoved (const JoyStickState& state, int index) {return true;} 290 virtual bool joyStickPovMoved (const JoyStickState& state, int index) {return true;} 291 virtual bool joyStickVector3Moved (const JoyStickState& state, int index) {return true;} 298 virtual bool joyStickButtonPressed (int joyStickID, int button) = 0; 299 virtual bool joyStickButtonReleased(int joyStickID, int button) = 0; 300 virtual bool joyStickButtonHeld (int joyStickID, int button) = 0; 301 virtual bool joyStickAxisMoved (int joyStickID, int axis, int value) = 0; 302 //virtual bool joyStickVector3Moved (int joyStickID, int index /*, fill list*/) {return true;} 292 303 }; 293 304 -
code/branches/input/src/core/InputManager.cc
r1293 r1323 267 267 activeJoyStickHandlers_.resize(joySticksSize_); 268 268 joyStickButtonsDown_.resize(joySticksSize_); 269 povStates_.resize(joySticksSize_); 270 sliderStates_.resize(joySticksSize_); 269 271 return success; 270 272 } … … 348 350 } 349 351 CCOUT(ORX_DEBUG) << "Joy sticks destroyed." << std::endl; 352 } 353 354 void InputManager::_updateTickables() 355 { 356 // we can use a set to have a list of unique pointers (an object can implement all 3 handlers) 357 std::set<InputTickable*> tempSet; 358 for (unsigned int iHandler = 0; iHandler < activeKeyHandlers_.size(); iHandler++) 359 tempSet.insert(activeKeyHandlers_[iHandler]); 360 for (unsigned int iHandler = 0; iHandler < activeMouseHandlers_.size(); iHandler++) 361 tempSet.insert(activeMouseHandlers_[iHandler]); 362 for (unsigned int iJoyStick = 0; iJoyStick < joySticksSize_; iJoyStick++) 363 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 364 tempSet.insert(activeJoyStickHandlers_[iJoyStick][iHandler]); 365 366 // copy the content of the set back to the actual vector 367 activeHandlers_.clear(); 368 for (std::set<InputTickable*>::const_iterator itHandler = tempSet.begin(); itHandler != tempSet.end(); itHandler++) 369 activeHandlers_.push_back(*itHandler); 350 370 } 351 371 … … 389 409 390 410 case IS_GUI: 391 // FIXME: do stuff411 // TODO: do stuff 392 412 break; 393 413 … … 426 446 for (unsigned int iButton = 0; iButton < mouseButtonsDown_.size(); iButton++) 427 447 for (unsigned int iHandler = 0; iHandler < activeMouseHandlers_.size(); iHandler++) 428 activeMouseHandlers_[iHandler]->mouseButtonHeld(mouse _->getMouseState(), mouseButtonsDown_[iButton]);448 activeMouseHandlers_[iHandler]->mouseButtonHeld(mouseButtonsDown_[iButton]); 429 449 430 450 // call all the handlers for the held joy stick button events … … 432 452 for (unsigned int iButton = 0; iButton < joyStickButtonsDown_[iJoyStick].size(); iButton++) 433 453 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 434 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonHeld( 435 JoyStickState(joySticks_[iJoyStick]->getJoyStickState(), iJoyStick), joyStickButtonsDown_[iJoyStick][iButton]); 454 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonHeld(iJoyStick, joyStickButtonsDown_[iJoyStick][iButton]); 455 456 457 // call the ticks 458 for (unsigned int iHandler = 0; iHandler < activeHandlers_.size(); iHandler++) 459 activeHandlers_[iHandler]->tick(dt); 436 460 } 437 461 … … 508 532 { 509 533 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 510 activeMouseHandlers_[i]->mouseMoved(e.state); 534 activeMouseHandlers_[i]->mouseMoved(IntVector2(e.state.X.abs, e.state.Y.abs), 535 IntVector2(e.state.X.rel, e.state.Y.rel), IntVector2(e.state.width, e.state.height)); 511 536 } 512 537 … … 515 540 { 516 541 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 517 activeMouseHandlers_[i]->mouseScrolled(e.state );542 activeMouseHandlers_[i]->mouseScrolled(e.state.Z.abs, e.state.Z.rel); 518 543 } 519 544 … … 536 561 537 562 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 538 activeMouseHandlers_[i]->mouseButtonPressed( e.state,(MouseButton::Enum)id);563 activeMouseHandlers_[i]->mouseButtonPressed((MouseButton::Enum)id); 539 564 540 565 return true; … … 559 584 560 585 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 561 activeMouseHandlers_[i]->mouseButtonReleased( e.state,(MouseButton::Enum)id);586 activeMouseHandlers_[i]->mouseButtonReleased((MouseButton::Enum)id); 562 587 563 588 return true; … … 584 609 585 610 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 586 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonPressed( JoyStickState(arg.state, iJoyStick), button);611 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonPressed(iJoyStick, button); 587 612 588 613 return true; … … 609 634 610 635 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 611 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonReleased( JoyStickState(arg.state, iJoyStick), button);636 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonReleased(iJoyStick, button); 612 637 613 638 return true; … … 616 641 bool InputManager::axisMoved(const OIS::JoyStickEvent &arg, int axis) 617 642 { 643 //CCOUT(3) << arg.state.mAxes[axis].abs << std::endl; 618 644 // use the device to identify which one called the method 619 645 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; … … 622 648 iJoyStick++; 623 649 650 // keep in mind that the first 8 axes are reserved for the sliders 624 651 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 625 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickAxisMoved( JoyStickState(arg.state, iJoyStick), axis);652 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickAxisMoved(iJoyStick, axis + 8, arg.state.mAxes[axis].abs); 626 653 627 654 return true; … … 630 657 bool InputManager::sliderMoved(const OIS::JoyStickEvent &arg, int id) 631 658 { 659 //CCOUT(3) << arg.state.mSliders[id].abX << "\t |" << arg.state.mSliders[id].abY << std::endl; 632 660 // use the device to identify which one called the method 633 661 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; … … 636 664 iJoyStick++; 637 665 638 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 639 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickSliderMoved(JoyStickState(arg.state, iJoyStick), id); 666 if (sliderStates_[iJoyStick].sliderStates[id].x != arg.state.mSliders[id].abX) 667 { 668 // slider X axis changed 669 sliderStates_[iJoyStick].sliderStates[id].x = arg.state.mSliders[id].abX; 670 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 671 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickAxisMoved(iJoyStick, id * 2, arg.state.mSliders[id].abX); 672 } 673 else if (sliderStates_[iJoyStick].sliderStates[id].y != arg.state.mSliders[id].abY) 674 { 675 // slider Y axis changed 676 sliderStates_[iJoyStick].sliderStates[id].y = arg.state.mSliders[id].abY; 677 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 678 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickAxisMoved(iJoyStick, id * 2 + 1, arg.state.mSliders[id].abY); 679 } 640 680 641 681 return true; … … 650 690 iJoyStick++; 651 691 652 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 653 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickPovMoved(JoyStickState(arg.state, iJoyStick), id); 654 655 return true; 656 } 657 658 bool InputManager::vector3Moved(const OIS::JoyStickEvent &arg, int id) 692 // translate the POV into 8 simple buttons 693 int lastState = povStates_[iJoyStick][id]; 694 if (lastState & OIS::Pov::North) 695 buttonReleased(arg, 32 + id * 4 + 0); 696 if (lastState & OIS::Pov::South) 697 buttonReleased(arg, 32 + id * 4 + 1); 698 if (lastState & OIS::Pov::East) 699 buttonReleased(arg, 32 + id * 4 + 2); 700 if (lastState & OIS::Pov::West) 701 buttonReleased(arg, 32 + id * 4 + 3); 702 703 povStates_[iJoyStick].povStates[id] = arg.state.mPOV[id].direction; 704 int currentState = povStates_[iJoyStick][id]; 705 if (currentState & OIS::Pov::North) 706 buttonPressed(arg, 32 + id * 4 + 0); 707 if (currentState & OIS::Pov::South) 708 buttonPressed(arg, 32 + id * 4 + 1); 709 if (currentState & OIS::Pov::East) 710 buttonPressed(arg, 32 + id * 4 + 2); 711 if (currentState & OIS::Pov::West) 712 buttonPressed(arg, 32 + id * 4 + 3); 713 714 return true; 715 } 716 717 /*bool InputManager::vector3Moved(const OIS::JoyStickEvent &arg, int id) 659 718 { 660 719 // use the device to identify which one called the method … … 668 727 669 728 return true; 670 } 729 }*/ 671 730 672 731 … … 735 794 } 736 795 737 const MouseState InputManager::getMouseState()796 /*const MouseState InputManager::getMouseState() 738 797 { 739 798 if (_getSingleton().mouse_) … … 741 800 else 742 801 return MouseState(); 743 } 744 745 const JoyStickState InputManager::getJoyStickState(unsigned int ID)802 }*/ 803 804 /*const JoyStickState InputManager::getJoyStickState(unsigned int ID) 746 805 { 747 806 if (ID < _getSingleton().joySticksSize_) … … 749 808 else 750 809 return JoyStickState(); 751 } 810 }*/ 752 811 753 812 … … 882 941 if ((*it) == (*mapIt).second) 883 942 { 884 _getSingleton().stateRequest_ = IS_CUSTOM;885 943 return true; 886 944 } … … 888 946 _getSingleton().activeKeyHandlers_.push_back((*mapIt).second); 889 947 _getSingleton().stateRequest_ = IS_CUSTOM; 948 _getSingleton()._updateTickables(); 890 949 return true; 891 950 } … … 910 969 _getSingleton().activeKeyHandlers_.erase(it); 911 970 _getSingleton().stateRequest_ = IS_CUSTOM; 971 _getSingleton()._updateTickables(); 912 972 return true; 913 973 } 914 974 } 915 _getSingleton().stateRequest_ = IS_CUSTOM;916 975 return true; 917 976 } … … 1010 1069 if ((*it) == (*mapIt).second) 1011 1070 { 1012 _getSingleton().stateRequest_ = IS_CUSTOM;1013 1071 return true; 1014 1072 } … … 1016 1074 _getSingleton().activeMouseHandlers_.push_back((*mapIt).second); 1017 1075 _getSingleton().stateRequest_ = IS_CUSTOM; 1076 _getSingleton()._updateTickables(); 1018 1077 return true; 1019 1078 } … … 1038 1097 _getSingleton().activeMouseHandlers_.erase(it); 1039 1098 _getSingleton().stateRequest_ = IS_CUSTOM; 1099 _getSingleton()._updateTickables(); 1040 1100 return true; 1041 1101 } 1042 1102 } 1043 _getSingleton().stateRequest_ = IS_CUSTOM;1044 1103 return true; 1045 1104 } … … 1147 1206 if ((*it) == (*handlerIt).second) 1148 1207 { 1149 _getSingleton().stateRequest_ = IS_CUSTOM;1150 1208 return true; 1151 1209 } … … 1153 1211 _getSingleton().activeJoyStickHandlers_[ID].push_back((*handlerIt).second); 1154 1212 _getSingleton().stateRequest_ = IS_CUSTOM; 1213 _getSingleton()._updateTickables(); 1155 1214 return true; 1156 1215 } … … 1180 1239 _getSingleton().activeJoyStickHandlers_[ID].erase(it); 1181 1240 _getSingleton().stateRequest_ = IS_CUSTOM; 1241 _getSingleton()._updateTickables(); 1182 1242 return true; 1183 1243 } -
code/branches/input/src/core/InputManager.h
r1293 r1323 42 42 43 43 #include "ois/OIS.h" 44 #include "util/Math.h" 44 45 #include "Tickable.h" 45 46 #include "InputInterfaces.h" … … 47 48 namespace orxonox 48 49 { 50 /** 51 * Helper class to realise a vector<int[4]> 52 */ 53 class POVStates 54 { 55 public: 56 int operator[](unsigned int index) { return povStates[index]; } 57 int povStates[4]; 58 }; 59 60 /** 61 * Helper class to realise a vector< {int[4], int[4]} > 62 */ 63 class SliderStates 64 { 65 public: 66 IntVector2 sliderStates[4]; 67 }; 68 49 69 /** 50 70 @brief Captures and distributes mouse and keyboard input. … … 85 105 static bool isModifierDown(KeyboardModifier::Enum modifier); 86 106 static bool isKeyDown(KeyCode::Enum key); 87 static const MouseState getMouseState();88 static const JoyStickState getJoyStickState(unsigned int ID);107 //static const MouseState getMouseState(); 108 //static const JoyStickState getJoyStickState(unsigned int ID); 89 109 90 110 static void setWindowExtents(const int width, const int height); … … 130 150 void _destroyMouse(); 131 151 void _destroyJoySticks(); 152 153 void _updateTickables(); 132 154 133 155 void tick(float dt); … … 144 166 bool sliderMoved (const OIS::JoyStickEvent &arg, int id); 145 167 bool povMoved (const OIS::JoyStickEvent &arg, int id); 146 bool vector3Moved (const OIS::JoyStickEvent &arg, int id);168 //bool vector3Moved (const OIS::JoyStickEvent &arg, int id); 147 169 148 170 static InputManager& _getSingleton(); … … 160 182 unsigned int keyboardModifiers_; 161 183 184 //! Keeps track of the joy stick POV states 185 std::vector<POVStates> povStates_; 186 //! Keeps track of the possibly two slider axes 187 std::vector<SliderStates> sliderStates_; 188 162 189 std::map<std::string, KeyHandler*> keyHandlers_; 163 190 std::map<std::string, MouseHandler*> mouseHandlers_; … … 167 194 std::vector<MouseHandler*> activeMouseHandlers_; 168 195 std::vector<std::vector<JoyStickHandler*> > activeJoyStickHandlers_; 196 std::vector<InputTickable*> activeHandlers_; 169 197 170 198 std::vector<Key> keysDown_; -
code/branches/input/src/core/SignalHandler.cc
r1293 r1323 150 150 { 151 151 std::cout << "Trying to restore XAutoKeyRepeat" << std::endl; 152 153 154 { 155 156 152 Display* display; 153 if ((display = XOpenDisplay(0))) 154 { 155 XAutoRepeatOn(display); 156 XCloseDisplay(display); 157 157 } 158 158 } … … 320 320 321 321 std::string timeString = "\n\n\n\n" 322 323 324 322 "=======================================================\n" 323 "= time: " + std::string(ctime(&now)) + 324 "=======================================================\n"; 325 325 bt.insert(0, timeString); 326 326 -
code/branches/input/src/orxonox/objects/SpaceShip.cc
r1293 r1323 38 38 39 39 #include "CameraHandler.h" 40 #include "tinyxml/tinyxml.h" 41 #include "ois/OIS.h" 42 #include "util/Convert.h" 40 //#include "util/Convert.h" 43 41 #include "util/Math.h" 44 42 #include "core/CoreIncludes.h" … … 219 217 } 220 218 221 void SpaceShip::loadParams(TiXmlElement* xmlElem)222 {223 Model::loadParams(xmlElem);224 this->create();225 this->getFocus();226 /*227 if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))228 {229 std::string forwardStr = xmlElem->Attribute("forward");230 std::string rotateupdownStr = xmlElem->Attribute("rotateupdown");231 std::string rotaterightleftStr = xmlElem->Attribute("rotaterightleft");232 std::string looprightleftStr = xmlElem->Attribute("looprightleft");233 234 String2Number<float>(this->maxSpeedForward_, forwardStr);235 String2Number<float>(this->maxSpeedRotateUpDown_, rotateupdownStr);236 String2Number<float>(this->maxSpeedRotateRightLeft_, rotaterightleftStr);237 String2Number<float>(this->maxSpeedLoopRightLeft_, looprightleftStr);238 239 COUT(4) << "Loader: Initialized spaceship steering with values " << maxSpeedForward_ << " " << maxSpeedRotateUpDown_ << " " << maxSpeedRotateRightLeft_ << " " << maxSpeedLoopRightLeft_ << " " << std::endl;240 }241 */242 if (xmlElem->Attribute("maxSpeed") && xmlElem->Attribute("maxSideAndBackSpeed") && xmlElem->Attribute("maxRotation") && xmlElem->Attribute("transAcc") && xmlElem->Attribute("rotAcc") && xmlElem->Attribute("transDamp") && xmlElem->Attribute("rotDamp"))243 {244 245 std::string msStr = xmlElem->Attribute("maxSpeed");246 std::string msabsStr = xmlElem->Attribute("maxSideAndBackSpeed");247 std::string mrStr = xmlElem->Attribute("maxRotation");248 std::string taStr = xmlElem->Attribute("transAcc");249 std::string raStr = xmlElem->Attribute("rotAcc");250 std::string tdStr = xmlElem->Attribute("transDamp");251 std::string rdStr = xmlElem->Attribute("rotDamp");252 253 convertValue<std::string, float>(&this->maxSpeed_, msStr);254 convertValue<std::string, float>(&this->maxSideAndBackSpeed_, msabsStr);255 convertValue<std::string, float>(&this->maxRotation_, mrStr);256 convertValue<std::string, float>(&this->translationAcceleration_, taStr);257 convertValue<std::string, float>(&this->rotationAcceleration_, raStr);258 convertValue<std::string, float>(&this->translationDamping_, tdStr);259 convertValue<std::string, float>(&this->rotationDamping_, rdStr);260 261 this->maxRotationRadian_ = Radian(this->maxRotation_);262 this->rotationAccelerationRadian_ = Radian(this->rotationAcceleration_);263 this->rotationDampingRadian_ = Radian(this->rotationDamping_);264 265 COUT(4) << "Loader: Initialized SpaceShip" << std::endl;266 }267 268 if (xmlElem->Attribute("camera"))269 {270 this->setCamera();271 }272 }273 274 219 void SpaceShip::setCamera(const std::string& camera) 275 220 { … … 351 296 } 352 297 353 bool SpaceShip::mouseMoved( const MouseState& state)298 bool SpaceShip::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) 354 299 { 355 300 /* … … 368 313 if (this->bRMousePressed_) 369 314 { 370 this->camNode_->roll(Degree(- state.X.rel* 0.10));371 this->camNode_->yaw(Degree( state.Y.rel* 0.10));315 this->camNode_->roll(Degree(-rel.x * 0.10)); 316 this->camNode_->yaw(Degree(rel.y * 0.10)); 372 317 } 373 318 else 374 319 { 375 float minDimension = state.height;376 if ( state.width< minDimension)377 minDimension = state.width;378 379 this->mouseX_ += state.X.rel;320 float minDimension = clippingSize.y; 321 if (clippingSize.x < minDimension) 322 minDimension = clippingSize.x; 323 324 this->mouseX_ += rel.x; 380 325 if (this->mouseX_ < -minDimension) 381 326 this->mouseX_ = -minDimension; … … 383 328 this->mouseX_ = minDimension; 384 329 385 this->mouseY_ += state.Y.rel;330 this->mouseY_ += rel.y; 386 331 if (this->mouseY_ < -minDimension) 387 332 this->mouseY_ = -minDimension; … … 411 356 } 412 357 413 bool SpaceShip::mouseButtonPressed( const MouseState& state,MouseButton::Enum id)358 bool SpaceShip::mouseButtonPressed(MouseButton::Enum id) 414 359 { 415 360 if (id == MouseButton::Left) … … 421 366 } 422 367 423 bool SpaceShip::mouseButtonReleased( const MouseState& state,MouseButton::Enum id)368 bool SpaceShip::mouseButtonReleased(MouseButton::Enum id) 424 369 { 425 370 if (id == MouseButton::Left) … … 564 509 else 565 510 this->tt_->setRate(0); 566 567 /* 568 if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W)) 569 this->moveForward(speed); 570 else 571 this->moveForward(0); 572 573 if(mKeyboard->isKeyDown(OIS::KC_DOWN) || mKeyboard->isKeyDown(OIS::KC_S)) 574 this->brakeForward(speed); 575 else 576 this->brakeForward(speed/10); 577 578 if (mKeyboard->isKeyDown(OIS::KC_RIGHT) || mKeyboard->isKeyDown(OIS::KC_D)) 579 this->loopRight(loop); 580 else 581 this->loopRight(0); 582 583 if (mKeyboard->isKeyDown(OIS::KC_LEFT) || mKeyboard->isKeyDown(OIS::KC_A)) 584 this->loopLeft(loop); 585 else 586 this->loopLeft(0); 587 588 if(moved) 589 { 590 if (mouseY<=0) 591 this->rotateUp(-mouseY*rotate); 592 if (mouseY>0) 593 this->rotateDown(mouseY*rotate); 594 if (mouseX>0) 595 this->rotateRight(mouseX*rotate); 596 if (mouseX<=0) 597 this->rotateLeft(-mouseX*rotate); 598 599 mouseY = 0; 600 mouseX = 0; 601 moved = false; 602 }*/ 603 /* else 604 { 605 this->rotateUp(0); 606 this->rotateDown(0); 607 this->rotateRight(0); 608 this->rotateLeft(0); 609 }*/ 610 /* 611 if(moveForward_ > 0) 612 { 613 accelerationForward_ = moveForward_; 614 if(speedForward_ < maxSpeedForward_) 615 speedForward_ += accelerationForward_*dt; 616 if(speedForward_ > maxSpeedForward_) 617 speedForward_ = maxSpeedForward_; 618 } 619 620 if(moveForward_ <= 0) 621 { 622 accelerationForward_ = -brakeForward_; 623 if(speedForward_ > 0) 624 speedForward_ += accelerationForward_*dt; 625 if(speedForward_ < 0) 626 speedForward_ = 0; 627 } 628 629 if(rotateUp_ > 0) 630 { 631 accelerationRotateUpDown_ = rotateUp_; 632 if(speedRotateUpDown_ < maxSpeedRotateUpDown_) 633 speedRotateUpDown_ += accelerationRotateUpDown_*dt; 634 if(speedRotateUpDown_ > maxSpeedRotateUpDown_) 635 speedRotateUpDown_ = maxSpeedRotateUpDown_; 636 } 637 638 if(rotateDown_ > 0) 639 { 640 accelerationRotateUpDown_ = rotateDown_; 641 if(speedRotateUpDown_ > -maxSpeedRotateUpDown_) 642 speedRotateUpDown_ -= accelerationRotateUpDown_*dt; 643 if(speedRotateUpDown_ < -maxSpeedRotateUpDown_) 644 speedRotateUpDown_ = -maxSpeedRotateUpDown_; 645 } 646 647 if(rotateUp_ == 0 && rotateDown_ == 0) 648 { 649 accelerationRotateUpDown_ = brakeRotate_; 650 if(speedRotateUpDown_ > 0) 651 speedRotateUpDown_ -= accelerationRotateUpDown_*dt; 652 if(speedRotateUpDown_ < 0) 653 speedRotateUpDown_ += accelerationRotateUpDown_*dt; 654 if(fabs(speedRotateUpDown_) < accelerationRotateUpDown_*dt) 655 speedRotateUpDown_ = 0; 656 } 657 658 if(rotateRight_ > 0) 659 { 660 accelerationRotateRightLeft_ = rotateRight_; 661 if(speedRotateRightLeft_ > -maxSpeedRotateRightLeft_) 662 speedRotateRightLeft_ -= accelerationRotateRightLeft_*dt; 663 if(speedRotateRightLeft_ < -maxSpeedRotateRightLeft_) 664 speedRotateRightLeft_ = -maxSpeedRotateRightLeft_; 665 } 666 667 if(rotateLeft_ > 0) 668 { 669 accelerationRotateRightLeft_ = rotateLeft_; 670 if(speedRotateRightLeft_ < maxSpeedRotateRightLeft_) 671 speedRotateRightLeft_ += accelerationRotateRightLeft_*dt; 672 if(speedRotateRightLeft_ > maxSpeedRotateRightLeft_) 673 speedRotateRightLeft_ = maxSpeedRotateRightLeft_; 674 } 675 676 if(rotateRight_ == 0 && rotateLeft_ == 0) 677 { 678 accelerationRotateRightLeft_ = brakeRotate_; 679 if(speedRotateRightLeft_ > 0) 680 speedRotateRightLeft_ -= accelerationRotateRightLeft_*dt; 681 if(speedRotateRightLeft_ < 0) 682 speedRotateRightLeft_ += accelerationRotateRightLeft_*dt; 683 if(fabs(speedRotateRightLeft_) < accelerationRotateRightLeft_*dt) 684 speedRotateRightLeft_ = 0; 685 } 686 687 if(loopRight_ > 0) 688 { 689 accelerationLoopRightLeft_ = loopRight_; 690 if(speedLoopRightLeft_ < maxSpeedLoopRightLeft_) 691 speedLoopRightLeft_ += accelerationLoopRightLeft_*dt; 692 if(speedLoopRightLeft_ > maxSpeedLoopRightLeft_) 693 speedLoopRightLeft_ = maxSpeedLoopRightLeft_; 694 } 695 696 if(loopLeft_ > 0) 697 { 698 accelerationLoopRightLeft_ = loopLeft_; 699 if(speedLoopRightLeft_ > -maxSpeedLoopRightLeft_) 700 speedLoopRightLeft_ -= accelerationLoopRightLeft_*dt; 701 if(speedLoopRightLeft_ < -maxSpeedLoopRightLeft_) 702 speedLoopRightLeft_ = -maxSpeedLoopRightLeft_; 703 } 704 705 if(loopLeft_ == 0 && loopRight_ == 0) 706 { 707 accelerationLoopRightLeft_ = brakeLoop_; 708 if(speedLoopRightLeft_ > 0) 709 speedLoopRightLeft_ -= accelerationLoopRightLeft_*dt; 710 if(speedLoopRightLeft_ < 0) 711 speedLoopRightLeft_ += accelerationLoopRightLeft_*dt; 712 if(fabs(speedLoopRightLeft_) < accelerationLoopRightLeft_*dt) 713 speedLoopRightLeft_ = 0; 714 } 715 716 Vector3 transVector = Vector3::ZERO; 717 */ 718 /* 719 transVector.z = 1; 720 this->translate(transVector*speedForward_*dt, Ogre::Node::TS_LOCAL); 721 this->pitch(Degree(speedRotateUpDown_*dt), Ogre::Node::TS_LOCAL); 722 this->yaw(Degree(speedRotateRightLeft_*dt), Ogre::Node::TS_LOCAL); 723 this->roll(Degree(speedLoopRightLeft_*dt), Ogre::Node::TS_LOCAL); 724 */ 725 /* 726 transVector.x = 1; 727 this->translate(transVector*speedForward_*dt, Ogre::Node::TS_LOCAL); 728 this->yaw(Degree(speedRotateUpDown_*dt), Ogre::Node::TS_LOCAL); 729 this->roll(Degree(speedRotateRightLeft_*dt), Ogre::Node::TS_LOCAL); 730 this->pitch(Degree(speedLoopRightLeft_*dt), Ogre::Node::TS_LOCAL); 731 */ 732 } 733 /* 734 void SpaceShip::moveForward(float moveForward) { 735 moveForward_ = moveForward; 736 } 737 738 void SpaceShip::rotateUp(float rotateUp) { 739 rotateUp_ = rotateUp; 740 } 741 742 void SpaceShip::rotateDown(float rotateDown) { 743 rotateDown_ = rotateDown; 744 } 745 746 void SpaceShip::rotateLeft(float rotateLeft) { 747 rotateLeft_ = rotateLeft; 748 } 749 750 void SpaceShip::rotateRight(float rotateRight) { 751 rotateRight_ = rotateRight; 752 } 753 754 void SpaceShip::loopLeft(float loopLeft) { 755 loopLeft_ = loopLeft; 756 } 757 758 void SpaceShip::loopRight(float loopRight) { 759 loopRight_ = loopRight; 760 } 761 762 void SpaceShip::brakeForward(float brakeForward) { 763 brakeForward_ = brakeForward; 764 } 765 766 void SpaceShip::brakeRotate(float brakeRotate) { 767 brakeRotate_ = brakeRotate; 768 } 769 770 void SpaceShip::brakeLoop(float brakeLoop) { 771 brakeLoop_ = brakeLoop; 772 } 773 774 void SpaceShip::maxSpeedForward(float maxSpeedForward) { 775 maxSpeedForward_ = maxSpeedForward; 776 } 777 778 void SpaceShip::maxSpeedRotateUpDown(float maxSpeedRotateUpDown) { 779 maxSpeedRotateUpDown_ = maxSpeedRotateUpDown; 780 } 781 782 void SpaceShip::maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft) { 783 maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft; 784 } 785 786 void SpaceShip::maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft) { 787 maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft; 788 } 789 */ 511 } 512 790 513 } -
code/branches/input/src/orxonox/objects/SpaceShip.h
r1293 r1323 50 50 void init(); 51 51 void setConfigValues(); 52 virtual void loadParams(TiXmlElement* xmlElem);53 52 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 54 53 virtual void tick(float dt); … … 68 67 { SpaceShip::instance_s->setMaxSpeed(value); } 69 68 70 bool mouseButtonPressed ( const MouseState& state,MouseButton::Enum id);71 bool mouseButtonReleased( const MouseState& state,MouseButton::Enum id);72 bool mouseButtonHeld ( const MouseState& state,MouseButton::Enum id) { return true; }73 bool mouseMoved ( const MouseState& state);74 bool mouseScrolled ( const MouseState& state) { return true; }69 bool mouseButtonPressed (MouseButton::Enum id); 70 bool mouseButtonReleased(MouseButton::Enum id); 71 bool mouseButtonHeld (MouseButton::Enum id) { return true; } 72 bool mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize); 73 bool mouseScrolled (int abs, int rel) { return true; } 75 74 76 75 -
code/branches/input/src/util/Math.h
r1062 r1323 147 147 } 148 148 149 class _UtilExport IntVector2 150 { 151 public: 152 IntVector2() : x(0), y(0) { } 153 IntVector2(int _x, int _y) : x(_x), y(_y) { } 154 int x; 155 int y; 156 }; 157 149 158 #endif /* _Util_Math_H__ */ -
code/branches/input/src/util/SubString.cc
r1056 r1323 67 67 SubString::SubString(const std::string& string, 68 68 const std::string& delimiters, const std::string& delimiterNeighbours, bool emptyEntries, 69 char escapeChar, bool removeE xcapeChar, char safemode_char, bool removeSafemodeChar,69 char escapeChar, bool removeEscapeChar, char safemode_char, bool removeSafemodeChar, 70 70 char openparenthesis_char, char closeparenthesis_char, bool removeParenthesisChars, char comment_char) 71 71 { 72 SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeE xcapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char);72 SubString::splitLine(this->strings, this->bInSafemode, string, delimiters, delimiterNeighbours, emptyEntries, escapeChar, removeEscapeChar, safemode_char, removeSafemodeChar, openparenthesis_char, closeparenthesis_char, removeParenthesisChars, comment_char); 73 73 } 74 74 -
code/branches/input/src/util/SubString.h
r1062 r1323 89 89 SubString(const std::string& string, 90 90 const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries=false, 91 char escapeChar ='\\', bool removeE xcapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true,91 char escapeChar ='\\', bool removeEscapeChar = true, char safemode_char = '"', bool removeSafemodeChar = true, 92 92 char openparenthesis_char = '(', char closeparenthesis_char = ')', bool removeParenthesisChars = true, char comment_char = '\0'); 93 93 SubString(unsigned int argc, const char** argv); -
code/branches/input/visual_studio/vc8/network.vcproj
r1293 r1323 70 70 <Configuration 71 71 Name="Release|Win32" 72 ConfigurationType=" 2"72 ConfigurationType="4" 73 73 InheritedPropertySheets="$(SolutionDir)base_properties_release.vsprops;..\network_properties.vsprops" 74 74 CharacterSet="1" … … 103 103 /> 104 104 <Tool 105 Name="VCLi nkerTool"105 Name="VCLibrarianTool" 106 106 /> 107 107 <Tool … … 109 109 /> 110 110 <Tool 111 Name="VCManifestTool"112 />113 <Tool114 111 Name="VCXDCMakeTool" 115 112 /> … … 119 116 <Tool 120 117 Name="VCFxCopTool" 121 />122 <Tool123 Name="VCAppVerifierTool"124 />125 <Tool126 Name="VCWebDeploymentTool"127 118 /> 128 119 <Tool -
code/branches/input/visual_studio/vc8/orxonox.vcproj
r1293 r1323 165 165 </File> 166 166 <File 167 RelativePath="..\..\src\orxonox\PlayerManager.cc" 168 > 169 </File> 170 <File 167 171 RelativePath="..\..\src\orxonox\PrecompiledHeaderFiles.cc" 168 172 > … … 444 448 <File 445 449 RelativePath="..\..\src\orxonox\OrxonoxStableHeaders.h" 450 > 451 </File> 452 <File 453 RelativePath="..\..\src\orxonox\PlayerManager.h" 446 454 > 447 455 </File>
Note: See TracChangeset
for help on using the changeset viewer.