@aura3d/input 2.0.4 → 3.0.1
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/dist/ActionMap.d.ts +40 -0
- package/dist/ActionMap.d.ts.map +1 -1
- package/dist/ActionMap.js +179 -0
- package/dist/ActionMap.js.map +1 -1
- package/dist/ComboDetector.d.ts +49 -0
- package/dist/ComboDetector.d.ts.map +1 -0
- package/dist/ComboDetector.js +102 -0
- package/dist/ComboDetector.js.map +1 -0
- package/dist/Haptics.d.ts +46 -0
- package/dist/Haptics.d.ts.map +1 -0
- package/dist/Haptics.js +67 -0
- package/dist/Haptics.js.map +1 -0
- package/dist/InputSystem.d.ts.map +1 -1
- package/dist/InputSystem.js +1 -0
- package/dist/InputSystem.js.map +1 -1
- package/dist/PointerDevice.d.ts +1 -0
- package/dist/PointerDevice.d.ts.map +1 -1
- package/dist/PointerDevice.js +1 -1
- package/dist/PointerDevice.js.map +1 -1
- package/dist/TouchLayouts.d.ts +35 -0
- package/dist/TouchLayouts.d.ts.map +1 -0
- package/dist/TouchLayouts.js +88 -0
- package/dist/TouchLayouts.js.map +1 -0
- package/dist/WebXRSessionController.d.ts +53 -0
- package/dist/WebXRSessionController.d.ts.map +1 -1
- package/dist/WebXRSessionController.js +88 -2
- package/dist/WebXRSessionController.js.map +1 -1
- package/dist/controls/OrbitControls.d.ts +44 -1
- package/dist/controls/OrbitControls.d.ts.map +1 -1
- package/dist/controls/OrbitControls.js +151 -12
- package/dist/controls/OrbitControls.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/ActionMap.d.ts
CHANGED
|
@@ -28,17 +28,57 @@ export type AxisBinding = {
|
|
|
28
28
|
readonly axis: number;
|
|
29
29
|
readonly scale?: number;
|
|
30
30
|
};
|
|
31
|
+
export interface SerializedActionBindings {
|
|
32
|
+
readonly actions: Readonly<Record<string, readonly ActionBinding[]>>;
|
|
33
|
+
readonly axes: Readonly<Record<string, readonly AxisBinding[]>>;
|
|
34
|
+
}
|
|
35
|
+
export interface ActionConflict {
|
|
36
|
+
readonly code: string;
|
|
37
|
+
readonly actions: readonly string[];
|
|
38
|
+
}
|
|
31
39
|
export declare class ActionMap {
|
|
32
40
|
private readonly actions;
|
|
33
41
|
private readonly axes;
|
|
42
|
+
private readonly originalActions;
|
|
43
|
+
private readonly originalAxes;
|
|
44
|
+
private readonly listeners;
|
|
34
45
|
private snapshot;
|
|
35
46
|
bind(name: string, bindings: readonly ActionBinding[]): void;
|
|
36
47
|
bindAxis(name: string, bindings: readonly AxisBinding[]): void;
|
|
48
|
+
/**
|
|
49
|
+
* Remapping hook for settings UI: replace one action's bindings. The bindings
|
|
50
|
+
* present before the first `rebind`/`unbind` are kept as the shipped defaults
|
|
51
|
+
* so `resetAction` can restore them. Plain `bind` (route setup, snapshot
|
|
52
|
+
* restore) never records, so setup itself cannot poison reset.
|
|
53
|
+
*/
|
|
54
|
+
rebind(name: string, bindings: readonly ActionBinding[]): void;
|
|
55
|
+
rebindAxis(name: string, bindings: readonly AxisBinding[]): void;
|
|
56
|
+
/** Remove an action entirely. Returns false when the action was not bound. */
|
|
57
|
+
unbind(name: string): boolean;
|
|
58
|
+
/** Restore the shipped defaults for one action. Returns false when never remapped. */
|
|
59
|
+
resetAction(name: string): boolean;
|
|
60
|
+
/** Restore every remapped action to its shipped defaults. */
|
|
61
|
+
resetAll(): void;
|
|
62
|
+
actionNames(): readonly string[];
|
|
63
|
+
getBindings(name: string): readonly ActionBinding[] | undefined;
|
|
64
|
+
getAxisBindings(name: string): readonly AxisBinding[] | undefined;
|
|
65
|
+
/** Serialize for settings persistence (localStorage). Plain JSON data only. */
|
|
66
|
+
serializeBindings(): SerializedActionBindings;
|
|
67
|
+
/** Restore bindings serialized by `serializeBindings`. Throws on malformed data. */
|
|
68
|
+
restoreBindings(data: SerializedActionBindings): void;
|
|
69
|
+
/**
|
|
70
|
+
* Find keyboard codes / gamepad buttons claimed by more than one action so a
|
|
71
|
+
* remapping UI can warn before saving a conflicting layout.
|
|
72
|
+
*/
|
|
73
|
+
findConflicts(): readonly ActionConflict[];
|
|
74
|
+
/** Subscribe a remapping UI to binding changes. Returns an unsubscribe function. */
|
|
75
|
+
onChange(listener: () => void): () => void;
|
|
37
76
|
useSnapshot(snapshot: InputSnapshot): void;
|
|
38
77
|
down(name: string, snapshot?: InputSnapshot): boolean;
|
|
39
78
|
pressed(name: string, snapshot?: InputSnapshot): boolean;
|
|
40
79
|
released(name: string, snapshot?: InputSnapshot): boolean;
|
|
41
80
|
axis(name: string, snapshot?: InputSnapshot): number;
|
|
81
|
+
private emitChange;
|
|
42
82
|
private evaluate;
|
|
43
83
|
}
|
|
44
84
|
//# sourceMappingURL=ActionMap.d.ts.map
|
package/dist/ActionMap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMap.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjH;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1G;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ActionMap.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
|
package/dist/ActionMap.js
CHANGED
|
@@ -2,12 +2,155 @@ import { InputSnapshot } from "./InputSnapshot.js";
|
|
|
2
2
|
export class ActionMap {
|
|
3
3
|
actions = new Map();
|
|
4
4
|
axes = new Map();
|
|
5
|
+
originalActions = new Map();
|
|
6
|
+
originalAxes = new Map();
|
|
7
|
+
listeners = new Set();
|
|
5
8
|
snapshot = new InputSnapshot();
|
|
6
9
|
bind(name, bindings) {
|
|
7
10
|
this.actions.set(name, [...bindings]);
|
|
11
|
+
this.emitChange();
|
|
8
12
|
}
|
|
9
13
|
bindAxis(name, bindings) {
|
|
10
14
|
this.axes.set(name, [...bindings]);
|
|
15
|
+
this.emitChange();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Remapping hook for settings UI: replace one action's bindings. The bindings
|
|
19
|
+
* present before the first `rebind`/`unbind` are kept as the shipped defaults
|
|
20
|
+
* so `resetAction` can restore them. Plain `bind` (route setup, snapshot
|
|
21
|
+
* restore) never records, so setup itself cannot poison reset.
|
|
22
|
+
*/
|
|
23
|
+
rebind(name, bindings) {
|
|
24
|
+
if (!this.originalActions.has(name))
|
|
25
|
+
this.originalActions.set(name, this.actions.get(name));
|
|
26
|
+
this.actions.set(name, [...bindings]);
|
|
27
|
+
this.emitChange();
|
|
28
|
+
}
|
|
29
|
+
rebindAxis(name, bindings) {
|
|
30
|
+
if (!this.originalAxes.has(name))
|
|
31
|
+
this.originalAxes.set(name, this.axes.get(name));
|
|
32
|
+
this.axes.set(name, [...bindings]);
|
|
33
|
+
this.emitChange();
|
|
34
|
+
}
|
|
35
|
+
/** Remove an action entirely. Returns false when the action was not bound. */
|
|
36
|
+
unbind(name) {
|
|
37
|
+
if (!this.originalActions.has(name))
|
|
38
|
+
this.originalActions.set(name, this.actions.get(name));
|
|
39
|
+
if (!this.originalAxes.has(name))
|
|
40
|
+
this.originalAxes.set(name, this.axes.get(name));
|
|
41
|
+
const removed = this.actions.delete(name);
|
|
42
|
+
this.axes.delete(name);
|
|
43
|
+
if (removed)
|
|
44
|
+
this.emitChange();
|
|
45
|
+
return removed;
|
|
46
|
+
}
|
|
47
|
+
/** Restore the shipped defaults for one action. Returns false when never remapped. */
|
|
48
|
+
resetAction(name) {
|
|
49
|
+
const hadActions = this.originalActions.has(name);
|
|
50
|
+
const hadAxes = this.originalAxes.has(name);
|
|
51
|
+
if (!hadActions && !hadAxes)
|
|
52
|
+
return false;
|
|
53
|
+
if (hadActions) {
|
|
54
|
+
const original = this.originalActions.get(name);
|
|
55
|
+
if (original === undefined)
|
|
56
|
+
this.actions.delete(name);
|
|
57
|
+
else
|
|
58
|
+
this.actions.set(name, [...original]);
|
|
59
|
+
this.originalActions.delete(name);
|
|
60
|
+
}
|
|
61
|
+
if (hadAxes) {
|
|
62
|
+
const original = this.originalAxes.get(name);
|
|
63
|
+
if (original === undefined)
|
|
64
|
+
this.axes.delete(name);
|
|
65
|
+
else
|
|
66
|
+
this.axes.set(name, [...original]);
|
|
67
|
+
this.originalAxes.delete(name);
|
|
68
|
+
}
|
|
69
|
+
this.emitChange();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
/** Restore every remapped action to its shipped defaults. */
|
|
73
|
+
resetAll() {
|
|
74
|
+
for (const name of new Set([...this.originalActions.keys(), ...this.originalAxes.keys()])) {
|
|
75
|
+
this.resetAction(name);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
actionNames() {
|
|
79
|
+
return [...new Set([...this.actions.keys(), ...this.axes.keys()])];
|
|
80
|
+
}
|
|
81
|
+
getBindings(name) {
|
|
82
|
+
const bindings = this.actions.get(name);
|
|
83
|
+
return bindings ? [...bindings] : undefined;
|
|
84
|
+
}
|
|
85
|
+
getAxisBindings(name) {
|
|
86
|
+
const bindings = this.axes.get(name);
|
|
87
|
+
return bindings ? [...bindings] : undefined;
|
|
88
|
+
}
|
|
89
|
+
/** Serialize for settings persistence (localStorage). Plain JSON data only. */
|
|
90
|
+
serializeBindings() {
|
|
91
|
+
return {
|
|
92
|
+
actions: Object.fromEntries([...this.actions.entries()].map(([name, bindings]) => [name, [...bindings]])),
|
|
93
|
+
axes: Object.fromEntries([...this.axes.entries()].map(([name, bindings]) => [name, [...bindings]]))
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Restore bindings serialized by `serializeBindings`. Throws on malformed data. */
|
|
97
|
+
restoreBindings(data) {
|
|
98
|
+
if (!data || typeof data !== "object" || !data.actions || !data.axes) {
|
|
99
|
+
throw new Error("Invalid action bindings snapshot: expected { actions, axes }.");
|
|
100
|
+
}
|
|
101
|
+
for (const [name, bindings] of Object.entries(data.actions)) {
|
|
102
|
+
if (!Array.isArray(bindings) || !bindings.every(isActionBinding)) {
|
|
103
|
+
throw new Error(`Invalid action bindings for "${name}".`);
|
|
104
|
+
}
|
|
105
|
+
this.bind(name, bindings);
|
|
106
|
+
}
|
|
107
|
+
for (const [name, bindings] of Object.entries(data.axes)) {
|
|
108
|
+
if (!Array.isArray(bindings) || !bindings.every(isAxisBinding)) {
|
|
109
|
+
throw new Error(`Invalid axis bindings for "${name}".`);
|
|
110
|
+
}
|
|
111
|
+
this.bindAxis(name, bindings);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Find keyboard codes / gamepad buttons claimed by more than one action so a
|
|
116
|
+
* remapping UI can warn before saving a conflicting layout.
|
|
117
|
+
*/
|
|
118
|
+
findConflicts() {
|
|
119
|
+
const owners = new Map();
|
|
120
|
+
const claim = (key, action) => {
|
|
121
|
+
let set = owners.get(key);
|
|
122
|
+
if (!set) {
|
|
123
|
+
set = new Set();
|
|
124
|
+
owners.set(key, set);
|
|
125
|
+
}
|
|
126
|
+
set.add(action);
|
|
127
|
+
};
|
|
128
|
+
for (const [name, bindings] of this.actions) {
|
|
129
|
+
for (const binding of bindings) {
|
|
130
|
+
if (binding.type === "keyboard")
|
|
131
|
+
claim(`key:${binding.code}`, name);
|
|
132
|
+
else if (binding.type === "keyboard-chord") {
|
|
133
|
+
for (const code of binding.codes)
|
|
134
|
+
claim(`key:${code}`, name);
|
|
135
|
+
}
|
|
136
|
+
else if (binding.type === "gamepad-button") {
|
|
137
|
+
claim(`pad:${binding.gamepad ?? 0}:${binding.button}`, name);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const conflicts = [];
|
|
142
|
+
for (const [code, actions] of owners) {
|
|
143
|
+
if (actions.size > 1)
|
|
144
|
+
conflicts.push({ code, actions: [...actions].sort() });
|
|
145
|
+
}
|
|
146
|
+
return conflicts.sort((a, b) => (a.code < b.code ? -1 : 1));
|
|
147
|
+
}
|
|
148
|
+
/** Subscribe a remapping UI to binding changes. Returns an unsubscribe function. */
|
|
149
|
+
onChange(listener) {
|
|
150
|
+
this.listeners.add(listener);
|
|
151
|
+
return () => {
|
|
152
|
+
this.listeners.delete(listener);
|
|
153
|
+
};
|
|
11
154
|
}
|
|
12
155
|
useSnapshot(snapshot) {
|
|
13
156
|
this.snapshot = snapshot;
|
|
@@ -44,6 +187,10 @@ export class ActionMap {
|
|
|
44
187
|
}
|
|
45
188
|
return value;
|
|
46
189
|
}
|
|
190
|
+
emitChange() {
|
|
191
|
+
for (const listener of [...this.listeners])
|
|
192
|
+
listener();
|
|
193
|
+
}
|
|
47
194
|
evaluate(name, snapshot, field) {
|
|
48
195
|
return (this.actions.get(name) ?? []).some((binding) => {
|
|
49
196
|
if (binding.type === "keyboard") {
|
|
@@ -59,6 +206,38 @@ export class ActionMap {
|
|
|
59
206
|
});
|
|
60
207
|
}
|
|
61
208
|
}
|
|
209
|
+
function isActionBinding(value) {
|
|
210
|
+
if (!value || typeof value !== "object")
|
|
211
|
+
return false;
|
|
212
|
+
const binding = value;
|
|
213
|
+
switch (binding.type) {
|
|
214
|
+
case "keyboard":
|
|
215
|
+
return typeof binding.code === "string";
|
|
216
|
+
case "keyboard-chord":
|
|
217
|
+
return Array.isArray(binding.codes) && binding.codes.every((code) => typeof code === "string");
|
|
218
|
+
case "pointer":
|
|
219
|
+
return typeof binding.button === "number";
|
|
220
|
+
case "gamepad-button":
|
|
221
|
+
return typeof binding.button === "number" && (binding.gamepad === undefined || typeof binding.gamepad === "number");
|
|
222
|
+
default:
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function isAxisBinding(value) {
|
|
227
|
+
if (!value || typeof value !== "object")
|
|
228
|
+
return false;
|
|
229
|
+
const binding = value;
|
|
230
|
+
switch (binding.type) {
|
|
231
|
+
case "keyboard-axis":
|
|
232
|
+
return typeof binding.negative === "string" && typeof binding.positive === "string";
|
|
233
|
+
case "pointer-axis":
|
|
234
|
+
return binding.axis === "x" || binding.axis === "y" || binding.axis === "wheelX" || binding.axis === "wheelY";
|
|
235
|
+
case "gamepad-axis":
|
|
236
|
+
return typeof binding.axis === "number";
|
|
237
|
+
default:
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
62
241
|
function evaluateChord(codes, snapshot, field) {
|
|
63
242
|
if (codes.length === 0)
|
|
64
243
|
return false;
|
package/dist/ActionMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMap.js","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionMap.js","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generalized hold / input-buffer / combo detection for the input package.
|
|
3
|
+
*
|
|
4
|
+
* The engine's `createGameInput` already buffers and combos at the route-action
|
|
5
|
+
* layer; this module generalizes the same ideas down at the raw-code layer
|
|
6
|
+
* (keyboard codes, gamepad buttons, touch button ids) so any device feed —
|
|
7
|
+
* including remapped actions resolved back to codes — can drive fighting-game
|
|
8
|
+
* buffering without depending on the engine package.
|
|
9
|
+
*/
|
|
10
|
+
export interface ComboFrameInput {
|
|
11
|
+
/** Codes pressed *this frame* (rising edges). */
|
|
12
|
+
readonly pressed: readonly string[];
|
|
13
|
+
/** Codes currently held down. */
|
|
14
|
+
readonly down: readonly string[];
|
|
15
|
+
readonly timeMs: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ComboDefinition {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
/** Ordered press sequence, e.g. `["ArrowDown", "ArrowRight", "KeyP"]`. Single-step + `holdMs` = a hold. */
|
|
20
|
+
readonly steps: readonly string[];
|
|
21
|
+
/** Max gap between consecutive steps. Defaults to `bufferMs`. */
|
|
22
|
+
readonly maxIntervalMs?: number;
|
|
23
|
+
/** Retain presses this long for matching. Defaults to 300. */
|
|
24
|
+
readonly bufferMs?: number;
|
|
25
|
+
/** For single-step combos: fire only after held this long. No repeat until re-press. */
|
|
26
|
+
readonly holdMs?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface ComboEvent {
|
|
29
|
+
readonly comboId: string;
|
|
30
|
+
readonly timeMs: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class ComboDetector {
|
|
33
|
+
private readonly combos;
|
|
34
|
+
private history;
|
|
35
|
+
private readonly holdStart;
|
|
36
|
+
private readonly holdFired;
|
|
37
|
+
defineCombo(definition: ComboDefinition): void;
|
|
38
|
+
removeCombo(id: string): boolean;
|
|
39
|
+
comboIds(): readonly string[];
|
|
40
|
+
reset(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Feed one frame; returns combos whose full sequence matched ending this frame.
|
|
43
|
+
* Hold combos fire once per press when the hold duration is reached.
|
|
44
|
+
*/
|
|
45
|
+
update(input: ComboFrameInput): readonly ComboEvent[];
|
|
46
|
+
/** True while `code` has been continuously held for at least `durationMs` at `nowMs`. */
|
|
47
|
+
held(code: string, durationMs: number, nowMs: number): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ComboDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComboDetector.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ComboDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,2GAA2G;IAC3G,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAU9C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIhC,QAAQ,IAAI,SAAS,MAAM,EAAE;IAI7B,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,UAAU,EAAE;IAyCrD,yFAAyF;IACzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAI/D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generalized hold / input-buffer / combo detection for the input package.
|
|
3
|
+
*
|
|
4
|
+
* The engine's `createGameInput` already buffers and combos at the route-action
|
|
5
|
+
* layer; this module generalizes the same ideas down at the raw-code layer
|
|
6
|
+
* (keyboard codes, gamepad buttons, touch button ids) so any device feed —
|
|
7
|
+
* including remapped actions resolved back to codes — can drive fighting-game
|
|
8
|
+
* buffering without depending on the engine package.
|
|
9
|
+
*/
|
|
10
|
+
const HISTORY_LIMIT = 64;
|
|
11
|
+
export class ComboDetector {
|
|
12
|
+
combos = new Map();
|
|
13
|
+
history = [];
|
|
14
|
+
holdStart = new Map();
|
|
15
|
+
holdFired = new Set();
|
|
16
|
+
defineCombo(definition) {
|
|
17
|
+
if (!definition.id)
|
|
18
|
+
throw new Error("Combo id must be a non-empty string.");
|
|
19
|
+
if (definition.steps.length === 0)
|
|
20
|
+
throw new Error(`Combo "${definition.id}" needs at least one step.`);
|
|
21
|
+
const bufferMs = definition.bufferMs ?? 300;
|
|
22
|
+
if (!Number.isFinite(bufferMs) || bufferMs < 0) {
|
|
23
|
+
throw new Error(`Combo "${definition.id}" bufferMs must be a non-negative finite number.`);
|
|
24
|
+
}
|
|
25
|
+
this.combos.set(definition.id, { ...definition, steps: [...definition.steps] });
|
|
26
|
+
}
|
|
27
|
+
removeCombo(id) {
|
|
28
|
+
return this.combos.delete(id);
|
|
29
|
+
}
|
|
30
|
+
comboIds() {
|
|
31
|
+
return [...this.combos.keys()];
|
|
32
|
+
}
|
|
33
|
+
reset() {
|
|
34
|
+
this.history = [];
|
|
35
|
+
this.holdStart.clear();
|
|
36
|
+
this.holdFired.clear();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Feed one frame; returns combos whose full sequence matched ending this frame.
|
|
40
|
+
* Hold combos fire once per press when the hold duration is reached.
|
|
41
|
+
*/
|
|
42
|
+
update(input) {
|
|
43
|
+
const now = input.timeMs;
|
|
44
|
+
const downSet = new Set(input.down);
|
|
45
|
+
for (const code of input.pressed) {
|
|
46
|
+
this.history.push({ code, timeMs: now });
|
|
47
|
+
if (!this.holdStart.has(code))
|
|
48
|
+
this.holdStart.set(code, now);
|
|
49
|
+
}
|
|
50
|
+
if (this.history.length > HISTORY_LIMIT) {
|
|
51
|
+
this.history = this.history.slice(this.history.length - HISTORY_LIMIT);
|
|
52
|
+
}
|
|
53
|
+
for (const [code, start] of [...this.holdStart]) {
|
|
54
|
+
if (!downSet.has(code)) {
|
|
55
|
+
this.holdStart.delete(code);
|
|
56
|
+
this.holdFired.delete(code);
|
|
57
|
+
}
|
|
58
|
+
else if (start > now) {
|
|
59
|
+
this.holdStart.set(code, now);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const fired = [];
|
|
63
|
+
for (const combo of this.combos.values()) {
|
|
64
|
+
const bufferMs = combo.bufferMs ?? 300;
|
|
65
|
+
const maxInterval = combo.maxIntervalMs ?? bufferMs;
|
|
66
|
+
const recent = this.history.filter((press) => now - press.timeMs <= Math.max(bufferMs, maxInterval));
|
|
67
|
+
if (combo.steps.length === 1 && combo.holdMs !== undefined) {
|
|
68
|
+
const code = combo.steps[0];
|
|
69
|
+
const start = this.holdStart.get(code);
|
|
70
|
+
if (start !== undefined && downSet.has(code) && !this.holdFired.has(combo.id) && now - start >= combo.holdMs) {
|
|
71
|
+
this.holdFired.add(combo.id);
|
|
72
|
+
fired.push({ comboId: combo.id, timeMs: now });
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (input.pressed.length === 0)
|
|
77
|
+
continue;
|
|
78
|
+
if (matchesSequence(recent, combo.steps, maxInterval) && recent[recent.length - 1]?.timeMs === now) {
|
|
79
|
+
fired.push({ comboId: combo.id, timeMs: now });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return fired;
|
|
83
|
+
}
|
|
84
|
+
/** True while `code` has been continuously held for at least `durationMs` at `nowMs`. */
|
|
85
|
+
held(code, durationMs, nowMs) {
|
|
86
|
+
const start = this.holdStart.get(code);
|
|
87
|
+
return start !== undefined && nowMs - start >= durationMs;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function matchesSequence(history, steps, maxIntervalMs) {
|
|
91
|
+
if (history.length < steps.length)
|
|
92
|
+
return false;
|
|
93
|
+
const tail = history.slice(history.length - steps.length);
|
|
94
|
+
for (let index = 0; index < steps.length; index += 1) {
|
|
95
|
+
if (tail[index]?.code !== steps[index])
|
|
96
|
+
return false;
|
|
97
|
+
if (index > 0 && tail[index].timeMs - tail[index - 1].timeMs > maxIntervalMs)
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=ComboDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComboDetector.js","sourceRoot":"","sources":["../../../../packages/input/src/ComboDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability-gated haptics: `navigator.vibrate` patterns plus gamepad rumble
|
|
3
|
+
* (`vibrationActuator.playEffect`). Every entry point probes first and reports
|
|
4
|
+
* `{ played: false, reason }` when a host does not support the requested effect.
|
|
5
|
+
*/
|
|
6
|
+
export interface NavigatorVibrateLike {
|
|
7
|
+
vibrate?: (pattern: number | readonly number[]) => boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface GamepadRumbleActuatorLike {
|
|
10
|
+
playEffect?: (type: string, params: Record<string, number>) => Promise<string> | string;
|
|
11
|
+
}
|
|
12
|
+
export interface HapticProbeInput {
|
|
13
|
+
readonly navigatorLike?: NavigatorVibrateLike;
|
|
14
|
+
readonly actuators?: readonly (GamepadRumbleActuatorLike | null | undefined)[];
|
|
15
|
+
}
|
|
16
|
+
export interface HapticsCapability {
|
|
17
|
+
readonly vibrate: boolean;
|
|
18
|
+
readonly gamepadRumble: boolean;
|
|
19
|
+
readonly details: string;
|
|
20
|
+
}
|
|
21
|
+
export interface HapticRequest {
|
|
22
|
+
/** Vibration pattern in ms (single buzz or on/off pulses). */
|
|
23
|
+
readonly pattern?: number | readonly number[];
|
|
24
|
+
/** Rumble intensity in [0, 1]. Defaults to 1 when rumbling without an explicit value. */
|
|
25
|
+
readonly intensity?: number;
|
|
26
|
+
/** Rumble duration in ms. Defaults to 60. */
|
|
27
|
+
readonly durationMs?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface HapticResult {
|
|
30
|
+
readonly played: boolean;
|
|
31
|
+
readonly via: "navigator-vibrate" | "gamepad-rumble" | "none";
|
|
32
|
+
readonly reason: string;
|
|
33
|
+
}
|
|
34
|
+
/** Probe what the host actually supports. Never touches hardware. */
|
|
35
|
+
export declare function probeHaptics(input?: HapticProbeInput): HapticsCapability;
|
|
36
|
+
/**
|
|
37
|
+
* Play a haptic effect through the first capable sink. Prefers gamepad rumble
|
|
38
|
+
* when an actuator is supplied, else falls back to `navigator.vibrate`.
|
|
39
|
+
* Capability-gated: returns `played: false` with a cause instead of claiming
|
|
40
|
+
* feedback on an incapable host.
|
|
41
|
+
*/
|
|
42
|
+
export declare function playHaptic(request: HapticRequest, capability: HapticsCapability, sinks?: {
|
|
43
|
+
readonly navigatorLike?: NavigatorVibrateLike;
|
|
44
|
+
readonly actuator?: GamepadRumbleActuatorLike | null;
|
|
45
|
+
}): Promise<HapticResult>;
|
|
46
|
+
//# sourceMappingURL=Haptics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Haptics.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/Haptics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACzF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,yBAAyB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAChF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,GAAE,gBAAqB,GAAG,iBAAiB,CAO5E;AAYD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,iBAAiB,EAC7B,KAAK,GAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAAO,GAClH,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
|
package/dist/Haptics.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability-gated haptics: `navigator.vibrate` patterns plus gamepad rumble
|
|
3
|
+
* (`vibrationActuator.playEffect`). Every entry point probes first and reports
|
|
4
|
+
* `{ played: false, reason }` when a host does not support the requested effect.
|
|
5
|
+
*/
|
|
6
|
+
/** Probe what the host actually supports. Never touches hardware. */
|
|
7
|
+
export function probeHaptics(input = {}) {
|
|
8
|
+
const vibrate = typeof input.navigatorLike?.vibrate === "function";
|
|
9
|
+
const gamepadRumble = (input.actuators ?? []).some((actuator) => typeof actuator?.playEffect === "function");
|
|
10
|
+
const parts = [];
|
|
11
|
+
parts.push(vibrate ? "navigator.vibrate available" : "navigator.vibrate unavailable");
|
|
12
|
+
parts.push(gamepadRumble ? "gamepad rumble available" : "gamepad rumble unavailable");
|
|
13
|
+
return { vibrate, gamepadRumble, details: parts.join("; ") };
|
|
14
|
+
}
|
|
15
|
+
function validateRequest(request) {
|
|
16
|
+
if (request.intensity !== undefined && (!Number.isFinite(request.intensity) || request.intensity < 0 || request.intensity > 1)) {
|
|
17
|
+
return "Haptic intensity must be in [0, 1].";
|
|
18
|
+
}
|
|
19
|
+
if (request.durationMs !== undefined && (!Number.isFinite(request.durationMs) || request.durationMs < 0)) {
|
|
20
|
+
return "Haptic durationMs must be a non-negative finite number.";
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Play a haptic effect through the first capable sink. Prefers gamepad rumble
|
|
26
|
+
* when an actuator is supplied, else falls back to `navigator.vibrate`.
|
|
27
|
+
* Capability-gated: returns `played: false` with a cause instead of claiming
|
|
28
|
+
* feedback on an incapable host.
|
|
29
|
+
*/
|
|
30
|
+
export async function playHaptic(request, capability, sinks = {}) {
|
|
31
|
+
const invalid = validateRequest(request);
|
|
32
|
+
if (invalid)
|
|
33
|
+
return { played: false, via: "none", reason: invalid };
|
|
34
|
+
if (sinks.actuator?.playEffect && capability.gamepadRumble) {
|
|
35
|
+
const durationMs = Math.max(0, request.durationMs ?? 60);
|
|
36
|
+
const intensity = request.intensity ?? 1;
|
|
37
|
+
try {
|
|
38
|
+
const outcome = await sinks.actuator.playEffect("dual-rumble", {
|
|
39
|
+
duration: durationMs,
|
|
40
|
+
strongMagnitude: intensity,
|
|
41
|
+
weakMagnitude: intensity
|
|
42
|
+
});
|
|
43
|
+
if (outcome === "complete") {
|
|
44
|
+
return { played: true, via: "gamepad-rumble", reason: "dual-rumble effect completed" };
|
|
45
|
+
}
|
|
46
|
+
return { played: false, via: "none", reason: `gamepad rumble rejected with outcome "${String(outcome)}"` };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return { played: false, via: "none", reason: error instanceof Error ? error.message : String(error) };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (sinks.navigatorLike?.vibrate && capability.vibrate) {
|
|
53
|
+
const pattern = request.pattern ?? request.durationMs ?? 60;
|
|
54
|
+
let vibrated = false;
|
|
55
|
+
try {
|
|
56
|
+
vibrated = sinks.navigatorLike.vibrate(pattern) === true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return { played: false, via: "none", reason: error instanceof Error ? error.message : String(error) };
|
|
60
|
+
}
|
|
61
|
+
return vibrated
|
|
62
|
+
? { played: true, via: "navigator-vibrate", reason: "vibration pattern accepted" }
|
|
63
|
+
: { played: false, via: "none", reason: "navigator.vibrate returned false" };
|
|
64
|
+
}
|
|
65
|
+
return { played: false, via: "none", reason: `no capable haptic sink (${capability.details})` };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=Haptics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Haptics.js","sourceRoot":"","sources":["../../../../packages/input/src/Haptics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA8C,MAAM,iBAAiB,CAAC;AAE5F,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAClE;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,iBAAwB;IACzC,QAAQ,CAAC,OAAO,gBAAuB;IACvC,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,OAAO,YAAmB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,CAAC,EAAE,oBAAoB;IAMzC,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA8C,MAAM,iBAAiB,CAAC;AAE5F,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAClE;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,iBAAwB;IACzC,QAAQ,CAAC,OAAO,gBAAuB;IACvC,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,OAAO,YAAmB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,CAAC,EAAE,oBAAoB;IAMzC,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAmC1C,MAAM,CAAC,QAAQ,GAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO,GAAG,aAAa;IAYjF,QAAQ,IAAI,IAAI;IAKhB,OAAO,IAAI,IAAI;CAUhB"}
|
package/dist/InputSystem.js
CHANGED
package/dist/InputSystem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"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"}
|