diff --git a/package-lock.json b/package-lock.json index 3061d00..4b812f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2255,6 +2255,45 @@ "@react-spring/shared": "9.0.0-rc.3" } }, + "@react-three/drei": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-2.2.3.tgz", + "integrity": "sha512-ZnVybevJ494ql+KdIaQaWRV5xbM4Z8MLDFkdJxzcZopxOj94LKmDCg7gVfIJ2/5dRL/RpiZAm9r8GAV7rToEig==", + "requires": { + "@babel/runtime": "^7.11.2", + "@react-spring/web": "^9.0.0-rc.3", + "detect-gpu": "^1.5.1", + "glsl-noise": "^0.0.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "react-merge-refs": "^1.0.0", + "stats.js": "^0.17.0", + "troika-three-text": "^0.34.0", + "utility-types": "^3.10.0", + "zustand": "^3.0.3" + }, + "dependencies": { + "troika-three-text": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.34.1.tgz", + "integrity": "sha512-67nXL2cPFzkCFmfRTpo0ylH1OY7gqwzRSt1C+SgnG2/rAmFCExhvr+ND2TVX8U4kVctCLgfU/e7V8IOdZ3x/gQ==", + "requires": { + "troika-three-utils": "^0.34.0", + "troika-worker-utils": "^0.34.1" + } + }, + "troika-three-utils": { + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.34.0.tgz", + "integrity": "sha512-6Dm6FzGFpuiehjKkm3wAV3e+SPnHQ+GxwXnHFToKLcQ1/gVDOIL69BWCosrlEUb0SUOQjQv6sd5QpNT6IIewpQ==" + }, + "troika-worker-utils": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.34.1.tgz", + "integrity": "sha512-zLTSB6ISd/dpBMG6PFR2v7sqU2bqVwOUd45iWzcgcRE9+w/5YJN8h0+H5EmgRPIVe5xus0UZQKUgVH6FRA+YdQ==" + } + } + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -5588,25 +5627,6 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, - "drei": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/drei/-/drei-1.5.7.tgz", - "integrity": "sha512-x7PQfvoSI1OqOwghZuZBhrNtaxMHh0bpVBLFYu39qwDghnBYgNIpNhoRtqK5FzRbcS1Rjdq0KWP0leSGKG/rsA==", - "requires": { - "@babel/runtime": "^7.11.2", - "@react-spring/web": "^9.0.0-rc.3", - "detect-gpu": "^1.3.0", - "glsl-noise": "^0.0.0", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "r3f-troika": "^0.31.1", - "react-merge-refs": "^1.0.0", - "stats.js": "^0.17.0", - "troika-three-text": "^0.31.0", - "utility-types": "^3.10.0", - "zustand": "^3.0.3" - } - }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -13972,15 +13992,6 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "r3f-troika": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/r3f-troika/-/r3f-troika-0.31.1.tgz", - "integrity": "sha512-d0AI2ZCpU5u9axqJ3I+KI786ltQNOJKimeuq+96Sir/sg0Nl2m5JNA9fBg+YEZ6fOR7+kcbyaycQcTbfTpYDDQ==", - "requires": { - "troika-three-utils": "^0.31.0", - "troika-worker-utils": "^0.31.0" - } - }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -16535,25 +16546,6 @@ "punycode": "^2.1.1" } }, - "troika-three-text": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.31.0.tgz", - "integrity": "sha512-JpRO+AC9mLZ49IymBwwwFLcasN0xjjQmSkGO9tlzlpeHpexsK4JB80qs6d6vhtt+vmfdJi27/m+WYhaR6+OzaQ==", - "requires": { - "troika-three-utils": "^0.31.0", - "troika-worker-utils": "^0.31.0" - } - }, - "troika-three-utils": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.31.0.tgz", - "integrity": "sha512-IUy61i+Kv0EjievWhOmIkqjDa1acIO2J98oO2tZ+PpEfA+Q0syRknH4SN+iiYpa/MNJH1gQz0WfZF4Vk1/pumQ==" - }, - "troika-worker-utils": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.31.0.tgz", - "integrity": "sha512-WxHhfFmy6dWBMACUnzInBlqlR601Dy3c9hiRp4aAN+ACzSldwsv1SHOqix4X2+6HTz/pBtHtfJVDbwJiO+lbCw==" - }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", diff --git a/package.json b/package.json index 3007000..63cc5cf 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@react-spring/three": "^9.0.0-rc.3", + "@react-three/drei": "^2.2.3", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", "@testing-library/user-event": "^7.2.1", @@ -11,7 +12,6 @@ "@types/node": "^12.12.54", "@types/react": "^16.9.47", "@types/react-dom": "^16.9.8", - "drei": "^1.3.0", "react": "^16.13.1", "react-dom": "^16.13.1", "react-scripts": "^4.0.0", diff --git a/public/gate_object_texture.png b/public/sprite/gate_object_texture.png similarity index 100% rename from public/gate_object_texture.png rename to public/sprite/gate_object_texture.png diff --git a/src/components/GateScene/GateMiddle.tsx b/src/components/GateScene/GateMiddle.tsx index bb59311..8c2f1b7 100644 --- a/src/components/GateScene/GateMiddle.tsx +++ b/src/components/GateScene/GateMiddle.tsx @@ -1,8 +1,10 @@ import React from "react"; import gateText from "../../static/sprite/gate_pass.png"; import gateTextUnderline from "../../static/sprite/gate_pass_underline.png"; -import gateBlueBinarySingularOne from "../../static/sprite/blue_binary_singular_one.png"; -import gateBlueBinarySingularZero from "../../static/sprite/blue_binary_singular_zero.png"; +import gateTextAccessPass from "../../static/sprite/you_got_an_access_pass.png"; +import changeSiteEnable from "../../static/sprite/change_site_enable.png"; +import gateLeftThing from "../../static/sprite/left_gate_thing.png"; +import gateRightThing from "../../static/sprite/right_gate_thing.png"; import { useLoader } from "react-three-fiber"; import * as THREE from "three"; import GateMiddleObject from "./GateMiddleObject"; @@ -10,6 +12,17 @@ import GateMiddleObject from "./GateMiddleObject"; const GateMiddle = () => { const gatePassTexture = useLoader(THREE.TextureLoader, gateText); const gatePassUnderline = useLoader(THREE.TextureLoader, gateTextUnderline); + const gateAccessPassTexture = useLoader( + THREE.TextureLoader, + gateTextAccessPass + ); + const changeSiteEnableTexture = useLoader( + THREE.TextureLoader, + changeSiteEnable + ); + + const gateLeftThingTexture = useLoader(THREE.TextureLoader, gateLeftThing); + const gateRightThingTexture = useLoader(THREE.TextureLoader, gateRightThing); return ( <> @@ -31,6 +44,59 @@ const GateMiddle = () => { /> + + + + + + + + + + + + + + + + + + + + ); diff --git a/src/components/GateScene/GateMiddleObject/Mirror.tsx b/src/components/GateScene/GateMiddleObject/Mirror.tsx index 0705715..1110f5b 100644 --- a/src/components/GateScene/GateMiddleObject/Mirror.tsx +++ b/src/components/GateScene/GateMiddleObject/Mirror.tsx @@ -1,61 +1,48 @@ import React, { useMemo, useRef } from "react"; import { useFrame, useLoader } from "react-three-fiber"; import * as THREE from "three"; +import mirrorTexture from "../../../static/sprite/gate_object_texture.png"; const Mirror = () => { + const tex1 = useLoader(THREE.TextureLoader, mirrorTexture); - const cubeTexture = useLoader( - // @ts-ignore - THREE.CubeTextureLoader, - [ - "gate_object_texture_2.png", - "gate_object_texture_2.png", - "gate_object_texture_2.png", - "gate_object_texture_2.png", - "gate_object_texture_2.png", - "gate_object_texture_2.png", - "gate_object_texture_2.png", - ], - (loader: THREE.CubeTextureLoader) => loader.setPath("../../../static") - ); - - const mirrorMaterial = useMemo(() => { - const loader = new THREE.CubeTextureLoader(); - const texture = loader.load([ - "gate_object_texture.png", - "gate_object_texture.png", - "gate_object_texture.png", - "gate_object_texture.png", - "gate_object_texture.png", - "gate_object_texture.png", - ]); - return new THREE.MeshBasicMaterial({ - envMap: cubeTexture, - depthTest: false, - transparent: true, - }); - }, []); + const texture = useMemo(() => { + let repeatX, repeatY; + tex1.wrapS = THREE.RepeatWrapping; + tex1.wrapT = THREE.RepeatWrapping; + repeatX = 88 / 256; + repeatY = 1; + tex1.repeat.set(repeatX, repeatY); + return tex1; + }, [tex1]); const mirrorRef = useRef(); + const materialRef = useRef(); useFrame(() => { if (mirrorRef.current) { - mirrorRef.current.rotation.y += 0.03; + mirrorRef.current.rotation.y -= 0.03; + } + if (materialRef.current) { + texture.offset.x += 0.01; } - mirrorMaterial.needsUpdate = true; }); return ( - - - - - + <> + + + + + + + ); }; diff --git a/src/components/GateScene/GateSide.tsx b/src/components/GateScene/GateSide.tsx index d5cd895..997ab66 100644 --- a/src/components/GateScene/GateSide.tsx +++ b/src/components/GateScene/GateSide.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useRef } from "react"; import blueBinary from "../../static/sprite/blue_binary.png"; import { useFrame, useLoader } from "react-three-fiber"; import * as THREE from "three"; -import { OrbitControls } from "drei"; +import { OrbitControls } from "@react-three/drei"; const GateSide = () => { const blueBinaryTex = useLoader(THREE.TextureLoader, blueBinary); diff --git a/src/scenes/GateScene.tsx b/src/scenes/GateScene.tsx index 1e072a7..7ea3b0f 100644 --- a/src/scenes/GateScene.tsx +++ b/src/scenes/GateScene.tsx @@ -1,6 +1,6 @@ import React from "react"; import GateSide from "../components/GateScene/GateSide"; -import { OrbitControls } from "drei"; +import { OrbitControls } from "@react-three/drei"; import GateMiddle from "../components/GateScene/GateMiddle"; const GateScene = () => { diff --git a/src/scenes/MainScene.tsx b/src/scenes/MainScene.tsx index 4ef6c48..34fb3fa 100644 --- a/src/scenes/MainScene.tsx +++ b/src/scenes/MainScene.tsx @@ -1,5 +1,5 @@ import { a, useSpring } from "@react-spring/three"; -import { OrbitControls } from "drei"; +import { OrbitControls } from "@react-three/drei"; import React, { Suspense, useEffect } from "react"; import Site from "../components/MainScene/Site"; import Lain from "../components/MainScene/Lain"; diff --git a/src/scenes/MediaScene.tsx b/src/scenes/MediaScene.tsx index 5bdb35d..f6b3740 100644 --- a/src/scenes/MediaScene.tsx +++ b/src/scenes/MediaScene.tsx @@ -7,7 +7,7 @@ import AudioVisualizer from "../components/MediaScene/AudioVisualizer/AudioVisua import MediaLoadingBar from "../components/MediaScene/MediaLoadingBar"; import NodeNameContainer from "../components/MediaScene/NodeNameContainer"; import Lof from "../components/MediaScene/Lof"; -import { OrbitControls } from "drei"; +import { OrbitControls } from "@react-three/drei"; import Images from "../components/MediaScene/Images"; const MediaScene = () => {