mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Moved analog direction logic to sdl_impl
This commit is contained in:
		
							parent
							
								
									231d9c10f3
								
							
						
					
					
						commit
						635deb70d4
					
				| @ -15,6 +15,13 @@ | ||||
| 
 | ||||
| namespace Input { | ||||
| 
 | ||||
| enum class AnalogDirection : u8 { | ||||
|     RIGHT, | ||||
|     LEFT, | ||||
|     UP, | ||||
|     DOWN, | ||||
| }; | ||||
| 
 | ||||
| /// An abstract class template for an input device (a button, an analog input, etc.).
 | ||||
| template <typename StatusType> | ||||
| class InputDevice { | ||||
| @ -23,6 +30,9 @@ public: | ||||
|     virtual StatusType GetStatus() const { | ||||
|         return {}; | ||||
|     } | ||||
|     virtual bool GetAnalogDirectionStatus(AnalogDirection direction) const { | ||||
|         return {}; | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| /// An abstract class template for a factory that can create input devices.
 | ||||
|  | ||||
| @ -274,15 +274,28 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | ||||
|     pad_state.d_right.Assign(button_state[DRight - BUTTON_HID_BEGIN]->GetStatus()); | ||||
|     pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus()); | ||||
| 
 | ||||
|     pad_state.l_stick_right.Assign(stick_l_x_f > 0.3f); | ||||
|     pad_state.l_stick_left.Assign(stick_l_x_f < -0.3f); | ||||
|     pad_state.l_stick_up.Assign(stick_l_y_f > 0.3f); | ||||
|     pad_state.l_stick_down.Assign(stick_l_y_f < -0.3f); | ||||
|     pad_state.l_stick_right.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::RIGHT)); | ||||
|     pad_state.l_stick_left.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::LEFT)); | ||||
|     pad_state.l_stick_up.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::UP)); | ||||
|     pad_state.l_stick_down.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::DOWN)); | ||||
| 
 | ||||
|     pad_state.r_stick_right.Assign(stick_r_x_f > 0.3f); | ||||
|     pad_state.r_stick_left.Assign(stick_r_x_f < -0.3f); | ||||
|     pad_state.r_stick_up.Assign(stick_r_y_f > 0.3f); | ||||
|     pad_state.r_stick_down.Assign(stick_r_y_f < -0.3f); | ||||
|     pad_state.r_stick_up.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|                                     ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); | ||||
|     pad_state.r_stick_left.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|                                       ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); | ||||
|     pad_state.r_stick_right.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|             ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); | ||||
|     pad_state.r_stick_down.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|                                       ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); | ||||
| 
 | ||||
|     pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus()); | ||||
|     pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus()); | ||||
|  | ||||
| @ -342,6 +342,22 @@ public: | ||||
|         return std::make_tuple<float, float>(0.0f, 0.0f); | ||||
|     } | ||||
| 
 | ||||
|     bool GetAnalogDirectionStatus(Input::AnalogDirection direction) const override { | ||||
|         const auto [x, y] = GetStatus(); | ||||
|         const float directional_deadzone = 0.4f; | ||||
|         switch (direction) { | ||||
|         case Input::AnalogDirection::RIGHT: | ||||
|             return x > directional_deadzone; | ||||
|         case Input::AnalogDirection::LEFT: | ||||
|             return x < -directional_deadzone; | ||||
|         case Input::AnalogDirection::UP: | ||||
|             return y > directional_deadzone; | ||||
|         case Input::AnalogDirection::DOWN: | ||||
|             return y < -directional_deadzone; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     std::shared_ptr<SDLJoystick> joystick; | ||||
|     const int axis_x; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 CJBok
						CJBok