dualsense-ts 3.1.3 → 4.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/README.md +15 -7
- package/dist/comparators.d.ts +1 -1
- package/dist/comparators.d.ts.map +1 -1
- package/dist/comparators.js +3 -2
- package/dist/comparators.js.map +1 -1
- package/dist/dualsense.d.ts +7 -0
- package/dist/dualsense.d.ts.map +1 -1
- package/dist/dualsense.js +22 -2
- package/dist/dualsense.js.map +1 -1
- package/dist/input.d.ts +5 -0
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +25 -13
- package/dist/input.js.map +1 -1
- package/package.json +2 -2
- package/src/comparators.ts +5 -1
- package/src/dualsense.ts +34 -1
- package/src/input.ts +14 -12
package/README.md
CHANGED
|
@@ -22,15 +22,23 @@ Install it using your preferred package manager:
|
|
|
22
22
|
|
|
23
23
|
### Connecting
|
|
24
24
|
|
|
25
|
-
`dualsense-ts` will
|
|
25
|
+
When you construct a controller, `dualsense-ts` will start to manage a device connection in the background.
|
|
26
26
|
|
|
27
27
|
```typescript
|
|
28
28
|
import { Dualsense } from "dualsense-ts";
|
|
29
29
|
|
|
30
30
|
// Grab a controller connected via USB or Bluetooth
|
|
31
31
|
const controller = new Dualsense();
|
|
32
|
+
|
|
33
|
+
// Monitor the connection state
|
|
34
|
+
const connected = controller.connection.active
|
|
35
|
+
controller.connection.on("change", ({ active }) = > {
|
|
36
|
+
console.log(`controller ${active ? '' : 'dis'}connected`)
|
|
37
|
+
});
|
|
32
38
|
```
|
|
33
39
|
|
|
40
|
+
When controller is disconnected, `dualsense-ts` will quietly wait for a new one. The API is totally connection-agnostic, keeping your code clean by making type safety easy.
|
|
41
|
+
|
|
34
42
|
### Input
|
|
35
43
|
|
|
36
44
|
`dualsense-ts` provides several interfaces for reading input:
|
|
@@ -39,22 +47,22 @@ const controller = new Dualsense();
|
|
|
39
47
|
|
|
40
48
|
```typescript
|
|
41
49
|
// Buttons
|
|
42
|
-
controller.circle.state;
|
|
50
|
+
controller.circle.state; // false
|
|
43
51
|
controller.left.bumper.state; // true
|
|
44
52
|
|
|
45
53
|
// Triggers
|
|
46
|
-
controller.right.trigger.active;
|
|
54
|
+
controller.right.trigger.active; // true
|
|
47
55
|
controller.right.trigger.pressure; // 0.72, 0 - 1
|
|
48
56
|
|
|
49
57
|
// Analog Sticks - represented as a position on a unit circle
|
|
50
|
-
controller.left.analog.x.active;
|
|
51
|
-
controller.left.analog.x.state;
|
|
58
|
+
controller.left.analog.x.active; // true, when away from center
|
|
59
|
+
controller.left.analog.x.state; // 0.51, -1 to 1
|
|
52
60
|
controller.left.analog.direction; // 4.32, radians
|
|
53
61
|
controller.left.analog.magnitude; // 0.23, 0 to 1
|
|
54
62
|
|
|
55
63
|
// Touchpad - each touch point works like an analog input
|
|
56
64
|
controller.touchpad.right.contact.state; // false
|
|
57
|
-
+controller.touchpad.right.x;
|
|
65
|
+
+controller.touchpad.right.x; // -0.44, -1 to 1
|
|
58
66
|
```
|
|
59
67
|
|
|
60
68
|
- _Callbacks_: Each input is an EventEmitter, or EventTarget that provides `input`, `press`, `release`, and `change` events
|
|
@@ -100,7 +108,7 @@ await controller.promise();
|
|
|
100
108
|
|
|
101
109
|
```typescript
|
|
102
110
|
for await (const { pressure } of controller.left.trigger) {
|
|
103
|
-
console.log(`L2: ${Math.round(pressure*100)}%`);
|
|
111
|
+
console.log(`L2: ${Math.round(pressure * 100)}%`);
|
|
104
112
|
}
|
|
105
113
|
```
|
|
106
114
|
|
package/dist/comparators.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare function VirtualComparator(): boolean;
|
|
|
5
5
|
/**
|
|
6
6
|
* Input state change checker that considers a numeric threshold.
|
|
7
7
|
*/
|
|
8
|
-
export declare function ThresholdComparator(threshold: number, state: unknown, newState: unknown): boolean;
|
|
8
|
+
export declare function ThresholdComparator(threshold: number, deadzone: number, state: unknown, newState: unknown): boolean;
|
|
9
9
|
/**
|
|
10
10
|
* Input state change checker for most values.
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../src/comparators.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,OAAO,GAChB,OAAO,
|
|
1
|
+
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../src/comparators.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,OAAO,GAChB,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE1E"}
|
package/dist/comparators.js
CHANGED
|
@@ -11,10 +11,11 @@ exports.VirtualComparator = VirtualComparator;
|
|
|
11
11
|
/**
|
|
12
12
|
* Input state change checker that considers a numeric threshold.
|
|
13
13
|
*/
|
|
14
|
-
function ThresholdComparator(threshold, state, newState) {
|
|
14
|
+
function ThresholdComparator(threshold, deadzone, state, newState) {
|
|
15
15
|
if (typeof state !== "number" || typeof newState !== "number")
|
|
16
16
|
throw new Error("Bad threshold comparison");
|
|
17
|
-
return Math.abs(state - newState) > threshold
|
|
17
|
+
return (Math.abs(state - newState) > threshold &&
|
|
18
|
+
(Math.abs(newState) > deadzone || Math.abs(state) > deadzone));
|
|
18
19
|
}
|
|
19
20
|
exports.ThresholdComparator = ThresholdComparator;
|
|
20
21
|
/**
|
package/dist/comparators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparators.js","sourceRoot":"","sources":["../src/comparators.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAFD,8CAEC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,SAAiB,EACjB,KAAc,EACd,QAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAC3D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"comparators.js","sourceRoot":"","sources":["../src/comparators.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAFD,8CAEC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,SAAiB,EACjB,QAAgB,EAChB,KAAc,EACd,QAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAC3D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,SAAS;QACtC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAC9D,CAAC;AACJ,CAAC;AAZD,kDAYC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAc,EAAE,QAAiB;IAC/D,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC5B,CAAC;AAFD,0CAEC"}
|
package/dist/dualsense.d.ts
CHANGED
|
@@ -36,7 +36,14 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
36
36
|
readonly left: Unisense;
|
|
37
37
|
readonly right: Unisense;
|
|
38
38
|
readonly touchpad: Touchpad;
|
|
39
|
+
/**
|
|
40
|
+
* Represents the underlying HID mechanism and device.
|
|
41
|
+
*/
|
|
39
42
|
readonly hid: DualsenseHID;
|
|
43
|
+
/**
|
|
44
|
+
* A virtual button representing whether or not a controller is connected.
|
|
45
|
+
*/
|
|
46
|
+
readonly connection: Momentary;
|
|
40
47
|
get active(): boolean;
|
|
41
48
|
constructor(params?: DualsenseParams);
|
|
42
49
|
/**
|
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;AAEf,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD;;OAEG;IACH,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC7C,SAAgB,KAAK,EAAE,SAAS,CAAQ;IAExC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,IAAI,EAAE,IAAI,CAAC;IAE3B,SAAgB,OAAO,EAAE,SAAS,CAAC;IACnC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAElC,SAAgB,QAAQ,EAAE,SAAS,CAAC;IACpC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,KAAK,EAAE,SAAS,CAAC;IACjC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAElC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAE3B,SAAgB,IAAI,EAAE,QAAQ,CAAC;IAC/B,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAEhC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC,SAAgB,GAAG,EAAE,YAAY,CAAC;IAElC,IAAW,MAAM,IAAI,OAAO,CAI3B;gBAEW,MAAM,GAAE,eAAoB;
|
|
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;AAEf,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD;;OAEG;IACH,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC7C,SAAgB,KAAK,EAAE,SAAS,CAAQ;IAExC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,IAAI,EAAE,IAAI,CAAC;IAE3B,SAAgB,OAAO,EAAE,SAAS,CAAC;IACnC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAElC,SAAgB,QAAQ,EAAE,SAAS,CAAC;IACpC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,KAAK,EAAE,SAAS,CAAC;IACjC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAElC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAE3B,SAAgB,IAAI,EAAE,QAAQ,CAAC;IAC/B,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAEhC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC;;OAEG;IACH,SAAgB,GAAG,EAAE,YAAY,CAAC;IAElC;;OAEG;IACH,SAAgB,UAAU,EAAE,SAAS,CAAC;IAEtC,IAAW,MAAM,IAAI,OAAO,CAI3B;gBAEW,MAAM,GAAE,eAAoB;IAiGxC;;OAEG;IACH,OAAO,CAAC,UAAU;CAwCnB"}
|
package/dist/dualsense.js
CHANGED
|
@@ -71,12 +71,32 @@ class Dualsense extends input_1.Input {
|
|
|
71
71
|
name: "Touchpad",
|
|
72
72
|
...(params.touchpad || {}),
|
|
73
73
|
});
|
|
74
|
+
this.connection = new elements_1.Momentary({
|
|
75
|
+
icon: "🔗",
|
|
76
|
+
name: "Connected",
|
|
77
|
+
...(params.square || {}),
|
|
78
|
+
});
|
|
79
|
+
this.connection[input_1.InputSet](false);
|
|
74
80
|
this.hid = params.hid || new hid_1.DualsenseHID(new hid_1.PlatformHIDProvider());
|
|
75
81
|
this.hid.register((state) => {
|
|
76
82
|
this.processHID(state);
|
|
77
83
|
});
|
|
78
|
-
|
|
79
|
-
this
|
|
84
|
+
setInterval(() => {
|
|
85
|
+
const { hid } = this;
|
|
86
|
+
if (this.hid) {
|
|
87
|
+
const { provider: { connected }, } = hid;
|
|
88
|
+
this.connection[input_1.InputSet](connected);
|
|
89
|
+
if (!connected) {
|
|
90
|
+
try {
|
|
91
|
+
this.hid.provider.connect();
|
|
92
|
+
this.connection[input_1.InputSet](true);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
this.connection[input_1.InputSet](false);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}, 100);
|
|
80
100
|
}
|
|
81
101
|
get active() {
|
|
82
102
|
return Object.values(this).some((input) => input !== this && input instanceof input_1.Input && input.active);
|
package/dist/dualsense.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":";;;AAAA,yCAQoB;AACpB,mCAAuD;AACvD,+BAKe;AAsBf;;GAEG;AACH,MAAa,SAAU,SAAQ,aAAgB;
|
|
1
|
+
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
package/dist/input.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface InputParams {
|
|
|
4
4
|
name?: string;
|
|
5
5
|
icon?: string;
|
|
6
6
|
threshold?: number;
|
|
7
|
+
deadzone?: number;
|
|
7
8
|
}
|
|
8
9
|
export declare type InputChangeType = "change" | "press" | "release";
|
|
9
10
|
export declare type InputEventType = InputChangeType | "input";
|
|
@@ -34,6 +35,10 @@ export declare abstract class Input<Type> implements AsyncIterator<Input<Type>>
|
|
|
34
35
|
* For numeric inputs, ignore state changes smaller than this threshold.
|
|
35
36
|
*/
|
|
36
37
|
threshold: number;
|
|
38
|
+
/**
|
|
39
|
+
* For numeric inputs, ignore states smaller than this deadzone.
|
|
40
|
+
*/
|
|
41
|
+
deadzone: number;
|
|
37
42
|
/**
|
|
38
43
|
* Provide the type and default value for the input.
|
|
39
44
|
*/
|
package/dist/input.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAO/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|
package/dist/input.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a, _b, _c, _d;
|
|
2
|
+
var _a, _b, _c, _d, _e, _f;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.Input = exports.InputIcon = exports.InputName = exports.InputSet = exports.InputChanged = exports.InputSetComparator = void 0;
|
|
5
5
|
const comparators_1 = require("./comparators");
|
|
@@ -30,6 +30,10 @@ class Input {
|
|
|
30
30
|
* For numeric inputs, ignore state changes smaller than this threshold.
|
|
31
31
|
*/
|
|
32
32
|
this.threshold = 0;
|
|
33
|
+
/**
|
|
34
|
+
* For numeric inputs, ignore states smaller than this deadzone.
|
|
35
|
+
*/
|
|
36
|
+
this.deadzone = 0;
|
|
33
37
|
/**
|
|
34
38
|
* Stores event listeners.
|
|
35
39
|
*/
|
|
@@ -42,19 +46,27 @@ class Input {
|
|
|
42
46
|
* Returns true if the provided state is worth an event
|
|
43
47
|
*/
|
|
44
48
|
this[_c] = comparators_1.BasicComparator;
|
|
49
|
+
/**
|
|
50
|
+
* The name of this input.
|
|
51
|
+
*/
|
|
52
|
+
this[_d] = 'Unknown Input';
|
|
53
|
+
/**
|
|
54
|
+
* A short name for this input.
|
|
55
|
+
*/
|
|
56
|
+
this[_e] = '???';
|
|
45
57
|
/**
|
|
46
58
|
* Other Inputs that contain this one.
|
|
47
59
|
*/
|
|
48
|
-
this[
|
|
49
|
-
const { name, icon, threshold } = {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
this[_f] = new Set();
|
|
61
|
+
const { name, icon, threshold, deadzone } = params || {};
|
|
62
|
+
if (name)
|
|
63
|
+
this[exports.InputName] = name;
|
|
64
|
+
if (icon)
|
|
65
|
+
this[exports.InputIcon] = icon;
|
|
66
|
+
if (threshold)
|
|
67
|
+
this.threshold = threshold;
|
|
68
|
+
if (deadzone)
|
|
69
|
+
this.deadzone = deadzone;
|
|
58
70
|
setTimeout(() => {
|
|
59
71
|
this[exports.InputSetComparator]();
|
|
60
72
|
Object.values(this).forEach((value) => {
|
|
@@ -166,7 +178,7 @@ class Input {
|
|
|
166
178
|
/**
|
|
167
179
|
* Links Inputs to bubble up events.
|
|
168
180
|
*/
|
|
169
|
-
[(_d = InputParents, InputAdopt)](parent) {
|
|
181
|
+
[(_d = exports.InputName, _e = exports.InputIcon, _f = InputParents, InputAdopt)](parent) {
|
|
170
182
|
this[InputParents].add(parent);
|
|
171
183
|
}
|
|
172
184
|
/**
|
|
@@ -174,7 +186,7 @@ class Input {
|
|
|
174
186
|
*/
|
|
175
187
|
[exports.InputSetComparator]() {
|
|
176
188
|
if (typeof this.state === "number") {
|
|
177
|
-
this[InputComparator] = comparators_1.ThresholdComparator.bind(this, this.threshold);
|
|
189
|
+
this[InputComparator] = comparators_1.ThresholdComparator.bind(this, this.threshold, this.deadzone);
|
|
178
190
|
}
|
|
179
191
|
else if (this.state instanceof Input) {
|
|
180
192
|
this[InputComparator] = comparators_1.VirtualComparator;
|
package/dist/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";;;;AACA,+CAIuB;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";;;;AACA,+CAIuB;AAmBvB;;GAEG;AAEU,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAClD,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACtC,QAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC9B,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAChC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7C;;GAEG;AAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAsB,KAAK;IA4BzB,YAAY,SAAsB,EAAE;QA3BpB,OAAE,mCAA4B;QAE9C;;WAEG;QACI,cAAS,GAAW,CAAC,CAAC;QAE7B;;WAEG;QACI,aAAQ,GAAW,CAAC,CAAC;QAO5B;;WAEG;QACK,QAAU,GAAG,IAAI,GAAG,EAAyC,CAAC;QAEtE;;WAEG;QACK,QAAY,GAAG,IAAI,GAAG,EAA0C,CAAC;QA+HzE;;WAEG;QACH,QAAiB,GAA6C,6BAAe,CAAC;QAgB9E;;WAEG;QACM,QAAW,GAAW,eAAe,CAAC;QAE/C;;WAEG;QACM,QAAW,GAAW,KAAK,CAAC;QAErC;;WAEG;QACK,QAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QA5JjD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;QAExD,IAAI,IAAI;YAAE,IAAI,CAAC,iBAAS,CAAC,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI;YAAE,IAAI,CAAC,iBAAS,CAAC,GAAG,IAAI,CAAC;QACjC,IAAI,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC1C,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEvC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,0BAAkB,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpC,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO;gBAC3B,IAAI,KAAK,YAAY,KAAK;oBAAE,KAAK,CAAC,UAAU,CAAC,CAAC,IAAsB,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAOD;;OAEG;IACI,EAAE,CAAC,KAAqB,EAAE,QAA6B;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACjC;QACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,KAAsB,EAAE,QAA6B;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACnC;QACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,IAAI,CAAC,KAAqB,EAAE,OAA8B;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,KAAK,OAAO,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAyB,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED;;OAEG;IACK,QAAQ,CACd,KAAsB,EACtB,UAAiC,IAAI;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,EAAE,OAAyB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,gBAAgB,CACrB,KAAqB,EACrB,QAA6B,EAC7B,EAAE,IAAI,KAAwB,EAAE,IAAI,EAAE,KAAK,EAAE;QAE7C,IAAI,IAAI,EAAE;YACR,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACnC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,OAAwB,QAAQ;QAC1C,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBACnB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,OAAO,CACZ,OAAuC,QAAQ;QAE/C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,GAAG,IAAI,CAAC,iBAAS,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC3D,CAAC;IAOD,OAzIS,QAAQ,OAKR,UAAU,OAkIlB,eAAe,EAEf,MAAM,CAAC,aAAa,EAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAqC;QACxD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAiBD;;OAEG;IACH,OAfU,iBAAS,OAKT,iBAAS,OAKV,YAAY,EAKpB,UAAU,EAAC,CAAC,MAAsB;QACjC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,CAAC,0BAAkB,CAAC;QAClB,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,eAAe,CAAC,GAAG,iCAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACvF;aAAM,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,EAAE;YACtC,IAAI,CAAC,eAAe,CAAC,GAAG,+BAAiB,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,eAAe,CAAC,GAAG,6BAAe,CAAC;SACzC;IACH,CAAC;IAED;;OAEG;IACH,CAAC,gBAAQ,CAAC,CAAC,KAAW;QACpB,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAC5C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,OAAO,KAAK,KAAK,SAAS;gBAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AA3ND,sBA2NC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dualsense-ts",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "A natural interface for your DualSense controller, with Typescript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dualsense",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"lint": "eslint src",
|
|
41
41
|
"test": "jest src --verbose",
|
|
42
42
|
"test:watch": "jest src --verbose --watch",
|
|
43
|
-
"coverage": "jest src --coverage --verbose",
|
|
43
|
+
"coverage": "jest src --coverage --verbose --forceExit",
|
|
44
44
|
"coverage:watch": "jest src --coverage --verbose --watch",
|
|
45
45
|
"barrels": "barrelsby -d src -D -l replace -e 'spec.ts$'",
|
|
46
46
|
"docs": "typedoc src/index.ts",
|
package/src/comparators.ts
CHANGED
|
@@ -10,12 +10,16 @@ export function VirtualComparator(): boolean {
|
|
|
10
10
|
*/
|
|
11
11
|
export function ThresholdComparator(
|
|
12
12
|
threshold: number,
|
|
13
|
+
deadzone: number,
|
|
13
14
|
state: unknown,
|
|
14
15
|
newState: unknown
|
|
15
16
|
): boolean {
|
|
16
17
|
if (typeof state !== "number" || typeof newState !== "number")
|
|
17
18
|
throw new Error("Bad threshold comparison");
|
|
18
|
-
return
|
|
19
|
+
return (
|
|
20
|
+
Math.abs(state - newState) > threshold &&
|
|
21
|
+
(Math.abs(newState) > deadzone || Math.abs(state) > deadzone)
|
|
22
|
+
);
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
/**
|
package/src/dualsense.ts
CHANGED
|
@@ -59,8 +59,16 @@ export class Dualsense extends Input<Dualsense> {
|
|
|
59
59
|
|
|
60
60
|
public readonly touchpad: Touchpad;
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Represents the underlying HID mechanism and device.
|
|
64
|
+
*/
|
|
62
65
|
public readonly hid: DualsenseHID;
|
|
63
66
|
|
|
67
|
+
/**
|
|
68
|
+
* A virtual button representing whether or not a controller is connected.
|
|
69
|
+
*/
|
|
70
|
+
public readonly connection: Momentary;
|
|
71
|
+
|
|
64
72
|
public get active(): boolean {
|
|
65
73
|
return Object.values(this).some(
|
|
66
74
|
(input) => input !== this && input instanceof Input && input.active
|
|
@@ -131,12 +139,37 @@ export class Dualsense extends Input<Dualsense> {
|
|
|
131
139
|
...(params.touchpad || {}),
|
|
132
140
|
});
|
|
133
141
|
|
|
142
|
+
this.connection = new Momentary({
|
|
143
|
+
icon: "🔗",
|
|
144
|
+
name: "Connected",
|
|
145
|
+
...(params.square || {}),
|
|
146
|
+
});
|
|
147
|
+
this.connection[InputSet](false);
|
|
148
|
+
|
|
134
149
|
this.hid = params.hid || new DualsenseHID(new PlatformHIDProvider());
|
|
135
150
|
this.hid.register((state: DualsenseHIDState) => {
|
|
136
151
|
this.processHID(state);
|
|
137
152
|
});
|
|
138
153
|
|
|
139
|
-
|
|
154
|
+
setInterval(() => {
|
|
155
|
+
const { hid } = this;
|
|
156
|
+
if (this.hid) {
|
|
157
|
+
const {
|
|
158
|
+
provider: { connected },
|
|
159
|
+
} = hid;
|
|
160
|
+
|
|
161
|
+
this.connection[InputSet](connected);
|
|
162
|
+
|
|
163
|
+
if (!connected) {
|
|
164
|
+
try {
|
|
165
|
+
this.hid.provider.connect();
|
|
166
|
+
this.connection[InputSet](true);
|
|
167
|
+
} catch {
|
|
168
|
+
this.connection[InputSet](false);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}, 100);
|
|
140
173
|
}
|
|
141
174
|
|
|
142
175
|
/**
|
package/src/input.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface InputParams {
|
|
|
11
11
|
name?: string;
|
|
12
12
|
icon?: string;
|
|
13
13
|
threshold?: number;
|
|
14
|
+
deadzone?: number;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export type InputChangeType = "change" | "press" | "release";
|
|
@@ -53,6 +54,11 @@ export abstract class Input<Type> implements AsyncIterator<Input<Type>> {
|
|
|
53
54
|
*/
|
|
54
55
|
public threshold: number = 0;
|
|
55
56
|
|
|
57
|
+
/**
|
|
58
|
+
* For numeric inputs, ignore states smaller than this deadzone.
|
|
59
|
+
*/
|
|
60
|
+
public deadzone: number = 0;
|
|
61
|
+
|
|
56
62
|
/**
|
|
57
63
|
* Provide the type and default value for the input.
|
|
58
64
|
*/
|
|
@@ -69,16 +75,12 @@ export abstract class Input<Type> implements AsyncIterator<Input<Type>> {
|
|
|
69
75
|
private [InputOnces] = new Map<InputChangeType, InputCallback<this>[]>();
|
|
70
76
|
|
|
71
77
|
constructor(params: InputParams = {}) {
|
|
72
|
-
const { name, icon, threshold } = {
|
|
73
|
-
icon: "???",
|
|
74
|
-
name: "Nameless Input",
|
|
75
|
-
threshold: 0,
|
|
76
|
-
...params,
|
|
77
|
-
};
|
|
78
|
+
const { name, icon, threshold, deadzone } = params || {}
|
|
78
79
|
|
|
79
|
-
this[InputName] = name;
|
|
80
|
-
this[InputIcon] = icon;
|
|
81
|
-
this.threshold = threshold;
|
|
80
|
+
if (name) this[InputName] = name;
|
|
81
|
+
if (icon) this[InputIcon] = icon;
|
|
82
|
+
if (threshold) this.threshold = threshold;
|
|
83
|
+
if (deadzone) this.deadzone = deadzone;
|
|
82
84
|
|
|
83
85
|
setTimeout(() => {
|
|
84
86
|
this[InputSetComparator]();
|
|
@@ -219,12 +221,12 @@ export abstract class Input<Type> implements AsyncIterator<Input<Type>> {
|
|
|
219
221
|
/**
|
|
220
222
|
* The name of this input.
|
|
221
223
|
*/
|
|
222
|
-
readonly [InputName]: string;
|
|
224
|
+
readonly [InputName]: string = 'Unknown Input';
|
|
223
225
|
|
|
224
226
|
/**
|
|
225
227
|
* A short name for this input.
|
|
226
228
|
*/
|
|
227
|
-
readonly [InputIcon]: string;
|
|
229
|
+
readonly [InputIcon]: string = '???';
|
|
228
230
|
|
|
229
231
|
/**
|
|
230
232
|
* Other Inputs that contain this one.
|
|
@@ -243,7 +245,7 @@ export abstract class Input<Type> implements AsyncIterator<Input<Type>> {
|
|
|
243
245
|
*/
|
|
244
246
|
[InputSetComparator](): void {
|
|
245
247
|
if (typeof this.state === "number") {
|
|
246
|
-
this[InputComparator] = ThresholdComparator.bind(this, this.threshold);
|
|
248
|
+
this[InputComparator] = ThresholdComparator.bind(this, this.threshold, this.deadzone);
|
|
247
249
|
} else if (this.state instanceof Input) {
|
|
248
250
|
this[InputComparator] = VirtualComparator;
|
|
249
251
|
} else {
|