static void playerDerivativeFn(const float* state, float* derivs) { // state[0] = x.x // state[1] = x.y // state[2] = o // state[3] = v.x // state[4] = v.y // state[5] = w // derivs[0] = v.x // derivs[1] = v.y // derivs[2] = w // derivs[3] = a.x // derivs[4] = a.y // derivs[5] = t derivs[0] = state[3]; derivs[1] = state[4]; derivs[2] = state[5]; derivs[3] = -state[3] * 5.0f; derivs[4] = -state[4] * 5.0f; derivs[5] = -state[5] * 5.0f; if (keyIsPressed(ArrowLeft )) derivs[5] += 10.0f; if (keyIsPressed(ArrowRight)) derivs[5] -= 10.0f; if (keyIsPressed(ArrowUp)) { vec2 f; derivs[3] += cosf(state[2]) * 10.0f; derivs[4] += sinf(state[2]) * 10.0f; } }
bool InputManager::setKeyPressed(unsigned char key) { if (keyIsPressed(key)) return true; pressed_keys[num_pressed_keys] = key; num_pressed_keys++; return true; }
bool KeyboardInput::keyWasPressed(KeyboardKey keyID, KeyboardKey modID, KeyboardKey modID2) { if (keyIsPressed(keyID, modID, modID2) == true && keyWasDown(keyID, modID, modID2) == false) { return true; } return false; }
bool KeyboardInput::keyWasReleased(KeyboardKey keyID) { if (keyIsPressed(keyID) == false && keyWasDown(keyID) == true) { return true; } return false; }
void processCameraInput(SpectatorCamera* camera, float dt) { if (uiState != STATE_DEFAULT) { if (mouseIsCaptured()) mouseRelease(); return; } bool LCTRL_Down_LALT_Released = keyIsPressed (SDL_SCANCODE_LCTRL) && keyWasReleased(SDL_SCANCODE_LALT ); bool LALT_Down_LCTRL_Released = keyIsPressed (SDL_SCANCODE_LALT ) && keyWasReleased(SDL_SCANCODE_LCTRL); bool LALT_Released_LCTRL_Released = keyWasReleased(SDL_SCANCODE_LALT ) && keyWasReleased(SDL_SCANCODE_LCTRL); bool actionReleaseMouse = LCTRL_Down_LALT_Released || LALT_Down_LCTRL_Released || LALT_Released_LCTRL_Released; if (mouseWasPressed(SDL_BUTTON_LEFT)) { mouseCapture(); } else if (mouseIsCaptured() && actionReleaseMouse) { mouseRelease(); } else if (mouseIsCaptured()) { float dx = 0.0f, dy = 0.0f, dz = 0.0f; float heading = 0.0f; float pitch = 0.0f; dx += ui::keyIsPressed(SDL_SCANCODE_D)?1.0f:0.0f; dx -= ui::keyIsPressed(SDL_SCANCODE_A)?1.0f:0.0f; dy += ui::keyIsPressed(SDL_SCANCODE_E)?1.0f:0.0f; dy -= ui::keyIsPressed(SDL_SCANCODE_Q)?1.0f:0.0f; dz += ui::keyIsPressed(SDL_SCANCODE_W)?1.0f:0.0f; dz -= ui::keyIsPressed(SDL_SCANCODE_S)?1.0f:0.0f; pitch += ui::keyIsPressed(SDL_SCANCODE_KP_8)?1.50f:0.0f; pitch -= ui::keyIsPressed(SDL_SCANCODE_KP_5)?1.50f:0.0f; heading += ui::keyIsPressed(SDL_SCANCODE_KP_4)?1.50f:0.0f; heading -= ui::keyIsPressed(SDL_SCANCODE_KP_6)?1.50f:0.0f; camera->rotateSmoothly(heading * FLT_DEG_TO_RAD_SCALE, pitch * FLT_DEG_TO_RAD_SCALE); camera->rotateSmoothly((float)-ui::deltaX * FLT_DEG_TO_RAD_SCALE, (float)-ui::deltaY * FLT_DEG_TO_RAD_SCALE); camera->updatePosition(dx, dy, dz, dt); } }
EventHandlerResult TopsyTurvy::onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t key_state) { if (mapped_key == Key_LeftShift || mapped_key == Key_RightShift) { is_shifted_ = keyIsPressed(key_state); if (is_active_) return EventHandlerResult::EVENT_CONSUMED; } if (mapped_key < ranges::TT_FIRST || mapped_key > ranges::TT_LAST) { if (keyToggledOn(key_state) && (mapped_key < Key_LeftControl || mapped_key > Key_RightGui)) { last_pressed_position_ = row * COLS + col; } return EventHandlerResult::OK; } is_active_ = keyIsPressed(key_state); if (keyToggledOn(key_state)) { last_pressed_position_ = row * COLS + col; } else { if (last_pressed_position_ != row * COLS + col) { return EventHandlerResult::EVENT_CONSUMED; } } mapped_key.raw = mapped_key.raw - ranges::TT_FIRST; // invert the shift state if (!is_shifted_) { mapped_key.flags |= SHIFT_HELD; return EventHandlerResult::OK; } if (keyIsPressed(key_state)) { hid::releaseKey(Key_LeftShift); hid::releaseKey(Key_RightShift); return EventHandlerResult::OK; } return EventHandlerResult::EVENT_CONSUMED; }