mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-21 22:03:36 -07:00
Fixed PS5 gyro & Added GUI calibration button
This commit is contained in:
parent
8a565f910a
commit
04f7efe588
3 changed files with 25 additions and 19 deletions
|
@ -30,7 +30,9 @@ struct SoHConfigType {
|
|||
float gyro_sensitivity = 1.0f;
|
||||
float rumble_strength = 1.0f;
|
||||
float input_scale = 1.0f;
|
||||
bool input_enabled = false;
|
||||
float gyroDriftX = 0.0f;
|
||||
float gyroDriftY = 0.0f;
|
||||
bool input_enabled = false;
|
||||
} controller;
|
||||
};
|
||||
|
||||
|
|
|
@ -7,12 +7,8 @@
|
|||
#include "Window.h"
|
||||
|
||||
extern "C" uint8_t __osMaxControllers;
|
||||
float gyroDriftX;
|
||||
float gyroDriftY;
|
||||
|
||||
namespace Ship {
|
||||
|
||||
|
||||
SDLController::SDLController(int32_t dwControllerNumber) : Controller(dwControllerNumber), Cont(nullptr), guid(INVALID_SDL_CONTROLLER_GUID) {
|
||||
|
||||
}
|
||||
|
@ -186,31 +182,31 @@ namespace Ship {
|
|||
SDL_GameControllerGetSensorData(Cont, SDL_SENSOR_GYRO, gyroData, 3);
|
||||
|
||||
const char* contName = SDL_GameControllerName(Cont);
|
||||
const int isSpecialController = strcmp("PS5 Controller", contName);
|
||||
const int isSpecialController = !strcmp("PS5 Controller", contName);
|
||||
const float gyroSensitivity = Game::Settings.controller.gyro_sensitivity;
|
||||
|
||||
if (gyroDriftX == 0) {
|
||||
if (isSpecialController == 0) {
|
||||
gyroDriftX = gyroData[2];
|
||||
if (Game::Settings.controller.gyroDriftX == 0) {
|
||||
Game::Settings.controller.gyroDriftX = gyroData[0];
|
||||
}
|
||||
|
||||
if (Game::Settings.controller.gyroDriftY == 0) {
|
||||
if (isSpecialController == 1) {
|
||||
Game::Settings.controller.gyroDriftY = gyroData[2];
|
||||
}
|
||||
else {
|
||||
gyroDriftX = gyroData[0];
|
||||
Game::Settings.controller.gyroDriftY = gyroData[1];
|
||||
}
|
||||
}
|
||||
|
||||
if (gyroDriftY == 0) {
|
||||
gyroDriftY = gyroData[1];
|
||||
}
|
||||
|
||||
if (isSpecialController == 0) {
|
||||
wGyroX = gyroData[2] - gyroDriftX;
|
||||
if (isSpecialController == 1) {
|
||||
wGyroX = gyroData[0] - Game::Settings.controller.gyroDriftX;
|
||||
wGyroY = -gyroData[2] - Game::Settings.controller.gyroDriftY;
|
||||
}
|
||||
else {
|
||||
wGyroX = gyroData[0] - gyroDriftX;
|
||||
wGyroX = gyroData[0] - Game::Settings.controller.gyroDriftX;
|
||||
wGyroY = gyroData[1] - Game::Settings.controller.gyroDriftY;
|
||||
}
|
||||
|
||||
wGyroY = gyroData[1] - gyroDriftY;
|
||||
|
||||
wGyroX *= gyroSensitivity;
|
||||
wGyroY *= gyroSensitivity;
|
||||
}
|
||||
|
|
|
@ -306,6 +306,14 @@ namespace SohImGui {
|
|||
if (ImGui::SliderFloat("##GYROSCOPE", &Game::Settings.controller.gyro_sensitivity, 0.0f, 1.0f, "")) {
|
||||
needs_save = true;
|
||||
}
|
||||
|
||||
if (ImGui::Button("Recalibrate Gyro")) {
|
||||
Game::Settings.controller.gyroDriftX = 0;
|
||||
Game::Settings.controller.gyroDriftY = 0;
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Text("Rumble Strength: %d %%", static_cast<int>(100 * Game::Settings.controller.rumble_strength));
|
||||
if (ImGui::SliderFloat("##RUMBLE", &Game::Settings.controller.rumble_strength, 0.0f, 1.0f, "")) {
|
||||
needs_save = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue