Skip to content

Commit f309c27

Browse files
authored
New: Option in setting to adjust gamepad sensitivity
1 parent b997d6b commit f309c27

8 files changed

Lines changed: 48 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1616
- Support for `HEIC` image format [`4f4b5a1`](https://github.com/ollm/OpenComic/commit/4f4b5a16572ea2bd5aff2e519d473b42d80312fb)
1717
- Option to apply configuration profile based on folder/file label [`71d9ff5`](https://github.com/ollm/OpenComic/commit/71d9ff5655f934e4d710e1833b081e4fddf8d428)
1818
- Option to disable `Align with next horizontal` when reading on double page [`97d8ecd`](https://github.com/ollm/OpenComic/commit/97d8ecdde04c2a5c418440d8fbbf06496b16c8ba)
19+
- Option in setting to adjust gamepad sensitivity
1920

2021
##### 🐛 Bug Fixes
2122

22-
- Gamepad menus do not work correctly
23+
- Gamepad menus do not work correctly [`b997d6b`](https://github.com/ollm/OpenComic/commit/b997d6bb6e05c597306169cb4fbbe035a4ab12d1)
2324

2425
## [v1.4.1](https://github.com/ollm/OpenComic/releases/tag/v1.4.1) (08-02-2025)
2526

languages/ca.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@
310310
"gamepadMenu": "Menú del comandament",
311311
"useGamepad": "Fes servir un comandament per canviar l'acció",
312312
"restoreDefaults": "Restaurar valors per defecte",
313+
"gamepadSensitivity": "Sensibilitat del comandament",
313314
"gamepadDeadZone": "Zona morta del comandament",
314315
"screen": "Pantalla",
315316
"zoom": "Zoom",

languages/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@
310310
"gamepadMenu": "Gamepad menu",
311311
"useGamepad": "Use a gamepad to change the action",
312312
"restoreDefaults": "Restore default values",
313+
"gamepadSensitivity": "Gamepad sensitivity",
313314
"gamepadDeadZone": "Gamepad dead zone",
314315
"screen": "Screen",
315316
"zoom": "Zoom",

languages/es.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@
310310
"gamepadMenu": "Menú del mando",
311311
"useGamepad": "Utiliza un mando para cambiar la acción",
312312
"restoreDefaults": "Restaurar valores por defecto",
313+
"gamepadSensitivity": "Sensibilidad del mando",
313314
"gamepadDeadZone": "Zona muerta del mando",
314315
"screen": "Pantalla",
315316
"zoom": "Zoom",

scripts/gamepad.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,34 +68,35 @@ function gamepadLoop()
6868
let buttons = [];
6969
let axes = false;
7070

71-
// Merge all connected gamepad into one
71+
// Merge all connected gamepads into one
7272
for(let i = 0, len = gamepads.length; i < len; i++)
7373
{
7474
if(gamepads[i])
7575
{
76-
let controller = gamepads[i];
76+
let gamepad = gamepads[i];
7777

78-
for(let i = 0, len = controller.buttons.length; i < len; i++)
78+
for(let i = 0, len = gamepad.buttons.length; i < len; i++)
7979
{
80-
let button = controller.buttons[i];
80+
let button = gamepad.buttons[i];
8181

8282
if(button.value == 1 || !buttons[i])
8383
buttons[i] = button;
8484
}
8585

86-
// Avoid controller dead zone
87-
let deadZone = config.controllerDeadZone;
86+
// Avoid gamepad dead zone
87+
let deadZone = config.gamepadDeadZone;
88+
let aAbs0 = Math.abs(gamepad.axes[0]), aAbs1 = Math.abs(gamepad.axes[1]), aAbs2 = Math.abs(gamepad.axes[2]), aAbs3 = Math.abs(gamepad.axes[3]);
8889

89-
let aAbs0 = Math.abs(controller.axes[0]), aAbs1 = Math.abs(controller.axes[1]), aAbs2 = Math.abs(controller.axes[2]), aAbs3 = Math.abs(controller.axes[3]);
90-
91-
// Prioritize first controller
90+
// Prioritize first gamepad
9291
if(!axes && (aAbs0 > deadZone || aAbs1 > deadZone || aAbs2 > deadZone || aAbs3 > deadZone))
9392
{
93+
let sensitivity = config.gamepadSensitivity / 5;
94+
9495
axes = [
95-
(aAbs0 > deadZone ? controller.axes[0] : 0),
96-
(aAbs1 > deadZone ? controller.axes[1] : 0),
97-
(aAbs2 > deadZone ? controller.axes[2] : 0),
98-
(aAbs3 > deadZone ? controller.axes[3] : 0),
96+
(aAbs0 > deadZone ? gamepad.axes[0] * sensitivity : 0),
97+
(aAbs1 > deadZone ? gamepad.axes[1] * sensitivity : 0),
98+
(aAbs2 > deadZone ? gamepad.axes[2] * sensitivity : 0),
99+
(aAbs3 > deadZone ? gamepad.axes[3] * sensitivity : 0),
99100
];
100101
}
101102
}

scripts/migration.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ function migrateOpeningBehavior(data)
8383
return data;
8484
}
8585

86+
function migrateControllerDeadZone(data)
87+
{
88+
data.config.gamepadDeadZone = data.config.controllerDeadZone;
89+
90+
return data;
91+
}
92+
8693
function start(data)
8794
{
8895
let changes = data.config.changes;
@@ -98,6 +105,9 @@ function start(data)
98105
if(changes < 92) // Change the old opening behavior setting
99106
data = migrateOpeningBehavior(data);
100107

108+
if(changes < 99) // Change controllerDeadZone to gamepadDeadZone
109+
data = migrateControllerDeadZone(data);
110+
101111
return data;
102112
}
103113

scripts/storage.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var changes = 98; // Update this if readingPagesConfig is updated
1+
var changes = 99; // Update this if readingPagesConfig is updated
22

33
var readingPagesConfig = {
44
readingConfigName: '',
@@ -158,7 +158,8 @@ var storageDefault = {
158158
play: false,
159159
volume: 1.0,
160160
},
161-
controllerDeadZone: 0.1,
161+
gamepadSensitivity: 5,
162+
gamepadDeadZone: 0.1,
162163
disableGamepadInput: false,
163164
saveImageTemplate: '[parentFolder] - [folder] - [image] - [page]',
164165
saveImageToFolder: false,

templates/settings.content.right.shortcuts.html

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ <h2 class="headline-small">{{language.settings.shortcuts.whenReading}}</h2>
99
</div>
1010

1111
<div class="simple-slider gamepad-item" data-gamepad-left="events.rangeMoveStep(this, -1)" data-gamepad-right="events.rangeMoveStep(this, 1)" style="margin-top: 10px;">
12-
<div class="simple-slider-text">{{language.settings.shortcuts.gamepadDeadZone}}<div><i class="material-icon slider-reset" onclick="events.resetRange(this)" data-default="0.1" style="right: 70px;">undo</i><span>{{config.controllerDeadZone}}</span></div></div>
12+
<div class="simple-slider-text">{{language.settings.shortcuts.gamepadSensitivity}}<div><i class="material-icon slider-reset" onclick="events.resetRange(this)" data-default="5" style="right: 70px;">undo</i><span>{{config.gamepadSensitivity}}</span></div></div>
1313
<div class="range">
1414
<div class="range-position">
1515
<span class="range-line" style="width: 100%"></span>
@@ -18,7 +18,21 @@ <h2 class="headline-small">{{language.settings.shortcuts.whenReading}}</h2>
1818
<div class="range-point" position="100" style="left: 100%;"><div class="elevation-1"></div></div>
1919
</div>
2020
</div>
21-
<input type="range" max="0.3" min="0" step="0.01" value="{{config.controllerDeadZone}}" onrange="settings.set('controllerDeadZone', \{{value}})">
21+
<input type="range" max="50" min="1" step="1" value="{{config.gamepadSensitivity}}" onrange="settings.set('gamepadSensitivity', \{{value}})">
22+
</div>
23+
</div>
24+
25+
<div class="simple-slider gamepad-item" data-gamepad-left="events.rangeMoveStep(this, -1)" data-gamepad-right="events.rangeMoveStep(this, 1)" style="margin-top: 10px;">
26+
<div class="simple-slider-text">{{language.settings.shortcuts.gamepadDeadZone}}<div><i class="material-icon slider-reset" onclick="events.resetRange(this)" data-default="0.1" style="right: 70px;">undo</i><span>{{config.gamepadDeadZone}}</span></div></div>
27+
<div class="range">
28+
<div class="range-position">
29+
<span class="range-line" style="width: 100%"></span>
30+
<span class="range-steps"></span>
31+
<div>
32+
<div class="range-point" position="100" style="left: 100%;"><div class="elevation-1"></div></div>
33+
</div>
34+
</div>
35+
<input type="range" max="0.3" min="0" step="0.01" value="{{config.gamepadDeadZone}}" onrange="settings.set('gamepadDeadZone', \{{value}})">
2236
</div>
2337
</div>
2438

0 commit comments

Comments
 (0)