|
|
|
@ -19,52 +19,53 @@ void EmulatedDevices::ReloadFromSettings() {
|
|
|
|
|
|
|
|
|
|
void EmulatedDevices::ReloadInput() {
|
|
|
|
|
// If you load any device here add the equivalent to the UnloadInput() function
|
|
|
|
|
|
|
|
|
|
// Native Mouse is mapped on port 1, pad 0
|
|
|
|
|
const Common::ParamPackage mouse_params{"engine:mouse,port:1,pad:0"};
|
|
|
|
|
|
|
|
|
|
// Keyboard keys is mapped on port 1, pad 0 for normal keys, pad 1 for moddifier keys
|
|
|
|
|
const Common::ParamPackage keyboard_params{"engine:keyboard,port:1"};
|
|
|
|
|
|
|
|
|
|
std::size_t key_index = 0;
|
|
|
|
|
for (auto& mouse_device : mouse_button_devices) {
|
|
|
|
|
Common::ParamPackage mouse_params;
|
|
|
|
|
mouse_params.Set("engine", "mouse");
|
|
|
|
|
mouse_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
mouse_device = Common::Input::CreateInputDevice(mouse_params);
|
|
|
|
|
Common::ParamPackage mouse_button_params = mouse_params;
|
|
|
|
|
mouse_button_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
mouse_device = Common::Input::CreateInputDevice(mouse_button_params);
|
|
|
|
|
key_index++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mouse_stick_device =
|
|
|
|
|
Common::Input::CreateInputDeviceFromString("engine:mouse,axis_x:0,axis_y:1");
|
|
|
|
|
Common::ParamPackage mouse_position_params = mouse_params;
|
|
|
|
|
mouse_position_params.Set("axis_x", 0);
|
|
|
|
|
mouse_position_params.Set("axis_y", 1);
|
|
|
|
|
mouse_position_params.Set("deadzone", 0.0f);
|
|
|
|
|
mouse_position_params.Set("range", 1.0f);
|
|
|
|
|
mouse_position_params.Set("threshold", 0.0f);
|
|
|
|
|
mouse_stick_device = Common::Input::CreateInputDevice(mouse_position_params);
|
|
|
|
|
|
|
|
|
|
// First two axis are reserved for mouse position
|
|
|
|
|
key_index = 2;
|
|
|
|
|
for (auto& mouse_device : mouse_analog_devices) {
|
|
|
|
|
// Mouse axis are only mapped on port 1, pad 0
|
|
|
|
|
Common::ParamPackage mouse_params;
|
|
|
|
|
mouse_params.Set("engine", "mouse");
|
|
|
|
|
mouse_params.Set("axis", static_cast<int>(key_index));
|
|
|
|
|
mouse_params.Set("port", 1);
|
|
|
|
|
mouse_params.Set("pad", 0);
|
|
|
|
|
mouse_device = Common::Input::CreateInputDevice(mouse_params);
|
|
|
|
|
for (auto& mouse_device : mouse_wheel_devices) {
|
|
|
|
|
Common::ParamPackage mouse_wheel_params = mouse_params;
|
|
|
|
|
mouse_wheel_params.Set("axis", static_cast<int>(key_index));
|
|
|
|
|
mouse_device = Common::Input::CreateInputDevice(mouse_wheel_params);
|
|
|
|
|
key_index++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
key_index = 0;
|
|
|
|
|
for (auto& keyboard_device : keyboard_devices) {
|
|
|
|
|
// Keyboard keys are only mapped on port 1, pad 0
|
|
|
|
|
Common::ParamPackage keyboard_params;
|
|
|
|
|
keyboard_params.Set("engine", "keyboard");
|
|
|
|
|
keyboard_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
keyboard_params.Set("port", 1);
|
|
|
|
|
keyboard_params.Set("pad", 0);
|
|
|
|
|
keyboard_device = Common::Input::CreateInputDevice(keyboard_params);
|
|
|
|
|
Common::ParamPackage keyboard_key_params = keyboard_params;
|
|
|
|
|
keyboard_key_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
keyboard_key_params.Set("pad", 0);
|
|
|
|
|
keyboard_device = Common::Input::CreateInputDevice(keyboard_key_params);
|
|
|
|
|
key_index++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
key_index = 0;
|
|
|
|
|
for (auto& keyboard_device : keyboard_modifier_devices) {
|
|
|
|
|
// Keyboard moddifiers are only mapped on port 1, pad 1
|
|
|
|
|
Common::ParamPackage keyboard_params;
|
|
|
|
|
keyboard_params.Set("engine", "keyboard");
|
|
|
|
|
keyboard_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
keyboard_params.Set("port", 1);
|
|
|
|
|
keyboard_params.Set("pad", 1);
|
|
|
|
|
keyboard_device = Common::Input::CreateInputDevice(keyboard_params);
|
|
|
|
|
Common::ParamPackage keyboard_moddifier_params = keyboard_params;
|
|
|
|
|
keyboard_moddifier_params.Set("button", static_cast<int>(key_index));
|
|
|
|
|
keyboard_moddifier_params.Set("pad", 1);
|
|
|
|
|
keyboard_device = Common::Input::CreateInputDevice(keyboard_moddifier_params);
|
|
|
|
|
key_index++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -80,14 +81,14 @@ void EmulatedDevices::ReloadInput() {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (std::size_t index = 0; index < mouse_analog_devices.size(); ++index) {
|
|
|
|
|
if (!mouse_analog_devices[index]) {
|
|
|
|
|
for (std::size_t index = 0; index < mouse_wheel_devices.size(); ++index) {
|
|
|
|
|
if (!mouse_wheel_devices[index]) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
mouse_analog_devices[index]->SetCallback({
|
|
|
|
|
mouse_wheel_devices[index]->SetCallback({
|
|
|
|
|
.on_change =
|
|
|
|
|
[this, index](const Common::Input::CallbackStatus& callback) {
|
|
|
|
|
SetMouseAnalog(callback, index);
|
|
|
|
|
SetMouseWheel(callback, index);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -95,7 +96,9 @@ void EmulatedDevices::ReloadInput() {
|
|
|
|
|
if (mouse_stick_device) {
|
|
|
|
|
mouse_stick_device->SetCallback({
|
|
|
|
|
.on_change =
|
|
|
|
|
[this](const Common::Input::CallbackStatus& callback) { SetMouseStick(callback); },
|
|
|
|
|
[this](const Common::Input::CallbackStatus& callback) {
|
|
|
|
|
SetMousePosition(callback);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -128,7 +131,7 @@ void EmulatedDevices::UnloadInput() {
|
|
|
|
|
for (auto& button : mouse_button_devices) {
|
|
|
|
|
button.reset();
|
|
|
|
|
}
|
|
|
|
|
for (auto& analog : mouse_analog_devices) {
|
|
|
|
|
for (auto& analog : mouse_wheel_devices) {
|
|
|
|
|
analog.reset();
|
|
|
|
|
}
|
|
|
|
|
mouse_stick_device.reset();
|
|
|
|
@ -362,18 +365,18 @@ void EmulatedDevices::SetMouseButton(const Common::Input::CallbackStatus& callba
|
|
|
|
|
TriggerOnChange(DeviceTriggerType::Mouse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EmulatedDevices::SetMouseAnalog(const Common::Input::CallbackStatus& callback,
|
|
|
|
|
void EmulatedDevices::SetMouseWheel(const Common::Input::CallbackStatus& callback,
|
|
|
|
|
std::size_t index) {
|
|
|
|
|
if (index >= device_status.mouse_analog_values.size()) {
|
|
|
|
|
if (index >= device_status.mouse_wheel_values.size()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
std::unique_lock lock{mutex};
|
|
|
|
|
const auto analog_value = TransformToAnalog(callback);
|
|
|
|
|
|
|
|
|
|
device_status.mouse_analog_values[index] = analog_value;
|
|
|
|
|
device_status.mouse_wheel_values[index] = analog_value;
|
|
|
|
|
|
|
|
|
|
if (is_configuring) {
|
|
|
|
|
device_status.mouse_position_state = {};
|
|
|
|
|
device_status.mouse_wheel_state = {};
|
|
|
|
|
lock.unlock();
|
|
|
|
|
TriggerOnChange(DeviceTriggerType::Mouse);
|
|
|
|
|
return;
|
|
|
|
@ -392,7 +395,7 @@ void EmulatedDevices::SetMouseAnalog(const Common::Input::CallbackStatus& callba
|
|
|
|
|
TriggerOnChange(DeviceTriggerType::Mouse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EmulatedDevices::SetMouseStick(const Common::Input::CallbackStatus& callback) {
|
|
|
|
|
void EmulatedDevices::SetMousePosition(const Common::Input::CallbackStatus& callback) {
|
|
|
|
|
std::unique_lock lock{mutex};
|
|
|
|
|
const auto touch_value = TransformToTouch(callback);
|
|
|
|
|
|
|
|
|
|