@vgai/engine 0.5.15 → 0.5.17
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/adapter/adapter-module.d.ts +229 -33
- package/dist/adapter/adapter-module.d.ts.map +1 -1
- package/dist/adapter/adapter-module.js +222 -50
- package/dist/adapter/authoring-seam-contract.d.ts +530 -0
- package/dist/adapter/authoring-seam-contract.d.ts.map +1 -0
- package/dist/adapter/authoring-seam-contract.js +162 -0
- package/dist/adapter/authoring.d.ts +237 -50
- package/dist/adapter/authoring.d.ts.map +1 -1
- package/dist/adapter/authoring.js +2 -1
- package/dist/adapter/entrypoint-selection-source.d.ts +35 -0
- package/dist/adapter/entrypoint-selection-source.d.ts.map +1 -0
- package/dist/adapter/entrypoint-selection-source.js +151 -0
- package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts +7 -3
- package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts.map +1 -1
- package/dist/adapter/finders/scenes-from-entrypoint-selection.js +145 -27
- package/dist/adapter/first-party-systems.d.ts +13 -3
- package/dist/adapter/first-party-systems.d.ts.map +1 -1
- package/dist/adapter/first-party-systems.js +10 -3
- package/dist/adapter/index.d.ts +7 -2
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +4 -0
- package/dist/adapter/ingest/contract-system-adapters.d.ts +1 -1
- package/dist/adapter/ingest/contract-system-adapters.d.ts.map +1 -1
- package/dist/adapter/ingest/contract-system-adapters.js +13 -25
- package/dist/adapter/ingest/game-contract-seams.d.ts +214 -0
- package/dist/adapter/ingest/game-contract-seams.d.ts.map +1 -0
- package/dist/adapter/ingest/game-contract-seams.js +62 -0
- package/dist/adapter/ingest/game-contract.d.ts +5 -3
- package/dist/adapter/ingest/game-contract.d.ts.map +1 -1
- package/dist/adapter/ingest/game-contract.js +4 -1
- package/dist/adapter/ingest/merge-debug-adapters.d.ts +52 -0
- package/dist/adapter/ingest/merge-debug-adapters.d.ts.map +1 -0
- package/dist/adapter/ingest/merge-debug-adapters.js +141 -0
- package/dist/adapter/ingest/observation-debug-adapter.d.ts +56 -0
- package/dist/adapter/ingest/observation-debug-adapter.d.ts.map +1 -0
- package/dist/adapter/ingest/observation-debug-adapter.js +131 -0
- package/dist/adapter/ingest/scene-capture.d.ts +38 -13
- package/dist/adapter/ingest/scene-capture.d.ts.map +1 -1
- package/dist/adapter/ingest/scene-capture.js +101 -24
- package/dist/adapter/ingest/visible-capture-window.d.ts +22 -5
- package/dist/adapter/ingest/visible-capture-window.d.ts.map +1 -1
- package/dist/adapter/ingest/visible-capture-window.js +46 -7
- package/dist/adapter/native-debug-module.d.ts +43 -0
- package/dist/adapter/native-debug-module.d.ts.map +1 -0
- package/dist/adapter/native-debug-module.js +230 -0
- package/dist/adapter/object3d-authoring-subject.d.ts +32 -0
- package/dist/adapter/object3d-authoring-subject.d.ts.map +1 -0
- package/dist/adapter/object3d-authoring-subject.js +25 -0
- package/dist/adapter/root-adapter.d.ts +25 -56
- package/dist/adapter/root-adapter.d.ts.map +1 -1
- package/dist/adapter/root-adapter.js +4 -20
- package/dist/adapter/root-seam-contract.d.ts +129 -0
- package/dist/adapter/root-seam-contract.d.ts.map +1 -0
- package/dist/adapter/root-seam-contract.js +37 -0
- package/dist/adapter/seam-evidence.d.ts +118 -0
- package/dist/adapter/seam-evidence.d.ts.map +1 -0
- package/dist/adapter/seam-evidence.js +231 -0
- package/dist/adapter/setup-three-root-adapter.d.ts +2 -3
- package/dist/adapter/setup-three-root-adapter.d.ts.map +1 -1
- package/dist/adapter/setup-three-root-adapter.js +11 -12
- package/dist/adapter/system-adapter.d.ts +6 -1
- package/dist/adapter/system-adapter.d.ts.map +1 -1
- package/dist/adapter/system-seam-contract.d.ts +354 -0
- package/dist/adapter/system-seam-contract.d.ts.map +1 -0
- package/dist/adapter/system-seam-contract.js +95 -0
- package/dist/animation/xstate-animation-binding.d.ts +6 -0
- package/dist/animation/xstate-animation-binding.d.ts.map +1 -1
- package/dist/animation/xstate-animation-binding.js +142 -4
- package/dist/asset-formats/collider.d.ts +1 -1
- package/dist/asset-formats/mesh.d.ts +2 -2
- package/dist/asset-formats/particles.d.ts +1 -1
- package/dist/canvas-react/engine-bridge.d.ts +6 -6
- package/dist/canvas-react/engine-bridge.d.ts.map +1 -1
- package/dist/canvas-react/engine-bridge.js +2 -2
- package/dist/canvas-react/index.d.ts +2 -2
- package/dist/canvas-react/index.d.ts.map +1 -1
- package/dist/canvas-react/index.js +1 -1
- package/dist/canvas-react/pixi-react-adapter.d.ts +15 -9
- package/dist/canvas-react/pixi-react-adapter.d.ts.map +1 -1
- package/dist/canvas-react/pixi-react-adapter.js +129 -64
- package/dist/canvas-react/pixi-react-root-factory.d.ts.map +1 -1
- package/dist/canvas-react/pixi-react-root-factory.js +4 -0
- package/dist/canvas-react/world-context.d.ts +22 -12
- package/dist/canvas-react/world-context.d.ts.map +1 -1
- package/dist/canvas-react/world-context.js +12 -51
- package/dist/data/curve.d.ts +1 -1
- package/dist/data/curve.js +2 -2
- package/dist/dev/instruments.d.ts +4 -4
- package/dist/dev/instruments.js +4 -4
- package/dist/dev/register-render-vitals.d.ts +2 -2
- package/dist/dev/register-render-vitals.js +2 -2
- package/dist/dev/static-batch-advisor.d.ts +1 -1
- package/dist/dev/static-batch-advisor.js +2 -2
- package/dist/ecs/user-data.d.ts +5 -0
- package/dist/ecs/user-data.d.ts.map +1 -1
- package/dist/ecs/user-data.js +3 -0
- package/dist/input/input-manager.d.ts +64 -0
- package/dist/input/input-manager.d.ts.map +1 -1
- package/dist/input/input-manager.js +149 -0
- package/dist/manifest/load.d.ts +0 -3
- package/dist/manifest/load.d.ts.map +1 -1
- package/dist/manifest/load.js +0 -4
- package/dist/manifest/schema.d.ts +9 -11
- package/dist/manifest/schema.d.ts.map +1 -1
- package/dist/manifest/schema.js +2 -23
- package/dist/pixi/authoring.d.ts +33 -0
- package/dist/pixi/authoring.d.ts.map +1 -1
- package/dist/pixi/authoring.js +301 -2
- package/dist/pixi/ingest.d.ts +2 -1
- package/dist/pixi/ingest.d.ts.map +1 -1
- package/dist/pixi/ingest.js +4 -2
- package/dist/pixi/scene-capture.d.ts +9 -1
- package/dist/pixi/scene-capture.d.ts.map +1 -1
- package/dist/pixi/scene-capture.js +9 -6
- package/dist/react/world-state.d.ts +12 -0
- package/dist/react/world-state.d.ts.map +1 -1
- package/dist/react/world-state.js +14 -0
- package/dist/render/particles-factory.d.ts +13 -6
- package/dist/render/particles-factory.d.ts.map +1 -1
- package/dist/render/particles-factory.js +6 -3
- package/dist/render/soft-particle-depth.d.ts +3 -3
- package/dist/render/soft-particle-depth.d.ts.map +1 -1
- package/dist/render/soft-particle-depth.js +8 -13
- package/dist/runtime/create-runtime.d.ts +25 -62
- package/dist/runtime/create-runtime.d.ts.map +1 -1
- package/dist/runtime/create-runtime.js +58 -105
- package/dist/runtime/dev-build.d.ts +37 -0
- package/dist/runtime/dev-build.d.ts.map +1 -0
- package/dist/runtime/dev-build.js +49 -0
- package/dist/runtime/game.d.ts +38 -72
- package/dist/runtime/game.d.ts.map +1 -1
- package/dist/runtime/game.js +40 -55
- package/dist/runtime/mount-game.d.ts.map +1 -1
- package/dist/runtime/mount-game.js +12 -1
- package/dist/runtime/mount-manifest.d.ts +0 -13
- package/dist/runtime/mount-manifest.d.ts.map +1 -1
- package/dist/runtime/mount-manifest.js +5 -25
- package/dist/runtime/types.d.ts +18 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/setup/setup-renderer.d.ts +3 -4
- package/dist/setup/setup-renderer.d.ts.map +1 -1
- package/dist/setup/setup-renderer.js +3 -4
- package/dist/world3d-react/engine-bridge.d.ts +1 -1
- package/dist/world3d-react/engine-bridge.d.ts.map +1 -1
- package/dist/world3d-react/engine-bridge.js +29 -4
- package/dist/world3d-react/index.d.ts +1 -1
- package/dist/world3d-react/index.js +1 -1
- package/dist/world3d-react/r3f-adapter.d.ts +7 -0
- package/dist/world3d-react/r3f-adapter.d.ts.map +1 -1
- package/dist/world3d-react/r3f-adapter.js +132 -28
- package/dist/world3d-react/r3f-root-factory.d.ts.map +1 -1
- package/dist/world3d-react/r3f-root-factory.js +14 -0
- package/dist/world3d-react/rapier-physics-bridge.d.ts +4 -4
- package/dist/world3d-react/rapier-physics-bridge.js +3 -3
- package/dist/world3d-react/world-context.d.ts +52 -3
- package/dist/world3d-react/world-context.d.ts.map +1 -1
- package/dist/world3d-react/world-context.js +94 -64
- package/dist-config/config.js.map +1 -1
- package/package.json +1 -1
- package/schemas/engine-capabilities.json +8 -8
- package/schemas/vgai-project.schema.json +1 -6
- package/src/adapter/adapter-module.ts +405 -72
- package/src/adapter/authoring-seam-contract.ts +211 -0
- package/src/adapter/authoring.ts +242 -50
- package/src/adapter/entrypoint-selection-source.ts +159 -0
- package/src/adapter/finders/scenes-from-entrypoint-selection.ts +162 -36
- package/src/adapter/first-party-systems.ts +17 -3
- package/src/adapter/index.ts +51 -1
- package/src/adapter/ingest/contract-system-adapters.ts +26 -30
- package/src/adapter/ingest/game-contract-seams.ts +85 -0
- package/src/adapter/ingest/game-contract.ts +9 -4
- package/src/adapter/ingest/merge-debug-adapters.ts +193 -0
- package/src/adapter/ingest/observation-debug-adapter.ts +158 -0
- package/src/adapter/ingest/scene-capture.ts +126 -23
- package/src/adapter/ingest/visible-capture-window.ts +63 -9
- package/src/adapter/native-debug-module.ts +307 -0
- package/src/adapter/object3d-authoring-subject.ts +50 -0
- package/src/adapter/root-adapter.ts +25 -56
- package/src/adapter/root-seam-contract.ts +57 -0
- package/src/adapter/seam-evidence.ts +336 -0
- package/src/adapter/setup-three-root-adapter.ts +13 -15
- package/src/adapter/system-adapter.ts +6 -1
- package/src/adapter/system-seam-contract.ts +121 -0
- package/src/animation/xstate-animation-binding.ts +151 -4
- package/src/canvas-react/engine-bridge.ts +6 -6
- package/src/canvas-react/index.ts +2 -1
- package/src/canvas-react/pixi-react-adapter.tsx +143 -77
- package/src/canvas-react/pixi-react-root-factory.tsx +4 -0
- package/src/canvas-react/world-context.ts +26 -101
- package/src/data/curve.ts +2 -2
- package/src/dev/instruments.ts +4 -4
- package/src/dev/register-render-vitals.ts +2 -2
- package/src/dev/static-batch-advisor.ts +2 -2
- package/src/ecs/user-data.ts +5 -0
- package/src/input/input-manager.ts +145 -0
- package/src/manifest/load.ts +0 -7
- package/src/manifest/schema.ts +2 -25
- package/src/pixi/authoring.ts +329 -2
- package/src/pixi/ingest.ts +9 -2
- package/src/pixi/scene-capture.ts +20 -5
- package/src/react/world-state.tsx +15 -0
- package/src/render/particles-factory.ts +16 -6
- package/src/render/soft-particle-depth.ts +8 -13
- package/src/runtime/create-runtime.ts +79 -158
- package/src/runtime/dev-build.ts +49 -0
- package/src/runtime/game.ts +72 -113
- package/src/runtime/mount-game.ts +19 -1
- package/src/runtime/mount-manifest.ts +5 -37
- package/src/runtime/types.ts +22 -0
- package/src/setup/setup-renderer.ts +3 -4
- package/src/world3d-react/engine-bridge.ts +29 -4
- package/src/world3d-react/index.ts +1 -1
- package/src/world3d-react/r3f-adapter.tsx +140 -31
- package/src/world3d-react/r3f-root-factory.tsx +14 -0
- package/src/world3d-react/rapier-physics-bridge.tsx +4 -4
- package/src/world3d-react/world-context.ts +111 -87
- package/dist/runtime/dev-layers.d.ts +0 -34
- package/dist/runtime/dev-layers.d.ts.map +0 -1
- package/dist/runtime/dev-layers.js +0 -46
- package/src/runtime/dev-layers.ts +0 -46
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* the ONE game-scoped registry (`getDebugRegistry(host.game)`), so a
|
|
12
12
|
* component's effect can `ctx.debug.registerStateProvider(...)` and be
|
|
13
13
|
* visible to `vgai eval`/the editor's debug panels.
|
|
14
|
-
* 2. **`ctx.input` is the game-owned `InputManager
|
|
14
|
+
* 2. **`ctx.input` is the game-owned `InputManager` when a Game hosts the
|
|
15
|
+
* root** (`host.game.input` — the
|
|
15
16
|
* same instance every sibling root shares), and this module registers the
|
|
16
17
|
* per-world debug-registry seams (`setVirtualInputTarget`/
|
|
17
18
|
* `setInputActionsSource`/`setInputTraceSource`) that make `game.input.*`
|
|
@@ -19,13 +20,14 @@
|
|
|
19
20
|
* `DEBUG_INPUT_UNAVAILABLE`. The project's input map loads through
|
|
20
21
|
* `Game.loadInputMap` (the game-owned, load-once path every root shares).
|
|
21
22
|
* A missing/unparseable map degrades LOUDLY without failing the mount — a
|
|
22
|
-
* canvas world with no declared actions is legal.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* canvas world with no declared actions is legal. A bare/foreign mount
|
|
24
|
+
* receives `null`, visibly in the type, rather than a throwing getter.
|
|
25
|
+
* 3. **Absent subsystems are absent from the type.** A canvas world builds no
|
|
26
|
+
* THREE scene/camera, Rapier world, composer, first-party audio/particles/
|
|
27
|
+
* debug-draw, or Three-flavoured `AssetCache`. Its explicit
|
|
28
|
+
* {@link CanvasGameContext} cannot name those fields, so misuse fails at
|
|
29
|
+
* the call site during typechecking instead of from a throwing getter at
|
|
30
|
+
* runtime.
|
|
29
31
|
*
|
|
30
32
|
* The Pixi handles themselves are deliberately NOT re-exposed here: a component
|
|
31
33
|
* reaches the live `Application` (and therefore `app.stage`, `app.renderer`,
|
|
@@ -41,24 +43,6 @@ import { createDebugRegistry, getDebugRegistry, } from '../runtime/debug-registr
|
|
|
41
43
|
* verbatim with the three lane — a project has ONE input map, whatever surface
|
|
42
44
|
* reads it. */
|
|
43
45
|
export const DEFAULT_INPUT_MAP_PATH = '/inputmaps/default.inputmap.json';
|
|
44
|
-
/** Install a throwing getter for a `GameContext` field this world genuinely
|
|
45
|
-
* does not build — a component reaching for it fails LOUDLY at its own call
|
|
46
|
-
* site, naming the limitation, instead of reading `undefined` and breaking
|
|
47
|
-
* somewhere downstream. Non-enumerable so spreads/serialization of the ctx
|
|
48
|
-
* never trip it. */
|
|
49
|
-
function defineAbsentCtxField(target, worldId, key, why) {
|
|
50
|
-
Object.defineProperty(target, key, {
|
|
51
|
-
configurable: true,
|
|
52
|
-
enumerable: false,
|
|
53
|
-
get() {
|
|
54
|
-
throw new Error(`canvas world "${worldId}": ctx.${key} is not available — ${why} ` +
|
|
55
|
-
'(A canvas world ctx provides: input, systems, clock, debug, random, game, roots, ' +
|
|
56
|
-
"registerSystemAdapter. The Pixi runtime itself comes from @pixi/react's " +
|
|
57
|
-
'useApplication() — app.stage, app.renderer, app.ticker — and assets from Pixi`s own ' +
|
|
58
|
-
'Assets.)');
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
46
|
/**
|
|
63
47
|
* Build the engine runtime for one canvas world from a `CanvasHostContext`.
|
|
64
48
|
* React-free on purpose: everything here is plain engine wiring the adapter
|
|
@@ -76,6 +60,7 @@ export function createCanvasRootContext(host, options) {
|
|
|
76
60
|
let app = null;
|
|
77
61
|
const ctxRaw = {
|
|
78
62
|
systems,
|
|
63
|
+
input: host.game?.input ?? null,
|
|
79
64
|
registerSystemAdapter: (kind, adapter) => {
|
|
80
65
|
// biome-ignore lint/suspicious/noExplicitAny: same per-key record write the three lane performs; correct by construction
|
|
81
66
|
systemAdapters[kind] = adapter;
|
|
@@ -113,7 +98,7 @@ export function createCanvasRootContext(host, options) {
|
|
|
113
98
|
'`container.destroy({ children: true })`, scheduled with `clock.after(seconds, ...)`.');
|
|
114
99
|
},
|
|
115
100
|
});
|
|
116
|
-
|
|
101
|
+
ctxRaw['clock'] = clock;
|
|
117
102
|
// --- ctx.input + the debug-registry input seams — the game-owned
|
|
118
103
|
// InputManager, polled by the game-scoped runner each frame; this world
|
|
119
104
|
// registers the per-world seams so `game.input.*` (virtual input) and the
|
|
@@ -122,7 +107,6 @@ export function createCanvasRootContext(host, options) {
|
|
|
122
107
|
if (host.game) {
|
|
123
108
|
const game = host.game;
|
|
124
109
|
const input = game.input;
|
|
125
|
-
ctxRaw['input'] = input;
|
|
126
110
|
debugRegistry.setInputActionsSource(id, () => input.actionNames().map((name) => ({ name, valueType: input.getActionValueType(name) })));
|
|
127
111
|
debugRegistry.setInputTraceSource(id, () => {
|
|
128
112
|
const raw = input.getInputTrace();
|
|
@@ -159,29 +143,6 @@ export function createCanvasRootContext(host, options) {
|
|
|
159
143
|
});
|
|
160
144
|
}
|
|
161
145
|
}
|
|
162
|
-
else {
|
|
163
|
-
defineAbsentCtxField(ctxRaw, id, 'input', 'input is game-owned and this mount has no Game host (host.game is absent — bare ' +
|
|
164
|
-
'harness/foreign host); mount through the vgai host to get the shared InputManager.');
|
|
165
|
-
}
|
|
166
|
-
// --- Loud absence for everything a canvas world genuinely does not build. ---
|
|
167
|
-
const threeWhy = 'a canvas world renders through PixiJS and owns no THREE scene graph; the world root is ' +
|
|
168
|
-
"the Pixi stage, reached with @pixi/react's useApplication().app.stage.";
|
|
169
|
-
defineAbsentCtxField(ctxRaw, id, 'scene', threeWhy);
|
|
170
|
-
defineAbsentCtxField(ctxRaw, id, 'camera', threeWhy);
|
|
171
|
-
defineAbsentCtxField(ctxRaw, id, 'sceneIndex', 'the live scene index walks a THREE.Scene; a canvas world has none (walk the Pixi display ' +
|
|
172
|
-
'tree from useApplication().app.stage instead).');
|
|
173
|
-
const rapierWhy = 'canvas worlds do not build the first-party Rapier runtime; drive physics from inside the ' +
|
|
174
|
-
'tree with the 2D physics library of your choice.';
|
|
175
|
-
defineAbsentCtxField(ctxRaw, id, 'rapierWorld', rapierWhy);
|
|
176
|
-
defineAbsentCtxField(ctxRaw, id, 'rapier', rapierWhy);
|
|
177
|
-
defineAbsentCtxField(ctxRaw, id, 'physics', rapierWhy);
|
|
178
|
-
defineAbsentCtxField(ctxRaw, id, 'collisions', rapierWhy);
|
|
179
|
-
defineAbsentCtxField(ctxRaw, id, 'assets', 'the canvas host context carries no AssetCache (that cache is a GLTF/texture loader ' +
|
|
180
|
-
"resolving THREE objects); load textures/spritesheets with Pixi's own `Assets`.");
|
|
181
|
-
defineAbsentCtxField(ctxRaw, id, 'composer', 'a canvas world has no postprocessing EffectComposer; use Pixi filters on a Container.');
|
|
182
|
-
defineAbsentCtxField(ctxRaw, id, 'audio', 'canvas worlds build no first-party audio context; use Web Audio directly (or @pixi/sound).');
|
|
183
|
-
defineAbsentCtxField(ctxRaw, id, 'particles', 'canvas worlds build no three.quarks particle runtime; use a Pixi particle container.');
|
|
184
|
-
defineAbsentCtxField(ctxRaw, id, 'debugDraw', 'canvas worlds build no debug-draw helper; draw into a Pixi `Graphics` in the tree.');
|
|
185
146
|
return {
|
|
186
147
|
ctx,
|
|
187
148
|
systems,
|
package/dist/data/curve.d.ts
CHANGED
|
@@ -93,7 +93,7 @@ export declare function curve(axes: CurveAxes): z.ZodType<CurveValue>;
|
|
|
93
93
|
* Read a curve field's declared axes back off a LIVE Zod schema (as opposed to
|
|
94
94
|
* the emitted JSON Schema, which the editor's Data panel reads instead).
|
|
95
95
|
*
|
|
96
|
-
* This is the dev-
|
|
96
|
+
* This is the dev-tools capability's detection door: it derives its rows by
|
|
97
97
|
* walking the game's own `TuningSchema` object, so it needs the axes from the
|
|
98
98
|
* schema in hand. Wrappers (`.optional()`, `.default(…)`, `.describe(…)` chains
|
|
99
99
|
* that re-wrap) hide the metadata behind an inner type, so a bounded unwrap
|
package/dist/data/curve.js
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* update, the same way it reads any other tuning value.
|
|
35
35
|
*/
|
|
36
36
|
import { z } from 'zod';
|
|
37
|
-
/** How the marker rides out to the emitted JSON Schema — the editor's
|
|
37
|
+
/** How the marker rides out to the emitted JSON Schema — the editor's detection key, the exact shape `dataRef` uses with `x-vgai-ref`. */
|
|
38
38
|
const CURVE_META_KEY = 'x-vgai-curve';
|
|
39
39
|
function axisLabel(axes, axis) {
|
|
40
40
|
return axes[axis].label ?? axis;
|
|
@@ -122,7 +122,7 @@ export function curve(axes) {
|
|
|
122
122
|
* Read a curve field's declared axes back off a LIVE Zod schema (as opposed to
|
|
123
123
|
* the emitted JSON Schema, which the editor's Data panel reads instead).
|
|
124
124
|
*
|
|
125
|
-
* This is the dev-
|
|
125
|
+
* This is the dev-tools capability's detection door: it derives its rows by
|
|
126
126
|
* walking the game's own `TuningSchema` object, so it needs the axes from the
|
|
127
127
|
* schema in hand. Wrappers (`.optional()`, `.default(…)`, `.describe(…)` chains
|
|
128
128
|
* that re-wrap) hide the metadata behind an inner type, so a bounded unwrap
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
* game registry.
|
|
26
26
|
*
|
|
27
27
|
* ── THE DOOR ────────────────────────────────────────────────────────────────
|
|
28
|
-
* This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-
|
|
29
|
-
* capability's own registry adopts this list (`
|
|
28
|
+
* This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-tools
|
|
29
|
+
* capability's own registry adopts this list (`installDevToolsInstruments`) and
|
|
30
30
|
* publishes each instrument through the SAME door every declaration in that
|
|
31
31
|
* capability uses — one provider per reading (`instrument.timescale`), one
|
|
32
|
-
* command per action (`instrument.timescale.set`), plus the `dev-
|
|
32
|
+
* command per action (`instrument.timescale.set`), plus the `dev-tools` index
|
|
33
33
|
* provider. That is deliberate and load-bearing: the registry IS the product,
|
|
34
34
|
* so every reader of an instrument reaches the SAME registration.
|
|
35
35
|
*
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* ── RESOURCE OWNERSHIP, STATED ONCE ─────────────────────────────────────────
|
|
44
44
|
* {@link createDevInstruments} owns everything it allocates: the frame-time
|
|
45
45
|
* ring buffer and its ONE `game.onRenderStep` subscription. SHARER: the
|
|
46
|
-
* dev-
|
|
46
|
+
* dev-tools capability's `DevToolsBridge`, which creates one set per mounted
|
|
47
47
|
* game. TEARDOWN: the returned {@link DevInstrumentSet.dispose} — the ONE path
|
|
48
48
|
* that ends it. Nothing else here holds a resource; the time-scale, pause and
|
|
49
49
|
* collider instruments only drive state that `Game` already owns.
|
package/dist/dev/instruments.js
CHANGED
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
* game registry.
|
|
26
26
|
*
|
|
27
27
|
* ── THE DOOR ────────────────────────────────────────────────────────────────
|
|
28
|
-
* This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-
|
|
29
|
-
* capability's own registry adopts this list (`
|
|
28
|
+
* This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-tools
|
|
29
|
+
* capability's own registry adopts this list (`installDevToolsInstruments`) and
|
|
30
30
|
* publishes each instrument through the SAME door every declaration in that
|
|
31
31
|
* capability uses — one provider per reading (`instrument.timescale`), one
|
|
32
|
-
* command per action (`instrument.timescale.set`), plus the `dev-
|
|
32
|
+
* command per action (`instrument.timescale.set`), plus the `dev-tools` index
|
|
33
33
|
* provider. That is deliberate and load-bearing: the registry IS the product,
|
|
34
34
|
* so every reader of an instrument reaches the SAME registration.
|
|
35
35
|
*
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* ── RESOURCE OWNERSHIP, STATED ONCE ─────────────────────────────────────────
|
|
44
44
|
* {@link createDevInstruments} owns everything it allocates: the frame-time
|
|
45
45
|
* ring buffer and its ONE `game.onRenderStep` subscription. SHARER: the
|
|
46
|
-
* dev-
|
|
46
|
+
* dev-tools capability's `DevToolsBridge`, which creates one set per mounted
|
|
47
47
|
* game. TEARDOWN: the returned {@link DevInstrumentSet.dispose} — the ONE path
|
|
48
48
|
* that ends it. Nothing else here holds a resource; the time-scale, pause and
|
|
49
49
|
* collider instruments only drive state that `Game` already owns.
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
* the drawing buffer halves was never fill-bound.
|
|
37
37
|
*
|
|
38
38
|
* ── GATING ──────────────────────────────────────────────────────────────────
|
|
39
|
-
* The caller gates. Both seeders call this only under `
|
|
40
|
-
* (`runtime/dev-
|
|
39
|
+
* The caller gates. Both seeders call this only under `devBuildEnabled()`
|
|
40
|
+
* (`runtime/dev-build.ts` — the ONE owner of "is this a dev context"), so a
|
|
41
41
|
* ship build registers nothing and pays nothing. Each also requires a `Game`
|
|
42
42
|
* shell (there is no profiler to fold without one) and a non-headless mount
|
|
43
43
|
* (nothing brackets a submission, so the readings could only ever be empty).
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
* the drawing buffer halves was never fill-bound.
|
|
37
37
|
*
|
|
38
38
|
* ── GATING ──────────────────────────────────────────────────────────────────
|
|
39
|
-
* The caller gates. Both seeders call this only under `
|
|
40
|
-
* (`runtime/dev-
|
|
39
|
+
* The caller gates. Both seeders call this only under `devBuildEnabled()`
|
|
40
|
+
* (`runtime/dev-build.ts` — the ONE owner of "is this a dev context"), so a
|
|
41
41
|
* ship build registers nothing and pays nothing. Each also requires a `Game`
|
|
42
42
|
* shell (there is no profiler to fold without one) and a non-headless mount
|
|
43
43
|
* (nothing brackets a submission, so the readings could only ever be empty).
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* require someone to ASK, and both require that someone to already know that
|
|
7
7
|
* static batching exists, is possible here, and is spelled `<Frozen>`. An
|
|
8
8
|
* agent building a game does not know any of that, so the measurement has to
|
|
9
|
-
* do the routing itself — the same idiom as
|
|
9
|
+
* do the routing itself — the same idiom as dev-tools' unconfigured-section
|
|
10
10
|
* warning: the reading names the exact edit.
|
|
11
11
|
*
|
|
12
12
|
* ── THE DECISION IS PURE, THE SCHEDULE IS NOT ───────────────────────────────
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* require someone to ASK, and both require that someone to already know that
|
|
7
7
|
* static batching exists, is possible here, and is spelled `<Frozen>`. An
|
|
8
8
|
* agent building a game does not know any of that, so the measurement has to
|
|
9
|
-
* do the routing itself — the same idiom as
|
|
9
|
+
* do the routing itself — the same idiom as dev-tools' unconfigured-section
|
|
10
10
|
* warning: the reading names the exact edit.
|
|
11
11
|
*
|
|
12
12
|
* ── THE DECISION IS PURE, THE SCHEDULE IS NOT ───────────────────────────────
|
|
@@ -106,7 +106,7 @@ export function decideStaticBatchAdvisory(input) {
|
|
|
106
106
|
* Once per PAGE, not once per module evaluation — a hot reload re-runs this
|
|
107
107
|
* module, and an advisory that reappears on every save is one that gets muted
|
|
108
108
|
* along with everything else on the console. Same mechanism, and the same
|
|
109
|
-
* reason, as
|
|
109
|
+
* reason, as dev-tools' unconfigured-section warning.
|
|
110
110
|
*/
|
|
111
111
|
const WARNED_KEY = '__vgaiStaticBatchAdvised';
|
|
112
112
|
function alreadyWarned() {
|
package/dist/ecs/user-data.d.ts
CHANGED
|
@@ -111,12 +111,15 @@
|
|
|
111
111
|
* JSX props for renderer/editor integration.
|
|
112
112
|
* - `constraints` — live project-owned spatial constraints projected
|
|
113
113
|
* into the shared Inspector and viewport.
|
|
114
|
+
* - `authoringSubject` — transient identity/inspection for an ecosystem-native
|
|
115
|
+
* subject represented by an Object3D proxy.
|
|
114
116
|
* - `splineControlPoint` — index of a spline control-point drag handle.
|
|
115
117
|
* - `vcDirIdx` — view-cube face direction index (0=+X,1=-X,2=+Y,...).
|
|
116
118
|
*/
|
|
117
119
|
import type * as THREE from 'three';
|
|
118
120
|
import type { ParticleSystem } from 'three.quarks';
|
|
119
121
|
import type { ConstraintMark } from '../adapter/constraint';
|
|
122
|
+
import type { Object3DAuthoringSubjectMark } from '../adapter/object3d-authoring-subject';
|
|
120
123
|
import type { RapierEditableBody } from '../adapter/rapier-physics-adapter';
|
|
121
124
|
import type { ReflectionProbeMark } from '../adapter/reflection-probe';
|
|
122
125
|
import type { AnimationRuntimeInspection } from '../animation/runtime-inspection';
|
|
@@ -174,6 +177,7 @@ export interface UserDataSchema {
|
|
|
174
177
|
skeletonEnabled: boolean;
|
|
175
178
|
envObject: boolean;
|
|
176
179
|
constraints: readonly ConstraintMark[];
|
|
180
|
+
authoringSubject: Object3DAuthoringSubjectMark;
|
|
177
181
|
reflectionProbe: ReflectionProbeMark;
|
|
178
182
|
vcDirIdx: number;
|
|
179
183
|
/** W1a navmesh path-probe preview polyline: the routed waypoints, mirrored
|
|
@@ -231,6 +235,7 @@ export declare const UserDataKeys: {
|
|
|
231
235
|
readonly skeletonEnabled: "skeletonEnabled";
|
|
232
236
|
readonly envObject: "envObject";
|
|
233
237
|
readonly constraints: "constraints";
|
|
238
|
+
readonly authoringSubject: "authoringSubject";
|
|
234
239
|
readonly reflectionProbe: "reflectionProbe";
|
|
235
240
|
readonly vcDirIdx: "vcDirIdx";
|
|
236
241
|
readonly navPathPoints: "navPathPoints";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-data.d.ts","sourceRoot":"","sources":["../../src/ecs/user-data.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"user-data.d.ts","sourceRoot":"","sources":["../../src/ecs/user-data.ts"],"names":[],"mappings":"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"}
|
package/dist/ecs/user-data.js
CHANGED
|
@@ -111,6 +111,8 @@
|
|
|
111
111
|
* JSX props for renderer/editor integration.
|
|
112
112
|
* - `constraints` — live project-owned spatial constraints projected
|
|
113
113
|
* into the shared Inspector and viewport.
|
|
114
|
+
* - `authoringSubject` — transient identity/inspection for an ecosystem-native
|
|
115
|
+
* subject represented by an Object3D proxy.
|
|
114
116
|
* - `splineControlPoint` — index of a spline control-point drag handle.
|
|
115
117
|
* - `vcDirIdx` — view-cube face direction index (0=+X,1=-X,2=+Y,...).
|
|
116
118
|
*/
|
|
@@ -158,6 +160,7 @@ export const UserDataKeys = {
|
|
|
158
160
|
skeletonEnabled: 'skeletonEnabled',
|
|
159
161
|
envObject: 'envObject',
|
|
160
162
|
constraints: 'constraints',
|
|
163
|
+
authoringSubject: 'authoringSubject',
|
|
161
164
|
reflectionProbe: 'reflectionProbe',
|
|
162
165
|
vcDirIdx: 'vcDirIdx',
|
|
163
166
|
navPathPoints: 'navPathPoints',
|
|
@@ -40,6 +40,9 @@ export declare class InputManager {
|
|
|
40
40
|
private mouseButtonsJustUp;
|
|
41
41
|
private mouseDeltaX;
|
|
42
42
|
private mouseDeltaY;
|
|
43
|
+
/** Last `mousemove` client position. Device-poll only — action maps read delta, not this. */
|
|
44
|
+
private mouseClientX;
|
|
45
|
+
private mouseClientY;
|
|
43
46
|
private gamepads;
|
|
44
47
|
private gamepadButtonsDown;
|
|
45
48
|
private gamepadButtonsPrev;
|
|
@@ -221,6 +224,21 @@ export declare class InputManager {
|
|
|
221
224
|
* data reaches `isPressed`/`isJustPressed`/`isJustReleased`.
|
|
222
225
|
*/
|
|
223
226
|
loadMap(url: string): Promise<void>;
|
|
227
|
+
/**
|
|
228
|
+
* `loadMap`'s OPTIONAL sibling: apply the map at `url` when the project
|
|
229
|
+
* ships one and report `false` — SILENTLY — when it does not exist.
|
|
230
|
+
*
|
|
231
|
+
* The host loads the conventional map path at mount for every three/canvas
|
|
232
|
+
* root, including the scaffolded shape that has declared no actions yet, so
|
|
233
|
+
* "no map on disk" is the ordinary state of a brand-new project and must not
|
|
234
|
+
* print an error on every boot. Everything else stays exactly as loud as
|
|
235
|
+
* `loadMap`: a map that EXISTS and is malformed (or any non-404 failure)
|
|
236
|
+
* still logs and throws.
|
|
237
|
+
*/
|
|
238
|
+
loadMapIfPresent(url: string): Promise<boolean>;
|
|
239
|
+
/** Shared fetch/validate/apply for {@link loadMap} and
|
|
240
|
+
* {@link loadMapIfPresent}; `optional` decides only what a 404 means. */
|
|
241
|
+
private fetchMap;
|
|
224
242
|
/**
|
|
225
243
|
* F3 — `loadMap`'s synchronous, no-`fetch` sibling: apply an already-in-
|
|
226
244
|
* memory (or freshly-deserialized) input-map DOCUMENT, validated through
|
|
@@ -496,6 +514,39 @@ export declare class InputManager {
|
|
|
496
514
|
x: number;
|
|
497
515
|
y: number;
|
|
498
516
|
};
|
|
517
|
+
/**
|
|
518
|
+
* Device-poll door (not an action binding). Every getter checks
|
|
519
|
+
* {@link inputActive} at READ time so a poll while play is off or the
|
|
520
|
+
* tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
|
|
521
|
+
* already use. Inventing an implicit `registerAction` per key would define
|
|
522
|
+
* bindings the project's own `.inputmap` never named.
|
|
523
|
+
*/
|
|
524
|
+
isDeviceKeyPressed(code: string): boolean;
|
|
525
|
+
isDeviceKeyJustPressed(code: string): boolean;
|
|
526
|
+
isDeviceKeyJustReleased(code: string): boolean;
|
|
527
|
+
/** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
|
|
528
|
+
isDeviceMouseButtonPressed(button: number): boolean;
|
|
529
|
+
isDeviceMouseButtonJustPressed(button: number): boolean;
|
|
530
|
+
isDeviceMouseButtonJustReleased(button: number): boolean;
|
|
531
|
+
/**
|
|
532
|
+
* This-frame mouse delta in DOM space (Y +down). Callers that need Unity
|
|
533
|
+
* `Pointer.delta` (Y-up) flip Y themselves.
|
|
534
|
+
*/
|
|
535
|
+
getDeviceMouseDelta(): {
|
|
536
|
+
x: number;
|
|
537
|
+
y: number;
|
|
538
|
+
};
|
|
539
|
+
/** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
|
|
540
|
+
getDeviceMousePosition(): {
|
|
541
|
+
x: number;
|
|
542
|
+
y: number;
|
|
543
|
+
};
|
|
544
|
+
hasDeviceGamepad(): boolean;
|
|
545
|
+
isDeviceGamepadButtonPressed(button: number): boolean;
|
|
546
|
+
isDeviceGamepadButtonJustPressed(button: number): boolean;
|
|
547
|
+
isDeviceGamepadButtonJustReleased(button: number): boolean;
|
|
548
|
+
getDeviceGamepadAxis(axis: number): number;
|
|
549
|
+
private firstConnectedGamepadIndex;
|
|
499
550
|
/**
|
|
500
551
|
* F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
|
|
501
552
|
* device family most recently produced real input, or `null` before any
|
|
@@ -771,6 +822,19 @@ export declare class InputManager {
|
|
|
771
822
|
};
|
|
772
823
|
/** Request pointer lock for FPS-style mouse control */
|
|
773
824
|
requestPointerLock(element: HTMLElement): void;
|
|
825
|
+
/**
|
|
826
|
+
* Release pointer lock on the element {@link requestPointerLock} wired.
|
|
827
|
+
*
|
|
828
|
+
* Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
|
|
829
|
+
* lock if this manager holds it, and unwire the click-to-lock listener so a
|
|
830
|
+
* later click does not recapture. Idempotent. A host with no
|
|
831
|
+
* `document.exitPointerLock` (headless) still unwires — the lock never
|
|
832
|
+
* existed there.
|
|
833
|
+
*
|
|
834
|
+
* Only the lock THIS manager requested is released. An editor viewport
|
|
835
|
+
* holding lock on a different element is not ours to drop.
|
|
836
|
+
*/
|
|
837
|
+
exitPointerLock(): void;
|
|
774
838
|
/** Clean up event listeners */
|
|
775
839
|
dispose(): void;
|
|
776
840
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-manager.d.ts","sourceRoot":"","sources":["../../src/input/input-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"input-manager.d.ts","sourceRoot":"","sources":["../../src/input/input-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -277,6 +277,9 @@ export class InputManager {
|
|
|
277
277
|
mouseButtonsJustUp = new Set();
|
|
278
278
|
mouseDeltaX = 0;
|
|
279
279
|
mouseDeltaY = 0;
|
|
280
|
+
/** Last `mousemove` client position. Device-poll only — action maps read delta, not this. */
|
|
281
|
+
mouseClientX = 0;
|
|
282
|
+
mouseClientY = 0;
|
|
280
283
|
gamepads = [];
|
|
281
284
|
// Gamepad button edge tracking (P1.6c). Keys are `${gamepadIndex}:${buttonIndex}`.
|
|
282
285
|
// `Prev` is last frame's pressed set; `Down` is this frame's; the just-down/up
|
|
@@ -527,6 +530,8 @@ export class InputManager {
|
|
|
527
530
|
this.lastActiveDevice = 'mouse';
|
|
528
531
|
this.mouseDeltaX += e.movementX;
|
|
529
532
|
this.mouseDeltaY += e.movementY;
|
|
533
|
+
this.mouseClientX = e.clientX;
|
|
534
|
+
this.mouseClientY = e.clientY;
|
|
530
535
|
};
|
|
531
536
|
/** F2 — real window blur: drop focus and flush held REAL-device state
|
|
532
537
|
* (the browser stops delivering keyup/mouseup while blurred, so a key
|
|
@@ -626,10 +631,31 @@ export class InputManager {
|
|
|
626
631
|
* data reaches `isPressed`/`isJustPressed`/`isJustReleased`.
|
|
627
632
|
*/
|
|
628
633
|
async loadMap(url) {
|
|
634
|
+
await this.fetchMap(url, false);
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* `loadMap`'s OPTIONAL sibling: apply the map at `url` when the project
|
|
638
|
+
* ships one and report `false` — SILENTLY — when it does not exist.
|
|
639
|
+
*
|
|
640
|
+
* The host loads the conventional map path at mount for every three/canvas
|
|
641
|
+
* root, including the scaffolded shape that has declared no actions yet, so
|
|
642
|
+
* "no map on disk" is the ordinary state of a brand-new project and must not
|
|
643
|
+
* print an error on every boot. Everything else stays exactly as loud as
|
|
644
|
+
* `loadMap`: a map that EXISTS and is malformed (or any non-404 failure)
|
|
645
|
+
* still logs and throws.
|
|
646
|
+
*/
|
|
647
|
+
async loadMapIfPresent(url) {
|
|
648
|
+
return this.fetchMap(url, true);
|
|
649
|
+
}
|
|
650
|
+
/** Shared fetch/validate/apply for {@link loadMap} and
|
|
651
|
+
* {@link loadMapIfPresent}; `optional` decides only what a 404 means. */
|
|
652
|
+
async fetchMap(url, optional) {
|
|
629
653
|
let data;
|
|
630
654
|
try {
|
|
631
655
|
const res = await fetch(resolveUrl(url));
|
|
632
656
|
if (!res.ok) {
|
|
657
|
+
if (optional && res.status === 404)
|
|
658
|
+
return false;
|
|
633
659
|
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
634
660
|
}
|
|
635
661
|
const json = await res.json();
|
|
@@ -644,6 +670,7 @@ export class InputManager {
|
|
|
644
670
|
throw err instanceof AssetParseError ? err : new Error(message);
|
|
645
671
|
}
|
|
646
672
|
this.applyParsedMap(data);
|
|
673
|
+
return true;
|
|
647
674
|
}
|
|
648
675
|
/**
|
|
649
676
|
* F3 — `loadMap`'s synchronous, no-`fetch` sibling: apply an already-in-
|
|
@@ -1618,6 +1645,103 @@ export class InputManager {
|
|
|
1618
1645
|
getMouseDelta() {
|
|
1619
1646
|
return { x: this.mouseDeltaX, y: this.mouseDeltaY };
|
|
1620
1647
|
}
|
|
1648
|
+
/**
|
|
1649
|
+
* Device-poll door (not an action binding). Every getter checks
|
|
1650
|
+
* {@link inputActive} at READ time so a poll while play is off or the
|
|
1651
|
+
* tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
|
|
1652
|
+
* already use. Inventing an implicit `registerAction` per key would define
|
|
1653
|
+
* bindings the project's own `.inputmap` never named.
|
|
1654
|
+
*/
|
|
1655
|
+
isDeviceKeyPressed(code) {
|
|
1656
|
+
if (!this.inputActive)
|
|
1657
|
+
return false;
|
|
1658
|
+
return this.keysDown.has(code);
|
|
1659
|
+
}
|
|
1660
|
+
isDeviceKeyJustPressed(code) {
|
|
1661
|
+
if (!this.inputActive)
|
|
1662
|
+
return false;
|
|
1663
|
+
return this.keysJustDown.has(code);
|
|
1664
|
+
}
|
|
1665
|
+
isDeviceKeyJustReleased(code) {
|
|
1666
|
+
if (!this.inputActive)
|
|
1667
|
+
return false;
|
|
1668
|
+
return this.keysJustUp.has(code);
|
|
1669
|
+
}
|
|
1670
|
+
/** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
|
|
1671
|
+
isDeviceMouseButtonPressed(button) {
|
|
1672
|
+
if (!this.inputActive)
|
|
1673
|
+
return false;
|
|
1674
|
+
return this.mouseButtons.has(button);
|
|
1675
|
+
}
|
|
1676
|
+
isDeviceMouseButtonJustPressed(button) {
|
|
1677
|
+
if (!this.inputActive)
|
|
1678
|
+
return false;
|
|
1679
|
+
return this.mouseButtonsJustDown.has(button);
|
|
1680
|
+
}
|
|
1681
|
+
isDeviceMouseButtonJustReleased(button) {
|
|
1682
|
+
if (!this.inputActive)
|
|
1683
|
+
return false;
|
|
1684
|
+
return this.mouseButtonsJustUp.has(button);
|
|
1685
|
+
}
|
|
1686
|
+
/**
|
|
1687
|
+
* This-frame mouse delta in DOM space (Y +down). Callers that need Unity
|
|
1688
|
+
* `Pointer.delta` (Y-up) flip Y themselves.
|
|
1689
|
+
*/
|
|
1690
|
+
getDeviceMouseDelta() {
|
|
1691
|
+
if (!this.inputActive)
|
|
1692
|
+
return { x: 0, y: 0 };
|
|
1693
|
+
return { x: this.mouseDeltaX, y: this.mouseDeltaY };
|
|
1694
|
+
}
|
|
1695
|
+
/** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
|
|
1696
|
+
getDeviceMousePosition() {
|
|
1697
|
+
if (!this.inputActive)
|
|
1698
|
+
return { x: 0, y: 0 };
|
|
1699
|
+
return { x: this.mouseClientX, y: this.mouseClientY };
|
|
1700
|
+
}
|
|
1701
|
+
hasDeviceGamepad() {
|
|
1702
|
+
if (!this.inputActive)
|
|
1703
|
+
return false;
|
|
1704
|
+
return this.gamepads.some((pad) => pad !== null);
|
|
1705
|
+
}
|
|
1706
|
+
isDeviceGamepadButtonPressed(button) {
|
|
1707
|
+
if (!this.inputActive)
|
|
1708
|
+
return false;
|
|
1709
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1710
|
+
if (index < 0)
|
|
1711
|
+
return false;
|
|
1712
|
+
return this.gamepadButtonsDown.has(`${index}:${button}`);
|
|
1713
|
+
}
|
|
1714
|
+
isDeviceGamepadButtonJustPressed(button) {
|
|
1715
|
+
if (!this.inputActive)
|
|
1716
|
+
return false;
|
|
1717
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1718
|
+
if (index < 0)
|
|
1719
|
+
return false;
|
|
1720
|
+
return this.gamepadButtonsJustDown.has(`${index}:${button}`);
|
|
1721
|
+
}
|
|
1722
|
+
isDeviceGamepadButtonJustReleased(button) {
|
|
1723
|
+
if (!this.inputActive)
|
|
1724
|
+
return false;
|
|
1725
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1726
|
+
if (index < 0)
|
|
1727
|
+
return false;
|
|
1728
|
+
return this.gamepadButtonsJustUp.has(`${index}:${button}`);
|
|
1729
|
+
}
|
|
1730
|
+
getDeviceGamepadAxis(axis) {
|
|
1731
|
+
if (!this.inputActive)
|
|
1732
|
+
return 0;
|
|
1733
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1734
|
+
if (index < 0)
|
|
1735
|
+
return 0;
|
|
1736
|
+
return this.gamepads[index]?.axes[axis] ?? 0;
|
|
1737
|
+
}
|
|
1738
|
+
firstConnectedGamepadIndex() {
|
|
1739
|
+
for (let i = 0; i < this.gamepads.length; i++) {
|
|
1740
|
+
if (this.gamepads[i] !== null)
|
|
1741
|
+
return i;
|
|
1742
|
+
}
|
|
1743
|
+
return -1;
|
|
1744
|
+
}
|
|
1621
1745
|
/**
|
|
1622
1746
|
* F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
|
|
1623
1747
|
* device family most recently produced real input, or `null` before any
|
|
@@ -2194,6 +2318,31 @@ export class InputManager {
|
|
|
2194
2318
|
this.pointerLockElement = element;
|
|
2195
2319
|
element.addEventListener('click', this.onPointerLockClick);
|
|
2196
2320
|
}
|
|
2321
|
+
/**
|
|
2322
|
+
* Release pointer lock on the element {@link requestPointerLock} wired.
|
|
2323
|
+
*
|
|
2324
|
+
* Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
|
|
2325
|
+
* lock if this manager holds it, and unwire the click-to-lock listener so a
|
|
2326
|
+
* later click does not recapture. Idempotent. A host with no
|
|
2327
|
+
* `document.exitPointerLock` (headless) still unwires — the lock never
|
|
2328
|
+
* existed there.
|
|
2329
|
+
*
|
|
2330
|
+
* Only the lock THIS manager requested is released. An editor viewport
|
|
2331
|
+
* holding lock on a different element is not ours to drop.
|
|
2332
|
+
*/
|
|
2333
|
+
exitPointerLock() {
|
|
2334
|
+
const el = this.pointerLockElement;
|
|
2335
|
+
if (el) {
|
|
2336
|
+
el.removeEventListener('click', this.onPointerLockClick);
|
|
2337
|
+
this.pointerLockElement = null;
|
|
2338
|
+
}
|
|
2339
|
+
this.pointerLocked = false;
|
|
2340
|
+
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
2341
|
+
if (!doc || typeof doc.exitPointerLock !== 'function')
|
|
2342
|
+
return;
|
|
2343
|
+
if (el && doc.pointerLockElement === el)
|
|
2344
|
+
doc.exitPointerLock();
|
|
2345
|
+
}
|
|
2197
2346
|
/** Clean up event listeners */
|
|
2198
2347
|
dispose() {
|
|
2199
2348
|
if (this.disposed)
|