dualsense-ts 5.4.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION_GUIDE.md +19 -0
- package/README.md +87 -4
- package/dist/dualsense.d.ts +14 -2
- package/dist/dualsense.d.ts.map +1 -1
- package/dist/dualsense.js +65 -9
- package/dist/dualsense.js.map +1 -1
- package/dist/elements/accelerometer.d.ts +17 -4
- package/dist/elements/accelerometer.d.ts.map +1 -1
- package/dist/elements/accelerometer.js +24 -4
- package/dist/elements/accelerometer.js.map +1 -1
- package/dist/elements/gyroscope.d.ts +17 -4
- package/dist/elements/gyroscope.d.ts.map +1 -1
- package/dist/elements/gyroscope.js +24 -4
- package/dist/elements/gyroscope.js.map +1 -1
- package/dist/elements/index.d.ts +1 -0
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -0
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/trigger.d.ts +3 -0
- package/dist/elements/trigger.d.ts.map +1 -1
- package/dist/elements/trigger.js +3 -0
- package/dist/elements/trigger.js.map +1 -1
- package/dist/elements/trigger_feedback.d.ts +109 -0
- package/dist/elements/trigger_feedback.d.ts.map +1 -0
- package/dist/elements/trigger_feedback.js +168 -0
- package/dist/elements/trigger_feedback.js.map +1 -0
- package/dist/hid/bt_checksum.d.ts +2 -0
- package/dist/hid/bt_checksum.d.ts.map +1 -0
- package/dist/hid/bt_checksum.js +60 -0
- package/dist/hid/bt_checksum.js.map +1 -0
- package/dist/hid/command.d.ts +8 -18
- package/dist/hid/command.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.d.ts +6 -5
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +40 -63
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/hid_provider.d.ts +1 -0
- package/dist/hid/hid_provider.d.ts.map +1 -1
- package/dist/hid/hid_provider.js +4 -2
- package/dist/hid/hid_provider.js.map +1 -1
- package/dist/hid/index.d.ts +1 -0
- package/dist/hid/index.d.ts.map +1 -1
- package/dist/hid/index.js +1 -0
- package/dist/hid/index.js.map +1 -1
- package/dist/hid/node_hid_provider.d.ts +1 -0
- package/dist/hid/node_hid_provider.d.ts.map +1 -1
- package/dist/hid/web_hid_provider.d.ts.map +1 -1
- package/dist/hid/web_hid_provider.js +9 -4
- package/dist/hid/web_hid_provider.js.map +1 -1
- package/nodehid_example/debug.ts +122 -39
- package/package.json +5 -5
- package/src/dualsense.ts +88 -15
- package/src/elements/accelerometer.ts +45 -4
- package/src/elements/gyroscope.ts +45 -4
- package/src/elements/index.ts +1 -0
- package/src/elements/trigger.ts +4 -0
- package/src/elements/trigger_feedback.ts +267 -0
- package/src/hid/bt_checksum.spec.ts +15 -0
- package/src/hid/bt_checksum.ts +58 -0
- package/src/hid/command.ts +24 -34
- package/src/hid/dualsense_hid.ts +64 -68
- package/src/hid/hid_provider.ts +5 -5
- package/src/hid/index.ts +1 -0
- package/src/hid/web_hid_provider.ts +20 -7
- package/webhid_example/build/asset-manifest.json +6 -6
- package/webhid_example/build/index.html +1 -1
- package/webhid_example/build/static/css/{main.237f8cfa.css → main.9393bbb9.css} +2 -2
- package/webhid_example/build/static/css/main.9393bbb9.css.map +1 -0
- package/webhid_example/build/static/js/main.d804191f.js +3 -0
- package/webhid_example/build/static/js/main.d804191f.js.map +1 -0
- package/webhid_example/src/App.tsx +59 -13
- package/webhid_example/src/hud/ControllerConnection.tsx +59 -57
- package/webhid_example/src/hud/Debugger.tsx +83 -79
- package/webhid_example/src/hud/Gyro.tsx +74 -0
- package/webhid_example/src/hud/HUDLayout.tsx +2 -10
- package/webhid_example/src/hud/Reticle.tsx +12 -64
- package/webhid_example/src/hud/RightStick.tsx +26 -0
- package/webhid_example/src/hud/StickVisualization.tsx +81 -0
- package/webhid_example/src/hud/TriggerEffectControls.tsx +417 -0
- package/webhid_example/src/hud/index.tsx +4 -0
- package/webhid_example/src/index.css +20 -1
- package/webhid_example/build/static/css/main.237f8cfa.css.map +0 -1
- package/webhid_example/build/static/js/main.221f57e7.js +0 -3
- package/webhid_example/build/static/js/main.221f57e7.js.map +0 -1
- /package/webhid_example/build/static/js/{main.221f57e7.js.LICENSE.txt → main.d804191f.js.LICENSE.txt} +0 -0
package/MIGRATION_GUIDE.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Migration Guide
|
|
2
2
|
|
|
3
|
+
### v5 to v6
|
|
4
|
+
|
|
5
|
+
`TriggerMode` is deprecated. The low-level `DualsenseHID` methods for setting trigger effects now accept 11-byte effect blocks instead of individual mode/value pairs.
|
|
6
|
+
|
|
7
|
+
Use the new element-based API instead:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { TriggerEffect } from "dualsense-ts";
|
|
11
|
+
|
|
12
|
+
controller.right.trigger.feedback.set({
|
|
13
|
+
effect: TriggerEffect.Weapon,
|
|
14
|
+
start: 0.2,
|
|
15
|
+
end: 0.6,
|
|
16
|
+
strength: 0.9,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
controller.right.trigger.feedback.reset();
|
|
20
|
+
```
|
|
21
|
+
|
|
3
22
|
### v4 to v5
|
|
4
23
|
|
|
5
24
|
`node-hid` is now an optional peer dependency, simplifying the use of this library in the browser.
|
package/README.md
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
This module provides a natural interface for your DualSense controller.
|
|
4
4
|
|
|
5
|
+
**[Try it in your browser](https://nsfm.github.io/dualsense-ts/)** — connect a DualSense controller and explore inputs, rumble, and adaptive trigger effects with the interactive demo.
|
|
6
|
+
|
|
5
7
|
## Getting started
|
|
6
8
|
|
|
7
9
|
### Installation
|
|
8
10
|
|
|
9
|
-
[This package is distributed via npm](https://npmjs.
|
|
11
|
+
[This package is distributed via npm](https://www.npmjs.com/package/dualsense-ts). Install it the usual way:
|
|
10
12
|
|
|
11
13
|
- `npm add dualsense-ts`
|
|
12
14
|
|
|
@@ -37,6 +39,8 @@ controller.connection.on("change", ({ active }) = > {
|
|
|
37
39
|
});
|
|
38
40
|
```
|
|
39
41
|
|
|
42
|
+
This package supports both wired and Bluetooth devices. While connected via Bluetooth, `controller.wireless` will return `true`.
|
|
43
|
+
|
|
40
44
|
### Input APIs
|
|
41
45
|
|
|
42
46
|
`dualsense-ts` provides several interfaces for reading input:
|
|
@@ -60,7 +64,7 @@ controller.left.analog.magnitude; // 0.23, 0 to 1
|
|
|
60
64
|
|
|
61
65
|
// Touchpad - each touch point works like an analog input
|
|
62
66
|
controller.touchpad.right.contact.state; // false
|
|
63
|
-
|
|
67
|
+
controller.touchpad.right.x; // -0.44, -1 to 1
|
|
64
68
|
```
|
|
65
69
|
|
|
66
70
|
- _Callbacks_: Each input is an EventEmitter or EventTarget that provides `input`, `press`, `release`, and `change` events
|
|
@@ -110,9 +114,27 @@ for await (const { pressure } of controller.left.trigger) {
|
|
|
110
114
|
}
|
|
111
115
|
```
|
|
112
116
|
|
|
113
|
-
###
|
|
117
|
+
### Other Supported Features
|
|
118
|
+
|
|
119
|
+
#### Motion Control
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
controller.gyroscope.on("change", ({ x, y, z }) => {
|
|
123
|
+
console.log(`Gyroscope: \n\t${x}\n\t${y}\n\t${z}`)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
controller.accelerometer.on("change", ({ x, y, z }) => {
|
|
127
|
+
console.log(`Accelerometer: \n\t${x}\n\t${y}\n\t${z}`)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
controller.accelerometer.z.on("change", ({ force }) => {
|
|
131
|
+
if (force > 0.3) console.log('Controller moving')
|
|
132
|
+
})
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### Rumble
|
|
114
136
|
|
|
115
|
-
|
|
137
|
+
The controller has two independent rumble motors. The left motor is larger and produces a stronger, lower-frequency rumble, while the right motor is smaller and produces a lighter, higher-frequency vibration. They are controlled independently:
|
|
116
138
|
|
|
117
139
|
```typescript
|
|
118
140
|
controller.rumble(1.0); // 100% rumble intensity
|
|
@@ -130,6 +152,67 @@ controller.right.trigger.on("change", (trigger) => {
|
|
|
130
152
|
});
|
|
131
153
|
```
|
|
132
154
|
|
|
155
|
+
#### Adaptive Triggers
|
|
156
|
+
|
|
157
|
+
Haptic trigger feedback is controlled via `controller.left.trigger.feedback` / `controller.right.trigger.feedback`. All position and strength values are normalized 0–1.
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { Dualsense, TriggerEffect } from "dualsense-ts";
|
|
161
|
+
|
|
162
|
+
const controller = new Dualsense();
|
|
163
|
+
|
|
164
|
+
// Continuous resistance starting at 30% travel
|
|
165
|
+
controller.right.trigger.feedback.set({
|
|
166
|
+
effect: TriggerEffect.Feedback,
|
|
167
|
+
position: 0.3,
|
|
168
|
+
strength: 0.8,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// Weapon trigger — resistance with snap release
|
|
172
|
+
controller.right.trigger.feedback.set({
|
|
173
|
+
effect: TriggerEffect.Weapon,
|
|
174
|
+
start: 0.2,
|
|
175
|
+
end: 0.6,
|
|
176
|
+
strength: 0.9,
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// Vibration with frequency
|
|
180
|
+
controller.right.trigger.feedback.set({
|
|
181
|
+
effect: TriggerEffect.Vibration,
|
|
182
|
+
position: 0.1,
|
|
183
|
+
amplitude: 0.7,
|
|
184
|
+
frequency: 40, // in Hz, 0 - 255
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Reset to default linear feel
|
|
188
|
+
controller.right.trigger.feedback.reset();
|
|
189
|
+
|
|
190
|
+
// Reset both triggers
|
|
191
|
+
controller.resetTriggerFeedback();
|
|
192
|
+
|
|
193
|
+
// Read current config
|
|
194
|
+
console.log(controller.right.trigger.feedback.config);
|
|
195
|
+
console.log(controller.right.trigger.feedback.effect); // TriggerEffect.Off
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Feedback state is automatically restored if the controller disconnects and reconnects — no handling required on your end.
|
|
199
|
+
|
|
200
|
+
#### Trigger effects
|
|
201
|
+
|
|
202
|
+
| Effect | Description |
|
|
203
|
+
| ------------------------- | ---------------------------------------------------------- |
|
|
204
|
+
| `TriggerEffect.Off` | No resistance (default linear feel) |
|
|
205
|
+
| `TriggerEffect.Feedback` | Zone-based continuous resistance from a start position |
|
|
206
|
+
| `TriggerEffect.Weapon` | Resistance with a snap release point |
|
|
207
|
+
| `TriggerEffect.Bow` | Weapon feel with snap-back force |
|
|
208
|
+
| `TriggerEffect.Galloping` | Rhythmic two-stroke oscillation |
|
|
209
|
+
| `TriggerEffect.Vibration` | Zone-based oscillation with amplitude and frequency |
|
|
210
|
+
| `TriggerEffect.Machine` | Dual-amplitude vibration with frequency and period control |
|
|
211
|
+
|
|
212
|
+
Each effect accepts a unique set of configuration options — your editor's type hints will guide you through the available parameters for each effect. The [interactive demo](https://nsfm.github.io/dualsense-ts/) includes full slider controls for every effect and parameter, making it a great tool for finding the right values.
|
|
213
|
+
|
|
214
|
+
Effect names are based on [Nielk1's DualSense trigger effect documentation](https://gist.github.com/Nielk1/6d54cc2c00d2201ccb8c2720ad7538db).
|
|
215
|
+
|
|
133
216
|
### With React
|
|
134
217
|
|
|
135
218
|
Check out [the example app](./webhid_example/) for more details.
|
package/dist/dualsense.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad } from "./elements";
|
|
1
|
+
import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad, Gyroscope, GyroscopeParams, Accelerometer, AccelerometerParams } from "./elements";
|
|
2
2
|
import { Input, InputParams } from "./input";
|
|
3
3
|
import { DualsenseHID } from "./hid";
|
|
4
4
|
import { Intensity } from "./math";
|
|
@@ -30,6 +30,10 @@ export interface DualsenseParams extends InputParams {
|
|
|
30
30
|
right?: UnisenseParams;
|
|
31
31
|
/** Settings for the touchpad inputs */
|
|
32
32
|
touchpad?: InputParams;
|
|
33
|
+
/** Settings for the gyroscope */
|
|
34
|
+
gyroscope?: GyroscopeParams;
|
|
35
|
+
/** Settings for the accelerometer */
|
|
36
|
+
accelerometer?: AccelerometerParams;
|
|
33
37
|
}
|
|
34
38
|
/** Represents a Dualsense controller */
|
|
35
39
|
export declare class Dualsense extends Input<Dualsense> {
|
|
@@ -56,15 +60,23 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
56
60
|
readonly left: Unisense;
|
|
57
61
|
/** Inputs on the right half of the controller */
|
|
58
62
|
readonly right: Unisense;
|
|
59
|
-
/** The touchpad; works like
|
|
63
|
+
/** The touchpad; works like a pair of analog sticks */
|
|
60
64
|
readonly touchpad: Touchpad;
|
|
65
|
+
/** Tracks the controller's angular velocity */
|
|
66
|
+
readonly gyroscope: Gyroscope;
|
|
67
|
+
/** Tracks the controller's linear acceleration */
|
|
68
|
+
readonly accelerometer: Accelerometer;
|
|
61
69
|
/** Represents the underlying HID device. Provides input events */
|
|
62
70
|
readonly hid: DualsenseHID;
|
|
63
71
|
/** A virtual button representing whether or not a controller is connected */
|
|
64
72
|
readonly connection: Momentary;
|
|
65
73
|
get active(): boolean;
|
|
74
|
+
/** Returns `true` if the controller is connected via Bluetooth */
|
|
75
|
+
get wireless(): boolean;
|
|
66
76
|
constructor(params?: DualsenseParams);
|
|
67
77
|
private get rumbleIntensity();
|
|
78
|
+
/** Reset adaptive trigger feedback on both sides to the default linear feel */
|
|
79
|
+
resetTriggerFeedback(): void;
|
|
68
80
|
/** Check or adjust rumble intensity evenly across both sides of the controller */
|
|
69
81
|
rumble(intensity?: Intensity): number;
|
|
70
82
|
/** Distributes HID event values to the controller's inputs */
|
package/dist/dualsense.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense.d.ts","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAEL,YAAY,EAGb,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,oEAAoE;AACpE,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,oEAAoE;IACpE,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,0CAA0C;IAC1C,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,qCAAqC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,qCAAqC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,qCAAqC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oCAAoC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dualsense.d.ts","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
package/dist/dualsense.js
CHANGED
|
@@ -9,6 +9,10 @@ class Dualsense extends input_1.Input {
|
|
|
9
9
|
get active() {
|
|
10
10
|
return Object.values(this).some((input) => input !== this && input instanceof input_1.Input && input.active);
|
|
11
11
|
}
|
|
12
|
+
/** Returns `true` if the controller is connected via Bluetooth */
|
|
13
|
+
get wireless() {
|
|
14
|
+
return this.hid.wireless;
|
|
15
|
+
}
|
|
12
16
|
constructor(params = {}) {
|
|
13
17
|
super(params);
|
|
14
18
|
this.state = this;
|
|
@@ -77,34 +81,80 @@ class Dualsense extends input_1.Input {
|
|
|
77
81
|
name: "Connected",
|
|
78
82
|
...(params.square ?? {}),
|
|
79
83
|
});
|
|
84
|
+
this.gyroscope = new elements_1.Gyroscope({
|
|
85
|
+
icon: "∞",
|
|
86
|
+
name: "Gyroscope",
|
|
87
|
+
threshold: 0.01,
|
|
88
|
+
...(params.gyroscope ?? {}),
|
|
89
|
+
});
|
|
90
|
+
this.accelerometer = new elements_1.Accelerometer({
|
|
91
|
+
icon: "⤲",
|
|
92
|
+
name: "Accelerometer",
|
|
93
|
+
threshold: 0.01,
|
|
94
|
+
...(params.accelerometer ?? {}),
|
|
95
|
+
});
|
|
80
96
|
this.connection[input_1.InputSet](false);
|
|
81
97
|
this.hid = params.hid ?? new hid_1.DualsenseHID(new hid_1.PlatformHIDProvider());
|
|
82
98
|
this.hid.register((state) => {
|
|
83
99
|
this.processHID(state);
|
|
84
100
|
});
|
|
101
|
+
const rumbleMemo = { left: -1, right: -1 };
|
|
102
|
+
const triggerFeedbackMemo = { left: "", right: "" };
|
|
85
103
|
/** Refresh connection state */
|
|
104
|
+
let lastConnected = false;
|
|
86
105
|
setInterval(() => {
|
|
87
106
|
const { provider: { connected }, } = this.hid;
|
|
88
107
|
this.connection[input_1.InputSet](connected);
|
|
108
|
+
if (connected && !lastConnected) {
|
|
109
|
+
// Invalidate memo so the output loop restores desired state on reconnect.
|
|
110
|
+
triggerFeedbackMemo.left = "";
|
|
111
|
+
triggerFeedbackMemo.right = "";
|
|
112
|
+
}
|
|
113
|
+
lastConnected = connected;
|
|
89
114
|
if (!connected)
|
|
90
115
|
this.hid.provider.connect();
|
|
91
116
|
}, 200);
|
|
92
|
-
/** Refresh
|
|
93
|
-
const rumbleMemo = { left: -1, right: -1 };
|
|
117
|
+
/** Refresh output state (rumble + trigger feedback) */
|
|
94
118
|
setInterval(() => {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
rumbleMemo.
|
|
119
|
+
if (!this.connection.active)
|
|
120
|
+
return;
|
|
121
|
+
const leftRumble = this.left.rumble();
|
|
122
|
+
const rightRumble = this.right.rumble();
|
|
123
|
+
if (leftRumble !== rumbleMemo.left || rightRumble !== rumbleMemo.right) {
|
|
124
|
+
this.hid.setRumble(leftRumble * 255, rightRumble * 255);
|
|
125
|
+
rumbleMemo.left = leftRumble;
|
|
126
|
+
rumbleMemo.right = rightRumble;
|
|
127
|
+
}
|
|
128
|
+
const leftFeedback = this.left.trigger.feedback;
|
|
129
|
+
const rightFeedback = this.right.trigger.feedback;
|
|
130
|
+
const leftKey = leftFeedback.toKey();
|
|
131
|
+
const rightKey = rightFeedback.toKey();
|
|
132
|
+
const feedbackChanged = leftKey !== triggerFeedbackMemo.left ||
|
|
133
|
+
rightKey !== triggerFeedbackMemo.right;
|
|
134
|
+
if (feedbackChanged) {
|
|
135
|
+
// Force rumble into the same batch so MotorPower scope bit is always present.
|
|
136
|
+
this.hid.setRumble(leftRumble * 255, rightRumble * 255);
|
|
137
|
+
rumbleMemo.left = leftRumble;
|
|
138
|
+
rumbleMemo.right = rightRumble;
|
|
139
|
+
}
|
|
140
|
+
if (leftKey !== triggerFeedbackMemo.left) {
|
|
141
|
+
this.hid.setLeftTriggerFeedback(leftFeedback.toBytes());
|
|
142
|
+
triggerFeedbackMemo.left = leftKey;
|
|
143
|
+
}
|
|
144
|
+
if (rightKey !== triggerFeedbackMemo.right) {
|
|
145
|
+
this.hid.setRightTriggerFeedback(rightFeedback.toBytes());
|
|
146
|
+
triggerFeedbackMemo.right = rightKey;
|
|
102
147
|
}
|
|
103
148
|
}, 1000 / 30);
|
|
104
149
|
}
|
|
105
150
|
get rumbleIntensity() {
|
|
106
151
|
return (this.left.rumble() + this.right.rumble()) / 2;
|
|
107
152
|
}
|
|
153
|
+
/** Reset adaptive trigger feedback on both sides to the default linear feel */
|
|
154
|
+
resetTriggerFeedback() {
|
|
155
|
+
this.left.trigger.feedback.reset();
|
|
156
|
+
this.right.trigger.feedback.reset();
|
|
157
|
+
}
|
|
108
158
|
/** Check or adjust rumble intensity evenly across both sides of the controller */
|
|
109
159
|
rumble(intensity) {
|
|
110
160
|
this.left.rumble(intensity);
|
|
@@ -147,6 +197,12 @@ class Dualsense extends input_1.Input {
|
|
|
147
197
|
this.right.bumper[input_1.InputSet](state["R1" /* InputId.RightBumper */]);
|
|
148
198
|
this.right.trigger[input_1.InputSet](state["R2" /* InputId.RightTrigger */]);
|
|
149
199
|
this.right.trigger.button[input_1.InputSet](state["R2Button" /* InputId.RightTriggerButton */]);
|
|
200
|
+
this.gyroscope.x[input_1.InputSet](state["GyroX" /* InputId.GyroX */]);
|
|
201
|
+
this.gyroscope.y[input_1.InputSet](state["GyroY" /* InputId.GyroY */]);
|
|
202
|
+
this.gyroscope.z[input_1.InputSet](state["GyroZ" /* InputId.GyroZ */]);
|
|
203
|
+
this.accelerometer.x[input_1.InputSet](state["AccelX" /* InputId.AccelX */]);
|
|
204
|
+
this.accelerometer.y[input_1.InputSet](state["AccelY" /* InputId.AccelY */]);
|
|
205
|
+
this.accelerometer.z[input_1.InputSet](state["AccelZ" /* InputId.AccelZ */]);
|
|
150
206
|
}
|
|
151
207
|
}
|
|
152
208
|
exports.Dualsense = Dualsense;
|
package/dist/dualsense.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
import { Input } from "../input";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
1
|
+
import { Input, InputParams } from "../input";
|
|
2
|
+
import { Axis, AxisParams } from "./axis";
|
|
3
|
+
export interface AccelerometerParams extends InputParams {
|
|
4
|
+
/** Configuration for the input's x axis */
|
|
5
|
+
x?: AxisParams;
|
|
6
|
+
/** Configuration for the input's y axis */
|
|
7
|
+
y?: AxisParams;
|
|
8
|
+
/** Configuration for the input's z axis */
|
|
9
|
+
z?: AxisParams;
|
|
10
|
+
}
|
|
11
|
+
/** Tracks the linear acceleration of the controller. */
|
|
12
|
+
export declare class Accelerometer extends Input<Accelerometer> {
|
|
13
|
+
readonly state: this;
|
|
14
|
+
readonly x: Axis;
|
|
15
|
+
readonly y: Axis;
|
|
16
|
+
readonly z: Axis;
|
|
17
|
+
constructor(params?: AccelerometerParams);
|
|
5
18
|
readonly active = false;
|
|
6
19
|
}
|
|
7
20
|
//# sourceMappingURL=accelerometer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerometer.d.ts","sourceRoot":"","sources":["../../src/elements/accelerometer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"accelerometer.d.ts","sourceRoot":"","sources":["../../src/elements/accelerometer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;CAChB;AAED,wDAAwD;AACxD,qBAAa,aAAc,SAAQ,KAAK,CAAC,aAAa,CAAC;IACrD,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;gBAEZ,MAAM,CAAC,EAAE,mBAAmB;IAwBxC,SAAgB,MAAM,SAAS;CAChC"}
|
|
@@ -2,12 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Accelerometer = void 0;
|
|
4
4
|
const input_1 = require("../input");
|
|
5
|
-
|
|
5
|
+
const axis_1 = require("./axis");
|
|
6
|
+
/** Tracks the linear acceleration of the controller. */
|
|
6
7
|
class Accelerometer extends input_1.Input {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(
|
|
9
|
-
this.state =
|
|
8
|
+
constructor(params) {
|
|
9
|
+
super(params);
|
|
10
|
+
this.state = this;
|
|
10
11
|
this.active = false;
|
|
12
|
+
const { x, y, z } = params ?? {};
|
|
13
|
+
this.x = new axis_1.Axis({
|
|
14
|
+
icon: "AX",
|
|
15
|
+
name: "X",
|
|
16
|
+
...params,
|
|
17
|
+
...x,
|
|
18
|
+
});
|
|
19
|
+
this.y = new axis_1.Axis({
|
|
20
|
+
icon: "AY",
|
|
21
|
+
name: "Y",
|
|
22
|
+
...params,
|
|
23
|
+
...y,
|
|
24
|
+
});
|
|
25
|
+
this.z = new axis_1.Axis({
|
|
26
|
+
icon: "AZ",
|
|
27
|
+
name: "Z",
|
|
28
|
+
...params,
|
|
29
|
+
...z,
|
|
30
|
+
});
|
|
11
31
|
}
|
|
12
32
|
}
|
|
13
33
|
exports.Accelerometer = Accelerometer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerometer.js","sourceRoot":"","sources":["../../src/elements/accelerometer.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"accelerometer.js","sourceRoot":"","sources":["../../src/elements/accelerometer.ts"],"names":[],"mappings":";;;AAAA,oCAA8C;AAC9C,iCAA0C;AAa1C,wDAAwD;AACxD,MAAa,aAAc,SAAQ,aAAoB;IAOrD,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QAPA,UAAK,GAAS,IAAI,CAAC;QA8BnB,WAAM,GAAG,KAAK,CAAC;QAtB7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAEjC,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;IACL,CAAC;CAGF;AAhCD,sCAgCC"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
import { Input } from "../input";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
1
|
+
import { Input, InputParams } from "../input";
|
|
2
|
+
import { Axis, AxisParams } from "./axis";
|
|
3
|
+
export interface GyroscopeParams extends InputParams {
|
|
4
|
+
/** Configuration for the input's x axis */
|
|
5
|
+
x?: AxisParams;
|
|
6
|
+
/** Configuration for the input's y axis */
|
|
7
|
+
y?: AxisParams;
|
|
8
|
+
/** Configuration for the input's z axis */
|
|
9
|
+
z?: AxisParams;
|
|
10
|
+
}
|
|
11
|
+
/** Tracks the angular velocity of the controller. */
|
|
12
|
+
export declare class Gyroscope extends Input<Gyroscope> {
|
|
13
|
+
readonly state: this;
|
|
14
|
+
readonly x: Axis;
|
|
15
|
+
readonly y: Axis;
|
|
16
|
+
readonly z: Axis;
|
|
17
|
+
constructor(params?: GyroscopeParams);
|
|
5
18
|
readonly active = false;
|
|
6
19
|
}
|
|
7
20
|
//# sourceMappingURL=gyroscope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gyroscope.d.ts","sourceRoot":"","sources":["../../src/elements/gyroscope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"gyroscope.d.ts","sourceRoot":"","sources":["../../src/elements/gyroscope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf,2CAA2C;IAC3C,CAAC,CAAC,EAAE,UAAU,CAAC;CAChB;AAED,qDAAqD;AACrD,qBAAa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC7C,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;gBAEZ,MAAM,CAAC,EAAE,eAAe;IAwBpC,SAAgB,MAAM,SAAS;CAChC"}
|
|
@@ -2,12 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Gyroscope = void 0;
|
|
4
4
|
const input_1 = require("../input");
|
|
5
|
-
|
|
5
|
+
const axis_1 = require("./axis");
|
|
6
|
+
/** Tracks the angular velocity of the controller. */
|
|
6
7
|
class Gyroscope extends input_1.Input {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(
|
|
9
|
-
this.state =
|
|
8
|
+
constructor(params) {
|
|
9
|
+
super(params);
|
|
10
|
+
this.state = this;
|
|
10
11
|
this.active = false;
|
|
12
|
+
const { x, y, z } = params ?? {};
|
|
13
|
+
this.x = new axis_1.Axis({
|
|
14
|
+
icon: "GX",
|
|
15
|
+
name: "X",
|
|
16
|
+
...params,
|
|
17
|
+
...x,
|
|
18
|
+
});
|
|
19
|
+
this.y = new axis_1.Axis({
|
|
20
|
+
icon: "GY",
|
|
21
|
+
name: "Y",
|
|
22
|
+
...params,
|
|
23
|
+
...y,
|
|
24
|
+
});
|
|
25
|
+
this.z = new axis_1.Axis({
|
|
26
|
+
icon: "GZ",
|
|
27
|
+
name: "Z",
|
|
28
|
+
...params,
|
|
29
|
+
...z,
|
|
30
|
+
});
|
|
11
31
|
}
|
|
12
32
|
}
|
|
13
33
|
exports.Gyroscope = Gyroscope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gyroscope.js","sourceRoot":"","sources":["../../src/elements/gyroscope.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"gyroscope.js","sourceRoot":"","sources":["../../src/elements/gyroscope.ts"],"names":[],"mappings":";;;AAAA,oCAA8C;AAC9C,iCAA0C;AAa1C,qDAAqD;AACrD,MAAa,SAAU,SAAQ,aAAgB;IAO7C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;QAPA,UAAK,GAAS,IAAI,CAAC;QA8BnB,WAAM,GAAG,KAAK,CAAC;QAtB7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAEjC,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;IACL,CAAC;CAGF;AAhCD,8BAgCC"}
|
package/dist/elements/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
package/dist/elements/index.js
CHANGED
|
@@ -29,5 +29,6 @@ __exportStar(require("./mute"), exports);
|
|
|
29
29
|
__exportStar(require("./touch"), exports);
|
|
30
30
|
__exportStar(require("./touchpad"), exports);
|
|
31
31
|
__exportStar(require("./trigger"), exports);
|
|
32
|
+
__exportStar(require("./trigger_feedback"), exports);
|
|
32
33
|
__exportStar(require("./unisense"), exports);
|
|
33
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,kDAAgC;AAChC,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,2CAAyB;AACzB,yCAAuB;AACvB,0CAAwB;AACxB,6CAA2B;AAC3B,4CAA0B;AAC1B,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,kDAAgC;AAChC,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,2CAAyB;AACzB,yCAAuB;AACvB,0CAAwB;AACxB,6CAA2B;AAC3B,4CAA0B;AAC1B,qDAAmC;AACnC,6CAA2B"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Input } from "../input";
|
|
2
2
|
import { Magnitude } from "../math";
|
|
3
3
|
import { Momentary } from "./momentary";
|
|
4
|
+
import { TriggerFeedback } from "./trigger_feedback";
|
|
4
5
|
export declare class Trigger extends Input<Magnitude> {
|
|
5
6
|
state: Magnitude;
|
|
6
7
|
button: Momentary;
|
|
8
|
+
/** Desired adaptive trigger feedback state */
|
|
9
|
+
readonly feedback: TriggerFeedback;
|
|
7
10
|
get active(): boolean;
|
|
8
11
|
get pressure(): Magnitude;
|
|
9
12
|
get magnitude(): Magnitude;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,SAAS,CAAK;IAErB,MAAM,EAAE,SAAS,CAAmB;IAE3C,8CAA8C;IAC9C,SAAgB,QAAQ,kBAAyB;IAEjD,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,QAAQ,IAAI,SAAS,CAE/B;IAED,IAAW,SAAS,IAAI,SAAS,CAEhC;IAEM,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;CAG1C"}
|
package/dist/elements/trigger.js
CHANGED
|
@@ -3,11 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Trigger = void 0;
|
|
4
4
|
const input_1 = require("../input");
|
|
5
5
|
const momentary_1 = require("./momentary");
|
|
6
|
+
const trigger_feedback_1 = require("./trigger_feedback");
|
|
6
7
|
class Trigger extends input_1.Input {
|
|
7
8
|
constructor() {
|
|
8
9
|
super(...arguments);
|
|
9
10
|
this.state = 0;
|
|
10
11
|
this.button = new momentary_1.Momentary();
|
|
12
|
+
/** Desired adaptive trigger feedback state */
|
|
13
|
+
this.feedback = new trigger_feedback_1.TriggerFeedback();
|
|
11
14
|
}
|
|
12
15
|
get active() {
|
|
13
16
|
return this.state > 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":";;;AAAA,oCAAiC;AAEjC,2CAAwC;
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":";;;AAAA,oCAAiC;AAEjC,2CAAwC;AACxC,yDAAqD;AAErD,MAAa,OAAQ,SAAQ,aAAgB;IAA7C;;QACS,UAAK,GAAc,CAAC,CAAC;QAErB,WAAM,GAAc,IAAI,qBAAS,EAAE,CAAC;QAE3C,8CAA8C;QAC9B,aAAQ,GAAG,IAAI,kCAAe,EAAE,CAAC;IAiBnD,CAAC;IAfC,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,OAAO,CAAC,KAAgB;QAC7B,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IAC9B,CAAC;CACF;AAvBD,0BAuBC"}
|