@aura3d/input 2.0.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/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/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":"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,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2D;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyD;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAK5D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAK9D;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAM9D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAMhE,8EAA8E;IAC9E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS7B,sFAAsF;IACtF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAoBlC,6DAA6D;IAC7D,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,SAAS,MAAM,EAAE;IAIhC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,GAAG,SAAS;IAK/D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,GAAG,SAAS;IAKjE,+EAA+E;IAC/E,iBAAiB,IAAI,wBAAwB;IAO7C,oFAAoF;IACpF,eAAe,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAkBrD;;;OAGG;IACH,aAAa,IAAI,SAAS,cAAc,EAAE;IA2B1C,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO1C,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIrD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIxD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIzD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,MAAM;IAyBpD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;CAcjB"}
|
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 }` instead of fake success on unsupported hosts.
|
|
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 }` instead of fake success on unsupported hosts.
|
|
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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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { VirtualJoystickConfig } from "./VirtualTouchControls.js";
|
|
2
|
+
export type TouchLayoutGenre = "fight" | "race" | "platform";
|
|
3
|
+
export interface TouchLayoutButtonBinding {
|
|
4
|
+
/** DOM id the route creates for the on-screen button. */
|
|
5
|
+
readonly elementId: string;
|
|
6
|
+
/** `KeyboardEvent.code` the button synthesises (same path as physical keys). */
|
|
7
|
+
readonly code: string;
|
|
8
|
+
readonly kind: "hold" | "pulse";
|
|
9
|
+
readonly label: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TouchLayoutPreset {
|
|
12
|
+
readonly kind: "touch-layout-preset";
|
|
13
|
+
readonly genre: TouchLayoutGenre;
|
|
14
|
+
/** Primary analog stick (move / steer). */
|
|
15
|
+
readonly leftStick: VirtualJoystickConfig;
|
|
16
|
+
/** Optional second stick (camera / aim). Present for fight + platform. */
|
|
17
|
+
readonly rightStick?: VirtualJoystickConfig;
|
|
18
|
+
readonly hold: readonly TouchLayoutButtonBinding[];
|
|
19
|
+
readonly pulse: readonly TouchLayoutButtonBinding[];
|
|
20
|
+
}
|
|
21
|
+
export interface TouchLayoutPresetOptions {
|
|
22
|
+
readonly width?: number;
|
|
23
|
+
readonly height?: number;
|
|
24
|
+
readonly elementIdPrefix?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Analog-stick + button layout presets per genre. Stick configs feed
|
|
28
|
+
* `VirtualTouchJoystick`; button bindings feed the engine's
|
|
29
|
+
* `bindGameTouchControls` as `{ hold, pulse }` (see also the engine-side
|
|
30
|
+
* `touchLayoutBindingsForGenre`, which mirrors the button maps where the
|
|
31
|
+
* engine cannot depend on this package).
|
|
32
|
+
*/
|
|
33
|
+
export declare function createTouchLayoutPreset(genre: TouchLayoutGenre, options?: TouchLayoutPresetOptions): TouchLayoutPreset;
|
|
34
|
+
export declare const TOUCH_LAYOUT_GENRES: readonly TouchLayoutGenre[];
|
|
35
|
+
//# sourceMappingURL=TouchLayouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TouchLayouts.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/TouchLayouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAiFnB;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAAkC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analog-stick + button layout presets per genre. Stick configs feed
|
|
3
|
+
* `VirtualTouchJoystick`; button bindings feed the engine's
|
|
4
|
+
* `bindGameTouchControls` as `{ hold, pulse }` (see also the engine-side
|
|
5
|
+
* `touchLayoutBindingsForGenre`, which mirrors the button maps where the
|
|
6
|
+
* engine cannot depend on this package).
|
|
7
|
+
*/
|
|
8
|
+
export function createTouchLayoutPreset(genre, options = {}) {
|
|
9
|
+
const width = Math.max(1, options.width ?? 960);
|
|
10
|
+
const height = Math.max(1, options.height ?? 540);
|
|
11
|
+
const prefix = options.elementIdPrefix ?? `touch-${genre}`;
|
|
12
|
+
const scale = Math.min(width, height) / 540;
|
|
13
|
+
const stickRadius = 64 * scale;
|
|
14
|
+
const leftStick = {
|
|
15
|
+
center: [96 * scale, height - 96 * scale],
|
|
16
|
+
radius: stickRadius,
|
|
17
|
+
deadZone: 0.18,
|
|
18
|
+
maxDistance: stickRadius * 0.8,
|
|
19
|
+
fixed: false,
|
|
20
|
+
returnToCenter: true
|
|
21
|
+
};
|
|
22
|
+
const hold = (elementId, code, label) => ({
|
|
23
|
+
elementId: `${prefix}:${elementId}`,
|
|
24
|
+
code,
|
|
25
|
+
kind: "hold",
|
|
26
|
+
label
|
|
27
|
+
});
|
|
28
|
+
const pulse = (elementId, code, label) => ({
|
|
29
|
+
elementId: `${prefix}:${elementId}`,
|
|
30
|
+
code,
|
|
31
|
+
kind: "pulse",
|
|
32
|
+
label
|
|
33
|
+
});
|
|
34
|
+
switch (genre) {
|
|
35
|
+
case "fight":
|
|
36
|
+
return {
|
|
37
|
+
kind: "touch-layout-preset",
|
|
38
|
+
genre,
|
|
39
|
+
leftStick,
|
|
40
|
+
rightStick: {
|
|
41
|
+
center: [width - 96 * scale, height - 220 * scale],
|
|
42
|
+
radius: 52 * scale,
|
|
43
|
+
deadZone: 0.25,
|
|
44
|
+
maxDistance: 40 * scale,
|
|
45
|
+
fixed: true,
|
|
46
|
+
returnToCenter: true
|
|
47
|
+
},
|
|
48
|
+
hold: [hold("left", "ArrowLeft", "Move left"), hold("right", "ArrowRight", "Move right"), hold("block", "KeyS", "Block")],
|
|
49
|
+
pulse: [
|
|
50
|
+
pulse("light", "KeyJ", "Light"),
|
|
51
|
+
pulse("heavy", "KeyK", "Heavy"),
|
|
52
|
+
pulse("special", "KeyL", "Special"),
|
|
53
|
+
pulse("jump", "Space", "Jump")
|
|
54
|
+
]
|
|
55
|
+
};
|
|
56
|
+
case "race":
|
|
57
|
+
return {
|
|
58
|
+
kind: "touch-layout-preset",
|
|
59
|
+
genre,
|
|
60
|
+
leftStick: { ...leftStick, deadZone: 0.12 },
|
|
61
|
+
hold: [
|
|
62
|
+
hold("steer-left", "ArrowLeft", "Steer left"),
|
|
63
|
+
hold("steer-right", "ArrowRight", "Steer right"),
|
|
64
|
+
hold("throttle", "ArrowUp", "Throttle"),
|
|
65
|
+
hold("brake", "ArrowDown", "Brake")
|
|
66
|
+
],
|
|
67
|
+
pulse: [pulse("boost", "ShiftLeft", "Boost"), pulse("reset", "KeyR", "Reset")]
|
|
68
|
+
};
|
|
69
|
+
case "platform":
|
|
70
|
+
return {
|
|
71
|
+
kind: "touch-layout-preset",
|
|
72
|
+
genre,
|
|
73
|
+
leftStick,
|
|
74
|
+
rightStick: {
|
|
75
|
+
center: [width - 96 * scale, height - 220 * scale],
|
|
76
|
+
radius: 48 * scale,
|
|
77
|
+
deadZone: 0.3,
|
|
78
|
+
maxDistance: 36 * scale,
|
|
79
|
+
fixed: true,
|
|
80
|
+
returnToCenter: true
|
|
81
|
+
},
|
|
82
|
+
hold: [hold("left", "ArrowLeft", "Move left"), hold("right", "ArrowRight", "Move right"), hold("dash", "ShiftLeft", "Dash")],
|
|
83
|
+
pulse: [pulse("jump", "Space", "Jump"), pulse("attack", "KeyJ", "Attack")]
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export const TOUCH_LAYOUT_GENRES = ["fight", "race", "platform"];
|
|
88
|
+
//# sourceMappingURL=TouchLayouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TouchLayouts.js","sourceRoot":"","sources":["../../../../packages/input/src/TouchLayouts.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export interface A3DXRSessionInit {
|
|
|
11
11
|
}
|
|
12
12
|
export interface A3DXRSessionLike {
|
|
13
13
|
readonly inputSources?: readonly A3DXRInputSourceLike[];
|
|
14
|
+
readonly enabledFeatures?: readonly string[];
|
|
14
15
|
requestReferenceSpace?(type: A3DXRReferenceSpaceType): Promise<A3DXRReferenceSpaceLike>;
|
|
15
16
|
requestAnimationFrame?(callback: (time: number, frame: A3DXRFrameLike) => void): number;
|
|
16
17
|
end?(): Promise<void>;
|
|
@@ -21,6 +22,7 @@ export interface A3DXRInputSourceLike {
|
|
|
21
22
|
readonly profiles?: readonly string[];
|
|
22
23
|
readonly targetRaySpace?: unknown;
|
|
23
24
|
readonly gripSpace?: unknown;
|
|
25
|
+
readonly hand?: A3DXRHandLike;
|
|
24
26
|
readonly gamepad?: {
|
|
25
27
|
readonly buttons?: readonly {
|
|
26
28
|
readonly pressed?: boolean;
|
|
@@ -33,9 +35,30 @@ export interface A3DXRInputSourceLike {
|
|
|
33
35
|
}[];
|
|
34
36
|
};
|
|
35
37
|
}
|
|
38
|
+
/** Injected hand-tracking state for one input source (N3). Joint names follow
|
|
39
|
+
* the WebXR Hand Input `XRHandJoint` identifiers (e.g. "wrist",
|
|
40
|
+
* "index-finger-tip"); unknown names pass through untouched. */
|
|
41
|
+
export interface A3DXRJointSample {
|
|
42
|
+
readonly position?: readonly [number, number, number];
|
|
43
|
+
readonly orientation?: readonly [number, number, number, number];
|
|
44
|
+
readonly radius?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface A3DXRHandLike {
|
|
47
|
+
readonly handedness?: A3DXRHandedness;
|
|
48
|
+
readonly trackingState?: "tracked" | "not-tracked" | unknown;
|
|
49
|
+
readonly joints?: Readonly<Record<string, A3DXRJointSample>>;
|
|
50
|
+
}
|
|
51
|
+
export interface A3DXRViewerPoseLike {
|
|
52
|
+
readonly position?: readonly [number, number, number];
|
|
53
|
+
readonly orientation?: readonly [number, number, number, number];
|
|
54
|
+
readonly viewMatrix?: readonly number[];
|
|
55
|
+
readonly projectionMatrix?: readonly number[];
|
|
56
|
+
}
|
|
36
57
|
export interface A3DXRFrameLike {
|
|
37
58
|
getHitTestResults?(source: unknown): readonly A3DXRHitTestResultLike[];
|
|
38
59
|
getPose?(space: unknown, baseSpace: A3DXRReferenceSpaceLike): A3DXRPoseLike | undefined;
|
|
60
|
+
/** Viewer pose for XR camera handling; absent on sessions without tracking. */
|
|
61
|
+
getViewerPose?(referenceSpace: A3DXRReferenceSpaceLike): A3DXRViewerPoseLike | undefined;
|
|
39
62
|
}
|
|
40
63
|
export interface A3DXRReferenceSpaceLike {
|
|
41
64
|
readonly type?: A3DXRReferenceSpaceType;
|
|
@@ -74,6 +97,33 @@ export interface WebXRHitTestSample {
|
|
|
74
97
|
readonly position: readonly [number, number, number];
|
|
75
98
|
readonly normal: readonly [number, number, number];
|
|
76
99
|
}
|
|
100
|
+
export interface WebXRJointSample {
|
|
101
|
+
readonly position: readonly [number, number, number] | null;
|
|
102
|
+
readonly radius: number;
|
|
103
|
+
}
|
|
104
|
+
export interface WebXRHandSample {
|
|
105
|
+
readonly handedness: A3DXRHandedness;
|
|
106
|
+
readonly tracked: boolean;
|
|
107
|
+
readonly jointCount: number;
|
|
108
|
+
readonly joints: Readonly<Record<string, WebXRJointSample>>;
|
|
109
|
+
}
|
|
110
|
+
export interface WebXRCameraSample {
|
|
111
|
+
readonly tracked: boolean;
|
|
112
|
+
readonly position: readonly [number, number, number] | null;
|
|
113
|
+
readonly orientation: readonly [number, number, number, number] | null;
|
|
114
|
+
readonly viewMatrix: readonly number[] | null;
|
|
115
|
+
readonly projectionMatrix: readonly number[] | null;
|
|
116
|
+
}
|
|
117
|
+
/** Capability report: what THIS injected session actually provided. Every
|
|
118
|
+
* flag degrades to an explicit false/empty — never a hardware claim. */
|
|
119
|
+
export interface WebXRCapabilityReport {
|
|
120
|
+
readonly handTracking: boolean;
|
|
121
|
+
readonly viewerPose: boolean;
|
|
122
|
+
readonly hitTest: boolean;
|
|
123
|
+
readonly haptics: boolean;
|
|
124
|
+
readonly referenceSpace: A3DXRReferenceSpaceType;
|
|
125
|
+
readonly enabledFeatures: readonly string[];
|
|
126
|
+
}
|
|
77
127
|
export interface WebXRFrameSample {
|
|
78
128
|
readonly mode: A3DXRSessionMode;
|
|
79
129
|
readonly referenceSpace: A3DXRReferenceSpaceType;
|
|
@@ -82,6 +132,9 @@ export interface WebXRFrameSample {
|
|
|
82
132
|
readonly controllers: readonly WebXRControllerSample[];
|
|
83
133
|
readonly hitTestCount: number;
|
|
84
134
|
readonly hitTests: readonly WebXRHitTestSample[];
|
|
135
|
+
readonly hands: readonly WebXRHandSample[];
|
|
136
|
+
readonly camera: WebXRCameraSample;
|
|
137
|
+
readonly capabilities: WebXRCapabilityReport;
|
|
85
138
|
}
|
|
86
139
|
export interface WebXRSessionStartResult {
|
|
87
140
|
readonly mode: A3DXRSessionMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRSessionController.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/WebXRSessionController.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,eAAe,GAAG,WAAW,CAAC;AACzG,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxD,qBAAqB,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACxF,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,CAAC;IACxF,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;YAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAClH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS;YAAE,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;SAAE,EAAE,CAAC;KACnH,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,sBAAsB,EAAE,CAAC;IACvE,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,uBAAuB,GAAG,aAAa,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"WebXRSessionController.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/WebXRSessionController.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,10 +55,17 @@ export class WebXRSessionController {
|
|
|
55
55
|
}
|
|
56
56
|
sampleFrame(frame, hitTestSource) {
|
|
57
57
|
const referenceSpace = this.referenceSpace ?? { type: this.referenceSpaceType };
|
|
58
|
-
const
|
|
58
|
+
const sources = Array.from(this.session?.inputSources ?? []);
|
|
59
|
+
const controllers = sources.map((source) => sampleInputSource(source, frame, referenceSpace));
|
|
60
|
+
const hands = sources
|
|
61
|
+
.filter((source) => source.hand !== undefined)
|
|
62
|
+
.map((source) => sampleHand(source.handedness ?? "none", source.hand));
|
|
59
63
|
const hitTests = frame?.getHitTestResults && hitTestSource
|
|
60
64
|
? frame.getHitTestResults(hitTestSource).map(sampleHitTest)
|
|
61
65
|
: [];
|
|
66
|
+
const camera = sampleViewerPose(frame, referenceSpace);
|
|
67
|
+
const hitTestCapable = Boolean(frame?.getHitTestResults && hitTestSource);
|
|
68
|
+
const enabledFeatures = Array.from(this.session?.enabledFeatures ?? []);
|
|
62
69
|
return {
|
|
63
70
|
mode: this.mode,
|
|
64
71
|
referenceSpace: this.referenceSpace?.type ?? this.referenceSpaceType,
|
|
@@ -66,7 +73,17 @@ export class WebXRSessionController {
|
|
|
66
73
|
controllerCount: controllers.length,
|
|
67
74
|
controllers,
|
|
68
75
|
hitTestCount: hitTests.length,
|
|
69
|
-
hitTests
|
|
76
|
+
hitTests,
|
|
77
|
+
hands,
|
|
78
|
+
camera,
|
|
79
|
+
capabilities: {
|
|
80
|
+
handTracking: hands.some((hand) => hand.tracked),
|
|
81
|
+
viewerPose: camera.tracked,
|
|
82
|
+
hitTest: hitTestCapable,
|
|
83
|
+
haptics: controllers.some((controller) => controller.hapticActuatorCount > 0),
|
|
84
|
+
referenceSpace: this.referenceSpace?.type ?? this.referenceSpaceType,
|
|
85
|
+
enabledFeatures
|
|
86
|
+
}
|
|
70
87
|
};
|
|
71
88
|
}
|
|
72
89
|
async end() {
|
|
@@ -114,6 +131,45 @@ function samplePoseMatrix(frame, space, referenceSpace) {
|
|
|
114
131
|
return null;
|
|
115
132
|
return sanitizeMatrix4(frame.getPose(space, referenceSpace)?.transform?.matrix);
|
|
116
133
|
}
|
|
134
|
+
function sampleHand(handedness, hand) {
|
|
135
|
+
const joints = {};
|
|
136
|
+
const entries = hand?.joints ? Object.entries(hand.joints).slice(0, 64) : [];
|
|
137
|
+
for (const [name, joint] of entries) {
|
|
138
|
+
joints[name] = {
|
|
139
|
+
position: sanitizeVec3OrNull(joint?.position),
|
|
140
|
+
radius: typeof joint?.radius === "number" && Number.isFinite(joint.radius) ? Math.max(0, joint.radius) : 0
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const jointCount = Object.keys(joints).length;
|
|
144
|
+
return {
|
|
145
|
+
handedness,
|
|
146
|
+
tracked: hand?.trackingState === "tracked" && jointCount > 0,
|
|
147
|
+
jointCount,
|
|
148
|
+
joints
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function sampleViewerPose(frame, referenceSpace) {
|
|
152
|
+
const untracked = {
|
|
153
|
+
tracked: false,
|
|
154
|
+
position: null,
|
|
155
|
+
orientation: null,
|
|
156
|
+
viewMatrix: null,
|
|
157
|
+
projectionMatrix: null
|
|
158
|
+
};
|
|
159
|
+
const pose = frame?.getViewerPose?.(referenceSpace);
|
|
160
|
+
if (!pose)
|
|
161
|
+
return untracked;
|
|
162
|
+
const position = sanitizeVec3OrNull(pose.position);
|
|
163
|
+
const orientation = sanitizeQuatOrNull(pose.orientation);
|
|
164
|
+
// Strict: a single non-finite entry invalidates the whole matrix. Zeroing
|
|
165
|
+
// it (the legacy controller-pose behavior) would silently warp the XR
|
|
166
|
+
// camera, so the sample degrades to untracked instead.
|
|
167
|
+
const viewMatrix = sanitizeMatrix4Strict(pose.viewMatrix);
|
|
168
|
+
const projectionMatrix = sanitizeMatrix4Strict(pose.projectionMatrix);
|
|
169
|
+
if (!position && !orientation && !viewMatrix && !projectionMatrix)
|
|
170
|
+
return untracked;
|
|
171
|
+
return { tracked: true, position, orientation, viewMatrix, projectionMatrix };
|
|
172
|
+
}
|
|
117
173
|
function sampleHitTest(result) {
|
|
118
174
|
return {
|
|
119
175
|
position: sanitizeVec3(result.position, [0, 0, 0]),
|
|
@@ -128,6 +184,36 @@ function sanitizeVec3(value, fallback) {
|
|
|
128
184
|
const z = finiteOrZero(value[2]);
|
|
129
185
|
return [x, y, z];
|
|
130
186
|
}
|
|
187
|
+
function sanitizeVec3OrNull(value) {
|
|
188
|
+
if (!value || value.length < 3)
|
|
189
|
+
return null;
|
|
190
|
+
const x = value[0];
|
|
191
|
+
const y = value[1];
|
|
192
|
+
const z = value[2];
|
|
193
|
+
if (typeof x !== "number" || typeof y !== "number" || typeof z !== "number")
|
|
194
|
+
return null;
|
|
195
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
|
|
196
|
+
return null;
|
|
197
|
+
return [x, y, z];
|
|
198
|
+
}
|
|
199
|
+
function sanitizeQuatOrNull(value) {
|
|
200
|
+
if (!value || value.length < 4)
|
|
201
|
+
return null;
|
|
202
|
+
const [x, y, z, w] = [value[0], value[1], value[2], value[3]];
|
|
203
|
+
if (typeof x !== "number" || typeof y !== "number" || typeof z !== "number" || typeof w !== "number")
|
|
204
|
+
return null;
|
|
205
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z) || !Number.isFinite(w))
|
|
206
|
+
return null;
|
|
207
|
+
return [x, y, z, w];
|
|
208
|
+
}
|
|
209
|
+
function sanitizeMatrix4Strict(value) {
|
|
210
|
+
if (!value || value.length < 16)
|
|
211
|
+
return null;
|
|
212
|
+
const matrix = value.slice(0, 16);
|
|
213
|
+
if (matrix.some((entry) => typeof entry !== "number" || !Number.isFinite(entry)))
|
|
214
|
+
return null;
|
|
215
|
+
return Array.from(matrix);
|
|
216
|
+
}
|
|
131
217
|
function finiteOrZero(value) {
|
|
132
218
|
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
133
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRSessionController.js","sourceRoot":"","sources":["../../../../packages/input/src/WebXRSessionController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebXRSessionController.js","sourceRoot":"","sources":["../../../../packages/input/src/WebXRSessionController.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
export { ActionMap } from "./ActionMap.js";
|
|
2
|
-
export type { ActionBinding, AxisBinding } from "./ActionMap.js";
|
|
2
|
+
export type { ActionBinding, ActionConflict, AxisBinding, SerializedActionBindings } from "./ActionMap.js";
|
|
3
|
+
export { ComboDetector } from "./ComboDetector.js";
|
|
4
|
+
export type { ComboDefinition, ComboEvent, ComboFrameInput } from "./ComboDetector.js";
|
|
5
|
+
export { playHaptic, probeHaptics } from "./Haptics.js";
|
|
6
|
+
export type { GamepadRumbleActuatorLike, HapticRequest, HapticResult, HapticsCapability, HapticProbeInput, NavigatorVibrateLike } from "./Haptics.js";
|
|
7
|
+
export { TOUCH_LAYOUT_GENRES, createTouchLayoutPreset } from "./TouchLayouts.js";
|
|
8
|
+
export type { TouchLayoutButtonBinding, TouchLayoutGenre, TouchLayoutPreset, TouchLayoutPresetOptions } from "./TouchLayouts.js";
|
|
3
9
|
export { GamepadDevice } from "./GamepadDevice.js";
|
|
4
10
|
export type { GamepadButtonLike, GamepadLike } from "./GamepadDevice.js";
|
|
5
11
|
export { GestureRecognizer } from "./GestureRecognizer.js";
|
|
@@ -23,7 +29,7 @@ export type { PointerEventLike, WheelEventLike } from "./PointerDevice.js";
|
|
|
23
29
|
export { VirtualTouchJoystick, sampleVirtualTouchJoystickFixture } from "./VirtualTouchControls.js";
|
|
24
30
|
export type { VirtualJoystickConfig, VirtualTouchJoystickSnapshot, VirtualTouchPoint } from "./VirtualTouchControls.js";
|
|
25
31
|
export { WebXRSessionController } from "./WebXRSessionController.js";
|
|
26
|
-
export type { A3DXRFrameLike, A3DXRHandedness, A3DXRHitTestResultLike, A3DXRInputSourceLike, A3DXRPoseLike, A3DXRReferenceSpaceLike, A3DXRReferenceSpaceType, A3DXRSessionInit, A3DXRSessionLike, A3DXRSessionMode, A3DXRSystemLike, WebXRControllerSample, WebXRFrameSample, WebXRHitTestSample, WebXRSessionControllerOptions, WebXRSessionStartResult } from "./WebXRSessionController.js";
|
|
32
|
+
export type { A3DXRFrameLike, A3DXRHandedness, A3DXRHandLike, A3DXRHitTestResultLike, A3DXRInputSourceLike, A3DXRJointSample, A3DXRPoseLike, A3DXRReferenceSpaceLike, A3DXRReferenceSpaceType, A3DXRSessionInit, A3DXRSessionLike, A3DXRSessionMode, A3DXRSystemLike, A3DXRViewerPoseLike, WebXRCameraSample, WebXRCapabilityReport, WebXRControllerSample, WebXRFrameSample, WebXRHandSample, WebXRHitTestSample, WebXRJointSample, WebXRSessionControllerOptions, WebXRSessionStartResult } from "./WebXRSessionController.js";
|
|
27
33
|
export * from "./GamepadInput.js";
|
|
28
34
|
export * from "./GestureControls.js";
|
|
29
35
|
export * from "./controls/PointerLockControls.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { ActionMap } from "./ActionMap.js";
|
|
2
|
+
export { ComboDetector } from "./ComboDetector.js";
|
|
3
|
+
export { playHaptic, probeHaptics } from "./Haptics.js";
|
|
4
|
+
export { TOUCH_LAYOUT_GENRES, createTouchLayoutPreset } from "./TouchLayouts.js";
|
|
2
5
|
export { GamepadDevice } from "./GamepadDevice.js";
|
|
3
6
|
export { GestureRecognizer } from "./GestureRecognizer.js";
|
|
4
7
|
export { InputSnapshot } from "./InputSnapshot.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/input/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAEjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/input/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AASrD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAEjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AA0BlE,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/input",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"main": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@aura3d/math": "
|
|
15
|
-
"@aura3d/scene": "
|
|
14
|
+
"@aura3d/math": "3.0.0",
|
|
15
|
+
"@aura3d/scene": "3.0.0"
|
|
16
16
|
},
|
|
17
17
|
"description": "Keyboard, pointer, gamepad, gesture, action-map, picking-ray, interaction, and camera-control runtime contracts for Aura3D.",
|
|
18
18
|
"keywords": [
|