dualsense-ts 2.2.1 → 3.1.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 +9 -2
- package/dist/comparators.d.ts +13 -0
- package/dist/comparators.d.ts.map +1 -0
- package/dist/comparators.js +27 -0
- package/dist/comparators.js.map +1 -0
- package/dist/dualsense.d.ts +10 -1
- package/dist/dualsense.d.ts.map +1 -1
- package/dist/dualsense.js +46 -45
- package/dist/dualsense.js.map +1 -1
- package/dist/elements/analog.d.ts +8 -2
- package/dist/elements/analog.d.ts.map +1 -1
- package/dist/elements/analog.js +30 -10
- package/dist/elements/analog.js.map +1 -1
- package/dist/elements/dpad.d.ts +1 -1
- package/dist/elements/dpad.d.ts.map +1 -1
- package/dist/elements/dpad.js +6 -5
- package/dist/elements/dpad.js.map +1 -1
- package/dist/elements/touch.d.ts +2 -1
- package/dist/elements/touch.d.ts.map +1 -1
- package/dist/elements/touch.js +1 -0
- package/dist/elements/touch.js.map +1 -1
- package/dist/elements/touchpad.d.ts +1 -1
- package/dist/elements/touchpad.d.ts.map +1 -1
- package/dist/elements/touchpad.js.map +1 -1
- package/dist/elements/trigger.d.ts.map +1 -1
- package/dist/elements/trigger.js +1 -1
- package/dist/elements/trigger.js.map +1 -1
- package/dist/elements/unisense.d.ts +1 -1
- package/dist/elements/unisense.d.ts.map +1 -1
- package/dist/elements/unisense.js +12 -5
- package/dist/elements/unisense.js.map +1 -1
- package/dist/hid/dualsense_hid.d.ts +16 -58
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +25 -101
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/hid_provider.d.ts +86 -0
- package/dist/hid/hid_provider.d.ts.map +1 -0
- package/dist/hid/hid_provider.js +45 -0
- package/dist/hid/hid_provider.js.map +1 -0
- package/dist/hid/index.d.ts +4 -1
- package/dist/hid/index.d.ts.map +1 -1
- package/dist/hid/index.js +4 -1
- package/dist/hid/index.js.map +1 -1
- package/dist/hid/node_hid_provider.d.ts +11 -0
- package/dist/hid/node_hid_provider.d.ts.map +1 -0
- package/dist/hid/node_hid_provider.js +97 -0
- package/dist/hid/node_hid_provider.js.map +1 -0
- package/dist/hid/platform_hid_provider.d.ts +4 -0
- package/dist/hid/platform_hid_provider.d.ts.map +1 -0
- package/dist/hid/platform_hid_provider.js +7 -0
- package/dist/hid/platform_hid_provider.js.map +1 -0
- package/dist/hid/web_hid_provider.d.ts +10 -0
- package/dist/hid/web_hid_provider.d.ts.map +1 -0
- package/dist/hid/web_hid_provider.js +102 -0
- package/dist/hid/web_hid_provider.js.map +1 -0
- package/dist/{hid/ids.d.ts → id.d.ts} +6 -2
- package/dist/id.d.ts.map +1 -0
- package/dist/{hid/ids.js → id.js} +1 -1
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +63 -45
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +123 -90
- package/dist/input.js.map +1 -1
- package/package.json +15 -9
- package/src/comparators.ts +26 -0
- package/src/dualsense.ts +61 -58
- package/src/elements/analog.spec.ts +2 -15
- package/src/elements/analog.ts +39 -16
- package/src/elements/dpad.ts +7 -6
- package/src/elements/touch.ts +2 -1
- package/src/elements/touchpad.ts +1 -1
- package/src/elements/trigger.ts +1 -1
- package/src/elements/unisense.ts +16 -15
- package/src/hid/dualsense_hid.ts +25 -156
- package/src/hid/{dualsense_hid.spec.ts → hid_provider.spec.ts} +1 -1
- package/src/hid/hid_provider.ts +100 -0
- package/src/hid/index.ts +4 -1
- package/src/hid/node_hid_provider.ts +108 -0
- package/src/hid/platform_hid_provider.ts +4 -0
- package/src/hid/web_hid_provider.ts +116 -0
- package/src/{hid/ids.ts → id.ts} +6 -1
- package/src/index.ts +2 -0
- package/src/input.ts +156 -138
- package/src/readme.spec.ts +6 -8
- package/webpack.config.js +42 -0
- package/dist/hid/ids.d.ts.map +0 -1
- package/dist/hid/ids.js.map +0 -1
package/README.md
CHANGED
|
@@ -13,6 +13,13 @@ Install it using your preferred package manager:
|
|
|
13
13
|
- `yarn add dualsense-ts`
|
|
14
14
|
- `npm add dualsense-ts`
|
|
15
15
|
|
|
16
|
+
### Platforms
|
|
17
|
+
|
|
18
|
+
`dualsense-ts` is a cross-platform, low dependency library that works in Node.js or natively in your browser.
|
|
19
|
+
|
|
20
|
+
- In Node.js, the only dependency is `node-hid`
|
|
21
|
+
- In the browser, tree-shaking reduces this to a zero-dependency package relying on WebHID
|
|
22
|
+
|
|
16
23
|
### Connecting
|
|
17
24
|
|
|
18
25
|
`dualsense-ts` will try to connect to the first Dualsense controller it finds.
|
|
@@ -50,7 +57,7 @@ controller.touchpad.right.contact.state; // false
|
|
|
50
57
|
+controller.touchpad.right.x; // -0.44, -1 to 1
|
|
51
58
|
```
|
|
52
59
|
|
|
53
|
-
- _Callbacks_: Each input is an EventEmitter that provides `input`, `press`, `release`, and `change` events
|
|
60
|
+
- _Callbacks_: Each input is an EventEmitter, or EventTarget that provides `input`, `press`, `release`, and `change` events
|
|
54
61
|
|
|
55
62
|
```typescript
|
|
56
63
|
// Change events are triggered only when an input's value changes
|
|
@@ -61,7 +68,7 @@ controller.triangle.on("change", (input) =>
|
|
|
61
68
|
// ▲ changed: false
|
|
62
69
|
|
|
63
70
|
// The callback provides two arguments, so you can monitor nested inputs
|
|
64
|
-
// You'll get a reference to your original input, and
|
|
71
|
+
// You'll get a reference to your original input, and the one that changed
|
|
65
72
|
controller.dpad.on("press", (dpad, input) =>
|
|
66
73
|
assert(dpad === controller.dpad)
|
|
67
74
|
console.log(`${input} pressed`)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input state change checker that always returns true.
|
|
3
|
+
*/
|
|
4
|
+
export declare function VirtualComparator(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Input state change checker that considers a numeric threshold.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ThresholdComparator(threshold: number, state: unknown, newState: unknown): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Input state change checker for most values.
|
|
11
|
+
*/
|
|
12
|
+
export declare function BasicComparator(state: unknown, newState: unknown): boolean;
|
|
13
|
+
//# sourceMappingURL=comparators.d.ts.map
|
|
@@ -0,0 +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,CAIT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE1E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasicComparator = exports.ThresholdComparator = exports.VirtualComparator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Input state change checker that always returns true.
|
|
6
|
+
*/
|
|
7
|
+
function VirtualComparator() {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
exports.VirtualComparator = VirtualComparator;
|
|
11
|
+
/**
|
|
12
|
+
* Input state change checker that considers a numeric threshold.
|
|
13
|
+
*/
|
|
14
|
+
function ThresholdComparator(threshold, state, newState) {
|
|
15
|
+
if (typeof state !== "number" || typeof newState !== "number")
|
|
16
|
+
throw new Error("Bad threshold comparison");
|
|
17
|
+
return Math.abs(state - newState) > threshold;
|
|
18
|
+
}
|
|
19
|
+
exports.ThresholdComparator = ThresholdComparator;
|
|
20
|
+
/**
|
|
21
|
+
* Input state change checker for most values.
|
|
22
|
+
*/
|
|
23
|
+
function BasicComparator(state, newState) {
|
|
24
|
+
return state !== newState;
|
|
25
|
+
}
|
|
26
|
+
exports.BasicComparator = BasicComparator;
|
|
27
|
+
//# sourceMappingURL=comparators.js.map
|
|
@@ -0,0 +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;AAChD,CAAC;AARD,kDAQC;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
|
@@ -2,6 +2,9 @@ import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad }
|
|
|
2
2
|
import { Input, InputParams } from "./input";
|
|
3
3
|
import { DualsenseHID } from "./hid";
|
|
4
4
|
export interface DualsenseParams extends InputParams {
|
|
5
|
+
/**
|
|
6
|
+
* Sets the source of HID events for the controller interface.
|
|
7
|
+
*/
|
|
5
8
|
hid?: DualsenseHID | null;
|
|
6
9
|
ps?: InputParams;
|
|
7
10
|
mute?: InputParams;
|
|
@@ -16,6 +19,9 @@ export interface DualsenseParams extends InputParams {
|
|
|
16
19
|
right?: UnisenseParams;
|
|
17
20
|
touchpad?: InputParams;
|
|
18
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Represents a Dualsense controller.
|
|
24
|
+
*/
|
|
19
25
|
export declare class Dualsense extends Input<Dualsense> {
|
|
20
26
|
readonly state: Dualsense;
|
|
21
27
|
readonly ps: Momentary;
|
|
@@ -30,9 +36,12 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
30
36
|
readonly left: Unisense;
|
|
31
37
|
readonly right: Unisense;
|
|
32
38
|
readonly touchpad: Touchpad;
|
|
33
|
-
readonly hid: DualsenseHID
|
|
39
|
+
readonly hid: DualsenseHID;
|
|
34
40
|
get active(): boolean;
|
|
35
41
|
constructor(params?: DualsenseParams);
|
|
42
|
+
/**
|
|
43
|
+
* Distributes input values to various elements.
|
|
44
|
+
*/
|
|
36
45
|
private processHID;
|
|
37
46
|
}
|
|
38
47
|
//# sourceMappingURL=dualsense.d.ts.map
|
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,
|
|
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;IAwExC;;OAEG;IACH,OAAO,CAAC,UAAU;CAwCnB"}
|
package/dist/dualsense.js
CHANGED
|
@@ -4,11 +4,13 @@ exports.Dualsense = void 0;
|
|
|
4
4
|
const elements_1 = require("./elements");
|
|
5
5
|
const input_1 = require("./input");
|
|
6
6
|
const hid_1 = require("./hid");
|
|
7
|
+
/**
|
|
8
|
+
* Represents a Dualsense controller.
|
|
9
|
+
*/
|
|
7
10
|
class Dualsense extends input_1.Input {
|
|
8
11
|
constructor(params = {}) {
|
|
9
12
|
super(params);
|
|
10
13
|
this.state = this;
|
|
11
|
-
this.hid = null;
|
|
12
14
|
this.ps = new elements_1.Momentary({
|
|
13
15
|
icon: "㎰",
|
|
14
16
|
name: "Home",
|
|
@@ -69,53 +71,52 @@ class Dualsense extends input_1.Input {
|
|
|
69
71
|
name: "Touchpad",
|
|
70
72
|
...(params.touchpad || {}),
|
|
71
73
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
});
|
|
79
|
-
}
|
|
74
|
+
this.hid = params.hid || new hid_1.DualsenseHID(new hid_1.PlatformHIDProvider());
|
|
75
|
+
this.hid.register((state) => {
|
|
76
|
+
this.processHID(state);
|
|
77
|
+
});
|
|
78
|
+
if (params.hid !== null)
|
|
79
|
+
this.hid.provider.connect();
|
|
80
80
|
}
|
|
81
81
|
get active() {
|
|
82
|
-
return Object.values(this).some((input) => input
|
|
82
|
+
return Object.values(this).some((input) => input !== this && input instanceof input_1.Input && input.active);
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.mute
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
94
|
-
this.
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
97
|
-
this.dpad.
|
|
98
|
-
this.dpad.
|
|
99
|
-
this.dpad.
|
|
100
|
-
this.
|
|
101
|
-
this.touchpad.
|
|
102
|
-
this.touchpad.left.
|
|
103
|
-
this.touchpad.left.
|
|
104
|
-
this.touchpad.left.
|
|
105
|
-
this.touchpad.
|
|
106
|
-
this.touchpad.right.
|
|
107
|
-
this.touchpad.right.
|
|
108
|
-
this.touchpad.right.
|
|
109
|
-
this.
|
|
110
|
-
this.left.analog.
|
|
111
|
-
this.left.
|
|
112
|
-
this.left.
|
|
113
|
-
this.left.trigger
|
|
114
|
-
this.
|
|
115
|
-
this.right.analog.
|
|
116
|
-
this.right.
|
|
117
|
-
this.right.
|
|
118
|
-
this.right.trigger
|
|
84
|
+
/**
|
|
85
|
+
* Distributes input values to various elements.
|
|
86
|
+
*/
|
|
87
|
+
processHID(state) {
|
|
88
|
+
this.ps[input_1.InputSet](state["Playstation" /* InputId.Playstation */]);
|
|
89
|
+
this.options[input_1.InputSet](state["Options" /* InputId.Options */]);
|
|
90
|
+
this.create[input_1.InputSet](state["Create" /* InputId.Create */]);
|
|
91
|
+
this.mute[input_1.InputSet](state["Mute" /* InputId.Mute */]);
|
|
92
|
+
this.mute.status[input_1.InputSet](state["Status" /* InputId.Status */]);
|
|
93
|
+
this.triangle[input_1.InputSet](state["Triangle" /* InputId.Triangle */]);
|
|
94
|
+
this.circle[input_1.InputSet](state["Circle" /* InputId.Circle */]);
|
|
95
|
+
this.cross[input_1.InputSet](state["Cross" /* InputId.Cross */]);
|
|
96
|
+
this.square[input_1.InputSet](state["Square" /* InputId.Square */]);
|
|
97
|
+
this.dpad.up[input_1.InputSet](state["Up" /* InputId.Up */]);
|
|
98
|
+
this.dpad.down[input_1.InputSet](state["Down" /* InputId.Down */]);
|
|
99
|
+
this.dpad.right[input_1.InputSet](state["Right" /* InputId.Right */]);
|
|
100
|
+
this.dpad.left[input_1.InputSet](state["Left" /* InputId.Left */]);
|
|
101
|
+
this.touchpad.button[input_1.InputSet](state["TouchButton" /* InputId.TouchButton */]);
|
|
102
|
+
this.touchpad.left.x[input_1.InputSet](state["TouchX0" /* InputId.TouchX0 */]);
|
|
103
|
+
this.touchpad.left.y[input_1.InputSet](state["TouchY0" /* InputId.TouchY0 */]);
|
|
104
|
+
this.touchpad.left.contact[input_1.InputSet](state["TouchContact0" /* InputId.TouchContact0 */]);
|
|
105
|
+
this.touchpad.left.tracker[input_1.InputSet](state["TouchId0" /* InputId.TouchId0 */]);
|
|
106
|
+
this.touchpad.right.x[input_1.InputSet](state["TouchX1" /* InputId.TouchX1 */]);
|
|
107
|
+
this.touchpad.right.y[input_1.InputSet](state["TouchY1" /* InputId.TouchY1 */]);
|
|
108
|
+
this.touchpad.right.contact[input_1.InputSet](state["TouchContact1" /* InputId.TouchContact1 */]);
|
|
109
|
+
this.touchpad.right.tracker[input_1.InputSet](state["TouchId1" /* InputId.TouchId1 */]);
|
|
110
|
+
this.left.analog.x[input_1.InputSet](state["LX" /* InputId.LeftAnalogX */]);
|
|
111
|
+
this.left.analog.y[input_1.InputSet](state["LY" /* InputId.LeftAnalogY */]);
|
|
112
|
+
this.left.bumper[input_1.InputSet](state["L1" /* InputId.LeftBumper */]);
|
|
113
|
+
this.left.trigger[input_1.InputSet](state["L2" /* InputId.LeftTrigger */]);
|
|
114
|
+
this.left.trigger.button[input_1.InputSet](state["L2Button" /* InputId.LeftTriggerButton */]);
|
|
115
|
+
this.right.analog.x[input_1.InputSet](state["RX" /* InputId.RightAnalogX */]);
|
|
116
|
+
this.right.analog.y[input_1.InputSet](state["RY" /* InputId.RightAnalogY */]);
|
|
117
|
+
this.right.bumper[input_1.InputSet](state["R1" /* InputId.RightBumper */]);
|
|
118
|
+
this.right.trigger[input_1.InputSet](state["R2" /* InputId.RightTrigger */]);
|
|
119
|
+
this.right.trigger.button[input_1.InputSet](state["R2Button" /* InputId.RightTriggerButton */]);
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
122
|
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,yCAQoB;AACpB,mCAAuD;AACvD,+
|
|
1
|
+
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface AnalogParams extends InputParams {
|
|
|
10
10
|
x?: InputParams;
|
|
11
11
|
y?: InputParams;
|
|
12
12
|
threshold?: Magnitude;
|
|
13
|
+
deadzone?: Magnitude;
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
16
|
* Represents an analog joystick.
|
|
@@ -20,7 +21,7 @@ export interface AnalogParams extends InputParams {
|
|
|
20
21
|
* - Pushed all the way down and to the left, the stick's coordinates are [-1, -1]
|
|
21
22
|
*/
|
|
22
23
|
export declare class Analog extends Input<Analog> {
|
|
23
|
-
readonly state:
|
|
24
|
+
readonly state: this;
|
|
24
25
|
/**
|
|
25
26
|
* The left/right position of the input.
|
|
26
27
|
*/
|
|
@@ -33,6 +34,10 @@ export declare class Analog extends Input<Analog> {
|
|
|
33
34
|
* Button triggered by pressing the stick.
|
|
34
35
|
*/
|
|
35
36
|
readonly button: Momentary;
|
|
37
|
+
/**
|
|
38
|
+
* Ignores stick movement below this value (0 to 1).
|
|
39
|
+
*/
|
|
40
|
+
deadzone: number;
|
|
36
41
|
constructor(params?: AnalogParams);
|
|
37
42
|
/**
|
|
38
43
|
* Returns true if the stick is away from the idle position, or the button is pressed.
|
|
@@ -46,7 +51,8 @@ export declare class Analog extends Input<Analog> {
|
|
|
46
51
|
magnitude: Magnitude;
|
|
47
52
|
};
|
|
48
53
|
/**
|
|
49
|
-
* Returns
|
|
54
|
+
* Returns a force from the stick's position.
|
|
55
|
+
* This ignores the deadzone value.
|
|
50
56
|
*/
|
|
51
57
|
get force(): Force;
|
|
52
58
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAE/C,MAAM,CAAC,EAAE,WAAW,CAAC;IAGrB,CAAC,CAAC,EAAE,WAAW,CAAC;IAGhB,CAAC,CAAC,EAAE,WAAW,CAAC;IAGhB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC;;OAEG;IACH,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB;;OAEG;IACH,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB;;OAEG;IACH,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC;;OAEG;IACI,QAAQ,EAAE,MAAM,CAAQ;gBAEnB,MAAM,CAAC,EAAE,YAAY;IAqBjC;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAW,MAAM,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CAEhE;IAED;;;OAGG;IACH,IAAW,KAAK,IAAI,KAAK,CAExB;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,SAAS,CAIhC;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAW,YAAY,IAAI,OAAO,CAEjC;CACF"}
|
package/dist/elements/analog.js
CHANGED
|
@@ -16,16 +16,34 @@ class Analog extends input_1.Input {
|
|
|
16
16
|
constructor(params) {
|
|
17
17
|
super(params);
|
|
18
18
|
this.state = this;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.
|
|
19
|
+
/**
|
|
20
|
+
* Ignores stick movement below this value (0 to 1).
|
|
21
|
+
*/
|
|
22
|
+
this.deadzone = 0.05;
|
|
23
|
+
const { button, x, y, deadzone, threshold } = params || {};
|
|
24
|
+
if (threshold)
|
|
25
|
+
this.threshold = threshold;
|
|
26
|
+
if (deadzone)
|
|
27
|
+
this.deadzone = deadzone;
|
|
28
|
+
this.button = new momentary_1.Momentary({ icon: "3", name: "Button", ...button });
|
|
29
|
+
this.x = new axis_1.Axis({
|
|
30
|
+
icon: "↔",
|
|
31
|
+
name: "X",
|
|
32
|
+
...params,
|
|
33
|
+
...x,
|
|
34
|
+
});
|
|
35
|
+
this.y = new axis_1.Axis({
|
|
36
|
+
icon: "↕",
|
|
37
|
+
name: "Y",
|
|
38
|
+
...params,
|
|
39
|
+
...y,
|
|
40
|
+
});
|
|
23
41
|
}
|
|
24
42
|
/**
|
|
25
43
|
* Returns true if the stick is away from the idle position, or the button is pressed.
|
|
26
44
|
*/
|
|
27
45
|
get active() {
|
|
28
|
-
return this.
|
|
46
|
+
return this.magnitude > 0 || this.button.active;
|
|
29
47
|
}
|
|
30
48
|
/**
|
|
31
49
|
* Returns a direction and magnitude representing the stick's position.
|
|
@@ -34,18 +52,20 @@ class Analog extends input_1.Input {
|
|
|
34
52
|
return { direction: this.direction, magnitude: this.magnitude };
|
|
35
53
|
}
|
|
36
54
|
/**
|
|
37
|
-
* Returns
|
|
55
|
+
* Returns a force from the stick's position.
|
|
56
|
+
* This ignores the deadzone value.
|
|
38
57
|
*/
|
|
39
58
|
get force() {
|
|
40
|
-
return this.
|
|
41
|
-
? Math.max(Math.min(Math.hypot(this.x.state, this.y.state), 1), -1)
|
|
42
|
-
: 0;
|
|
59
|
+
return Math.max(Math.min(Math.hypot(this.x.state, this.y.state), 1), -1);
|
|
43
60
|
}
|
|
44
61
|
/**
|
|
45
62
|
* Returns a magnitude from the stick's position.
|
|
46
63
|
*/
|
|
47
64
|
get magnitude() {
|
|
48
|
-
|
|
65
|
+
const magnitude = Math.abs(this.force);
|
|
66
|
+
if (magnitude < this.deadzone)
|
|
67
|
+
return 0;
|
|
68
|
+
return (magnitude - this.deadzone) / (1 - this.deadzone);
|
|
49
69
|
}
|
|
50
70
|
/**
|
|
51
71
|
* Returns the stick's angle in radians.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAC9B,2CAAwC;AACxC,oCAA8C;
|
|
1
|
+
{"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAC9B,2CAAwC;AACxC,oCAA8C;AAuB9C;;;;;;;GAOG;AACH,MAAa,MAAO,SAAQ,aAAa;IAoBvC,YAAY,MAAqB;QAC/B,KAAK,CAAC,MAAM,CAAC,CAAC;QApBA,UAAK,GAAS,IAAI,CAAC;QAcnC;;WAEG;QACI,aAAQ,GAAW,IAAI,CAAC;QAI7B,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAE3D,IAAI,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC1C,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,GAAG,MAAM;YACT,GAAG,CAAC;SACL,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAjHD,wBAiHC"}
|
package/dist/elements/dpad.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dpad.d.ts","sourceRoot":"","sources":["../../src/elements/dpad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,qBAAa,IAAK,SAAQ,KAAK,CAAC,IAAI,CAAC;IACnC,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,KAAK,EAAE,SAAS,CAAC;gBAErB,MAAM,
|
|
1
|
+
{"version":3,"file":"dpad.d.ts","sourceRoot":"","sources":["../../src/elements/dpad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,qBAAa,IAAK,SAAQ,KAAK,CAAC,IAAI,CAAC;IACnC,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,KAAK,EAAE,SAAS,CAAC;gBAErB,MAAM,GAAE,UAAe;IAUnC,IAAW,MAAM,IAAI,OAAO,CAO3B;CACF"}
|
package/dist/elements/dpad.js
CHANGED
|
@@ -4,13 +4,14 @@ exports.Dpad = void 0;
|
|
|
4
4
|
const momentary_1 = require("./momentary");
|
|
5
5
|
const input_1 = require("../input");
|
|
6
6
|
class Dpad extends input_1.Input {
|
|
7
|
-
constructor(params) {
|
|
7
|
+
constructor(params = {}) {
|
|
8
8
|
super(params);
|
|
9
9
|
this.state = this;
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
10
|
+
const { up, down, left, right } = params;
|
|
11
|
+
this.up = new momentary_1.Momentary(params?.up || { icon: "⮉", name: "Up", ...up });
|
|
12
|
+
this.down = new momentary_1.Momentary(params?.down || { icon: "⮋", name: "Down", ...down });
|
|
13
|
+
this.left = new momentary_1.Momentary(params?.left || { icon: "⮈", name: "Left", ...left });
|
|
14
|
+
this.right = new momentary_1.Momentary(params?.right || { icon: "⮊", name: "Right", ...right });
|
|
14
15
|
}
|
|
15
16
|
get active() {
|
|
16
17
|
return (this.up.active ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dpad.js","sourceRoot":"","sources":["../../src/elements/dpad.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,oCAA8C;AAS9C,MAAa,IAAK,SAAQ,aAAW;IAQnC,YAAY,
|
|
1
|
+
{"version":3,"file":"dpad.js","sourceRoot":"","sources":["../../src/elements/dpad.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,oCAA8C;AAS9C,MAAa,IAAK,SAAQ,aAAW;IAQnC,YAAY,SAAqB,EAAE;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QARA,UAAK,GAAS,IAAI,CAAC;QASjC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QAExC,IAAI,CAAC,EAAE,GAAG,IAAI,qBAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAC,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,IAAW,MAAM;QACf,OAAO,CACL,IAAI,CAAC,EAAE,CAAC,MAAM;YACd,IAAI,CAAC,IAAI,CAAC,MAAM;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM;YAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAClB,CAAC;IACJ,CAAC;CACF;AA1BD,oBA0BC"}
|
package/dist/elements/touch.d.ts
CHANGED
|
@@ -5,9 +5,10 @@ import { Increment } from "./increment";
|
|
|
5
5
|
* with [0,0] representing the center of the touchpad.
|
|
6
6
|
*/
|
|
7
7
|
export declare class Touch extends Analog {
|
|
8
|
-
readonly state:
|
|
8
|
+
readonly state: this;
|
|
9
9
|
readonly contact: import("./momentary").Momentary;
|
|
10
10
|
readonly tracker: Increment;
|
|
11
|
+
deadzone: number;
|
|
11
12
|
get active(): boolean;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=touch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../src/elements/touch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,KAAM,SAAQ,MAAM;IAC/B,SAAgB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../src/elements/touch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,KAAM,SAAQ,MAAM;IAC/B,SAAgB,KAAK,EAAE,IAAI,CAAQ;IACnC,SAAgB,OAAO,kCAAe;IACtC,SAAgB,OAAO,EAAE,SAAS,CAAmB;IAC9C,QAAQ,SAAK;IAEpB,IAAW,MAAM,IAAI,OAAO,CAE3B;CACF"}
|
package/dist/elements/touch.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch.js","sourceRoot":"","sources":["../../src/elements/touch.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAClC,2CAAwC;AAExC;;;GAGG;AACH,MAAa,KAAM,SAAQ,eAAM;IAAjC;;QACkB,UAAK,
|
|
1
|
+
{"version":3,"file":"touch.js","sourceRoot":"","sources":["../../src/elements/touch.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAClC,2CAAwC;AAExC;;;GAGG;AACH,MAAa,KAAM,SAAQ,eAAM;IAAjC;;QACkB,UAAK,GAAS,IAAI,CAAC;QACnB,YAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,YAAO,GAAc,IAAI,qBAAS,EAAE,CAAC;QAC9C,aAAQ,GAAG,CAAC,CAAC;IAKtB,CAAC;IAHC,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF;AATD,sBASC"}
|
|
@@ -2,7 +2,7 @@ import { Momentary } from "./momentary";
|
|
|
2
2
|
import { Touch } from "./touch";
|
|
3
3
|
import { Input, InputParams } from "../input";
|
|
4
4
|
export declare class Touchpad extends Input<Touchpad> {
|
|
5
|
-
readonly state:
|
|
5
|
+
readonly state: this;
|
|
6
6
|
get active(): boolean;
|
|
7
7
|
readonly button: Momentary;
|
|
8
8
|
readonly left: Touch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchpad.d.ts","sourceRoot":"","sources":["../../src/elements/touchpad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,QAAS,SAAQ,KAAK,CAAC,QAAQ,CAAC;IAC3C,SAAgB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"touchpad.d.ts","sourceRoot":"","sources":["../../src/elements/touchpad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,QAAS,SAAQ,KAAK,CAAC,QAAQ,CAAC;IAC3C,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,SAAgB,MAAM,EAAE,SAAS,CAAC;IAGlC,SAAgB,IAAI,EAAE,KAAK,CAAC;IAC5B,SAAgB,KAAK,EAAE,KAAK,CAAC;gBAEjB,MAAM,EAAE,WAAW;CAOhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchpad.js","sourceRoot":"","sources":["../../src/elements/touchpad.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,mCAAgC;AAChC,oCAA8C;AAE9C,MAAa,QAAS,SAAQ,aAAe;IAa3C,YAAY,MAAmB;QAC7B,KAAK,CAAC,MAAM,CAAC,CAAC;QAbA,UAAK,
|
|
1
|
+
{"version":3,"file":"touchpad.js","sourceRoot":"","sources":["../../src/elements/touchpad.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,mCAAgC;AAChC,oCAA8C;AAE9C,MAAa,QAAS,SAAQ,aAAe;IAa3C,YAAY,MAAmB;QAC7B,KAAK,CAAC,MAAM,CAAC,CAAC;QAbA,UAAK,GAAS,IAAI,CAAC;QAejC,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,aAAK,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAC3B,CAAC;IAhBD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,CAAC;CAeF;AApBD,4BAoBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,SAAS,CAAK;IAErB,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,SAAS,CAAK;IAErB,MAAM,EAAE,SAAS,CAAmB;IAE3C,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;IAIzC,SAAgB,MAAM,SAAgB;CACvC"}
|
package/dist/elements/trigger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":";;;AAAA,wCAAoC;AACpC,oCAAiC;AAEjC,2CAAwC;AAExC,MAAa,OAAQ,SAAQ,aAAgB;IAA7C;;QACS,UAAK,GAAc,CAAC,CAAC;QAErB,WAAM,GAAc,IAAI,qBAAS,
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/elements/trigger.ts"],"names":[],"mappings":";;;AAAA,wCAAoC;AACpC,oCAAiC;AAEjC,2CAAwC;AAExC,MAAa,OAAQ,SAAQ,aAAgB;IAA7C;;QACS,UAAK,GAAc,CAAC,CAAC;QAErB,WAAM,GAAc,IAAI,qBAAS,EAAE,CAAC;QAkB3B,WAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;IACxC,CAAC;IAjBC,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;CAGF;AAtBD,0BAsBC"}
|
|
@@ -9,7 +9,7 @@ export interface UnisenseParams extends InputParams {
|
|
|
9
9
|
analog?: InputParams;
|
|
10
10
|
}
|
|
11
11
|
export declare class Unisense extends Input<Unisense> {
|
|
12
|
-
readonly state:
|
|
12
|
+
readonly state: this;
|
|
13
13
|
readonly trigger: Trigger;
|
|
14
14
|
readonly bumper: Momentary;
|
|
15
15
|
readonly analog: Analog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unisense.d.ts","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAGD,qBAAa,QAAS,SAAQ,KAAK,CAAC,QAAQ,CAAC;IAC3C,SAAgB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"unisense.d.ts","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAGD,qBAAa,QAAS,SAAQ,KAAK,CAAC,QAAQ,CAAC;IAC3C,SAAgB,KAAK,EAAE,IAAI,CAAQ;IAEnC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,MAAM,GAAE,cAAmB;IAoBvC,IAAW,MAAM,IAAI,OAAO,CAE3B;CACF"}
|
|
@@ -8,16 +8,23 @@ const haptics_1 = require("../haptics");
|
|
|
8
8
|
const input_1 = require("../input");
|
|
9
9
|
// The name "Dualsense" clearly implies a composition of two Unisense elements 🤔
|
|
10
10
|
class Unisense extends input_1.Input {
|
|
11
|
-
constructor(params) {
|
|
11
|
+
constructor(params = {}) {
|
|
12
12
|
super(params);
|
|
13
13
|
this.state = this;
|
|
14
|
-
|
|
14
|
+
const { trigger, bumper, analog } = params;
|
|
15
|
+
this.trigger = new trigger_1.Trigger({
|
|
15
16
|
icon: "2",
|
|
16
17
|
name: "Trigger",
|
|
17
|
-
threshold:
|
|
18
|
+
threshold: 1 / 255,
|
|
19
|
+
...trigger,
|
|
20
|
+
});
|
|
21
|
+
this.bumper = new momentary_1.Momentary({ icon: "1", name: "Bumper", ...bumper });
|
|
22
|
+
this.analog = new analog_1.Analog({
|
|
23
|
+
icon: "⨁",
|
|
24
|
+
name: "Analog",
|
|
25
|
+
threshold: 1 / 128,
|
|
26
|
+
...analog,
|
|
18
27
|
});
|
|
19
|
-
this.bumper = new momentary_1.Momentary(params?.bumper || { icon: "1", name: "Bumper" });
|
|
20
|
-
this.analog = new analog_1.Analog(params?.analog || { icon: "⨁", name: "Analog", threshold: 0.07 });
|
|
21
28
|
this.haptic = new haptics_1.Haptic();
|
|
22
29
|
}
|
|
23
30
|
get active() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unisense.js","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,2CAAwC;AACxC,qCAAkC;AAClC,wCAAoC;AACpC,oCAA8C;AAQ9C,iFAAiF;AACjF,MAAa,QAAS,SAAQ,aAAe;IAQ3C,YAAY,
|
|
1
|
+
{"version":3,"file":"unisense.js","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,2CAAwC;AACxC,qCAAkC;AAClC,wCAAoC;AACpC,oCAA8C;AAQ9C,iFAAiF;AACjF,MAAa,QAAS,SAAQ,aAAe;IAQ3C,YAAY,SAAyB,EAAE;QACrC,KAAK,CAAC,MAAM,CAAC,CAAC;QARA,UAAK,GAAS,IAAI,CAAC;QASjC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE3C,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC;YACzB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,CAAC,GAAG,GAAG;YAClB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC;YACvB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC,GAAG,GAAG;YAClB,GAAG,MAAM;SACV,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;IAC7B,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACzE,CAAC;CACF;AA/BD,4BA+BC"}
|