/* ============================== AdjustPitch ============================== */ void CInput::AdjustPitch( float speed, QAngle& viewangles ) { // only allow keyboard looking if mouse look is disabled if ( UsingMouselook() == false ) { float up, down; if ( in_klook.state & 1 ) { view->StopPitchDrift (); viewangles[PITCH] -= speed*cl_pitchspeed.GetFloat() * KeyState (&in_forward); viewangles[PITCH] += speed*cl_pitchspeed.GetFloat() * KeyState (&in_back); } up = KeyState ( &in_lookup ); down = KeyState ( &in_lookdown ); viewangles[PITCH] -= speed*cl_pitchspeed.GetFloat() * up; viewangles[PITCH] += speed*cl_pitchspeed.GetFloat() * down; if ( up || down ) { view->StopPitchDrift (); } } }
void InputManager::OnInitialize() { Keys[SDLK_w] = KeyState(); Keys[SDLK_a] = KeyState(); Keys[SDLK_s] = KeyState(); Keys[SDLK_d] = KeyState(); }
static void PrintEvent(const Event& event) { switch (event.Type) { case Event::EVENT_CLOSED: std::cout << "Event: Window Closed" << std::endl; break; case Event::EVENT_MOVED: std::cout << "Event: Window Moved (" << event.Move.X << ", " << event.Move.Y << ")" << std::endl; break; case Event::EVENT_RESIZED: std::cout << "Event: Window Resized (" << event.Size.Width << ", " << event.Size.Height << ")" << std::endl; break; case Event::EVENT_LOST_FOCUS: std::cout << "Event: Window Lost Focus" << std::endl; break; case Event::EVENT_GAINED_FOCUS: std::cout << "Event: Window Gained Focus" << std::endl; break; case Event::EVENT_TEXT_ENTERED: // TODO(cwallez) show the character std::cout << "Event: Text Entered" << std::endl; break; case Event::EVENT_KEY_PRESSED: std::cout << "Event: Key Pressed (" << KeyName(event.Key.Code) << KeyState(event.Key) << ")" << std::endl; break; case Event::EVENT_KEY_RELEASED: std::cout << "Event: Key Released (" << KeyName(event.Key.Code) << KeyState(event.Key) << ")" << std::endl; break; case Event::EVENT_MOUSE_WHEEL_MOVED: std::cout << "Event: Mouse Wheel (" << event.MouseWheel.Delta << ")" << std::endl; break; case Event::EVENT_MOUSE_BUTTON_PRESSED: std::cout << "Event: Mouse Button Pressed " << MouseButtonName(event.MouseButton.Button) << " at (" << event.MouseButton.X << ", " << event.MouseButton.Y << ")" << std::endl; break; case Event::EVENT_MOUSE_BUTTON_RELEASED: std::cout << "Event: Mouse Button Released " << MouseButtonName(event.MouseButton.Button) << " at (" << event.MouseButton.X << ", " << event.MouseButton.Y << ")" << std::endl; break; case Event::EVENT_MOUSE_MOVED: std::cout << "Event: Mouse Moved (" << event.MouseMove.X << ", " << event.MouseMove.Y << ")" << std::endl; break; case Event::EVENT_MOUSE_ENTERED: std::cout << "Event: Mouse Entered Window" << std::endl; break; case Event::EVENT_MOUSE_LEFT: std::cout << "Event: Mouse Left Window" << std::endl; break; case Event::EVENT_TEST: std::cout << "Event: Test" << std::endl; break; default: UNREACHABLE(); break; } }
/* ============================== ComputeForwardMove ============================== */ void CInput::ComputeForwardMove( CUserCmd *cmd ) { if ( !(in_klook.state & 1 ) ) { cmd->forwardmove += cl_forwardspeed.GetFloat() * KeyState (&in_forward); cmd->forwardmove -= cl_backspeed.GetFloat() * KeyState (&in_back); } }
/* ============================== AdjustYaw ============================== */ void CInput::AdjustYaw( float speed, QAngle& viewangles ) { if ( !(in_strafe.state & 1) ) { viewangles[YAW] -= speed*cl_yawspeed.GetFloat() * KeyState (&in_right); viewangles[YAW] += speed*cl_yawspeed.GetFloat() * KeyState (&in_left); } }
VOID StopMap(BOOL ResetShiftKeys) { AbbrevDeletes = QueuedChars = SequenceLen = PendingDown = 0; if (ResetShiftKeys) { if (GetKeyState(VK_CONTROL) < 0) KeyState(VK_CONTROL, FALSE); if (GetKeyState(VK_SHIFT) < 0) KeyState(VK_SHIFT, FALSE); if (GetKeyState(VK_MENU) < 0) KeyState(VK_MENU, FALSE); FinalKeyState = 0; } }
MouseState MouseState::GetState() { MouseState ms; ms.position = MousePos(); ms.buttons[BUTTON_LEFT] = KeyState(VK_LBUTTON); ms.buttons[BUTTON_MIDDLE] = KeyState(VK_MBUTTON); ms.buttons[BUTTON_RIGHT] = KeyState(VK_RBUTTON); return ms; };
/* ============================== ComputeSideMove ============================== */ void CInput::ComputeSideMove( CUserCmd *cmd ) { // If strafing, check left and right keys and act like moveleft and moveright keys if ( in_strafe.state & 1 ) { cmd->sidemove += cl_sidespeed.GetFloat() * KeyState (&in_right); cmd->sidemove -= cl_sidespeed.GetFloat() * KeyState (&in_left); } // Otherwise, check strafe keys cmd->sidemove += cl_sidespeed.GetFloat() * KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed.GetFloat() * KeyState (&in_moveleft); }
/* ============================== AdjustYaw ============================== */ void CInput::AdjustYaw( float speed, QAngle& viewangles ) { if ( !(in_strafe.state & 1) ) { viewangles[YAW] -= speed*cl_yawspeed.GetFloat() * KeyState (&in_right); viewangles[YAW] += speed*cl_yawspeed.GetFloat() * KeyState (&in_left); } // thirdperson platformer mode // use movement keys to aim the player relative to the thirdperson camera if ( CAM_IsThirdPerson() && thirdperson_platformer.GetInt() ) { float side = KeyState(&in_moveleft) - KeyState(&in_moveright); float forward = KeyState(&in_forward) - KeyState(&in_back); if ( side || forward ) { viewangles[YAW] = RAD2DEG(atan2(side, forward)) + g_ThirdPersonManager.GetCameraOffsetAngles()[ YAW ]; } if ( side || forward || KeyState (&in_right) || KeyState (&in_left) ) { cam_idealyaw.SetValue( g_ThirdPersonManager.GetCameraOffsetAngles()[ YAW ] - viewangles[ YAW ] ); } } }
KeyboardState::KeyboardState() { // NOTE(Wuxiang): Copy from the Key enum value. static std::vector<int> sKeyCode = { 32, 39, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 96, 161, 162, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 280, 281, 282, 283, 284, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 340, 341, 342, 343, 344, 345, 346, 347, 348 }; int keyNum = int(sKeyCode.size()); for (int keyIndex = 0; keyIndex < keyNum ; ++keyIndex) { auto key = Key(sKeyCode[keyIndex]); insert({ key, KeyState(key) }); } }
/* ============ GetButtonBits Returns appropriate button info for keyboard and mouse state Set bResetState to 1 to clear old state info ============ */ int CInput::GetButtonBits( int bResetState ) { int bits = 0; CalcButtonBits( bits, IN_SPEED, s_ClearInputState, &in_speed, bResetState ); CalcButtonBits( bits, IN_WALK, s_ClearInputState, &in_walk, bResetState ); CalcButtonBits( bits, IN_ATTACK, s_ClearInputState, &in_attack, bResetState ); CalcButtonBits( bits, IN_DUCK, s_ClearInputState, &in_duck, bResetState ); CalcButtonBits( bits, IN_JUMP, s_ClearInputState, &in_jump, bResetState ); CalcButtonBits( bits, IN_FORWARD, s_ClearInputState, &in_forward, bResetState ); CalcButtonBits( bits, IN_BACK, s_ClearInputState, &in_back, bResetState ); CalcButtonBits( bits, IN_USE, s_ClearInputState, &in_use, bResetState ); CalcButtonBits( bits, IN_LEFT, s_ClearInputState, &in_left, bResetState ); CalcButtonBits( bits, IN_RIGHT, s_ClearInputState, &in_right, bResetState ); CalcButtonBits( bits, IN_MOVELEFT, s_ClearInputState, &in_moveleft, bResetState ); CalcButtonBits( bits, IN_MOVERIGHT, s_ClearInputState, &in_moveright, bResetState ); CalcButtonBits( bits, IN_ATTACK2, s_ClearInputState, &in_attack2, bResetState ); CalcButtonBits( bits, IN_RELOAD, s_ClearInputState, &in_reload, bResetState ); CalcButtonBits( bits, IN_ALT1, s_ClearInputState, &in_alt1, bResetState ); CalcButtonBits( bits, IN_ALT2, s_ClearInputState, &in_alt2, bResetState ); CalcButtonBits( bits, IN_SCORE, s_ClearInputState, &in_score, bResetState ); CalcButtonBits( bits, IN_ZOOM, s_ClearInputState, &in_zoom, bResetState ); CalcButtonBits( bits, IN_GRENADE1, s_ClearInputState, &in_grenade1, bResetState ); CalcButtonBits( bits, IN_GRENADE2, s_ClearInputState, &in_grenade2, bResetState ); CalcButtonBits( bits, IN_TOPSPIN, s_ClearInputState, &in_topspin, bResetState ); CalcButtonBits( bits, IN_BACKSPIN, s_ClearInputState, &in_backspin, bResetState); CalcButtonBits( bits, IN_SKILL, s_ClearInputState, &in_skill, bResetState ); CalcButtonBits( bits, IN_GESTURE, s_ClearInputState, &in_gesture, bResetState ); if ( KeyState(&in_ducktoggle) ) { bits |= IN_DUCK; } // Cancel is a special flag if (in_cancel) { bits |= IN_CANCEL; } if ( gHUD.m_iKeyBits & IN_WEAPON1 ) { bits |= IN_WEAPON1; } if ( gHUD.m_iKeyBits & IN_WEAPON2 ) { bits |= IN_WEAPON2; } // Clear out any residual bits &= ~s_ClearInputState; if ( bResetState ) { s_ClearInputState = 0; } return bits; }
bool KeyStateListener::eventFilter (QObject *obj, QEvent *event) { switch (event-> type()) { case QEvent::KeyPress: press_key_ (KeyState (static_cast <QKeyEvent *> (event))); return false; case QEvent::KeyRelease: release_key_ (KeyState (static_cast <QKeyEvent *> (event))); return false; default: return QObject::eventFilter (obj, event); } }
bool SINMOVIE::RenderStreamToSurface() { if (KeyState(VK_RETURN)) { MovieState=2; ShutDown();return false; } if (pSample->Update(0, NULL, NULL, 0) != S_OK) { MovieState=2; ShutDown(); return false; } pMovieSurface->Blt(&DRect, pSurface, &SRect, DDBLT_WAIT, NULL); return true; }
void SINMOVIE::RenderStreamToSurfaceAll() { while (1) { if (KeyState(VK_RETURN)) { MovieState=2; ShutDown(); return; } if (pSample->Update(0, NULL, NULL, 0) != S_OK) { MovieState=2; ShutDown(); return; } pMovieSurface->Blt(&DRect, pSurface, &SRect, DDBLT_WAIT, NULL); } }
// // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_MOVE: case WM_SIZE: Utility::resize(); break; case WM_CHAR: DeveloperConsole::catchCharacter((wchar_t)wParam); break; case WM_KEYDOWN: // check which key is pressed InputManager::keyDown(KeyState(wParam, lParam)); switch(wParam) { case VK_F5: dx.toggleFullScreen(); break; case VK_F4: killProgram(); break; } break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Add any drawing code here... EndPaint(hWnd, &ps); break; case WM_DESTROY: killProgram(); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
GameScene::GameScene(const std::string& level) { background_data_ = new AnimData("assets/background"); background_ = new Animation(*background_data_); music_notes_.push_back(new Entity("musicnote0")); music_notes_.push_back(new Entity("musicnote1")); music_notes_.push_back(new Entity("musicnote2")); player_keys_.left = KeyState(sf::Key::Left); player_keys_.right = KeyState(sf::Key::Right); player_keys_.up = KeyState(sf::Key::Up); player_keys_.down = KeyState(sf::Key::Down); player_keys_.action = KeyState(sf::Key::Space); level_name_ = level; music_note_timer_ = 0.0f; }
void KeyScan(){ if(~PINC&0b00000111){ // обработчик нажатия flags.KeyReleased=0; if (++i > 5 ) { //короткое нажатие 100-250 миллисекунд if (!flags.KeyPressed){flags.KeyPressed = 1;flags.KeyPin=(~PINC&0b00000111);} if ( i > 100 ){ //длинное нажатие 1-3 секунды if (!flags.KeyPushLong){ flags.KeyPushLong=1; KeyState(); } } } } else { i=0; if (!flags.KeyReleased) {flags.KeyReleased=1;} KeyState(); } AddTask(KeyScan,25); }
void KeyScan(){ volatile static uint8_t k=0; if(KEY_CODE){ // обработчик нажатия flags.KeyReleased=0; if (++k >=2 ) { //короткое нажатие 100-250 миллисекунд if (!flags.KeyPressed){flags.KeyPressed = 1;flags.KeyPin=(KEY_CODE);} if ( k > 100 ){ //длинное нажатие 1-3 секунды if (!flags.KeyPushLong){ k=0; // проблема с этой переменной , конфликтует с енумом кнопок ((( flags.KeyPushLong=1; KeyState(); } } } } else { k=0; if (!flags.KeyReleased) {flags.KeyReleased=1;} KeyState(); } AddTask(KeyScan,50); }
/* ============================== ComputeForwardMove ============================== */ void CInput::ComputeForwardMove( CUserCmd *cmd ) { // thirdperson platformer movement if ( CAM_IsThirdPerson() && thirdperson_platformer.GetInt() ) { // movement is always forward in this mode float movement = KeyState(&in_forward) || KeyState(&in_moveright) || KeyState(&in_back) || KeyState(&in_moveleft); cmd->forwardmove += cl_forwardspeed.GetFloat() * movement; return; } // thirdperson screenspace movement if ( CAM_IsThirdPerson() && thirdperson_screenspace.GetInt() ) { float ideal_yaw = cam_idealyaw.GetFloat(); float ideal_sin = sin(DEG2RAD(ideal_yaw)); float ideal_cos = cos(DEG2RAD(ideal_yaw)); float movement = ideal_cos*KeyState(&in_forward) + ideal_sin*KeyState(&in_moveright) + -ideal_cos*KeyState(&in_back) + -ideal_sin*KeyState(&in_moveleft); cmd->forwardmove += cl_forwardspeed.GetFloat() * movement; return; } if ( !(in_klook.state & 1 ) ) { cmd->forwardmove += cl_forwardspeed.GetFloat() * KeyState (&in_forward); cmd->forwardmove -= cl_backspeed.GetFloat() * KeyState (&in_back); } }
void updatebutton(string &name, bool on, int posfinger) { auto kmit = keymap.find(name); auto ks = &(kmit != keymap.end() ? kmit : keymap.insert(make_pair(name, KeyState())).first)->second; ks->isdown = on; if (on) { ks->wentdown = true; } else { ks->wentup = true; } ks->lasttime[on] = lastmillis; ks->lastpos[on] = fingers[posfinger].mousepos; }
/* ============================== ComputeSideMove ============================== */ void CInput::ComputeSideMove( CUserCmd *cmd ) { // thirdperson platformer movement if ( CAM_IsThirdPerson() && thirdperson_platformer.GetInt() ) { // no sideways movement in this mode return; } // thirdperson screenspace movement if ( CAM_IsThirdPerson() && thirdperson_screenspace.GetInt() ) { float ideal_yaw = m_aCamIdealAngles[YAW]; float ideal_sin = sin(DEG2RAD(ideal_yaw)); float ideal_cos = cos(DEG2RAD(ideal_yaw)); float movement = ideal_cos*KeyState(&in_moveright) + ideal_sin*KeyState(&in_back) + -ideal_cos*KeyState(&in_moveleft) + -ideal_sin*KeyState(&in_forward); cmd->sidemove += cl_sidespeed.GetFloat() * movement; return; } // If strafing, check left and right keys and act like moveleft and moveright keys if ( in_strafe.state & 1 ) { cmd->sidemove += cl_sidespeed.GetFloat() * KeyState (&in_right); cmd->sidemove -= cl_sidespeed.GetFloat() * KeyState (&in_left); } // Otherwise, check strafe keys C_SDKPlayer *pPlayer = ToSDKPlayer(C_BasePlayer::GetLocalPlayer()); cmd->sidemove += cl_sidespeed.GetFloat() * KeyState (&in_moveright); cmd->sidemove -= cl_sidespeed.GetFloat() * KeyState (&in_moveleft); }
//================================================================================ ATHKeyList ATHInputManager::CheckKeys() { std::list< unsigned int > liKeysDown; BYTE chAsciiKeys[ ATH_NUM_KEYS ] = {}; if( GetKeyboardState( chAsciiKeys ) ) { for(unsigned int i = 0; i < ATH_NUM_KEYS; i++) { if( KeyState( (unsigned char)(i) ) ) { unsigned int nVKCode = MapVirtualKeyEx(i, MAPVK_VSC_TO_VK, NULL ); liKeysDown.push_back(i); } } } return liKeysDown; }
void Pi::HandleEvents() { SDL_Event event; Pi::mouseMotion[0] = Pi::mouseMotion[1] = 0; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { if (Pi::game) Pi::EndGame(); Pi::Quit(); } else if (ui->DispatchSDLEvent(event)) continue; Gui::HandleSDLEvent(&event); if (!Pi::IsConsoleActive()) KeyBindings::DispatchSDLEvent(&event); else KeyBindings::toggleLuaConsole.CheckSDLEventAndDispatch(&event); switch (event.type) { case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) { if (Pi::game) { // only accessible once game started if (currentView != 0) { if (currentView != gameMenuView) { Pi::game->SetTimeAccel(Game::TIMEACCEL_PAUSED); SetView(gameMenuView); } else { Pi::game->RequestTimeAccel(Game::TIMEACCEL_1X); SetView(Pi::player->IsDead() ? static_cast<View*>(deathView) : static_cast<View*>(worldView)); } } } break; } // special keys. LCTRL+turd if ((KeyState(SDLK_LCTRL) || (KeyState(SDLK_RCTRL)))) { switch (event.key.keysym.sym) { case SDLK_q: // Quit if (Pi::game) Pi::EndGame(); Pi::Quit(); break; case SDLK_PRINT: // print case SDLK_KP_MULTIPLY: // screen { char buf[256]; const time_t t = time(0); struct tm *_tm = localtime(&t); strftime(buf, sizeof(buf), "screenshot-%Y%m%d-%H%M%S.png", _tm); Screendump(buf, Graphics::GetScreenWidth(), Graphics::GetScreenHeight()); break; } #if WITH_DEVKEYS case SDLK_i: // Toggle Debug info Pi::showDebugInfo = !Pi::showDebugInfo; break; case SDLK_m: // Gimme money! if(Pi::game) { Pi::player->SetMoney(Pi::player->GetMoney() + 10000000); } break; case SDLK_F12: { if(Pi::game) { vector3d dir = -Pi::player->GetOrient().VectorZ(); /* add test object */ if (KeyState(SDLK_RSHIFT)) { Missile *missile = new Missile(ShipType::MISSILE_GUIDED, Pi::player, Pi::player->GetCombatTarget()); missile->SetOrient(Pi::player->GetOrient()); missile->SetFrame(Pi::player->GetFrame()); missile->SetPosition(Pi::player->GetPosition()+50.0*dir); missile->SetVelocity(Pi::player->GetVelocity()); game->GetSpace()->AddBody(missile); } else if (KeyState(SDLK_LSHIFT)) { SpaceStation *s = static_cast<SpaceStation*>(Pi::player->GetNavTarget()); if (s) { int port = s->GetFreeDockingPort(); if (port != -1) { printf("Putting ship into station\n"); // Make police ship intent on killing the player Ship *ship = new Ship(ShipType::LADYBIRD); ship->AIKill(Pi::player); ship->SetFrame(Pi::player->GetFrame()); ship->SetDockedWith(s, port); game->GetSpace()->AddBody(ship); } else { printf("No docking ports free dude\n"); } } else { printf("Select a space station...\n"); } } else { Ship *ship = new Ship(ShipType::LADYBIRD); ship->m_equipment.Set(Equip::SLOT_LASER, 0, Equip::PULSECANNON_1MW); ship->AIKill(Pi::player); ship->SetFrame(Pi::player->GetFrame()); ship->SetPosition(Pi::player->GetPosition()+100.0*dir); ship->SetVelocity(Pi::player->GetVelocity()); ship->m_equipment.Add(Equip::DRIVE_CLASS2); ship->m_equipment.Add(Equip::RADAR_MAPPER); ship->m_equipment.Add(Equip::SCANNER); ship->m_equipment.Add(Equip::SHIELD_GENERATOR); ship->m_equipment.Add(Equip::HYDROGEN, 10); ship->UpdateStats(); game->GetSpace()->AddBody(ship); } } break; } #endif /* DEVKEYS */ #if WITH_OBJECTVIEWER case SDLK_F10: Pi::SetView(Pi::objectViewerView); break; #endif case SDLK_F11: // XXX only works on X11 //SDL_WM_ToggleFullScreen(Pi::scrSurface); #if WITH_DEVKEYS renderer->ReloadShaders(); #endif break; case SDLK_F9: // Quicksave { if(Pi::game) { if (Pi::game->IsHyperspace()) Pi::cpan->MsgLog()->Message("", Lang::CANT_SAVE_IN_HYPERSPACE); else { const std::string name = "_quicksave"; const std::string path = FileSystem::JoinPath(GetSaveDir(), name); try { Game::SaveGame(name, Pi::game); Pi::cpan->MsgLog()->Message("", Lang::GAME_SAVED_TO + path); } catch (CouldNotOpenFileException) { Pi::cpan->MsgLog()->Message("", stringf(Lang::COULD_NOT_OPEN_FILENAME, formatarg("path", path))); } catch (CouldNotWriteToFileException) { Pi::cpan->MsgLog()->Message("", Lang::GAME_SAVE_CANNOT_WRITE); } } } break; } default: break; // This does nothing but it stops the compiler warnings } } Pi::keyState[event.key.keysym.sym] = 1; Pi::keyModState = event.key.keysym.mod; Pi::onKeyPress.emit(&event.key.keysym); break; case SDL_KEYUP: Pi::keyState[event.key.keysym.sym] = 0; Pi::keyModState = event.key.keysym.mod; Pi::onKeyRelease.emit(&event.key.keysym); break; case SDL_MOUSEBUTTONDOWN: if (event.button.button < COUNTOF(Pi::mouseButton)) { Pi::mouseButton[event.button.button] = 1; Pi::onMouseButtonDown.emit(event.button.button, event.button.x, event.button.y); } break; case SDL_MOUSEBUTTONUP: if (event.button.button < COUNTOF(Pi::mouseButton)) { Pi::mouseButton[event.button.button] = 0; Pi::onMouseButtonUp.emit(event.button.button, event.button.x, event.button.y); } break; case SDL_MOUSEMOTION: Pi::mouseMotion[0] += event.motion.xrel; Pi::mouseMotion[1] += event.motion.yrel; // SDL_GetRelativeMouseState(&Pi::mouseMotion[0], &Pi::mouseMotion[1]); break; case SDL_JOYAXISMOTION: if (joysticks[event.jaxis.which].joystick == NULL) break; if (event.jaxis.value == -32768) joysticks[event.jaxis.which].axes[event.jaxis.axis] = 1.f; else joysticks[event.jaxis.which].axes[event.jaxis.axis] = -event.jaxis.value / 32767.f; break; case SDL_JOYBUTTONUP: case SDL_JOYBUTTONDOWN: if (joysticks[event.jaxis.which].joystick == NULL) break; joysticks[event.jbutton.which].buttons[event.jbutton.button] = event.jbutton.state != 0; break; case SDL_JOYHATMOTION: if (joysticks[event.jaxis.which].joystick == NULL) break; joysticks[event.jhat.which].hats[event.jhat.hat] = event.jhat.value; break; } } }
void Pi::HandleEvents() { PROFILE_SCOPED() SDL_Event event; // XXX for most keypresses SDL will generate KEYUP/KEYDOWN and TEXTINPUT // events. keybindings run off KEYUP/KEYDOWN. the console is opened/closed // via keybinding. the console TextInput widget uses TEXTINPUT events. thus // after switching the console, the stray TEXTINPUT event causes the // console key (backtick) to appear in the text entry field. we hack around // this by setting this flag if the console was switched. if its set, we // swallow the TEXTINPUT event this hack must remain until we have a // unified input system bool skipTextInput = false; Pi::mouseMotion[0] = Pi::mouseMotion[1] = 0; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { if (Pi::game) Pi::EndGame(); Pi::Quit(); } if (skipTextInput && event.type == SDL_TEXTINPUT) { skipTextInput = false; continue; } if (ui->DispatchSDLEvent(event)) continue; bool consoleActive = Pi::IsConsoleActive(); if (!consoleActive) KeyBindings::DispatchSDLEvent(&event); else KeyBindings::toggleLuaConsole.CheckSDLEventAndDispatch(&event); if (consoleActive != Pi::IsConsoleActive()) { skipTextInput = true; continue; } if (Pi::IsConsoleActive()) continue; Gui::HandleSDLEvent(&event); switch (event.type) { case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) { if (Pi::game) { // only accessible once game started if (currentView != 0) { if (currentView != Pi::game->GetSettingsView()) { Pi::game->SetTimeAccel(Game::TIMEACCEL_PAUSED); SetView(Pi::game->GetSettingsView()); } else { Pi::game->RequestTimeAccel(Game::TIMEACCEL_1X); SetView(Pi::player->IsDead() ? static_cast<View*>(Pi::game->GetDeathView()) : static_cast<View*>(Pi::game->GetWorldView())); } } } break; } // special keys. LCTRL+turd if ((KeyState(SDLK_LCTRL) || (KeyState(SDLK_RCTRL)))) { switch (event.key.keysym.sym) { case SDLK_q: // Quit if (Pi::game) Pi::EndGame(); Pi::Quit(); break; case SDLK_PRINTSCREEN: // print case SDLK_KP_MULTIPLY: // screen { char buf[256]; const time_t t = time(0); struct tm *_tm = localtime(&t); strftime(buf, sizeof(buf), "screenshot-%Y%m%d-%H%M%S.png", _tm); Graphics::ScreendumpState sd; Pi::renderer->Screendump(sd); write_screenshot(sd, buf); break; } #if WITH_DEVKEYS case SDLK_i: // Toggle Debug info Pi::showDebugInfo = !Pi::showDebugInfo; break; #ifdef PIONEER_PROFILER case SDLK_p: // alert it that we want to profile if (KeyState(SDLK_LSHIFT) || KeyState(SDLK_RSHIFT)) Pi::doProfileOne = true; else { Pi::doProfileSlow = !Pi::doProfileSlow; Output("slow frame profiling %s\n", Pi::doProfileSlow ? "enabled" : "disabled"); } break; #endif case SDLK_F12: { if(Pi::game) { vector3d dir = -Pi::player->GetOrient().VectorZ(); /* add test object */ if (KeyState(SDLK_RSHIFT)) { Missile *missile = new Missile(ShipType::MISSILE_GUIDED, Pi::player); missile->SetOrient(Pi::player->GetOrient()); missile->SetFrame(Pi::player->GetFrame()); missile->SetPosition(Pi::player->GetPosition()+50.0*dir); missile->SetVelocity(Pi::player->GetVelocity()); game->GetSpace()->AddBody(missile); missile->AIKamikaze(Pi::player->GetCombatTarget()); } else if (KeyState(SDLK_LSHIFT)) { SpaceStation *s = static_cast<SpaceStation*>(Pi::player->GetNavTarget()); if (s) { Ship *ship = new Ship(ShipType::POLICE); int port = s->GetFreeDockingPort(ship); if (port != -1) { Output("Putting ship into station\n"); // Make police ship intent on killing the player ship->AIKill(Pi::player); ship->SetFrame(Pi::player->GetFrame()); ship->SetDockedWith(s, port); game->GetSpace()->AddBody(ship); } else { delete ship; Output("No docking ports free dude\n"); } } else { Output("Select a space station...\n"); } } else { Ship *ship = new Ship(ShipType::POLICE); if( KeyState(SDLK_LCTRL) ) ship->AIFlyTo(Pi::player); // a less lethal option else ship->AIKill(Pi::player); // a really lethal option! lua_State *l = Lua::manager->GetLuaState(); pi_lua_import(l, "Equipment"); LuaTable equip(l, -1); LuaObject<Ship>::CallMethod<>(ship, "AddEquip", equip.Sub("laser").Sub("pulsecannon_dual_1mw")); LuaObject<Ship>::CallMethod<>(ship, "AddEquip", equip.Sub("misc").Sub("laser_cooling_booster")); LuaObject<Ship>::CallMethod<>(ship, "AddEquip", equip.Sub("misc").Sub("atmospheric_shielding")); lua_pop(l, 5); ship->SetFrame(Pi::player->GetFrame()); ship->SetPosition(Pi::player->GetPosition()+100.0*dir); ship->SetVelocity(Pi::player->GetVelocity()); ship->UpdateEquipStats(); game->GetSpace()->AddBody(ship); } } break; } #endif /* DEVKEYS */ #if WITH_OBJECTVIEWER case SDLK_F10: Pi::SetView(Pi::game->GetObjectViewerView()); break; #endif case SDLK_F11: // XXX only works on X11 //SDL_WM_ToggleFullScreen(Pi::scrSurface); #if WITH_DEVKEYS renderer->ReloadShaders(); #endif break; case SDLK_F9: // Quicksave { if(Pi::game) { if (Pi::game->IsHyperspace()) Pi::game->log->Add(Lang::CANT_SAVE_IN_HYPERSPACE); else { const std::string name = "_quicksave"; const std::string path = FileSystem::JoinPath(GetSaveDir(), name); try { Game::SaveGame(name, Pi::game); Pi::game->log->Add(Lang::GAME_SAVED_TO + path); } catch (CouldNotOpenFileException) { Pi::game->log->Add(stringf(Lang::COULD_NOT_OPEN_FILENAME, formatarg("path", path))); } catch (CouldNotWriteToFileException) { Pi::game->log->Add(Lang::GAME_SAVE_CANNOT_WRITE); } } } break; } default: break; // This does nothing but it stops the compiler warnings } } Pi::keyState[event.key.keysym.sym] = true; Pi::keyModState = event.key.keysym.mod; Pi::onKeyPress.emit(&event.key.keysym); break; case SDL_KEYUP: Pi::keyState[event.key.keysym.sym] = false; Pi::keyModState = event.key.keysym.mod; Pi::onKeyRelease.emit(&event.key.keysym); break; case SDL_MOUSEBUTTONDOWN: if (event.button.button < COUNTOF(Pi::mouseButton)) { Pi::mouseButton[event.button.button] = 1; Pi::onMouseButtonDown.emit(event.button.button, event.button.x, event.button.y); } break; case SDL_MOUSEBUTTONUP: if (event.button.button < COUNTOF(Pi::mouseButton)) { Pi::mouseButton[event.button.button] = 0; Pi::onMouseButtonUp.emit(event.button.button, event.button.x, event.button.y); } break; case SDL_MOUSEWHEEL: Pi::onMouseWheel.emit(event.wheel.y > 0); // true = up break; case SDL_MOUSEMOTION: Pi::mouseMotion[0] += event.motion.xrel; Pi::mouseMotion[1] += event.motion.yrel; // SDL_GetRelativeMouseState(&Pi::mouseMotion[0], &Pi::mouseMotion[1]); break; case SDL_JOYAXISMOTION: if (!joysticks[event.jaxis.which].joystick) break; if (event.jaxis.value == -32768) joysticks[event.jaxis.which].axes[event.jaxis.axis] = 1.f; else joysticks[event.jaxis.which].axes[event.jaxis.axis] = -event.jaxis.value / 32767.f; break; case SDL_JOYBUTTONUP: case SDL_JOYBUTTONDOWN: if (!joysticks[event.jaxis.which].joystick) break; joysticks[event.jbutton.which].buttons[event.jbutton.button] = event.jbutton.state != 0; break; case SDL_JOYHATMOTION: if (!joysticks[event.jaxis.which].joystick) break; joysticks[event.jhat.which].hats[event.jhat.hat] = event.jhat.value; break; } } }
void Pi::HandleEvents() { SDL_Event event; Pi::mouseMotion[0] = Pi::mouseMotion[1] = 0; while (SDL_PollEvent(&event)) { Gui::HandleSDLEvent(&event); switch (event.type) { case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) { // only accessible once game started if (currentView != 0) { if (currentView != gameMenuView) { RequestTimeAccel(0); SetTimeAccel(0); SetView(gameMenuView); } else RequestTimeAccel(1); } break; } // special keys. LCTRL+turd if ((KeyState(SDLK_LCTRL) || (KeyState(SDLK_RCTRL)))) { if (event.key.keysym.sym == SDLK_q) Pi::Quit(); if (event.key.keysym.sym == SDLK_s) { Render::ToggleShaders(); } if (event.key.keysym.sym == SDLK_h) { Render::ToggleHDR(); } if (event.key.keysym.sym == SDLK_i) Pi::showDebugInfo = !Pi::showDebugInfo; if (event.key.keysym.sym == SDLK_p) { Sint64 crime, fine; Polit::GetCrime(&crime, &fine); printf("Criminal record: %llx, $%lld\n", crime, fine); Polit::AddCrime(0x1, 100); Polit::GetCrime(&crime, &fine); printf("Criminal record now: %llx, $%lld\n", crime, fine); } if (event.key.keysym.sym == SDLK_PRINT) { char buf[256]; const time_t t = time(0); struct tm *_tm = localtime(&t); strftime(buf, sizeof(buf), "screenshot-%Y%m%d-%H%M%S.tga", _tm); Screendump(buf); fprintf(stderr, "Screendump to %s\n", buf); } #ifdef DEBUG if (event.key.keysym.sym == SDLK_m) { Pi::player->SetMoney(Pi::player->GetMoney() + 10000000); } if (event.key.keysym.sym == SDLK_F12) { matrix4x4d m; Pi::player->GetRotMatrix(m); vector3d dir = m*vector3d(0,0,-1); /* add test object */ if (KeyState(SDLK_RSHIFT)) { Missile *missile = new Missile(ShipType::MISSILE_GUIDED, Pi::player, Pi::player->GetCombatTarget()); missile->SetRotMatrix(m); missile->SetFrame(Pi::player->GetFrame()); missile->SetPosition(Pi::player->GetPosition()+50.0*dir); missile->SetVelocity(Pi::player->GetVelocity()); Space::AddBody(missile); } else if (KeyState(SDLK_LSHIFT)) { SpaceStation *s = static_cast<SpaceStation*>(Pi::player->GetNavTarget()); if (s) { int port = s->GetFreeDockingPort(); if (port != -1) { printf("Putting ship into station\n"); // Make police ship intent on killing the player Ship *ship = new Ship(ShipType::LADYBIRD); ship->AIKill(Pi::player); ship->SetFrame(Pi::player->GetFrame()); ship->SetDockedWith(s, port); Space::AddBody(ship); } else { printf("No docking ports free dude\n"); } } else { printf("Select a space station...\n"); } } else { Ship *ship = new Ship(ShipType::LADYBIRD); ship->m_equipment.Set(Equip::SLOT_LASER, 0, Equip::PULSECANNON_1MW); ship->AIKill(Pi::player); ship->SetFrame(Pi::player->GetFrame()); ship->SetPosition(Pi::player->GetPosition()+100.0*dir); ship->SetVelocity(Pi::player->GetVelocity()); ship->m_equipment.Add(Equip::DRIVE_CLASS2); ship->m_equipment.Add(Equip::RADAR_MAPPER); ship->m_equipment.Add(Equip::SCANNER); ship->m_equipment.Add(Equip::SHIELD_GENERATOR); ship->m_equipment.Add(Equip::HYDROGEN, 10); Space::AddBody(ship); } } #endif /* DEBUG */ // XXX only works on X11 //if (event.key.keysym.sym == SDLK_F11) SDL_WM_ToggleFullScreen(Pi::scrSurface); if (event.key.keysym.sym == SDLK_F10) Pi::SetView(Pi::objectViewerView); if (event.key.keysym.sym == SDLK_F9) { std::string name = join_path(GetFullSavefileDirPath().c_str(), "_quicksave", 0); Serializer::SaveGame(name.c_str()); Pi::cpan->MsgLog()->Message("", "Game saved to "+name); } } Pi::keyState[event.key.keysym.sym] = 1; Pi::keyModState = event.key.keysym.mod; Pi::onKeyPress.emit(&event.key.keysym); break; case SDL_KEYUP: Pi::keyState[event.key.keysym.sym] = 0; Pi::keyModState = event.key.keysym.mod; Pi::onKeyRelease.emit(&event.key.keysym); break; case SDL_MOUSEBUTTONDOWN: Pi::mouseButton[event.button.button] = 1; Pi::onMouseButtonDown.emit(event.button.button, event.button.x, event.button.y); break; case SDL_MOUSEBUTTONUP: Pi::mouseButton[event.button.button] = 0; Pi::onMouseButtonUp.emit(event.button.button, event.button.x, event.button.y); break; case SDL_MOUSEMOTION: Pi::mouseMotion[0] += event.motion.xrel; Pi::mouseMotion[1] += event.motion.yrel; // SDL_GetRelativeMouseState(&Pi::mouseMotion[0], &Pi::mouseMotion[1]); break; case SDL_JOYAXISMOTION: if (joysticks[event.jaxis.which].joystick == NULL) break; if (event.jaxis.value == -32768) joysticks[event.jaxis.which].axes[event.jaxis.axis] = 1.f; else joysticks[event.jaxis.which].axes[event.jaxis.axis] = -event.jaxis.value / 32767.f; break; case SDL_JOYBUTTONUP: case SDL_JOYBUTTONDOWN: if (joysticks[event.jaxis.which].joystick == NULL) break; joysticks[event.jbutton.which].buttons[event.jbutton.button] = event.jbutton.state != 0; break; case SDL_JOYHATMOTION: if (joysticks[event.jaxis.which].joystick == NULL) break; joysticks[event.jhat.which].hats[event.jhat.hat] = event.jhat.value; break; case SDL_QUIT: Pi::Quit(); break; } } }
/* ============================== ComputeUpwardMove ============================== */ void CInput::ComputeUpwardMove( CUserCmd *cmd ) { cmd->upmove += cl_upspeed.GetFloat() * KeyState (&in_up); cmd->upmove -= cl_upspeed.GetFloat() * KeyState (&in_down); }
/* ============ GetButtonBits Returns appropriate button info for keyboard and mouse state Set bResetState to 1 to clear old state info ============ */ int CInput::GetButtonBits( int bResetState ) { int bits = 0; CalcButtonBits( bits, IN_SPEED, s_ClearInputState, &in_speed, bResetState ); CalcButtonBits( bits, IN_WALK, s_ClearInputState, &in_walk, bResetState ); CalcButtonBits( bits, IN_ATTACK, s_ClearInputState, &in_attack, bResetState ); CalcButtonBits( bits, IN_DUCK, s_ClearInputState, &in_duck, bResetState ); CalcButtonBits( bits, IN_JUMP, s_ClearInputState, &in_jump, bResetState ); CalcButtonBits( bits, IN_FORWARD, s_ClearInputState, &in_forward, bResetState ); CalcButtonBits( bits, IN_BACK, s_ClearInputState, &in_back, bResetState ); CalcButtonBits( bits, IN_USE, s_ClearInputState, &in_use, bResetState ); CalcButtonBits( bits, IN_LEFT, s_ClearInputState, &in_left, bResetState ); CalcButtonBits( bits, IN_RIGHT, s_ClearInputState, &in_right, bResetState ); CalcButtonBits( bits, IN_MOVELEFT, s_ClearInputState, &in_moveleft, bResetState ); CalcButtonBits( bits, IN_MOVERIGHT, s_ClearInputState, &in_moveright, bResetState ); CalcButtonBits( bits, IN_ATTACK2, s_ClearInputState, &in_attack2, bResetState ); #ifdef C17 CalcButtonBits(bits, IN_IRONSIGHT, s_ClearInputState, &in_ironsight, bResetState); #endif CalcButtonBits( bits, IN_RELOAD, s_ClearInputState, &in_reload, bResetState ); CalcButtonBits( bits, IN_ALT1, s_ClearInputState, &in_alt1, bResetState ); CalcButtonBits( bits, IN_ALT2, s_ClearInputState, &in_alt2, bResetState ); CalcButtonBits( bits, IN_SCORE, s_ClearInputState, &in_score, bResetState ); CalcButtonBits( bits, IN_ZOOM, s_ClearInputState, &in_zoom, bResetState ); CalcButtonBits( bits, IN_GRENADE1, s_ClearInputState, &in_grenade1, bResetState ); CalcButtonBits( bits, IN_GRENADE2, s_ClearInputState, &in_grenade2, bResetState ); CalcButtonBits( bits, IN_ATTACK3, s_ClearInputState, &in_attack3, bResetState ); #ifdef C17_HAPTICS // Haptics addition CalcButtonBits(bits, IN_HAP_TOGGLEHAPTICS, s_ClearInputState, &in_hap_togglehaptics, bResetState); CalcButtonBits(bits, IN_HAP_TOGGLEMOVE, s_ClearInputState, &in_hap_togglemovement, bResetState); CalcButtonBits(bits, IN_HAP_HOLDCAMERA, s_ClearInputState, &in_hap_holdcamera, bResetState); #endif if ( KeyState(&in_ducktoggle) ) { bits |= IN_DUCK; } // Cancel is a special flag if (in_cancel) { bits |= IN_CANCEL; } if ( gHUD.m_iKeyBits & IN_WEAPON1 ) { bits |= IN_WEAPON1; } if ( gHUD.m_iKeyBits & IN_WEAPON2 ) { bits |= IN_WEAPON2; } // Clear out any residual bits &= ~s_ClearInputState; if ( bResetState ) { s_ClearInputState = 0; } return bits; }
KeyState const Joypad::get_held() { return KeyState(input_value); }
KeyState const Joypad::get_pressed() { uint16_t presses = input_presses; input_presses = 0; return KeyState(presses); }
//================================================================================ bool ATHInputManager::KeyReleased(unsigned char _chDIKButton ) { return !KeyState(_chDIKButton) && ((m_chPrevKeyboardState[_chDIKButton] & 0x80)); }