dualsense-ts 2.2.48 → 3.1.3

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.
Files changed (96) hide show
  1. package/README.md +9 -2
  2. package/dist/comparators.d.ts +13 -0
  3. package/dist/comparators.d.ts.map +1 -0
  4. package/dist/comparators.js +27 -0
  5. package/dist/comparators.js.map +1 -0
  6. package/dist/dualsense.d.ts +10 -1
  7. package/dist/dualsense.d.ts.map +1 -1
  8. package/dist/dualsense.js +46 -45
  9. package/dist/dualsense.js.map +1 -1
  10. package/dist/elements/analog.d.ts +12 -7
  11. package/dist/elements/analog.d.ts.map +1 -1
  12. package/dist/elements/analog.js +29 -11
  13. package/dist/elements/analog.js.map +1 -1
  14. package/dist/elements/axis.d.ts +22 -1
  15. package/dist/elements/axis.d.ts.map +1 -1
  16. package/dist/elements/axis.js +24 -4
  17. package/dist/elements/axis.js.map +1 -1
  18. package/dist/elements/dpad.d.ts +1 -1
  19. package/dist/elements/dpad.d.ts.map +1 -1
  20. package/dist/elements/dpad.js +6 -5
  21. package/dist/elements/dpad.js.map +1 -1
  22. package/dist/elements/touch.d.ts +2 -1
  23. package/dist/elements/touch.d.ts.map +1 -1
  24. package/dist/elements/touch.js +1 -0
  25. package/dist/elements/touch.js.map +1 -1
  26. package/dist/elements/touchpad.d.ts +1 -1
  27. package/dist/elements/touchpad.d.ts.map +1 -1
  28. package/dist/elements/touchpad.js.map +1 -1
  29. package/dist/elements/trigger.d.ts.map +1 -1
  30. package/dist/elements/trigger.js +1 -1
  31. package/dist/elements/trigger.js.map +1 -1
  32. package/dist/elements/unisense.d.ts +3 -3
  33. package/dist/elements/unisense.d.ts.map +1 -1
  34. package/dist/elements/unisense.js +13 -5
  35. package/dist/elements/unisense.js.map +1 -1
  36. package/dist/hid/dualsense_hid.d.ts +16 -58
  37. package/dist/hid/dualsense_hid.d.ts.map +1 -1
  38. package/dist/hid/dualsense_hid.js +25 -101
  39. package/dist/hid/dualsense_hid.js.map +1 -1
  40. package/dist/hid/hid_provider.d.ts +86 -0
  41. package/dist/hid/hid_provider.d.ts.map +1 -0
  42. package/dist/hid/hid_provider.js +45 -0
  43. package/dist/hid/hid_provider.js.map +1 -0
  44. package/dist/hid/index.d.ts +4 -1
  45. package/dist/hid/index.d.ts.map +1 -1
  46. package/dist/hid/index.js +4 -1
  47. package/dist/hid/index.js.map +1 -1
  48. package/dist/hid/node_hid_provider.d.ts +11 -0
  49. package/dist/hid/node_hid_provider.d.ts.map +1 -0
  50. package/dist/hid/node_hid_provider.js +97 -0
  51. package/dist/hid/node_hid_provider.js.map +1 -0
  52. package/dist/hid/platform_hid_provider.d.ts +4 -0
  53. package/dist/hid/platform_hid_provider.d.ts.map +1 -0
  54. package/dist/hid/platform_hid_provider.js +7 -0
  55. package/dist/hid/platform_hid_provider.js.map +1 -0
  56. package/dist/hid/web_hid_provider.d.ts +10 -0
  57. package/dist/hid/web_hid_provider.d.ts.map +1 -0
  58. package/dist/hid/web_hid_provider.js +102 -0
  59. package/dist/hid/web_hid_provider.js.map +1 -0
  60. package/dist/{hid/ids.d.ts → id.d.ts} +6 -2
  61. package/dist/id.d.ts.map +1 -0
  62. package/dist/{hid/ids.js → id.js} +1 -1
  63. package/dist/id.js.map +1 -0
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/input.d.ts +63 -45
  69. package/dist/input.d.ts.map +1 -1
  70. package/dist/input.js +123 -90
  71. package/dist/input.js.map +1 -1
  72. package/package.json +14 -8
  73. package/src/comparators.ts +26 -0
  74. package/src/dualsense.ts +61 -58
  75. package/src/elements/analog.spec.ts +2 -15
  76. package/src/elements/analog.ts +41 -22
  77. package/src/elements/axis.ts +35 -3
  78. package/src/elements/dpad.ts +7 -6
  79. package/src/elements/touch.ts +2 -1
  80. package/src/elements/touchpad.ts +1 -1
  81. package/src/elements/trigger.ts +1 -1
  82. package/src/elements/unisense.ts +19 -17
  83. package/src/hid/dualsense_hid.ts +25 -156
  84. package/src/hid/{dualsense_hid.spec.ts → hid_provider.spec.ts} +1 -1
  85. package/src/hid/hid_provider.ts +100 -0
  86. package/src/hid/index.ts +4 -1
  87. package/src/hid/node_hid_provider.ts +108 -0
  88. package/src/hid/platform_hid_provider.ts +4 -0
  89. package/src/hid/web_hid_provider.ts +116 -0
  90. package/src/{hid/ids.ts → id.ts} +6 -1
  91. package/src/index.ts +2 -0
  92. package/src/input.ts +156 -138
  93. package/src/readme.spec.ts +6 -8
  94. package/webpack.config.js +42 -0
  95. package/dist/hid/ids.d.ts.map +0 -1
  96. package/dist/hid/ids.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeHIDProvider = void 0;
