@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.
- package/build/iwe.min.js +180 -0
- package/build/iwer-devui.js +40068 -0
- package/build/iwer-devui.min.js +252 -0
- package/build/iwer-devui.module.js +40060 -0
- package/build/iwer-devui.module.min.js +252 -0
- package/lib/components/analog.d.ts +11 -0
- package/lib/components/analog.d.ts.map +1 -0
- package/lib/components/analog.js +103 -0
- package/lib/components/analog.js.map +1 -0
- package/lib/components/binary.d.ts +11 -0
- package/lib/components/binary.d.ts.map +1 -0
- package/lib/components/binary.js +69 -0
- package/lib/components/binary.js.map +1 -0
- package/lib/components/controls.d.ts +11 -0
- package/lib/components/controls.d.ts.map +1 -0
- package/lib/components/controls.js +58 -0
- package/lib/components/controls.js.map +1 -0
- package/lib/components/fov.d.ts +10 -0
- package/lib/components/fov.d.ts.map +1 -0
- package/lib/components/fov.js +25 -0
- package/lib/components/fov.js.map +1 -0
- package/lib/components/header.d.ts +14 -0
- package/lib/components/header.d.ts.map +1 -0
- package/lib/components/header.js +70 -0
- package/lib/components/header.js.map +1 -0
- package/lib/components/icons.d.ts +31 -0
- package/lib/components/icons.d.ts.map +1 -0
- package/lib/components/icons.js +254 -0
- package/lib/components/icons.js.map +1 -0
- package/lib/components/joystick.d.ts +15 -0
- package/lib/components/joystick.d.ts.map +1 -0
- package/lib/components/joystick.js +238 -0
- package/lib/components/joystick.js.map +1 -0
- package/lib/components/keys.d.ts +4 -0
- package/lib/components/keys.d.ts.map +1 -0
- package/lib/components/keys.js +68 -0
- package/lib/components/keys.js.map +1 -0
- package/lib/components/mapper.d.ts +12 -0
- package/lib/components/mapper.d.ts.map +1 -0
- package/lib/components/mapper.js +128 -0
- package/lib/components/mapper.js.map +1 -0
- package/lib/components/settings.d.ts +50 -0
- package/lib/components/settings.d.ts.map +1 -0
- package/lib/components/settings.js +103 -0
- package/lib/components/settings.js.map +1 -0
- package/lib/components/styled.d.ts +31 -0
- package/lib/components/styled.d.ts.map +1 -0
- package/lib/components/styled.js +153 -0
- package/lib/components/styled.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +75 -0
- package/lib/index.js.map +1 -0
- package/lib/scene.d.ts +54 -0
- package/lib/scene.d.ts.map +1 -0
- package/lib/scene.js +271 -0
- package/lib/scene.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XRController } from '../../../lib/device/XRController';
|
|
3
|
+
interface AnalogButtonProps {
|
|
4
|
+
xrController: XRController;
|
|
5
|
+
buttonId: string;
|
|
6
|
+
pointerLocked: boolean;
|
|
7
|
+
mappedKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const AnalogButton: React.FC<AnalogButtonProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=analog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/components/analog.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,UAAU,iBAAiB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyIpD,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, ButtonContainer, ButtonGroup, FAIcon, MappedKeyBlock, RangeSelector, } from './styled.js';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { GamepadIcon } from './icons.js';
|
|
5
|
+
import { MappedKeyDisplay } from './keys.js';
|
|
6
|
+
import { faFingerprint } from '@fortawesome/free-solid-svg-icons';
|
|
7
|
+
export const AnalogButton = ({ xrController, buttonId, pointerLocked, mappedKey, }) => {
|
|
8
|
+
const [isTouched, setIsTouched] = useState(false);
|
|
9
|
+
const [isPressed, setIsPressed] = useState(false);
|
|
10
|
+
const [isKeyPressed, setIsKeyPressed] = useState(false);
|
|
11
|
+
const [analogValue, setAnalogValue] = useState(0);
|
|
12
|
+
const handedness = xrController.inputSource.handedness;
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const handleKeyDown = (event) => {
|
|
15
|
+
if (event.code === mappedKey) {
|
|
16
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
17
|
+
setIsKeyPressed(true);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const handleKeyUp = (event) => {
|
|
21
|
+
if (event.code === mappedKey) {
|
|
22
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
23
|
+
setIsKeyPressed(false);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const handleMouseDown = (event) => {
|
|
27
|
+
if (mappedKey === 'MouseLeft' && event.button === 0) {
|
|
28
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
29
|
+
setIsKeyPressed(true);
|
|
30
|
+
}
|
|
31
|
+
else if (mappedKey === 'MouseRight' && event.button === 2) {
|
|
32
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
33
|
+
setIsKeyPressed(true);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const handleMouseUp = (event) => {
|
|
37
|
+
if (mappedKey === 'MouseLeft' && event.button === 0) {
|
|
38
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
39
|
+
setIsKeyPressed(false);
|
|
40
|
+
}
|
|
41
|
+
else if (mappedKey === 'MouseRight' && event.button === 2) {
|
|
42
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
43
|
+
setIsKeyPressed(false);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
if (pointerLocked) {
|
|
47
|
+
if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
|
|
48
|
+
window.addEventListener('mousedown', handleMouseDown);
|
|
49
|
+
window.addEventListener('mouseup', handleMouseUp);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
53
|
+
window.addEventListener('keyup', handleKeyUp);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
|
|
58
|
+
window.removeEventListener('mousedown', handleMouseDown);
|
|
59
|
+
window.removeEventListener('mouseup', handleMouseUp);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
63
|
+
window.removeEventListener('keyup', handleKeyUp);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
|
|
68
|
+
window.removeEventListener('mousedown', handleMouseDown);
|
|
69
|
+
window.removeEventListener('mouseup', handleMouseUp);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
73
|
+
window.removeEventListener('keyup', handleKeyUp);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}, [mappedKey, pointerLocked, buttonId, xrController]);
|
|
77
|
+
return (_jsxs(ButtonContainer, { "$reverse": handedness === 'right', children: [_jsx(GamepadIcon, { buttonName: buttonId, handedness: handedness }), _jsx(ButtonGroup, { "$reverse": handedness === 'right', children: pointerLocked ? (_jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { "$reverse": handedness === 'right', style: {
|
|
78
|
+
backgroundColor: isPressed
|
|
79
|
+
? 'rgba(255, 255, 255, 0.6)'
|
|
80
|
+
: 'rgba(255, 255, 255, 0.3)',
|
|
81
|
+
width: '50px',
|
|
82
|
+
}, onClick: () => {
|
|
83
|
+
setIsPressed(true);
|
|
84
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
setIsPressed(false);
|
|
87
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
88
|
+
}, 500);
|
|
89
|
+
}, children: "Press" }), _jsx(Button, { "$reverse": handedness === 'right', style: {
|
|
90
|
+
backgroundColor: isTouched
|
|
91
|
+
? 'rgba(255, 255, 255, 0.6)'
|
|
92
|
+
: 'rgba(255, 255, 255, 0.3)',
|
|
93
|
+
width: '29px',
|
|
94
|
+
}, onClick: () => {
|
|
95
|
+
setIsTouched(!isTouched);
|
|
96
|
+
xrController.updateButtonTouch(buttonId, !isTouched);
|
|
97
|
+
}, children: _jsx(FAIcon, { icon: faFingerprint }) }), _jsx(RangeSelector, { "$reverse": handedness === 'right', value: analogValue, onChange: (e) => {
|
|
98
|
+
const value = Number(e.target.value);
|
|
99
|
+
setAnalogValue(value);
|
|
100
|
+
xrController.updateButtonValue(buttonId, value / 100);
|
|
101
|
+
}, min: "0", max: "100" })] })) })] }));
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=analog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/components/analog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XRController } from '../../../lib/device/XRController';
|
|
3
|
+
interface BinaryButtonProps {
|
|
4
|
+
xrController: XRController;
|
|
5
|
+
buttonId: string;
|
|
6
|
+
pointerLocked: boolean;
|
|
7
|
+
mappedKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const BinaryButton: React.FC<BinaryButtonProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=binary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/components/binary.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,UAAU,iBAAiB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0GpD,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, ButtonContainer, ButtonGroup, FAIcon, MappedKeyBlock, } from './styled.js';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { GamepadIcon } from './icons.js';
|
|
5
|
+
import { MappedKeyDisplay } from './keys.js';
|
|
6
|
+
import { faFingerprint } from '@fortawesome/free-solid-svg-icons';
|
|
7
|
+
export const BinaryButton = ({ xrController, buttonId, pointerLocked, mappedKey, }) => {
|
|
8
|
+
const [isTouched, setIsTouched] = useState(false);
|
|
9
|
+
const [isOnHold, setIsOnHold] = useState(false);
|
|
10
|
+
const [isPressed, setIsPressed] = useState(false);
|
|
11
|
+
const [isKeyPressed, setIsKeyPressed] = useState(false);
|
|
12
|
+
const handedness = xrController.inputSource.handedness;
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const handleKeyDown = (event) => {
|
|
15
|
+
if (event.code === mappedKey) {
|
|
16
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
17
|
+
setIsKeyPressed(true);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const handleKeyUp = (event) => {
|
|
21
|
+
if (event.code === mappedKey) {
|
|
22
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
23
|
+
setIsKeyPressed(false);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
if (pointerLocked) {
|
|
27
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
28
|
+
window.addEventListener('keyup', handleKeyUp);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
32
|
+
window.removeEventListener('keyup', handleKeyUp);
|
|
33
|
+
}
|
|
34
|
+
return () => {
|
|
35
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
36
|
+
window.removeEventListener('keyup', handleKeyUp);
|
|
37
|
+
};
|
|
38
|
+
}, [mappedKey, pointerLocked, buttonId, xrController]);
|
|
39
|
+
return (_jsxs(ButtonContainer, { "$reverse": handedness === 'right', children: [_jsx(GamepadIcon, { buttonName: buttonId, handedness: handedness }), _jsx(ButtonGroup, { "$reverse": handedness === 'right', children: pointerLocked ? (_jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { "$reverse": handedness === 'right', style: {
|
|
40
|
+
backgroundColor: isPressed
|
|
41
|
+
? 'rgba(255, 255, 255, 0.6)'
|
|
42
|
+
: 'rgba(255, 255, 255, 0.3)',
|
|
43
|
+
width: '50px',
|
|
44
|
+
}, onClick: () => {
|
|
45
|
+
setIsPressed(true);
|
|
46
|
+
xrController.updateButtonValue(buttonId, 1);
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
setIsPressed(false);
|
|
49
|
+
xrController.updateButtonValue(buttonId, 0);
|
|
50
|
+
}, 500);
|
|
51
|
+
}, children: "Press" }), _jsx(Button, { "$reverse": handedness === 'right', style: {
|
|
52
|
+
backgroundColor: isTouched
|
|
53
|
+
? 'rgba(255, 255, 255, 0.6)'
|
|
54
|
+
: 'rgba(255, 255, 255, 0.3)',
|
|
55
|
+
width: '29px',
|
|
56
|
+
}, onClick: () => {
|
|
57
|
+
setIsTouched(!isTouched);
|
|
58
|
+
xrController.updateButtonTouch(buttonId, !isTouched);
|
|
59
|
+
}, children: _jsx(FAIcon, { icon: faFingerprint }) }), _jsx(Button, { "$reverse": handedness === 'right', style: {
|
|
60
|
+
backgroundColor: isOnHold
|
|
61
|
+
? 'rgba(255, 255, 255, 0.6)'
|
|
62
|
+
: 'rgba(255, 255, 255, 0.3)',
|
|
63
|
+
width: '49px',
|
|
64
|
+
}, onClick: () => {
|
|
65
|
+
setIsOnHold(!isOnHold);
|
|
66
|
+
xrController.updateButtonValue(buttonId, isOnHold ? 0 : 1);
|
|
67
|
+
}, children: "Hold" })] })) })] }));
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/components/binary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KeyMapType } from './mapper.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { XRDevice } from 'iwer';
|
|
4
|
+
interface ControlsProps {
|
|
5
|
+
xrDevice: XRDevice;
|
|
6
|
+
keyMap: KeyMapType;
|
|
7
|
+
pointerLocked: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const ControlsUI: React.FC<ControlsProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAahC,UAAU,aAAa;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACvB;AAuCD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA+D9C,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AnalogButton } from './analog.js';
|
|
3
|
+
import { BinaryButton } from './binary.js';
|
|
4
|
+
import { Joystick } from './joystick.js';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
const ControlsContainer = styled.div `
|
|
7
|
+
padding: ${({ $reverse }) => $reverse ? '6px 2px 3px 5px' : '6px 5px 3px 2px'};
|
|
8
|
+
pointer-events: all;
|
|
9
|
+
background-color: rgba(43, 43, 43, 0.5);
|
|
10
|
+
backdrop-filter: blur(10px);
|
|
11
|
+
-webkit-backdrop-filter: blur(10px);
|
|
12
|
+
border-radius: ${({ $reverse }) => ($reverse ? '12px 0 0 0' : '0 12px 0 0')};
|
|
13
|
+
`;
|
|
14
|
+
function transformGamepadConfig(gamepadConfig) {
|
|
15
|
+
const axesSet = new Set();
|
|
16
|
+
// Add all axis ids to the set
|
|
17
|
+
for (const axis of gamepadConfig.axes) {
|
|
18
|
+
if (axis && axis.id) {
|
|
19
|
+
axesSet.add(axis.id);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Transform buttons to the desired format
|
|
23
|
+
const transformed = gamepadConfig.buttons
|
|
24
|
+
.filter((button) => button !== null) // Filter out null values
|
|
25
|
+
.map((button) => ({
|
|
26
|
+
id: button.id,
|
|
27
|
+
type: button.type,
|
|
28
|
+
hasAxes: axesSet.has(button.id),
|
|
29
|
+
}));
|
|
30
|
+
// Sort the array by hasAxes
|
|
31
|
+
transformed.sort((a, b) => {
|
|
32
|
+
if (a.hasAxes && !b.hasAxes)
|
|
33
|
+
return -1;
|
|
34
|
+
if (!a.hasAxes && b.hasAxes)
|
|
35
|
+
return 1;
|
|
36
|
+
return 0;
|
|
37
|
+
});
|
|
38
|
+
return transformed;
|
|
39
|
+
}
|
|
40
|
+
export const ControlsUI = ({ xrDevice, keyMap, pointerLocked, }) => {
|
|
41
|
+
return (_jsx("div", { style: {
|
|
42
|
+
display: 'flex',
|
|
43
|
+
justifyContent: 'space-between',
|
|
44
|
+
flexDirection: 'row',
|
|
45
|
+
}, children: Object.entries(xrDevice.controllers).map(([handedness, controller]) => (_jsx(ControlsContainer, { "$reverse": handedness !== 'left', children: transformGamepadConfig(controller.gamepadConfig).map((buttonConfig) => {
|
|
46
|
+
const mapping = keyMap[handedness];
|
|
47
|
+
if (buttonConfig.hasAxes) {
|
|
48
|
+
return (_jsx(Joystick, { xrController: controller, pointerLocked: pointerLocked, buttonId: buttonConfig.id, mappedKeyUp: keyMap[handedness][`${buttonConfig.id}-up`], mappedKeyDown: mapping[`${buttonConfig.id}-down`], mappedKeyLeft: mapping[`${buttonConfig.id}-left`], mappedKeyRight: mapping[`${buttonConfig.id}-right`], mappedKeyPressed: mapping[buttonConfig.id] }, buttonConfig.id));
|
|
49
|
+
}
|
|
50
|
+
else if (buttonConfig.type === 'analog') {
|
|
51
|
+
return (_jsx(AnalogButton, { xrController: controller, buttonId: buttonConfig.id, mappedKey: mapping[buttonConfig.id], pointerLocked: pointerLocked }, buttonConfig.id));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return (_jsx(BinaryButton, { xrController: controller, buttonId: buttonConfig.id, mappedKey: mapping[buttonConfig.id], pointerLocked: pointerLocked }, buttonConfig.id));
|
|
55
|
+
}
|
|
56
|
+
}) }, handedness))) }));
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { InputLayer } from '../scene.js';
|
|
3
|
+
import { XRDevice } from 'iwer';
|
|
4
|
+
interface FOVMenuProps {
|
|
5
|
+
xrDevice: XRDevice;
|
|
6
|
+
inputLayer: InputLayer;
|
|
7
|
+
}
|
|
8
|
+
export declare const FOVMenu: React.FC<FOVMenuProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=fov.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fov.d.ts","sourceRoot":"","sources":["../../src/components/fov.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,UAAU,YAAY;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACvB;AAaD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6B1C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, ButtonGroup, RangeSelector } from './styled.js';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import styled from 'styled-components';
|
|
5
|
+
const FovSettingContainer = styled.div `
|
|
6
|
+
display: flex;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
pointer-events: all;
|
|
9
|
+
position: fixed;
|
|
10
|
+
display: flex;
|
|
11
|
+
top: 40px;
|
|
12
|
+
left: calc(50vw - 156px);
|
|
13
|
+
width: 312px;
|
|
14
|
+
`;
|
|
15
|
+
export const FOVMenu = ({ xrDevice, inputLayer }) => {
|
|
16
|
+
const [fovy, setFovy] = useState(xrDevice.fovy);
|
|
17
|
+
return (_jsx(FovSettingContainer, { children: _jsxs(ButtonGroup, { "$reverse": false, children: [_jsx(Button, { "$reverse": false, disabled: true, children: "FOV-Y" }), _jsx(RangeSelector, { "$reverse": false, value: fovy, style: { width: '100px', borderRadius: '2px' }, onChange: (e) => {
|
|
18
|
+
const value = Number(e.target.value);
|
|
19
|
+
setFovy(value);
|
|
20
|
+
xrDevice.fovy = value;
|
|
21
|
+
inputLayer.syncFovy();
|
|
22
|
+
inputLayer.renderScene();
|
|
23
|
+
}, min: Math.PI / 6, max: Math.PI / 1.5, step: Math.PI / 48 }), _jsxs(Button, { "$reverse": false, disabled: true, children: [((fovy / Math.PI) * 180).toFixed(2), "\u00B0"] })] }) }));
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=fov.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fov.js","sourceRoot":"","sources":["../../src/components/fov.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAOvC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;CASrC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;IAC3E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CACN,KAAC,mBAAmB,cACnB,MAAC,WAAW,gBAAW,KAAK,aAC3B,KAAC,MAAM,gBAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,sBAE9B,EACT,KAAC,aAAa,gBACH,KAAK,EACf,KAAK,EAAE,IAAI,EACX,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAC9C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;wBACf,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACf,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;wBACtB,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACtB,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC1B,CAAC,EACD,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAChB,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,EAClB,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GACjB,EACF,MAAC,MAAM,gBAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,aACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAC5B,IACI,GACO,CACtB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InputLayer } from '../scene.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { XRDevice } from 'iwer';
|
|
4
|
+
interface HeaderUIProps {
|
|
5
|
+
xrDevice: XRDevice;
|
|
6
|
+
inputLayer: InputLayer;
|
|
7
|
+
keyMapOpen: boolean;
|
|
8
|
+
setKeyMapOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
9
|
+
fovSettingOpen: boolean;
|
|
10
|
+
setFovSettingOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const HeaderUI: React.FC<HeaderUIProps>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/components/header.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AA4ChC,UAAU,aAAa;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAiH5C,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, FAIcon, MappedKeyBlock } from './styled.js';
|
|
3
|
+
import { faArrowsUpDown, faCaretDown, faCaretUp, faCirclePlay, faKeyboard, faRightFromBracket, faRotateLeft, faSquareArrowUpRight, faVideo, } from '@fortawesome/free-solid-svg-icons';
|
|
4
|
+
import { IWERIcon } from './icons.js';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
const HeaderButtonsContainer = styled.div `
|
|
7
|
+
padding: 6px 5px;
|
|
8
|
+
display: flex;
|
|
9
|
+
background-color: rgba(43, 43, 43, 0.5);
|
|
10
|
+
backdrop-filter: blur(10px);
|
|
11
|
+
-webkit-backdrop-filter: blur(10px);
|
|
12
|
+
justify-content: center;
|
|
13
|
+
pointer-events: all;
|
|
14
|
+
border-radius: 0 0 12px 12px;
|
|
15
|
+
align-items: center;
|
|
16
|
+
height: 24px;
|
|
17
|
+
`;
|
|
18
|
+
const MovementInstructionsContainer = styled.div `
|
|
19
|
+
background-color: rgba(43, 43, 43, 0.5);
|
|
20
|
+
backdrop-filter: blur(10px);
|
|
21
|
+
-webkit-backdrop-filter: blur(10px);
|
|
22
|
+
border: none;
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
align-items: flex-start;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
color: white;
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
font-size: 14px;
|
|
31
|
+
text-transform: none;
|
|
32
|
+
box-shadow: none;
|
|
33
|
+
font-family: Arial, sans-serif;
|
|
34
|
+
border-radius: ${({ $reverse }) => ($reverse ? '0 0 0 12px' : '0 0 12px 0')};
|
|
35
|
+
padding: 5px;
|
|
36
|
+
|
|
37
|
+
> div {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: row;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: 2px;
|
|
42
|
+
margin: 2px;
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
export const HeaderUI = ({ xrDevice, inputLayer, keyMapOpen, setKeyMapOpen, fovSettingOpen, setFovSettingOpen, }) => {
|
|
46
|
+
return (_jsxs("div", { style: {
|
|
47
|
+
display: 'flex',
|
|
48
|
+
justifyContent: 'center',
|
|
49
|
+
}, children: [_jsxs(HeaderButtonsContainer, { children: [_jsx(IWERIcon, {}), _jsxs("div", { style: {
|
|
50
|
+
display: 'flex',
|
|
51
|
+
flexDirection: 'row',
|
|
52
|
+
marginLeft: '4px',
|
|
53
|
+
}, children: [_jsx(Button, { "$reverse": false, onClick: () => {
|
|
54
|
+
inputLayer.resetDeviceTransforms();
|
|
55
|
+
}, children: _jsx(FAIcon, { icon: faRotateLeft }) }), _jsx(Button, { "$reverse": false, onClick: () => {
|
|
56
|
+
inputLayer.lockPointer();
|
|
57
|
+
setKeyMapOpen(false);
|
|
58
|
+
setFovSettingOpen(false);
|
|
59
|
+
}, children: _jsx(FAIcon, { icon: faCirclePlay }) }), _jsx(Button, { "$reverse": false, onClick: () => {
|
|
60
|
+
setKeyMapOpen(!keyMapOpen);
|
|
61
|
+
setFovSettingOpen(false);
|
|
62
|
+
}, children: _jsx(FAIcon, { icon: faKeyboard }) }), _jsx(Button, { "$reverse": false, onClick: () => {
|
|
63
|
+
setFovSettingOpen(!fovSettingOpen);
|
|
64
|
+
setKeyMapOpen(false);
|
|
65
|
+
}, children: _jsx(FAIcon, { icon: faVideo }) }), _jsx(Button, { "$reverse": false, onClick: () => {
|
|
66
|
+
const xrSession = xrDevice.activeSession;
|
|
67
|
+
xrSession === null || xrSession === void 0 ? void 0 : xrSession.end();
|
|
68
|
+
}, children: _jsx(FAIcon, { icon: faRightFromBracket }) })] })] }), _jsxs(MovementInstructionsContainer, { "$reverse": false, style: { position: 'fixed', left: '0', top: '0' }, children: [_jsxs("div", { children: [_jsx(FAIcon, { icon: faSquareArrowUpRight, style: { marginRight: '4px' } }), ' ', "Roomscale Movement"] }), _jsxs("div", { children: [_jsx(MappedKeyBlock, { "$pressed": false, style: { width: '50px' }, children: "L Shift" }), _jsx("span", { style: { margin: '0 4px' }, children: "+" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "W" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "A" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "S" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "D" })] })] }), _jsxs(MovementInstructionsContainer, { "$reverse": true, style: { position: 'fixed', right: '0', top: '0' }, children: [_jsxs("div", { children: [_jsx(FAIcon, { icon: faArrowsUpDown, style: { marginRight: '4px' } }), " Camera Height"] }), _jsxs("div", { children: [_jsx(MappedKeyBlock, { "$pressed": false, style: { width: '50px' }, children: "L Shift" }), _jsx("span", { style: { margin: '0 4px' }, children: "+" }), _jsx(MappedKeyBlock, { "$pressed": false, children: _jsx(FAIcon, { icon: faCaretUp }) }), _jsx(MappedKeyBlock, { "$pressed": false, children: _jsx(FAIcon, { icon: faCaretDown }) })] })] })] }));
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/components/header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const ButtonX: React.FC;
|
|
3
|
+
export declare const ButtonY: React.FC;
|
|
4
|
+
export declare const ButtonA: React.FC;
|
|
5
|
+
export declare const ButtonB: React.FC;
|
|
6
|
+
export declare const ThumbstickL: React.FC;
|
|
7
|
+
export declare const ThumbstickR: React.FC;
|
|
8
|
+
export declare const ThumbstickLUp: React.FC;
|
|
9
|
+
export declare const ThumbstickLDown: React.FC;
|
|
10
|
+
export declare const ThumbstickLLeft: React.FC;
|
|
11
|
+
export declare const ThumbstickLRight: React.FC;
|
|
12
|
+
export declare const ThumbstickRUp: React.FC;
|
|
13
|
+
export declare const ThumbstickRDown: React.FC;
|
|
14
|
+
export declare const ThumbstickRLeft: React.FC;
|
|
15
|
+
export declare const ThumbstickRRight: React.FC;
|
|
16
|
+
export declare const GripL: React.FC;
|
|
17
|
+
export declare const GripR: React.FC;
|
|
18
|
+
export declare const TriggerL: React.FC;
|
|
19
|
+
export declare const TriggerR: React.FC;
|
|
20
|
+
export declare const ThumbrestL: React.FC;
|
|
21
|
+
export declare const ThumbrestR: React.FC;
|
|
22
|
+
interface GamepadIconProps {
|
|
23
|
+
buttonName: string;
|
|
24
|
+
handedness: XRHandedness;
|
|
25
|
+
}
|
|
26
|
+
export declare const GamepadIcon: React.FC<GamepadIconProps>;
|
|
27
|
+
export declare const IWERIcon: React.FC;
|
|
28
|
+
export declare const MouseLeft: React.FC;
|
|
29
|
+
export declare const MouseRight: React.FC;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA8B/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA8B/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA6BjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA6BpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA6BjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA6BpC,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EA8BzB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EA8BzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA8B5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA8B5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EA+B9B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EA+B9B,CAAC;AAiDF,UAAU,gBAAgB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;CACzB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAWlD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAa5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAiC7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAiC9B,CAAC"}
|