mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	core: hid: Update motion on a better place
This commit is contained in:
		@@ -979,7 +979,6 @@ void EmulatedController::SetMotion(const Common::Input::CallbackStatus& callback
 | 
			
		||||
    emulated.SetUserGyroThreshold(raw_status.gyro.x.properties.threshold);
 | 
			
		||||
    emulated.UpdateRotation(raw_status.delta_timestamp);
 | 
			
		||||
    emulated.UpdateOrientation(raw_status.delta_timestamp);
 | 
			
		||||
    force_update_motion = raw_status.force_update;
 | 
			
		||||
 | 
			
		||||
    auto& motion = controller.motion_state[index];
 | 
			
		||||
    motion.accel = emulated.GetAcceleration();
 | 
			
		||||
@@ -1618,19 +1617,6 @@ NpadGcTriggerState EmulatedController::GetTriggers() const {
 | 
			
		||||
 | 
			
		||||
MotionState EmulatedController::GetMotions() const {
 | 
			
		||||
    std::unique_lock lock{mutex};
 | 
			
		||||
 | 
			
		||||
    // Some drivers like mouse motion need constant refreshing
 | 
			
		||||
    if (force_update_motion) {
 | 
			
		||||
        for (auto& device : motion_devices) {
 | 
			
		||||
            if (!device) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            lock.unlock();
 | 
			
		||||
            device->ForceUpdate();
 | 
			
		||||
            lock.lock();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return controller.motion_state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1696,8 +1682,21 @@ void EmulatedController::DeleteCallback(int key) {
 | 
			
		||||
    callback_list.erase(iterator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmulatedController::TurboButtonUpdate() {
 | 
			
		||||
void EmulatedController::StatusUpdate() {
 | 
			
		||||
    turbo_button_state = (turbo_button_state + 1) % (TURBO_BUTTON_DELAY * 2);
 | 
			
		||||
 | 
			
		||||
    // Some drivers like key motion need constant refreshing
 | 
			
		||||
    for (std::size_t index = 0; index < motion_devices.size(); ++index) {
 | 
			
		||||
        const auto& raw_status = controller.motion_values[index].raw_status;
 | 
			
		||||
        auto& device = motion_devices[index];
 | 
			
		||||
        if (!raw_status.force_update) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (!device) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        device->ForceUpdate();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NpadButton EmulatedController::GetTurboButtonMask() const {
 | 
			
		||||
 
 | 
			
		||||
@@ -415,8 +415,8 @@ public:
 | 
			
		||||
     */
 | 
			
		||||
    void DeleteCallback(int key);
 | 
			
		||||
 | 
			
		||||
    /// Swaps the state of the turbo buttons
 | 
			
		||||
    void TurboButtonUpdate();
 | 
			
		||||
    /// Swaps the state of the turbo buttons and updates motion input
 | 
			
		||||
    void StatusUpdate();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    /// creates input devices from params
 | 
			
		||||
@@ -528,7 +528,6 @@ private:
 | 
			
		||||
    bool is_configuring{false};
 | 
			
		||||
    bool system_buttons_enabled{true};
 | 
			
		||||
    f32 motion_sensitivity{Core::HID::MotionInput::IsAtRestStandard};
 | 
			
		||||
    bool force_update_motion{false};
 | 
			
		||||
    u32 turbo_button_state{0};
 | 
			
		||||
 | 
			
		||||
    // Temporary values to avoid doing changes while the controller is in configuring mode
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,7 @@ Common::Input::MotionStatus TransformToMotion(const Common::Input::CallbackStatu
 | 
			
		||||
            .range = 1.0f,
 | 
			
		||||
            .offset = 0.0f,
 | 
			
		||||
        };
 | 
			
		||||
        status.delta_timestamp = 5000;
 | 
			
		||||
        status.delta_timestamp = 1000;
 | 
			
		||||
        status.force_update = true;
 | 
			
		||||
        status.accel.x = {
 | 
			
		||||
            .value = 0.0f,
 | 
			
		||||
 
 | 
			
		||||
@@ -423,8 +423,8 @@ void Controller_NPad::RequestPadStateUpdate(Core::HID::NpadIdType npad_id) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // This function is unique to yuzu for the turbo buttons to work properly
 | 
			
		||||
    controller.device->TurboButtonUpdate();
 | 
			
		||||
    // This function is unique to yuzu for the turbo buttons and motion to work properly
 | 
			
		||||
    controller.device->StatusUpdate();
 | 
			
		||||
 | 
			
		||||
    auto& pad_entry = controller.npad_pad_state;
 | 
			
		||||
    auto& trigger_entry = controller.npad_trigger_state;
 | 
			
		||||
 
 | 
			
		||||
@@ -667,7 +667,7 @@ public:
 | 
			
		||||
            .raw_value = input_engine->GetAxis(identifier, axis_z),
 | 
			
		||||
            .properties = properties_z,
 | 
			
		||||
        };
 | 
			
		||||
        status.delta_timestamp = 5000;
 | 
			
		||||
        status.delta_timestamp = 1000;
 | 
			
		||||
        status.force_update = true;
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user