Skip to content

Commit 62019c9

Browse files
authored
Merge pull request #18621 from hrydgard/analog-trigger-sensitivity
Add "Analog trigger threshold" setting, for conversion of analog trigger inputs to digital button inputs.
2 parents ce72887 + 549071e commit 62019c9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+107
-15
lines changed

Core/Config.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ static const ConfigSetting controlSettings[] = {
827827
ConfigSetting("AnalogAutoRotSpeed", &g_Config.fAnalogAutoRotSpeed, 8.0f, CfgFlag::PER_GAME),
828828

829829
ConfigSetting("AnalogLimiterDeadzone", &g_Config.fAnalogLimiterDeadzone, 0.6f, CfgFlag::DEFAULT),
830+
ConfigSetting("AnalogTriggerThreshold", &g_Config.fAnalogTriggerThreshold, 0.75f, CfgFlag::DEFAULT),
830831

831832
ConfigSetting("AllowMappingCombos", &g_Config.bAllowMappingCombos, false, CfgFlag::DEFAULT),
832833

Core/Config.h

+3
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,9 @@ struct Config {
396396
// Sets up how much the analog limiter button restricts digital->analog input.
397397
float fAnalogLimiterDeadzone;
398398

399+
// Trigger configuration
400+
float fAnalogTriggerThreshold;
401+
399402
// Sets whether combo mapping is enabled.
400403
bool bAllowMappingCombos;
401404

Core/ControlMapper.cpp

+20-6
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,23 @@
1515

1616
using KeyMap::MultiInputMapping;
1717

18-
// TODO: Possibly make these thresholds configurable?
19-
static float GetDeviceAxisThreshold(int device) {
20-
return device == DEVICE_ID_MOUSE ? AXIS_BIND_THRESHOLD_MOUSE : AXIS_BIND_THRESHOLD;
18+
const float AXIS_BIND_THRESHOLD = 0.75f;
19+
const float AXIS_BIND_THRESHOLD_MOUSE = 0.01f;
20+
21+
float GetDeviceAxisThreshold(int device, const InputMapping &mapping) {
22+
if (device == DEVICE_ID_MOUSE) {
23+
return AXIS_BIND_THRESHOLD_MOUSE;
24+
}
25+
if (mapping.IsAxis()) {
26+
switch (KeyMap::GetAxisType((InputAxis)mapping.Axis(nullptr))) {
27+
case KeyMap::AxisType::TRIGGER:
28+
return g_Config.fAnalogTriggerThreshold;
29+
default:
30+
return AXIS_BIND_THRESHOLD;
31+
}
32+
} else {
33+
return AXIS_BIND_THRESHOLD;
34+
}
2135
}
2236

2337
static int GetOppositeVKey(int vkey) {
@@ -311,7 +325,7 @@ bool ControlMapper::UpdatePSPState(const InputMapping &changedMapping, double no
311325
} else {
312326
curTime = iter->second.timestamp;
313327
}
314-
bool down = iter->second.value > GetDeviceAxisThreshold(iter->first.deviceId);
328+
bool down = iter->second.value > GetDeviceAxisThreshold(iter->first.deviceId, mapping);
315329
if (!down)
316330
all = false;
317331
}
@@ -364,7 +378,7 @@ bool ControlMapper::UpdatePSPState(const InputMapping &changedMapping, double no
364378
}
365379

366380
if (mapping.IsAxis()) {
367-
threshold = GetDeviceAxisThreshold(iter->first.deviceId);
381+
threshold = GetDeviceAxisThreshold(iter->first.deviceId, mapping);
368382
float value = MapAxisValue(iter->second.value, idForMapping, mapping, changedMapping, &touchedByMapping);
369383
product *= value;
370384
} else {
@@ -510,7 +524,7 @@ void ControlMapper::ToggleSwapAxes() {
510524
void ControlMapper::UpdateCurInputAxis(const InputMapping &mapping, float value, double timestamp) {
511525
InputSample &input = curInput_[mapping];
512526
input.value = value;
513-
if (value > GetDeviceAxisThreshold(mapping.deviceId)) {
527+
if (value >= GetDeviceAxisThreshold(mapping.deviceId, mapping)) {
514528
if (input.timestamp == 0.0) {
515529
input.timestamp = time_now_d();
516530
}

Core/ControlMapper.h

+1
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,4 @@ class ControlMapper {
9393
};
9494

9595
void ConvertAnalogStick(float x, float y, float *outX, float *outY);
96+
float GetDeviceAxisThreshold(int device, const InputMapping &mapping);

Core/KeyMap.cpp

+20-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,25 @@ std::set<std::string> g_seenPads;
4848
std::map<InputDeviceID, std::string> g_padNames;
4949
std::set<InputDeviceID> g_seenDeviceIds;
5050

51+
AxisType GetAxisType(InputAxis input) {
52+
switch (input) {
53+
case JOYSTICK_AXIS_GAS:
54+
case JOYSTICK_AXIS_BRAKE:
55+
case JOYSTICK_AXIS_LTRIGGER:
56+
case JOYSTICK_AXIS_RTRIGGER:
57+
return AxisType::TRIGGER;
58+
case JOYSTICK_AXIS_X:
59+
case JOYSTICK_AXIS_Y:
60+
case JOYSTICK_AXIS_Z:
61+
case JOYSTICK_AXIS_RX:
62+
case JOYSTICK_AXIS_RY:
63+
case JOYSTICK_AXIS_RZ:
64+
return AxisType::STICK;
65+
default:
66+
return AxisType::OTHER;
67+
}
68+
}
69+
5170
// Utility for UI navigation
5271
void SingleInputMappingFromPspButton(int btn, std::vector<InputMapping> *mappings, bool ignoreMouse) {
5372
std::vector<MultiInputMapping> multiMappings;
@@ -874,7 +893,7 @@ bool HasChanged(int &prevGeneration) {
874893
return false;
875894
}
876895

877-
static const char *g_vKeyNames[] = {
896+
static const char * const g_vKeyNames[] = {
878897
"AXIS_X_MIN",
879898
"AXIS_Y_MIN",
880899
"AXIS_X_MAX",

Core/KeyMap.h

+9-4
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ enum {
7878
VIRTKEY_COUNT = VIRTKEY_LAST - VIRTKEY_FIRST
7979
};
8080

81-
const float AXIS_BIND_THRESHOLD = 0.75f;
82-
const float AXIS_BIND_RELEASE_THRESHOLD = 0.35f; // Used during mapping only to detect a "key-up" reliably.
83-
const float AXIS_BIND_THRESHOLD_MOUSE = 0.01f;
84-
8581
struct MappedAnalogAxis {
8682
int axisId;
8783
int direction;
@@ -224,4 +220,13 @@ namespace KeyMap {
224220
bool IsKeyMapped(InputDeviceID device, int key);
225221

226222
bool HasChanged(int &prevGeneration);
223+
224+
// Used for setting thresholds. Technically we could allow a setting per axis, but this is a reasonable compromise.
225+
enum class AxisType {
226+
TRIGGER,
227+
STICK,
228+
OTHER,
229+
};
230+
231+
AxisType GetAxisType(InputAxis axis);
227232
} // namespace KeyMap

GPU/Common/TextureReplacer.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,7 @@ ReplacedTexture *TextureReplacer::FindReplacement(u64 cachekey, u32 hash, int w,
600600
desc.hashfiles = hashfiles;
601601
}
602602

603+
_dbg_assert_(!hashfiles.empty());
603604
// OK, we might already have a matching texture, we use hashfiles as a key. Look it up in the level cache.
604605
auto iter = levelCache_.find(hashfiles);
605606
if (iter != levelCache_.end()) {

Tools/langtool/Cargo.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UI/ControlMappingScreen.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,10 @@ bool KeyMappingNewMouseKeyDialog::key(const KeyInput &key) {
441441
return true;
442442
}
443443

444+
// Only used during the bind process. In other places, it's configurable for some types of axis, like trigger.
445+
const float AXIS_BIND_THRESHOLD = 0.75f;
446+
const float AXIS_BIND_RELEASE_THRESHOLD = 0.35f; // Used during mapping only to detect a "key-up" reliably.
447+
444448
void KeyMappingNewKeyDialog::axis(const AxisInput &axis) {
445449
if (time_now_d() < delayUntil_)
446450
return;

UI/GameSettingsScreen.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ void GameSettingsScreen::CreateControlsSettings(UI::ViewGroup *controlsSettings)
669669
controlsSettings->Add(new ItemHeader(ms->T("Controls")));
670670
controlsSettings->Add(new Choice(co->T("Control Mapping")))->OnClick.Handle(this, &GameSettingsScreen::OnControlMapping);
671671
controlsSettings->Add(new Choice(co->T("Calibrate Analog Stick")))->OnClick.Handle(this, &GameSettingsScreen::OnCalibrateAnalogs);
672+
controlsSettings->Add(new PopupSliderChoiceFloat(&g_Config.fAnalogTriggerThreshold, 0.25f, 0.98f, 0.75f, co->T("Analog trigger threshold"), screenManager()));
672673

673674
#if defined(USING_WIN_UI) || (PPSSPP_PLATFORM(LINUX) && !PPSSPP_PLATFORM(ANDROID))
674675
controlsSettings->Add(new CheckBox(&g_Config.bSystemControls, co->T("Enable standard shortcut keys")));

assets/lang/ar_AE.ini

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ Analog Limiter = ‎محدد التناظري
9090
Analog Settings = Analog Settings
9191
Analog Stick = ‎عصا تناظرية
9292
Analog Style = Analog Style
93+
Analog trigger threshold = Analog trigger threshold
9394
AnalogLimiter Tip = ‎حينما يتم ضغط زر تحديد التناظر
9495
Auto = ‎تلقائي
9596
Auto-centering analog stick = ‎تنصيف العصا التناظرية تلقائياً

assets/lang/az_AZ.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Auto
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/bg_BG.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Автоматично
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/ca_ES.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Limitador analògic
8282
Analog Settings = Configuració de l'stick
8383
Analog Stick = Palanca analògica
8484
Analog Style = Estil de l'stick
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Quan es prem el botó del limitador de l'stick
8687
Auto = Automàtic
8788
Auto-centering analog stick = Auto centrat de l'stick

assets/lang/cz_CZ.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analogový omezovač
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analogová páčka
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Auto
8788
Auto-centering analog stick = Automatické vystředění analogové páčky

assets/lang/da_DK.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog begrænser
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Når den analoge begrænser knap er trykket ned
8687
Auto = Automatisk
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/de_DE.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analogbegrenzer
8282
Analog Settings = Analog Einstellungen
8383
Analog Stick = Analogstick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Wenn die Analogbegrenzer-Taste gedrückt ist
8687
Auto = Automatisch
8788
Auto-centering analog stick = Analogstick automatisch zentrieren

assets/lang/dr_ID.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Auto
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/en_US.ini

+1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ Analog Limiter = Analog limiter
106106
Analog Settings = Analog Settings
107107
Analog Stick = Analog stick
108108
Analog Style = Analog Style
109+
Analog trigger threshold = Analog trigger threshold
109110
AnalogLimiter Tip = When the analog limiter button is pressed
110111
Auto = Auto
111112
Auto-centering analog stick = Auto-centering analog stick

assets/lang/es_ES.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (rápido)
8080
Analog Binding = Asignar stick
8181
Analog Settings = Ajustes de stick
8282
Analog Style = Estilo de stick
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = Velocidad auto rotación del stick
8485
Analog Limiter = Limitador del stick
8586
Analog Stick = Stick izquierdo

assets/lang/es_LA.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (rápido)
8080
Analog Binding = Asignar análogo
8181
Analog Settings = Config. del análogo
8282
Analog Style = Estilo del análogo
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = Vel. de rotación auto. del análogo
8485
Analog Limiter = Limitador del análogo
8586
Analog Stick = Analog stick

assets/lang/fa_IR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = ‎محدود کننده آنالوگ
8282
Analog Settings = تنظیمات انالوگ
8383
Analog Stick = ‎دسته آنالوگ
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = ‎هنگامی که دکمه محدود کننده آنالوگ فشرده شود
8687
Auto = ‎اتوماتیک
8788
Auto-centering analog stick = ‎تنظیم مرکز آنالوگ به صورت خودکار

assets/lang/fi_FI.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analoginen rajoitin
8282
Analog Settings = Analogisen asetukset
8383
Analog Stick = Analoginen sauva
8484
Analog Style = Analogisen tyyli
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Kun analogisen rajoittimen näppäintä painetaan
8687
Auto = Automaattinen
8788
Auto-centering analog stick = Automaattisesti keskittävä analoginen sauva

assets/lang/fr_FR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (rapide)
8080
Analog Binding = Analog Binding
8181
Analog Settings = Analog Settings
8282
Analog Style = Analog Style
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = Vitesse de rotation automatique du stick analogique
8485
Analog Limiter = Limiteur analogique
8586
Analog Stick = Stick analogique

assets/lang/gl_ES.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Limitador analóxico
8282
Analog Settings = Analog Settings
8383
Analog Stick = Stick analóxico
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Automática
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/gr_EL.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Περιορισμός αναλογικού
8282
Analog Settings = Analog Settings
8383
Analog Stick = Αναλογικός μοχλός
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Όταν το κουμπί περιορισμού αναλογικού είναι πατημένο
8687
Auto = Αυτόματο
8788
Auto-centering analog stick = Αυτόματος κεντρισμός αναλογικού μοχλού

assets/lang/he_IL.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Auto
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/he_IL_invert.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Auto
8788
Auto-centering analog stick = Auto-centering analog stick

assets/lang/hr_HR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (brzo)
8080
Analog Binding = Analog Binding
8181
Analog Settings = Analog Settings
8282
Analog Style = Analog Style
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = Auto-Rotacija analogne brzine
8485
Analog Limiter = Analogni ograničivač
8586
Analog Stick = Analogni stick

assets/lang/hu_HU.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (gyors)
8080
Analog Binding = Analog Binding
8181
Analog Settings = Analog Settings
8282
Analog Style = Analog Style
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = Automata analóg forgató sebessége
8485
Analog Limiter = Analóg korlátozó
8586
Analog Stick = Analóg kar

assets/lang/id_ID.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Pembatas analog
8282
Analog Settings = Pengaturan analog
8383
Analog Stick = Stik analog
8484
Analog Style = Gaya analog
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Ketika tombol pembatas analog ditekan
8687
Auto = Otomatis
8788
Auto-centering analog stick = Penengahan otomatis stik analog

assets/lang/it_IT.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Limitatore Analogico
8282
Analog Settings = Impostazioni Analogico
8383
Analog Stick = Stick Analogico
8484
Analog Style = Stile Analogico
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = Quando viene premuto il tasto del limitatore analogico
8687
Auto = Automatico
8788
Auto-centering analog stick = Auto-centramento dello stick analogico

assets/lang/ja_JP.ini

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ WASAPI (fast) = WASAPI (高速)
8080
Analog Binding = 右アナログパッドへの対応ボタン割り当て
8181
Analog Settings = アナログパッドの設定
8282
Analog Style = 右アナログパッドのスタイル
83+
Analog trigger threshold = Analog trigger threshold
8384
Auto-rotation speed = アナログの自動回転速度
8485
Analog Limiter = アナログパッドのリミッタ
8586
Analog Stick = アナログパッド

assets/lang/jv_ID.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = Analog limiter
8282
Analog Settings = Analog Settings
8383
Analog Stick = Analog stick
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = When the analog limiter button is pressed
8687
Auto = Otomatis
8788
Auto-centering analog stick = Otomatis Analog stick nang tengah

assets/lang/ko_KR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = 아날로그 리미터
8282
Analog Settings = 아날로그 설정
8383
Analog Stick = 아날로그 스틱
8484
Analog Style = 아날로그 스타일
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = 아날로그 리미터 버튼을 눌렀을 때
8687
Auto = 자동
8788
Auto-centering analog stick = 자동 센터링 아날로그 스틱

assets/lang/lo_LA.ini

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Analog Limiter = ໂຕຈຳກັດອະນາລ໋ອກ
8282
Analog Settings = Analog Settings
8383
Analog Stick = ປຸ່ມອະນາລ໋ອກ
8484
Analog Style = Analog Style
85+
Analog trigger threshold = Analog trigger threshold
8586
AnalogLimiter Tip = ເມື່ອກົດທີ່ຂອບປຸ່ມອະນາລ໋ອກ ໂຕຈຳກັດອະນາລ໋ອກຈະເຮັດວຽກ
8687
Auto = ອັດຕະໂນມັດ
8788
Auto-centering analog stick = ອະນາລ໋ອກກັບຄືນຈຸດສູນກາງອັດຕະໂນມັດ

0 commit comments

Comments
 (0)