Fixed PS5 gyro & Added GUI calibration button

This commit is contained in:
MelonSpeedruns 2022-03-24 12:43:15 -04:00
commit 04f7efe588
3 changed files with 25 additions and 19 deletions

View file

@ -30,7 +30,9 @@ struct SoHConfigType {
float gyro_sensitivity = 1.0f; float gyro_sensitivity = 1.0f;
float rumble_strength = 1.0f; float rumble_strength = 1.0f;
float input_scale = 1.0f; float input_scale = 1.0f;
bool input_enabled = false; float gyroDriftX = 0.0f;
float gyroDriftY = 0.0f;
bool input_enabled = false;
} controller; } controller;
}; };

View file

@ -7,12 +7,8 @@
#include "Window.h" #include "Window.h"
extern "C" uint8_t __osMaxControllers; extern "C" uint8_t __osMaxControllers;
float gyroDriftX;
float gyroDriftY;
namespace Ship { namespace Ship {
SDLController::SDLController(int32_t dwControllerNumber) : Controller(dwControllerNumber), Cont(nullptr), guid(INVALID_SDL_CONTROLLER_GUID) { 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); SDL_GameControllerGetSensorData(Cont, SDL_SENSOR_GYRO, gyroData, 3);
const char* contName = SDL_GameControllerName(Cont); 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; const float gyroSensitivity = Game::Settings.controller.gyro_sensitivity;
if (gyroDriftX == 0) { if (Game::Settings.controller.gyroDriftX == 0) {
if (isSpecialController == 0) { Game::Settings.controller.gyroDriftX = gyroData[0];
gyroDriftX = gyroData[2]; }
if (Game::Settings.controller.gyroDriftY == 0) {
if (isSpecialController == 1) {
Game::Settings.controller.gyroDriftY = gyroData[2];
} }
else { else {
gyroDriftX = gyroData[0]; Game::Settings.controller.gyroDriftY = gyroData[1];
} }
} }
if (gyroDriftY == 0) { if (isSpecialController == 1) {
gyroDriftY = gyroData[1]; wGyroX = gyroData[0] - Game::Settings.controller.gyroDriftX;
} wGyroY = -gyroData[2] - Game::Settings.controller.gyroDriftY;
if (isSpecialController == 0) {
wGyroX = gyroData[2] - gyroDriftX;
} }
else { 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; wGyroX *= gyroSensitivity;
wGyroY *= gyroSensitivity; wGyroY *= gyroSensitivity;
} }

View file

@ -306,6 +306,14 @@ namespace SohImGui {
if (ImGui::SliderFloat("##GYROSCOPE", &Game::Settings.controller.gyro_sensitivity, 0.0f, 1.0f, "")) { if (ImGui::SliderFloat("##GYROSCOPE", &Game::Settings.controller.gyro_sensitivity, 0.0f, 1.0f, "")) {
needs_save = true; 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)); 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, "")) { if (ImGui::SliderFloat("##RUMBLE", &Game::Settings.controller.rumble_strength, 0.0f, 1.0f, "")) {
needs_save = true; needs_save = true;