4
+ const node_hid_1 = require("node-hid");
5
+ const hid_provider_1 = require("./hid_provider");
6
+ class NodeHIDProvider extends hid_provider_1.HIDProvider {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.wireless = false;
10
+ }
11
+ connect() {
12
+ this.disconnect();
13
+ const controllers = (0, node_hid_1.devices)(hid_provider_1.HIDProvider.vendorId, hid_provider_1.HIDProvider.productId);
14
+ if (controllers.length === 0 || !controllers[0].path) {
15
+ return this.onError(new Error(`No controllers (${(0, node_hid_1.devices)().length} other devices)`));
16
+ }
17
+ if (controllers[0].interface === -1)
18
+ this.wireless = true;
19
+ this.device = new node_hid_1.HID(controllers[0].path);
20
+ this.device.on("data", (arg) => {
21
+ this.onData(this.process(arg));
22
+ });
23
+ this.device.on("error", (err) => {
24
+ this.onError(err);
25
+ });
26
+ }
27
+ get connected() {
28
+ return this.device !== undefined;
29
+ }
30
+ disconnect() {
31
+ if (this.device) {
32
+ this.device.removeAllListeners();
33
+ this.device.close();
34
+ this.device = undefined;
35
+ this.wireless = false;
36
+ }
37
+ }
38
+ process(buffer) {
39
+ // Bluetooth buffer starts with an extra byte
40
+ const report = buffer.subarray(this.wireless ? 2 : 1);
41
+ const mainButtons = report.readUint8(7);
42
+ const miscButtons = report.readUint8(8);
43
+ const lastButtons = report.readUint8(9);
44
+ const dpad = (mainButtons << 4) >> 4;
45
+ return {
46
+ ["LX" /* InputId.LeftAnalogX */]: (0, hid_provider_1.mapAxis)(report.readUint8(0)),
47
+ ["LY" /* InputId.LeftAnalogY */]: -(0, hid_provider_1.mapAxis)(report.readUint8(1)),
48
+ ["RX" /* InputId.RightAnalogX */]: (0, hid_provider_1.mapAxis)(report.readUint8(2)),
49
+ ["RY" /* InputId.RightAnalogY */]: -(0, hid_provider_1.mapAxis)(report.readUint8(3)),
50
+ ["L2" /* InputId.LeftTrigger */]: (0, hid_provider_1.mapTrigger)(report.readUint8(4)),
51
+ ["R2" /* InputId.RightTrigger */]: (0, hid_provider_1.mapTrigger)(report.readUint8(5)),
52
+ // 6 is a sequence byte
53
+ ["Triangle" /* InputId.Triangle */]: (mainButtons & 128) > 0,
54
+ ["Circle" /* InputId.Circle */]: (mainButtons & 64) > 0,
55
+ ["Cross" /* InputId.Cross */]: (mainButtons & 32) > 0,
56
+ ["Square" /* InputId.Square */]: (mainButtons & 16) > 0,
57
+ ["Dpad" /* InputId.Dpad */]: dpad,
58
+ ["Up" /* InputId.Up */]: dpad < 2 || dpad === 7,
59
+ ["Down" /* InputId.Down */]: dpad > 2 && dpad < 6,
60
+ ["Left" /* InputId.Left */]: dpad > 4 && dpad < 8,
61
+ ["Right" /* InputId.Right */]: dpad > 0 && dpad < 4,
62
+ ["L2Button" /* InputId.LeftTriggerButton */]: (miscButtons & 4) > 0,
63
+ ["R2Button" /* InputId.RightTriggerButton */]: (miscButtons & 8) > 0,
64
+ ["L1" /* InputId.LeftBumper */]: (miscButtons & 1) > 0,
65
+ ["R1" /* InputId.RightBumper */]: (miscButtons & 2) > 0,
66
+ ["Create" /* InputId.Create */]: (miscButtons & 16) > 0,
67
+ ["Options" /* InputId.Options */]: (miscButtons & 32) > 0,
68
+ ["L3" /* InputId.LeftAnalogButton */]: (miscButtons & 64) > 0,
69
+ ["R3" /* InputId.RightAnalogButton */]: (miscButtons & 128) > 0,
70
+ ["Playstation" /* InputId.Playstation */]: (lastButtons & 1) > 0,
71
+ ["TouchButton" /* InputId.TouchButton */]: (lastButtons & 2) > 0,
72
+ ["Mute" /* InputId.Mute */]: (lastButtons & 4) > 0,
73
+ // The other 5 bits are unused
74
+ // 5 reserved bytes
75
+ ["GyroX" /* InputId.GyroX */]: report.readUint16LE(15),
76
+ ["GyroY" /* InputId.GyroY */]: report.readUint16LE(17),
77
+ ["GyroZ" /* InputId.GyroZ */]: report.readUint16LE(19),
78
+ ["AccelX" /* InputId.AccelX */]: report.readUint16LE(21),
79
+ ["AccelY" /* InputId.AccelY */]: report.readUint16LE(23),
80
+ ["AccelZ" /* InputId.AccelZ */]: report.readUint16LE(25),
81
+ // 4 bytes for sensor timestamp (32LE)
82
+ // 1 reserved byte
83
+ ["TouchId0" /* InputId.TouchId0 */]: report.readUint8(32) & 0x7f,
84
+ ["TouchContact0" /* InputId.TouchContact0 */]: (report.readUint8(32) & 0x80) === 0,
85
+ ["TouchX0" /* InputId.TouchX0 */]: (0, hid_provider_1.mapAxis)((report.readUint16LE(33) << 20) >> 20, 1920),
86
+ ["TouchY0" /* InputId.TouchY0 */]: (0, hid_provider_1.mapAxis)(report.readUint16LE(34) >> 4, 1080),
87
+ ["TouchId1" /* InputId.TouchId1 */]: report.readUint8(36) & 0x7f,
88
+ ["TouchContact1" /* InputId.TouchContact1 */]: (report.readUint8(36) & 0x80) === 0,
89
+ ["TouchX1" /* InputId.TouchX1 */]: (0, hid_provider_1.mapAxis)((report.readUint16LE(37) << 20) >> 20, 1920),
90
+ ["TouchY1" /* InputId.TouchY1 */]: (0, hid_provider_1.mapAxis)(report.readUint16LE(38) >> 4, 1080),
91
+ // 12 reserved bytes
92
+ ["Status" /* InputId.Status */]: (report.readUint8(53) & 4) > 0,
93
+ };
94
+ }
95
+ }
96
+ exports.NodeHIDProvider = NodeHIDProvider;
97
+ //# sourceMappingURL=node_hid_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node_hid_provider.js","sourceRoot":"","sources":["../../src/hid/node_hid_provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { NodeHIDProvider } from './node_hid_provider';
2
+ import { WebHIDProvider } from './web_hid_provider';
3
+ export declare const PlatformHIDProvider: typeof NodeHIDProvider | typeof WebHIDProvider;
4
+ //# sourceMappingURL=platform_hid_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform_hid_provider.d.ts","sourceRoot":"","sources":["../../src/hid/platform_hid_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,eAAO,MAAM,mBAAmB,gDAAmE,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlatformHIDProvider = void 0;
4
+ const node_hid_provider_1 = require("./node_hid_provider");
5
+ const web_hid_provider_1 = require("./web_hid_provider");
6
+ exports.PlatformHIDProvider = typeof window === 'undefined' ? node_hid_provider_1.NodeHIDProvider : web_hid_provider_1.WebHIDProvider;
7
+ //# sourceMappingURL=platform_hid_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform_hid_provider.js","sourceRoot":"","sources":["../../src/hid/platform_hid_provider.ts"],"names":[],"mappings":";;;AAAA,2DAAqD;AACrD,yDAAmD;AAEtC,QAAA,mBAAmB,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,mCAAe,CAAC,CAAC,CAAC,iCAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { HIDProvider, DualsenseHIDState } from "./hid_provider";
2
+ export declare class WebHIDProvider extends HIDProvider {
3
+ private device?;
4
+ wireless: boolean;
5
+ connect(): void;
6
+ get connected(): boolean;
7
+ disconnect(): void;
8
+ process(buffer: DataView): DualsenseHIDState;
9
+ }
10
+ //# sourceMappingURL=web_hid_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web_hid_provider.d.ts","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAY;IACpB,QAAQ,EAAE,OAAO,CAAQ;IAEhC,OAAO,IAAI,IAAI;IA+Bf,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,UAAU,IAAI,IAAI;IASlB,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,iBAAiB;CA2D7C"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebHIDProvider = void 0;
4
+ const hid_provider_1 = require("./hid_provider");
5
+ class WebHIDProvider extends hid_provider_1.HIDProvider {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.wireless = true; // TODO: Not sure what to check
9
+ }
10
+ connect() {
11
+ this.disconnect();
12
+ navigator.hid
13
+ .requestDevice({
14
+ filters: [
15
+ { vendorId: hid_provider_1.HIDProvider.vendorId, productId: hid_provider_1.HIDProvider.productId },
16
+ ],
17
+ })
18
+ .then((devices) => {
19
+ if (devices.length === 0) {
20
+ return this.onError(new Error(`No controllers available`));
21
+ }
22
+ devices[0]
23
+ .open()
24
+ .then(() => {
25
+ this.device = devices[0];
26
+ this.device.addEventListener("inputreport", ({ data }) => {
27
+ this.onData(this.process(data));
28
+ });
29
+ })
30
+ .catch((err) => {
31
+ this.onError(err);
32
+ });
33
+ })
34
+ .catch((err) => {
35
+ this.onError(err);
36
+ });
37
+ }
38
+ get connected() {
39
+ return this.device !== undefined;
40
+ }
41
+ disconnect() {
42
+ if (this.device) {
43
+ this.device.close().finally(() => {
44
+ this.device = undefined;
45
+ this.wireless = false;
46
+ });
47
+ }
48
+ }
49
+ process(buffer) {
50
+ // Bluetooth buffer starts with an extra byte
51
+ const report = new DataView(buffer.buffer, this.wireless ? 2 : 1);
52
+ const mainButtons = report.getUint8(7);
53
+ const miscButtons = report.getUint8(8);
54
+ const lastButtons = report.getUint8(9);
55
+ const dpad = (mainButtons << 4) >> 4;
56
+ return {
57
+ ["LX" /* InputId.LeftAnalogX */]: (0, hid_provider_1.mapAxis)(report.getUint8(0)),
58
+ ["LY" /* InputId.LeftAnalogY */]: -(0, hid_provider_1.mapAxis)(report.getUint8(1)),
59
+ ["RX" /* InputId.RightAnalogX */]: (0, hid_provider_1.mapAxis)(report.getUint8(2)),
60
+ ["RY" /* InputId.RightAnalogY */]: -(0, hid_provider_1.mapAxis)(report.getUint8(3)),
61
+ ["L2" /* InputId.LeftTrigger */]: (0, hid_provider_1.mapTrigger)(report.getUint8(4)),
62
+ ["R2" /* InputId.RightTrigger */]: (0, hid_provider_1.mapTrigger)(report.getUint8(5)),
63
+ ["Triangle" /* InputId.Triangle */]: (mainButtons & 128) > 0,
64
+ ["Circle" /* InputId.Circle */]: (mainButtons & 64) > 0,
65
+ ["Cross" /* InputId.Cross */]: (mainButtons & 32) > 0,
66
+ ["Square" /* InputId.Square */]: (mainButtons & 16) > 0,
67
+ ["Dpad" /* InputId.Dpad */]: dpad,
68
+ ["Up" /* InputId.Up */]: dpad < 2 || dpad === 7,
69
+ ["Down" /* InputId.Down */]: dpad > 2 && dpad < 6,
70
+ ["Left" /* InputId.Left */]: dpad > 4 && dpad < 8,
71
+ ["Right" /* InputId.Right */]: dpad > 0 && dpad < 4,
72
+ ["L2Button" /* InputId.LeftTriggerButton */]: (miscButtons & 4) > 0,
73
+ ["R2Button" /* InputId.RightTriggerButton */]: (miscButtons & 8) > 0,
74
+ ["L1" /* InputId.LeftBumper */]: (miscButtons & 1) > 0,
75
+ ["R1" /* InputId.RightBumper */]: (miscButtons & 2) > 0,
76
+ ["Create" /* InputId.Create */]: (miscButtons & 16) > 0,
77
+ ["Options" /* InputId.Options */]: (miscButtons & 32) > 0,
78
+ ["L3" /* InputId.LeftAnalogButton */]: (miscButtons & 64) > 0,
79
+ ["R3" /* InputId.RightAnalogButton */]: (miscButtons & 128) > 0,
80
+ ["Playstation" /* InputId.Playstation */]: (lastButtons & 1) > 0,
81
+ ["TouchButton" /* InputId.TouchButton */]: (lastButtons & 2) > 0,
82
+ ["Mute" /* InputId.Mute */]: (lastButtons & 4) > 0,
83
+ ["GyroX" /* InputId.GyroX */]: report.getUint16(15, true),
84
+ ["GyroY" /* InputId.GyroY */]: report.getUint16(17, true),
85
+ ["GyroZ" /* InputId.GyroZ */]: report.getUint16(19, true),
86
+ ["AccelX" /* InputId.AccelX */]: report.getUint16(21, true),
87
+ ["AccelY" /* InputId.AccelY */]: report.getUint16(23, true),
88
+ ["AccelZ" /* InputId.AccelZ */]: report.getUint16(25, true),
89
+ ["TouchId0" /* InputId.TouchId0 */]: report.getUint8(32) & 0x7f,
90
+ ["TouchContact0" /* InputId.TouchContact0 */]: (report.getUint8(32) & 0x80) === 0,
91
+ ["TouchX0" /* InputId.TouchX0 */]: (0, hid_provider_1.mapAxis)((report.getUint16(33, true) << 20) >> 20, 1920),
92
+ ["TouchY0" /* InputId.TouchY0 */]: (0, hid_provider_1.mapAxis)(report.getUint16(34, true) >> 4, 1080),
93
+ ["TouchId1" /* InputId.TouchId1 */]: report.getUint8(36) & 0x7f,
94
+ ["TouchContact1" /* InputId.TouchContact1 */]: (report.getUint8(36) & 0x80) === 0,
95
+ ["TouchX1" /* InputId.TouchX1 */]: (0, hid_provider_1.mapAxis)((report.getUint16(37, true) << 20) >> 20, 1920),
96
+ ["TouchY1" /* InputId.TouchY1 */]: (0, hid_provider_1.mapAxis)(report.getUint16(38, true) >> 4, 1080),
97
+ ["Status" /* InputId.Status */]: (report.getUint8(53) & 4) > 0,
98
+ };
99
+ }
100
+ }
101
+ exports.WebHIDProvider = WebHIDProvider;
102
+ //# sourceMappingURL=web_hid_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web_hid_provider.js","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":";;;AAAA,iDAMwB;AAExB,MAAa,cAAe,SAAQ,0BAAW;IAA/C;;QAES,aAAQ,GAAY,IAAI,CAAC,CAAC,+BAA+B;IAyGlE,CAAC;IAvGC,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,SAAS,CAAC,GAAG;aACV,aAAa,CAAC;YACb,OAAO,EAAE;gBACP,EAAE,QAAQ,EAAE,0BAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAAW,CAAC,SAAS,EAAE;aACrE;SACF,CAAC;aACD,IAAI,CAAC,CAAC,OAAoB,EAAE,EAAE;YAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;aAC5D;YAED,OAAO,CAAC,CAAC,CAAC;iBACP,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;oBACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACnC,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,OAAO,CAAC,MAAgB;QACtB,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO;YACL,gCAAqB,EAAE,IAAA,sBAAO,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,gCAAqB,EAAE,CAAC,IAAA,sBAAO,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnD,iCAAsB,EAAE,IAAA,sBAAO,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnD,iCAAsB,EAAE,CAAC,IAAA,sBAAO,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpD,gCAAqB,EAAE,IAAA,yBAAU,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrD,iCAAsB,EAAE,IAAA,yBAAU,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtD,mCAAkB,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC;YAC3C,+BAAgB,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YACxC,6BAAe,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YACvC,+BAAgB,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YACxC,2BAAc,EAAE,IAAI;YACpB,uBAAY,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YACpC,2BAAc,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;YACpC,2BAAc,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;YACpC,6BAAe,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;YACrC,4CAA2B,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YAClD,6CAA4B,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YACnD,+BAAoB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YAC3C,gCAAqB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YAC5C,+BAAgB,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YACxC,iCAAiB,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YACzC,qCAA0B,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC;YAClD,sCAA2B,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC;YACpD,yCAAqB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YAC5C,yCAAqB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YAC5C,2BAAc,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;YACrC,6BAAe,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC3C,6BAAe,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC3C,6BAAe,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC3C,+BAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC5C,+BAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC5C,+BAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;YAC5C,mCAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI;YAC9C,6CAAuB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3D,iCAAiB,EAAE,IAAA,sBAAO,EACxB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EACxC,IAAI,CACL;YACD,iCAAiB,EAAE,IAAA,sBAAO,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YACjE,mCAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI;YAC9C,6CAAuB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3D,iCAAiB,EAAE,IAAA,sBAAO,EACxB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EACxC,IAAI,CACL;YACD,iCAAiB,EAAE,IAAA,sBAAO,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YACjE,+BAAgB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;SAChD,CAAC;IACJ,CAAC;CACF;AA3GD,wCA2GC"}
@@ -1,3 +1,6 @@
1
+ /**
2
+ * IDs for real and virtual controller inputs.
3
+ */
1
4
  export declare const enum InputId {
2
5
  Options = "Options",
3
6
  Create = "Create",
@@ -39,6 +42,7 @@ export declare const enum InputId {
39
42
  GyroZ = "GyroZ",
40
43
  AccelX = "AccelX",
41
44
  AccelY = "AccelY",
42
- AccelZ = "AccelZ"
45
+ AccelZ = "AccelZ",
46
+ Unknown = "Unknown"
43
47
  }
44
- //# sourceMappingURL=ids.d.ts.map
48
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,0BAAkB,OAAO;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,MAAM,WAAW;IAEjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IAEjB,IAAI,SAAS;IACb,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IAEf,WAAW,gBAAgB;IAE3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,gBAAgB,OAAO;IACvB,iBAAiB,OAAO;IAExB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,iBAAiB,aAAa;IAC9B,kBAAkB,aAAa;IAE/B,UAAU,OAAO;IACjB,WAAW,OAAO;IAElB,WAAW,OAAO;IAClB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,YAAY,OAAO;IAEnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IAEf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IAGjB,OAAO,YAAY;CACpB"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ids.js.map
3
+ //# sourceMappingURL=id.js.map
package/dist/id.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * @file Automatically generated by barrelsby.
3
3
  */
4
+ export * from "./comparators";
4
5
  export * from "./dualsense";
6
+ export * from "./id";
5
7
  export * from "./input";
6
8
  export * from "./math";
7
9
  export * from "./elements/index";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -17,7 +17,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./comparators"), exports);
20
21
  __exportStar(require("./dualsense"), exports);
22
+ __exportStar(require("./id"), exports);
21
23
  __exportStar(require("./input"), exports);
22
24
  __exportStar(require("./math"), exports);
23
25
  __exportStar(require("./elements/index"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,mDAAiC;AACjC,kDAAgC;AAChC,8CAA4B;AAC5B,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,8CAA4B;AAC5B,uCAAqB;AACrB,0CAAwB;AACxB,yCAAuB;AACvB,mDAAiC;AACjC,kDAAgC;AAChC,8CAA4B;AAC5B,qDAAmC"}
package/dist/input.d.ts CHANGED
@@ -1,43 +1,35 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { EventEmitter } from "events";
4
- import { inspect } from "util";
1
+ import { InputId } from "./id";
2
+ export { InputId } from "./id";
5
3
  export interface InputParams {
6
4
  name?: string;
7
5
  icon?: string;
8
6
  threshold?: number;
9
- parent?: Input<unknown>;
10
7
  }
11
- declare const InputAdopt: unique symbol;
12
- declare const InputChildless: unique symbol;
13
- declare const InputParent: unique symbol;
14
- declare const InputSetComparison: unique symbol;
15
- declare const InputChangedPrimitive: unique symbol;
16
- declare const InputChangedThreshold: unique symbol;
17
- declare const InputChangedVirtual: unique symbol;
8
+ export declare type InputChangeType = "change" | "press" | "release";
9
+ export declare type InputEventType = InputChangeType | "input";
10
+ export declare type InputCallback<Instance> = (input: Instance, changed: Instance | Input<unknown>) => unknown | Promise<unknown>;
11
+ /**
12
+ * Private utilities
13
+ */
14
+ export declare const InputSetComparator: unique symbol;
18
15
  export declare const InputChanged: unique symbol;
19
16
  export declare const InputSet: unique symbol;
20
17
  export declare const InputName: unique symbol;
21
18
  export declare const InputIcon: unique symbol;
22
- export declare type InputEvent = "change" | "input" | "press" | "release";
23
- export declare interface Input<Type> {
24
- on(event: InputEvent, listener: (input: Input<Type>, changed: Input<unknown>) => unknown | Promise<unknown>): this;
25
- emit(event: InputEvent, ...args: [Input<Type>, Input<unknown> | Input<Type>]): boolean;
26
- }
19
+ /**
20
+ * Private properties
21
+ */
22
+ declare const InputOns: unique symbol;
23
+ declare const InputOnces: unique symbol;
24
+ declare const InputAdopt: unique symbol;
25
+ declare const InputParents: unique symbol;
26
+ declare const InputComparator: unique symbol;
27
27
  /**
28
28
  * Input manages the state of a single device input,
29
29
  * a virtual input, or a group of Input children.
30
30
  */
31
- export declare abstract class Input<Type> extends EventEmitter implements AsyncIterator<Input<Type>> {
32
- readonly id: symbol;
33
- /**
34
- * Timestamp of the last received input that changed the state.
35
- */
36
- lastChange: number;
37
- /**
38
- * Timestamp of the last received input, even if it didn't change the state.
39
- */
40
- lastInput: number;
31
+ export declare abstract class Input<Type> implements AsyncIterator<Input<Type>> {
32
+ readonly id: InputId;
41
33
  /**
42
34
  * For numeric inputs, ignore state changes smaller than this threshold.
43
35
  */
@@ -46,28 +38,57 @@ export declare abstract class Input<Type> extends EventEmitter implements AsyncI
46
38
  * Provide the type and default value for the input.
47
39
  */
48
40
  abstract state: Type;
41
+ /**
42
+ * Stores event listeners.
43
+ */
44
+ private [InputOns];
45
+ /**
46
+ * Stores callbacks waiting for one-time events.
47
+ */
48
+ private [InputOnces];
49
+ constructor(params?: InputParams);
49
50
  /**
50
51
  * Implement a function that returns true if the user is actively engaged with the input.
51
52
  */
52
53
  abstract get active(): boolean;
54
+ /**
55
+ * Register a callback to recieve state updates from this Input.
56
+ */
57
+ on(event: InputEventType, listener: InputCallback<this>): this;
58
+ /**
59
+ * Register a callback to recieve the next specified update.
60
+ */
61
+ once(event: InputChangeType, listener: InputCallback<this>): this;
62
+ /**
63
+ * Notify listeners and parents of a state change.
64
+ */
65
+ private emit;
66
+ /**
67
+ * Notify one-time listeners of a state change.
68
+ */
69
+ private emitOnce;
70
+ /**
71
+ * Register a callback to recieve state updates from this Input.
72
+ */
73
+ addEventListener(event: InputEventType, listener: InputCallback<this>, { once }?: {
74
+ once: boolean;
75
+ }): this;
53
76
  /**
54
77
  * Resolves on the next change to this input's state.
55
78
  */
56
- next(type?: "press" | "release" | "change"): Promise<IteratorResult<this>>;
79
+ next(type?: InputChangeType): Promise<IteratorResult<this>>;
57
80
  /**
58
81
  * Resolves on the next change to this input's state.
59
82
  */
60
83
  promise(type?: "press" | "release" | "change"): Promise<this>;
61
84
  /**
62
- * Render a convenient debugging string.
85
+ * Render a debugging string.
63
86
  */
64
87
  toString(): string;
65
- constructor(params?: InputParams);
66
88
  /**
67
- * Optionally, implement a function that returns true if the provided state is worth an event
89
+ * Returns true if the provided state is worth an event
68
90
  */
69
- [InputChanged]: (state: Type, newState: Type) => boolean;
70
- [inspect.custom](): string;
91
+ [InputComparator]: (state: Type, newState: Type) => boolean;
71
92
  [Symbol.asyncIterator](): AsyncIterator<this>;
72
93
  [Symbol.toPrimitive](hint: "number" | "string" | "default"): number | string;
73
94
  get [Symbol.toStringTag](): string;
@@ -76,27 +97,24 @@ export declare abstract class Input<Type> extends EventEmitter implements AsyncI
76
97
  */
77
98
  readonly [InputName]: string;
78
99
  /**
79
- * A short name for this input
100
+ * A short name for this input.
80
101
  */
81
102
  readonly [InputIcon]: string;
82
103
  /**
83
- * The Input's parent, if any
104
+ * Other Inputs that contain this one.
105
+ */
106
+ private [InputParents];
107
+ /**
108
+ * Links Inputs to bubble up events.
84
109
  */
85
- [InputParent]?: Input<unknown>;
86
- [InputChildless]: boolean;
110
+ [InputAdopt](parent: Input<unknown>): void;
87
111
  /**
88
- * Cascade events from nested Inputs.
89
- * And decide if this is the root Input.
112
+ * Sets a default comparison type for the Input by discovering the generic type.
90
113
  */
91
- [InputAdopt](): void;
92
- [InputChangedVirtual](): boolean;
93
- [InputChangedPrimitive](state: Type, newState: Type): boolean;
94
- [InputChangedThreshold](state: number, newState: number): boolean;
95
- [InputSetComparison](): (state: Type, newState: Type) => boolean;
114
+ [InputSetComparator](): void;
96
115
  /**
97
116
  * Update the input's state and trigger all necessary callbacks.
98
117
  */
99
118
  [InputSet](state: Type): void;
100
119
  }
101
- export {};
102
120
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}