@typeonce/ritmo-browser 0.10.0 → 0.12.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/CHANGELOG.md +106 -0
- package/README.md +6 -1
- package/dist/Controls.d.ts +496 -0
- package/dist/Controls.d.ts.map +1 -0
- package/dist/Controls.js +343 -0
- package/dist/Controls.js.map +1 -0
- package/dist/Gamepad.d.ts +376 -0
- package/dist/Gamepad.d.ts.map +1 -0
- package/dist/Gamepad.js +459 -0
- package/dist/Gamepad.js.map +1 -0
- package/dist/InputCapture.d.ts +46 -16
- package/dist/InputCapture.d.ts.map +1 -1
- package/dist/InputCapture.js +1 -1
- package/dist/InputCapture.js.map +1 -1
- package/dist/Keyboard.d.ts +177 -25
- package/dist/Keyboard.d.ts.map +1 -1
- package/dist/Keyboard.js +257 -91
- package/dist/Keyboard.js.map +1 -1
- package/dist/Pointer.d.ts +233 -64
- package/dist/Pointer.d.ts.map +1 -1
- package/dist/Pointer.js +205 -145
- package/dist/Pointer.js.map +1 -1
- package/dist/Touch.d.ts +75 -33
- package/dist/Touch.d.ts.map +1 -1
- package/dist/Touch.js +25 -30
- package/dist/Touch.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/buttons.d.ts +52 -0
- package/dist/internal/buttons.d.ts.map +1 -0
- package/dist/internal/buttons.js +211 -0
- package/dist/internal/buttons.js.map +1 -0
- package/dist/internal/introspect.d.ts +14 -0
- package/dist/internal/introspect.d.ts.map +1 -0
- package/dist/internal/introspect.js +19 -0
- package/dist/internal/introspect.js.map +1 -0
- package/dist/internal/state.d.ts +13 -0
- package/dist/internal/state.d.ts.map +1 -0
- package/dist/internal/state.js +2 -0
- package/dist/internal/state.js.map +1 -0
- package/dist/internal/used.d.ts +8 -0
- package/dist/internal/used.d.ts.map +1 -0
- package/dist/internal/used.js +14 -0
- package/dist/internal/used.js.map +1 -0
- package/dist/internal/vectors.d.ts +29 -0
- package/dist/internal/vectors.d.ts.map +1 -0
- package/dist/internal/vectors.js +22 -0
- package/dist/internal/vectors.js.map +1 -0
- package/package.json +4 -3
- package/src/Controls.ts +800 -0
- package/src/Gamepad.ts +752 -0
- package/src/InputCapture.ts +43 -24
- package/src/Keyboard.ts +387 -72
- package/src/Pointer.ts +392 -166
- package/src/Touch.ts +113 -61
- package/src/index.ts +10 -1
- package/src/internal/buttons.ts +222 -0
- package/src/internal/introspect.ts +23 -0
- package/src/internal/state.ts +12 -0
- package/src/internal/used.ts +14 -0
- package/src/internal/vectors.ts +41 -0
package/dist/Keyboard.js
CHANGED
|
@@ -1,59 +1,27 @@
|
|
|
1
|
+
import * as Result from "@typeonce/ritmo/Result";
|
|
2
|
+
import { boundKeys } from "./internal/introspect.js";
|
|
3
|
+
import { anyUsed } from "./internal/used.js";
|
|
4
|
+
import { digital, directionName, directions, isVectorBinding, zero } from "./internal/vectors.js";
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* module owns the browser plumbing every game rewrites: key normalization,
|
|
6
|
-
* `preventDefault` for bound keys, press/release edges that survive taps
|
|
7
|
-
* shorter than one frame, clearing on window blur, and listener cleanup. It
|
|
8
|
-
* does not know about the ECS; `InputCapture.system(...)` copies snapshots
|
|
9
|
-
* from a service into a resource.
|
|
10
|
-
*
|
|
11
|
-
* Bind by character (`"w"`) or by physical key (`Keyboard.code("KeyW")`);
|
|
12
|
-
* see {@link KeyBinding}. A key released while a modifier changed its
|
|
13
|
-
* character (W pressed, then Option, then W released as "∑") still releases
|
|
14
|
-
* its action.
|
|
15
|
-
*
|
|
16
|
-
* Some combinations never reach the page: browsers reserve shortcuts such as
|
|
17
|
-
* Ctrl+W / Cmd+W (close tab), Ctrl+T / Cmd+T, and Cmd+Q, and pages cannot
|
|
18
|
-
* prevent them. Avoid Ctrl and Cmd as held modifiers in games.
|
|
19
|
-
*
|
|
20
|
-
* @module Keyboard
|
|
21
|
-
* @docGroup browser
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```ts
|
|
25
|
-
* const input = Keyboard.actions(window, {
|
|
26
|
-
* left: ["ArrowLeft", "a"],
|
|
27
|
-
* right: ["ArrowRight", "d"],
|
|
28
|
-
* jump: [" ", "ArrowUp", "w"]
|
|
29
|
-
* })
|
|
30
|
-
*
|
|
31
|
-
* // Once per update:
|
|
32
|
-
* const snapshot = input.snapshot()
|
|
33
|
-
* if (snapshot.jump.pressed) jump()
|
|
34
|
-
*
|
|
35
|
-
* // On teardown:
|
|
36
|
-
* input.dispose()
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* For tests, replays, and headless runs, `scripted(...)` plays a timeline of
|
|
40
|
-
* presses and releases instead of listening to a host, and `recording(...)`
|
|
41
|
-
* wraps live actions to capture the timeline a session produced.
|
|
42
|
-
* `parseTimeline(...)` validates a timeline loaded from JSON.
|
|
6
|
+
* Binds a vector action to keys for its four directions. The snapshot's
|
|
7
|
+
* `vectors` reports it with length at most 1: opposite keys cancel and a
|
|
8
|
+
* diagonal is not faster than a straight line.
|
|
43
9
|
*
|
|
44
10
|
* @example
|
|
45
11
|
* ```ts
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* const parsed = Keyboard.parseTimeline(bindings, JSON.parse(saved))
|
|
51
|
-
* if (parsed.ok) {
|
|
52
|
-
* const replay = Keyboard.scripted(bindings, parsed.value)
|
|
53
|
-
* }
|
|
12
|
+
* const bindings = {
|
|
13
|
+
* move: Keyboard.vector({ up: ["w", "ArrowUp"], down: ["s", "ArrowDown"], left: ["a", "ArrowLeft"], right: ["d", "ArrowRight"] }),
|
|
14
|
+
* jump: [" "]
|
|
15
|
+
* } as const
|
|
54
16
|
* ```
|
|
55
17
|
*/
|
|
56
|
-
|
|
18
|
+
export const vector = (keys) => ({
|
|
19
|
+
_tag: "Vector",
|
|
20
|
+
up: keys.up,
|
|
21
|
+
down: keys.down,
|
|
22
|
+
left: keys.left,
|
|
23
|
+
right: keys.right
|
|
24
|
+
});
|
|
57
25
|
/**
|
|
58
26
|
* A binding to a physical key by its `KeyboardEvent.code`.
|
|
59
27
|
*
|
|
@@ -71,35 +39,83 @@ export const code = (code) => ({ code });
|
|
|
71
39
|
* before the first capture.
|
|
72
40
|
*/
|
|
73
41
|
export const idle = (bindings) => {
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
42
|
+
const idleState = { held: false, pressed: false, released: false };
|
|
43
|
+
return assemble(bindings, () => idleState, false);
|
|
44
|
+
};
|
|
45
|
+
/** Each action's keys, with every vector action split into its four directions (`move.up`, ...). */
|
|
46
|
+
const flatten = (bindings) => {
|
|
47
|
+
const flat = {};
|
|
48
|
+
for (const [name, entry] of Object.entries(bindings)) {
|
|
49
|
+
if (isVectorBinding(entry)) {
|
|
50
|
+
for (const direction of directions)
|
|
51
|
+
flat[directionName(name, direction)] = entry[direction];
|
|
52
|
+
}
|
|
53
|
+
else
|
|
54
|
+
flat[name] = entry;
|
|
55
|
+
}
|
|
56
|
+
return flat;
|
|
57
|
+
};
|
|
58
|
+
/** The snapshot for `bindings` from the state of each flat action (button actions and vector directions). */
|
|
59
|
+
const assemble = (bindings, state, used) => {
|
|
60
|
+
const actions = {};
|
|
61
|
+
const vectors = {};
|
|
62
|
+
for (const [name, entry] of Object.entries(bindings)) {
|
|
63
|
+
if (isVectorBinding(entry)) {
|
|
64
|
+
const held = (direction) => state(directionName(name, direction)).held;
|
|
65
|
+
vectors[name] = digital(held("up"), held("down"), held("left"), held("right"));
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
actions[name] = state(name);
|
|
77
69
|
}
|
|
78
|
-
return
|
|
70
|
+
return { actions, vectors, used };
|
|
79
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* The flat action states behind the last snapshot of a live or scripted
|
|
74
|
+
* keyboard, so `recording` sees each direction of a vector action.
|
|
75
|
+
*/
|
|
76
|
+
const flatStates = Symbol("Keyboard/flatStates");
|
|
80
77
|
const normalize = (key) => key.length === 1 ? key.toLowerCase() : key;
|
|
81
78
|
/** One internal lookup token per binding: characters and physical codes never collide. */
|
|
82
79
|
const keyToken = (key) => `key:${normalize(key)}`;
|
|
83
80
|
const codeToken = (code) => `code:${code}`;
|
|
84
81
|
const bindingToken = (binding) => typeof binding === "string" ? keyToken(binding) : codeToken(binding.code);
|
|
82
|
+
/** How a binding reads in a lint: the character quoted, a physical key by its code. */
|
|
83
|
+
const bindingLabel = (binding) => typeof binding === "string" ? JSON.stringify(normalize(binding)) : binding.code;
|
|
84
|
+
const labelsOf = (flat) => [...new Set(Object.values(flat).flatMap((keys) => keys.map(bindingLabel)))];
|
|
85
85
|
/**
|
|
86
|
-
* Starts tracking bound keys on `host`.
|
|
86
|
+
* Starts tracking bound keys on `host`, usually `window`, until `dispose()`.
|
|
87
|
+
* When the window loses focus every held action is released. Each call is
|
|
88
|
+
* its own device: build one per source (one `Controls` merge, one player
|
|
89
|
+
* of a pool). Use {@link scripted} for tests and headless runs, and
|
|
90
|
+
* {@link presses} to capture an unbound key on a settings screen.
|
|
87
91
|
*/
|
|
88
|
-
export const actions = (host,
|
|
92
|
+
export const actions = (host, initial, options = {}) => {
|
|
89
93
|
const preventDefault = options.preventDefault ?? true;
|
|
90
|
-
|
|
94
|
+
// Fixed at creation: a rebind swaps keys, never the actions. Vector
|
|
95
|
+
// actions are tracked as their four directions.
|
|
96
|
+
const names = Object.keys(flatten(initial));
|
|
97
|
+
let bindings = flatten(initial);
|
|
91
98
|
const actionsByToken = new Map();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
bound.
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
const index = () => {
|
|
100
|
+
actionsByToken.clear();
|
|
101
|
+
for (const name of names) {
|
|
102
|
+
for (const binding of bindings[name]) {
|
|
103
|
+
const token = bindingToken(binding);
|
|
104
|
+
const bound = actionsByToken.get(token);
|
|
105
|
+
if (bound)
|
|
106
|
+
bound.push(name);
|
|
107
|
+
else
|
|
108
|
+
actionsByToken.set(token, [name]);
|
|
109
|
+
}
|
|
100
110
|
}
|
|
101
|
-
}
|
|
102
|
-
|
|
111
|
+
};
|
|
112
|
+
index();
|
|
113
|
+
/**
|
|
114
|
+
* Each held token and the actions it holds: those bound to it when it went
|
|
115
|
+
* down that are still bound to it. A token stays here while held even if a
|
|
116
|
+
* rebind unbound it, so its release is still seen.
|
|
117
|
+
*/
|
|
118
|
+
const heldTokens = new Map();
|
|
103
119
|
/**
|
|
104
120
|
* The character token each physical key produced when it went down, so its
|
|
105
121
|
* release matches even if a modifier changed the character meanwhile
|
|
@@ -123,7 +139,7 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
123
139
|
handled = true;
|
|
124
140
|
if (event.repeat || heldTokens.has(token))
|
|
125
141
|
continue;
|
|
126
|
-
heldTokens.
|
|
142
|
+
heldTokens.set(token, new Set(bound));
|
|
127
143
|
for (const name of bound)
|
|
128
144
|
pressed.add(name);
|
|
129
145
|
}
|
|
@@ -140,16 +156,17 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
140
156
|
tokens.push(codeToken(event.code));
|
|
141
157
|
}
|
|
142
158
|
for (const token of tokens) {
|
|
143
|
-
const
|
|
144
|
-
if (!
|
|
159
|
+
const holding = heldTokens.get(token);
|
|
160
|
+
if (!holding)
|
|
145
161
|
continue;
|
|
146
|
-
|
|
162
|
+
heldTokens.delete(token);
|
|
163
|
+
for (const name of holding)
|
|
147
164
|
released.add(name);
|
|
148
165
|
}
|
|
149
166
|
};
|
|
150
167
|
const onBlur = () => {
|
|
151
|
-
for (const
|
|
152
|
-
for (const name of
|
|
168
|
+
for (const holding of heldTokens.values()) {
|
|
169
|
+
for (const name of holding)
|
|
153
170
|
released.add(name);
|
|
154
171
|
}
|
|
155
172
|
heldTokens.clear();
|
|
@@ -160,17 +177,19 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
160
177
|
host.addEventListener("blur", onBlur);
|
|
161
178
|
const isHeld = (name) => {
|
|
162
179
|
for (const binding of bindings[name]) {
|
|
163
|
-
if (heldTokens.
|
|
180
|
+
if (heldTokens.get(bindingToken(binding))?.has(name))
|
|
164
181
|
return true;
|
|
165
182
|
}
|
|
166
183
|
return false;
|
|
167
184
|
};
|
|
168
|
-
|
|
185
|
+
let last = {};
|
|
186
|
+
const live = {
|
|
187
|
+
[boundKeys]: () => labelsOf(bindings),
|
|
169
188
|
snapshot() {
|
|
170
|
-
const
|
|
189
|
+
const states = {};
|
|
171
190
|
for (const name of names) {
|
|
172
191
|
const held = isHeld(name);
|
|
173
|
-
|
|
192
|
+
states[name] = {
|
|
174
193
|
held,
|
|
175
194
|
pressed: pressed.has(name),
|
|
176
195
|
released: released.has(name) && !held
|
|
@@ -178,7 +197,24 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
178
197
|
}
|
|
179
198
|
pressed.clear();
|
|
180
199
|
released.clear();
|
|
181
|
-
|
|
200
|
+
last = states;
|
|
201
|
+
return assemble(initial, (name) => states[name], anyUsed(states));
|
|
202
|
+
},
|
|
203
|
+
[flatStates]: () => last,
|
|
204
|
+
rebind(next) {
|
|
205
|
+
const before = names.filter(isHeld);
|
|
206
|
+
bindings = flatten(next);
|
|
207
|
+
index();
|
|
208
|
+
// A held key keeps only the actions still bound to it; new ones wait for a fresh press.
|
|
209
|
+
for (const [token, holding] of heldTokens) {
|
|
210
|
+
const bound = actionsByToken.get(token) ?? [];
|
|
211
|
+
for (const name of holding)
|
|
212
|
+
if (!bound.includes(name))
|
|
213
|
+
holding.delete(name);
|
|
214
|
+
}
|
|
215
|
+
for (const name of before)
|
|
216
|
+
if (!isHeld(name))
|
|
217
|
+
released.add(name);
|
|
182
218
|
},
|
|
183
219
|
dispose() {
|
|
184
220
|
host.removeEventListener("keydown", onKeyDown);
|
|
@@ -186,6 +222,42 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
186
222
|
host.removeEventListener("blur", onBlur);
|
|
187
223
|
}
|
|
188
224
|
};
|
|
225
|
+
return live;
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Starts collecting every key press on `host`, whatever the bindings, for a
|
|
229
|
+
* settings screen that waits for the key to bind. Use {@link actions} for
|
|
230
|
+
* gameplay. It never calls `preventDefault()`.
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```ts
|
|
234
|
+
* const presses = Keyboard.presses(window)
|
|
235
|
+
*
|
|
236
|
+
* // While the settings screen waits for the new jump key:
|
|
237
|
+
* const press = presses.snapshot()[0]
|
|
238
|
+
* if (press !== undefined) {
|
|
239
|
+
* input.rebind({ ...current, jump: [press.code === null ? press.key : Keyboard.code(press.code)] })
|
|
240
|
+
* }
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
export const presses = (host) => {
|
|
244
|
+
let pending = [];
|
|
245
|
+
const onKeyDown = (event) => {
|
|
246
|
+
if (event.repeat)
|
|
247
|
+
return;
|
|
248
|
+
pending.push({ key: event.key, code: event.code ?? null });
|
|
249
|
+
};
|
|
250
|
+
host.addEventListener("keydown", onKeyDown);
|
|
251
|
+
return {
|
|
252
|
+
snapshot() {
|
|
253
|
+
const snapshot = pending;
|
|
254
|
+
pending = [];
|
|
255
|
+
return snapshot;
|
|
256
|
+
},
|
|
257
|
+
dispose() {
|
|
258
|
+
host.removeEventListener("keydown", onKeyDown);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
189
261
|
};
|
|
190
262
|
/**
|
|
191
263
|
* Plays `timeline`: before the snapshot at index `frame`, every entry for
|
|
@@ -193,7 +265,7 @@ export const actions = (host, bindings, options = {}) => {
|
|
|
193
265
|
* release, like keys; pressing an action already held is not a new press.
|
|
194
266
|
*/
|
|
195
267
|
export const scripted = (bindings, timeline) => {
|
|
196
|
-
const names = Object.keys(bindings);
|
|
268
|
+
const names = Object.keys(flatten(bindings));
|
|
197
269
|
const byFrame = new Map();
|
|
198
270
|
for (const entry of timeline) {
|
|
199
271
|
const entries = byFrame.get(entry.frame);
|
|
@@ -204,34 +276,49 @@ export const scripted = (bindings, timeline) => {
|
|
|
204
276
|
}
|
|
205
277
|
const held = new Set();
|
|
206
278
|
let frame = 0;
|
|
207
|
-
|
|
279
|
+
let last = {};
|
|
280
|
+
const played = {
|
|
281
|
+
[boundKeys]: () => labelsOf(flatten(bindings)),
|
|
208
282
|
snapshot() {
|
|
209
283
|
const pressed = new Set();
|
|
210
284
|
const released = new Set();
|
|
211
285
|
for (const entry of byFrame.get(frame) ?? []) {
|
|
286
|
+
const releases = new Set(entry.release ?? []);
|
|
212
287
|
for (const name of entry.press ?? []) {
|
|
288
|
+
if (held.has(name) && releases.has(name)) {
|
|
289
|
+
// Released and pressed again within the frame.
|
|
290
|
+
releases.delete(name);
|
|
291
|
+
released.add(name);
|
|
292
|
+
pressed.add(name);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
213
295
|
// A press of a held action is not a new press, as with a live
|
|
214
296
|
// keyboard's auto-repeat.
|
|
215
297
|
if (!held.has(name))
|
|
216
298
|
pressed.add(name);
|
|
217
299
|
held.add(name);
|
|
218
300
|
}
|
|
219
|
-
for (const name of
|
|
301
|
+
for (const name of releases) {
|
|
220
302
|
if (held.delete(name))
|
|
221
303
|
released.add(name);
|
|
222
304
|
}
|
|
223
305
|
}
|
|
224
306
|
frame += 1;
|
|
225
|
-
const
|
|
307
|
+
const states = {};
|
|
226
308
|
for (const name of names) {
|
|
227
309
|
const isHeld = held.has(name);
|
|
228
|
-
|
|
310
|
+
states[name] = { held: isHeld, pressed: pressed.has(name), released: released.has(name) && !isHeld };
|
|
229
311
|
}
|
|
230
|
-
|
|
312
|
+
last = states;
|
|
313
|
+
return assemble(bindings, (name) => states[name], anyUsed(states));
|
|
231
314
|
},
|
|
315
|
+
[flatStates]: () => last,
|
|
316
|
+
// A timeline names actions, not keys, so new keys change nothing.
|
|
317
|
+
rebind() { },
|
|
232
318
|
dispose() { },
|
|
233
319
|
frames: () => frame
|
|
234
320
|
};
|
|
321
|
+
return played;
|
|
235
322
|
};
|
|
236
323
|
/**
|
|
237
324
|
* Wraps `actions` and records, for every snapshot, the actions pressed and
|
|
@@ -239,19 +326,28 @@ export const scripted = (bindings, timeline) => {
|
|
|
239
326
|
*/
|
|
240
327
|
export const recording = (actions) => {
|
|
241
328
|
const entries = [];
|
|
329
|
+
let wasHeld = new Set();
|
|
242
330
|
let frame = 0;
|
|
243
|
-
|
|
331
|
+
const recorded = {
|
|
332
|
+
[boundKeys]: () => actions[boundKeys]?.() ?? [],
|
|
244
333
|
snapshot() {
|
|
245
334
|
const snapshot = actions.snapshot();
|
|
335
|
+
// Each direction of a vector action, from the keyboard this wraps.
|
|
336
|
+
const states = actions[flatStates]?.() ?? snapshot.actions;
|
|
246
337
|
const press = [];
|
|
247
338
|
const release = [];
|
|
248
|
-
|
|
249
|
-
|
|
339
|
+
const held = new Set();
|
|
340
|
+
for (const name of Object.keys(states)) {
|
|
341
|
+
const state = states[name];
|
|
342
|
+
if (state.held)
|
|
343
|
+
held.add(name);
|
|
250
344
|
if (state.pressed)
|
|
251
345
|
press.push(name);
|
|
252
|
-
|
|
346
|
+
// A press of an action held at the previous snapshot means it was released in between.
|
|
347
|
+
if (state.released || (state.pressed && wasHeld.has(name)))
|
|
253
348
|
release.push(name);
|
|
254
349
|
}
|
|
350
|
+
wasHeld = held;
|
|
255
351
|
if (press.length > 0 || release.length > 0) {
|
|
256
352
|
entries.push({
|
|
257
353
|
frame,
|
|
@@ -262,21 +358,28 @@ export const recording = (actions) => {
|
|
|
262
358
|
frame += 1;
|
|
263
359
|
return snapshot;
|
|
264
360
|
},
|
|
361
|
+
[flatStates]: () => actions[flatStates]?.() ?? {},
|
|
362
|
+
rebind(bindings) {
|
|
363
|
+
actions.rebind(bindings);
|
|
364
|
+
},
|
|
265
365
|
dispose() {
|
|
266
366
|
actions.dispose();
|
|
267
367
|
},
|
|
268
368
|
timeline: () => [...entries]
|
|
269
369
|
};
|
|
370
|
+
return recorded;
|
|
270
371
|
};
|
|
271
372
|
/**
|
|
272
373
|
* Validates untrusted data, such as a parsed JSON file, as a timeline for
|
|
273
374
|
* `bindings`: an array of entries with a non-negative integer `frame` and
|
|
274
|
-
* optional `press`/`release` arrays of bound action names
|
|
375
|
+
* optional `press`/`release` arrays of bound action names (a vector action
|
|
376
|
+
* by direction, `"move.right"`).
|
|
275
377
|
*/
|
|
276
378
|
export const parseTimeline = (bindings, data) => {
|
|
277
379
|
const invalid = (path, message) => Result.failure({ _tag: "InvalidTimeline", path, message });
|
|
278
380
|
if (!Array.isArray(data))
|
|
279
381
|
return invalid("", "expected an array of entries");
|
|
382
|
+
const flat = flatten(bindings);
|
|
280
383
|
const entries = [];
|
|
281
384
|
for (let index = 0; index < data.length; index++) {
|
|
282
385
|
const entry = data[index];
|
|
@@ -295,8 +398,8 @@ export const parseTimeline = (bindings, data) => {
|
|
|
295
398
|
const names = [];
|
|
296
399
|
for (let offset = 0; offset < value.length; offset++) {
|
|
297
400
|
const name = value[offset];
|
|
298
|
-
if (typeof name !== "string" || !Object.prototype.hasOwnProperty.call(
|
|
299
|
-
return invalid(`${path}.${field}[${offset}]`, `expected one of ${Object.keys(
|
|
401
|
+
if (typeof name !== "string" || !Object.prototype.hasOwnProperty.call(flat, name)) {
|
|
402
|
+
return invalid(`${path}.${field}[${offset}]`, `expected one of ${Object.keys(flat).join(", ")}`);
|
|
300
403
|
}
|
|
301
404
|
names.push(name);
|
|
302
405
|
}
|
|
@@ -316,4 +419,67 @@ export const parseTimeline = (bindings, data) => {
|
|
|
316
419
|
}
|
|
317
420
|
return Result.success(entries);
|
|
318
421
|
};
|
|
422
|
+
/**
|
|
423
|
+
* Validates untrusted data, such as saved settings parsed from JSON, as new
|
|
424
|
+
* keys for `bindings`: an object with exactly the same action names, each
|
|
425
|
+
* mapped to a non-empty array of characters or `{ code }` physical keys
|
|
426
|
+
* (for a vector action, an object with such keys for `up`, `down`, `left`,
|
|
427
|
+
* and `right`, as `Keyboard.vector` saves).
|
|
428
|
+
* Pass the result to {@link Actions.rebind}; on failure, keep the defaults.
|
|
429
|
+
*
|
|
430
|
+
* @example
|
|
431
|
+
* ```ts
|
|
432
|
+
* const saved = Keyboard.parseRebinding(bindings, JSON.parse(stored))
|
|
433
|
+
* if (saved.ok) input.rebind(saved.value)
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
export const parseRebinding = (bindings, data) => {
|
|
437
|
+
const invalid = (path, message) => Result.failure({ _tag: "InvalidRebinding", path, message });
|
|
438
|
+
if (typeof data !== "object" || data === null || Array.isArray(data))
|
|
439
|
+
return invalid("", "expected an object of action names");
|
|
440
|
+
const fields = data;
|
|
441
|
+
const names = Object.keys(bindings);
|
|
442
|
+
for (const name of Object.keys(fields)) {
|
|
443
|
+
if (!names.includes(name))
|
|
444
|
+
return invalid(name, `unknown action, expected one of ${names.join(", ")}`);
|
|
445
|
+
}
|
|
446
|
+
const keysAt = (value, path) => {
|
|
447
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
448
|
+
return invalid(path, "expected a non-empty array of keys");
|
|
449
|
+
const keys = [];
|
|
450
|
+
for (let offset = 0; offset < value.length; offset++) {
|
|
451
|
+
const key = value[offset];
|
|
452
|
+
if (typeof key === "string" && key.length > 0)
|
|
453
|
+
keys.push(key);
|
|
454
|
+
else if (typeof key === "object" && key !== null && typeof key.code === "string" && key.code.length > 0) {
|
|
455
|
+
keys.push({ code: key.code });
|
|
456
|
+
}
|
|
457
|
+
else
|
|
458
|
+
return invalid(`${path}[${offset}]`, "expected a key character or { code }");
|
|
459
|
+
}
|
|
460
|
+
return Result.success(keys);
|
|
461
|
+
};
|
|
462
|
+
const rebinding = {};
|
|
463
|
+
for (const name of names) {
|
|
464
|
+
const value = fields[name];
|
|
465
|
+
if (isVectorBinding(bindings[name])) {
|
|
466
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
467
|
+
return invalid(name, "expected { up, down, left, right } keys for a vector action");
|
|
468
|
+
const parts = {};
|
|
469
|
+
for (const direction of directions) {
|
|
470
|
+
const keys = keysAt(value[direction], `${name}.${direction}`);
|
|
471
|
+
if (!keys.ok)
|
|
472
|
+
return keys;
|
|
473
|
+
parts[direction] = keys.value;
|
|
474
|
+
}
|
|
475
|
+
rebinding[name] = vector(parts);
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
const keys = keysAt(value, name);
|
|
479
|
+
if (!keys.ok)
|
|
480
|
+
return keys;
|
|
481
|
+
rebinding[name] = keys.value;
|
|
482
|
+
}
|
|
483
|
+
return Result.success(rebinding);
|
|
484
|
+
};
|
|
319
485
|
//# sourceMappingURL=Keyboard.js.map
|
package/dist/Keyboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
|