Add random motion input to keyboard
This commit is contained in:
		
							parent
							
								
									03b574ae22
								
							
						
					
					
						commit
						2978232390
					
				| @ -7,6 +7,8 @@ add_library(input_common STATIC | ||||
|     main.h | ||||
|     motion_emu.cpp | ||||
|     motion_emu.h | ||||
|     motion_from_button.cpp | ||||
|     motion_from_button.h | ||||
|     motion_input.cpp | ||||
|     motion_input.h | ||||
|     settings.cpp | ||||
|  | ||||
| @ -11,6 +11,7 @@ | ||||
| #include "input_common/keyboard.h" | ||||
| #include "input_common/main.h" | ||||
| #include "input_common/motion_emu.h" | ||||
| #include "input_common/motion_from_button.h" | ||||
| #include "input_common/touch_from_button.h" | ||||
| #include "input_common/udp/client.h" | ||||
| #include "input_common/udp/udp.h" | ||||
| @ -32,6 +33,8 @@ struct InputSubsystem::Impl { | ||||
|         Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard); | ||||
|         Input::RegisterFactory<Input::AnalogDevice>("analog_from_button", | ||||
|                                                     std::make_shared<AnalogFromButton>()); | ||||
|         Input::RegisterFactory<Input::MotionDevice>("keyboard", | ||||
|                                                     std::make_shared<MotionFromButton>()); | ||||
|         motion_emu = std::make_shared<MotionEmu>(); | ||||
|         Input::RegisterFactory<Input::MotionDevice>("motion_emu", motion_emu); | ||||
|         Input::RegisterFactory<Input::TouchDevice>("touch_from_button", | ||||
| @ -50,6 +53,7 @@ struct InputSubsystem::Impl { | ||||
| 
 | ||||
|     void Shutdown() { | ||||
|         Input::UnregisterFactory<Input::ButtonDevice>("keyboard"); | ||||
|         Input::UnregisterFactory<Input::MotionDevice>("keyboard"); | ||||
|         keyboard.reset(); | ||||
|         Input::UnregisterFactory<Input::AnalogDevice>("analog_from_button"); | ||||
|         Input::UnregisterFactory<Input::MotionDevice>("motion_emu"); | ||||
|  | ||||
							
								
								
									
										34
									
								
								src/input_common/motion_from_button.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/input_common/motion_from_button.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| // Copyright 2020 yuzu Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "input_common/motion_from_button.h" | ||||
| #include "input_common/motion_input.h" | ||||
| 
 | ||||
| namespace InputCommon { | ||||
| 
 | ||||
| class MotionKey final : public Input::MotionDevice { | ||||
| public: | ||||
|     using Button = std::unique_ptr<Input::ButtonDevice>; | ||||
| 
 | ||||
|     MotionKey(Button key_) : key(std::move(key_)) {} | ||||
| 
 | ||||
|     Input::MotionStatus GetStatus() const override { | ||||
| 
 | ||||
|         if (key->GetStatus()) { | ||||
|             return motion.GetRandomMotion(2, 6); | ||||
|         } | ||||
|         return motion.GetRandomMotion(0, 0); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     Button key; | ||||
|     InputCommon::MotionInput motion{0.0f, 0.0f, 0.0f}; | ||||
| }; | ||||
| 
 | ||||
| std::unique_ptr<Input::MotionDevice> MotionFromButton::Create(const Common::ParamPackage& params) { | ||||
|     auto key = Input::CreateDevice<Input::ButtonDevice>(params.Serialize()); | ||||
|     return std::make_unique<MotionKey>(std::move(key)); | ||||
| } | ||||
| 
 | ||||
| } // namespace InputCommon
 | ||||
							
								
								
									
										25
									
								
								src/input_common/motion_from_button.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/input_common/motion_from_button.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| // Copyright 2020 yuzu Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "core/frontend/input.h" | ||||
| 
 | ||||
| namespace InputCommon { | ||||
| 
 | ||||
| /**
 | ||||
|  * An motion device factory that takes a keyboard button and uses it as a random | ||||
|  * motion device. | ||||
|  */ | ||||
| class MotionFromButton final : public Input::Factory<Input::MotionDevice> { | ||||
| public: | ||||
|     /**
 | ||||
|      * Creates an motion device from button devices | ||||
|      * @param params contains parameters for creating the device: | ||||
|      *     - "key": a serialized ParamPackage for creating a button device | ||||
|      */ | ||||
|     std::unique_ptr<Input::MotionDevice> Create(const Common::ParamPackage& params) override; | ||||
| }; | ||||
| 
 | ||||
| } // namespace InputCommon
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 german
						german