Skip to content

Commit

Permalink
stick sensitivity (#402)
Browse files Browse the repository at this point in the history
  • Loading branch information
briaguya-ai authored Dec 23, 2023
1 parent d23be4c commit 15d57d8
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
37 changes: 33 additions & 4 deletions src/controller/controldevice/controller/ControllerStick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ namespace LUS {
ControllerStick::ControllerStick(uint8_t portIndex, Stick stick)
: mPortIndex(portIndex), mStick(stick), mUseKeydownEventToCreateNewMapping(false),
mKeyboardScancodeForNewMapping(KbScancode::LUS_KB_UNKNOWN) {
mDeadzonePercentage = 20;
mSensitivityPercentage = DEFAULT_STICK_SENSITIVITY_PERCENTAGE;
mSensitivity = 1.0f;
mDeadzonePercentage = DEFAULT_STICK_DEADZONE_PERCENTAGE;
mDeadzone = 17.0f;
mNotchSnapAngle = 0;
}
Expand Down Expand Up @@ -186,10 +188,15 @@ void ControllerStick::ReloadAllMappingsFromConfig() {
}
}

SetSensitivity(CVarGetInteger(StringHelper::Sprintf("gControllers.Port%d.%s.SensitivityPercentage", mPortIndex + 1,
stickToConfigStickName[mStick].c_str())
.c_str(),
DEFAULT_STICK_SENSITIVITY_PERCENTAGE));

SetDeadzone(CVarGetInteger(StringHelper::Sprintf("gControllers.Port%d.%s.DeadzonePercentage", mPortIndex + 1,
stickToConfigStickName[mStick].c_str())
.c_str(),
20));
DEFAULT_STICK_DEADZONE_PERCENTAGE));

SetNotchSnapAngle(CVarGetInteger(StringHelper::Sprintf("gControllers.Port%d.%s.NotchSnapAngle", mPortIndex + 1,
stickToConfigStickName[mStick].c_str())
Expand Down Expand Up @@ -226,8 +233,8 @@ void ControllerStick::Process(int8_t& x, int8_t& y) {
auto sx = GetAxisDirectionValue(RIGHT) - GetAxisDirectionValue(LEFT);
auto sy = GetAxisDirectionValue(UP) - GetAxisDirectionValue(DOWN);

auto ux = fabs(sx);
auto uy = fabs(sy);
auto ux = fabs(sx) * mSensitivity;
auto uy = fabs(sy) * mSensitivity;

// create scaled circular dead-zone
auto len = sqrt(ux * ux + uy * uy);
Expand Down Expand Up @@ -367,6 +374,28 @@ bool ControllerStick::ProcessKeyboardEvent(LUS::KbEventType eventType, LUS::KbSc
}
#endif

void ControllerStick::SetSensitivity(uint8_t sensitivityPercentage) {
mSensitivityPercentage = sensitivityPercentage;
mSensitivity = sensitivityPercentage / 100.0f;
CVarSetInteger(StringHelper::Sprintf("gControllers.Port%d.%s.SensitivityPercentage", mPortIndex + 1,
stickToConfigStickName[mStick].c_str())
.c_str(),
mSensitivityPercentage);
CVarSave();
}

void ControllerStick::ResetSensitivityToDefault() {
SetSensitivity(DEFAULT_STICK_SENSITIVITY_PERCENTAGE);
}

uint8_t ControllerStick::GetSensitivityPercentage() {
return mSensitivityPercentage;
}

bool ControllerStick::SensitivityIsDefault() {
return mSensitivityPercentage == DEFAULT_STICK_SENSITIVITY_PERCENTAGE;
}

void ControllerStick::SetDeadzone(uint8_t deadzonePercentage) {
mDeadzonePercentage = deadzonePercentage;
mDeadzone = MAX_AXIS_RANGE * (deadzonePercentage / 100.0f);
Expand Down
9 changes: 9 additions & 0 deletions src/controller/controldevice/controller/ControllerStick.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

namespace LUS {

#define DEFAULT_STICK_SENSITIVITY_PERCENTAGE 100
#define DEFAULT_STICK_DEADZONE_PERCENTAGE 20
#define DEFAULT_NOTCH_SNAP_ANGLE 0

Expand Down Expand Up @@ -35,6 +36,11 @@ class ControllerStick {
bool AddOrEditAxisDirectionMappingFromRawPress(Direction direction, std::string id);
void Process(int8_t& x, int8_t& y);

void ResetSensitivityToDefault();
void SetSensitivity(uint8_t sensitivityPercentage);
uint8_t GetSensitivityPercentage();
bool SensitivityIsDefault();

void ResetDeadzoneToDefault();
void SetDeadzone(uint8_t deadzonePercentage);
uint8_t GetDeadzonePercentage();
Expand All @@ -60,6 +66,9 @@ class ControllerStick {
uint8_t mPortIndex;
Stick mStick;

uint8_t mSensitivityPercentage;
float mSensitivity;

// TODO: handle deadzones separately for X and Y?
uint8_t mDeadzonePercentage;
float mDeadzone;
Expand Down
15 changes: 15 additions & 0 deletions src/window/gui/InputEditorWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,21 @@ void InputEditorWindow::DrawStickSection(uint8_t port, uint8_t stick, int32_t id
DrawStickDirectionLine(ICON_FA_ARROW_RIGHT, port, stick, RIGHT, color);
ImGui::EndGroup();
if (ImGui::TreeNode(StringHelper::Sprintf("Analog Stick Options##%d", id).c_str())) {
ImGui::Text("Sensitivity:");
ImGui::SetNextItemWidth(160.0f);

int32_t sensitivityPercentage = controllerStick->GetSensitivityPercentage();
if (ImGui::SliderInt(StringHelper::Sprintf("##Sensitivity%d", id).c_str(), &sensitivityPercentage, 0, 200,
"%d%%", ImGuiSliderFlags_AlwaysClamp)) {
controllerStick->SetSensitivity(sensitivityPercentage);
}
if (!controllerStick->SensitivityIsDefault()) {
ImGui::SameLine();
if (ImGui::Button(StringHelper::Sprintf("Reset to Default###resetStickSensitivity%d", id).c_str())) {
controllerStick->ResetSensitivityToDefault();
}
}

ImGui::Text("Deadzone:");
ImGui::SetNextItemWidth(160.0f);

Expand Down

0 comments on commit 15d57d8

Please sign in to comment.