@iwer/devui 0.1.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.
Files changed (58) hide show
  1. package/build/iwe.min.js +180 -0
  2. package/build/iwer-devui.js +40068 -0
  3. package/build/iwer-devui.min.js +252 -0
  4. package/build/iwer-devui.module.js +40060 -0
  5. package/build/iwer-devui.module.min.js +252 -0
  6. package/lib/components/analog.d.ts +11 -0
  7. package/lib/components/analog.d.ts.map +1 -0
  8. package/lib/components/analog.js +103 -0
  9. package/lib/components/analog.js.map +1 -0
  10. package/lib/components/binary.d.ts +11 -0
  11. package/lib/components/binary.d.ts.map +1 -0
  12. package/lib/components/binary.js +69 -0
  13. package/lib/components/binary.js.map +1 -0
  14. package/lib/components/controls.d.ts +11 -0
  15. package/lib/components/controls.d.ts.map +1 -0
  16. package/lib/components/controls.js +58 -0
  17. package/lib/components/controls.js.map +1 -0
  18. package/lib/components/fov.d.ts +10 -0
  19. package/lib/components/fov.d.ts.map +1 -0
  20. package/lib/components/fov.js +25 -0
  21. package/lib/components/fov.js.map +1 -0
  22. package/lib/components/header.d.ts +14 -0
  23. package/lib/components/header.d.ts.map +1 -0
  24. package/lib/components/header.js +70 -0
  25. package/lib/components/header.js.map +1 -0
  26. package/lib/components/icons.d.ts +31 -0
  27. package/lib/components/icons.d.ts.map +1 -0
  28. package/lib/components/icons.js +254 -0
  29. package/lib/components/icons.js.map +1 -0
  30. package/lib/components/joystick.d.ts +15 -0
  31. package/lib/components/joystick.d.ts.map +1 -0
  32. package/lib/components/joystick.js +238 -0
  33. package/lib/components/joystick.js.map +1 -0
  34. package/lib/components/keys.d.ts +4 -0
  35. package/lib/components/keys.d.ts.map +1 -0
  36. package/lib/components/keys.js +68 -0
  37. package/lib/components/keys.js.map +1 -0
  38. package/lib/components/mapper.d.ts +12 -0
  39. package/lib/components/mapper.d.ts.map +1 -0
  40. package/lib/components/mapper.js +128 -0
  41. package/lib/components/mapper.js.map +1 -0
  42. package/lib/components/settings.d.ts +50 -0
  43. package/lib/components/settings.d.ts.map +1 -0
  44. package/lib/components/settings.js +103 -0
  45. package/lib/components/settings.js.map +1 -0
  46. package/lib/components/styled.d.ts +31 -0
  47. package/lib/components/styled.d.ts.map +1 -0
  48. package/lib/components/styled.js +153 -0
  49. package/lib/components/styled.js.map +1 -0
  50. package/lib/index.d.ts +12 -0
  51. package/lib/index.d.ts.map +1 -0
  52. package/lib/index.js +75 -0
  53. package/lib/index.js.map +1 -0
  54. package/lib/scene.d.ts +54 -0
  55. package/lib/scene.d.ts.map +1 -0
  56. package/lib/scene.js +271 -0
  57. package/lib/scene.js.map +1 -0
  58. package/package.json +51 -0
