@vgai/engine 0.5.14 → 0.5.16
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 +228 -17
- package/dist/adapter/adapter-module.d.ts.map +1 -1
- package/dist/adapter/adapter-module.js +224 -42
- 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 -1
- package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts.map +1 -1
- package/dist/adapter/finders/scenes-from-entrypoint-selection.js +142 -21
- 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 +21 -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 +124 -0
- package/dist/adapter/root-seam-contract.d.ts.map +1 -0
- package/dist/adapter/root-seam-contract.js +36 -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 +2 -3
- 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 +43 -29
- 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/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 +49 -0
- package/dist/input/input-manager.d.ts.map +1 -1
- package/dist/input/input-manager.js +127 -0
- package/dist/manifest/schema.d.ts +9 -9
- package/dist/manifest/schema.js +1 -1
- package/dist/pixi/authoring.d.ts.map +1 -1
- package/dist/pixi/authoring.js +220 -1
- 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/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/runtime/create-runtime.d.ts +23 -46
- package/dist/runtime/create-runtime.d.ts.map +1 -1
- package/dist/runtime/create-runtime.js +22 -67
- package/dist/runtime/game.d.ts +29 -71
- package/dist/runtime/game.d.ts.map +1 -1
- package/dist/runtime/game.js +15 -54
- 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.map +1 -1
- package/dist/runtime/mount-manifest.js +4 -5
- 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.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 +50 -21
- package/dist/world3d-react/r3f-root-factory.d.ts.map +1 -1
- package/dist/world3d-react/r3f-root-factory.js +4 -0
- package/dist/world3d-react/world-context.d.ts +9 -3
- package/dist/world3d-react/world-context.d.ts.map +1 -1
- package/dist/world3d-react/world-context.js +5 -18
- package/package.json +1 -1
- package/schemas/engine-capabilities.json +8 -8
- package/schemas/vgai-project.schema.json +1 -1
- package/src/adapter/adapter-module.ts +407 -50
- 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 +159 -28
- 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 +21 -56
- package/src/adapter/root-seam-contract.ts +56 -0
- package/src/adapter/seam-evidence.ts +336 -0
- package/src/adapter/setup-three-root-adapter.ts +4 -6
- 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 +55 -34
- package/src/canvas-react/pixi-react-root-factory.tsx +4 -0
- package/src/canvas-react/world-context.ts +26 -101
- package/src/ecs/user-data.ts +5 -0
- package/src/input/input-manager.ts +122 -0
- package/src/manifest/schema.ts +1 -1
- package/src/pixi/authoring.ts +236 -1
- package/src/pixi/ingest.ts +9 -2
- package/src/pixi/scene-capture.ts +20 -5
- package/src/render/particles-factory.ts +16 -6
- package/src/runtime/create-runtime.ts +41 -106
- package/src/runtime/game.ts +41 -111
- package/src/runtime/mount-game.ts +19 -1
- package/src/runtime/mount-manifest.ts +4 -5
- package/src/runtime/types.ts +22 -0
- package/src/setup/setup-renderer.ts +3 -4
- package/src/world3d-react/engine-bridge.ts +1 -1
- package/src/world3d-react/r3f-adapter.tsx +64 -24
- package/src/world3d-react/r3f-root-factory.tsx +4 -0
- package/src/world3d-react/world-context.ts +11 -36
|
@@ -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;
|
|
@@ -496,6 +499,39 @@ export declare class InputManager {
|
|
|
496
499
|
x: number;
|
|
497
500
|
y: number;
|
|
498
501
|
};
|
|
502
|
+
/**
|
|
503
|
+
* Device-poll door (not an action binding). Every getter checks
|
|
504
|
+
* {@link inputActive} at READ time so a poll while play is off or the
|
|
505
|
+
* tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
|
|
506
|
+
* already use. Inventing an implicit `registerAction` per key would define
|
|
507
|
+
* bindings the project's own `.inputmap` never named.
|
|
508
|
+
*/
|
|
509
|
+
isDeviceKeyPressed(code: string): boolean;
|
|
510
|
+
isDeviceKeyJustPressed(code: string): boolean;
|
|
511
|
+
isDeviceKeyJustReleased(code: string): boolean;
|
|
512
|
+
/** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
|
|
513
|
+
isDeviceMouseButtonPressed(button: number): boolean;
|
|
514
|
+
isDeviceMouseButtonJustPressed(button: number): boolean;
|
|
515
|
+
isDeviceMouseButtonJustReleased(button: number): boolean;
|
|
516
|
+
/**
|
|
517
|
+
* This-frame mouse delta in DOM space (Y +down). Callers that need Unity
|
|
518
|
+
* `Pointer.delta` (Y-up) flip Y themselves.
|
|
519
|
+
*/
|
|
520
|
+
getDeviceMouseDelta(): {
|
|
521
|
+
x: number;
|
|
522
|
+
y: number;
|
|
523
|
+
};
|
|
524
|
+
/** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
|
|
525
|
+
getDeviceMousePosition(): {
|
|
526
|
+
x: number;
|
|
527
|
+
y: number;
|
|
528
|
+
};
|
|
529
|
+
hasDeviceGamepad(): boolean;
|
|
530
|
+
isDeviceGamepadButtonPressed(button: number): boolean;
|
|
531
|
+
isDeviceGamepadButtonJustPressed(button: number): boolean;
|
|
532
|
+
isDeviceGamepadButtonJustReleased(button: number): boolean;
|
|
533
|
+
getDeviceGamepadAxis(axis: number): number;
|
|
534
|
+
private firstConnectedGamepadIndex;
|
|
499
535
|
/**
|
|
500
536
|
* F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
|
|
501
537
|
* device family most recently produced real input, or `null` before any
|
|
@@ -771,6 +807,19 @@ export declare class InputManager {
|
|
|
771
807
|
};
|
|
772
808
|
/** Request pointer lock for FPS-style mouse control */
|
|
773
809
|
requestPointerLock(element: HTMLElement): void;
|
|
810
|
+
/**
|
|
811
|
+
* Release pointer lock on the element {@link requestPointerLock} wired.
|
|
812
|
+
*
|
|
813
|
+
* Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
|
|
814
|
+
* lock if this manager holds it, and unwire the click-to-lock listener so a
|
|
815
|
+
* later click does not recapture. Idempotent. A host with no
|
|
816
|
+
* `document.exitPointerLock` (headless) still unwires — the lock never
|
|
817
|
+
* existed there.
|
|
818
|
+
*
|
|
819
|
+
* Only the lock THIS manager requested is released. An editor viewport
|
|
820
|
+
* holding lock on a different element is not ours to drop.
|
|
821
|
+
*/
|
|
822
|
+
exitPointerLock(): void;
|
|
774
823
|
/** Clean up event listeners */
|
|
775
824
|
dispose(): void;
|
|
776
825
|
}
|
|
@@ -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
|
|
@@ -1618,6 +1623,103 @@ export class InputManager {
|
|
|
1618
1623
|
getMouseDelta() {
|
|
1619
1624
|
return { x: this.mouseDeltaX, y: this.mouseDeltaY };
|
|
1620
1625
|
}
|
|
1626
|
+
/**
|
|
1627
|
+
* Device-poll door (not an action binding). Every getter checks
|
|
1628
|
+
* {@link inputActive} at READ time so a poll while play is off or the
|
|
1629
|
+
* tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
|
|
1630
|
+
* already use. Inventing an implicit `registerAction` per key would define
|
|
1631
|
+
* bindings the project's own `.inputmap` never named.
|
|
1632
|
+
*/
|
|
1633
|
+
isDeviceKeyPressed(code) {
|
|
1634
|
+
if (!this.inputActive)
|
|
1635
|
+
return false;
|
|
1636
|
+
return this.keysDown.has(code);
|
|
1637
|
+
}
|
|
1638
|
+
isDeviceKeyJustPressed(code) {
|
|
1639
|
+
if (!this.inputActive)
|
|
1640
|
+
return false;
|
|
1641
|
+
return this.keysJustDown.has(code);
|
|
1642
|
+
}
|
|
1643
|
+
isDeviceKeyJustReleased(code) {
|
|
1644
|
+
if (!this.inputActive)
|
|
1645
|
+
return false;
|
|
1646
|
+
return this.keysJustUp.has(code);
|
|
1647
|
+
}
|
|
1648
|
+
/** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
|
|
1649
|
+
isDeviceMouseButtonPressed(button) {
|
|
1650
|
+
if (!this.inputActive)
|
|
1651
|
+
return false;
|
|
1652
|
+
return this.mouseButtons.has(button);
|
|
1653
|
+
}
|
|
1654
|
+
isDeviceMouseButtonJustPressed(button) {
|
|
1655
|
+
if (!this.inputActive)
|
|
1656
|
+
return false;
|
|
1657
|
+
return this.mouseButtonsJustDown.has(button);
|
|
1658
|
+
}
|
|
1659
|
+
isDeviceMouseButtonJustReleased(button) {
|
|
1660
|
+
if (!this.inputActive)
|
|
1661
|
+
return false;
|
|
1662
|
+
return this.mouseButtonsJustUp.has(button);
|
|
1663
|
+
}
|
|
1664
|
+
/**
|
|
1665
|
+
* This-frame mouse delta in DOM space (Y +down). Callers that need Unity
|
|
1666
|
+
* `Pointer.delta` (Y-up) flip Y themselves.
|
|
1667
|
+
*/
|
|
1668
|
+
getDeviceMouseDelta() {
|
|
1669
|
+
if (!this.inputActive)
|
|
1670
|
+
return { x: 0, y: 0 };
|
|
1671
|
+
return { x: this.mouseDeltaX, y: this.mouseDeltaY };
|
|
1672
|
+
}
|
|
1673
|
+
/** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
|
|
1674
|
+
getDeviceMousePosition() {
|
|
1675
|
+
if (!this.inputActive)
|
|
1676
|
+
return { x: 0, y: 0 };
|
|
1677
|
+
return { x: this.mouseClientX, y: this.mouseClientY };
|
|
1678
|
+
}
|
|
1679
|
+
hasDeviceGamepad() {
|
|
1680
|
+
if (!this.inputActive)
|
|
1681
|
+
return false;
|
|
1682
|
+
return this.gamepads.some((pad) => pad !== null);
|
|
1683
|
+
}
|
|
1684
|
+
isDeviceGamepadButtonPressed(button) {
|
|
1685
|
+
if (!this.inputActive)
|
|
1686
|
+
return false;
|
|
1687
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1688
|
+
if (index < 0)
|
|
1689
|
+
return false;
|
|
1690
|
+
return this.gamepadButtonsDown.has(`${index}:${button}`);
|
|
1691
|
+
}
|
|
1692
|
+
isDeviceGamepadButtonJustPressed(button) {
|
|
1693
|
+
if (!this.inputActive)
|
|
1694
|
+
return false;
|
|
1695
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1696
|
+
if (index < 0)
|
|
1697
|
+
return false;
|
|
1698
|
+
return this.gamepadButtonsJustDown.has(`${index}:${button}`);
|
|
1699
|
+
}
|
|
1700
|
+
isDeviceGamepadButtonJustReleased(button) {
|
|
1701
|
+
if (!this.inputActive)
|
|
1702
|
+
return false;
|
|
1703
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1704
|
+
if (index < 0)
|
|
1705
|
+
return false;
|
|
1706
|
+
return this.gamepadButtonsJustUp.has(`${index}:${button}`);
|
|
1707
|
+
}
|
|
1708
|
+
getDeviceGamepadAxis(axis) {
|
|
1709
|
+
if (!this.inputActive)
|
|
1710
|
+
return 0;
|
|
1711
|
+
const index = this.firstConnectedGamepadIndex();
|
|
1712
|
+
if (index < 0)
|
|
1713
|
+
return 0;
|
|
1714
|
+
return this.gamepads[index]?.axes[axis] ?? 0;
|
|
1715
|
+
}
|
|
1716
|
+
firstConnectedGamepadIndex() {
|
|
1717
|
+
for (let i = 0; i < this.gamepads.length; i++) {
|
|
1718
|
+
if (this.gamepads[i] !== null)
|
|
1719
|
+
return i;
|
|
1720
|
+
}
|
|
1721
|
+
return -1;
|
|
1722
|
+
}
|
|
1621
1723
|
/**
|
|
1622
1724
|
* F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
|
|
1623
1725
|
* device family most recently produced real input, or `null` before any
|
|
@@ -2194,6 +2296,31 @@ export class InputManager {
|
|
|
2194
2296
|
this.pointerLockElement = element;
|
|
2195
2297
|
element.addEventListener('click', this.onPointerLockClick);
|
|
2196
2298
|
}
|
|
2299
|
+
/**
|
|
2300
|
+
* Release pointer lock on the element {@link requestPointerLock} wired.
|
|
2301
|
+
*
|
|
2302
|
+
* Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
|
|
2303
|
+
* lock if this manager holds it, and unwire the click-to-lock listener so a
|
|
2304
|
+
* later click does not recapture. Idempotent. A host with no
|
|
2305
|
+
* `document.exitPointerLock` (headless) still unwires — the lock never
|
|
2306
|
+
* existed there.
|
|
2307
|
+
*
|
|
2308
|
+
* Only the lock THIS manager requested is released. An editor viewport
|
|
2309
|
+
* holding lock on a different element is not ours to drop.
|
|
2310
|
+
*/
|
|
2311
|
+
exitPointerLock() {
|
|
2312
|
+
const el = this.pointerLockElement;
|
|
2313
|
+
if (el) {
|
|
2314
|
+
el.removeEventListener('click', this.onPointerLockClick);
|
|
2315
|
+
this.pointerLockElement = null;
|
|
2316
|
+
}
|
|
2317
|
+
this.pointerLocked = false;
|
|
2318
|
+
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
2319
|
+
if (!doc || typeof doc.exitPointerLock !== 'function')
|
|
2320
|
+
return;
|
|
2321
|
+
if (el && doc.pointerLockElement === el)
|
|
2322
|
+
doc.exitPointerLock();
|
|
2323
|
+
}
|
|
2197
2324
|
/** Clean up event listeners */
|
|
2198
2325
|
dispose() {
|
|
2199
2326
|
if (this.disposed)
|
|
@@ -5,20 +5,20 @@ import { z } from 'zod';
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const GAME_MANIFEST_VERSION: 2;
|
|
7
7
|
export declare const RootAdapterSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
|
|
8
|
-
canvas: "canvas";
|
|
9
8
|
three: "three";
|
|
9
|
+
canvas: "canvas";
|
|
10
10
|
dom: "dom";
|
|
11
11
|
}>, z.ZodObject<{
|
|
12
12
|
module: z.ZodString;
|
|
13
13
|
surface: z.ZodEnum<{
|
|
14
|
-
canvas: "canvas";
|
|
15
14
|
three: "three";
|
|
15
|
+
canvas: "canvas";
|
|
16
16
|
dom: "dom";
|
|
17
17
|
}>;
|
|
18
18
|
}, z.core.$strict>, z.ZodObject<{
|
|
19
19
|
surface: z.ZodEnum<{
|
|
20
|
-
canvas: "canvas";
|
|
21
20
|
three: "three";
|
|
21
|
+
canvas: "canvas";
|
|
22
22
|
dom: "dom";
|
|
23
23
|
}>;
|
|
24
24
|
ingest: z.ZodObject<{
|
|
@@ -39,20 +39,20 @@ export declare const AdapterRootSchema: z.ZodObject<{
|
|
|
39
39
|
id: z.ZodString;
|
|
40
40
|
description: z.ZodOptional<z.ZodString>;
|
|
41
41
|
adapter: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
|
|
42
|
-
canvas: "canvas";
|
|
43
42
|
three: "three";
|
|
43
|
+
canvas: "canvas";
|
|
44
44
|
dom: "dom";
|
|
45
45
|
}>, z.ZodObject<{
|
|
46
46
|
module: z.ZodString;
|
|
47
47
|
surface: z.ZodEnum<{
|
|
48
|
-
canvas: "canvas";
|
|
49
48
|
three: "three";
|
|
49
|
+
canvas: "canvas";
|
|
50
50
|
dom: "dom";
|
|
51
51
|
}>;
|
|
52
52
|
}, z.core.$strict>, z.ZodObject<{
|
|
53
53
|
surface: z.ZodEnum<{
|
|
54
|
-
canvas: "canvas";
|
|
55
54
|
three: "three";
|
|
55
|
+
canvas: "canvas";
|
|
56
56
|
dom: "dom";
|
|
57
57
|
}>;
|
|
58
58
|
ingest: z.ZodObject<{
|
|
@@ -125,20 +125,20 @@ export declare const GameManifestSchema: z.ZodObject<{
|
|
|
125
125
|
id: z.ZodString;
|
|
126
126
|
description: z.ZodOptional<z.ZodString>;
|
|
127
127
|
adapter: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
|
|
128
|
-
canvas: "canvas";
|
|
129
128
|
three: "three";
|
|
129
|
+
canvas: "canvas";
|
|
130
130
|
dom: "dom";
|
|
131
131
|
}>, z.ZodObject<{
|
|
132
132
|
module: z.ZodString;
|
|
133
133
|
surface: z.ZodEnum<{
|
|
134
|
-
canvas: "canvas";
|
|
135
134
|
three: "three";
|
|
135
|
+
canvas: "canvas";
|
|
136
136
|
dom: "dom";
|
|
137
137
|
}>;
|
|
138
138
|
}, z.core.$strict>, z.ZodObject<{
|
|
139
139
|
surface: z.ZodEnum<{
|
|
140
|
-
canvas: "canvas";
|
|
141
140
|
three: "three";
|
|
141
|
+
canvas: "canvas";
|
|
142
142
|
dom: "dom";
|
|
143
143
|
}>;
|
|
144
144
|
ingest: z.ZodObject<{
|
package/dist/manifest/schema.js
CHANGED
|
@@ -330,7 +330,7 @@ export const LearnMetadataSchema = z
|
|
|
330
330
|
.string()
|
|
331
331
|
.optional()
|
|
332
332
|
.describe('Optional Learn-site lesson URL that teaches this project 1:1 ' +
|
|
333
|
-
'(e.g. https://vgai-learn.pages.dev/
|
|
333
|
+
'(e.g. https://vgai-learn.pages.dev/manual/physics/joints/)'),
|
|
334
334
|
})
|
|
335
335
|
.strict()
|
|
336
336
|
.describe('Learner-facing metadata (FT-5) — powers the example ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/pixi/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/pixi/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAqPnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cAAc;IAC7B;;6BAEyB;IACzB,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC;CAC3D;AAED,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,EAAE,cAExC,CAAC;AAEF,qBAAa,kBAAkB;IAO3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;gBAGvB,IAAI,EAAE,SAAS,EAChC,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAO;IAO/D;;;;;;;;OAQG;IACH,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAqB7C,+EAA+E;IAC/E,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAM7C,KAAK,IAAI,YAAY,EAAE;IAIvB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKrC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM;IAYd,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAcjD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAe5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,EAAE;IAkBpC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAYnD,OAAO,CAAC,aAAa;IAYrB;;;;;;;;OAQG;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAevE,OAAO,IAAI,OAAO;IAGlB,gBAAgB,IAAI,SAAS;IAG7B,gFAAgF;IAChF,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAKxC,wFAAwF;IACxF,SAAS,IAAI,IAAI;CAGlB"}
|
package/dist/pixi/authoring.js
CHANGED
|
@@ -2,12 +2,231 @@ function kindOf(o) {
|
|
|
2
2
|
const ctor = o.constructor?.name?.toLowerCase() ?? 'container';
|
|
3
3
|
if (ctor.includes('animatedsprite'))
|
|
4
4
|
return 'animatedsprite';
|
|
5
|
+
if (ctor.includes('nineslice'))
|
|
6
|
+
return 'nineslicesprite';
|
|
7
|
+
if (ctor.includes('tiling'))
|
|
8
|
+
return 'tilingsprite';
|
|
5
9
|
if (ctor.includes('sprite'))
|
|
6
10
|
return 'sprite';
|
|
7
11
|
if (ctor.includes('text'))
|
|
8
12
|
return 'text';
|
|
13
|
+
if (ctor.includes('graphics'))
|
|
14
|
+
return 'graphics';
|
|
9
15
|
return 'container';
|
|
10
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Hierarchy row text — the Pixi sibling of three's `object.name || object.type`.
|
|
19
|
+
*
|
|
20
|
+
* Authored `.label` first. Then a GAME name: a field, a bag key, or a class
|
|
21
|
+
* that owns this `.view`. Stock Pixi types (`Sprite`, `Graphics`, `_Container`)
|
|
22
|
+
* are not names — they used to win and hide every owner. Then the texture
|
|
23
|
+
* alias (`Sprite.from('satellite')`). Then a remaining game constructor
|
|
24
|
+
* (`TitleScreen`, `PrimaryButton`). Bare `new Container()` still reads as
|
|
25
|
+
* `container`.
|
|
26
|
+
*/
|
|
27
|
+
function displayLabel(o) {
|
|
28
|
+
const authored = authoredLabel(o);
|
|
29
|
+
if (authored)
|
|
30
|
+
return authored;
|
|
31
|
+
const owner = viewOwnerLabel(o);
|
|
32
|
+
if (owner)
|
|
33
|
+
return owner;
|
|
34
|
+
const asset = textureLabel(o);
|
|
35
|
+
if (asset)
|
|
36
|
+
return asset;
|
|
37
|
+
const ctor = usefulCtorName(o);
|
|
38
|
+
if (ctor)
|
|
39
|
+
return ctor;
|
|
40
|
+
return kindOf(o);
|
|
41
|
+
}
|
|
42
|
+
/** Pixi v8 stamps Sprite/Graphics `.label` with the class name. That is not an authored name. */
|
|
43
|
+
function authoredLabel(o) {
|
|
44
|
+
const authored = o.label?.trim();
|
|
45
|
+
if (!authored || isGenericPixiCtor(authored))
|
|
46
|
+
return undefined;
|
|
47
|
+
return authored;
|
|
48
|
+
}
|
|
49
|
+
function isMinifiedCtor(name) {
|
|
50
|
+
return name.length <= 2 && name === name.toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
/** Pixi's own display types. The shipped build prefixes them `_`. */
|
|
53
|
+
const STOCK_PIXI_CTOR = new Set([
|
|
54
|
+
'container',
|
|
55
|
+
'displayobject',
|
|
56
|
+
'sprite',
|
|
57
|
+
'animatedsprite',
|
|
58
|
+
'nineslicesprite',
|
|
59
|
+
'tilingsprite',
|
|
60
|
+
'text',
|
|
61
|
+
'bitmaptext',
|
|
62
|
+
'htmltext',
|
|
63
|
+
'graphics',
|
|
64
|
+
'mesh',
|
|
65
|
+
]);
|
|
66
|
+
function isGenericPixiCtor(name) {
|
|
67
|
+
if (isMinifiedCtor(name) || name === 'Object' || name === 'Function')
|
|
68
|
+
return true;
|
|
69
|
+
return STOCK_PIXI_CTOR.has(name.replace(/^_+/, '').toLowerCase());
|
|
70
|
+
}
|
|
71
|
+
function textureLabel(object) {
|
|
72
|
+
const texture = object.texture;
|
|
73
|
+
const raw = texture?.label?.trim();
|
|
74
|
+
if (!raw || /^(_?texture)?(empty|white)$/i.test(raw))
|
|
75
|
+
return undefined;
|
|
76
|
+
const leaf = raw.split('/').pop() ?? raw;
|
|
77
|
+
return leaf.replace(/\.[a-z0-9]+$/i, '') || undefined;
|
|
78
|
+
}
|
|
79
|
+
function usefulCtorName(value) {
|
|
80
|
+
const name = value.constructor?.name;
|
|
81
|
+
if (!name || isGenericPixiCtor(name))
|
|
82
|
+
return undefined;
|
|
83
|
+
return name.replace(/^_+/, '') || undefined;
|
|
84
|
+
}
|
|
85
|
+
function fieldLabel(key) {
|
|
86
|
+
const trimmed = key.replace(/^_+/, '');
|
|
87
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
88
|
+
}
|
|
89
|
+
function isPixiDisplay(value) {
|
|
90
|
+
return ('addChild' in value &&
|
|
91
|
+
typeof value.addChild === 'function' &&
|
|
92
|
+
'children' in value);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Bubbo-style owner, identity only. TitleScreen keeps `this._cannon` and
|
|
96
|
+
* parents `this._cannon.view`. A grouping node is the field itself
|
|
97
|
+
* (`this._bottomAnimContainer`). A pool or atlas lives in a bag — Array,
|
|
98
|
+
* Map, Set, or an object literal (`_decor[]`, `allSystems`, `_parts[id]`).
|
|
99
|
+
* Scan each ancestor's own fields first — a flood walk of Pixi internals
|
|
100
|
+
* never reached `_cannon` inside the budget.
|
|
101
|
+
*/
|
|
102
|
+
function viewOwnerLabel(view) {
|
|
103
|
+
const seen = new WeakSet();
|
|
104
|
+
let host = view.parent;
|
|
105
|
+
for (let hops = 0; hops < 8 && host && typeof host === 'object'; hops++) {
|
|
106
|
+
const found = labelFromHolder(host, view, seen) ?? findHeldOwner(host, view, 2, seen);
|
|
107
|
+
if (found)
|
|
108
|
+
return found;
|
|
109
|
+
host = host.parent;
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function isGameFieldKey(key) {
|
|
114
|
+
// Skip display-list indices (`0`, `1`) and Pixi internals (`children`).
|
|
115
|
+
return /^_?[A-Za-z][A-Za-zA-Z0-9]*$/.test(key) && !PIXI_INTERNAL_KEY.has(key);
|
|
116
|
+
}
|
|
117
|
+
const PIXI_INTERNAL_KEY = new Set([
|
|
118
|
+
'parent',
|
|
119
|
+
'children',
|
|
120
|
+
'transform',
|
|
121
|
+
'position',
|
|
122
|
+
'scale',
|
|
123
|
+
'pivot',
|
|
124
|
+
'skew',
|
|
125
|
+
'worldTransform',
|
|
126
|
+
'localTransform',
|
|
127
|
+
]);
|
|
128
|
+
function labelFromHolder(host, view, seen) {
|
|
129
|
+
if (seen.has(host))
|
|
130
|
+
return undefined;
|
|
131
|
+
seen.add(host);
|
|
132
|
+
const asBag = nameInBag(host, view, undefined, seen);
|
|
133
|
+
if (asBag)
|
|
134
|
+
return asBag;
|
|
135
|
+
for (const [key, value] of Object.entries(host)) {
|
|
136
|
+
if (!isGameFieldKey(key))
|
|
137
|
+
continue;
|
|
138
|
+
const named = nameIfHoldsView(host, key, value, view);
|
|
139
|
+
if (named)
|
|
140
|
+
return named;
|
|
141
|
+
const nested = nameInBag(value, view, key, seen);
|
|
142
|
+
if (nested)
|
|
143
|
+
return nested;
|
|
144
|
+
}
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
function nameInBag(value, view, fieldKey, seen) {
|
|
148
|
+
const entries = bagEntries(value);
|
|
149
|
+
if (!entries)
|
|
150
|
+
return undefined;
|
|
151
|
+
for (const [itemKey, item] of entries) {
|
|
152
|
+
const named = nameBagItem(value, item, usableBagKey(itemKey) ?? fieldKey, view, seen);
|
|
153
|
+
if (named)
|
|
154
|
+
return named;
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
function nameBagItem(bag, item, key, view, seen) {
|
|
159
|
+
if (key) {
|
|
160
|
+
const named = nameIfHoldsView(item && typeof item === 'object' ? item : bag, key, item, view);
|
|
161
|
+
if (named)
|
|
162
|
+
return named;
|
|
163
|
+
}
|
|
164
|
+
else if (item && typeof item === 'object' && item.view === view) {
|
|
165
|
+
const named = usefulCtorName(item);
|
|
166
|
+
if (named)
|
|
167
|
+
return named;
|
|
168
|
+
}
|
|
169
|
+
if (item && typeof item === 'object' && !isPixiDisplay(item)) {
|
|
170
|
+
return labelFromHolder(item, view, seen);
|
|
171
|
+
}
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
function usableBagKey(key) {
|
|
175
|
+
if (!key || /^\d+$/.test(key))
|
|
176
|
+
return undefined;
|
|
177
|
+
return isGameFieldKey(key) || key.includes('-') ? (fieldLabel(key) ?? key) : undefined;
|
|
178
|
+
}
|
|
179
|
+
function bagEntries(value) {
|
|
180
|
+
if (!value || typeof value !== 'object')
|
|
181
|
+
return undefined;
|
|
182
|
+
// Game arrays are allowed to be exotic subclasses. Do not dispatch through
|
|
183
|
+
// their overridable `map`: one shipped Pixi game returns its elements rather
|
|
184
|
+
// than `[key, value]` pairs there, which made hierarchy labeling throw while
|
|
185
|
+
// destructuring the result. The authoring seam treats game objects as
|
|
186
|
+
// untrusted observations, so normalize with indexed reads into our own array.
|
|
187
|
+
if (Array.isArray(value)) {
|
|
188
|
+
const entries = [];
|
|
189
|
+
for (let index = 0; index < value.length; index++) {
|
|
190
|
+
entries.push([String(index), value[index]]);
|
|
191
|
+
}
|
|
192
|
+
return entries;
|
|
193
|
+
}
|
|
194
|
+
if (value instanceof Map)
|
|
195
|
+
return [...value.entries()].map(([key, item]) => [String(key), item]);
|
|
196
|
+
if (value instanceof Set)
|
|
197
|
+
return [...value].map((item, index) => [String(index), item]);
|
|
198
|
+
if (Object.getPrototypeOf(value) !== Object.prototype)
|
|
199
|
+
return undefined;
|
|
200
|
+
return Object.entries(value);
|
|
201
|
+
}
|
|
202
|
+
function nameIfHoldsView(host, key, value, view) {
|
|
203
|
+
if (value === view) {
|
|
204
|
+
const field = fieldLabel(key);
|
|
205
|
+
if (field && field.toLowerCase() !== 'view') {
|
|
206
|
+
return usefulCtorName(value) ?? field;
|
|
207
|
+
}
|
|
208
|
+
return usefulCtorName(value) ?? usefulCtorName(host) ?? field;
|
|
209
|
+
}
|
|
210
|
+
if (value && typeof value === 'object' && value.view === view) {
|
|
211
|
+
return usefulCtorName(value) ?? fieldLabel(key);
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
function findHeldOwner(held, view, depth, seen) {
|
|
216
|
+
const direct = labelFromHolder(held, view, seen);
|
|
217
|
+
if (direct)
|
|
218
|
+
return direct;
|
|
219
|
+
if (depth <= 0)
|
|
220
|
+
return undefined;
|
|
221
|
+
for (const value of Object.values(held)) {
|
|
222
|
+
if (!value || typeof value !== 'object' || isPixiDisplay(value))
|
|
223
|
+
continue;
|
|
224
|
+
const found = findHeldOwner(value, view, depth - 1, seen);
|
|
225
|
+
if (found)
|
|
226
|
+
return found;
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
11
230
|
/** Deterministic structural-path ids: `w2d:<path>:<kind>:<label>`. */
|
|
12
231
|
export const STRUCTURAL_CANVAS_IDENTITY = {
|
|
13
232
|
idFor: (object, path) => `w2d:${path.join('/')}:${kindOf(object)}:${object.label ?? ''}`,
|
|
@@ -76,7 +295,7 @@ export class AuthoringAdapter2D {
|
|
|
76
295
|
const self = o;
|
|
77
296
|
return {
|
|
78
297
|
id: self.__authId ?? '',
|
|
79
|
-
label:
|
|
298
|
+
label: displayLabel(o),
|
|
80
299
|
kind: kindOf(o),
|
|
81
300
|
parentId: o.parent?.__authId ?? null,
|
|
82
301
|
childIds: o.children.map((c) => c.__authId ?? ''),
|
package/dist/pixi/ingest.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VisibleCaptureWindow } from '../adapter/ingest/visible-capture-window';
|
|
2
|
-
import { type SceneCapture2DHandle } from './scene-capture';
|
|
2
|
+
import { type CapturedRuntime2D, type SceneCapture2DHandle } from './scene-capture';
|
|
3
3
|
/** A registered unmodified PixiJS game (the Pixi analog of `IngestGame`). */
|
|
4
4
|
export interface IngestGame2D {
|
|
5
5
|
id: string;
|
|
@@ -33,5 +33,6 @@ export interface IngestMount2D {
|
|
|
33
33
|
export declare function mountIngestGame2D(pixiNamespace: unknown, game: IngestGame2D, opts?: {
|
|
34
34
|
captureTimeoutMs?: number;
|
|
35
35
|
onWait?: (wait: VisibleCaptureWindow | null) => void;
|
|
36
|
+
acceptCapture?: (runtime: CapturedRuntime2D) => boolean;
|
|
36
37
|
}): Promise<IngestMount2D>;
|
|
37
38
|
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/pixi/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/pixi/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC;CACpD,GACL,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
|
package/dist/pixi/ingest.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { installSceneCapture2D } from './scene-capture';
|
|
1
|
+
import { installSceneCapture2D, } from './scene-capture';
|
|
2
2
|
/**
|
|
3
3
|
* Mount an UNMODIFIED PixiJS game via the shared-instance capture path — the 2D
|
|
4
4
|
* analog of `mountIngestGame`. Installs the render trap on the host's pixi
|
|
@@ -13,7 +13,9 @@ import { installSceneCapture2D } from './scene-capture';
|
|
|
13
13
|
* visible frame — the tab is hidden" over a canvas ingest too.
|
|
14
14
|
*/
|
|
15
15
|
export async function mountIngestGame2D(pixiNamespace, game, opts = {}) {
|
|
16
|
-
const capture = installSceneCapture2D(pixiNamespace
|
|
16
|
+
const capture = installSceneCapture2D(pixiNamespace, {
|
|
17
|
+
...(opts.acceptCapture ? { accept: opts.acceptCapture } : {}),
|
|
18
|
+
});
|
|
17
19
|
try {
|
|
18
20
|
await game.load();
|
|
19
21
|
}
|
|
@@ -65,10 +65,18 @@ export interface SceneCapture2DHandle {
|
|
|
65
65
|
setPaused(paused: boolean): void;
|
|
66
66
|
uninstall(): void;
|
|
67
67
|
}
|
|
68
|
+
export interface SceneCapture2DOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Select the runtime owned by this mount when other Pixi Applications share
|
|
71
|
+
* the page (for example editor prefab previews). Rejected draws still count,
|
|
72
|
+
* but cannot satisfy {@link SceneCapture2DHandle.waitForCapture}.
|
|
73
|
+
*/
|
|
74
|
+
accept?: ((runtime: CapturedRuntime2D) => boolean) | undefined;
|
|
75
|
+
}
|
|
68
76
|
/**
|
|
69
77
|
* Install the render trap on `pixiNamespace.Application.prototype.render`. Pass the
|
|
70
78
|
* host's `pixi.js` namespace so a shared-instance game is trapped. Install once per
|
|
71
79
|
* ingest session; `uninstall()` on teardown.
|
|
72
80
|
*/
|
|
73
|
-
export declare function installSceneCapture2D(pixiNamespace: unknown): SceneCapture2DHandle;
|
|
81
|
+
export declare function installSceneCapture2D(pixiNamespace: unknown, options?: SceneCapture2DOptions): SceneCapture2DHandle;
|
|
74
82
|
//# sourceMappingURL=scene-capture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-capture.d.ts","sourceRoot":"","sources":["../../src/pixi/scene-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,YAAY,IAAI,MAAM,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI,IAAI,CAAC;CACnB;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"scene-capture.d.ts","sourceRoot":"","sources":["../../src/pixi/scene-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,YAAY,IAAI,MAAM,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI,IAAI,CAAC;CACnB;AAMD,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAChE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAmFtB"}
|