zx-kit 0.13.0 → 0.15.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/input.d.ts +12 -6
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +121 -6
- package/dist/input.js.map +1 -1
- package/package.json +1 -1
package/dist/input.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export type Direction = 'up' | 'down' | 'left' | 'right';
|
|
|
5
5
|
* Idempotent — safe to call multiple times. Timing params are always updated;
|
|
6
6
|
* listeners are only attached on the first call.
|
|
7
7
|
* Arrow keys drive movement; `F`/`f` = flag; `P`/`p` = pause; `Ctrl+Shift+B` = debug toggle.
|
|
8
|
+
* Gamepad support is automatic — `tickMovement` polls the Gamepad API each frame.
|
|
9
|
+
* D-pad and left analog stick map to directions; A = flag, Start = pause, Y = debug.
|
|
8
10
|
*
|
|
9
11
|
* @param repeatDelay - Milliseconds before auto-repeat starts after initial press (default `150`)
|
|
10
12
|
* @param repeatInterval - Milliseconds between repeat ticks while key is held (default `80`)
|
|
@@ -20,15 +22,19 @@ export declare function initInput(repeatDelay?: number, repeatInterval?: number)
|
|
|
20
22
|
* Returns a direction immediately on first press; repeats every `repeatInterval` ms while held.
|
|
21
23
|
* Returns `null` when no movement should occur this frame.
|
|
22
24
|
*
|
|
23
|
-
* @param dtMs
|
|
25
|
+
* @param dtMs - Frame delta in milliseconds
|
|
26
|
+
* @param analogStepMs - When > 0, analog stick input fires at most once per this many ms
|
|
27
|
+
* instead of using the standard key-repeat rate. D-pad is unaffected.
|
|
28
|
+
* Default `0` = standard repeat for both D-pad and stick.
|
|
24
29
|
*
|
|
25
30
|
* @example
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
31
|
+
* // Grid game — stick moves one cell per 220 ms; D-pad uses normal repeat
|
|
32
|
+
* const dir = tickMovement(dt, 220)
|
|
33
|
+
*
|
|
34
|
+
* // Shooter — stick moves continuously at full repeat rate (default)
|
|
35
|
+
* const dir = tickMovement(dt)
|
|
30
36
|
*/
|
|
31
|
-
export declare function tickMovement(dtMs: number): Direction | null;
|
|
37
|
+
export declare function tickMovement(dtMs: number, analogStepMs?: number): Direction | null;
|
|
32
38
|
/** Consumes and returns the `F` key flag event (flag/unflag a cell). Resets to `false` after read. */
|
|
33
39
|
export declare function consumeFlag(): boolean;
|
|
34
40
|
/** Consumes and returns the `Ctrl+Shift+B` debug toggle event. Resets to `false` after read. */
|
package/dist/input.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AA8GxD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,WAAW,SAAM,EAAE,cAAc,SAAK,GAAG,IAAI,CAoCtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,SAAS,GAAG,IAAI,CA4B7E;AAED,sGAAsG;AACtG,wBAAgB,WAAW,IAAI,OAAO,CAA+D;AAErG,gGAAgG;AAChG,wBAAgB,YAAY,IAAI,OAAO,CAA8D;AAErG,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,OAAO,CAA8D;AAErG;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAA6D;AAErG;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAyB;AAErE;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAgBjC"}
|
package/dist/input.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
const DIR_KEYS = {
|
|
2
2
|
ArrowUp: 'up', ArrowDown: 'down', ArrowLeft: 'left', ArrowRight: 'right',
|
|
3
3
|
};
|
|
4
|
+
const ARROW_KEYS = {
|
|
5
|
+
up: 'ArrowUp', down: 'ArrowDown', left: 'ArrowLeft', right: 'ArrowRight',
|
|
6
|
+
};
|
|
4
7
|
const held = new Set();
|
|
5
8
|
let pendingFlag = false;
|
|
6
9
|
let pendingDebug = false;
|
|
@@ -13,11 +16,101 @@ let pendingImmediate = null;
|
|
|
13
16
|
let _repeatDelay = 150;
|
|
14
17
|
let _repeatInterval = 80;
|
|
15
18
|
let inputInitialized = false;
|
|
19
|
+
// ── Gamepad state ──────────────────────────────────────────────────────────────
|
|
20
|
+
const STICK_DEAD = 0.35;
|
|
21
|
+
let padPrevDir = null;
|
|
22
|
+
let padPrevBtnFlag = false;
|
|
23
|
+
let padPrevBtnPause = false;
|
|
24
|
+
let padPrevBtnDebug = false;
|
|
25
|
+
let padPrevAny = false;
|
|
26
|
+
let padFromStick = false; // true when current repeatDir came from analog stick
|
|
27
|
+
let analogCooldown = 0; // ms remaining before next analog-stick step is allowed
|
|
28
|
+
function pollGamepad() {
|
|
29
|
+
if (typeof navigator === 'undefined')
|
|
30
|
+
return;
|
|
31
|
+
const pads = navigator.getGamepads?.();
|
|
32
|
+
if (!pads)
|
|
33
|
+
return;
|
|
34
|
+
for (const pad of pads) {
|
|
35
|
+
if (!pad?.connected)
|
|
36
|
+
continue;
|
|
37
|
+
// D-pad (standard mapping: buttons 12-15) takes priority over analog stick
|
|
38
|
+
let dir = null;
|
|
39
|
+
let fromStick = false;
|
|
40
|
+
if (pad.buttons[12]?.pressed)
|
|
41
|
+
dir = 'up';
|
|
42
|
+
else if (pad.buttons[13]?.pressed)
|
|
43
|
+
dir = 'down';
|
|
44
|
+
else if (pad.buttons[14]?.pressed)
|
|
45
|
+
dir = 'left';
|
|
46
|
+
else if (pad.buttons[15]?.pressed)
|
|
47
|
+
dir = 'right';
|
|
48
|
+
// Left analog stick with deadzone — dominant axis wins
|
|
49
|
+
if (dir === null) {
|
|
50
|
+
const ax = pad.axes[0] ?? 0;
|
|
51
|
+
const ay = pad.axes[1] ?? 0;
|
|
52
|
+
if (Math.abs(ax) > STICK_DEAD || Math.abs(ay) > STICK_DEAD) {
|
|
53
|
+
if (Math.abs(ax) >= Math.abs(ay))
|
|
54
|
+
dir = ax < 0 ? 'left' : 'right';
|
|
55
|
+
else
|
|
56
|
+
dir = ay < 0 ? 'up' : 'down';
|
|
57
|
+
fromStick = true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Synthesize direction changes into the existing keyboard repeat state machine
|
|
61
|
+
if (dir !== padPrevDir) {
|
|
62
|
+
if (padPrevDir !== null && repeatDir === padPrevDir && !held.has(ARROW_KEYS[padPrevDir])) {
|
|
63
|
+
repeatDir = null;
|
|
64
|
+
repeatPhase = 'idle';
|
|
65
|
+
}
|
|
66
|
+
if (dir !== null) {
|
|
67
|
+
pendingImmediate = dir;
|
|
68
|
+
repeatDir = dir;
|
|
69
|
+
repeatPhase = 'delay';
|
|
70
|
+
repeatTimer = _repeatDelay;
|
|
71
|
+
padFromStick = fromStick;
|
|
72
|
+
analogCooldown = 0;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
padFromStick = false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
padPrevDir = dir;
|
|
79
|
+
// Action buttons — rising-edge detection (A=flag, Start=pause, Y=debug)
|
|
80
|
+
const btnFlag = !!(pad.buttons[0]?.pressed);
|
|
81
|
+
const btnPause = !!(pad.buttons[9]?.pressed);
|
|
82
|
+
const btnDebug = !!(pad.buttons[3]?.pressed);
|
|
83
|
+
const btnAny = pad.buttons.some(b => b?.pressed);
|
|
84
|
+
if (btnFlag && !padPrevBtnFlag)
|
|
85
|
+
pendingFlag = true;
|
|
86
|
+
if (btnPause && !padPrevBtnPause)
|
|
87
|
+
pendingPause = true;
|
|
88
|
+
if (btnDebug && !padPrevBtnDebug)
|
|
89
|
+
pendingDebug = true;
|
|
90
|
+
if (btnAny && !padPrevAny)
|
|
91
|
+
pendingAnyKey = true;
|
|
92
|
+
padPrevBtnFlag = btnFlag;
|
|
93
|
+
padPrevBtnPause = btnPause;
|
|
94
|
+
padPrevBtnDebug = btnDebug;
|
|
95
|
+
padPrevAny = btnAny;
|
|
96
|
+
return; // first connected gamepad only
|
|
97
|
+
}
|
|
98
|
+
// No gamepad connected — release any direction that came from a pad
|
|
99
|
+
if (padPrevDir !== null) {
|
|
100
|
+
if (repeatDir === padPrevDir && !held.has(ARROW_KEYS[padPrevDir])) {
|
|
101
|
+
repeatDir = null;
|
|
102
|
+
repeatPhase = 'idle';
|
|
103
|
+
}
|
|
104
|
+
padPrevDir = null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
16
107
|
/**
|
|
17
108
|
* Attaches global `keydown`/`keyup` listeners and configures key-repeat timing.
|
|
18
109
|
* Idempotent — safe to call multiple times. Timing params are always updated;
|
|
19
110
|
* listeners are only attached on the first call.
|
|
20
111
|
* Arrow keys drive movement; `F`/`f` = flag; `P`/`p` = pause; `Ctrl+Shift+B` = debug toggle.
|
|
112
|
+
* Gamepad support is automatic — `tickMovement` polls the Gamepad API each frame.
|
|
113
|
+
* D-pad and left analog stick map to directions; A = flag, Start = pause, Y = debug.
|
|
21
114
|
*
|
|
22
115
|
* @param repeatDelay - Milliseconds before auto-repeat starts after initial press (default `150`)
|
|
23
116
|
* @param repeatInterval - Milliseconds between repeat ticks while key is held (default `80`)
|
|
@@ -68,21 +161,36 @@ export function initInput(repeatDelay = 150, repeatInterval = 80) {
|
|
|
68
161
|
* Returns a direction immediately on first press; repeats every `repeatInterval` ms while held.
|
|
69
162
|
* Returns `null` when no movement should occur this frame.
|
|
70
163
|
*
|
|
71
|
-
* @param dtMs
|
|
164
|
+
* @param dtMs - Frame delta in milliseconds
|
|
165
|
+
* @param analogStepMs - When > 0, analog stick input fires at most once per this many ms
|
|
166
|
+
* instead of using the standard key-repeat rate. D-pad is unaffected.
|
|
167
|
+
* Default `0` = standard repeat for both D-pad and stick.
|
|
72
168
|
*
|
|
73
169
|
* @example
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
170
|
+
* // Grid game — stick moves one cell per 220 ms; D-pad uses normal repeat
|
|
171
|
+
* const dir = tickMovement(dt, 220)
|
|
172
|
+
*
|
|
173
|
+
* // Shooter — stick moves continuously at full repeat rate (default)
|
|
174
|
+
* const dir = tickMovement(dt)
|
|
78
175
|
*/
|
|
79
|
-
export function tickMovement(dtMs) {
|
|
176
|
+
export function tickMovement(dtMs, analogStepMs = 0) {
|
|
177
|
+
pollGamepad();
|
|
178
|
+
analogCooldown = Math.max(0, analogCooldown - dtMs);
|
|
80
179
|
if (pendingImmediate !== null) {
|
|
81
180
|
const d = pendingImmediate;
|
|
82
181
|
pendingImmediate = null;
|
|
182
|
+
if (padFromStick && analogStepMs > 0)
|
|
183
|
+
analogCooldown = analogStepMs;
|
|
83
184
|
return d;
|
|
84
185
|
}
|
|
85
186
|
if (repeatDir !== null && repeatPhase !== 'idle') {
|
|
187
|
+
if (padFromStick && analogStepMs > 0) {
|
|
188
|
+
if (analogCooldown <= 0) {
|
|
189
|
+
analogCooldown = analogStepMs;
|
|
190
|
+
return repeatDir;
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
86
194
|
repeatTimer -= dtMs;
|
|
87
195
|
if (repeatTimer <= 0) {
|
|
88
196
|
repeatTimer += _repeatInterval;
|
|
@@ -131,5 +239,12 @@ export function resetInput() {
|
|
|
131
239
|
repeatDir = null;
|
|
132
240
|
repeatPhase = 'idle';
|
|
133
241
|
pendingImmediate = null;
|
|
242
|
+
padPrevDir = null;
|
|
243
|
+
padPrevBtnFlag = false;
|
|
244
|
+
padPrevBtnPause = false;
|
|
245
|
+
padPrevBtnDebug = false;
|
|
246
|
+
padPrevAny = false;
|
|
247
|
+
padFromStick = false;
|
|
248
|
+
analogCooldown = 0;
|
|
134
249
|
}
|
|
135
250
|
//# sourceMappingURL=input.js.map
|
package/dist/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAGA,MAAM,QAAQ,GAA8B;IAC1C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;CACzE,CAAA;AAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;AAC9B,IAAI,WAAW,GAAG,KAAK,CAAA;AACvB,IAAI,YAAY,GAAG,KAAK,CAAA;AACxB,IAAI,YAAY,GAAG,KAAK,CAAA;AACxB,IAAI,aAAa,GAAG,KAAK,CAAA;AAEzB,IAAI,SAAS,GAAqB,IAAI,CAAA;AACtC,IAAI,WAAW,GAAG,CAAC,CAAA;AACnB,IAAI,WAAW,GAAgC,MAAM,CAAA;AACrD,IAAI,gBAAgB,GAAqB,IAAI,CAAA;AAC7C,IAAI,YAAY,GAAG,GAAG,CAAA;AACtB,IAAI,eAAe,GAAG,EAAE,CAAA;AACxB,IAAI,gBAAgB,GAAG,KAAK,CAAA;AAE5B
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|