JNI_METHOD(void, nativeTouch)(JNIEnv* env, jobject obj, jint id, jint state, jfloat x, jfloat y) { // gamepad / keyboard if (state < 0) { switch (state) { case -3 : Input::setPos(ikJoyL, vec2(DeadZone(x), DeadZone(y))); break; case -4 : Input::setPos(ikJoyR, vec2(DeadZone(x), DeadZone(y))); break; case -5 : Input::setPos(ikJoyPOV, vec2(float(getPOV(sign(x), sign(y))), 0.0f)); break; default : { int btn = int(x); InputKey key = btn <= 0 ? InputKey(ikJoyA - btn) : keyToInputKey(btn); Input::setDown(key, state != -1); } } return; } if (id == -100) { switch (state) { case 0 : Input::head.basis.rot.x = x; Input::head.basis.rot.y = y; break; case 1 : Input::head.basis.rot.z = x; Input::head.basis.rot.w = y; Input::head.set(); break; } return; } // touch InputKey key = Input::getTouch(id); if (key == ikNone) return; Input::setPos(key, vec2(x, y)); if (state == 1 || state == 2) Input::setDown(key, state == 2); }
void ACinemotusPlayerController::RelativeTick(float DeltaTime) { UPrimitiveComponent* prim = GetPawn()->GetMovementComponent()->UpdatedComponent; bool SetPrimDirectly = true; FQuat finalQuat; if ((currentCaptureState & ECinemotusCaptureState::ERelativeRotation) == ECinemotusCaptureState::ERelativeRotation) { FRotator rot = HydraLatestData->controllers[CAM_HAND].angular_velocity; const FQuat OldRotation = prim->GetComponentQuat();//GetControlRotation().Quaternion(); //TODO: hold onto a quaternion potentially const FRotator OldRotationRotator = OldRotation.Rotator(); FRotator worldRotator = FRotator(0, DeadZone(rot.Yaw*DeltaTime, 0.0) + addYaw, 0); FRotator worldRotator1 = FRotator(DeadZone(rot.Pitch*DeltaTime, 0.0), 0, 0); FRotator localRotator = FRotator(0, 0, DeadZone(rot.Roll*DeltaTime, 0.0)); const FQuat WorldRot = worldRotator.Quaternion(); const FQuat pitchRot = worldRotator1.Quaternion(); const FQuat LocalRot = localRotator.Quaternion(); ////This one does roll around local forward, pitch around world right flattened and yaw around world up //// FQuat finalQuat = pitchRot*WorldRot*((OldRotation*LocalRot)); finalQuat = WorldRot*((OldRotation*LocalRot)*pitchRot); } else { finalQuat = FRotator(0, addYaw, 0).Quaternion()*prim->GetComponentQuat(); } SetControlRotation(finalQuat.Rotator()); if (SetPrimDirectly && prim) { prim->SetWorldLocationAndRotation(prim->GetComponentLocation(), finalQuat);// not sure need } HandleMovementAbs(DeltaTime, (currentCaptureState & ECinemotusCaptureState::ERelativeTranslation) == ECinemotusCaptureState::ERelativeTranslation); }
void CXBApplicationEx::ReadInput() { MEASURE_FUNCTION; //----------------------------------------- // Handle input //----------------------------------------- // Read the input from the IR remote #ifdef HAS_IR_REMOTE XBInput_GetInput( m_IR_Remote ); ZeroMemory( &m_DefaultIR_Remote, sizeof(m_DefaultIR_Remote) ); for ( DWORD i = 0; i < 4; i++ ) { if ( m_IR_Remote[i].hDevice) { m_DefaultIR_Remote.wButtons = m_IR_Remote[i].wButtons; } } #endif #ifdef HAS_SDL //SDL_PumpEvents(); static RESOLUTION windowres = WINDOW; // Read the input from the mouse g_Mouse.Update(); SDL_Event event; while (SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: if (!g_application.m_bStop) g_application.getApplicationMessenger().Shutdown(); break; case SDL_VIDEORESIZE: #ifndef __APPLE__ g_settings.m_ResInfo[WINDOW].iWidth = event.resize.w; g_settings.m_ResInfo[WINDOW].iHeight = event.resize.h; g_graphicsContext.ResetOverscan(g_settings.m_ResInfo[WINDOW]); g_graphicsContext.SetVideoResolution(windowres, FALSE, false); g_Mouse.SetResolution(g_settings.m_ResInfo[WINDOW].iWidth, g_settings.m_ResInfo[WINDOW].iHeight, 1, 1); g_fontManager.ReloadTTFFonts(); #endif break; #ifdef HAS_SDL_JOYSTICK case SDL_JOYBUTTONUP: case SDL_JOYBUTTONDOWN: case SDL_JOYAXISMOTION: case SDL_JOYBALLMOTION: case SDL_JOYHATMOTION: g_Joystick.Update(event); break; #endif case SDL_KEYDOWN: g_Keyboard.Update(event); break; case SDL_ACTIVEEVENT: //If the window was inconified or restored if( event.active.state & SDL_APPACTIVE ) { m_AppActive = event.active.gain != 0; } break; case SDL_MOUSEBUTTONDOWN: // mouse scroll wheel. if (event.button.button == 4) g_Mouse.UpdateMouseWheel(1); else if (event.button.button == 5) g_Mouse.UpdateMouseWheel(-1); break; } } #else // Read the input from the keyboard g_Keyboard.Update(); // Read the input from the mouse g_Mouse.Update(); #endif #ifdef HAS_LIRC g_RemoteControl.Update(); #endif #ifdef HAS_GAMEPAD // Read the input for all connected gampads XBInput_GetInput( m_Gamepad ); // Lump inputs of all connected gamepads into one common structure. // This is done so apps that need only one gamepad can function with // any gamepad. ZeroMemory( &m_DefaultGamepad, sizeof(m_DefaultGamepad) ); float maxTrigger = 0.0f; for ( DWORD i = 0; i < 4; i++ ) { if ( m_Gamepad[i].hDevice ) { if (maxTrigger < MaxTrigger(m_Gamepad[i])) { maxTrigger = MaxTrigger(m_Gamepad[i]); m_DefaultGamepad.fX1 = m_Gamepad[i].fX1; m_DefaultGamepad.fY1 = m_Gamepad[i].fY1; m_DefaultGamepad.fX2 = m_Gamepad[i].fX2; m_DefaultGamepad.fY2 = m_Gamepad[i].fY2; } m_DefaultGamepad.wButtons |= m_Gamepad[i].wButtons; m_DefaultGamepad.wPressedButtons |= m_Gamepad[i].wPressedButtons; m_DefaultGamepad.wLastButtons |= m_Gamepad[i].wLastButtons; for ( DWORD b = 0; b < 8; b++ ) { m_DefaultGamepad.bAnalogButtons[b] |= m_Gamepad[i].bAnalogButtons[b]; m_DefaultGamepad.bPressedAnalogButtons[b] |= m_Gamepad[i].bPressedAnalogButtons[b]; m_DefaultGamepad.bLastAnalogButtons[b] |= m_Gamepad[i].bLastAnalogButtons[b]; } } } // Secure the deadzones of the analog sticks m_DefaultGamepad.fX1 = DeadZone(m_DefaultGamepad.fX1); m_DefaultGamepad.fY1 = DeadZone(m_DefaultGamepad.fY1); m_DefaultGamepad.fX2 = DeadZone(m_DefaultGamepad.fX2); m_DefaultGamepad.fY2 = DeadZone(m_DefaultGamepad.fY2); #endif }