Skip to content

Commit ad6ef46

Browse files
authored
Merge pull request #97 from musehq/dev
v2.0.5
2 parents 8061ed5 + e95de80 commit ad6ef46

File tree

12 files changed

+100
-85
lines changed

12 files changed

+100
-85
lines changed

examples/worlds/Starter.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export default function Starter() {
1616
"https://d27rt3a60hh1lx.cloudfront.net/audio/LucidMondayMix.mp3"
1717
);
1818

19+
const [size, setSize] = useState(1);
20+
1921
setTimeout(() => {
2022
setAudio(
2123
"https://d27rt3a60hh1lx.cloudfront.net/content/muse.place/whoisabnel/dark.mp3"
@@ -89,9 +91,10 @@ export default function Starter() {
8991
<Interactable
9092
onHover={() => setHovering(true)}
9193
onUnHover={() => setHovering(false)}
94+
onClick={() => setSize(Math.random() + 1)}
9295
>
9396
<mesh position={[-3, 0.5, 0]}>
94-
<boxBufferGeometry args={[1, 0.25, 0.1]} />
97+
<boxBufferGeometry args={[size, size * 0.25, size * 0.1]} />
9598
<meshStandardMaterial color={hovering ? "red" : "blue"} />
9699
</mesh>
97100
</Interactable>

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "spacesvr",
3-
"version": "2.0.4",
3+
"version": "2.0.5",
44
"private": true,
55
"description": "A standardized reality for future of the 3D Web",
66
"keywords": [
@@ -52,7 +52,7 @@
5252
"@react-three/cannon": "^6.3.0",
5353
"@react-three/drei": "9.11.3",
5454
"@react-three/fiber": "^8.0.22",
55-
"@react-three/xr": "^3.5.0",
55+
"@react-three/xr": "^4.0.1",
5656
"culori": "^0.18.2",
5757
"nipplejs": "0.8.1",
5858
"node-fetch": "^2.6.1",

src/ideas/modifiers/Interactable.tsx renamed to src/ideas/modifiers/Interactable/components/MobileDesktopInteractable.tsx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,16 @@
1-
import { ReactNode, useCallback, useEffect, useRef, useState } from "react";
2-
import { Group, Vector2 } from "three";
31
import { useFrame, useThree } from "@react-three/fiber";
2+
import { useCallback, useEffect, useRef, useState } from "react";
3+
import { Group, Vector2 } from "three";
44
import { isMobile } from "react-device-detect";
5-
import { useLimiter } from "../../logic/limiter";
6-
import { usePlayer } from "../../layers/Player";
7-
8-
type Props = {
9-
onClick?: () => void;
10-
onHover?: () => void;
11-
onUnHover?: () => void;
12-
children: ReactNode | ReactNode[];
13-
};
5+
import { InteractableProps } from "../index";
6+
import { usePlayer } from "../../../../layers/Player";
7+
import { useLimiter } from "../../../../logic/limiter";
148

159
/**
16-
*
17-
* Interactable adds on click and hover methods to any group of Object3D's.
18-
*
1910
* This is a bit convoluted for the sake of working with the ClickDragControls
2011
* (i.e. the test for a double click)
21-
*
22-
* @param props
23-
* @constructor
2412
*/
25-
export function Interactable(props: Props) {
13+
export default function MobileDesktopInteractable(props: InteractableProps) {
2614
const { onClick, onHover, onUnHover, children } = props;
2715

2816
const gl = useThree((state) => state.gl);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Interactive } from "@react-three/xr";
2+
import { InteractableProps } from "../index";
3+
4+
export default function XRInteractable(props: InteractableProps) {
5+
const { onClick, onHover, onUnHover, children } = props;
6+
7+
return (
8+
<group name="spacesvr-interactable">
9+
<Interactive onHover={onHover} onBlur={onUnHover} onSelect={onClick}>
10+
{children}
11+
</Interactive>
12+
</group>
13+
);
14+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { ReactNode } from "react";
2+
import { useEnvironment } from "../../../layers/Environment";
3+
import XRInteractable from "./components/XRInteractable";
4+
import MobileDesktopInteractable from "./components/MobileDesktopInteractable";
5+
6+
export type InteractableProps = {
7+
onClick?: () => void;
8+
onHover?: () => void;
9+
onUnHover?: () => void;
10+
children: ReactNode | ReactNode[];
11+
};
12+
13+
/**
14+
* Interactable adds on click and hover methods to any group of Object3D's.
15+
*/
16+
export function Interactable(props: InteractableProps) {
17+
const { device } = useEnvironment();
18+
19+
if (device.xr) return <XRInteractable {...props} />;
20+
return <MobileDesktopInteractable {...props} />;
21+
}

src/ideas/physical/HDRI.tsx

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,27 @@
1-
import { useEffect, useMemo } from "react";
2-
import { useThree } from "@react-three/fiber";
3-
import { NearestFilter, RGBAFormat, WebGLCubeRenderTarget } from "three";
4-
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";
1+
import { Suspense } from "react";
2+
import { Environment } from "@react-three/drei";
53

64
type HDRIProps = {
75
src: string;
8-
size?: number;
96
disableBackground?: boolean;
107
disableEnvironment?: boolean;
118
};
129

1310
export function HDRI(props: HDRIProps) {
14-
const { src, size = 1204, disableBackground, disableEnvironment } = props;
15-
16-
const { gl, scene } = useThree();
17-
18-
const loader = useMemo(() => new RGBELoader(), []);
19-
20-
useEffect(() => {
21-
loader.load(src, (texture) => {
22-
const opts = {
23-
format: RGBAFormat,
24-
generateMipmaps: false,
25-
magFilter: NearestFilter,
26-
minFilter: NearestFilter,
27-
};
28-
29-
const envMap = new WebGLCubeRenderTarget(
30-
size,
31-
opts
32-
).fromEquirectangularTexture(gl, texture).texture;
33-
34-
// sent envmap onto scene env and background
35-
if (!disableBackground) {
36-
scene.background = envMap;
37-
}
38-
if (!disableEnvironment) {
39-
scene.environment = envMap;
40-
}
41-
42-
texture.dispose();
43-
44-
return () => {
45-
scene.background = null;
46-
scene.environment = null;
47-
envMap.dispose();
48-
};
49-
});
50-
}, [src, scene, loader, disableBackground, disableEnvironment]);
51-
52-
return null;
11+
const { src, disableBackground, disableEnvironment } = props;
12+
13+
return (
14+
<Suspense fallback={null}>
15+
<Environment
16+
files={src}
17+
background={
18+
!disableBackground && !disableEnvironment
19+
? true
20+
: disableEnvironment && !disableBackground
21+
? "only"
22+
: false
23+
}
24+
/>
25+
</Suspense>
26+
);
5327
}

src/layers/Environment/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import PauseMenu from "./ui/PauseMenu";
66
import Crosshair from "./ui/Crosshair";
77
import { RegisterMenuItems } from "./logic/menu";
88
import { Props as ContainerProps } from "@react-three/fiber/dist/declarations/src/web/Canvas";
9-
import { VRCanvas } from "@react-three/xr";
9+
import { XRCanvas } from "@react-three/xr";
1010
import { defaultCanvasProps } from "./logic/canvas";
1111
import { EnvironmentContext, useEnvironmentState } from "./logic/environment";
1212
export * from "./logic/environment";
@@ -44,12 +44,12 @@ export function Environment(props: EnvironmentLayerProps) {
4444
{pauseMenu || <PauseMenu dev={dev} title={name} />}
4545
<Crosshair />
4646
</EnvironmentContext.Provider>
47-
<VRCanvas {...defaultCanvasProps} {...canvasProps}>
47+
<XRCanvas {...defaultCanvasProps} {...canvasProps}>
4848
<EnvironmentContext.Provider value={state}>
4949
<RegisterMenuItems />
5050
{children}
5151
</EnvironmentContext.Provider>
52-
</VRCanvas>
52+
</XRCanvas>
5353
</Container>
5454
</>
5555
);

src/layers/Environment/logic/menu.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,12 @@ export const useVRMenuItem = (): MenuItem | undefined => {
7676

7777
if (session.current === undefined) {
7878
const sessionInit = {
79-
optionalFeatures: ["local-floor", "bounded-floor", "hand-tracking"],
79+
optionalFeatures: [
80+
"local-floor",
81+
"bounded-floor",
82+
"hand-tracking",
83+
"layers",
84+
],
8085
};
8186
xr.requestSession("immersive-vr", sessionInit).then(onSessionStarted);
8287
} else {

src/layers/Environment/ui/GlobalStyles.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,6 @@ const globalStyles = css`
2828
font-size: 24px;
2929
}
3030
}
31-
32-
// used to remove the "enter vr" button from react-xr
33-
body > button,
34-
body > a {
35-
display: none;
36-
pointer-events: none;
37-
}
3831
`;
3932

4033
export default function GlobalStyles() {

src/layers/Environment/ui/PauseMenu/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export default function PauseMenu(props: PauseMenuProps) {
4848
const PAUSE_ITEMS: PauseItem[] = [
4949
...pauseMenuItems,
5050
{
51-
text: "v2.0.4",
51+
text: "v2.0.5",
5252
link: "https://www.npmjs.com/package/spacesvr",
5353
},
5454
...menuItems,

src/layers/Player/controls/VRControllerMovement.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ const VRControllerMovement = (props: VRControllerMovementProps) => {
8181

8282
// average human height is ~1.7, player height is 1.
8383
// somehow subtracting 1 is more correct idk
84-
player.position.y -= 1;
84+
// update: now 1.4 seems right? who fukn knows
85+
player.position.y -= 1.4;
8586
});
8687

8788
return (

yarn.lock

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,13 +1331,13 @@
13311331
suspend-react "^0.0.8"
13321332
zustand "^3.7.1"
13331333

1334-
"@react-three/xr@^3.5.0":
1335-
version "3.5.0"
1336-
resolved "https://registry.yarnpkg.com/@react-three/xr/-/xr-3.5.0.tgz#90e41eed9b6fc492f9fb3c656ce658741d38b61a"
1337-
integrity sha512-Kb+dTjyOYwCw7CErZi2UYvhvTy41144HHpHpl/vvaa2B1xQKVK5vvbXJqUDzyrAcCZj5RUUx5e6W/u6NMa7miQ==
1334+
"@react-three/xr@^4.0.1":
1335+
version "4.0.1"
1336+
resolved "https://registry.yarnpkg.com/@react-three/xr/-/xr-4.0.1.tgz#374cde93471bc1625908a75a5e759a368913cff2"
1337+
integrity sha512-ns1Tzg2mAHNbCs6BKuqqsvl80VXXGQIs6N7ys8XRHz/UK3Kofbxcgz2XIzxR+honpcy/4pW6lihlgnMnuHAOgw==
13381338
dependencies:
1339-
react-merge-refs "^1.1.0"
1340-
three-stdlib "^2.8.6"
1339+
three-stdlib "^2.12.1"
1340+
zustand "^3.7.1"
13411341

13421342
"@rollup/plugin-commonjs@^16.0.0":
13431343
version "16.0.0"
@@ -4233,7 +4233,7 @@ three-mesh-bvh@^0.5.10:
42334233
resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.5.11.tgz#6c64f80557c00d3d2bb85667444787449ae352cb"
42344234
integrity sha512-blVHefpW+aRqB7XZcL8MEJrVwGoX9COqCgGccgzhLoPwLEdIWz4bs2FGdLECIpAEHHThL6nQodQ2S8WAs/H3CA==
42354235

4236-
three-stdlib@^2.10.1, three-stdlib@^2.8.6:
4236+
three-stdlib@^2.10.1:
42374237
version "2.10.2"
42384238
resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.10.2.tgz#4909153c491d29439d199aa47747993ba1dd4a2b"
42394239
integrity sha512-A4++o7962jrRDo0Mm2I+2LaT62RRA8p8IJyHFnPfOxSk+90qGSm2vSfSdJ+3HugzABjStQyQuvnQmdxxZolzkw==
@@ -4249,6 +4249,22 @@ three-stdlib@^2.10.1, three-stdlib@^2.8.6:
42494249
potpack "^1.0.1"
42504250
zstddec "^0.0.2"
42514251

4252+
three-stdlib@^2.12.1:
4253+
version "2.12.1"
4254+
resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.12.1.tgz#b63de05cf7f7803e630a7c0c5887e85ae06178ca"
4255+
integrity sha512-G3SSsCOBiWa0sjjPt+K28ikQ84Plm/ZVUozMfWagK59kZqBWcaPVXpOThkAgvdBpm2zCWLW3edAoW/4XIbljVQ==
4256+
dependencies:
4257+
"@babel/runtime" "^7.16.7"
4258+
"@webgpu/glslang" "^0.0.15"
4259+
chevrotain "^10.1.2"
4260+
draco3d "^1.4.1"
4261+
fflate "^0.6.9"
4262+
ktx-parse "^0.2.1"
4263+
mmd-parser "^1.0.4"
4264+
opentype.js "^1.3.3"
4265+
potpack "^1.0.1"
4266+
zstddec "^0.0.2"
4267+
42524268
three@0.139.2:
42534269
version "0.139.2"
42544270
resolved "https://registry.yarnpkg.com/three/-/three-0.139.2.tgz#b110799a15736df673b9293e31653a4ac73648dd"

0 commit comments

Comments
 (0)