package/lib/index.js ADDED
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DEFAULT_KEYMAP, KeyMapMenu } from './components/mapper.js';
3
+ import { useEffect, useState } from 'react';
4
+ import { ControlsUI } from './components/controls.js';
5
+ import { FOVMenu } from './components/fov.js';
6
+ import { HeaderUI } from './components/header.js';
7
+ import { InputLayer } from './scene.js';
8
+ import { createRoot } from 'react-dom/client';
9
+ const PRIVATE = Symbol('@@iwer/devui/devui');
10
+ export class DevUI {
11
+ constructor(xrDevice) {
12
+ xrDevice.ipd = 0;
13
+ const canvasContainer = xrDevice.canvasContainer;
14
+ const devuiContainer = document.createElement('div');
15
+ devuiContainer.style.position = 'fixed';
16
+ devuiContainer.style.width = '100%';
17
+ devuiContainer.style.height = '100%';
18
+ devuiContainer.style.top = '0';
19
+ devuiContainer.style.left = '0';
20
+ devuiContainer.style.display = 'flex';
21
+ devuiContainer.style.justifyContent = 'center';
22
+ devuiContainer.style.alignItems = 'center';
23
+ devuiContainer.style.overflow = 'hidden';
24
+ devuiContainer.style.pointerEvents = 'none';
25
+ devuiContainer.style.zIndex = '3';
26
+ canvasContainer.appendChild(devuiContainer);
27
+ const inputLayer = new InputLayer(xrDevice);
28
+ const inputLayerElement = inputLayer.domElement;
29
+ inputLayerElement.style.position = 'fixed';
30
+ inputLayerElement.style.width = '100%';
31
+ inputLayerElement.style.height = '100%';
32
+ inputLayerElement.style.top = '0';
33
+ inputLayerElement.style.left = '0';
34
+ inputLayerElement.style.zIndex = '2';
35
+ canvasContainer.appendChild(inputLayerElement);
36
+ const root = createRoot(devuiContainer);
37
+ root.render(_jsx(Overlay, { xrDevice: xrDevice, inputLayer: inputLayer }));
38
+ this[PRIVATE] = {
39
+ xrDevice,
40
+ inputLayer,
41
+ };
42
+ }
43
+ }
44
+ const Overlay = ({ xrDevice, inputLayer }) => {
45
+ const [pointerLocked, setPointerLocked] = useState(false);
46
+ const [keyMap, setKeyMap] = useState(DEFAULT_KEYMAP);
47
+ const [keyMapOpen, setKeyMapOpen] = useState(false);
48
+ const [fovSettingOpen, setFovSettingOpen] = useState(false);
49
+ useEffect(() => {
50
+ const pointerLockChangeHandler = () => {
51
+ const locked = document.pointerLockElement ||
52
+ // @ts-ignore
53
+ document.mozPointerLockElement ||
54
+ // @ts-ignore
55
+ document.webkitPointerLockElement;
56
+ setPointerLocked(!!locked);
57
+ };
58
+ document.addEventListener('pointerlockchange', pointerLockChangeHandler, false);
59
+ document.addEventListener('mozpointerlockchange', pointerLockChangeHandler, false);
60
+ document.addEventListener('webkitpointerlockchange', pointerLockChangeHandler, false);
61
+ return () => {
62
+ document.removeEventListener('pointerlockchange', pointerLockChangeHandler, false);
63
+ document.removeEventListener('mozpointerlockchange', pointerLockChangeHandler, false);
64
+ document.removeEventListener('webkitpointerlockchange', pointerLockChangeHandler, false);
65
+ };
66
+ }, []);
67
+ return (_jsxs("div", { style: {
68
+ width: '100vw',
69
+ height: '100vh',
70
+ display: 'flex',
71
+ flexDirection: 'column',
72
+ justifyContent: 'space-between',
73
+ }, children: [_jsx(HeaderUI, { xrDevice: xrDevice, inputLayer: inputLayer, keyMapOpen: keyMapOpen, setKeyMapOpen: setKeyMapOpen, fovSettingOpen: fovSettingOpen, setFovSettingOpen: setFovSettingOpen }), keyMapOpen && _jsx(KeyMapMenu, { keyMap: keyMap, setKeyMap: setKeyMap }), fovSettingOpen && (_jsx(FOVMenu, { xrDevice: xrDevice, inputLayer: inputLayer })), _jsx(ControlsUI, { xrDevice: xrDevice, keyMap: keyMap, pointerLocked: pointerLocked })] }));
74
+ };
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAc,MAAM,wBAAwB,CAAC;AAChF,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAE7C,MAAM,OAAO,KAAK;IAMjB,YAAY,QAAkB;QAC7B,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;QACjB,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;QACjD,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxC,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACpC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACrC,cAAc,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAC/B,cAAc,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QAChC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACtC,cAAc,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/C,cAAc,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC3C,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,cAAc,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAClC,eAAe,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC;QAChD,iBAAiB,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC3C,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACvC,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACxC,iBAAiB,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAClC,iBAAiB,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QACnC,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACrC,eAAe,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,KAAC,OAAO,IAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,GAAG;YACf,QAAQ;YACR,UAAU;SACV,CAAC;IACH,CAAC;CACD;AAOD,MAAM,OAAO,GAA2B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAa,cAAc,CAAC,CAAC;IACjE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,wBAAwB,GAAG,GAAG,EAAE;YACrC,MAAM,MAAM,GACX,QAAQ,CAAC,kBAAkB;gBAC3B,aAAa;gBACb,QAAQ,CAAC,qBAAqB;gBAC9B,aAAa;gBACb,QAAQ,CAAC,wBAAwB,CAAC;YACnC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CACxB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,CACL,CAAC;QACF,QAAQ,CAAC,gBAAgB,CACxB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,CACL,CAAC;QACF,QAAQ,CAAC,gBAAgB,CACxB,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,CACL,CAAC;QAEF,OAAO,GAAG,EAAE;YACX,QAAQ,CAAC,mBAAmB,CAC3B,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,CACL,CAAC;YACF,QAAQ,CAAC,mBAAmB,CAC3B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,CACL,CAAC;YACF,QAAQ,CAAC,mBAAmB,CAC3B,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,CACL,CAAC;QACH,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACN,eACC,KAAK,EAAE;YACN,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,eAAe;SAC/B,aAED,KAAC,QAAQ,IACR,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,GACnC,EACD,UAAU,IAAI,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAI,EAClE,cAAc,IAAI,CAClB,KAAC,OAAO,IAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAI,CACvD,EACD,KAAC,UAAU,IACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,IACG,CACN,CAAC;AACH,CAAC,CAAC"}
package/lib/scene.d.ts ADDED
@@ -0,0 +1,54 @@
1
+ import { Group, Mesh, PerspectiveCamera, Quaternion, Scene, Vector3, WebGLRenderer } from 'three';
2
+ import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
3
+ import { XRDevice } from 'iwer';
4
+ declare const PRIVATE: unique symbol;
5
+ export declare class InputLayer {
6
+ [PRIVATE]: {
7
+ canvasContainer: HTMLDivElement;
8
+ renderer: WebGLRenderer;
9
+ scene: Scene;
10
+ camera: PerspectiveCamera;
11
+ playerRig: Group;
12
+ cameraRig: Group;
13
+ resizeObserver: ResizeObserver;
14
+ xrDevice: XRDevice;
15
+ controllerIndicators: {
16
+ [key in 'left' | 'right']: Mesh;
17
+ };
18
+ transformControls: {
19
+ [key in 'left' | 'right']: TransformControls;
20
+ };
21
+ isPointerLocked: boolean;
22
+ vec3: Vector3;
23
+ quat: Quaternion;
24
+ mouseMoveHandler: (event: MouseEvent) => void;
25
+ headsetDefaultPosition: Vector3;
26
+ headsetDefaultQuaternion: Quaternion;
27
+ controllerDefaultPositions: {
28
+ [key in 'left' | 'right']: Vector3;
29
+ };
30
+ controllerDefaultQuaternions: {
31
+ [key in 'left' | 'right']: Quaternion;
32
+ };
33
+ keyState: {
34
+ [key: string]: boolean;
35
+ };
36
+ movePlayerRig: () => void;
37
+ moveInterval: number | null;
38
+ };
39
+ constructor(xrDevice: XRDevice);
40
+ lockPointer(): void;
41
+ pointerLockChangeHandler(): void;
42
+ keyDownHandler(event: KeyboardEvent): void;
43
+ keyUpHandler(event: KeyboardEvent): void;
44
+ movePlayerRig(): void;
45
+ syncFovy(): void;
46
+ resetDeviceTransforms(): void;
47
+ syncDeviceTransforms(): void;
48
+ renderScene(): void;
49
+ get domElement(): HTMLCanvasElement;
50
+ resize(): void;
51
+ dispose(): void;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,EACL,IAAI,EAEJ,iBAAiB,EACjB,UAAU,EAEV,KAAK,EACL,OAAO,EACP,aAAa,EACb,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,QAAA,MAAM,OAAO,eAAqC,CAAC;AAGnD,qBAAa,UAAU;IACtB,CAAC,OAAO,CAAC,EAAE;QACV,eAAe,EAAE,cAAc,CAAC;QAChC,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,iBAAiB,CAAC;QAC1B,SAAS,EAAE,KAAK,CAAC;QACjB,SAAS,EAAE,KAAK,CAAC;QACjB,cAAc,EAAE,cAAc,CAAC;QAC/B,QAAQ,EAAE,QAAQ,CAAC;QACnB,oBAAoB,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,OAAO,GAAG,IAAI;SAAE,CAAC;QAC1D,iBAAiB,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,OAAO,GAAG,iBAAiB;SAAE,CAAC;QACpE,eAAe,EAAE,OAAO,CAAC;QACzB,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,EAAE,UAAU,CAAC;QACjB,gBAAgB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC9C,sBAAsB,EAAE,OAAO,CAAC;QAChC,wBAAwB,EAAE,UAAU,CAAC;QACrC,0BAA0B,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,OAAO,GAAG,OAAO;SAAE,CAAC;QACnE,4BAA4B,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,OAAO,GAAG,UAAU;SAAE,CAAC;QACxE,QAAQ,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QACrC,aAAa,EAAE,MAAM,IAAI,CAAC;QAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;gBAEU,QAAQ,EAAE,QAAQ;IAqL9B,WAAW;IAUX,wBAAwB;IAmCxB,cAAc,CAAC,KAAK,EAAE,aAAa;IA2BnC,YAAY,CAAC,KAAK,EAAE,aAAa;IAkBjC,aAAa;IAkBb,QAAQ;IAKR,qBAAqB;IAsBrB,oBAAoB;IAsBpB,WAAW;IAKX,IAAI,UAAU,sBAEb;IAED,MAAM;IASN,OAAO;CA8BP"}
package/lib/scene.js ADDED
@@ -0,0 +1,271 @@
1
+ import { BoxGeometry, FrontSide, Group, Mesh, MeshBasicMaterial, PerspectiveCamera, Quaternion, RingGeometry, Scene, Vector3, WebGLRenderer, } from 'three';
2
+ import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
3
+ const PRIVATE = Symbol('@@iwer/devui/input-scene');
4
+ const FREE_MOVEMENT_SPEED = 0.016;
5
+ export class InputLayer {
6
+ constructor(xrDevice) {
7
+ const canvasContainer = xrDevice.canvasContainer;
8
+ // Create a scene
9
+ const scene = new Scene();
10
+ // Create a camera
11
+ const camera = new PerspectiveCamera((xrDevice.fovy / Math.PI) * 180, canvasContainer.offsetWidth / canvasContainer.offsetHeight, 0.1, 1000);
12
+ const playerRig = new Group();
13
+ const cameraRig = new Group();
14
+ scene.add(playerRig);
15
+ playerRig.add(cameraRig);
16
+ cameraRig.position.fromArray(xrDevice.position.vec3);
17
+ cameraRig.quaternion.fromArray(xrDevice.quaternion.quat);
18
+ cameraRig.add(camera);
19
+ camera.position.x -= xrDevice.ipd / 2;
20
+ const leftControllerIndicator = new Mesh(new BoxGeometry(0.1, 0.1, 0.1));
21
+ const rightControllerIndicator = leftControllerIndicator.clone();
22
+ leftControllerIndicator.position.fromArray(xrDevice.controllers.left.position.vec3);
23
+ leftControllerIndicator.quaternion.fromArray(xrDevice.controllers.left.quaternion.quat);
24
+ rightControllerIndicator.position.fromArray(xrDevice.controllers.right.position.vec3);
25
+ rightControllerIndicator.quaternion.fromArray(xrDevice.controllers.right.quaternion.quat);
26
+ cameraRig.attach(leftControllerIndicator);
27
+ cameraRig.attach(rightControllerIndicator);
28
+ leftControllerIndicator.visible = false;
29
+ rightControllerIndicator.visible = false;
30
+ const spaceOriginIndicator = new Mesh(new RingGeometry(0.25, 0.27, 32), new MeshBasicMaterial({
31
+ color: 0xffffff,
32
+ side: FrontSide,
33
+ }));
34
+ spaceOriginIndicator.rotateX(-Math.PI / 2);
35
+ scene.add(spaceOriginIndicator);
36
+ // Create a renderer
37
+ const renderer = new WebGLRenderer({ alpha: true });
38
+ renderer.setSize(canvasContainer.offsetWidth, canvasContainer.offsetHeight);
39
+ renderer.setClearColor(0x000000, 0);
40
+ canvasContainer.appendChild(renderer.domElement);
41
+ const leftTransformControls = new TransformControls(camera, renderer.domElement);
42
+ leftTransformControls.attach(leftControllerIndicator);
43
+ scene.add(leftTransformControls);
44
+ const rightTransformControls = new TransformControls(camera, renderer.domElement);
45
+ rightTransformControls.attach(rightControllerIndicator);
46
+ scene.add(rightTransformControls);
47
+ const resizeObserver = new ResizeObserver(() => {
48
+ this.resize();
49
+ });
50
+ resizeObserver.observe(canvasContainer);
51
+ // Event listeners for TransformControls
52
+ const setupTransformControls = (controls) => {
53
+ controls.addEventListener('mouseDown', () => {
54
+ controls.userData.pressStart = performance.now();
55
+ });
56
+ controls.addEventListener('mouseUp', () => {
57
+ const pressTime = performance.now() - controls.userData.pressStart;
58
+ controls.userData.pressStart = null;
59
+ if (pressTime < 200) {
60
+ if (controls.mode === 'rotate') {
61
+ controls.setMode('translate');
62
+ }
63
+ else {
64
+ controls.setMode('rotate');
65
+ }
66
+ }
67
+ });
68
+ controls.addEventListener('change', () => {
69
+ this.renderScene();
70
+ });
71
+ };
72
+ setupTransformControls(leftTransformControls);
73
+ setupTransformControls(rightTransformControls);
74
+ const mouseMoveHandler = (event) => {
75
+ if (!this[PRIVATE].isPointerLocked)
76
+ return;
77
+ const movementX =
78
+ // @ts-ignore
79
+ event.movementX || event.mozMovementX || event.webkitMovementX || 0;
80
+ const movementY =
81
+ // @ts-ignore
82
+ event.movementY || event.mozMovementY || event.webkitMovementY || 0;
83
+ playerRig.rotation.y -= movementX * 0.002;
84
+ cameraRig.rotation.x -= movementY * 0.002;
85
+ xrDevice.quaternion.copy(cameraRig.getWorldQuaternion(new Quaternion()));
86
+ this.renderScene();
87
+ };
88
+ this[PRIVATE] = {
89
+ canvasContainer,
90
+ renderer,
91
+ scene,
92
+ camera,
93
+ playerRig,
94
+ cameraRig,
95
+ xrDevice,
96
+ controllerIndicators: {
97
+ left: leftControllerIndicator,
98
+ right: rightControllerIndicator,
99
+ },
100
+ transformControls: {
101
+ left: leftTransformControls,
102
+ right: rightTransformControls,
103
+ },
104
+ headsetDefaultPosition: cameraRig.position.clone(),
105
+ headsetDefaultQuaternion: cameraRig.quaternion.clone(),
106
+ controllerDefaultPositions: {
107
+ left: leftControllerIndicator.position.clone(),
108
+ right: rightControllerIndicator.position.clone(),
109
+ },
110
+ controllerDefaultQuaternions: {
111
+ left: leftControllerIndicator.quaternion.clone(),
112
+ right: rightControllerIndicator.quaternion.clone(),
113
+ },
114
+ resizeObserver,
115
+ isPointerLocked: false,
116
+ vec3: new Vector3(),
117
+ quat: new Quaternion(),
118
+ mouseMoveHandler,
119
+ keyState: {
120
+ ShiftLeft: false,
121
+ KeyW: false,
122
+ KeyA: false,
123
+ KeyS: false,
124
+ KeyD: false,
125
+ ArrowUp: false,
126
+ ArrowDown: false,
127
+ },
128
+ movePlayerRig: () => this.movePlayerRig(),
129
+ moveInterval: null,
130
+ };
131
+ document.addEventListener('pointerlockchange', this.pointerLockChangeHandler.bind(this), false);
132
+ document.addEventListener('mozpointerlockchange', this.pointerLockChangeHandler.bind(this), false);
133
+ document.addEventListener('webkitpointerlockchange', this.pointerLockChangeHandler.bind(this), false);
134
+ document.addEventListener('keydown', this.keyDownHandler.bind(this), false);
135
+ document.addEventListener('keyup', this.keyUpHandler.bind(this), false);
136
+ }
137
+ lockPointer() {
138
+ this[PRIVATE].renderer.domElement.requestPointerLock =
139
+ this[PRIVATE].renderer.domElement.requestPointerLock ||
140
+ // @ts-ignore
141
+ this[PRIVATE].renderer.domElement.mozRequestPointerLock ||
142
+ // @ts-ignore
143
+ this[PRIVATE].renderer.domElement.webkitRequestPointerLock;
144
+ this[PRIVATE].renderer.domElement.requestPointerLock();
145
+ }
146
+ pointerLockChangeHandler() {
147
+ this[PRIVATE].isPointerLocked =
148
+ document.pointerLockElement === this[PRIVATE].renderer.domElement ||
149
+ // @ts-ignore
150
+ document.mozPointerLockElement === this[PRIVATE].renderer.domElement ||
151
+ // @ts-ignore
152
+ document.webkitPointerLockElement === this[PRIVATE].renderer.domElement;
153
+ if (this[PRIVATE].isPointerLocked) {
154
+ document.addEventListener('mousemove', this[PRIVATE].mouseMoveHandler, false);
155
+ Object.values(this[PRIVATE].transformControls).forEach((transformControls) => {
156
+ transformControls.enabled = false;
157
+ transformControls.visible = false;
158
+ });
159
+ }
160
+ else {
161
+ document.removeEventListener('mousemove', this[PRIVATE].mouseMoveHandler, false);
162
+ Object.values(this[PRIVATE].transformControls).forEach((transformControls) => {
163
+ transformControls.enabled = true;
164
+ transformControls.visible = true;
165
+ });
166
+ }
167
+ }
168
+ keyDownHandler(event) {
169
+ const { keyState, movePlayerRig, moveInterval } = this[PRIVATE];
170
+ if (event.code in keyState) {
171
+ keyState[event.code] = true;
172
+ }
173
+ if (keyState.ShiftLeft &&
174
+ (keyState.KeyW || keyState.KeyA || keyState.KeyS || keyState.KeyD)) {
175
+ if (!moveInterval) {
176
+ this[PRIVATE].moveInterval = window.setInterval(movePlayerRig, 16);
177
+ }
178
+ }
179
+ if (keyState.ShiftLeft && keyState.ArrowUp) {
180
+ this[PRIVATE].cameraRig.position.y += 0.05;
181
+ this.renderScene();
182
+ }
183
+ if (keyState.ShiftLeft && keyState.ArrowDown) {
184
+ this[PRIVATE].cameraRig.position.y -= 0.05;
185
+ this.renderScene();
186
+ }
187
+ }
188
+ keyUpHandler(event) {
189
+ const { keyState, moveInterval } = this[PRIVATE];
190
+ if (event.code in keyState) {
191
+ keyState[event.code] = false;
192
+ }
193
+ if (!keyState.ShiftLeft ||
194
+ !(keyState.KeyW || keyState.KeyA || keyState.KeyS || keyState.KeyD)) {
195
+ if (moveInterval) {
196
+ window.clearInterval(moveInterval);
197
+ this[PRIVATE].moveInterval = null;
198
+ }
199
+ }
200
+ }
201
+ movePlayerRig() {
202
+ const { playerRig, keyState, vec3 } = this[PRIVATE];
203
+ vec3.set((keyState.KeyD ? 1 : 0) - (keyState.KeyA ? 1 : 0), 0, (keyState.KeyS ? 1 : 0) - (keyState.KeyW ? 1 : 0));
204
+ if (vec3.lengthSq() > 0) {
205
+ vec3
206
+ .normalize()
207
+ .multiplyScalar(FREE_MOVEMENT_SPEED)
208
+ .applyQuaternion(playerRig.quaternion);
209
+ playerRig.position.add(vec3);
210
+ this.renderScene();
211
+ }
212
+ }
213
+ syncFovy() {
214
+ this[PRIVATE].camera.fov = (this[PRIVATE].xrDevice.fovy / Math.PI) * 180;
215
+ this[PRIVATE].camera.updateProjectionMatrix();
216
+ }
217
+ resetDeviceTransforms() {
218
+ const { playerRig, cameraRig, controllerIndicators } = this[PRIVATE];
219
+ cameraRig.position.copy(this[PRIVATE].headsetDefaultPosition);
220
+ cameraRig.quaternion.set(0, 0, 0, 1);
221
+ playerRig.position.set(0, 0, 0);
222
+ playerRig.quaternion.set(0, 0, 0, 1);
223
+ Object.entries(controllerIndicators).forEach(([handedness, controllerIndicator]) => {
224
+ controllerIndicator.position.copy(
225
+ // @ts-ignore
226
+ this[PRIVATE].controllerDefaultPositions[handedness]);
227
+ controllerIndicator.quaternion.copy(
228
+ // @ts-ignore
229
+ this[PRIVATE].controllerDefaultQuaternions[handedness]);
230
+ });
231
+ this.syncDeviceTransforms();
232
+ this.renderScene();
233
+ }
234
+ syncDeviceTransforms() {
235
+ const { xrDevice, cameraRig, controllerIndicators } = this[PRIVATE];
236
+ xrDevice.position.copy(cameraRig.getWorldPosition(this[PRIVATE].vec3));
237
+ xrDevice.quaternion.copy(cameraRig.getWorldQuaternion(this[PRIVATE].quat));
238
+ Object.entries(controllerIndicators).forEach(([handedness, controllerIndicator]) => {
239
+ // @ts-ignore
240
+ xrDevice.controllers[handedness].position.copy(controllerIndicator.getWorldPosition(this[PRIVATE].vec3));
241
+ // @ts-ignore
242
+ xrDevice.controllers[handedness].quaternion.copy(controllerIndicator.getWorldQuaternion(this[PRIVATE].quat));
243
+ });
244
+ }
245
+ renderScene() {
246
+ this.syncDeviceTransforms();
247
+ this[PRIVATE].renderer.render(this[PRIVATE].scene, this[PRIVATE].camera);
248
+ }
249
+ get domElement() {
250
+ return this[PRIVATE].renderer.domElement;
251
+ }
252
+ resize() {
253
+ const width = this[PRIVATE].canvasContainer.offsetWidth;
254
+ const height = this[PRIVATE].canvasContainer.offsetHeight;
255
+ this[PRIVATE].renderer.setSize(width, height);
256
+ this[PRIVATE].camera.aspect = width / height;
257
+ this[PRIVATE].camera.updateProjectionMatrix();
258
+ this.renderScene();
259
+ }
260
+ dispose() {
261
+ this[PRIVATE].resizeObserver.disconnect();
262
+ this[PRIVATE].renderer.dispose();
263
+ document.removeEventListener('pointerlockchange', this.pointerLockChangeHandler.bind(this), false);
264
+ document.removeEventListener('mozpointerlockchange', this.pointerLockChangeHandler.bind(this), false);
265
+ document.removeEventListener('webkitpointerlockchange', this.pointerLockChangeHandler.bind(this), false);
266
+ document.removeEventListener('mousemove', this[PRIVATE].mouseMoveHandler, false);
267
+ document.removeEventListener('keydown', this.keyDownHandler.bind(this), false);
268
+ document.removeEventListener('keyup', this.keyUpHandler.bind(this), false);
269
+ }
270
+ }
271
+ //# sourceMappingURL=scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@iwer/devui",
3
+ "version": "0.1.0",
4
+ "description": "Dev UI for IWER",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "files": [
9
+ "build",
10
+ "lib"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc && rollup -c"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/meta-quest/immersive-web-emulation-runtime.git"
18
+ },
19
+ "keywords": [],
20
+ "author": "Felix Zhang <fe1ix@meta.com>",
21
+ "license": "MIT",
22
+ "bugs": {
23
+ "url": "https://github.com/meta-quest/immersive-web-emulation-runtime/issues"
24
+ },
25
+ "homepage": "https://github.com/meta-quest/immersive-web-emulation-runtime#readme",
26
+ "dependencies": {
27
+ "@fortawesome/fontawesome-svg-core": "^6.5.2",
28
+ "@fortawesome/free-solid-svg-icons": "^6.5.2",
29
+ "@fortawesome/react-fontawesome": "^0.2.2",
30
+ "react": "^18.3.1",
31
+ "react-dom": "^18.3.1",
32
+ "styled-components": "^6.1.11",
33
+ "three": "^0.166.1"
34
+ },
35
+ "peerDependencies": {
36
+ "iwer": "1.0.2"
37
+ },
38
+ "devDependencies": {
39
+ "@rollup/plugin-babel": "^6.0.4",
40
+ "@rollup/plugin-commonjs": "^26.0.1",
41
+ "@rollup/plugin-node-resolve": "^15.2.3",
42
+ "@rollup/plugin-replace": "^5.0.7",
43
+ "@rollup/plugin-terser": "^0.4.4",
44
+ "@types/react": "^18.3.3",
45
+ "@types/react-dom": "^18.3.0",
46
+ "@types/styled-components": "^5.1.34",
47
+ "rollup": "^4.18.1",
48
+ "rollup-plugin-peer-deps-external": "^2.2.4",
49
+ "typescript": "^5.5.3"
50
+ }
51
+ }