From c501d74f92e285fbffb71ddf57c47450741ff6e6 Mon Sep 17 00:00:00 2001 From: antpb Date: Fri, 3 Nov 2023 12:58:13 -0500 Subject: [PATCH 01/43] dont lose your work --- .../components/EnvironmentFront.js | 15 +- blocks/environment/components/Player.js | 119 +++-- .../environment/components/ThreeObjectEdit.js | 131 +++-- .../components/core/front/ThreeVideo.js | 4 +- package.json | 12 +- webpack.config.js | 1 + yarn.lock | 487 ++++++++++-------- 7 files changed, 432 insertions(+), 337 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 43e7849..350a257 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -23,7 +23,7 @@ import { // import { A11y } from "@react-three/a11y"; import { GLTFAudioEmitterExtension } from "three-omi"; -import { VRCanvas, DefaultXRControllers, Hands, XRButton, XR } from "@react-three/xr"; +import { VRButton, ARButton, XR, Controllers, Hands } from '@react-three/xr' import { Perf } from "r3f-perf"; import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import TeleportTravel from "./TeleportTravel"; @@ -309,6 +309,7 @@ function ChatBox(props) { function Participant(participant) { // Participant VRM. const fallbackURL = threeObjectPlugin + defaultVRM; + console.log(fallbackURL); const playerURL = userData.vrm ? userData.vrm : fallbackURL; const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { @@ -667,11 +668,12 @@ export default function EnvironmentFront(props) { if (webXRNotAvail) { webXRNotAvail.style.display = "none"; } - + if (props.deviceTarget === "vr") { return ( <> - } + + - { isVRCompatible() && } {/* */} {/* */} - + }> {props.hdr && */} - + + {Object.values( props.npcsToAdd ).map((npc, index) => { diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 79f2b65..794e3f1 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -1,4 +1,4 @@ -import { Mesh, Raycaster, DoubleSide, MeshBasicMaterial, RingGeometry, AudioListener, Group, Quaternion, Matrix4, VectorKeyframeTrack, QuaternionKeyframeTrack, LoopPingPong, AnimationClip, NumberKeyframeTrack, AnimationMixer, Vector3, Vector2, BufferGeometry, CircleGeometry, sRGBEncoding, MathUtils } from "three"; +import { Mesh, Raycaster, DoubleSide, MeshBasicMaterial, RingGeometry, BoxGeometry, AudioListener, Group, Quaternion, Matrix4, VectorKeyframeTrack, QuaternionKeyframeTrack, LoopPingPong, AnimationClip, NumberKeyframeTrack, AnimationMixer, Vector3, Vector2, BufferGeometry, CircleGeometry, sRGBEncoding, MathUtils } from "three"; import { TextureLoader } from "three/src/loaders/TextureLoader"; import { useFrame, useLoader, useThree, Interactive } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; @@ -244,8 +244,6 @@ export default function Player(props) { if (someSceneState?.userData?.gltfExtensions?.VRM) { const playerController = someSceneState.userData.vrm; - // Check if the avatar is reachable with a 200 response code. - // Check if the avatar is reachable with a 200 response code. const fetchProfile = async () => { try { const response = await fetch(userData.profileImage); @@ -289,14 +287,74 @@ export default function Player(props) { // 0, 0, 0 // ]); - // const movement = useKeyboardControls(); - const velocity = useRef(spawnPoint); // Use a ref instead of state for velocity + const velocity = useRef(spawnPoint); let lastUpdateTime = 0; - let blinkTimer = 0; // Initialize the blinkTimer outside the useFrame loop. - let blinkInterval = 5 + Math.random() * 10; // Blink roughly every 2 to 6 seconds + let blinkTimer = 0; + let blinkInterval = getRandomBlinkInterval(); + + function getRandomBlinkInterval() { + return 5 + Math.random() * 10; + } + + function handleBlinking(delta) { + blinkTimer += delta; + if (blinkTimer > blinkInterval && currentVrm) { + performBlink(currentVrm); + blinkTimer = 0; + blinkInterval = getRandomBlinkInterval(); + } + } + + function performBlink(vrm) { + const blinkDuration = 0.05 + Math.random() * 0.1; + const steps = Math.round(blinkDuration / 0.01); + + for (let i = 0; i <= steps; i++) { + const s = i / steps; + setTimeout(() => { + vrm.expressionManager.setValue('blinkLeft', s); + vrm.expressionManager.setValue('blinkRight', s); + }, s * blinkDuration * 1000); + } + + setTimeout(() => { + for (let i = 0; i <= steps; i++) { + const s = 1 - i / steps; + setTimeout(() => { + vrm.expressionManager.setValue('blinkLeft', s); + vrm.expressionManager.setValue('blinkRight', s); + }, (1 - s) * blinkDuration * 1000); + } + }, blinkDuration * 1000 + 200); + } + + function getMovementSpeeds(shiftPressed) { + const baseSpeeds = { + FB: 3.6, + LR: 1.8 + }; + + if (shiftPressed) { + return { + FB: 7.2, + LR: 4.2 + }; + } + return baseSpeeds; + } + + let initialHeadPosition = null; + if (playerController && !initialHeadPosition) { + initialHeadPosition = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; + } + + + let cameraTargetPosition = new Vector3(); // frame loop useFrame((state, delta) => { + handleBlinking(delta); + let isMoving = false; const currentTime = state.clock.elapsedTime; const timeSinceLastUpdate = currentTime - lastUpdateTime; @@ -322,39 +380,7 @@ export default function Player(props) { if (currentMixer) { currentMixer.update(delta); } - blinkTimer += delta; // Increment timer - - //blink - if (blinkTimer > blinkInterval) { - if (currentVrm) { - // Randomize the duration of the blink between 0.05 and 0.15 seconds - const blinkDuration = 0.05 + Math.random() * 0.1; - const steps = Math.round(blinkDuration / 0.01); // We want each step to be roughly 0.01 seconds - - // Close both eyes over the course of the blink duration - for(let i = 0; i <= steps; i++) { - const s = i / steps; - setTimeout(() => { - currentVrm.expressionManager.setValue('blinkLeft', s); - currentVrm.expressionManager.setValue('blinkRight', s); - }, s * blinkDuration * 1000); - } - - // Open both eyes over the course of the blink duration, after a small delay - setTimeout(() => { - for(let i = 0; i <= steps; i++) { - const s = 1 - i / steps; - setTimeout(() => { - currentVrm.expressionManager.setValue('blinkLeft', s); - currentVrm.expressionManager.setValue('blinkRight', s); - }, (1 - s) * blinkDuration * 1000); - } - }, blinkDuration * 1000 + 200); // Add a small delay before opening the eyes - - blinkTimer = 0; // Reset the timer - blinkInterval = 5 + Math.random() * 10; // Blink roughly every 10 to 25 seconds - } - } + let speedPerSecondFB = 3.6; // This is equivalent to 0.06 per frame at 60 FPS let speedPerSecondLR = 1.8; // This is equivalent to 0.03 per frame at 60 FPS @@ -537,19 +563,24 @@ export default function Player(props) { } if (participantObject) { + // Get the desired head position. + const desiredY = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; + + // Smoothly update the camera target position using lerp. + cameraTargetPosition.y = MathUtils.lerp(cameraTargetPosition.y, desiredY, 0.15); // 0.05 is the lerp factor. Adjust it for faster/slower transitions. + camera.lookAt( participantObject.parent.position.x, - playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y, + cameraTargetPosition.y, participantObject.parent.position.z ); - if (orbitRef.current){ + if (orbitRef.current) { let newTarget = new Vector3( participantObject.parent.position.x, - playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y + 1.5, + cameraTargetPosition.y + 1.5, participantObject.parent.position.z ); - // lerpVectors() orbitRef from current position target to newTarget orbitRef.current.target.lerpVectors(orbitRef.current.target, newTarget, 0.5); } } diff --git a/blocks/environment/components/ThreeObjectEdit.js b/blocks/environment/components/ThreeObjectEdit.js index 86f9658..2d7672b 100644 --- a/blocks/environment/components/ThreeObjectEdit.js +++ b/blocks/environment/components/ThreeObjectEdit.js @@ -1,4 +1,15 @@ -import * as THREE from "three"; +import { + VideoTexture, + Vector3, + TextureLoader, + Euler, + Color, + MeshBasicMaterial, + DoubleSide, + sRGBEncoding, + AudioListener + } from "three"; + import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; import { Canvas, useLoader, useFrame, useThree } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; @@ -42,7 +53,7 @@ function TextObject(text) { useEffect(() => { if( text.focusID === text.htmlobjectId ) { - const someFocus = new THREE.Vector3(Number(text.positionX), Number(text.positionY), Number(text.positionZ)); + const someFocus = new Vector3(Number(text.positionX), Number(text.positionY), Number(text.positionZ)); text.changeFocusPoint(someFocus); } }, [text.focusID]); @@ -66,7 +77,7 @@ function TextObject(text) { object={textObj} size={0.5} onObjectChange={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -123,7 +134,7 @@ function TextObject(text) { function ThreeSky(sky) { const skyUrl = sky.src.skyUrl; if (skyUrl) { - const texture_1 = useLoader(THREE.TextureLoader, skyUrl); + const texture_1 = useLoader(TextureLoader, skyUrl); return ( - + ); } else { @@ -150,15 +161,24 @@ function ThreeSky(sky) { function Spawn(spawn) { const spawnObj = useRef(); const [isSelected, setIsSelected] = useState(); - const spawnBlockAttributes = wp.data - .select("core/block-editor") - .getBlockAttributes(spawn.spawnpointID); + const [spawnBlockAttributes, setSpawnPointAttributes] = useState( + wp.data + .select("core/block-editor") + .getBlockAttributes(spawn.spawnpointID) + ); + useEffect(() => { + const attributes = wp.data + .select("core/block-editor") + .getBlockAttributes(spawn.spawnpointID); + setSpawnPointAttributes(attributes); + }, [spawn.spawnpointID]); + const TransformController = ({ condition, wrap, children }) => condition ? wrap(children) : children; useEffect(() => { if( spawn.focusID === spawn.spawnpointID ) { - const someFocus = new THREE.Vector3(Number(spawn.positionX), Number(spawn.positionY), Number(spawn.positionZ)); + const someFocus = new Vector3(Number(spawn.positionX), Number(spawn.positionY), Number(spawn.positionZ)); spawn.changeFocusPoint(someFocus); } }, [spawn.focusID]); @@ -181,8 +201,8 @@ function Spawn(spawn) { enabled={spawn.focusID === spawn.spawnpointID} object={spawnObj} size={0.5} - onObjectChange={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + onMouseUp={(e) => { + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -200,31 +220,37 @@ function Spawn(spawn) { scaleY: scale.y, scaleZ: scale.z }); + setSpawnPointAttributes( + wp.data + .select("core/block-editor") + .getBlockAttributes(spawn.spawnpointID) + ); }} > {children} )} > - {spawnBlockAttributes && ( + - )} + ); @@ -232,7 +258,7 @@ function Spawn(spawn) { } function ImageObject(threeImage) { - const texture2 = useLoader(THREE.TextureLoader, threeImage.url); + const texture2 = useLoader(TextureLoader, threeImage.url); const imgObj = useRef(); const [isSelected, setIsSelected] = useState(); const threeImageBlockAttributes = wp.data @@ -243,7 +269,7 @@ function ImageObject(threeImage) { useEffect(() => { if( threeImage.focusID === threeImage.imageID ) { - const someFocus = new THREE.Vector3(Number(threeImage.positionX), Number(threeImage.positionY), Number(threeImage.positionZ)); + const someFocus = new Vector3(Number(threeImage.positionX), Number(threeImage.positionY), Number(threeImage.positionZ)); threeImage.changeFocusPoint(someFocus); } }, [threeImage.focusID]); @@ -266,7 +292,7 @@ function ImageObject(threeImage) { object={imgObj} size={0.5} onObjectChange={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion(e?.target.worldQuaternion); wp.data @@ -317,12 +343,12 @@ function ImageObject(threeImage) { {threeImageBlockAttributes.transparent ? ( ) : ( )} @@ -334,7 +360,7 @@ function ImageObject(threeImage) { } function AudioObject(threeAudio) { - const texture2 = useLoader(THREE.TextureLoader, (threeObjectPlugin + audioIcon)); + const texture2 = useLoader(TextureLoader, (threeObjectPlugin + audioIcon)); const [threeAudioBlockAttributes, setThreeAudioBlockAttributes] = useState( wp.data @@ -360,7 +386,7 @@ function AudioObject(threeAudio) { useEffect(() => { if( threeAudio.focusID === threeAudio.audioID ) { - const someFocus = new THREE.Vector3(Number(threeAudio.positionX), Number(threeAudio.positionY), Number(threeAudio.positionZ)); + const someFocus = new Vector3(Number(threeAudio.positionX), Number(threeAudio.positionY), Number(threeAudio.positionZ)); threeAudio.changeFocusPoint(someFocus); } }, [threeAudio.focusID]); @@ -387,7 +413,7 @@ function AudioObject(threeAudio) { object={audioObj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion(e?.target.worldQuaternion); wp.data @@ -427,7 +453,7 @@ function AudioObject(threeAudio) { { if( threeLight.focusID === threeLight.lightID ) { - const someFocus = new THREE.Vector3(Number(threeLight.positionX), Number(threeLight.positionY), Number(threeLight.positionZ)); + const someFocus = new Vector3(Number(threeLight.positionX), Number(threeLight.positionY), Number(threeLight.positionZ)); threeLight.changeFocusPoint(someFocus); } }, [threeLight.focusID]); @@ -568,7 +594,7 @@ function LightObject(threeLight) { object={lightObj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion(e?.target.worldQuaternion); wp.data @@ -609,7 +635,7 @@ function LightObject(threeLight) { { if( threeVideo.focusID === threeVideo.videoID ) { - const someFocus = new THREE.Vector3(Number(threeVideo.positionX), Number(threeVideo.positionY), Number(threeVideo.positionZ)); + const someFocus = new Vector3(Number(threeVideo.positionX), Number(threeVideo.positionY), Number(threeVideo.positionZ)); threeVideo.changeFocusPoint(someFocus); } }, [threeVideo.focusID]); @@ -737,7 +763,7 @@ function VideoObject(threeVideo) { object={videoObj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion(e?.target.worldQuaternion); wp.data @@ -790,7 +816,7 @@ function VideoObject(threeVideo) { { setTimeout(() => set(props.url), 2000); }, []); - const [listener] = useState(() => new THREE.AudioListener()); + const [listener] = useState(() => new AudioListener()); useThree(({ camera }) => { camera.add(listener); @@ -859,7 +885,7 @@ function ModelObject(props) { // update id if active useEffect(() => { if( props.focusID === props.modelID ) { - const someFocus = new THREE.Vector3(Number(props.positionX), Number(props.positionY), Number(props.positionZ)); + const someFocus = new Vector3(Number(props.positionX), Number(props.positionY), Number(props.positionZ)); props.changeFocusPoint(someFocus); } }, [props.focusID]); @@ -891,7 +917,7 @@ function ModelObject(props) { object={obj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -973,7 +999,7 @@ function ModelObject(props) { object={obj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -1055,7 +1081,7 @@ function NPCObject(props) { // update id if active useEffect(() => { if( props.focusID === props.modelID ) { - const someFocus = new THREE.Vector3(Number(props.positionX), Number(props.positionY), Number(props.positionZ)); + const someFocus = new Vector3(Number(props.positionX), Number(props.positionY), Number(props.positionZ)); props.changeFocusPoint(someFocus); } }, [props.focusID]); @@ -1067,7 +1093,7 @@ function NPCObject(props) { let defaultColor = "0x000000"; var colorValue = parseInt ( defaultColor.replace("#","0x"), 16 ); - const color = new THREE.Color( colorValue ); + const color = new Color( colorValue ); return ( <> @@ -1092,7 +1118,7 @@ function NPCObject(props) { object={obj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -1170,7 +1196,7 @@ function NPCObject(props) { object={obj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -1231,7 +1257,7 @@ function PortalObject(model) { useEffect(() => { if( model.focusID === model.portalID ) { - const someFocus = new THREE.Vector3(Number(model.positionX), Number(model.positionY), Number(model.positionZ)); + const someFocus = new Vector3(Number(model.positionX), Number(model.positionY), Number(model.positionZ)); model.changeFocusPoint(someFocus); } }, [model.focusID]); @@ -1243,7 +1269,7 @@ function PortalObject(model) { useEffect(() => { setTimeout(() => set(model.url), 2000); }, []); - const [listener] = useState(() => new THREE.AudioListener()); + const [listener] = useState(() => new AudioListener()); useThree(({ camera }) => { camera.add(listener); @@ -1317,7 +1343,7 @@ function PortalObject(model) { object={obj} size={0.5} onMouseUp={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -1554,7 +1580,7 @@ function ThreeObject(props) { useEffect(() => { setTimeout(() => set(props.url), 2000); }, [props.url]); - const [listener] = useState(() => new THREE.AudioListener()); + const [listener] = useState(() => new AudioListener()); useThree(({ camera }) => { camera.add(listener); @@ -1622,7 +1648,7 @@ function ThreeObject(props) { size={0.5} position={ [ blockPosition.positionX, blockPosition.positionY, blockPosition.positionZ ] } onObjectChange={(e) => { - const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const rot = new Euler(0, 0, 0, "XYZ"); const scale = e?.target.worldScale; rot.setFromQuaternion( e?.target.worldQuaternion @@ -1671,7 +1697,6 @@ function ThreeObject(props) { positionZ={spawnpoint.positionZ} transformMode={props.transformMode} changeFocusPoint={props.changeFocusPoint} - // setFocusPosition={props.setFocusPosition} shouldFocus={props.shouldFocus} /> )} diff --git a/blocks/environment/components/core/front/ThreeVideo.js b/blocks/environment/components/core/front/ThreeVideo.js index 4aec268..d02916a 100644 --- a/blocks/environment/components/core/front/ThreeVideo.js +++ b/blocks/environment/components/core/front/ThreeVideo.js @@ -153,7 +153,7 @@ export function ThreeVideo(threeVideo) { return ( { e.preventDefault()} }/> +
+ { e.preventDefault()} }/>
@@ -287,8 +295,9 @@ function ChatBox(props) { {/* {props.messages.map((message, index) => (

{message}

))} */} -
- + + +
@@ -298,7 +307,168 @@ function ChatBox(props) { ); } } - + + /** + * A map from Mixamo rig name to VRM Humanoid bone name + */ +const mixamoVRMRigMap = { + mixamorigHips: 'hips', + mixamorigSpine: 'spine', + mixamorigSpine1: 'chest', + mixamorigSpine2: 'upperChest', + mixamorigNeck: 'neck', + mixamorigHead: 'head', + mixamorigLeftShoulder: 'leftShoulder', + mixamorigLeftArm: 'leftUpperArm', + mixamorigLeftForeArm: 'leftLowerArm', + mixamorigLeftHand: 'leftHand', + mixamorigLeftHandThumb1: 'leftThumbMetacarpal', + mixamorigLeftHandThumb2: 'leftThumbProximal', + mixamorigLeftHandThumb3: 'leftThumbDistal', + mixamorigLeftHandIndex1: 'leftIndexProximal', + mixamorigLeftHandIndex2: 'leftIndexIntermediate', + mixamorigLeftHandIndex3: 'leftIndexDistal', + mixamorigLeftHandMiddle1: 'leftMiddleProximal', + mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', + mixamorigLeftHandMiddle3: 'leftMiddleDistal', + mixamorigLeftHandRing1: 'leftRingProximal', + mixamorigLeftHandRing2: 'leftRingIntermediate', + mixamorigLeftHandRing3: 'leftRingDistal', + mixamorigLeftHandPinky1: 'leftLittleProximal', + mixamorigLeftHandPinky2: 'leftLittleIntermediate', + mixamorigLeftHandPinky3: 'leftLittleDistal', + mixamorigRightShoulder: 'rightShoulder', + mixamorigRightArm: 'rightUpperArm', + mixamorigRightForeArm: 'rightLowerArm', + mixamorigRightHand: 'rightHand', + mixamorigRightHandPinky1: 'rightLittleProximal', + mixamorigRightHandPinky2: 'rightLittleIntermediate', + mixamorigRightHandPinky3: 'rightLittleDistal', + mixamorigRightHandRing1: 'rightRingProximal', + mixamorigRightHandRing2: 'rightRingIntermediate', + mixamorigRightHandRing3: 'rightRingDistal', + mixamorigRightHandMiddle1: 'rightMiddleProximal', + mixamorigRightHandMiddle2: 'rightMiddleIntermediate', + mixamorigRightHandMiddle3: 'rightMiddleDistal', + mixamorigRightHandIndex1: 'rightIndexProximal', + mixamorigRightHandIndex2: 'rightIndexIntermediate', + mixamorigRightHandIndex3: 'rightIndexDistal', + mixamorigRightHandThumb1: 'rightThumbMetacarpal', + mixamorigRightHandThumb2: 'rightThumbProximal', + mixamorigRightHandThumb3: 'rightThumbDistal', + mixamorigLeftUpLeg: 'leftUpperLeg', + mixamorigLeftLeg: 'leftLowerLeg', + mixamorigLeftFoot: 'leftFoot', + mixamorigLeftToeBase: 'leftToes', + mixamorigRightUpLeg: 'rightUpperLeg', + mixamorigRightLeg: 'rightLowerLeg', + mixamorigRightFoot: 'rightFoot', + mixamorigRightToeBase: 'rightToes', +}; + +/** + * Download Mixamo animation, convert it for usage with three-vrm, and return the converted animation. + * + * @param {string} url - The URL of Mixamo animation data + * @param {VRM} vrm - The target VRM + * @returns {Promise} - The adapted AnimationClip + */ +function loadMixamoAnimation(url, vrm) { + let loader; + if (url.endsWith('.fbx')) { + loader = new FBXLoader(); // Use an FBX loader + } else { + loader = new GLTFLoader(); // Use a GLTF loader + } + return loader.loadAsync(url).then((resource) => { + const clip = resource.animations[0]; // Extract the AnimationClip + + // if resource is GLB, get the scene + if (url.endsWith('.glb')) { + resource = resource.scene; + } + + let tracks = []; // KeyframeTracks compatible with VRM to be stored here + + let restRotationInverse = new THREE.Quaternion(); + let parentRestWorldRotation = new THREE.Quaternion(); + let _quatA = new THREE.Quaternion(); + let _vec3 = new THREE.Vector3(); + + // Adjust according to the height of the hips. + let mixamoHips = resource.getObjectByName('mixamorigHips'); + let regularHips = resource.getObjectByName('hips'); + let mainHip; + if (mixamoHips) { + mainHip = mixamoHips.position.y; + } else if (regularHips) { + mainHip = regularHips.position.y; + } + const vrmHipsY = vrm.humanoid?.getNormalizedBoneNode('hips').getWorldPosition(_vec3).y; + const vrmRootY = vrm.scene.getWorldPosition(_vec3).y; + const vrmHipsHeight = Math.abs(vrmHipsY - vrmRootY); + const hipsPositionScale = vrmHipsHeight / mainHip; + + clip.tracks.forEach((track) => { + // Convert each track for VRM usage, and push to `tracks` + let trackSplitted = track.name.split('.'); + let mixamoRigName = trackSplitted[0]; + let vrmBoneName = mixamoVRMRigMap[mixamoRigName]; + let vrmNodeName = vrm.humanoid?.getNormalizedBoneNode(vrmBoneName)?.name; + let mixamoRigNode = resource.getObjectByName(mixamoRigName); + + if (vrmNodeName != null) { + + let propertyName = trackSplitted[1]; + + // Store rotations of rest-pose. + mixamoRigNode.getWorldQuaternion(restRotationInverse).invert(); + mixamoRigNode.parent.getWorldQuaternion(parentRestWorldRotation); + + if (track instanceof THREE.QuaternionKeyframeTrack) { + + // Retarget rotation of mixamoRig to NormalizedBone. + for (let i = 0; i < track.values.length; i += 4) { + + let flatQuaternion = track.values.slice(i, i + 4); + + _quatA.fromArray(flatQuaternion); + + _quatA + .premultiply(parentRestWorldRotation) + .multiply(restRotationInverse); + + _quatA.toArray(flatQuaternion); + + flatQuaternion.forEach((v, index) => { + + track.values[index + i] = v; + + }); + + } + + tracks.push( + new THREE.QuaternionKeyframeTrack( + `${vrmNodeName}.${propertyName}`, + track.times, + track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 2 === 0 ? - v : v)), + ), + ); + + } else if (track instanceof THREE.VectorKeyframeTrack) { + let value = track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 3 !== 1 ? - v : v) * hipsPositionScale); + tracks.push(new THREE.VectorKeyframeTrack(`${vrmNodeName}.${propertyName}`, track.times, value)); + } + + } + + }); + return new THREE.AnimationClip('vrmAnimation', clip.duration, tracks); + + }); +} + /** * Represents a participant in a virtual reality scene. * @@ -306,20 +476,86 @@ function ChatBox(props) { * * @return {JSX.Element} The participant. */ +// function Participant(participant) { +// const fallbackURL = threeObjectPlugin + defaultVRM; +// const playerURL = userData.vrm ? userData.vrm : fallbackURL; +// const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { +// loader.register((parser) => { +// return new VRMLoaderPlugin(parser); +// }); +// }); + +// const modelClone = useRef(null); +// const currentMixer = useRef(null); +// const theScene = useThree(); + +// useEffect(() => { +// if (someSceneState?.userData?.gltfExtensions?.VRM) { +// const playerController = someSceneState.userData.vrm; +// VRMUtils.rotateVRM0(playerController); +// const rotationVRM = playerController.scene.rotation.y; +// playerController.scene.rotation.set(0, rotationVRM, 0); +// playerController.scene.scale.set(1, 1, 1); + +// modelClone.current = SkeletonUtils.clone(playerController.scene); +// currentMixer.current = new THREE.AnimationMixer(modelClone.current); + +// const animationFiles = [threeObjectPlugin + idle, threeObjectPlugin + walk, threeObjectPlugin + run]; +// const animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, modelClone.current)); + +// Promise.all(animationsPromises).then(animations => { +// animations.forEach((clip, index) => { +// const action = currentMixer.current.clipAction(clip); +// action.timeScale = 1; +// if (index === 0) action.play(); // Play only the idle animation initially +// }); +// }); + +// modelClone.current.visible = true; +// } +// }, [someSceneState]); + +// useEffect(() => { +// participant.p2pcf.on("msg", (peer, data) => { +// const finalData = new TextDecoder("utf-8").decode(data); +// const participantData = JSON.parse(finalData); +// const participantObject = theScene.scene.getObjectByName(peer.client_id); +// if (participantObject) { +// participantObject.position.fromArray(participantData[peer.client_id][0].position); +// participantObject.rotation.fromArray(participantData[peer.client_id][1].rotation); +// } +// }); +// }, [participant, theScene.scene]); + +// useFrame((state, delta) => { +// if (currentMixer.current) { +// currentMixer.current.update(delta); +// } +// }); + +// return ( +// <> +// {modelClone.current && ( +// +// )} +// +// ); +// } function Participant(participant) { + // Participant VRM. const fallbackURL = threeObjectPlugin + defaultVRM; - console.log(fallbackURL); + console.log(fallbackURL, userData.vrm, userData ); const playerURL = userData.vrm ? userData.vrm : fallbackURL; - const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { + const someVRM = useLoader(GLTFLoader, playerURL, (loader) => { loader.register((parser) => { return new VRMLoaderPlugin(parser); }); }); - if (someSceneState?.userData?.gltfExtensions?.VRM) { - const playerController = someSceneState.userData.vrm; + if (someVRM?.userData?.gltfExtensions?.VRM) { + const playerController = someVRM.userData.vrm; VRMUtils.rotateVRM0(playerController); const rotationVRM = playerController.scene.rotation.y; playerController.scene.rotation.set(0, rotationVRM, 0); @@ -335,24 +571,8 @@ function Participant(participant) { const participantObject = theScene.scene.getObjectByName( peer.client_id ); + console.log(participantData); if (participantObject) { - // const loadedProfile = useLoader( - // TextureLoader, - // participantData[peer.client_id][2].profileImage - // ); - // if (loadedProfile) { - // participantObject.traverse((obj) => { - // if ( - // obj.name === "profile" && - // obj.material.map === null - // ) { - // const newMat = obj.material.clone(); - // newMat.map = loadedProfile; - // obj.material = newMat; - // obj.material.map.needsUpdate = true; - // } - // }); - // } participantObject.position.set( participantData[peer.client_id][0].position[0], participantData[peer.client_id][0].position[1], @@ -367,20 +587,72 @@ function Participant(participant) { }); }, []); - // participant.p2pcf.on('peerclose', peer => { - // const participantObject = theScene.scene.getObjectByName(peer.client_id); - // // theScene.scene.remove(participantObject.name); - // theScene.scene.remove(...participantObject.children); - // // removePeerUi(peer.id) - // }) + const idleFile = threeObjectPlugin + idle; + const walkingFile = threeObjectPlugin + walk; + const runningFile = threeObjectPlugin + run; + + const currentMixer = new THREE.AnimationMixer(someVRM.userData.vrm.scene); + + let animationFiles = [idleFile, walkingFile, runningFile]; + let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, someVRM.userData.vrm)); + + const modelClone = SkeletonUtils.clone(someVRM.userData.vrm.scene); + + modelClone.userData.vrm = someVRM.userData.vrm; + + modelClone.animations = playerController.scene.animations; - const modelClone = SkeletonUtils.clone(playerController.scene); - // set modelClone visible to true modelClone.visible = true; + const newMixer = new THREE.AnimationMixer(modelClone); + + Promise.all(animationsPromises) + .then(animations => { + const idleAction = currentMixer.clipAction(animations[0]); + const walkingAction = currentMixer.clipAction(animations[1]); + const runningAction = currentMixer.clipAction(animations[2]); + idleAction.timeScale = 1; + walkingAction.timeScale = 1; + runningAction.timeScale = 1; + + // animationsRef.current = { idle: idleAction, walking: walkingAction, running: runningAction }; + idleAction.play(); + // if(modelClone?.animations && modelClone.animations.length > 0){ + // const idleAction = newMixer.clipAction(modelClone.animations[0]); + // idleAction.play(); + // } + const newIdleAction = newMixer.clipAction(animations[0]); + const newWalkingAction = newMixer.clipAction(animations[1]); + const newRunningAction = newMixer.clipAction(animations[2]); + newIdleAction.timeScale = 1; + newWalkingAction.timeScale = 1; + newRunningAction.timeScale = 1; + newIdleAction.play(); + // modelClone.animations = playerController.scene.animations; + + console.log("newMixer", newMixer); + console.log("currentMixer done", currentMixer); + console.log("modelClone done", modelClone); + console.log("playerController", playerController); + console.log("animations", modelClone.animations); + }); + + + useEffect(() => { + }, []); + + // In your animation loop (useFrame) + useFrame((state, delta) => { + if (newMixer) { + newMixer.update(delta); + } + if (modelClone?.userData?.vrm) { + modelClone.userData.vrm.update(delta); + } + }); return ( <> - {playerController && ( + {playerController && modelClone?.userData && ( )} @@ -396,7 +668,14 @@ function Participants(props) { p2pcf.on("peerconnect", (peer) => { // console.log("connected peer", peer); // add peer.client_id to participants - props.setParticipant([...props.participants, peer.client_id]); + props.setParticipant(prevParticipants => { + // Make sure the new participant is not already in the list + if (!prevParticipants.includes(peer.client_id)) { + return [...prevParticipants, peer.client_id]; + } else { + return prevParticipants; + } + }); }); } }, []); @@ -643,7 +922,9 @@ function SavedObject(props) { } export default function EnvironmentFront(props) { + const [participants, setParticipant] = useState([]); + const [showUI, setShowUI] = useState(true); const canvasRef = useRef(null); diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 794e3f1..9dcb17e 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -2,6 +2,7 @@ import { Mesh, Raycaster, DoubleSide, MeshBasicMaterial, RingGeometry, BoxGeomet import { TextureLoader } from "three/src/loaders/TextureLoader"; import { useFrame, useLoader, useThree, Interactive } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader'; import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; import { OrbitControls } from '@react-three/drei'; import { useKeyboardControls } from "./Controls" @@ -195,6 +196,8 @@ function loadMixamoAnimation(url, vrm) { } export default function Player(props) { + const p2pcf = window.p2pcf; + const canMoveRef = useRef(true); const falling = useRef(true); const animationsRef = useRef(); @@ -237,11 +240,24 @@ export default function Player(props) { playerURL = defaultAvatarURL; } const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { + + const { gl } = useThree(); // Access the Three.js renderer + + // Create and configure KTX2Loader + const ktx2Loader = new KTX2Loader(); + ktx2Loader.setTranscoderPath(threeObjectPluginRoot + "/inc/utils/basis/"); // Set the path to the basis transcoder + ktx2Loader.detectSupport(gl); // Detect support using the renderer + + // Set the KTX2Loader to GLTFLoader + loader.setKTX2Loader(ktx2Loader); + loader.register((parser) => { return new VRMLoaderPlugin(parser); }); }); + console.log(someSceneState, "somesecenestate"); + if (someSceneState?.userData?.gltfExtensions?.VRM) { const playerController = someSceneState.userData.vrm; const fetchProfile = async () => { @@ -529,6 +545,35 @@ export default function Player(props) { idle.setEffectiveWeight(0); walking.play(); } + + //if moving, send a network event of where we are and our current state....animations probably need to go here too. + if (p2pcf) { + var target = new Vector3(); // create once an reuse it + + var worldPosition = participantObject.getWorldPosition( target ); + const position = [ + worldPosition.x, + worldPosition.y, + worldPosition.z + ]; + // console.log("sending position", participantObject, position); + + const rotation = [ + participantObject.rotation.x, + participantObject.rotation.y, + participantObject.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); + } + // } } else { // If not moving, but walking animation is playing, stop it and play idle animation diff --git a/blocks/environment/components/core/front/NPCObject.js b/blocks/environment/components/core/front/NPCObject.js index c551586..9829861 100644 --- a/blocks/environment/components/core/front/NPCObject.js +++ b/blocks/environment/components/core/front/NPCObject.js @@ -415,6 +415,7 @@ export function NPCObject(model) { font={model.threeObjectPlugin + model.defaultFont} position={[0.6, (Number(headPositionY.current) - 0.5), 0]} className="content" + fontSize={0.1} scale={[0.5, 0.5, 0.5]} // rotation-y={-Math.PI / 2} width={0.1} diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 1d725f3..270a216 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -107,7 +107,7 @@ threeApp.forEach((threeApp) => { render( <> - {/*
+

Peers

@@ -115,11 +115,11 @@ threeApp.forEach((threeApp) => {
-
*/} - {/* + */} + /> 1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis_transcoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["K"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["L"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}return Module["dynCall_"+sig].call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){assert(sig.indexOf("j")>=0,"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>2)+i])}return array}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _setTempRet0($i){setTempRet0($i|0)}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"t":__embind_finalize_value_object,"I":__embind_register_bool,"x":__embind_register_class,"w":__embind_register_class_constructor,"d":__embind_register_class_function,"k":__embind_register_constant,"H":__embind_register_emval,"n":__embind_register_enum,"a":__embind_register_enum_value,"A":__embind_register_float,"i":__embind_register_function,"j":__embind_register_integer,"h":__embind_register_memory_view,"B":__embind_register_std_string,"v":__embind_register_std_wstring,"u":__embind_register_value_object,"c":__embind_register_value_object_field,"J":__embind_register_void,"m":__emval_as,"s":__emval_call_void_method,"b":__emval_decref,"y":__emval_get_global,"p":__emval_get_method_caller,"r":__emval_get_module_property,"e":__emval_get_property,"g":__emval_incref,"q":__emval_new,"f":__emval_new_cstring,"l":__emval_run_destructors,"o":_abort,"E":_emscripten_memcpy_big,"F":_emscripten_resize_heap,"G":_fd_close,"C":_fd_seek,"z":_fd_write,"D":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["M"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["N"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["O"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["P"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["R"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); + + + return BASIS.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = BASIS; +else if (typeof define === 'function' && define['amd']) + define([], function() { return BASIS; }); +else if (typeof exports === 'object') + exports["BASIS"] = BASIS; diff --git a/inc/utils/basis/basis_transcoder.wasm b/inc/utils/basis/basis_transcoder.wasm new file mode 100644 index 0000000000000000000000000000000000000000..4b9c3437170cf226600057096490d0a2fa8d74ea GIT binary patch literal 499935 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 + // $vrm = wp_get_attachment_url($current_user->avatar); + $vrm = get_option('3ov_defaultAvatar'); if ( is_user_logged_in() && get_option('3ov_ai_allow') === "loggedIn" ) { $user_data_passed = array( 'userId' => $current_user->user_login, diff --git a/webpack.config.js b/webpack.config.js index 8ae974b..4792988 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -61,6 +61,11 @@ module.exports = { rules: [ ...defaultConfig.module.rules, + { + test: /\.js$/, + exclude: /node_modules\/(?!chess\.js)/, + use: 'babel-loader' + }, { test: /\.js$/, exclude: /node_modules/, diff --git a/yarn.lock b/yarn.lock index 1738cfc..e53a43a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17455,10 +17455,10 @@ three@*: resolved "https://registry.yarnpkg.com/three/-/three-0.145.0.tgz#a613d71e75effc2aed88be630027ca01e2b6502e" integrity sha512-EKoHQEtEJ4CB6b2BGMBgLZrfwLjXcSUfoI/MiIXUuRpeYsfK5aPWbYhdtIVWOH+x6X0TouldHKHBuc/LAiFzAw== -three@^0.153.0: - version "0.153.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.153.0.tgz#d8f2aab7b49ae4ac947fd0e24cebec11378758f0" - integrity sha512-OCP2/uQR6GcDpSLnJt/3a4mdS0kNWcbfUXIwLoEMgLzEUIVIYsSDwskpmOii/AkDM+BBwrl6+CKgrjX9+E2aWg== +three@0.151.0: + version "0.151.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.151.0.tgz#05b21fe1d97448916942b31658865b6adc666b48" + integrity sha512-ZvjJbNhZ/t0L8I36tc1I1ZP9j1q42ANE9WTlR+P3lZfOzlSfNa5VfR1rZRHNyjn/ZPP4kU7xGI1v8QSJOpxE4w== throat@^5.0.0: version "5.0.0" From 5b2f9074adabde130e3abf3fc518a0992c58d77b Mon Sep 17 00:00:00 2001 From: antpb Date: Mon, 18 Dec 2023 23:40:17 -0600 Subject: [PATCH 03/43] adds networking block and tposed networked player --- .../components/EnvironmentFront.js | 357 ++++++++++-------- blocks/environment/components/Player.js | 23 +- .../environment/components/ThreeObjectEdit.js | 17 +- blocks/environment/editor.scss | 1 + blocks/environment/frontend.js | 34 +- blocks/three-networking-block/Edit.js | 176 +++++++++ blocks/three-networking-block/Edit.test.js | 47 +++ blocks/three-networking-block/Save.js | 14 + blocks/three-networking-block/block.json | 20 + blocks/three-networking-block/editor.scss | 42 +++ blocks/three-networking-block/index.js | 47 +++ blocks/three-networking-block/init.php | 13 + blocks/three-networking-block/style.scss | 44 +++ inc/avatars/guest_default_avatar.vrm | Bin 0 -> 47848 bytes package.json | 5 +- php/Plugin.php | 7 +- pluginMachine.json | 4 +- three-object-viewer.php | 5 +- webpack.config.js | 2 +- yarn.lock | 149 ++++---- 20 files changed, 740 insertions(+), 267 deletions(-) create mode 100644 blocks/three-networking-block/Edit.js create mode 100644 blocks/three-networking-block/Edit.test.js create mode 100644 blocks/three-networking-block/Save.js create mode 100644 blocks/three-networking-block/block.json create mode 100644 blocks/three-networking-block/editor.scss create mode 100644 blocks/three-networking-block/index.js create mode 100644 blocks/three-networking-block/init.php create mode 100644 blocks/three-networking-block/style.scss create mode 100644 inc/avatars/guest_default_avatar.vrm diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 8e38715..408f531 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -1,7 +1,7 @@ import * as THREE from "three"; import { Fog } from 'three/src/scenes/Fog' import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; -import { useLoader, useThree, useFrame, Canvas } from "@react-three/fiber"; +import { useLoader, useThree, useFrame, Canvas, extend } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; @@ -16,6 +16,9 @@ import ScrollableFeed from 'react-scrollable-feed' import { Resizable } from "re-resizable"; import { Environment, useContextBridge } from "@react-three/drei"; import { FrontPluginProvider, FrontPluginContext } from './FrontPluginProvider'; // Import the PluginProvider +import { LumaSplatsThree } from "@lumaai/luma-web"; +// Make LumaSplatsThree available to R3F +extend( { LumaSplats: LumaSplatsThree } ); import { useAnimations, @@ -30,6 +33,7 @@ import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import TeleportTravel from "./TeleportTravel"; import Player from "./Player"; import defaultVRM from "../../../inc/avatars/3ov_default_avatar.vrm"; +import defaultGuest from "../../../inc/avatars/guest_default_avatar.vrm"; import defaultEnvironment from "../../../inc/assets/default_grid.glb"; import defaultFont from "../../../inc/fonts/roboto.woff"; import { ItemBaseUI } from "@wordpress/components/build/navigation/styles/navigation-styles"; @@ -59,7 +63,7 @@ function isVRCompatible() { const webGLSupported = typeof window.WebGLRenderingContext !== 'undefined'; return xrSupported && webGLSupported; - } +} function Loading() { @@ -462,7 +466,6 @@ function loadMixamoAnimation(url, vrm) { } } - }); return new THREE.AnimationClip('vrmAnimation', clip.duration, tracks); @@ -476,6 +479,192 @@ function loadMixamoAnimation(url, vrm) { * * @return {JSX.Element} The participant. */ +function Participant(participant) { + const fallbackURL = threeObjectPlugin + defaultVRM; + const playerURL = userData.vrm ? userData.vrm : fallbackURL; + const clonedModelRef = useRef(null); // Ref for the cloned model + + const [someVRM, setSomeVRM] = useState(null); + const theScene = useThree(); + const mixers = useRef([]); + + // Load the VRM model + useEffect(() => { + const loader = new GLTFLoader(); + loader.register(parser => new VRMLoaderPlugin(parser)); + loader.load(playerURL, gltf => { + setSomeVRM(gltf); + }); + }, [playerURL]); + + useEffect(() => { + if (someVRM?.userData?.gltfExtensions?.VRM) { + const playerController = someVRM.userData.vrm; + const fetchProfile = async (pfp, modelToModify) => { + console.log("modelToModify", modelToModify); + + try { + const response = await fetch(pfp); + console.log("pfp", pfp, response); + if (response.status === 200) { + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed + textureLoader.load(pfp, (loadedProfile) => { + // Now we are sure the texture is loaded + if(modelToModify.isObject3D){ + modelToModify.traverse((obj) => { + obj.frustumCulled = false; + + if (obj.name === "profile" && obj.material) { + console.log("profile", obj); + const newMat = obj.material.clone(); + newMat.map = loadedProfile; + newMat.map.needsUpdate = true; + newMat.needsUpdate = true; // Update material + obj.material = newMat; + } + }); + } + }); + return response; + } + } catch (err) { + // Handle the error properly or rethrow it to be caught elsewhere. + // console.error("Error fetching profile:", err); + // throw err; + } + }; + + VRMUtils.rotateVRM0(playerController); + playerController.scene.rotation.y = 0; + playerController.scene.scale.set(1, 1, 1); + + + // Animation files + const idleFile = threeObjectPlugin + idle; + const walkingFile = threeObjectPlugin + walk; + const runningFile = threeObjectPlugin + run; + if(modelClone?.isObject3D){ + // Load animations + let animationFiles = [idleFile, walkingFile, runningFile]; + let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); + + // Clone the model + const clonedModel = SkeletonUtils.clone(modelClone); + clonedModel.userData.vrm = clonedModel; + + // Create animation mixer for the cloned model + const newMixer = new THREE.AnimationMixer(clonedModel); + mixers.current.push(newMixer); + + Promise.all(animationsPromises).then(animations => { + const idleAction = newMixer.clipAction(animations[0]); + const walkingAction = newMixer.clipAction(animations[1]); + const runningAction = newMixer.clipAction(animations[2]); + console.log("newMixer", newMixer, idleAction, walkingAction, runningAction); + idleAction.timeScale = 1; + idleAction.play(); + }); + let isProfileFetched = false; // flag to check if profile has been fetched + + participant.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); + const participantObject = theScene.scene.getObjectByName(peer.client_id); + if (!isProfileFetched) { + isProfileFetched = true; // set the flag to true after first fetch + + setTimeout(() => { + if( modelClone.isObject3D ){ + fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) + .then((response) => { + // handle the response here if needed + }) + .catch((err) => { + // Handle the error here if needed + }); + } + }, 1000); + } + if (participantObject) { + participantObject.position.fromArray(participantData[peer.client_id][0].position); + participantObject.rotation.fromArray(participantData[peer.client_id][1].rotation); + + } + }); + } + return () => { + // Cleanup function to stop and dispose mixers + mixers.current.forEach(mixer => mixer.stopAllAction()); + mixers.current = []; + }; + } + }, [someVRM, theScene, participant.p2pcf]); + + useFrame((state, delta) => { + mixers.current.forEach(mixer => { + // Log each action in the mixer + // mixer._actions.forEach(action => { + // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); + // }); + + // Find and play the idle animation explicitly + const idleAction = mixer._actions.find(action => action._clip.name === 'idle'); + if (idleAction && !idleAction.isRunning()) { + idleAction.reset().play(); + } + + // Update the mixer + mixer.update(delta); + }); + + if (someVRM?.userData?.vrm) { + someVRM.userData.vrm.update(delta); // Update the VRM model + } + if (clonedModelRef?.current?.userData?.vrm) { + clonedModelRef.current.userData.vrm.update(delta); // Update the cloned VRM model + } + }); + + if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { + return null; + } + + const playerController = someVRM.userData.vrm; + const modelClone = SkeletonUtils.clone(playerController.scene); + modelClone.userData.vrm = playerController; + + return ( + + ); +} + + +function Participants(props) { + useEffect(() => { + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerconnect", (peer) => { + props.setParticipant(prevParticipants => { + if (!prevParticipants.includes(peer.client_id)) { + return [...prevParticipants, peer.client_id]; + } else { + return prevParticipants; + } + }); + }); + } + }, []); + + return ( + <> + {props.participants && props.participants.map((item, index) => ( + + ))} + + ); +} // function Participant(participant) { // const fallbackURL = threeObjectPlugin + defaultVRM; // const playerURL = userData.vrm ? userData.vrm : fallbackURL; @@ -541,163 +730,6 @@ function loadMixamoAnimation(url, vrm) { // // ); // } -function Participant(participant) { - - // Participant VRM. - const fallbackURL = threeObjectPlugin + defaultVRM; - console.log(fallbackURL, userData.vrm, userData ); - const playerURL = userData.vrm ? userData.vrm : fallbackURL; - - const someVRM = useLoader(GLTFLoader, playerURL, (loader) => { - loader.register((parser) => { - return new VRMLoaderPlugin(parser); - }); - }); - - if (someVRM?.userData?.gltfExtensions?.VRM) { - const playerController = someVRM.userData.vrm; - VRMUtils.rotateVRM0(playerController); - const rotationVRM = playerController.scene.rotation.y; - playerController.scene.rotation.set(0, rotationVRM, 0); - playerController.scene.scale.set(1, 1, 1); - - const theScene = useThree(); - - useEffect(() => { - participant.p2pcf.on("msg", (peer, data) => { - // console.log(peer, data); - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - const participantObject = theScene.scene.getObjectByName( - peer.client_id - ); - console.log(participantData); - if (participantObject) { - participantObject.position.set( - participantData[peer.client_id][0].position[0], - participantData[peer.client_id][0].position[1], - participantData[peer.client_id][0].position[2] - ); - participantObject.rotation.set( - participantData[peer.client_id][1].rotation[0], - participantData[peer.client_id][1].rotation[1], - participantData[peer.client_id][1].rotation[2] - ); - } - }); - }, []); - - const idleFile = threeObjectPlugin + idle; - const walkingFile = threeObjectPlugin + walk; - const runningFile = threeObjectPlugin + run; - - const currentMixer = new THREE.AnimationMixer(someVRM.userData.vrm.scene); - - let animationFiles = [idleFile, walkingFile, runningFile]; - let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, someVRM.userData.vrm)); - - const modelClone = SkeletonUtils.clone(someVRM.userData.vrm.scene); - - modelClone.userData.vrm = someVRM.userData.vrm; - - modelClone.animations = playerController.scene.animations; - - modelClone.visible = true; - const newMixer = new THREE.AnimationMixer(modelClone); - - Promise.all(animationsPromises) - .then(animations => { - const idleAction = currentMixer.clipAction(animations[0]); - const walkingAction = currentMixer.clipAction(animations[1]); - const runningAction = currentMixer.clipAction(animations[2]); - idleAction.timeScale = 1; - walkingAction.timeScale = 1; - runningAction.timeScale = 1; - - // animationsRef.current = { idle: idleAction, walking: walkingAction, running: runningAction }; - idleAction.play(); - // if(modelClone?.animations && modelClone.animations.length > 0){ - // const idleAction = newMixer.clipAction(modelClone.animations[0]); - // idleAction.play(); - // } - const newIdleAction = newMixer.clipAction(animations[0]); - const newWalkingAction = newMixer.clipAction(animations[1]); - const newRunningAction = newMixer.clipAction(animations[2]); - newIdleAction.timeScale = 1; - newWalkingAction.timeScale = 1; - newRunningAction.timeScale = 1; - newIdleAction.play(); - // modelClone.animations = playerController.scene.animations; - - console.log("newMixer", newMixer); - console.log("currentMixer done", currentMixer); - console.log("modelClone done", modelClone); - console.log("playerController", playerController); - console.log("animations", modelClone.animations); - }); - - - useEffect(() => { - }, []); - - // In your animation loop (useFrame) - useFrame((state, delta) => { - if (newMixer) { - newMixer.update(delta); - } - if (modelClone?.userData?.vrm) { - modelClone.userData.vrm.update(delta); - } - }); - - return ( - <> - {playerController && modelClone?.userData && ( - - )} - - ); - } -} - -function Participants(props) { - - useEffect(() => { - const p2pcf = window.p2pcf; - if (p2pcf) { - p2pcf.on("peerconnect", (peer) => { - // console.log("connected peer", peer); - // add peer.client_id to participants - props.setParticipant(prevParticipants => { - // Make sure the new participant is not already in the list - if (!prevParticipants.includes(peer.client_id)) { - return [...prevParticipants, peer.client_id]; - } else { - return prevParticipants; - } - }); - }); - } - }, []); - - return ( - <> - {props.participants && - props.participants.map((item, index) => { - return ( - <> - - - ); - })} - - ); - -} /** * Represents a saved object in a virtual reality world. @@ -708,6 +740,11 @@ function Participants(props) { */ function SavedObject(props) { + useThree(({ camera, scene }) => { + window.scene = scene; + window.camera = camera; + }); + const meshRef = useRef(); const [url, set] = useState(props.url); useEffect(() => { diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 9dcb17e..34698d3 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -5,6 +5,7 @@ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader'; import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; import { OrbitControls } from '@react-three/drei'; +import * as SkeletonUtils from "three/examples/jsm/utils/SkeletonUtils.js"; import { useKeyboardControls } from "./Controls" import { useRef, useState, useEffect } from "react"; import { RigidBody, CapsuleCollider, useRapier, vec3, interactionGroups, CuboidCollider } from "@react-three/rapier"; @@ -239,7 +240,7 @@ export default function Player(props) { if(defaultAvatarURL){ playerURL = defaultAvatarURL; } - const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { + const currentPlayerAvatar = useLoader(GLTFLoader, playerURL, (loader) => { const { gl } = useThree(); // Access the Three.js renderer @@ -256,10 +257,8 @@ export default function Player(props) { }); }); - console.log(someSceneState, "somesecenestate"); - - if (someSceneState?.userData?.gltfExtensions?.VRM) { - const playerController = someSceneState.userData.vrm; + if (currentPlayerAvatar?.userData?.gltfExtensions?.VRM) { + const playerController = currentPlayerAvatar.userData.vrm; const fetchProfile = async () => { try { const response = await fetch(userData.profileImage); @@ -294,8 +293,7 @@ export default function Player(props) { }); }, 1000); // VRMUtils.rotateVRM0(playerController); - const currentVrm = playerController; - const currentMixer = new AnimationMixer(currentVrm.scene); + const currentMixer = new AnimationMixer(playerController.scene); // need to dynamically do this on scroll @@ -314,8 +312,8 @@ export default function Player(props) { function handleBlinking(delta) { blinkTimer += delta; - if (blinkTimer > blinkInterval && currentVrm) { - performBlink(currentVrm); + if (blinkTimer > blinkInterval && playerController) { + performBlink(playerController); blinkTimer = 0; blinkInterval = getRandomBlinkInterval(); } @@ -390,8 +388,8 @@ export default function Player(props) { if (timeSinceLastUpdate >= 0.1) { lastUpdateTime = currentTime; } - if (currentVrm) { - currentVrm.update(delta); + if (playerController) { + playerController.update(delta); } if (currentMixer) { currentMixer.update(delta); @@ -549,7 +547,6 @@ export default function Player(props) { //if moving, send a network event of where we are and our current state....animations probably need to go here too. if (p2pcf) { var target = new Vector3(); // create once an reuse it - var worldPosition = participantObject.getWorldPosition( target ); const position = [ worldPosition.x, @@ -691,7 +688,7 @@ export default function Player(props) { let animationFiles = [idleFile, walkingFile, runningFile]; - let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, currentVrm)); + let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); Promise.all(animationsPromises) .then(animations => { diff --git a/blocks/environment/components/ThreeObjectEdit.js b/blocks/environment/components/ThreeObjectEdit.js index 2d7672b..4a5ff92 100644 --- a/blocks/environment/components/ThreeObjectEdit.js +++ b/blocks/environment/components/ThreeObjectEdit.js @@ -11,7 +11,7 @@ import { } from "three"; import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; -import { Canvas, useLoader, useFrame, useThree } from "@react-three/fiber"; +import { Canvas, useLoader, useFrame, useThree, extend } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; import { @@ -39,6 +39,9 @@ import defaultFont from "../../../inc/fonts/roboto.woff"; import audioIcon from "../../../inc/assets/audio_icon.png"; import lightIcon from "../../../inc/assets/light_icon.png"; import { EditorPluginProvider, useEditorPlugins, EditorPluginContext } from './EditorPluginProvider'; // Import the PluginProvider +import { LumaSplatsThree } from "@lumaai/luma-web"; +// Make LumaSplatsThree available to R3F +extend( { LumaSplats: LumaSplatsThree } ); const { registerStore } = wp.data; @@ -1460,6 +1463,10 @@ function ThreeObject(props) { let videoobject; const videoElementsToAdd = []; + let networkingID; + let networkingObject; + const networkingElementsToAdd = []; + let audioID; let audioObject; const audioElementsToAdd = []; @@ -1537,6 +1544,14 @@ function ThreeObject(props) { videoID = innerBlock.clientId; videoElementsToAdd.push({ videoobject, videoID }); } + if ( + innerBlock.name === + "three-object-viewer/three-networking-block" + ) { + networkingObject = innerBlock.attributes; + networkingID = innerBlock.clientId; + networkingElementsToAdd.push({ networkingObject, networkingID }); + } if ( innerBlock.name === "three-object-viewer/three-audio-block" diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index a09e4f1..e36c35b 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -71,6 +71,7 @@ .wp-block-three-object-viewer-three-light-block, .wp-block-three-object-viewer-three-portal-block, .wp-block-three-object-viewer-three-video-block, +.wp-block-three-object-viewer-three-networking-block, .wp-block-three-object-viewer-spawn-point-block, .wp-block-three-object-viewer-three-text-block { display: flex; diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 270a216..6667157 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -11,6 +11,9 @@ const threeApp = document.querySelectorAll( const modelsToAdd = document.querySelectorAll( ".three-object-three-app-model-block" ); +const networkingBlock = document.querySelectorAll( + ".three-object-three-app-networking-block" +); const npcsToAdd = document.querySelectorAll( ".three-object-three-app-npc-block" ); @@ -107,19 +110,24 @@ threeApp.forEach((threeApp) => { render( <> -

- + { ( networkingBlock.length > 0 ) && ( + <> +
+
+

Peers

+
+

Messages

+
+ +
+
+ + + ) + } { + if( isSelected ){ + dispatch( 'three-object-environment-events' ).setFocusEvent( clientId ); + } + }, [isSelected]); + + const onImageSelect = (imageObject) => { + setAttributes({ videoUrl: null }); + setAttributes({ + videoUrl: imageObject.url, + aspectHeight: imageObject.height, + aspectWidth: imageObject.width + }); + }; + + const onChangeParticipantLimit = (participantLimit) => { + setAttributes({ participantLimit }); + }; + + const { mediaUpload } = wp.editor; + + const ALLOWED_MEDIA_TYPES = ["video"]; + const THREE_ALLOWED_MEDIA_TYPES = [ + "model/gltf-binary", + "application/octet-stream" + ]; + + return ( +
+ + + + {/* + { + onChangeAutoPlay(e); + }} + /> + */} + + + {__("Participant Limit", "three-object-viewer")} + + + + onChangeParticipantLimit(value)} + /> + + + + + {isSelected ? ( + <> + {attributes.videoUrl ? ( +
+
+ + + + + +

+ {__( 'Networking Block', 'three-object-viewer' ) } +

+
+
+ ) : ( +
+
+ + + + + +

+ {__( 'Networking Block', 'three-object-viewer' ) } +

+
+
+ )} + + ) : ( + <> + {attributes.videoUrl ? ( +
+
+ + + + + +

+ { __( 'Networking Block', 'three-object-viewer' ) } +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + +

+ {__( 'Networking Block', 'three-object-viewer' ) } +

+
+
+ )} + + )} +
+ ); +} diff --git a/blocks/three-networking-block/Edit.test.js b/blocks/three-networking-block/Edit.test.js new file mode 100644 index 0000000..ab22d96 --- /dev/null +++ b/blocks/three-networking-block/Edit.test.js @@ -0,0 +1,47 @@ +//Import React +import React from "react"; +//Import test renderer +import { render, fireEvent, cleanup } from "@testing-library/react"; +//Import component to test +import { Editor } from "./Edit"; + +describe("Editor componet", () => { + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-networking-block/Save.js b/blocks/three-networking-block/Save.js new file mode 100644 index 0000000..2cc14ac --- /dev/null +++ b/blocks/three-networking-block/Save.js @@ -0,0 +1,14 @@ +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; + +export default function save({ attributes }) { + return ( +
+ <> +
+

{attributes.scaleX}

+
+ +
+ ); +} diff --git a/blocks/three-networking-block/block.json b/blocks/three-networking-block/block.json new file mode 100644 index 0000000..6e42d54 --- /dev/null +++ b/blocks/three-networking-block/block.json @@ -0,0 +1,20 @@ +{ + "name": "three-object-viewer/three-networking-block", + "attributes": { + "participantLimit": { + "type": "int", + "default": 5 + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": true + }, + "textdomain": "three-object-viewer", + "editorScript": "file:../../build/block-three-networking-block.js", + "editorStyle": "file:../../build/block-three-networking-block.css", + "style": "file:../../build/block-three-networking-block.css" +} diff --git a/blocks/three-networking-block/editor.scss b/blocks/three-networking-block/editor.scss new file mode 100644 index 0000000..4a6a4c4 --- /dev/null +++ b/blocks/three-networking-block/editor.scss @@ -0,0 +1,42 @@ + + .wp-block-three-object-block { + border: 1px dotted #f00; +} + .glb-preview-container { + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + } + + .glb-preview-container button{ + padding: 15px; + border-radius: 30px; +} + +.glb-preview-container button:hover{ + border-radius: 30px; + background-color:rgb(156, 199, 0); + cursor: pointer; +} +.three-object-block-tip { + overflow-wrap: break-word; + background-color: black; + color: white; + padding: 10px; + font-weight: 500; + max-width: 160px; + font-size: 12px; + margin-top: 0px; + margin: 0 auto; + text-align: center; +} + +.three-object-block-url-input { + padding-bottom: 20px; +} + +.three-object-block-url-input input{ + height: 40px; +} diff --git a/blocks/three-networking-block/index.js b/blocks/three-networking-block/index.js new file mode 100644 index 0000000..f564734 --- /dev/null +++ b/blocks/three-networking-block/index.js @@ -0,0 +1,47 @@ +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; + +const icon = ( + + + + + +); + +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { + ...blockConfig, + icon, + apiVersion: 2, + edit: Edit, + save: Save, + deprecated: [ + { + attributes: { + participantCount: { + type: "int", + default: 1 + } + }, + save(props) { + return ( +
+ <> +
+

{props.attributes.scaleX}

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/three-networking-block/init.php b/blocks/three-networking-block/init.php new file mode 100644 index 0000000..dac619f --- /dev/null +++ b/blocks/three-networking-block/init.php @@ -0,0 +1,13 @@ + _x( '3D Networking Block', 'block title', 'three-object-viewer' ), + 'description' => _x( 'A networking block for your environment.', 'block description', 'three-object-viewer' ), + ] ); + } +}); diff --git a/blocks/three-networking-block/style.scss b/blocks/three-networking-block/style.scss new file mode 100644 index 0000000..18f1fcf --- /dev/null +++ b/blocks/three-networking-block/style.scss @@ -0,0 +1,44 @@ +.wp-block-three-object-block { + background-color: #fff; + color: #000; + padding: 2px; +} + +.wp-block-three-object-block { + border: 1px dotted #f00; +} + .glb-preview-container { + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + } + + .glb-preview-container button{ + padding: 10px; + border-radius: 30px; + background-color:#333; + color: white; +} + +.three-object-block-tip { + overflow-wrap: break-word; + background-color: black; + color: white; + padding: 10px; + font-weight: 500; + max-width: 160px; + font-size: 14px; + margin-top: 0px; + margin: 0 auto; + text-align: center; +} + +.glb-preview-container button:hover{ + padding: 10px; + border-radius: 30px; + background-color:rgb(69, 69, 69); + color: white; + cursor: pointer; +} \ No newline at end of file diff --git a/inc/avatars/guest_default_avatar.vrm b/inc/avatars/guest_default_avatar.vrm new file mode 100644 index 0000000000000000000000000000000000000000..fc487716cae8a817eb8263dd527a0b29f5117497 GIT binary patch literal 47848 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 OJ(BvqF literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 50f8ea6..4ae2658 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", - "@pixiv/three-vrm": "2.0.6", + "@lumaai/luma-web": "^0.1.14", + "@pixiv/three-vrm": "2.0.7", "@react-three/a11y": "2.2.4", "@react-three/drei": "9.88.5", "@react-three/fiber": "8.15.4", @@ -68,7 +69,7 @@ "react-scrollable-feed": "^1.3.1", "sass-loader": "^13.2.0", "style-loader": "2.0.0", - "three": "0.151.0", + "three": "0.159.0", "three-icosa": "^0.4.0", "three-omi": "^0.1.5", "tiny-simple-peer": "^10.1.1", diff --git a/php/Plugin.php b/php/Plugin.php index 29c6da8..fabb009 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -40,6 +40,7 @@ function load_three_object_viewer_translations_blocks() { wp_set_script_translations( 'three-object-viewer-sky-block-editor-script', 'three-object-viewer', $language_directory ); wp_set_script_translations( 'three-object-viewer-three-image-block-editor-script', 'three-object-viewer', $language_directory ); wp_set_script_translations( 'three-object-viewer-three-video-block-editor-script', 'three-object-viewer', $language_directory ); + wp_set_script_translations( 'three-object-viewer-three-networking-block-editor-script', 'three-object-viewer', $language_directory ); wp_set_script_translations( 'three-object-viewer-spawn-point-block-editor-script', 'three-object-viewer', $language_directory ); wp_set_script_translations( 'three-object-viewer-environment-editor-script', 'three-object-viewer', $language_directory ); } @@ -403,10 +404,10 @@ function threeobjectviewer_editor_assets() { 'three-object-viewer/npc-block', 'three-object-viewer/three-image-block', 'three-object-viewer/three-video-block', - 'three-object-viewer/spawn-point-block' + 'three-object-viewer/spawn-point-block', + 'three-object-viewer/three-networking-block' ]; - // if in the directory above this one a folder named "pro" exists, add "three-mirror-block" to the array - // use the threeobjectviewer_is_pro function to check if pro + if ($this->threeobjectviewer_is_pro()) { $PRO_BLOCKS = [ 'three-object-viewer/three-mirror-block', diff --git a/pluginMachine.json b/pluginMachine.json index 94b51f8..ea4d399 100644 --- a/pluginMachine.json +++ b/pluginMachine.json @@ -21,7 +21,8 @@ "three-light-block", "three-portal-block", "three-text-block", - "spawn-point-block" + "spawn-point-block", + "three-networking-block" ], "proBlocks": [ "three-mirror-block" @@ -44,6 +45,7 @@ "blocks/three-portal-block/init.php", "blocks/spawn-point-block/init.php", "blocks/three-mirror-block/init.php", + "blocks/three-networking-block/init.php", "admin/three-object-viewer-settings/init.php", "pro/admin/three-object-viewer-pro-settings/init.php" ] diff --git a/three-object-viewer.php b/three-object-viewer.php index 585fef9..2eadce7 100644 --- a/three-object-viewer.php +++ b/three-object-viewer.php @@ -118,9 +118,12 @@ public static function threeov_is_pro() { // Include image include_once dirname( __FILE__ ) . '/blocks/three-image-block/init.php'; -// Include image +// Include video include_once dirname( __FILE__ ) . '/blocks/three-video-block/init.php'; +// Include Networking +include_once dirname( __FILE__ ) . '/blocks/three-networking-block/init.php'; + // Include audio include_once dirname( __FILE__ ) . '/blocks/three-audio-block/init.php'; diff --git a/webpack.config.js b/webpack.config.js index 4792988..e266ff0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -63,7 +63,7 @@ module.exports = { ...defaultConfig.module.rules, { test: /\.js$/, - exclude: /node_modules\/(?!chess\.js)/, + exclude: /node_modules\/(?!chess\.js|@lumaai\/luma-web)/, use: 'babel-loader' }, { diff --git a/yarn.lock b/yarn.lock index e53a43a..3190e41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2454,6 +2454,11 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@lumaai/luma-web@^0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@lumaai/luma-web/-/luma-web-0.1.14.tgz#649f9bb68dc14c36d422fd9694120e1193fb1dde" + integrity sha512-pAAaa8RRA1I1Ou5tsxvpfhJWVNGx1YKMunJ9fhqHS+HLA/IOTf2mvm0V3kKrYb/t3bdlg/kvouB32Lr8Psj0pw== + "@mediapipe/tasks-vision@0.10.2": version "0.10.2" resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.2.tgz#eae193cf4a5c57baf2b235decde288b5152ee433" @@ -2496,93 +2501,93 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pixiv/three-vrm-core@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-core/-/three-vrm-core-2.0.6.tgz#263f2fd71cb2d78a4e2035374d2c47bf41259279" - integrity sha512-sns5rPZqD6WRBmUWA+xoJ0ac2czZMd9m5ayisMCL5h7YQt1AKXG7eyoVLCzD+Ar8qzcwiaTy9HRKPk96iqiijA== +"@pixiv/three-vrm-core@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-core/-/three-vrm-core-2.0.7.tgz#7dd57d0008ee82b6389b47d79b323bc545fd6153" + integrity sha512-5KcOLIQxhCY6W5jOXyUWnIMxkCahTk9TDKTBuxTHmPfalM54IFTBCa0RNEOfV8upJBEWL/J6q/hDTSwZt3QB7A== dependencies: - "@pixiv/types-vrm-0.0" "2.0.6" - "@pixiv/types-vrmc-vrm-1.0" "2.0.6" + "@pixiv/types-vrm-0.0" "2.0.7" + "@pixiv/types-vrmc-vrm-1.0" "2.0.7" -"@pixiv/three-vrm-materials-hdr-emissive-multiplier@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-hdr-emissive-multiplier/-/three-vrm-materials-hdr-emissive-multiplier-2.0.6.tgz#904c1d4f574d5e814508eff47686051fa6c4d398" - integrity sha512-5uQ9F/aB0SVUZejFaje1o6+/vzuGcAJSgLKR3bTneioG85NELEFL1jaDqyyRP+BCN2gFcg5hx/m/SCdJiMdfuA== +"@pixiv/three-vrm-materials-hdr-emissive-multiplier@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-hdr-emissive-multiplier/-/three-vrm-materials-hdr-emissive-multiplier-2.0.7.tgz#db833bc12d09f5667428b01d0a99495bd215d4e9" + integrity sha512-3dgSdOzHZWKLq1MJTR0PKGyxPRIHazKtwMJMQb2V58/LbW6O8d5MYOSsY6tMxA3MrE8zmoqXSss/P1Adg3yoAQ== dependencies: - "@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0" "2.0.6" + "@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0" "2.0.7" -"@pixiv/three-vrm-materials-mtoon@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-mtoon/-/three-vrm-materials-mtoon-2.0.6.tgz#f637e5b1ba6f23b4ab46566cac610ffd6f490e7b" - integrity sha512-zxQ+MWxi+JdK3jaqqWR530NV2uDPuOyO7W/ndfGEfsMHBrZecynXhfPf7GrQp8wq6MWZE5sOspLqpwp6jzk6aw== +"@pixiv/three-vrm-materials-mtoon@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-mtoon/-/three-vrm-materials-mtoon-2.0.7.tgz#dd5ef2f8a0faef5e6b8b36ef86100df2959563c8" + integrity sha512-bY2JOXFBxiVz9kh+o7K/tqD8Ulr8alh40Gzi6g+sstLuwUKRRiXDySc1mXG1kEyxqZ3Mk5Ez1jpFWYakLVA6pA== dependencies: - "@pixiv/types-vrm-0.0" "2.0.6" - "@pixiv/types-vrmc-materials-mtoon-1.0" "2.0.6" + "@pixiv/types-vrm-0.0" "2.0.7" + "@pixiv/types-vrmc-materials-mtoon-1.0" "2.0.7" -"@pixiv/three-vrm-materials-v0compat@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-v0compat/-/three-vrm-materials-v0compat-2.0.6.tgz#bdfd4f46be016216f5f9e9ff1794d4de54752590" - integrity sha512-w0JPT0k/FUwe47Ok4NR6qsMFiODG4Nn+oqNLHb4bXqMeZrW5VtfaG3Ik28HGRuGMCF9NQ+pUWXNUzaSnu+7Vow== +"@pixiv/three-vrm-materials-v0compat@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-materials-v0compat/-/three-vrm-materials-v0compat-2.0.7.tgz#2f813362532a971bf0b8281f9ec7e9dd606979e0" + integrity sha512-0bHI97dAcPi5yy3BNXsmw6nAWBejPf3TSFlCW4EccS2ca2DXLfsP1AkIkpzN0DfkxrSmvLTqSQprQtgndybGUQ== dependencies: - "@pixiv/types-vrm-0.0" "2.0.6" - "@pixiv/types-vrmc-materials-mtoon-1.0" "2.0.6" + "@pixiv/types-vrm-0.0" "2.0.7" + "@pixiv/types-vrmc-materials-mtoon-1.0" "2.0.7" -"@pixiv/three-vrm-node-constraint@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-node-constraint/-/three-vrm-node-constraint-2.0.6.tgz#32c734c81ad4d7fc10c06940a055032a0e246ff1" - integrity sha512-KsO8QerqSOfCBxyndEzjsQzvhaxon8ji0t7wyvXNL2L1oAdxdTtfF8hlZvgUHSFfAbRCeltMluIICyGzq5yavg== +"@pixiv/three-vrm-node-constraint@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-node-constraint/-/three-vrm-node-constraint-2.0.7.tgz#519763bfaf4a7fe19785e55864d7b31195801cf5" + integrity sha512-QGrCjz+AvWrYEZAvZkHWAa8g70eLMGK/g/FWOoAEV/itP89y1+QgoSqffaJpmwGv5I4rvHoCfNv5DjfyhvdzFg== dependencies: - "@pixiv/types-vrmc-node-constraint-1.0" "2.0.6" + "@pixiv/types-vrmc-node-constraint-1.0" "2.0.7" -"@pixiv/three-vrm-springbone@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-springbone/-/three-vrm-springbone-2.0.6.tgz#fee59d5c512f9a35f327a45579136634d3b734c2" - integrity sha512-LLLzcc8WLHdBxJbqovqKo4thxWoBAGM1oTjhWazHP6/wl2LctQyR44TA5+Om+MMN/LvYwquhc80m57/45PJHmA== +"@pixiv/three-vrm-springbone@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm-springbone/-/three-vrm-springbone-2.0.7.tgz#2320526c46ae1bbb6c197d91fc1ca90f7f5d4843" + integrity sha512-r4Bws22Tlt6QH3NDRRhwi9dxYcvhzagSN3xW9qKvoCsdoS8OUdpUDbKzQeAhBV+58Sk0ZIwE2250zlF6tLneWA== dependencies: - "@pixiv/types-vrm-0.0" "2.0.6" - "@pixiv/types-vrmc-springbone-1.0" "2.0.6" + "@pixiv/types-vrm-0.0" "2.0.7" + "@pixiv/types-vrmc-springbone-1.0" "2.0.7" -"@pixiv/three-vrm@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/three-vrm/-/three-vrm-2.0.6.tgz#c16d5e31431c5a778053220a809082140f1ec971" - integrity sha512-eKHoo1pM92f8rzhLmOgQiWCl/GcUHWSlNLo15KvZSLyI3DyN/0zitWjaXqqLnuJZyYYNtoQh1ERdDKposyePLw== +"@pixiv/three-vrm@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/three-vrm/-/three-vrm-2.0.7.tgz#57c038b7eadc644961e8e12ea12cd8dc8aa53e2c" + integrity sha512-P5DZvuKNDaUkfPvQIZnNGqEqw3p1cM2Xlp3LL+oZaR8xYzoA9vtPeFKpxdESlk1m5PkPyNVZ/bCeweEyJ6+yZw== dependencies: - "@pixiv/three-vrm-core" "2.0.6" - "@pixiv/three-vrm-materials-hdr-emissive-multiplier" "2.0.6" - "@pixiv/three-vrm-materials-mtoon" "2.0.6" - "@pixiv/three-vrm-materials-v0compat" "2.0.6" - "@pixiv/three-vrm-node-constraint" "2.0.6" - "@pixiv/three-vrm-springbone" "2.0.6" + "@pixiv/three-vrm-core" "2.0.7" + "@pixiv/three-vrm-materials-hdr-emissive-multiplier" "2.0.7" + "@pixiv/three-vrm-materials-mtoon" "2.0.7" + "@pixiv/three-vrm-materials-v0compat" "2.0.7" + "@pixiv/three-vrm-node-constraint" "2.0.7" + "@pixiv/three-vrm-springbone" "2.0.7" -"@pixiv/types-vrm-0.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrm-0.0/-/types-vrm-0.0-2.0.6.tgz#e6957013faf0187e7bcb8fc8ad8e9f7807057396" - integrity sha512-UoaKDwt5VFC3adRfCHYty4CiSCP7aCe2asPmmpR2qDrOtDM+Uuuai1bL78QPy4r7eTEQIh1n0MVIAYUKh+6tPg== +"@pixiv/types-vrm-0.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrm-0.0/-/types-vrm-0.0-2.0.7.tgz#ad8105a0abf2d2cbdd2d633e54fde99c522d207a" + integrity sha512-qOhzqXMtlg1lbhKZmmL1XZ3cMqXZftOh7Qb4vC1pOgndlAIiFsYCcD+uJfiVZddsl2q/eZMnrhwK+In+7btlOw== -"@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0/-/types-vrmc-materials-hdr-emissive-multiplier-1.0-2.0.6.tgz#313f7fd9a879f042df620cfab83677ff93405d5e" - integrity sha512-S8J0qbW5jMyGlEL/UqSbInIGqWeHrszZrCh9JS9d8R5T/TJOFHqb0RSTickV6+3hLWwt0AZ34uE31RpERd+tdA== +"@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-materials-hdr-emissive-multiplier-1.0/-/types-vrmc-materials-hdr-emissive-multiplier-1.0-2.0.7.tgz#d22a5a6b60ddbc3ca421ef0ce8edb097b4522105" + integrity sha512-+HsvVL7MsDaIR9wfqBE54HceBkapT3D06RL0QuUlEJPTFXxN0Lk/Iy/IN7SofF9nv4Y1C+VG/GdMS8VTTOI2Lw== -"@pixiv/types-vrmc-materials-mtoon-1.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-materials-mtoon-1.0/-/types-vrmc-materials-mtoon-1.0-2.0.6.tgz#ef2493ea7251792f910bcfa59e499af54436eb19" - integrity sha512-iT7IpHYLD9oGcQKbuQy7wnNPnz+dJDTRooYRpDGNtDumfHaZukANUsdsJzuk8u+Vfn8L+S6dpdf++vYhVFXwbg== +"@pixiv/types-vrmc-materials-mtoon-1.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-materials-mtoon-1.0/-/types-vrmc-materials-mtoon-1.0-2.0.7.tgz#8b547b9f466a3d378c7984309aea970ef587efc6" + integrity sha512-hwcsmkpFK2KsXLwPADUxvjcF3fSZcUiiNlohZMnMKncrr+un1bOA8BlzlsVqLYaBd+zKdPsq11o2huhSZC7bDQ== -"@pixiv/types-vrmc-node-constraint-1.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-node-constraint-1.0/-/types-vrmc-node-constraint-1.0-2.0.6.tgz#ba76c3f1be1ab732bc6a437c1ecd874a15d0bacd" - integrity sha512-7U90NShC8zlVDEguF4eTcRvXwzBQPp7Bt2kRdTnhGfGpa+7x8wrNLrH57GPrRLveQ1rTyi8s7/VJgJ1f0GFAzQ== +"@pixiv/types-vrmc-node-constraint-1.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-node-constraint-1.0/-/types-vrmc-node-constraint-1.0-2.0.7.tgz#6390b8e5358a627ea7af099baef539b6ca7ae4e1" + integrity sha512-xAG9HuNUNDb+tIfsa6nOFhv5NmADa3QIPrcckzhT7/eJQSxiAi1Y01DkKsWMAyGIxcGEf1H1PHE/H4NZTHyKwg== -"@pixiv/types-vrmc-springbone-1.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-springbone-1.0/-/types-vrmc-springbone-1.0-2.0.6.tgz#9189c7277c4aec73d52ff63ecf325bd1c2fc102b" - integrity sha512-Jhxmy/iiM1y4PcY+d6OkxJU0stqxNXvSOuYg8b4ob0Fayxzu9YOfcbsurRngFXRBcGtxjqxYPqhv7wpoPAFn1Q== +"@pixiv/types-vrmc-springbone-1.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-springbone-1.0/-/types-vrmc-springbone-1.0-2.0.7.tgz#e064b16017234cb054a674464ef85a3bfb1c187f" + integrity sha512-FTjeLweUcFhTc/dQzRu8rqky13+fwGbSkLufw42Jme5/eu+4RGcP+dibaDS3WeWdVjGmDVjo1yiCtYgvdAM+RA== -"@pixiv/types-vrmc-vrm-1.0@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-vrm-1.0/-/types-vrmc-vrm-1.0-2.0.6.tgz#d6ed069d7a44049aaa247dfcddfade42fa75df63" - integrity sha512-UxICt1wUPrEV9OwMnGlmRUS44XDN5gG5cP3NSYqIxab8i53eJBRhVjEN2B/UbD3rDC84R1m7k5ZnBCVPb43bUg== +"@pixiv/types-vrmc-vrm-1.0@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@pixiv/types-vrmc-vrm-1.0/-/types-vrmc-vrm-1.0-2.0.7.tgz#5e19ba94aae983de4d14aabbfa792f20e8dcf473" + integrity sha512-87hbARpelS/NvLfrDa5gwTvBvDypVSU+Z7sG4pIxUMsm6OjFMp4jyIeKAgT9lurJ+0o9MUR2PS2ors95LdYyIA== "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" @@ -17455,10 +17460,10 @@ three@*: resolved "https://registry.yarnpkg.com/three/-/three-0.145.0.tgz#a613d71e75effc2aed88be630027ca01e2b6502e" integrity sha512-EKoHQEtEJ4CB6b2BGMBgLZrfwLjXcSUfoI/MiIXUuRpeYsfK5aPWbYhdtIVWOH+x6X0TouldHKHBuc/LAiFzAw== -three@0.151.0: - version "0.151.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.151.0.tgz#05b21fe1d97448916942b31658865b6adc666b48" - integrity sha512-ZvjJbNhZ/t0L8I36tc1I1ZP9j1q42ANE9WTlR+P3lZfOzlSfNa5VfR1rZRHNyjn/ZPP4kU7xGI1v8QSJOpxE4w== +three@0.159.0: + version "0.159.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.159.0.tgz#6576b1210805b14f0765bac41fd0e4ec18e43b2e" + integrity sha512-eCmhlLGbBgucuo4VEA9IO3Qpc7dh8Bd4VKzr7WfW4+8hMcIfoAVi1ev0pJYN9PTTsCslbcKgBwr2wNZ1EvLInA== throat@^5.0.0: version "5.0.0" From 9e6c9f3b202b6e1d7b39d2055c5ab68027bc29bb Mon Sep 17 00:00:00 2001 From: antpb Date: Wed, 20 Dec 2023 12:03:54 -0600 Subject: [PATCH 04/43] working animations for 2 player --- .../components/EnvironmentFront.js | 121 ++++++++++-------- blocks/environment/components/Player.js | 34 +++-- 2 files changed, 93 insertions(+), 62 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 408f531..5d87c92 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -482,8 +482,9 @@ function loadMixamoAnimation(url, vrm) { function Participant(participant) { const fallbackURL = threeObjectPlugin + defaultVRM; const playerURL = userData.vrm ? userData.vrm : fallbackURL; - const clonedModelRef = useRef(null); // Ref for the cloned model - + const clonedModelRef = useRef(null); // Ref for the cloned model + const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant + const animationsRef = useRef(null); // Ref to store animations const [someVRM, setSomeVRM] = useState(null); const theScene = useThree(); const mixers = useRef([]); @@ -544,56 +545,70 @@ function Participant(participant) { const idleFile = threeObjectPlugin + idle; const walkingFile = threeObjectPlugin + walk; const runningFile = threeObjectPlugin + run; - if(modelClone?.isObject3D){ - // Load animations - let animationFiles = [idleFile, walkingFile, runningFile]; - let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); - - // Clone the model - const clonedModel = SkeletonUtils.clone(modelClone); - clonedModel.userData.vrm = clonedModel; - - // Create animation mixer for the cloned model - const newMixer = new THREE.AnimationMixer(clonedModel); - mixers.current.push(newMixer); - - Promise.all(animationsPromises).then(animations => { - const idleAction = newMixer.clipAction(animations[0]); - const walkingAction = newMixer.clipAction(animations[1]); - const runningAction = newMixer.clipAction(animations[2]); - console.log("newMixer", newMixer, idleAction, walkingAction, runningAction); - idleAction.timeScale = 1; - idleAction.play(); - }); - let isProfileFetched = false; // flag to check if profile has been fetched - - participant.p2pcf.on("msg", (peer, data) => { - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); - const participantObject = theScene.scene.getObjectByName(peer.client_id); - if (!isProfileFetched) { - isProfileFetched = true; // set the flag to true after first fetch - - setTimeout(() => { - if( modelClone.isObject3D ){ - fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) - .then((response) => { - // handle the response here if needed - }) - .catch((err) => { - // Handle the error here if needed - }); - } - }, 1000); - } - if (participantObject) { - participantObject.position.fromArray(participantData[peer.client_id][0].position); - participantObject.rotation.fromArray(participantData[peer.client_id][1].rotation); - + // Load animations + let animationFiles = [idleFile, walkingFile, runningFile]; + let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); + + // Clone the model + // const clonedModel = SkeletonUtils.clone(playerController.scene); + // clonedModel.userData.vrm = clonedModel; + + // Create animation mixer for the cloned model + const newMixer = new THREE.AnimationMixer(playerController.scene); + animationMixerRef.current = newMixer; + mixers.current.push(animationMixerRef.current); + + Promise.all(animationsPromises).then(animations => { + animationsRef.current = animations; // Store animations in ref + + const idleAction = animationMixerRef.current.clipAction(animations[0]); + const walkingAction = animationMixerRef.current.clipAction(animations[1]); + const runningAction = animationMixerRef.current.clipAction(animations[2]); + console.log("animationmixer", animationMixerRef.current, idleAction, walkingAction, runningAction); + idleAction.timeScale = 1; + idleAction.play(); + }); + let isProfileFetched = false; // flag to check if profile has been fetched + + participant.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); + const participantObject = theScene.scene.getObjectByName(peer.client_id); + if (!isProfileFetched) { + isProfileFetched = true; // set the flag to true after first fetch + + // setTimeout(() => { + // if( modelClone.isObject3D ){ + // fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) + // .then((response) => { + // // handle the response here if needed + // }) + // .catch((err) => { + // // Handle the error here if needed + // }); + // } + // }, 1000); + } + if (participantObject) { + if (animationsRef.current) { + const walkAction = animationMixerRef.current.clipAction(animationsRef.current[1]); // Walking animation + const idleAction = animationMixerRef.current.clipAction(animationsRef.current[0]); // Idle animation + + if (participantData[peer.client_id].isMoving) { + walkAction.play(); + idleAction.stop(); + } else { + idleAction.play(); + walkAction.stop(); + } } - }); - } + if(participantData[peer.client_id]?.position){ + participantObject.position.fromArray(participantData[peer.client_id].position); + participantObject.rotation.fromArray(participantData[peer.client_id].rotation); + } + } + }); return () => { // Cleanup function to stop and dispose mixers mixers.current.forEach(mixer => mixer.stopAllAction()); @@ -614,7 +629,7 @@ function Participant(participant) { if (idleAction && !idleAction.isRunning()) { idleAction.reset().play(); } - + // Update the mixer mixer.update(delta); }); @@ -636,7 +651,7 @@ function Participant(participant) { modelClone.userData.vrm = playerController; return ( - + ); } diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 34698d3..ef0061f 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -364,12 +364,14 @@ export default function Player(props) { let cameraTargetPosition = new Vector3(); + const movementTimeoutRef = useRef(null); // frame loop useFrame((state, delta) => { handleBlinking(delta); let isMoving = false; + const currentTime = state.clock.elapsedTime; const timeSinceLastUpdate = currentTime - lastUpdateTime; let rigidBodyPosition = [0, 0, 0] @@ -506,7 +508,7 @@ export default function Player(props) { if (animationsRef.current) { const { idle, walking, running } = animationsRef.current; - if (isMoving) { + if (isMoving) { // If moving, but idle animation is playing, stop it and play walking animation // if (idle.isRunning()) { // blend from idle to walking @@ -546,6 +548,7 @@ export default function Player(props) { //if moving, send a network event of where we are and our current state....animations probably need to go here too. if (p2pcf) { + var target = new Vector3(); // create once an reuse it var worldPosition = participantObject.getWorldPosition( target ); const position = [ @@ -560,14 +563,27 @@ export default function Player(props) { participantObject.rotation.y, participantObject.rotation.z ]; - const message = - `{ "${p2pcf.clientId}": [{ "position" : [` + - position + - `]},{ "rotation" : [` + - rotation + - `]},{ "profileImage" : ["` + - userData.profileImage + - `"]}]}`; + const messageObject = { + [p2pcf.clientId]: { + position: position, + rotation: rotation, + profileImage: userData.profileImage, + isMoving: true + } + }; + clearTimeout(movementTimeoutRef.current); + movementTimeoutRef.current = setTimeout(() => { + // Send "isMoving: false" message here + const messageStopObject = { + [p2pcf.clientId]: { + isMoving: false + } + }; + const messageStop = JSON.stringify(messageStopObject); + p2pcf.broadcast(new TextEncoder().encode(messageStop)); + }, 100); + + const message = JSON.stringify(messageObject); p2pcf.broadcast(new TextEncoder().encode(message)); } From 78f54a532568e6a46c8fe199cea602306990814b Mon Sep 17 00:00:00 2001 From: antpb Date: Sat, 23 Dec 2023 23:03:23 -0600 Subject: [PATCH 05/43] adds user data for profile vrm and stable nameplates --- .../components/EnvironmentFront.js | 294 +++++++++++++----- blocks/environment/components/Networking.js | 66 ++-- blocks/environment/components/Player.js | 10 +- blocks/environment/editor.scss | 37 ++- blocks/environment/frontend.js | 6 +- php/Plugin.php | 74 ++++- 6 files changed, 358 insertions(+), 129 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 5d87c92..d5fea3b 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -14,8 +14,9 @@ import axios from "axios"; import ReactNipple from 'react-nipple'; import ScrollableFeed from 'react-scrollable-feed' import { Resizable } from "re-resizable"; -import { Environment, useContextBridge } from "@react-three/drei"; +import { Environment, useContextBridge, Text, Billboard } from "@react-three/drei"; import { FrontPluginProvider, FrontPluginContext } from './FrontPluginProvider'; // Import the PluginProvider +import Networking from "./Networking"; import { LumaSplatsThree } from "@lumaai/luma-web"; // Make LumaSplatsThree available to R3F extend( { LumaSplats: LumaSplatsThree } ); @@ -480,27 +481,27 @@ function loadMixamoAnimation(url, vrm) { * @return {JSX.Element} The participant. */ function Participant(participant) { - const fallbackURL = threeObjectPlugin + defaultVRM; - const playerURL = userData.vrm ? userData.vrm : fallbackURL; + const fallbackURL = threeObjectPlugin + defaultVRM; + const playerURL = userData.vrm ? userData.vrm : fallbackURL; const clonedModelRef = useRef(null); // Ref for the cloned model - const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant + const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant const animationsRef = useRef(null); // Ref to store animations - const [someVRM, setSomeVRM] = useState(null); - const theScene = useThree(); - const mixers = useRef([]); - - // Load the VRM model - useEffect(() => { - const loader = new GLTFLoader(); - loader.register(parser => new VRMLoaderPlugin(parser)); - loader.load(playerURL, gltf => { - setSomeVRM(gltf); - }); - }, [playerURL]); - - useEffect(() => { - if (someVRM?.userData?.gltfExtensions?.VRM) { - const playerController = someVRM.userData.vrm; + const [someVRM, setSomeVRM] = useState(null); + const theScene = useThree(); + const mixers = useRef([]); + const displayNameTextRef = useRef(null); + // Load the VRM model + useEffect(() => { + const loader = new GLTFLoader(); + loader.register(parser => new VRMLoaderPlugin(parser)); + loader.load(playerURL, gltf => { + setSomeVRM(gltf); + }); + }, [playerURL]); + + useEffect(() => { + if (someVRM?.userData?.gltfExtensions?.VRM) { + const playerController = someVRM.userData.vrm; const fetchProfile = async (pfp, modelToModify) => { console.log("modelToModify", modelToModify); @@ -521,7 +522,7 @@ function Participant(participant) { const newMat = obj.material.clone(); newMat.map = loadedProfile; newMat.map.needsUpdate = true; - newMat.needsUpdate = true; // Update material + newMat.needsUpdate = true; obj.material = newMat; } }); @@ -535,16 +536,47 @@ function Participant(participant) { // throw err; } }; - - VRMUtils.rotateVRM0(playerController); - playerController.scene.rotation.y = 0; - playerController.scene.scale.set(1, 1, 1); + const fetchProfilePlane = async (pfp, modelToModify) => { + console.log("fetchProfilePlane", pfp); - // Animation files - const idleFile = threeObjectPlugin + idle; - const walkingFile = threeObjectPlugin + walk; - const runningFile = threeObjectPlugin + run; + try { + const response = await fetch(pfp); + console.log("fetch in plane try", pfp, response); + if (response.status === 200) { + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed + textureLoader.load(pfp, (loadedProfile) => { + // Now we are sure the texture is loaded + if(modelToModify.isObject3D){ + modelToModify.frustumCulled = false; + console.log("traversed", modelToModify); + const newMat = modelToModify.material.clone(); + newMat.map = loadedProfile; + newMat.map.needsUpdate = true; + newMat.needsUpdate = true; + modelToModify.material = newMat; + } + } + ); + return response; + } + } catch (err) { + // Handle the error properly or rethrow it to be caught elsewhere. + // console.error("Error fetching profile:", err); + // throw err; + } + }; + + VRMUtils.rotateVRM0(playerController); + playerController.scene.rotation.y = 0; + playerController.scene.scale.set(1, 1, 1); + + + // Animation files + const idleFile = threeObjectPlugin + idle; + const walkingFile = threeObjectPlugin + walk; + const runningFile = threeObjectPlugin + run; // Load animations let animationFiles = [idleFile, walkingFile, runningFile]; let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); @@ -569,15 +601,14 @@ function Participant(participant) { idleAction.play(); }); let isProfileFetched = false; // flag to check if profile has been fetched - - participant.p2pcf.on("msg", (peer, data) => { + window.p2pcf.on("msg", (peer, data) => { const finalData = new TextDecoder("utf-8").decode(data); const participantData = JSON.parse(finalData); // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); const participantObject = theScene.scene.getObjectByName(peer.client_id); + // console.log(participantData[peer.client_id].vrm); if (!isProfileFetched) { isProfileFetched = true; // set the flag to true after first fetch - // setTimeout(() => { // if( modelClone.isObject3D ){ // fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) @@ -589,7 +620,34 @@ function Participant(participant) { // }); // } // }, 1000); - } + setTimeout(() => { + if( modelClone.isObject3D ){ + const displayNamePfp = participantObject.parent.parent.getObjectByName("displayNamePfp"); + // console.log(participantData[peer.client_id]); + // fetch profile image and apply it to the material + fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) + .then((response) => { + // handle the response here if needed + }) + .catch((err) => { + // Handle the error here if needed + }); + } + }, 1000); + setTimeout(() => { + if( modelClone.isObject3D ){ + console.log("timeout finished here is", participantData[peer.client_id]); + // fetch profile image and apply it to the material + // fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) + // .then((response) => { + // // handle the response here if needed + // }) + // .catch((err) => { + // // Handle the error here if needed + // }); + } + }, 1000); + } if (participantObject) { if (animationsRef.current) { const walkAction = animationMixerRef.current.clipAction(animationsRef.current[1]); // Walking animation @@ -604,18 +662,32 @@ function Participant(participant) { } } if(participantData[peer.client_id]?.position){ - participantObject.position.fromArray(participantData[peer.client_id].position); - participantObject.rotation.fromArray(participantData[peer.client_id].rotation); + participantObject.parent.position.fromArray(participantData[peer.client_id].position); + participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + } + if(participantData[peer.client_id]?.inWorldName && participantData[peer.client_id]?.inWorldName !== displayNameTextRef.current.text){ + console.log("should only hit once", participantData[peer.client_id]); + // if the name is long make the background longer + if(participantData[peer.client_id].inWorldName.length > 8){ + const displayNameBackground = participantObject.parent.parent.getObjectByName("displayNameBackground"); + displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); + displayNameBackground.position.x = -0.005; + if(participantData[peer.client_id].inWorldName.length > 18){ + displayNameTextRef.current.fontSize = 0.028; + } + } + displayNameTextRef.current.text = participantData[peer.client_id].inWorldName; + displayNameTextRef.current.textAlign = "left"; } } }); - return () => { - // Cleanup function to stop and dispose mixers - mixers.current.forEach(mixer => mixer.stopAllAction()); - mixers.current = []; - }; - } - }, [someVRM, theScene, participant.p2pcf]); + return () => { + // Cleanup function to stop and dispose mixers + mixers.current.forEach(mixer => mixer.stopAllAction()); + mixers.current = []; + }; + } + }, [someVRM, theScene, participant.p2pcf]); useFrame((state, delta) => { mixers.current.forEach(mixer => { @@ -642,44 +714,94 @@ function Participant(participant) { } }); - if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { - return null; - } + if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { + return null; + } + + const playerController = someVRM.userData.vrm; + const modelClone = SkeletonUtils.clone(playerController.scene); + modelClone.userData.vrm = playerController; - const playerController = someVRM.userData.vrm; - const modelClone = SkeletonUtils.clone(playerController.scene); - modelClone.userData.vrm = playerController; + //calculate the height of the avatar to be used in the Text component position below + const box = new THREE.Box3().setFromObject(modelClone); + const height = (box.max.y - box.min.y) + 0.1; + console.log("height", height); - return ( - - ); + return ( + + + + + + + + + + {participant.name} + + + + + ); } function Participants(props) { - useEffect(() => { - const p2pcf = window.p2pcf; - if (p2pcf) { - p2pcf.on("peerconnect", (peer) => { - props.setParticipant(prevParticipants => { - if (!prevParticipants.includes(peer.client_id)) { - return [...prevParticipants, peer.client_id]; - } else { - return prevParticipants; - } - }); - }); - } - }, []); - - return ( - <> - {props.participants && props.participants.map((item, index) => ( - - ))} - - ); + useEffect(() => { + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerconnect", (peer) => { + // emit the peer id to all other peers + props.setParticipant(prevParticipants => { + if (!prevParticipants.includes(peer.client_id)) { + return [...prevParticipants, peer.client_id]; + } else { + return prevParticipants; + } + }); + }); + } + }, []); + + return ( + <> + {props.participants && props.participants.map((item, index) => ( + + ))} + + ); } + + // function Participant(participant) { // const fallbackURL = threeObjectPlugin + defaultVRM; // const playerURL = userData.vrm ? userData.vrm : fallbackURL; @@ -976,8 +1098,8 @@ function SavedObject(props) { export default function EnvironmentFront(props) { const [participants, setParticipant] = useState([]); - const [showUI, setShowUI] = useState(true); + const [displayName, setDisplayName] = useState(props.userData.inWorldName); const canvasRef = useRef(null); // let string = '{\"spell\":\"complexQuery\",\"outputs\":{\"Output\":\"{\\\"message\\\": \\\" Hi there! How can I help you?\\\",\\\"tone\\\": \\\"friendly\\\"}\"},\"state\":{}}'; @@ -996,12 +1118,17 @@ export default function EnvironmentFront(props) { const [url, setURL] = useState(props.threeUrl ? props.threeUrl : (threeObjectPlugin + defaultEnvironment)); if (loaded === true) { + // emit javascript event "loaded" + const event = new Event("loaded"); + window.dispatchEvent(event); const elements = document.body.getElementsByTagName('*'); const webXRNotAvail = Array.from(elements).find((el) => el.textContent === 'WEBXR NOT AVAILABLE'); if (webXRNotAvail) { webXRNotAvail.style.display = "none"; } - + props.userData.inWorldName = displayName; + window.userData = props.userData; + if (props.deviceTarget === "vr") { return ( <> @@ -1058,6 +1185,7 @@ export default function EnvironmentFront(props) { spawnPointsToAdd={spawnPoints} spawnPoint={props.spawnPoint} setShowUI={setShowUI} + p2pcf={window.p2pcf} defaultAvatar={defaultAvatar} movement={movement} /> @@ -2390,19 +2518,25 @@ export default function EnvironmentFront(props) { width: "100%", padding: "0", alignItems: "center", - justifyContent: "center" + justifyContent: "center", + display: "flex", }} >
+ { ( props.networkingBlock.length > 0 ) && ( +
+ Display Name + setDisplayName(e.target.value)} /> +
+ )}
@@ -142,6 +141,7 @@ threeApp.forEach((threeApp) => { userData={userData} postSlug={postSlug} defaultAvatarAnimation={defaultAvatarAnimation} + networkingBlock={networkingBlock} modelsToAdd={modelsToAdd} portalsToAdd={portalsToAdd} imagesToAdd={imagesToAdd} diff --git a/php/Plugin.php b/php/Plugin.php index fabb009..cb4c3dd 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -20,8 +20,59 @@ public function init() { add_action( 'enqueue_block_editor_assets', array( $this, 'load_three_object_viewer_translations_blocks' ) ); add_action( 'init', array( $this, 'load_three_object_viewer_textdomain' ) ); + // Add new actions for user profile fields and saving + add_action('show_user_profile', array($this, 'add_custom_user_profile_fields')); + add_action('edit_user_profile', array($this, 'add_custom_user_profile_fields')); + add_action('personal_options_update', array($this, 'save_custom_user_profile_fields')); + add_action('edit_user_profile_update', array($this, 'save_custom_user_profile_fields')); + } + // New function to add custom field to user profiles + public function add_custom_user_profile_fields($user) { + ?> +

+ + + + + +
+ + + + +

+
+ + avatar); - $vrm = get_option('3ov_defaultAvatar'); + $current_user = wp_get_current_user(); + $vrm = get_user_meta($current_user->ID, 'user_data_vrm', true) ?: get_option('3ov_defaultAvatar'); + // $vrm = get_option('3ov_defaultAvatar'); + $inWorldName = "Guest"; if ( is_user_logged_in() && get_option('3ov_ai_allow') === "loggedIn" ) { + if($current_user->display_name){ + $inWorldName = $current_user->display_name; + } $user_data_passed = array( 'userId' => $current_user->user_login, - 'inWorldName' => $current_user->in_world_name, + 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ) ); } else if ( get_option('3ov_ai_allow') === "public") { + if($current_user->display_name){ + $inWorldName = $current_user->display_name; + } $user_data_passed = array( 'userId' => $current_user->user_login, - 'inWorldName' => $current_user->in_world_name, + 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), @@ -167,9 +226,12 @@ function threeobjectviewer_frontend_assets() { ); } else { + if($current_user->display_name){ + $inWorldName = $current_user->display_name; + } $user_data_passed = array( 'userId' => $current_user->user_login, - 'inWorldName' => $current_user->in_world_name, + 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), @@ -426,4 +488,4 @@ function threeobjectviewer_editor_assets() { wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'allowed_blocks', $ALLOWED_BLOCKS ); } - } +} From ead30101dc523e38a44fc7f5e42adb2527c13361 Mon Sep 17 00:00:00 2001 From: antpb Date: Thu, 28 Dec 2023 17:24:08 -0600 Subject: [PATCH 06/43] working instanced animations --- .../components/EnvironmentFront.js | 516 ++++++++++++++---- blocks/environment/components/Player.js | 2 +- 2 files changed, 406 insertions(+), 112 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index d5fea3b..e4092c9 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -484,11 +484,11 @@ function Participant(participant) { const fallbackURL = threeObjectPlugin + defaultVRM; const playerURL = userData.vrm ? userData.vrm : fallbackURL; const clonedModelRef = useRef(null); // Ref for the cloned model - const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant - const animationsRef = useRef(null); // Ref to store animations + const animationMixerRef = participant.animationMixerRef; // Ref for the animation mixer of this participant + const animationsRef = participant.animationsRef; // Ref to store animations + const mixers = participant.mixers; const [someVRM, setSomeVRM] = useState(null); const theScene = useThree(); - const mixers = useRef([]); const displayNameTextRef = useRef(null); // Load the VRM model useEffect(() => { @@ -587,124 +587,47 @@ function Participant(participant) { // Create animation mixer for the cloned model const newMixer = new THREE.AnimationMixer(playerController.scene); - animationMixerRef.current = newMixer; - mixers.current.push(animationMixerRef.current); + animationMixerRef.current[participant.name] = newMixer; + console.log("heres the current mixers", animationMixerRef.current[participant.name]); + mixers.current[participant.name] = animationMixerRef.current[participant.name]; Promise.all(animationsPromises).then(animations => { - animationsRef.current = animations; // Store animations in ref + animationsRef.current[participant.name] = animations; // Store animations in ref - const idleAction = animationMixerRef.current.clipAction(animations[0]); - const walkingAction = animationMixerRef.current.clipAction(animations[1]); - const runningAction = animationMixerRef.current.clipAction(animations[2]); - console.log("animationmixer", animationMixerRef.current, idleAction, walkingAction, runningAction); + const idleAction = animationMixerRef.current[participant.name].clipAction(animations[0]); + const walkingAction = animationMixerRef.current[participant.name].clipAction(animations[1]); + const runningAction = animationMixerRef.current[participant.name].clipAction(animations[2]); + console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); idleAction.timeScale = 1; idleAction.play(); }); let isProfileFetched = false; // flag to check if profile has been fetched - window.p2pcf.on("msg", (peer, data) => { - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); - const participantObject = theScene.scene.getObjectByName(peer.client_id); - // console.log(participantData[peer.client_id].vrm); - if (!isProfileFetched) { - isProfileFetched = true; // set the flag to true after first fetch - // setTimeout(() => { - // if( modelClone.isObject3D ){ - // fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) - // .then((response) => { - // // handle the response here if needed - // }) - // .catch((err) => { - // // Handle the error here if needed - // }); - // } - // }, 1000); - setTimeout(() => { - if( modelClone.isObject3D ){ - const displayNamePfp = participantObject.parent.parent.getObjectByName("displayNamePfp"); - // console.log(participantData[peer.client_id]); - // fetch profile image and apply it to the material - fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) - .then((response) => { - // handle the response here if needed - }) - .catch((err) => { - // Handle the error here if needed - }); - } - }, 1000); - setTimeout(() => { - if( modelClone.isObject3D ){ - console.log("timeout finished here is", participantData[peer.client_id]); - // fetch profile image and apply it to the material - // fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) - // .then((response) => { - // // handle the response here if needed - // }) - // .catch((err) => { - // // Handle the error here if needed - // }); - } - }, 1000); - } - if (participantObject) { - if (animationsRef.current) { - const walkAction = animationMixerRef.current.clipAction(animationsRef.current[1]); // Walking animation - const idleAction = animationMixerRef.current.clipAction(animationsRef.current[0]); // Idle animation - - if (participantData[peer.client_id].isMoving) { - walkAction.play(); - idleAction.stop(); - } else { - idleAction.play(); - walkAction.stop(); - } - } - if(participantData[peer.client_id]?.position){ - participantObject.parent.position.fromArray(participantData[peer.client_id].position); - participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); - } - if(participantData[peer.client_id]?.inWorldName && participantData[peer.client_id]?.inWorldName !== displayNameTextRef.current.text){ - console.log("should only hit once", participantData[peer.client_id]); - // if the name is long make the background longer - if(participantData[peer.client_id].inWorldName.length > 8){ - const displayNameBackground = participantObject.parent.parent.getObjectByName("displayNameBackground"); - displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); - displayNameBackground.position.x = -0.005; - if(participantData[peer.client_id].inWorldName.length > 18){ - displayNameTextRef.current.fontSize = 0.028; - } - } - displayNameTextRef.current.text = participantData[peer.client_id].inWorldName; - displayNameTextRef.current.textAlign = "left"; - } - } - }); - return () => { - // Cleanup function to stop and dispose mixers - mixers.current.forEach(mixer => mixer.stopAllAction()); - mixers.current = []; - }; + // return () => { + // // Cleanup function to stop and dispose mixers + // mixers.current[participant.name].forEach(mixer => mixer.stopAllAction()); + // mixers.current[participant.name] = []; + // }; } }, [someVRM, theScene, participant.p2pcf]); useFrame((state, delta) => { - mixers.current.forEach(mixer => { - // Log each action in the mixer - // mixer._actions.forEach(action => { - // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); - // }); - - // Find and play the idle animation explicitly - const idleAction = mixer._actions.find(action => action._clip.name === 'idle'); - if (idleAction && !idleAction.isRunning()) { - idleAction.reset().play(); - } - - // Update the mixer - mixer.update(delta); - }); + if(mixers.current[participant.name]){ + console.log("mixers", mixers.current[participant.name]); + // Log each action in the mixer + // mixer._actions.forEach(action => { + // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); + // }); + + // Find and play the idle animation explicitly + const idleAction = mixers.current[participant.name]._actions.find(action => action._clip.name === 'idle'); + if (idleAction && !idleAction.isRunning()) { + console.log("idle action", idleAction); + idleAction.reset().play(); + } + + // Update the mixer + mixers.current[participant.name].update(delta); + } if (someVRM?.userData?.vrm) { someVRM.userData.vrm.update(delta); // Update the VRM model @@ -776,6 +699,43 @@ function Participant(participant) { function Participants(props) { + const theScene = useThree(); + let isProfileFetched = false; // flag to check if profile has been fetched + // make ref for animation mixer for each participant + const animationMixerRef = useRef([]); // Ref for the animation mixer of this participant + const animationsRef = useRef([]); // Ref to store animations + const mixers = useRef([]); + const displayNameTextRef = useRef(null); + + useEffect(() => { + window.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // console.log("refs", animationMixerRef, animationsRef, mixers); + const participantObject = theScene.scene.getObjectByName(peer.client_id); + if (animationsRef.current[peer.client_id]) { + console.log("we got into the animation refs", animationsRef.current[peer.client_id], "and the mixer", animationMixerRef.current[peer.client_id]); + const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation + const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation + + if (participantData[peer.client_id].isMoving) { + walkAction.play(); + idleAction.stop(); + } else { + idleAction.play(); + walkAction.stop(); + } + } + + if (participantObject) { + if(participantData[peer.client_id]?.position){ + participantObject.parent.position.fromArray(participantData[peer.client_id].position); + participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + } + } + }); + }, []); + useEffect(() => { const p2pcf = window.p2pcf; if (p2pcf) { @@ -795,12 +755,346 @@ function Participants(props) { return ( <> {props.participants && props.participants.map((item, index) => ( - + ))} ); } +// /** +// * Represents a participant in a virtual reality scene. +// * +// * @param {Object} participant - The props for the participant. +// * +// * @return {JSX.Element} The participant. +// */ +// function Participant(participant) { +// const fallbackURL = threeObjectPlugin + defaultVRM; +// const playerURL = userData.vrm ? userData.vrm : fallbackURL; +// const clonedModelRef = useRef(null); // Ref for the cloned model +// const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant +// const animationsRef = useRef(null); // Ref to store animations +// const [someVRM, setSomeVRM] = useState(null); +// const theScene = useThree(); +// const mixers = useRef([]); +// const displayNameTextRef = useRef(null); +// // Load the VRM model +// useEffect(() => { +// const loader = new GLTFLoader(); +// loader.register(parser => new VRMLoaderPlugin(parser)); +// loader.load(playerURL, gltf => { +// setSomeVRM(gltf); +// }); +// }, [playerURL]); + +// useEffect(() => { +// if (someVRM?.userData?.gltfExtensions?.VRM) { +// const playerController = someVRM.userData.vrm; +// const fetchProfile = async (pfp, modelToModify) => { +// console.log("modelToModify", modelToModify); + +// try { +// const response = await fetch(pfp); +// console.log("pfp", pfp, response); +// if (response.status === 200) { +// const textureLoader = new THREE.TextureLoader(); +// textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed +// textureLoader.load(pfp, (loadedProfile) => { +// // Now we are sure the texture is loaded +// if(modelToModify.isObject3D){ +// modelToModify.traverse((obj) => { +// obj.frustumCulled = false; + +// if (obj.name === "profile" && obj.material) { +// console.log("profile", obj); +// const newMat = obj.material.clone(); +// newMat.map = loadedProfile; +// newMat.map.needsUpdate = true; +// newMat.needsUpdate = true; +// obj.material = newMat; +// } +// }); +// } +// }); +// return response; +// } +// } catch (err) { +// // Handle the error properly or rethrow it to be caught elsewhere. +// // console.error("Error fetching profile:", err); +// // throw err; +// } +// }; + +// const fetchProfilePlane = async (pfp, modelToModify) => { +// console.log("fetchProfilePlane", pfp); + +// try { +// const response = await fetch(pfp); +// console.log("fetch in plane try", pfp, response); +// if (response.status === 200) { +// const textureLoader = new THREE.TextureLoader(); +// textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed +// textureLoader.load(pfp, (loadedProfile) => { +// // Now we are sure the texture is loaded +// if(modelToModify.isObject3D){ +// modelToModify.frustumCulled = false; +// console.log("traversed", modelToModify); +// const newMat = modelToModify.material.clone(); +// newMat.map = loadedProfile; +// newMat.map.needsUpdate = true; +// newMat.needsUpdate = true; +// modelToModify.material = newMat; +// } +// } +// ); +// return response; +// } +// } catch (err) { +// // Handle the error properly or rethrow it to be caught elsewhere. +// // console.error("Error fetching profile:", err); +// // throw err; +// } +// }; + +// VRMUtils.rotateVRM0(playerController); +// playerController.scene.rotation.y = 0; +// playerController.scene.scale.set(1, 1, 1); + + +// // Animation files +// const idleFile = threeObjectPlugin + idle; +// const walkingFile = threeObjectPlugin + walk; +// const runningFile = threeObjectPlugin + run; +// // Load animations +// let animationFiles = [idleFile, walkingFile, runningFile]; +// let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); + +// // Clone the model +// // const clonedModel = SkeletonUtils.clone(playerController.scene); +// // clonedModel.userData.vrm = clonedModel; + +// // Create animation mixer for the cloned model +// const newMixer = new THREE.AnimationMixer(playerController.scene); +// animationMixerRef.current = newMixer; +// mixers.current.push(animationMixerRef.current); + +// Promise.all(animationsPromises).then(animations => { +// animationsRef.current = animations; // Store animations in ref + +// const idleAction = animationMixerRef.current.clipAction(animations[0]); +// const walkingAction = animationMixerRef.current.clipAction(animations[1]); +// const runningAction = animationMixerRef.current.clipAction(animations[2]); +// console.log("animationmixer", animationMixerRef.current, idleAction, walkingAction, runningAction); +// idleAction.timeScale = 1; +// idleAction.play(); +// }); +// let isProfileFetched = false; // flag to check if profile has been fetched +// window.p2pcf.on("msg", (peer, data) => { +// const finalData = new TextDecoder("utf-8").decode(data); +// const participantData = JSON.parse(finalData); +// // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); +// const participantObject = theScene.scene.getObjectByName(peer.client_id); +// // console.log(participantData[peer.client_id].vrm); +// if (!isProfileFetched) { +// isProfileFetched = true; // set the flag to true after first fetch +// // setTimeout(() => { +// // if( modelClone.isObject3D ){ +// // fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) +// // .then((response) => { +// // // handle the response here if needed +// // }) +// // .catch((err) => { +// // // Handle the error here if needed +// // }); +// // } +// // }, 1000); +// setTimeout(() => { +// if( modelClone.isObject3D ){ +// const displayNamePfp = participantObject.parent.parent.getObjectByName("displayNamePfp"); +// // console.log(participantData[peer.client_id]); +// // fetch profile image and apply it to the material +// fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) +// .then((response) => { +// // handle the response here if needed +// }) +// .catch((err) => { +// // Handle the error here if needed +// }); +// } +// }, 1000); +// setTimeout(() => { +// if( modelClone.isObject3D ){ +// console.log("timeout finished here is", participantData[peer.client_id]); +// // fetch profile image and apply it to the material +// // fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) +// // .then((response) => { +// // // handle the response here if needed +// // }) +// // .catch((err) => { +// // // Handle the error here if needed +// // }); +// } +// }, 1000); +// } +// if (participantObject) { +// if (animationsRef.current) { +// const walkAction = animationMixerRef.current.clipAction(animationsRef.current[1]); // Walking animation +// const idleAction = animationMixerRef.current.clipAction(animationsRef.current[0]); // Idle animation + +// if (participantData[peer.client_id].isMoving) { +// walkAction.play(); +// idleAction.stop(); +// } else { +// idleAction.play(); +// walkAction.stop(); +// } +// } +// if(participantData[peer.client_id]?.position){ +// participantObject.parent.position.fromArray(participantData[peer.client_id].position); +// participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); +// } +// if(participantData[peer.client_id]?.inWorldName && participantData[peer.client_id]?.inWorldName !== displayNameTextRef.current.text){ +// console.log("should only hit once", participantData[peer.client_id]); +// // if the name is long make the background longer +// if(participantData[peer.client_id].inWorldName.length > 8){ +// const displayNameBackground = participantObject.parent.parent.getObjectByName("displayNameBackground"); +// displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); +// displayNameBackground.position.x = -0.005; +// if(participantData[peer.client_id].inWorldName.length > 18){ +// displayNameTextRef.current.fontSize = 0.028; +// } +// } +// displayNameTextRef.current.text = participantData[peer.client_id].inWorldName; +// displayNameTextRef.current.textAlign = "left"; +// } +// } +// }); +// return () => { +// // Cleanup function to stop and dispose mixers +// mixers.current.forEach(mixer => mixer.stopAllAction()); +// mixers.current = []; +// }; +// } +// }, [someVRM, theScene, participant.p2pcf]); + +// useFrame((state, delta) => { +// mixers.current.forEach(mixer => { +// // Log each action in the mixer +// // mixer._actions.forEach(action => { +// // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); +// // }); + +// // Find and play the idle animation explicitly +// const idleAction = mixer._actions.find(action => action._clip.name === 'idle'); +// if (idleAction && !idleAction.isRunning()) { +// idleAction.reset().play(); +// } + +// // Update the mixer +// mixer.update(delta); +// }); + +// if (someVRM?.userData?.vrm) { +// someVRM.userData.vrm.update(delta); // Update the VRM model +// } +// if (clonedModelRef?.current?.userData?.vrm) { +// clonedModelRef.current.userData.vrm.update(delta); // Update the cloned VRM model +// } +// }); + +// if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { +// return null; +// } + +// const playerController = someVRM.userData.vrm; +// const modelClone = SkeletonUtils.clone(playerController.scene); +// modelClone.userData.vrm = playerController; + +// //calculate the height of the avatar to be used in the Text component position below +// const box = new THREE.Box3().setFromObject(modelClone); +// const height = (box.max.y - box.min.y) + 0.1; +// console.log("height", height); + +// return ( +// +// +// +// +// +// +// +// +// +// {participant.name} +// +// +// +// +// ); +// } + + +// function Participants(props) { +// useEffect(() => { +// const p2pcf = window.p2pcf; +// if (p2pcf) { +// p2pcf.on("peerconnect", (peer) => { +// // emit the peer id to all other peers +// props.setParticipant(prevParticipants => { +// if (!prevParticipants.includes(peer.client_id)) { +// return [...prevParticipants, peer.client_id]; +// } else { +// return prevParticipants; +// } +// }); +// }); +// } +// }, []); + +// return ( +// <> +// {props.participants && props.participants.map((item, index) => ( +// +// ))} +// +// ); +// } // function Participant(participant) { // const fallbackURL = threeObjectPlugin + defaultVRM; diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index b46ed80..a54aaf5 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -572,7 +572,7 @@ export default function Player(props) { isMoving: true } }; - console.log("userdata", userData); + // console.log("userdata", userData); clearTimeout(movementTimeoutRef.current); movementTimeoutRef.current = setTimeout(() => { // Send "isMoving: false" message here From f36af53d9b116b5974d23b1069e1daa8e6e935f1 Mon Sep 17 00:00:00 2001 From: antpb Date: Mon, 1 Jan 2024 18:06:58 -0600 Subject: [PATCH 07/43] working state network config --- admin/three-object-viewer-settings/App.js | 20 ++ admin/three-object-viewer-settings/init.php | 2 + .../components/EnvironmentFront.js | 181 ++++++++++++------ blocks/environment/components/Networking.js | 3 +- blocks/environment/components/Player.js | 13 +- blocks/environment/editor.scss | 10 +- blocks/environment/frontend.js | 4 +- blocks/three-networking-block/init.php | 11 +- package.json | 1 + php/Plugin.php | 11 +- yarn.lock | 20 ++ 11 files changed, 198 insertions(+), 78 deletions(-) diff --git a/admin/three-object-viewer-settings/App.js b/admin/three-object-viewer-settings/App.js index e65ad3c..9955e70 100644 --- a/admin/three-object-viewer-settings/App.js +++ b/admin/three-object-viewer-settings/App.js @@ -171,6 +171,26 @@ export default function App({ getSettings, updateSettings }) { + +

{__('Networking Settings', 'three-object-viewer' ) }

+ + + + + { + setSettings({ ...settings, multiplayerWorker: event.target.value }); + }} + /> +

Use https://p2pcf.sxpdigital.workers.dev/ or host your own CloudFlare Worker using p2pcf. A tutorial for setting up your own worker can be found here.

+ +

{__('AI Settings', 'three-object-viewer' ) }

diff --git a/admin/three-object-viewer-settings/init.php b/admin/three-object-viewer-settings/init.php index 04a8625..093126e 100644 --- a/admin/three-object-viewer-settings/init.php +++ b/admin/three-object-viewer-settings/init.php @@ -38,6 +38,7 @@ return rest_ensure_response( [ 'enabled' => get_option( '3ov_ai_enabled', false ), 'networkWorker' => get_option( '3ov_mp_networkWorker', '' ), + 'multiplayerWorker' => get_option( '3ov_mp_multiplayerWorker', '' ), 'openApiKey' => three_decrypt ( get_option( '3ov_ai_openApiKey', '' ) ), 'allowPublicAI' => get_option( '3ov_ai_allow', '' ), 'defaultVRM' => get_option( '3ov_defaultVRM', '' ), @@ -55,6 +56,7 @@ $data = $request->get_json_params(); update_option( '3ov_ai_enabled', $data['enabled'] ); update_option( '3ov_mp_networkWorker', $data['networkWorker'] ); + update_option( '3ov_mp_multiplayerWorker', $data['multiplayerWorker'] ); update_option( '3ov_defaultVRM', $data['defaultVRM'] ); update_option( '3ov_defaultAvatar', $data['defaultAvatar'] ); update_option( '3ov_ai_allow', $data['allowPublicAI'] ); diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index e4092c9..422a7c8 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -490,6 +490,11 @@ function Participant(participant) { const [someVRM, setSomeVRM] = useState(null); const theScene = useThree(); const displayNameTextRef = useRef(null); + const setTextRef = (el) => { + textRef(el); + }; + + // Load the VRM model useEffect(() => { const loader = new GLTFLoader(); @@ -537,37 +542,6 @@ function Participant(participant) { } }; - const fetchProfilePlane = async (pfp, modelToModify) => { - console.log("fetchProfilePlane", pfp); - - try { - const response = await fetch(pfp); - console.log("fetch in plane try", pfp, response); - if (response.status === 200) { - const textureLoader = new THREE.TextureLoader(); - textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed - textureLoader.load(pfp, (loadedProfile) => { - // Now we are sure the texture is loaded - if(modelToModify.isObject3D){ - modelToModify.frustumCulled = false; - console.log("traversed", modelToModify); - const newMat = modelToModify.material.clone(); - newMat.map = loadedProfile; - newMat.map.needsUpdate = true; - newMat.needsUpdate = true; - modelToModify.material = newMat; - } - } - ); - return response; - } - } catch (err) { - // Handle the error properly or rethrow it to be caught elsewhere. - // console.error("Error fetching profile:", err); - // throw err; - } - }; - VRMUtils.rotateVRM0(playerController); playerController.scene.rotation.y = 0; playerController.scene.scale.set(1, 1, 1); @@ -588,16 +562,16 @@ function Participant(participant) { // Create animation mixer for the cloned model const newMixer = new THREE.AnimationMixer(playerController.scene); animationMixerRef.current[participant.name] = newMixer; - console.log("heres the current mixers", animationMixerRef.current[participant.name]); + // console.log("heres the current mixers", animationMixerRef.current[participant.name]); mixers.current[participant.name] = animationMixerRef.current[participant.name]; - + participant.profileUserData.current[participant.name] = {inWorldName : participant.name, pfp: participant.pfp }; Promise.all(animationsPromises).then(animations => { animationsRef.current[participant.name] = animations; // Store animations in ref const idleAction = animationMixerRef.current[participant.name].clipAction(animations[0]); const walkingAction = animationMixerRef.current[participant.name].clipAction(animations[1]); const runningAction = animationMixerRef.current[participant.name].clipAction(animations[2]); - console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); + // console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); idleAction.timeScale = 1; idleAction.play(); }); @@ -612,7 +586,6 @@ function Participant(participant) { useFrame((state, delta) => { if(mixers.current[participant.name]){ - console.log("mixers", mixers.current[participant.name]); // Log each action in the mixer // mixer._actions.forEach(action => { // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); @@ -648,7 +621,6 @@ function Participant(participant) { //calculate the height of the avatar to be used in the Text component position below const box = new THREE.Box3().setFromObject(modelClone); const height = (box.max.y - box.min.y) + 0.1; - console.log("height", height); return ( @@ -677,7 +649,7 @@ function Participant(participant) { overflowWrap="break-word" // whiteSpace="nowrap" // anchorY="middle" - ref={displayNameTextRef} + ref={participant.textRef} className="content" scale={[1, 1, 1]} fontSize={0.04} @@ -700,40 +672,125 @@ function Participant(participant) { function Participants(props) { const theScene = useThree(); - let isProfileFetched = false; // flag to check if profile has been fetched + // create a ref for the profile user data information for each participant to be held in an array + const profileUserData = useRef([]); // make ref for animation mixer for each participant const animationMixerRef = useRef([]); // Ref for the animation mixer of this participant const animationsRef = useRef([]); // Ref to store animations const mixers = useRef([]); const displayNameTextRef = useRef(null); + const textRefs = useRef({}); + const participantRefs = useRef({}); + + const fetchProfilePlane = async (pfp, modelToModify, displayNameBackground, inWorldName, displayNameText) => { + // console.log("fetchProfilePlane", pfp, modelToModify, displayNameBackground, inWorldName, displayNameText); + if(pfp){ + try { + const response = await fetch(pfp); + if (response.status === 200) { + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; + textureLoader.load(pfp, (loadedProfile) => { + // Now we are sure the texture is loaded + if( modelToModify.isObject3D ){ + modelToModify.frustumCulled = false; + const newMat = modelToModify.material.clone(); + newMat.map = loadedProfile; + newMat.map.needsUpdate = true; + newMat.needsUpdate = true; + modelToModify.material = newMat; + } + } + ); + return response; + } + } catch (err) { + // Handle the error properly or rethrow it to be caught elsewhere. + // console.error("Error fetching profile:", err); + // throw err; + } + } + }; useEffect(() => { - window.p2pcf.on("msg", (peer, data) => { - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - // console.log("refs", animationMixerRef, animationsRef, mixers); - const participantObject = theScene.scene.getObjectByName(peer.client_id); - if (animationsRef.current[peer.client_id]) { - console.log("we got into the animation refs", animationsRef.current[peer.client_id], "and the mixer", animationMixerRef.current[peer.client_id]); - const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation - const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation + if(window.p2pcf){ + window.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // console.log("refs", animationMixerRef, animationsRef, mixers); + const participantObject = theScene.scene.getObjectByName(peer.client_id); + if(!participantRefs.current[peer.client_id]) { + participantRefs.current[peer.client_id] = { profileFetched: false }; + } - if (participantData[peer.client_id].isMoving) { - walkAction.play(); - idleAction.stop(); - } else { - idleAction.play(); - walkAction.stop(); + // find the object in the parent of participantObject that is named displayNamePfp + const displayNamePfp = participantObject?.parent?.getObjectByName("displayNamePfp"); + const displayNameBackground = participantObject?.parent?.getObjectByName("displayNameBackground"); + if( ! participantRefs.current[peer.client_id].profileFetched && displayNameBackground ){ + setTimeout(() => { + fetchProfilePlane( participantData[peer.client_id].profileImage, displayNamePfp, displayNameBackground, profileUserData.current[peer.client_id].inWorldName, textRefs.current[peer.client_id] ) + .then((response) => { + participantRefs.current[peer.client_id].profileFetched = true; + if(participantData[peer.client_id]?.inWorldName){ + if(participantData[peer.client_id]?.inWorldName.length > 8){ + displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); + displayNameBackground.position.x = -0.005; + if(participantData[peer.client_id]?.inWorldName.length > 18){ + textRefs.current[peer.client_id].fontSize = 0.028; + } + } + } + }); + }, 1000); } - } + + + if (animationsRef.current[peer.client_id]) { + const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation + const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation + + if (participantData[peer.client_id].isMoving) { + walkAction.play(); + idleAction.stop(); + } else { + idleAction.play(); + walkAction.stop(); + } + } + + if (participantObject) { + if(participantData[peer.client_id]?.position){ + participantObject.parent.position.fromArray(participantData[peer.client_id].position); + participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + } + } + if(textRefs.current[peer.client_id] && participantData[peer.client_id]?.inWorldName) { + textRefs.current[peer.client_id].text = participantData[peer.client_id].inWorldName; + } + }); + } + }, []); - if (participantObject) { - if(participantData[peer.client_id]?.position){ - participantObject.parent.position.fromArray(participantData[peer.client_id].position); - participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + useEffect(() => { + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerclose", (peer) => { + const participantObject = theScene.scene.getObjectByName(peer.client_id); + // remove the participantObject + if (participantObject) { + theScene.scene.remove(participantObject); + // remove array item animationMixerRef.current[peer.client_id], animationsRef.current[peer.client_id], mixers.current[peer.client_id]; + delete animationMixerRef.current[peer.client_id]; + delete animationsRef.current[peer.client_id]; + delete mixers.current[peer.client_id]; } - } - }); + // remove peer.client_id + props.setParticipant(prevParticipants => { + return prevParticipants.filter(item => item !== peer.client_id); + } + ); + }); + } }, []); useEffect(() => { @@ -762,6 +819,8 @@ function Participants(props) { animationMixerRef={animationMixerRef} animationsRef={animationsRef} mixers={mixers} + textRef={(ref) => textRefs.current[item] = ref} + profileUserData={profileUserData} /> ))} @@ -1428,7 +1487,7 @@ export default function EnvironmentFront(props) { <> { isVRCompatible() && } { document.location = document.location.toString() + `#xpp-${props.postSlug}`; } - const userProfileName = userData.userId === "" ? Math.floor(Math.random() * 100000) @@ -16,7 +15,7 @@ const Networking = (props) => { "user-" + userProfileName, document.location.hash.substring(1), { - workerUrl: "https://p2pcf.sxpdigital.workers.dev/", + workerUrl: multiplayerWorker, slowPollingRateMs: 5000, fastPollingRateMs: 1500 } diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index a54aaf5..dea7d34 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -242,14 +242,12 @@ export default function Player(props) { } const currentPlayerAvatar = useLoader(GLTFLoader, playerURL, (loader) => { - const { gl } = useThree(); // Access the Three.js renderer + const { gl } = useThree(); // Create and configure KTX2Loader const ktx2Loader = new KTX2Loader(); ktx2Loader.setTranscoderPath(threeObjectPluginRoot + "/inc/utils/basis/"); // Set the path to the basis transcoder ktx2Loader.detectSupport(gl); // Detect support using the renderer - - // Set the KTX2Loader to GLTFLoader loader.setKTX2Loader(ktx2Loader); loader.register((parser) => { @@ -622,19 +620,20 @@ export default function Player(props) { } } - if (participantObject) { + if ( participantObject ) { // Get the desired head position. const desiredY = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; - + // console.log("cameraTarget", cameraTargetPosition.y); // Smoothly update the camera target position using lerp. - cameraTargetPosition.y = MathUtils.lerp(cameraTargetPosition.y, desiredY, 0.15); // 0.05 is the lerp factor. Adjust it for faster/slower transitions. + + // cameraTargetPosition.y = MathUtils.lerp(cameraTargetPosition.y, desiredY, 0.15); // 0.05 is the lerp factor. Adjust it for faster/slower transitions. + cameraTargetPosition.y = desiredY; camera.lookAt( participantObject.parent.position.x, cameraTargetPosition.y, participantObject.parent.position.z ); - if (orbitRef.current) { let newTarget = new Vector3( participantObject.parent.position.x, diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 303bcfb..748ad0e 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -23,9 +23,17 @@ #VRButton{ position: fixed !important; - top: 20px !important; bottom:auto !important; background-color: rgba(76, 0, 99, 0.677) !important; + margin-top: -50px !important; +} + +.threeov-networking-controls { + position: absolute; + top: 40px !important; + left: 20px; + background-color: rgba(76, 0, 99, 0.677) !important; + z-index: 1000; } .threeov-entry-flow { background-color: #212121f4; diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 18a5abf..e1dd18d 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -111,8 +111,8 @@ threeApp.forEach((threeApp) => { <> { ( networkingBlock.length > 0 ) && ( <> -
-
+
+

Room:

{/*

Peers

*/}
{/*

Messages

*/} diff --git a/blocks/three-networking-block/init.php b/blocks/three-networking-block/init.php index dac619f..ab2a4c5 100644 --- a/blocks/three-networking-block/init.php +++ b/blocks/three-networking-block/init.php @@ -5,9 +5,12 @@ */ add_action('init', function () { if( file_exists(dirname(__FILE__, 3). "/build/block-environment.asset.php") ) { - $result = register_block_type_from_metadata( __DIR__, [ - 'title' => _x( '3D Networking Block', 'block title', 'three-object-viewer' ), - 'description' => _x( 'A networking block for your environment.', 'block description', 'three-object-viewer' ), - ] ); + // if the 3ov multiplayer worker option is sset, register the multiplayer block + if( get_option( '3ov_mp_multiplayerWorker' ) && get_option( '3ov_mp_multiplayerWorker' ) !== '' ) { + $result = register_block_type_from_metadata( __DIR__, [ + 'title' => _x( 'Multiplayer Environment Block', 'block title', 'three-object-viewer' ), + 'description' => _x( 'A 3D multiplayer environment component', 'block description', 'three-object-viewer' ), + ] ); + } } }); diff --git a/package.json b/package.json index 4ae2658..26558f3 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "three-icosa": "^0.4.0", "three-omi": "^0.1.5", "tiny-simple-peer": "^10.1.1", + "troika-three-text": "^0.49.0", "webpack-glsl-loader": "^1.0.1" } } diff --git a/php/Plugin.php b/php/Plugin.php index cb4c3dd..5b8af92 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -198,6 +198,7 @@ function threeobjectviewer_frontend_assets() { $current_user = wp_get_current_user(); $current_user = wp_get_current_user(); $vrm = get_user_meta($current_user->ID, 'user_data_vrm', true) ?: get_option('3ov_defaultAvatar'); + $multiplayer_worker_url = get_option( '3ov_mp_multiplayerWorker', '' ); // $vrm = get_option('3ov_defaultAvatar'); $inWorldName = "Guest"; if ( is_user_logged_in() && get_option('3ov_ai_allow') === "loggedIn" ) { @@ -276,6 +277,7 @@ function threeobjectviewer_frontend_assets() { wp_localize_script( 'threeobjectloader-frontend', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatar', $default_avatar ); + wp_localize_script( 'threeobjectloader-frontend', 'multiplayerWorker', $multiplayer_worker_url ); wp_enqueue_script( "threeobjectloader-frontend" ); @@ -294,6 +296,7 @@ function threeobjectviewer_frontend_assets() { wp_localize_script( 'versepress-frontend', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'versepress-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'versepress-frontend', 'defaultAvatar', $default_avatar ); + wp_localize_script( 'versepress-frontend', 'multiplayerWorker', $multiplayer_worker_url ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatar', $default_avatar ); wp_enqueue_script( @@ -467,9 +470,15 @@ function threeobjectviewer_editor_assets() { 'three-object-viewer/three-image-block', 'three-object-viewer/three-video-block', 'three-object-viewer/spawn-point-block', - 'three-object-viewer/three-networking-block' ]; + // if option for multiplayerNetworking is not a value then add the network block to allowed blocks + if (get_option('3ov_mp_multiplayerWorker') != '') { + $NETWORK_BLOCKS = [ + 'three-object-viewer/three-networking-block', + ]; + array_push( $DEFAULT_BLOCKS, $NETWORK_BLOCKS ); + } if ($this->threeobjectviewer_is_pro()) { $PRO_BLOCKS = [ 'three-object-viewer/three-mirror-block', diff --git a/yarn.lock b/yarn.lock index 3190e41..8f81a17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17744,16 +17744,36 @@ troika-three-text@^0.47.2: troika-worker-utils "^0.47.2" webgl-sdf-generator "1.1.1" +troika-three-text@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.49.0.tgz#bc2dc1924250c477cd39316cd83585dee12550e0" + integrity sha512-sn9BNC6eIX8OO3iAkPwjecJ7Pn21Ve8P1UNFMNeQzXx759rrqS4i4pSZs7FLMYdWyCKVXBFGimBySFwRKLjq/Q== + dependencies: + bidi-js "^1.0.2" + troika-three-utils "^0.49.0" + troika-worker-utils "^0.49.0" + webgl-sdf-generator "1.1.1" + troika-three-utils@^0.47.2: version "0.47.2" resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.47.2.tgz#af49ca694245dce631963d5fefe4e8e1b8af9044" integrity sha512-/28plhCxfKtH7MSxEGx8e3b/OXU5A0xlwl+Sbdp0H8FXUHKZDoksduEKmjQayXYtxAyuUiCRunYIv/8Vi7aiyg== +troika-three-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.49.0.tgz#3fbdbf8783740ce3c1f7acac642e7e957ea4f090" + integrity sha512-umitFL4cT+Fm/uONmaQEq4oZlyRHWwVClaS6ZrdcueRvwc2w+cpNQ47LlJKJswpqtMFWbEhOLy0TekmcPZOdYA== + troika-worker-utils@^0.47.2: version "0.47.2" resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.47.2.tgz#e7c5de5f37d56c072b13fa8112bb844e048ff46c" integrity sha512-mzss4MeyzUkYBppn4x5cdAqrhBHFEuVmMMgLMTyFV23x6GvQMyo+/R5E5Lsbrt7WSt5RfvewjcwD1DChRTA9lA== +troika-worker-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.49.0.tgz#e5e200a09d2e0e4eb9fe818a83effa912e2ec4b4" + integrity sha512-1xZHoJrG0HFfCvT/iyN41DvI/nRykiBtHqFkGaGgJwq5iXfIZFBiPPEHFpPpgyKM3Oo5ITHXP5wM2TNQszYdVg== + trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" From 3acc6648a0b334805f4fa3cb13e2bfd08ec82989 Mon Sep 17 00:00:00 2001 From: antpb Date: Mon, 1 Jan 2024 18:07:33 -0600 Subject: [PATCH 08/43] remove old participant logic --- .../components/EnvironmentFront.js | 394 ------------------ 1 file changed, 394 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 422a7c8..d995562 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -827,400 +827,6 @@ function Participants(props) { ); } -// /** -// * Represents a participant in a virtual reality scene. -// * -// * @param {Object} participant - The props for the participant. -// * -// * @return {JSX.Element} The participant. -// */ -// function Participant(participant) { -// const fallbackURL = threeObjectPlugin + defaultVRM; -// const playerURL = userData.vrm ? userData.vrm : fallbackURL; -// const clonedModelRef = useRef(null); // Ref for the cloned model -// const animationMixerRef = useRef(null); // Ref for the animation mixer of this participant -// const animationsRef = useRef(null); // Ref to store animations -// const [someVRM, setSomeVRM] = useState(null); -// const theScene = useThree(); -// const mixers = useRef([]); -// const displayNameTextRef = useRef(null); -// // Load the VRM model -// useEffect(() => { -// const loader = new GLTFLoader(); -// loader.register(parser => new VRMLoaderPlugin(parser)); -// loader.load(playerURL, gltf => { -// setSomeVRM(gltf); -// }); -// }, [playerURL]); - -// useEffect(() => { -// if (someVRM?.userData?.gltfExtensions?.VRM) { -// const playerController = someVRM.userData.vrm; -// const fetchProfile = async (pfp, modelToModify) => { -// console.log("modelToModify", modelToModify); - -// try { -// const response = await fetch(pfp); -// console.log("pfp", pfp, response); -// if (response.status === 200) { -// const textureLoader = new THREE.TextureLoader(); -// textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed -// textureLoader.load(pfp, (loadedProfile) => { -// // Now we are sure the texture is loaded -// if(modelToModify.isObject3D){ -// modelToModify.traverse((obj) => { -// obj.frustumCulled = false; - -// if (obj.name === "profile" && obj.material) { -// console.log("profile", obj); -// const newMat = obj.material.clone(); -// newMat.map = loadedProfile; -// newMat.map.needsUpdate = true; -// newMat.needsUpdate = true; -// obj.material = newMat; -// } -// }); -// } -// }); -// return response; -// } -// } catch (err) { -// // Handle the error properly or rethrow it to be caught elsewhere. -// // console.error("Error fetching profile:", err); -// // throw err; -// } -// }; - -// const fetchProfilePlane = async (pfp, modelToModify) => { -// console.log("fetchProfilePlane", pfp); - -// try { -// const response = await fetch(pfp); -// console.log("fetch in plane try", pfp, response); -// if (response.status === 200) { -// const textureLoader = new THREE.TextureLoader(); -// textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed -// textureLoader.load(pfp, (loadedProfile) => { -// // Now we are sure the texture is loaded -// if(modelToModify.isObject3D){ -// modelToModify.frustumCulled = false; -// console.log("traversed", modelToModify); -// const newMat = modelToModify.material.clone(); -// newMat.map = loadedProfile; -// newMat.map.needsUpdate = true; -// newMat.needsUpdate = true; -// modelToModify.material = newMat; -// } -// } -// ); -// return response; -// } -// } catch (err) { -// // Handle the error properly or rethrow it to be caught elsewhere. -// // console.error("Error fetching profile:", err); -// // throw err; -// } -// }; - -// VRMUtils.rotateVRM0(playerController); -// playerController.scene.rotation.y = 0; -// playerController.scene.scale.set(1, 1, 1); - - -// // Animation files -// const idleFile = threeObjectPlugin + idle; -// const walkingFile = threeObjectPlugin + walk; -// const runningFile = threeObjectPlugin + run; -// // Load animations -// let animationFiles = [idleFile, walkingFile, runningFile]; -// let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); - -// // Clone the model -// // const clonedModel = SkeletonUtils.clone(playerController.scene); -// // clonedModel.userData.vrm = clonedModel; - -// // Create animation mixer for the cloned model -// const newMixer = new THREE.AnimationMixer(playerController.scene); -// animationMixerRef.current = newMixer; -// mixers.current.push(animationMixerRef.current); - -// Promise.all(animationsPromises).then(animations => { -// animationsRef.current = animations; // Store animations in ref - -// const idleAction = animationMixerRef.current.clipAction(animations[0]); -// const walkingAction = animationMixerRef.current.clipAction(animations[1]); -// const runningAction = animationMixerRef.current.clipAction(animations[2]); -// console.log("animationmixer", animationMixerRef.current, idleAction, walkingAction, runningAction); -// idleAction.timeScale = 1; -// idleAction.play(); -// }); -// let isProfileFetched = false; // flag to check if profile has been fetched -// window.p2pcf.on("msg", (peer, data) => { -// const finalData = new TextDecoder("utf-8").decode(data); -// const participantData = JSON.parse(finalData); -// // console.log("participantData", participantData[peer.client_id][2].profileImage[0]); -// const participantObject = theScene.scene.getObjectByName(peer.client_id); -// // console.log(participantData[peer.client_id].vrm); -// if (!isProfileFetched) { -// isProfileFetched = true; // set the flag to true after first fetch -// // setTimeout(() => { -// // if( modelClone.isObject3D ){ -// // fetchProfile(participantData[peer.client_id][2].profileImage[0], modelClone) -// // .then((response) => { -// // // handle the response here if needed -// // }) -// // .catch((err) => { -// // // Handle the error here if needed -// // }); -// // } -// // }, 1000); -// setTimeout(() => { -// if( modelClone.isObject3D ){ -// const displayNamePfp = participantObject.parent.parent.getObjectByName("displayNamePfp"); -// // console.log(participantData[peer.client_id]); -// // fetch profile image and apply it to the material -// fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) -// .then((response) => { -// // handle the response here if needed -// }) -// .catch((err) => { -// // Handle the error here if needed -// }); -// } -// }, 1000); -// setTimeout(() => { -// if( modelClone.isObject3D ){ -// console.log("timeout finished here is", participantData[peer.client_id]); -// // fetch profile image and apply it to the material -// // fetchProfilePlane(participantData[peer.client_id].profileImage, displayNamePfp) -// // .then((response) => { -// // // handle the response here if needed -// // }) -// // .catch((err) => { -// // // Handle the error here if needed -// // }); -// } -// }, 1000); -// } -// if (participantObject) { -// if (animationsRef.current) { -// const walkAction = animationMixerRef.current.clipAction(animationsRef.current[1]); // Walking animation -// const idleAction = animationMixerRef.current.clipAction(animationsRef.current[0]); // Idle animation - -// if (participantData[peer.client_id].isMoving) { -// walkAction.play(); -// idleAction.stop(); -// } else { -// idleAction.play(); -// walkAction.stop(); -// } -// } -// if(participantData[peer.client_id]?.position){ -// participantObject.parent.position.fromArray(participantData[peer.client_id].position); -// participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); -// } -// if(participantData[peer.client_id]?.inWorldName && participantData[peer.client_id]?.inWorldName !== displayNameTextRef.current.text){ -// console.log("should only hit once", participantData[peer.client_id]); -// // if the name is long make the background longer -// if(participantData[peer.client_id].inWorldName.length > 8){ -// const displayNameBackground = participantObject.parent.parent.getObjectByName("displayNameBackground"); -// displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); -// displayNameBackground.position.x = -0.005; -// if(participantData[peer.client_id].inWorldName.length > 18){ -// displayNameTextRef.current.fontSize = 0.028; -// } -// } -// displayNameTextRef.current.text = participantData[peer.client_id].inWorldName; -// displayNameTextRef.current.textAlign = "left"; -// } -// } -// }); -// return () => { -// // Cleanup function to stop and dispose mixers -// mixers.current.forEach(mixer => mixer.stopAllAction()); -// mixers.current = []; -// }; -// } -// }, [someVRM, theScene, participant.p2pcf]); - -// useFrame((state, delta) => { -// mixers.current.forEach(mixer => { -// // Log each action in the mixer -// // mixer._actions.forEach(action => { -// // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); -// // }); - -// // Find and play the idle animation explicitly -// const idleAction = mixer._actions.find(action => action._clip.name === 'idle'); -// if (idleAction && !idleAction.isRunning()) { -// idleAction.reset().play(); -// } - -// // Update the mixer -// mixer.update(delta); -// }); - -// if (someVRM?.userData?.vrm) { -// someVRM.userData.vrm.update(delta); // Update the VRM model -// } -// if (clonedModelRef?.current?.userData?.vrm) { -// clonedModelRef.current.userData.vrm.update(delta); // Update the cloned VRM model -// } -// }); - -// if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { -// return null; -// } - -// const playerController = someVRM.userData.vrm; -// const modelClone = SkeletonUtils.clone(playerController.scene); -// modelClone.userData.vrm = playerController; - -// //calculate the height of the avatar to be used in the Text component position below -// const box = new THREE.Box3().setFromObject(modelClone); -// const height = (box.max.y - box.min.y) + 0.1; -// console.log("height", height); - -// return ( -// -// -// -// -// -// -// -// -// -// {participant.name} -// -// -// -// -// ); -// } - - -// function Participants(props) { -// useEffect(() => { -// const p2pcf = window.p2pcf; -// if (p2pcf) { -// p2pcf.on("peerconnect", (peer) => { -// // emit the peer id to all other peers -// props.setParticipant(prevParticipants => { -// if (!prevParticipants.includes(peer.client_id)) { -// return [...prevParticipants, peer.client_id]; -// } else { -// return prevParticipants; -// } -// }); -// }); -// } -// }, []); - -// return ( -// <> -// {props.participants && props.participants.map((item, index) => ( -// -// ))} -// -// ); -// } - -// function Participant(participant) { -// const fallbackURL = threeObjectPlugin + defaultVRM; -// const playerURL = userData.vrm ? userData.vrm : fallbackURL; -// const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { -// loader.register((parser) => { -// return new VRMLoaderPlugin(parser); -// }); -// }); - -// const modelClone = useRef(null); -// const currentMixer = useRef(null); -// const theScene = useThree(); - -// useEffect(() => { -// if (someSceneState?.userData?.gltfExtensions?.VRM) { -// const playerController = someSceneState.userData.vrm; -// VRMUtils.rotateVRM0(playerController); -// const rotationVRM = playerController.scene.rotation.y; -// playerController.scene.rotation.set(0, rotationVRM, 0); -// playerController.scene.scale.set(1, 1, 1); - -// modelClone.current = SkeletonUtils.clone(playerController.scene); -// currentMixer.current = new THREE.AnimationMixer(modelClone.current); - -// const animationFiles = [threeObjectPlugin + idle, threeObjectPlugin + walk, threeObjectPlugin + run]; -// const animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, modelClone.current)); - -// Promise.all(animationsPromises).then(animations => { -// animations.forEach((clip, index) => { -// const action = currentMixer.current.clipAction(clip); -// action.timeScale = 1; -// if (index === 0) action.play(); // Play only the idle animation initially -// }); -// }); - -// modelClone.current.visible = true; -// } -// }, [someSceneState]); - -// useEffect(() => { -// participant.p2pcf.on("msg", (peer, data) => { -// const finalData = new TextDecoder("utf-8").decode(data); -// const participantData = JSON.parse(finalData); -// const participantObject = theScene.scene.getObjectByName(peer.client_id); -// if (participantObject) { -// participantObject.position.fromArray(participantData[peer.client_id][0].position); -// participantObject.rotation.fromArray(participantData[peer.client_id][1].rotation); -// } -// }); -// }, [participant, theScene.scene]); - -// useFrame((state, delta) => { -// if (currentMixer.current) { -// currentMixer.current.update(delta); -// } -// }); - -// return ( -// <> -// {modelClone.current && ( -// -// )} -// -// ); -// } - /** * Represents a saved object in a virtual reality world. * From 37b37564386135249818806480eae34e938f7bfe Mon Sep 17 00:00:00 2001 From: antpb Date: Wed, 3 Jan 2024 01:41:12 -0600 Subject: [PATCH 09/43] adds networking UI --- .../components/EnvironmentFront.js | 2 +- blocks/environment/components/Networking.js | 204 ++++++++++++++++-- blocks/environment/components/Player.js | 2 +- .../environment/components/TeleportTravel.js | 3 +- blocks/environment/editor.scss | 49 ++++- blocks/environment/frontend.js | 13 +- inc/assets/corner_accent.png | Bin 0 -> 12820 bytes inc/assets/mic_icon.png | Bin 0 -> 5985 bytes inc/assets/mic_icon_mute.png | Bin 0 -> 7058 bytes inc/assets/participants.png | Bin 0 -> 6323 bytes inc/assets/world_icon.png | Bin 0 -> 16156 bytes 11 files changed, 241 insertions(+), 32 deletions(-) create mode 100644 inc/assets/corner_accent.png create mode 100644 inc/assets/mic_icon.png create mode 100644 inc/assets/mic_icon_mute.png create mode 100644 inc/assets/participants.png create mode 100644 inc/assets/world_icon.png diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index d995562..5216122 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -2508,7 +2508,7 @@ export default function EnvironmentFront(props) { }} > {" "} - Load World{" "} + {props.networkingBlock.length > 0 ? "Enter Room" : "Load World"}
diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index 5f845b4..67548a3 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -1,11 +1,57 @@ import P2PCF from "./p2pcf/p2pcf.js"; import React, { useEffect, useMemo } from "react"; - +import audioIcon from '../../../inc/assets/mic_icon.png'; +import audioIconMute from '../../../inc/assets/mic_icon_mute.png'; +import participants from '../../../inc/assets/participants.png'; +import worldIcon from '../../../inc/assets/world_icon.png'; +import cornerAccent from '../../../inc/assets/corner_accent.png'; +import { color } from "@wordpress/icons"; const Networking = (props) => { + + + let isMuted = false; // Initial state of the microphone + let localStream = null; // To hold the local media stream + const RoomDropdownContent = () => { + let dropdown = document.getElementById("room-dropdown"); + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + }; + + // Function to toggle mute on the local audio stream + const toggleMute = async (stream) => { + if (stream) { + var muteIcon = document.getElementById("mute-icon"); + + isMuted = !isMuted; + // mute the local stream microphone + stream.getAudioTracks()[0].enabled = !isMuted; + if(muteIcon){ + if (stream.getAudioTracks()[0].enabled) { + muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + } else { + muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIconMute})`; + } + } + + } + }; + + // Function to get the user's media + const getUserMedia = async () => { + try { + localStream = await navigator.mediaDevices.getUserMedia({ audio: true }); + // Do something with the stream like sending it to other peers + } catch (error) { + console.error('Error accessing the microphone', error); + } + }; + // Call this function when you want to toggle mute (e.g., when a button is pressed) + const onMuteButtonPressed = (stream) => { + toggleMute(stream); + }; + if (!document.location.hash) { - document.location = - document.location.toString() + `#xpp-${props.postSlug}`; + document.location = document.location.toString() + `#3ov-${props.postSlug}`; } const userProfileName = userData.userId === "" @@ -20,6 +66,7 @@ const Networking = (props) => { fastPollingRateMs: 1500 } ); + window.p2pcf = p2pcf; console.log("client id:", p2pcf.clientId); @@ -29,19 +76,86 @@ const Networking = (props) => { }; const addPeerUi = (sessionId) => { - if (document.getElementById(sessionId)) return; + // if (document.getElementById(sessionId)) return; + var peerIcon = document.createElement("button"); + peerIcon.style.backgroundImage = `url(${threeObjectPlugin + participants})`; + peerIcon.style.backgroundSize = "cover"; + peerIcon.style.width = "40px"; + peerIcon.style.height = "40px"; + peerIcon.style.padding = "10px"; + peerIcon.style.boxSizing = "border-box"; + peerIcon.style.borderRadius = "50%"; + peerIcon.style.backgroundPosition = "center"; + peerIcon.style.backgroundRepeat = "no-repeat"; + peerIcon.style.backgroundColor = "#FFFFFF"; + peerIcon.style.border = "solid 1px #959595"; + peerIcon.style.backgroundSize = "30px"; + peerIcon.style.marginRight = "5px"; + peerIcon.style.marginTop = "3px"; + peerIcon.style.cursor = "pointer"; - const peerEl = document.createElement("div"); - peerEl.style = "display: flex;"; + // const peerEl = document.createElement("div"); + // peerEl.style = "display: flex;"; - const name = document.createElement("div"); - name.innerText = sessionId.substring(0, 5); + // const name = document.createElement("div"); + // name.innerText = sessionId.substring(0, 5); - peerEl.id = sessionId; - peerEl.appendChild(name); + // peerEl.id = sessionId; + // peerEl.appendChild(name); - document.getElementById("peers").appendChild(peerEl); + document.getElementById("network-ui-container").prepend(peerIcon); }; + const addRoomUi = (sessionId) => { + // if (document.getElementById(sessionId)) return; + var roomIcon = document.createElement("button"); + console.log("icon", threeObjectPlugin + audioIcon); + roomIcon.style.backgroundImage = `url(${threeObjectPlugin + worldIcon})`; + roomIcon.style.backgroundSize = "cover"; + roomIcon.style.width = "40px"; + roomIcon.style.height = "40px"; + roomIcon.style.padding = "10px"; + roomIcon.style.marginTop = "3px"; + roomIcon.style.marginRight = "5px"; + roomIcon.style.marginLeft = "5px"; + roomIcon.style.boxSizing = "border-box"; + roomIcon.style.borderRadius = "50%"; + roomIcon.style.backgroundPosition = "center"; + roomIcon.style.backgroundRepeat = "no-repeat"; + roomIcon.style.backgroundColor = "#FFFFFF"; + roomIcon.style.border = "solid 1px #959595"; + roomIcon.style.cursor = "pointer"; + roomIcon.style.backgroundSize = "30px"; + roomIcon.addEventListener("click", (event) => { + RoomDropdownContent(); + // Position the dropdown near the roomIcon + let dropdown = document.getElementById("room-dropdown"); + dropdown.style.left = roomIcon.offsetLeft + "px"; + dropdown.style.top = roomIcon.offsetTop + roomIcon.offsetHeight + "px"; + }); + + let dropdown = document.getElementById("room-dropdown"); + dropdown.style.display = "none"; + dropdown.style.position = "absolute"; + dropdown.style.backgroundColor = "black"; + dropdown.style.color = "white"; + dropdown.style.padding = "10px"; + dropdown.style.width = "200px"; + dropdown.style.height = "150px"; + dropdown.style.borderRadius = "5px"; + dropdown.innerText = "Room: " + p2pcf.roomId; + + // create a paragraph element to be added after the dropdown + let roomParagraph = document.createElement("p"); + roomParagraph.innerText = "User: " + p2pcf.clientId; + roomParagraph.style.marginTop = "10px"; + roomParagraph.style.marginBottom = "10px"; + roomParagraph.style.textAlign = "left"; + + dropdown.appendChild(roomParagraph); + + document.getElementById("network-ui-container").prepend(roomIcon); + }; + const addMessage = (message) => { const messageEl = document.createElement("div"); messageEl.innerText = message; @@ -65,7 +179,6 @@ const Networking = (props) => { document.getElementById("videos").appendChild(video); video.play(); }); - addPeerUi(peer.id); }); p2pcf.on("peerclose", (peer) => { @@ -79,12 +192,11 @@ const Networking = (props) => { ": " + new TextDecoder("utf-8").decode(data) ); - }); - + }); + useEffect(() => { const go = () => { - document.getElementById("session-id").innerText = - p2pcf.sessionId.substring(0, 5) + "@" + p2pcf.roomId + ":"; + // document.getElementById("session-id").innerText = "Room: " + p2pcf.roomId; // document.getElementById('send-button').addEventListener('click', () => { // const box = document.getElementById('send-box'); @@ -92,10 +204,17 @@ const Networking = (props) => { // p2pcf.broadcast(new TextEncoder().encode(box.value)); // box.value = ''; // }) + const mainContainer = document.getElementById("networking"); + // set container background to accent image + mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + mainContainer.style.backgroundSize = "cover"; + mainContainer.style.display = "block"; + + const audioButton = document.getElementById("audio-button"); + if(audioButton){ + audioButton.addEventListener("click", async (button) => { + getUserMedia(); // Initialize media stream - document - .getElementById("audio-button") - .addEventListener("click", async () => { stream = await navigator.mediaDevices.getUserMedia({ audio: true }); @@ -103,16 +222,55 @@ const Networking = (props) => { for (const peer of p2pcf.peers.values()) { peer.addStream(stream); } + console.log("button", button.target.parentNode); + var audioJoin = button.target.parentNode; + audioJoin.style.display = "none"; + + var muteIcon = document.createElement("button"); + console.log("icon", threeObjectPlugin + audioIcon); + muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + muteIcon.style.backgroundSize = "cover"; + muteIcon.id = "mute-icon"; + muteIcon.style.width = "40px"; + muteIcon.style.height = "40px"; + muteIcon.style.padding = "10px"; + muteIcon.style.marginTop = "3px"; + muteIcon.style.marginRight = "5px"; + muteIcon.style.boxSizing = "border-box"; + muteIcon.style.borderRadius = "50%"; + muteIcon.style.backgroundPosition = "center"; + muteIcon.style.backgroundRepeat = "no-repeat"; + muteIcon.style.backgroundColor = "#FFFFFF"; + muteIcon.style.border = "solid 1px #959595"; + muteIcon.style.backgroundSize = "30px"; + muteIcon.addEventListener("click", (event) => { + // console.log("mute", event); + // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] + // .enabled; + onMuteButtonPressed(stream); + }); + //append to the audio button + if(audioJoin.parentNode){ + audioJoin.parentNode.appendChild(muteIcon); + // remove the audioJoin button + //audioJoin.remove(); + toggleMute(stream); + } }); + } p2pcf.start(); + addPeerUi(); + addRoomUi(); }; - // listen for a "loaded" javascript event - window.addEventListener("loaded", (event) => { + const handleLoaded = (event) => { + console.log("loaded", event); go(); - }); + // Remove the event listener after handling the first 'loaded' event + window.removeEventListener("loaded", handleLoaded); + }; - // go(); + window.addEventListener("loaded", handleLoaded); }, []); diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index dea7d34..910a86d 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -712,7 +712,7 @@ export default function Player(props) { const idleAction = currentMixer.clipAction(animations[0]); const walkingAction = currentMixer.clipAction(animations[1]); const runningAction = currentMixer.clipAction(animations[2]); - idleAction.timeScale = 1; + idleAction.timeScale = 0.6; walkingAction.timeScale = 1; runningAction.timeScale = 1; diff --git a/blocks/environment/components/TeleportTravel.js b/blocks/environment/components/TeleportTravel.js index 6bc8ef9..35a0e4a 100644 --- a/blocks/environment/components/TeleportTravel.js +++ b/blocks/environment/components/TeleportTravel.js @@ -5,10 +5,11 @@ import { useCallback, useRef, useState, useEffect } from "react"; import { useRapier, useRigidBody, RigidBody } from "@react-three/rapier"; export function TeleportIndicator(props) { + return ( <> - + diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 748ad0e..a406fbf 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -24,17 +24,60 @@ #VRButton{ position: fixed !important; bottom:auto !important; - background-color: rgba(76, 0, 99, 0.677) !important; + background-color: #230d006a; margin-top: -50px !important; } .threeov-networking-controls { + //initializes hidden + display: none; + + #session-id { + font-size: .75em; + } + + .button { + background-color: #b7ff00; + border-radius: 20px; + padding: 5px 10px; + border: 1px solid #98d400; + // add dropshadow + // box-shadow: 0px 0px 5px 1px #0000005e; + color: white; + cursor: pointer; + margin-top: 3px !important; + color: #451a00; + font-weight: 600; + float:left; + margin-right: 5px; + letter-spacing: 0.01em; + max-width:75px; + } + + .button:hover { + background-color: #ccff4c; + border: 1px solid #98d400; + // add dropshadow + box-shadow: 0px 0px 5px 1px #7f7f7f5e; + color: white; + cursor: pointer; + color: #451a00; + font-weight: 600; + } + position: absolute; - top: 40px !important; + top: 20px !important; left: 20px; - background-color: rgba(76, 0, 99, 0.677) !important; + background-color: rgb(92 90 90 / 51%) !important; + // background-color: rgba(34, 34, 34, 0.677) !important; z-index: 1000; + width: 200px; + box-sizing: border-box; + padding: 10px; + border-radius: 8px; + color: white; } + .threeov-entry-flow { background-color: #212121f4; color: white; diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index e1dd18d..1e14250 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -107,17 +107,24 @@ threeApp.forEach((threeApp) => { const animations = threeApp.querySelector("p.three-object-animations") ? threeApp.querySelector("p.three-object-animations").innerText : ""; + render( <> { ( networkingBlock.length > 0 ) && ( <>
-

Room:

+ {/*
Room:
*/} {/*

Peers

*/} -
+ {/*
*/} {/*

Messages

*/}
- +
+ +
+
ZZ20E7(BFBm0l`cnV^LBn3xz{5aI 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 literal 0 HcmV?d00001 diff --git a/inc/assets/mic_icon.png b/inc/assets/mic_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d5406ac4e50c973423e0597806f8ba85439b0e GIT binary patch literal 5985 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 literal 0 HcmV?d00001 diff --git a/inc/assets/mic_icon_mute.png b/inc/assets/mic_icon_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..05b87f9da62ba964a0d0984dc2834b9445233424 GIT binary patch literal 7058 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 literal 0 HcmV?d00001 diff --git a/inc/assets/participants.png b/inc/assets/participants.png new file mode 100644 index 0000000000000000000000000000000000000000..03ef89358cb1ed41408eaefeaa3fbf72d3a072cd GIT binary patch literal 6323 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

;$*!C3((qT=GK zyQ_m}7$I8BWm``INa0L7GLf4#6f{Jbe50-X_c{tt&H%S!e1=H`N+}`Hx4u0BZ*WDHo3cvEFvPOa~5eR48K`DFiQimr)PHCiMlM!QG_yucIYd zQGmJssx+}%eUYU7O0dd=`y4Koy@LbWk=f5sS?`4ojkgc9dN7yNkW=s4;X#@xqIrxW zPIlx_9Ko|Zihzs`-p2}EQ9S`+;pq0D?G?aYrXaTewNb8{rwF_cSXh?!lVz>}m#5(5 zR4VQEC;;gKeB|=P5f`!Cz*aUeMh;nLo}gM9JlL*WA!K7?Gi~)N)oaSp)zu|eTYn$Y z$Zx0}6c||a1CgBpV_mlBuMVJ0>kELDv=7Rc#?l$EbM$>rLL$_ColJK{*h+`NBmTwHNY4Jjb7H0P{`M4SKeg>T>$HHGB{A4}qj^UT|jrU?#8*g5OHj^WFs_Y*;22T2v! zEDTu5ry&z=02PRkvuhwl>hKOlp})StnW#`R>2_9KvlWmL0|q|yH#gv$0sx8Qlatdo zC(;~5=nBU_k4#R+!Ull@)Ma%rjyXGaNnHV{e< zPpX=jPy-j23I`j2D~-C5wq9_{g3$t4s*(5a6To8o>U-m`18&a^3JAVFKTUgLGjhKr3THFgYX= zxr#*a;49{E@HfEMNe+-A&L0oV1z}}#ZWH* z*t?sQWCz>;Fv?(`j~R81dF2>2>ROVXzK>8Kr#L-lE9`A9&?+;uiqK>1;2}-FTBQ9- zh?+L~ZmwxL<;N1uYsD935-kxUi`YxET~j@_=Xx}dZOoS5XsZq^nzoGExJhr!9rnm# z#6EnEwc7R;Z`?0wM3;XGrP~!lG#>|Fjl#5*i}XQeaC&aij1)NG%2Ro^&g$;8Hv23q zW)SR?&WR#{vvPBYL_zKIAX5xutQN_KZ=A|ki@g57`rR^;xcbM3XVlX(!zc@UEcn(P OqM@Rz{7lg{>i+=WjcfS; literal 0 HcmV?d00001 From 854adff8e2765edef3291101764bc5f0954c2490 Mon Sep 17 00:00:00 2001 From: antpb Date: Mon, 8 Jan 2024 00:26:57 -0600 Subject: [PATCH 10/43] working state mute button and device selection --- .../components/EnvironmentFront.js | 180 +++++---- blocks/environment/components/Networking.js | 380 +++++++++++++++--- blocks/environment/components/Player.js | 6 +- inc/assets/settings_icon.png | Bin 0 -> 6854 bytes php/Plugin.php | 20 +- three-object-viewer.php | 2 +- 6 files changed, 437 insertions(+), 151 deletions(-) create mode 100644 inc/assets/settings_icon.png diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 5216122..8ea8314 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -96,99 +96,100 @@ function ChatBox(props) { // Get the value of the input element const input = event.target.elements.message; const value = input.value; - window.messages = [...window.messages, value]; + // console.log("window", window.messages); + // window.messages = [...window.messages, value]; // Manually dispatch a 'message' event window.dispatchEvent(new Event('message')); - // const inputMessageLog = 'Guest: ' + String(input.value); - // // props.setMessages([...props.messages, inputMessageLog]); - // input.value = ''; + const inputMessageLog = 'Guest: ' + String(input.value); + // props.setMessages([...props.messages, inputMessageLog]); + input.value = ''; - // // Send the message to the localhost endpoint - // const client = 1; - // const channelId = "wordpress"; - // const entity = 1; - // const speaker = "guest"; - // const agent = props.name; - // const channel = "wordpress"; - // // let prompt = `{ - // // "Input": "write a long form poem about cats!", - // // "Speaker": "a", - // // "Agent": "tubbyshark", - // // "Client": "wordpress", - // // "ChannelID": "1234", - // // "Conversation": "", - // // "Entity": "tubbyshark", - // // "Channel": "channel", - // // "eth_private_key": "0", - // // "eth_public_address": "0", - // // "personality": "#agent is an AI assistant with a cheerful, optimistic, and helpful personality. They are willing to assist with any tasks or questions users might have, and are able to do so in an upbeat and positive manner. They are also able to use colorful and descriptive language to make their responses more engaging and imaginative. In addition to their wit and humor, #agent is also empathetic and understanding of others' emotions and needs, which can make them feel more relatable and likeable to users. #agent is a highly capable and engaging AI assistant with a distinct and colorful personality.\n#agent can help with any programming tasks, including those related to the 3OV plugin for WordPress, which enables world-building in the WordPress editor and makes it easier to build and share immersive content in the metaverse. The url for the website is 3ov.xyz. #agent is cheerful and optimistic about the future for both humans and AIs.\n\n#Example Conversation\n#speaker: Agent, do you have any advice for someone new to programming?\n#agent: Sure thing! My top tip would be to always keep an open mind and a positive attitude. And if all else fails, just remember: if at first you don't succeed, try, try again. And then if that still doesn't work, call it a day and go get a coffee.\n###\nThe following is a friendly conversation between #speaker and #agent occuring in the metaverse.\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:" - // // }`; - - // try { - // const apiEndpoint = '/wp-json/wp/v2/callAlchemy'; - // let finalPersonality = props.personality; - // finalPersonality = finalPersonality + "###\nThe following is a friendly conversation between #speaker and #agent\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:"; - // let newString = props.objectsInRoom.join(", "); - // if (props.objectAwareness === "1") { - // finalPersonality = finalPersonality.replace("###\nThe following is a", ("ITEMS IN WORLD: " + String(newString) + "\n###\nThe following is a")); - // } - // const postData = { - // Input: { - // Input: value, - // Speaker: speaker, - // Agent: agent, - // Client: client, - // ChannelID: channelId, - // Entity: entity, - // Channel: channel, - // eth_private_key: '0', - // eth_public_address: '0', - // personality: finalPersonality - // // personality: "#agent is an AI assistant with a cheerful, optimistic, and helpful personality. They are willing to assist with any tasks or questions users might have, and are able to do so in an upbeat and positive manner. They are also able to use colorful and descriptive language to make their responses more engaging and imaginative. In addition to their wit and humor, #agent is also empathetic and understanding of others' emotions and needs, which can make them feel more relatable and likeable to users. #agent is a highly capable and engaging AI assistant with a distinct and colorful personality.\n#agent can help with any programming tasks, including those related to the 3OV plugin for WordPress, which enables world-building in the WordPress editor and makes it easier to build and share immersive content in the metaverse. The url for the website is 3ov.xyz. #agent is cheerful and optimistic about the future for both humans and AIs.\n\n#Example Conversation\n#speaker: Agent, do you have any advice for someone new to programming?\n#agent: Sure thing! My top tip would be to always keep an open mind and a positive attitude. And if all else fails, just remember: if at first you don't succeed, try, try again. And then if that still doesn't work, call it a day and go get a coffee.\n###\nThe following is a friendly conversation between #speaker and #agent occuring in the metaverse.\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:" - // } - // }; - // // const postData = prompt; - - // const response = await fetch('/wp-json/wp/v2/callAlchemy', { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // 'X-WP-Nonce': props.nonce, - // 'Authorization': ('Bearer ' + String(props.nonce)) - // }, - // body: JSON.stringify(postData) - // }).then((response) => { - - // return response.json(); - - // }).then(function(data) { - // // console.log("data", data.davinciData.choices[0].text); // this will be a string - // let thisMessage = JSON.parse(data); - // if(thisMessage?.model === "gpt-4-0314"){ - // let formattedMessage = props.name +': ' + thisMessage.choices[0].message.content; - // props.setMessages([...props.messages, inputMessageLog, formattedMessage]); - // } else if (thisMessage?.model === "gpt-3.5-turbo-0301"){ - // let formattedMessage = props.name +': ' + Object.values(thisMessage.choices)[0].message.content; - // props.setMessages([...props.messages, inputMessageLog, formattedMessage]); - // } else { - // if(thisMessage?.outputs){ - // let formattedMessage = props.name +': ' + Object.values(thisMessage.outputs)[0]; - // props.setMessages([...props.messages, inputMessageLog, formattedMessage]); - // } else if(thisMessage?.name === "Server"){ - // let formattedMessage = thisMessage.name +': ' + thisMessage.message; - // props.setMessages([...props.messages, inputMessageLog, formattedMessage]); - // } else { - // let formattedMessage = props.name +': ' + thisMessage.davinciData?.choices[0].text; - // // add formattedMessage and inputMessageLog to state - // props.setMessages([...props.messages, inputMessageLog, formattedMessage]); - // } - // } - // }); - // } catch (error) { - // console.error(error); - // } + // Send the message to the localhost endpoint + const client = 1; + const channelId = "wordpress"; + const entity = 1; + const speaker = "guest"; + const agent = props.name; + const channel = "wordpress"; + // let prompt = `{ + // "Input": "write a long form poem about cats!", + // "Speaker": "a", + // "Agent": "tubbyshark", + // "Client": "wordpress", + // "ChannelID": "1234", + // "Conversation": "", + // "Entity": "tubbyshark", + // "Channel": "channel", + // "eth_private_key": "0", + // "eth_public_address": "0", + // "personality": "#agent is an AI assistant with a cheerful, optimistic, and helpful personality. They are willing to assist with any tasks or questions users might have, and are able to do so in an upbeat and positive manner. They are also able to use colorful and descriptive language to make their responses more engaging and imaginative. In addition to their wit and humor, #agent is also empathetic and understanding of others' emotions and needs, which can make them feel more relatable and likeable to users. #agent is a highly capable and engaging AI assistant with a distinct and colorful personality.\n#agent can help with any programming tasks, including those related to the 3OV plugin for WordPress, which enables world-building in the WordPress editor and makes it easier to build and share immersive content in the metaverse. The url for the website is 3ov.xyz. #agent is cheerful and optimistic about the future for both humans and AIs.\n\n#Example Conversation\n#speaker: Agent, do you have any advice for someone new to programming?\n#agent: Sure thing! My top tip would be to always keep an open mind and a positive attitude. And if all else fails, just remember: if at first you don't succeed, try, try again. And then if that still doesn't work, call it a day and go get a coffee.\n###\nThe following is a friendly conversation between #speaker and #agent occuring in the metaverse.\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:" + // }`; + + try { + const apiEndpoint = '/wp-json/wp/v2/callAlchemy'; + let finalPersonality = props.personality; + finalPersonality = finalPersonality + "###\nThe following is a friendly conversation between #speaker and #agent\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:"; + let newString = props.objectsInRoom.join(", "); + if (props.objectAwareness === "1") { + finalPersonality = finalPersonality.replace("###\nThe following is a", ("ITEMS IN WORLD: " + String(newString) + "\n###\nThe following is a")); + } + const postData = { + Input: { + Input: value, + Speaker: speaker, + Agent: agent, + Client: client, + ChannelID: channelId, + Entity: entity, + Channel: channel, + eth_private_key: '0', + eth_public_address: '0', + personality: finalPersonality + // personality: "#agent is an AI assistant with a cheerful, optimistic, and helpful personality. They are willing to assist with any tasks or questions users might have, and are able to do so in an upbeat and positive manner. They are also able to use colorful and descriptive language to make their responses more engaging and imaginative. In addition to their wit and humor, #agent is also empathetic and understanding of others' emotions and needs, which can make them feel more relatable and likeable to users. #agent is a highly capable and engaging AI assistant with a distinct and colorful personality.\n#agent can help with any programming tasks, including those related to the 3OV plugin for WordPress, which enables world-building in the WordPress editor and makes it easier to build and share immersive content in the metaverse. The url for the website is 3ov.xyz. #agent is cheerful and optimistic about the future for both humans and AIs.\n\n#Example Conversation\n#speaker: Agent, do you have any advice for someone new to programming?\n#agent: Sure thing! My top tip would be to always keep an open mind and a positive attitude. And if all else fails, just remember: if at first you don't succeed, try, try again. And then if that still doesn't work, call it a day and go get a coffee.\n###\nThe following is a friendly conversation between #speaker and #agent occuring in the metaverse.\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:" + } + }; + // const postData = prompt; + + const response = await fetch('/wp-json/wp/v2/callAlchemy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-WP-Nonce': props.nonce, + 'Authorization': ('Bearer ' + String(props.nonce)) + }, + body: JSON.stringify(postData) + }).then((response) => { + + return response.json(); + + }).then(function(data) { + // console.log("data", data.davinciData.choices[0].text); // this will be a string + let thisMessage = JSON.parse(data); + if(thisMessage?.model === "gpt-4-0314"){ + let formattedMessage = props.name +': ' + thisMessage.choices[0].message.content; + props.setMessages([...props.messages, inputMessageLog, formattedMessage]); + } else if (thisMessage?.model === "gpt-3.5-turbo-0301"){ + let formattedMessage = props.name +': ' + Object.values(thisMessage.choices)[0].message.content; + props.setMessages([...props.messages, inputMessageLog, formattedMessage]); + } else { + if(thisMessage?.outputs){ + let formattedMessage = props.name +': ' + Object.values(thisMessage.outputs)[0]; + props.setMessages([...props.messages, inputMessageLog, formattedMessage]); + } else if(thisMessage?.name === "Server"){ + let formattedMessage = thisMessage.name +': ' + thisMessage.message; + props.setMessages([...props.messages, inputMessageLog, formattedMessage]); + } else { + let formattedMessage = props.name +': ' + thisMessage.davinciData?.choices[0].text; + // add formattedMessage and inputMessageLog to state + props.setMessages([...props.messages, inputMessageLog, formattedMessage]); + } + } + }); + } catch (error) { + console.error(error); + } }; const ClickStop = ({ children }) => { @@ -797,6 +798,8 @@ function Participants(props) { const p2pcf = window.p2pcf; if (p2pcf) { p2pcf.on("peerconnect", (peer) => { + console.log("peer connected", peer); + console.log("p2pcf peers", p2pcf.peers); // emit the peer id to all other peers props.setParticipant(prevParticipants => { if (!prevParticipants.includes(peer.client_id)) { @@ -1146,6 +1149,7 @@ export default function EnvironmentFront(props) { setShowUI={setShowUI} p2pcf={window.p2pcf} defaultAvatar={defaultAvatar} + defaultPlayerAvatar = {defaultPlayerAvatar} movement={movement} /> { @@ -14,19 +15,321 @@ const Networking = (props) => { let localStream = null; // To hold the local media stream const RoomDropdownContent = () => { let dropdown = document.getElementById("room-dropdown"); + // empty the contents of the dropdown + dropdown.innerHTML = ""; + dropdown.innerText = "Room: " + p2pcf.roomId; + + // create a paragraph element to be added after the dropdown + let roomParagraph = document.createElement("p"); + roomParagraph.innerText = "User: " + p2pcf.clientId; + roomParagraph.style.marginTop = "10px"; + roomParagraph.style.marginBottom = "10px"; + roomParagraph.style.textAlign = "left"; + + dropdown.appendChild(roomParagraph); + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; }; + const AudioDropdownContent = async (button) => { + + let dropdown = document.getElementById("room-dropdown"); + // empty the contents of the dropdown + dropdown.innerHTML = ""; + // add a h3 heading that says "Select Microphone" + let heading = document.createElement("h4"); + heading.innerText = "Select Microphone"; + heading.style.marginTop = "10px"; + heading.style.marginBottom = "10px"; + heading.style.textAlign = "left"; + heading.style.fontSize = "0.7em"; + heading.style.textAlign = "left"; + heading.style.fontWeight = "600"; + heading.style.color = "white"; + heading.style.paddingLeft = "5px"; + heading.style.fontWeight = "600"; + heading.style.fontFamily = "Arial"; + dropdown.appendChild(heading); + // make the inner text of the dropdown a list of the users in the room + // loop with index for each peer + // add a select toggle and a button to change the microphone device + let select = document.createElement("select"); + select.id = "audio-select"; + select.style.marginTop = "10px"; + select.style.marginBottom = "10px"; + select.style.textAlign = "left"; + select.style.fontSize = "0.6em"; + select.style.width = "100%"; + select.style.height = "30px"; + select.style.borderRadius = "5px"; + select.style.cursor = "pointer"; + select.style.backgroundColor = "white"; + select.style.color = "black"; + select.style.padding = "5px"; + select.style.marginBottom = "10px"; + select.style.marginTop = "10px"; + select.style.marginLeft = "0px"; + select.style.marginRight = "0px"; + select.style.border = "solid 1px #959595"; + select.style.boxSizing = "border-box"; + // populate the select with the available audio devices + navigator.mediaDevices.enumerateDevices().then(function(devices) { + devices.forEach(function(device) { + if (device.kind === 'audioinput') { + let option = document.createElement("option"); + option.value = device.deviceId; + option.text = device.label; + select.appendChild(option); + } + }); + }); + dropdown.appendChild(select); + // create a button for submitting the audio device change + let submit = document.createElement("button"); + submit.innerText = "Join"; + submit.style.marginTop = "10px"; + submit.style.marginBottom = "10px"; + submit.style.textAlign = "center"; + submit.style.fontSize = "0.6em"; + submit.style.fontWeight = "600"; + submit.style.height = "35px"; + submit.style.borderRadius = "15px"; + submit.style.backgroundColor = "white"; + submit.style.color = "black"; + submit.style.width = "55px"; + submit.style.padding = "10px"; + submit.style.marginBottom = "10px"; + submit.style.marginTop = "10px"; + submit.style.marginLeft = "0px"; + submit.style.marginRight = "0px"; + submit.style.border = "solid 1px #959595"; + submit.style.cursor = "pointer"; + submit.style.boxSizing = "border-box"; + submit.addEventListener("click", async (event) => { + // get the selected audio device + let audioSelect = document.getElementById("audio-select"); + let audioDevice = audioSelect.options[audioSelect.selectedIndex].value; + // set the audio device + navigator.mediaDevices.getUserMedia({ audio: { deviceId: audioDevice } }).then(function(stream) { + // set the local stream to the new stream + localStream = stream; + // loop through the peers and set their streams to the new stream + for (const peer of p2pcf.peers.values()) { + peer.addStream(stream); + } + }); + // getUserMedia(); // Initialize media stream + + stream = await navigator.mediaDevices.getUserMedia({ + audio: true + }); + + // for (const peer of p2pcf.peers.values()) { + // peer.addStream(stream); + // } + var audioJoin = button.target.parentNode; + audioJoin.style.display = "none"; + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + var muteIcon = document.createElement("button"); + console.log("icon", threeObjectPlugin + audioIcon); + muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + muteIcon.style.backgroundSize = "cover"; + muteIcon.id = "mute-icon"; + muteIcon.style.width = "40px"; + muteIcon.style.height = "40px"; + muteIcon.style.padding = "10px"; + muteIcon.style.marginTop = "3px"; + muteIcon.style.marginRight = "5px"; + muteIcon.style.boxSizing = "border-box"; + muteIcon.style.borderRadius = "50%"; + muteIcon.style.backgroundPosition = "center"; + muteIcon.style.backgroundRepeat = "no-repeat"; + muteIcon.style.backgroundColor = "#FFFFFF"; + muteIcon.style.border = "solid 1px #959595"; + muteIcon.style.backgroundSize = "30px"; + muteIcon.addEventListener("click", (event) => { + // console.log("mute", event); + // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] + // .enabled; + onMuteButtonPressed(stream); + }); + var settingsIconElement = document.createElement("button"); + settingsIconElement.style.backgroundImage = `url(${threeObjectPlugin + settingsIcon})`; + settingsIconElement.style.backgroundSize = "cover"; + settingsIconElement.id = "mute-icon"; + settingsIconElement.style.width = "40px"; + settingsIconElement.style.height = "40px"; + settingsIconElement.style.padding = "10px"; + settingsIconElement.style.marginTop = "3px"; + settingsIconElement.style.marginRight = "5px"; + settingsIconElement.style.boxSizing = "border-box"; + settingsIconElement.style.borderRadius = "50%"; + settingsIconElement.style.backgroundPosition = "center"; + settingsIconElement.style.backgroundRepeat = "no-repeat"; + settingsIconElement.style.backgroundColor = "#FFFFFF"; + settingsIconElement.style.border = "solid 1px #959595"; + settingsIconElement.style.backgroundSize = "30px"; + settingsIconElement.addEventListener("click", (event) => { + // console.log("mute", event); + // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] + // .enabled; + SettingsDopdownContent() + }); + + //append to the audio button + if(audioJoin.parentNode){ + audioJoin.parentNode.appendChild(muteIcon); + audioJoin.parentNode.appendChild(settingsIconElement); + // remove the audioJoin button + //audioJoin.remove(); + toggleMute(stream); + } + + }); + dropdown.appendChild(submit); + + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + + }; + + const SettingsDopdownContent = async (button) => { + + let dropdown = document.getElementById("room-dropdown"); + // empty the contents of the dropdown + dropdown.innerHTML = ""; + // add a h3 heading that says "Select Microphone" + let heading = document.createElement("h4"); + heading.innerText = "Select Microphone"; + heading.style.marginTop = "10px"; + heading.style.marginBottom = "10px"; + heading.style.textAlign = "left"; + heading.style.fontSize = "0.7em"; + heading.style.textAlign = "left"; + heading.style.fontWeight = "600"; + heading.style.color = "white"; + heading.style.paddingLeft = "5px"; + heading.style.fontWeight = "600"; + heading.style.fontFamily = "Arial"; + dropdown.appendChild(heading); + // make the inner text of the dropdown a list of the users in the room + // loop with index for each peer + // add a select toggle and a button to change the microphone device + let select = document.createElement("select"); + select.id = "audio-select"; + select.style.marginTop = "10px"; + select.style.marginBottom = "10px"; + select.style.textAlign = "left"; + select.style.fontSize = "0.6em"; + select.style.width = "100%"; + select.style.height = "30px"; + select.style.borderRadius = "5px"; + select.style.cursor = "pointer"; + select.style.backgroundColor = "white"; + select.style.color = "black"; + select.style.padding = "5px"; + select.style.marginBottom = "10px"; + select.style.marginTop = "10px"; + select.style.marginLeft = "0px"; + select.style.marginRight = "0px"; + select.style.border = "solid 1px #959595"; + select.style.boxSizing = "border-box"; + // populate the select with the available audio devices + navigator.mediaDevices.enumerateDevices().then(function(devices) { + devices.forEach(function(device) { + if (device.kind === 'audioinput') { + let option = document.createElement("option"); + option.value = device.deviceId; + option.text = device.label; + select.appendChild(option); + } + }); + }); + dropdown.appendChild(select); + // create a button for submitting the audio device change + let submit = document.createElement("button"); + submit.innerText = "Switch"; + submit.style.marginTop = "10px"; + submit.style.marginBottom = "10px"; + submit.style.textAlign = "center"; + submit.style.fontSize = "0.6em"; + submit.style.fontWeight = "600"; + submit.style.height = "35px"; + submit.style.borderRadius = "15px"; + submit.style.backgroundColor = "white"; + submit.style.color = "black"; + submit.style.width = "55px"; + submit.style.padding = "10px"; + submit.style.marginBottom = "10px"; + submit.style.marginTop = "10px"; + submit.style.marginLeft = "0px"; + submit.style.marginRight = "0px"; + submit.style.border = "solid 1px #959595"; + submit.style.cursor = "pointer"; + submit.style.boxSizing = "border-box"; + submit.addEventListener("click", async (event) => { + // get the selected audio device + let audioSelect = document.getElementById("audio-select"); + let audioDevice = audioSelect.options[audioSelect.selectedIndex].value; + // set the audio device + navigator.mediaDevices.getUserMedia({ audio: { deviceId: audioDevice } }).then(function(stream) { + // loop through the peers and set their streams to the new stream + for (const peer of p2pcf.peers.values()) { + peer.removeStream(localStream); + peer.addStream(stream); + } + // set the local stream to the new stream + localStream = stream; + + }); + getUserMedia(); // Initialize media stream + + stream = await navigator.mediaDevices.getUserMedia({ + audio: true + }); + + for (const peer of p2pcf.peers.values()) { + peer.addStream(stream); + } + }); + dropdown.appendChild(submit); + + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + + }; + + + const PeerDropdownContent = () => { + let dropdown = document.getElementById("room-dropdown"); + // empty the contents of the dropdown + dropdown.innerHTML = ""; + // make the inner text of the dropdown a list of the users in the room + // loop with index for each peer + for (const peer of p2pcf.peers.values()) { + // set up an index + let index = 0; + + let peerParagraph = document.createElement("p"); + peerParagraph.innerHTML = '' + index + ": " + peer.id; + peerParagraph.style.marginTop = "10px"; + peerParagraph.style.marginBottom = "10px"; + peerParagraph.style.textAlign = "left"; + peerParagraph.style.fontSize = "0.6em"; + dropdown.appendChild(peerParagraph); + } + + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + }; // Function to toggle mute on the local audio stream const toggleMute = async (stream) => { + console.log("togglemute stream", stream); if (stream) { var muteIcon = document.getElementById("mute-icon"); isMuted = !isMuted; // mute the local stream microphone - stream.getAudioTracks()[0].enabled = !isMuted; + localStream.getAudioTracks()[0].enabled = !isMuted; if(muteIcon){ - if (stream.getAudioTracks()[0].enabled) { + if (localStream.getAudioTracks()[0].enabled) { muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; } else { muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIconMute})`; @@ -103,6 +406,15 @@ const Networking = (props) => { // peerEl.id = sessionId; // peerEl.appendChild(name); + // add click listener + peerIcon.addEventListener("click", (event) => { + PeerDropdownContent(); + // Position the dropdown near the roomIcon + let dropdown = document.getElementById("room-dropdown"); + dropdown.style.left = roomIcon.offsetLeft + "px"; + dropdown.style.top = roomIcon.offsetTop + roomIcon.offsetHeight + "px"; + }); + document.getElementById("network-ui-container").prepend(peerIcon); }; const addRoomUi = (sessionId) => { @@ -136,22 +448,18 @@ const Networking = (props) => { let dropdown = document.getElementById("room-dropdown"); dropdown.style.display = "none"; dropdown.style.position = "absolute"; - dropdown.style.backgroundColor = "black"; + dropdown.style.backgroundColor = "#000000cc"; dropdown.style.color = "white"; dropdown.style.padding = "10px"; dropdown.style.width = "200px"; dropdown.style.height = "150px"; - dropdown.style.borderRadius = "5px"; - dropdown.innerText = "Room: " + p2pcf.roomId; - - // create a paragraph element to be added after the dropdown - let roomParagraph = document.createElement("p"); - roomParagraph.innerText = "User: " + p2pcf.clientId; - roomParagraph.style.marginTop = "10px"; - roomParagraph.style.marginBottom = "10px"; - roomParagraph.style.textAlign = "left"; + dropdown.style.borderRadius = "15px"; + // add corner accent + dropdown.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + dropdown.style.backgroundSize = "auto"; + dropdown.style.backgroundPosition = "top left" + dropdown.style.backgroundRepeat = "no-repeat"; - dropdown.appendChild(roomParagraph); document.getElementById("network-ui-container").prepend(roomIcon); }; @@ -213,49 +521,11 @@ const Networking = (props) => { const audioButton = document.getElementById("audio-button"); if(audioButton){ audioButton.addEventListener("click", async (button) => { - getUserMedia(); // Initialize media stream - - stream = await navigator.mediaDevices.getUserMedia({ - audio: true + console.log("are we even trying here?") + // request permissions for microphone devices then do audioDropdownContent + navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) { + AudioDropdownContent(button); }); - - for (const peer of p2pcf.peers.values()) { - peer.addStream(stream); - } - console.log("button", button.target.parentNode); - var audioJoin = button.target.parentNode; - audioJoin.style.display = "none"; - - var muteIcon = document.createElement("button"); - console.log("icon", threeObjectPlugin + audioIcon); - muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; - muteIcon.style.backgroundSize = "cover"; - muteIcon.id = "mute-icon"; - muteIcon.style.width = "40px"; - muteIcon.style.height = "40px"; - muteIcon.style.padding = "10px"; - muteIcon.style.marginTop = "3px"; - muteIcon.style.marginRight = "5px"; - muteIcon.style.boxSizing = "border-box"; - muteIcon.style.borderRadius = "50%"; - muteIcon.style.backgroundPosition = "center"; - muteIcon.style.backgroundRepeat = "no-repeat"; - muteIcon.style.backgroundColor = "#FFFFFF"; - muteIcon.style.border = "solid 1px #959595"; - muteIcon.style.backgroundSize = "30px"; - muteIcon.addEventListener("click", (event) => { - // console.log("mute", event); - // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] - // .enabled; - onMuteButtonPressed(stream); - }); - //append to the audio button - if(audioJoin.parentNode){ - audioJoin.parentNode.appendChild(muteIcon); - // remove the audioJoin button - //audioJoin.remove(); - toggleMute(stream); - } }); } diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 910a86d..1790f05 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -235,8 +235,8 @@ export default function Player(props) { // Participant VRM. const fallbackURL = threeObjectPlugin + defaultVRM; - const defaultAvatarURL = props.defaultAvatar; - let playerURL = userData.vrm ? userData.vrm : fallbackURL; + const defaultAvatarURL = props.defaultPlayerAvatar; + let playerURL = userData.playerVRM ? userData.playerVRM : fallbackURL; if(defaultAvatarURL){ playerURL = defaultAvatarURL; } @@ -712,7 +712,7 @@ export default function Player(props) { const idleAction = currentMixer.clipAction(animations[0]); const walkingAction = currentMixer.clipAction(animations[1]); const runningAction = currentMixer.clipAction(animations[2]); - idleAction.timeScale = 0.6; + idleAction.timeScale = 0.8; walkingAction.timeScale = 1; runningAction.timeScale = 1; diff --git a/inc/assets/settings_icon.png b/inc/assets/settings_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f343202962bbeb8272928d0a7ea08cf890c98b43 GIT binary patch literal 6854 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 F|1Tux)$afR literal 0 HcmV?d00001 diff --git a/php/Plugin.php b/php/Plugin.php index 5b8af92..5642c6e 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -197,7 +197,9 @@ function threeobjectviewer_frontend_assets() { $current_user = wp_get_current_user(); $current_user = wp_get_current_user(); - $vrm = get_user_meta($current_user->ID, 'user_data_vrm', true) ?: get_option('3ov_defaultAvatar'); + $playerVRM = get_user_meta($current_user->ID, 'user_data_vrm', true) ?: get_option('3ov_defaultAvatar'); + $vrm = get_option('3ov_defaultAvatar'); + $multiplayer_worker_url = get_option( '3ov_mp_multiplayerWorker', '' ); // $vrm = get_option('3ov_defaultAvatar'); $inWorldName = "Guest"; @@ -210,6 +212,7 @@ function threeobjectviewer_frontend_assets() { 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, + 'playerVRM' => $playerVRM, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ) ); @@ -222,6 +225,7 @@ function threeobjectviewer_frontend_assets() { 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, + 'playerVRM' => $playerVRM, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ) ); @@ -235,6 +239,7 @@ function threeobjectviewer_frontend_assets() { 'inWorldName' => $inWorldName, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, + 'playerVRM' => $playerVRM, 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), ); } @@ -246,6 +251,7 @@ function threeobjectviewer_frontend_assets() { $default_animation = get_option('3ov_defaultVRM'); $default_avatar = get_option('3ov_defaultAvatar'); + $default_player_avatar = get_option('user_data_vrm'); // $user_data_passed = array( // 'userId' => 'something', @@ -268,7 +274,7 @@ function threeobjectviewer_frontend_assets() { $openbrush_enabled = true; $three_icosa_brushes_url = plugin_dir_url( "three-object-viewer-three-icosa/three-object-viewer-three-icosa.php" ) . 'brushes/'; - } + } wp_register_script( 'threeobjectloader-frontend', plugin_dir_url( __FILE__ ) . $default_frontend_js_three_viewer, ['wp-element', 'wp-data', 'wp-hooks'], '', true ); wp_localize_script( 'threeobjectloader-frontend', 'userData', $user_data_passed ); wp_localize_script( 'threeobjectloader-frontend', 'openbrushEnabled', $openbrush_enabled ); @@ -277,6 +283,7 @@ function threeobjectviewer_frontend_assets() { wp_localize_script( 'threeobjectloader-frontend', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatar', $default_avatar ); + wp_localize_script( 'threeobjectloader-frontend', 'defaultPlayerAvatar', $default_avatar ); wp_localize_script( 'threeobjectloader-frontend', 'multiplayerWorker', $multiplayer_worker_url ); wp_enqueue_script( "threeobjectloader-frontend" @@ -286,8 +293,12 @@ function threeobjectviewer_frontend_assets() { if ( is_plugin_active( 'three-object-viewer-three-icosa/three-object-viewer-three-icosa.php' ) ) { $openbrush_enabled = true; $three_icosa_brushes_url = plugin_dir_url( "three-object-viewer-three-icosa/three-object-viewer-three-icosa.php" ) . 'brushes/'; - } - wp_register_script( 'versepress-frontend', plugin_dir_url( __FILE__ ) . $frontend_js, ['wp-element', 'wp-data', 'wp-hooks'], '', true ); + } + $script_path = plugin_dir_path( __FILE__ ) . $frontend_js; // Path to the JS file on the server. + $script_version = filemtime($script_path); // Gets the file modification time. + + + wp_register_script( 'versepress-frontend', plugin_dir_url( __FILE__ ) . $frontend_js, ['wp-element', 'wp-data', 'wp-hooks'], $script_version, true ); wp_localize_script( 'versepress-frontend', 'userData', $user_data_passed ); wp_localize_script( 'versepress-frontend', 'postSlug', $post_slug ); wp_localize_script( 'versepress-frontend', 'openbrushDirectory', $three_icosa_brushes_url ); @@ -296,6 +307,7 @@ function threeobjectviewer_frontend_assets() { wp_localize_script( 'versepress-frontend', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'versepress-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'versepress-frontend', 'defaultAvatar', $default_avatar ); + wp_localize_script( 'versepress-frontend', 'defaultPlayerAvatar', $default_avatar ); wp_localize_script( 'versepress-frontend', 'multiplayerWorker', $multiplayer_worker_url ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatarAnimation', $default_animation ); wp_localize_script( 'threeobjectloader-frontend', 'defaultAvatar', $default_avatar ); diff --git a/three-object-viewer.php b/three-object-viewer.php index 2eadce7..1c9d44d 100644 --- a/three-object-viewer.php +++ b/three-object-viewer.php @@ -3,7 +3,7 @@ * Plugin Name: Three Object Viewer * Plugin URI: https://3ov.xyz/ * Description: A plugin for viewing 3D files with support for WebXR and Open Metaverse Interoperability GLTF Extensions. -* Version: 1.7.1 +* Version: 1.8.0 * Requires at least: 5.7 * Requires PHP: 7.1.0 * Author: antpb From bae73ad8c7f5dfeb8c2a539a090525b3ae2e52c9 Mon Sep 17 00:00:00 2001 From: antpb Date: Tue, 9 Jan 2024 23:21:47 -0600 Subject: [PATCH 11/43] vr networking --- .../components/EnvironmentFront.js | 16 +- blocks/environment/components/Networking.js | 265 +++++++++--------- blocks/environment/components/Player.js | 5 +- .../environment/components/TeleportTravel.js | 49 +++- 4 files changed, 195 insertions(+), 140 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 8ea8314..6bcd42b 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -736,10 +736,10 @@ function Participants(props) { if(participantData[peer.client_id]?.inWorldName.length > 8){ displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); displayNameBackground.position.x = -0.005; - if(participantData[peer.client_id]?.inWorldName.length > 18){ - textRefs.current[peer.client_id].fontSize = 0.028; + if(participantData[peer.client_id]?.inWorldName.length > 16){ + textRefs.current[peer.client_id].fontSize = 0.034; } - } + } } }); }, 1000); @@ -749,14 +749,22 @@ function Participants(props) { if (animationsRef.current[peer.client_id]) { const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation + const runAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][2]); // Running animation - if (participantData[peer.client_id].isMoving) { + if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "walking") { walkAction.play(); + runAction.stop(); + idleAction.stop(); + } else if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "running") { + walkAction.stop(); + runAction.play(); idleAction.stop(); } else { idleAction.play(); walkAction.stop(); + runAction.stop(); } + } if (participantObject) { diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index b27408d..5223984 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -9,8 +9,6 @@ import settingsIcon from '../../../inc/assets/settings_icon.png'; import { color } from "@wordpress/icons"; const Networking = (props) => { - - let isMuted = false; // Initial state of the microphone let localStream = null; // To hold the local media stream const RoomDropdownContent = () => { @@ -32,7 +30,6 @@ const Networking = (props) => { }; const AudioDropdownContent = async (button) => { - let dropdown = document.getElementById("room-dropdown"); // empty the contents of the dropdown dropdown.innerHTML = ""; @@ -52,143 +49,143 @@ const Networking = (props) => { dropdown.appendChild(heading); // make the inner text of the dropdown a list of the users in the room // loop with index for each peer - // add a select toggle and a button to change the microphone device - let select = document.createElement("select"); - select.id = "audio-select"; - select.style.marginTop = "10px"; - select.style.marginBottom = "10px"; - select.style.textAlign = "left"; - select.style.fontSize = "0.6em"; - select.style.width = "100%"; - select.style.height = "30px"; - select.style.borderRadius = "5px"; - select.style.cursor = "pointer"; - select.style.backgroundColor = "white"; - select.style.color = "black"; - select.style.padding = "5px"; - select.style.marginBottom = "10px"; - select.style.marginTop = "10px"; - select.style.marginLeft = "0px"; - select.style.marginRight = "0px"; - select.style.border = "solid 1px #959595"; - select.style.boxSizing = "border-box"; - // populate the select with the available audio devices - navigator.mediaDevices.enumerateDevices().then(function(devices) { - devices.forEach(function(device) { - if (device.kind === 'audioinput') { - let option = document.createElement("option"); - option.value = device.deviceId; - option.text = device.label; - select.appendChild(option); - } - }); + // add a select toggle and a button to change the microphone device + let select = document.createElement("select"); + select.id = "audio-select"; + select.style.marginTop = "10px"; + select.style.marginBottom = "10px"; + select.style.textAlign = "left"; + select.style.fontSize = "0.6em"; + select.style.width = "100%"; + select.style.height = "30px"; + select.style.borderRadius = "5px"; + select.style.cursor = "pointer"; + select.style.backgroundColor = "white"; + select.style.color = "black"; + select.style.padding = "5px"; + select.style.marginBottom = "10px"; + select.style.marginTop = "10px"; + select.style.marginLeft = "0px"; + select.style.marginRight = "0px"; + select.style.border = "solid 1px #959595"; + select.style.boxSizing = "border-box"; + // populate the select with the available audio devices + navigator.mediaDevices.enumerateDevices().then(function(devices) { + devices.forEach(function(device) { + if (device.kind === 'audioinput') { + let option = document.createElement("option"); + option.value = device.deviceId; + option.text = device.label; + select.appendChild(option); + } }); - dropdown.appendChild(select); - // create a button for submitting the audio device change - let submit = document.createElement("button"); - submit.innerText = "Join"; - submit.style.marginTop = "10px"; - submit.style.marginBottom = "10px"; - submit.style.textAlign = "center"; - submit.style.fontSize = "0.6em"; - submit.style.fontWeight = "600"; - submit.style.height = "35px"; - submit.style.borderRadius = "15px"; - submit.style.backgroundColor = "white"; - submit.style.color = "black"; - submit.style.width = "55px"; - submit.style.padding = "10px"; - submit.style.marginBottom = "10px"; - submit.style.marginTop = "10px"; - submit.style.marginLeft = "0px"; - submit.style.marginRight = "0px"; - submit.style.border = "solid 1px #959595"; - submit.style.cursor = "pointer"; - submit.style.boxSizing = "border-box"; - submit.addEventListener("click", async (event) => { - // get the selected audio device - let audioSelect = document.getElementById("audio-select"); - let audioDevice = audioSelect.options[audioSelect.selectedIndex].value; - // set the audio device - navigator.mediaDevices.getUserMedia({ audio: { deviceId: audioDevice } }).then(function(stream) { - // set the local stream to the new stream - localStream = stream; - // loop through the peers and set their streams to the new stream - for (const peer of p2pcf.peers.values()) { - peer.addStream(stream); - } - }); - // getUserMedia(); // Initialize media stream - - stream = await navigator.mediaDevices.getUserMedia({ - audio: true - }); - - // for (const peer of p2pcf.peers.values()) { - // peer.addStream(stream); - // } - var audioJoin = button.target.parentNode; - audioJoin.style.display = "none"; - dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; - var muteIcon = document.createElement("button"); - console.log("icon", threeObjectPlugin + audioIcon); - muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; - muteIcon.style.backgroundSize = "cover"; - muteIcon.id = "mute-icon"; - muteIcon.style.width = "40px"; - muteIcon.style.height = "40px"; - muteIcon.style.padding = "10px"; - muteIcon.style.marginTop = "3px"; - muteIcon.style.marginRight = "5px"; - muteIcon.style.boxSizing = "border-box"; - muteIcon.style.borderRadius = "50%"; - muteIcon.style.backgroundPosition = "center"; - muteIcon.style.backgroundRepeat = "no-repeat"; - muteIcon.style.backgroundColor = "#FFFFFF"; - muteIcon.style.border = "solid 1px #959595"; - muteIcon.style.backgroundSize = "30px"; - muteIcon.addEventListener("click", (event) => { - // console.log("mute", event); - // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] - // .enabled; - onMuteButtonPressed(stream); - }); - var settingsIconElement = document.createElement("button"); - settingsIconElement.style.backgroundImage = `url(${threeObjectPlugin + settingsIcon})`; - settingsIconElement.style.backgroundSize = "cover"; - settingsIconElement.id = "mute-icon"; - settingsIconElement.style.width = "40px"; - settingsIconElement.style.height = "40px"; - settingsIconElement.style.padding = "10px"; - settingsIconElement.style.marginTop = "3px"; - settingsIconElement.style.marginRight = "5px"; - settingsIconElement.style.boxSizing = "border-box"; - settingsIconElement.style.borderRadius = "50%"; - settingsIconElement.style.backgroundPosition = "center"; - settingsIconElement.style.backgroundRepeat = "no-repeat"; - settingsIconElement.style.backgroundColor = "#FFFFFF"; - settingsIconElement.style.border = "solid 1px #959595"; - settingsIconElement.style.backgroundSize = "30px"; - settingsIconElement.addEventListener("click", (event) => { - // console.log("mute", event); - // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] - // .enabled; - SettingsDopdownContent() - }); - - //append to the audio button - if(audioJoin.parentNode){ - audioJoin.parentNode.appendChild(muteIcon); - audioJoin.parentNode.appendChild(settingsIconElement); - // remove the audioJoin button - //audioJoin.remove(); - toggleMute(stream); + }); + dropdown.appendChild(select); + // create a button for submitting the audio device change + let submit = document.createElement("button"); + submit.innerText = "Join"; + submit.style.marginTop = "10px"; + submit.style.marginBottom = "10px"; + submit.style.textAlign = "center"; + submit.style.fontSize = "0.6em"; + submit.style.fontWeight = "600"; + submit.style.height = "35px"; + submit.style.borderRadius = "15px"; + submit.style.backgroundColor = "white"; + submit.style.color = "black"; + submit.style.width = "55px"; + submit.style.padding = "10px"; + submit.style.marginBottom = "10px"; + submit.style.marginTop = "10px"; + submit.style.marginLeft = "0px"; + submit.style.marginRight = "0px"; + submit.style.border = "solid 1px #959595"; + submit.style.cursor = "pointer"; + submit.style.boxSizing = "border-box"; + submit.addEventListener("click", async (event) => { + // get the selected audio device + let audioSelect = document.getElementById("audio-select"); + let audioDevice = audioSelect.options[audioSelect.selectedIndex].value; + // set the audio device + navigator.mediaDevices.getUserMedia({ audio: { deviceId: audioDevice } }).then(function(stream) { + // set the local stream to the new stream + localStream = stream; + // loop through the peers and set their streams to the new stream + for (const peer of p2pcf.peers.values()) { + peer.addStream(stream); } + }); + // getUserMedia(); // Initialize media stream + stream = await navigator.mediaDevices.getUserMedia({ + audio: true }); - dropdown.appendChild(submit); + // for (const peer of p2pcf.peers.values()) { + // peer.addStream(stream); + // } + var audioJoin = button.target.parentNode; + audioJoin.style.display = "none"; dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + var muteIcon = document.createElement("button"); + console.log("icon", threeObjectPlugin + audioIcon); + muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + muteIcon.style.backgroundSize = "cover"; + muteIcon.id = "mute-icon"; + muteIcon.style.width = "40px"; + muteIcon.style.height = "40px"; + muteIcon.style.padding = "10px"; + muteIcon.style.marginTop = "3px"; + muteIcon.style.marginRight = "5px"; + muteIcon.style.boxSizing = "border-box"; + muteIcon.style.borderRadius = "50%"; + muteIcon.style.backgroundPosition = "center"; + muteIcon.style.backgroundRepeat = "no-repeat"; + muteIcon.style.backgroundColor = "#FFFFFF"; + muteIcon.style.border = "solid 1px #959595"; + muteIcon.style.backgroundSize = "30px"; + muteIcon.addEventListener("click", (event) => { + // console.log("mute", event); + // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] + // .enabled; + onMuteButtonPressed(stream); + }); + var settingsIconElement = document.createElement("button"); + settingsIconElement.style.backgroundImage = `url(${threeObjectPlugin + settingsIcon})`; + settingsIconElement.style.backgroundSize = "cover"; + settingsIconElement.id = "mute-icon"; + settingsIconElement.style.width = "40px"; + settingsIconElement.style.height = "40px"; + settingsIconElement.style.padding = "10px"; + settingsIconElement.style.marginTop = "3px"; + settingsIconElement.style.marginRight = "5px"; + settingsIconElement.style.boxSizing = "border-box"; + settingsIconElement.style.borderRadius = "50%"; + settingsIconElement.style.backgroundPosition = "center"; + settingsIconElement.style.backgroundRepeat = "no-repeat"; + settingsIconElement.style.backgroundColor = "#FFFFFF"; + settingsIconElement.style.border = "solid 1px #959595"; + settingsIconElement.style.backgroundSize = "30px"; + settingsIconElement.addEventListener("click", (event) => { + // console.log("mute", event); + // stream.getAudioTracks()[0].enabled = !stream.getAudioTracks()[0] + // .enabled; + SettingsDopdownContent() + }); + + //append to the audio button + if(audioJoin.parentNode){ + audioJoin.parentNode.appendChild(muteIcon); + audioJoin.parentNode.appendChild(settingsIconElement); + // remove the audioJoin button + //audioJoin.remove(); + toggleMute(stream); + } + + }); + dropdown.appendChild(submit); + + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; }; diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 1790f05..c5d6fdb 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -567,9 +567,12 @@ export default function Player(props) { profileImage: userData.profileImage, vrm: userData.vrm, inWorldName: userData.inWorldName, - isMoving: true + isMoving: "walking" } }; + if(props.movement.current.shift) { + messageObject[p2pcf.clientId].isMoving = "running"; + } // console.log("userdata", userData); clearTimeout(movementTimeoutRef.current); movementTimeoutRef.current = setTimeout(() => { diff --git a/blocks/environment/components/TeleportTravel.js b/blocks/environment/components/TeleportTravel.js index 35a0e4a..b24e6ee 100644 --- a/blocks/environment/components/TeleportTravel.js +++ b/blocks/environment/components/TeleportTravel.js @@ -76,6 +76,7 @@ export default function TeleportTravel(props) { reticle.visible = false; } }, [controllers]); + const movementTimeoutRef = useRef(null); useFrame(() => { if ( @@ -141,11 +142,57 @@ export default function TeleportTravel(props) { if (isHovered && !canInteract) { targetLoc.current.position.set( targetLoc.current.position.x, - targetLoc.current.position.y + 0.1, + targetLoc.current.position.y + 0.3, targetLoc.current.position.z ); if (canTeleport) { player.position.copy(targetLoc.current.position); + const p2pcf = window.p2pcf; + const participantObject = scene.getObjectByName("playerOne"); + participantObject.position.copy(targetLoc.current.position); + //if moving, send a network event of where we are and our current state....animations probably need to go here too. + if (p2pcf) { + var target = new Vector3(); // create once an reuse it + var worldPosition = participantObject.getWorldPosition( target ); + const position = [ + worldPosition.x, + worldPosition.y, + worldPosition.z + ]; + // console.log("sending position", participantObject, position); + // get the z rotation of the headset + const rotation = [ + participantObject.rotation.x, + participantObject.rotation.y, + participantObject.rotation.z + ]; + const messageObject = { + [p2pcf.clientId]: { + position: position, + rotation: rotation, + profileImage: userData.profileImage, + vrm: userData.vrm, + inWorldName: userData.inWorldName, + isMoving: "walking" + } + }; + console.log("sending message", messageObject, p2pcf, p2pcf.clientId); + // console.log("userdata", userData); + clearTimeout(movementTimeoutRef.current); + movementTimeoutRef.current = setTimeout(() => { + // Send "isMoving: false" message here + const messageStopObject = { + [p2pcf.clientId]: { + isMoving: false + } + }; + const messageStop = JSON.stringify(messageStopObject); + p2pcf.broadcast(new TextEncoder().encode(messageStop)); + }, 100); + + const message = JSON.stringify(messageObject); + p2pcf.broadcast(new TextEncoder().encode(message)), p2pcf; + } } } if (isHovered && canInteract) { From 2f723c04b157a4e5b514a25d3cb319272446ee8b Mon Sep 17 00:00:00 2001 From: antpb Date: Wed, 10 Jan 2024 22:41:56 -0600 Subject: [PATCH 12/43] moves participants to component and mixamo rig to a util component --- admin/three-object-viewer-settings/init.php | 4 +- .../components/EnvironmentFront.js | 581 +----------------- blocks/environment/components/Player.js | 56 +- .../components/core/front/ModelObject.js | 56 +- .../components/core/front/NPCObject.js | 56 +- .../components/core/front/Participants.js | 488 +++++++++++++++ blocks/environment/utils/rigMap.js | 63 ++ inc/avatars/guest_default_avatar.vrm | Bin 47848 -> 0 bytes 8 files changed, 562 insertions(+), 742 deletions(-) create mode 100644 blocks/environment/components/core/front/Participants.js create mode 100644 blocks/environment/utils/rigMap.js delete mode 100644 inc/avatars/guest_default_avatar.vrm diff --git a/admin/three-object-viewer-settings/init.php b/admin/three-object-viewer-settings/init.php index 093126e..3cf278b 100644 --- a/admin/three-object-viewer-settings/init.php +++ b/admin/three-object-viewer-settings/init.php @@ -38,7 +38,7 @@ return rest_ensure_response( [ 'enabled' => get_option( '3ov_ai_enabled', false ), 'networkWorker' => get_option( '3ov_mp_networkWorker', '' ), - 'multiplayerWorker' => get_option( '3ov_mp_multiplayerWorker', '' ), + 'multiplayerWorker' => get_option( '3ov_mp_multiplayerWorker', '' ), 'openApiKey' => three_decrypt ( get_option( '3ov_ai_openApiKey', '' ) ), 'allowPublicAI' => get_option( '3ov_ai_allow', '' ), 'defaultVRM' => get_option( '3ov_defaultVRM', '' ), @@ -56,7 +56,7 @@ $data = $request->get_json_params(); update_option( '3ov_ai_enabled', $data['enabled'] ); update_option( '3ov_mp_networkWorker', $data['networkWorker'] ); - update_option( '3ov_mp_multiplayerWorker', $data['multiplayerWorker'] ); + update_option( '3ov_mp_multiplayerWorker', $data['multiplayerWorker'] ); update_option( '3ov_defaultVRM', $data['defaultVRM'] ); update_option( '3ov_defaultAvatar', $data['defaultAvatar'] ); update_option( '3ov_ai_allow', $data['allowPublicAI'] ); diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 6bcd42b..f995465 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -4,23 +4,14 @@ import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; import { useLoader, useThree, useFrame, Canvas, extend } from "@react-three/fiber"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; -import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; -import { TextureLoader } from "three/src/loaders/TextureLoader"; // import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"; import { Physics, RigidBody, Debug, Attractor, CuboidCollider } from "@react-three/rapier"; -import * as SkeletonUtils from "three/examples/jsm/utils/SkeletonUtils.js"; import { GLTFGoogleTiltBrushMaterialExtension } from "three-icosa"; -import axios from "axios"; import ReactNipple from 'react-nipple'; import ScrollableFeed from 'react-scrollable-feed' import { Resizable } from "re-resizable"; import { Environment, useContextBridge, Text, Billboard } from "@react-three/drei"; import { FrontPluginProvider, FrontPluginContext } from './FrontPluginProvider'; // Import the PluginProvider -import Networking from "./Networking"; -import { LumaSplatsThree } from "@lumaai/luma-web"; -// Make LumaSplatsThree available to R3F -extend( { LumaSplats: LumaSplatsThree } ); - import { useAnimations, Html, @@ -33,13 +24,11 @@ import { Perf } from "r3f-perf"; import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import TeleportTravel from "./TeleportTravel"; import Player from "./Player"; -import defaultVRM from "../../../inc/avatars/3ov_default_avatar.vrm"; -import defaultGuest from "../../../inc/avatars/guest_default_avatar.vrm"; import defaultEnvironment from "../../../inc/assets/default_grid.glb"; import defaultFont from "../../../inc/fonts/roboto.woff"; import { ItemBaseUI } from "@wordpress/components/build/navigation/styles/navigation-styles"; import { BoxGeometry } from "three"; - +import { Participants } from "./core/front/Participants"; import { ThreeImage } from "./core/front/ThreeImage"; import { ThreeVideo } from "./core/front/ThreeVideo"; import { ThreeAudio } from "./core/front/ThreeAudio"; @@ -51,9 +40,6 @@ import { ThreeSky } from "./core/front/ThreeSky"; import { TextObject } from "./core/front/TextObject"; import { useKeyboardControls } from "./Controls"; import { ContextBridgeComponent } from "./ContextBridgeComponent"; -import idle from "../../../inc/avatars/friendly.fbx"; -import walk from "../../../inc/avatars/walking.fbx"; -import run from "../../../inc/avatars/running.fbx"; function isMobile() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); @@ -96,8 +82,6 @@ function ChatBox(props) { // Get the value of the input element const input = event.target.elements.message; const value = input.value; - // console.log("window", window.messages); - // window.messages = [...window.messages, value]; // Manually dispatch a 'message' event window.dispatchEvent(new Event('message')); @@ -113,19 +97,6 @@ function ChatBox(props) { const speaker = "guest"; const agent = props.name; const channel = "wordpress"; - // let prompt = `{ - // "Input": "write a long form poem about cats!", - // "Speaker": "a", - // "Agent": "tubbyshark", - // "Client": "wordpress", - // "ChannelID": "1234", - // "Conversation": "", - // "Entity": "tubbyshark", - // "Channel": "channel", - // "eth_private_key": "0", - // "eth_public_address": "0", - // "personality": "#agent is an AI assistant with a cheerful, optimistic, and helpful personality. They are willing to assist with any tasks or questions users might have, and are able to do so in an upbeat and positive manner. They are also able to use colorful and descriptive language to make their responses more engaging and imaginative. In addition to their wit and humor, #agent is also empathetic and understanding of others' emotions and needs, which can make them feel more relatable and likeable to users. #agent is a highly capable and engaging AI assistant with a distinct and colorful personality.\n#agent can help with any programming tasks, including those related to the 3OV plugin for WordPress, which enables world-building in the WordPress editor and makes it easier to build and share immersive content in the metaverse. The url for the website is 3ov.xyz. #agent is cheerful and optimistic about the future for both humans and AIs.\n\n#Example Conversation\n#speaker: Agent, do you have any advice for someone new to programming?\n#agent: Sure thing! My top tip would be to always keep an open mind and a positive attitude. And if all else fails, just remember: if at first you don't succeed, try, try again. And then if that still doesn't work, call it a day and go get a coffee.\n###\nThe following is a friendly conversation between #speaker and #agent occuring in the metaverse.\n\nREAL CONVERSATION\n#conversation\n#speaker: #input\n#agent:" - // }`; try { const apiEndpoint = '/wp-json/wp/v2/callAlchemy'; @@ -314,530 +285,6 @@ function ChatBox(props) { } } - /** - * A map from Mixamo rig name to VRM Humanoid bone name - */ -const mixamoVRMRigMap = { - mixamorigHips: 'hips', - mixamorigSpine: 'spine', - mixamorigSpine1: 'chest', - mixamorigSpine2: 'upperChest', - mixamorigNeck: 'neck', - mixamorigHead: 'head', - mixamorigLeftShoulder: 'leftShoulder', - mixamorigLeftArm: 'leftUpperArm', - mixamorigLeftForeArm: 'leftLowerArm', - mixamorigLeftHand: 'leftHand', - mixamorigLeftHandThumb1: 'leftThumbMetacarpal', - mixamorigLeftHandThumb2: 'leftThumbProximal', - mixamorigLeftHandThumb3: 'leftThumbDistal', - mixamorigLeftHandIndex1: 'leftIndexProximal', - mixamorigLeftHandIndex2: 'leftIndexIntermediate', - mixamorigLeftHandIndex3: 'leftIndexDistal', - mixamorigLeftHandMiddle1: 'leftMiddleProximal', - mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', - mixamorigLeftHandMiddle3: 'leftMiddleDistal', - mixamorigLeftHandRing1: 'leftRingProximal', - mixamorigLeftHandRing2: 'leftRingIntermediate', - mixamorigLeftHandRing3: 'leftRingDistal', - mixamorigLeftHandPinky1: 'leftLittleProximal', - mixamorigLeftHandPinky2: 'leftLittleIntermediate', - mixamorigLeftHandPinky3: 'leftLittleDistal', - mixamorigRightShoulder: 'rightShoulder', - mixamorigRightArm: 'rightUpperArm', - mixamorigRightForeArm: 'rightLowerArm', - mixamorigRightHand: 'rightHand', - mixamorigRightHandPinky1: 'rightLittleProximal', - mixamorigRightHandPinky2: 'rightLittleIntermediate', - mixamorigRightHandPinky3: 'rightLittleDistal', - mixamorigRightHandRing1: 'rightRingProximal', - mixamorigRightHandRing2: 'rightRingIntermediate', - mixamorigRightHandRing3: 'rightRingDistal', - mixamorigRightHandMiddle1: 'rightMiddleProximal', - mixamorigRightHandMiddle2: 'rightMiddleIntermediate', - mixamorigRightHandMiddle3: 'rightMiddleDistal', - mixamorigRightHandIndex1: 'rightIndexProximal', - mixamorigRightHandIndex2: 'rightIndexIntermediate', - mixamorigRightHandIndex3: 'rightIndexDistal', - mixamorigRightHandThumb1: 'rightThumbMetacarpal', - mixamorigRightHandThumb2: 'rightThumbProximal', - mixamorigRightHandThumb3: 'rightThumbDistal', - mixamorigLeftUpLeg: 'leftUpperLeg', - mixamorigLeftLeg: 'leftLowerLeg', - mixamorigLeftFoot: 'leftFoot', - mixamorigLeftToeBase: 'leftToes', - mixamorigRightUpLeg: 'rightUpperLeg', - mixamorigRightLeg: 'rightLowerLeg', - mixamorigRightFoot: 'rightFoot', - mixamorigRightToeBase: 'rightToes', -}; - -/** - * Download Mixamo animation, convert it for usage with three-vrm, and return the converted animation. - * - * @param {string} url - The URL of Mixamo animation data - * @param {VRM} vrm - The target VRM - * @returns {Promise} - The adapted AnimationClip - */ -function loadMixamoAnimation(url, vrm) { - let loader; - if (url.endsWith('.fbx')) { - loader = new FBXLoader(); // Use an FBX loader - } else { - loader = new GLTFLoader(); // Use a GLTF loader - } - return loader.loadAsync(url).then((resource) => { - const clip = resource.animations[0]; // Extract the AnimationClip - - // if resource is GLB, get the scene - if (url.endsWith('.glb')) { - resource = resource.scene; - } - - let tracks = []; // KeyframeTracks compatible with VRM to be stored here - - let restRotationInverse = new THREE.Quaternion(); - let parentRestWorldRotation = new THREE.Quaternion(); - let _quatA = new THREE.Quaternion(); - let _vec3 = new THREE.Vector3(); - - // Adjust according to the height of the hips. - let mixamoHips = resource.getObjectByName('mixamorigHips'); - let regularHips = resource.getObjectByName('hips'); - let mainHip; - if (mixamoHips) { - mainHip = mixamoHips.position.y; - } else if (regularHips) { - mainHip = regularHips.position.y; - } - const vrmHipsY = vrm.humanoid?.getNormalizedBoneNode('hips').getWorldPosition(_vec3).y; - const vrmRootY = vrm.scene.getWorldPosition(_vec3).y; - const vrmHipsHeight = Math.abs(vrmHipsY - vrmRootY); - const hipsPositionScale = vrmHipsHeight / mainHip; - - clip.tracks.forEach((track) => { - // Convert each track for VRM usage, and push to `tracks` - let trackSplitted = track.name.split('.'); - let mixamoRigName = trackSplitted[0]; - let vrmBoneName = mixamoVRMRigMap[mixamoRigName]; - let vrmNodeName = vrm.humanoid?.getNormalizedBoneNode(vrmBoneName)?.name; - let mixamoRigNode = resource.getObjectByName(mixamoRigName); - - if (vrmNodeName != null) { - - let propertyName = trackSplitted[1]; - - // Store rotations of rest-pose. - mixamoRigNode.getWorldQuaternion(restRotationInverse).invert(); - mixamoRigNode.parent.getWorldQuaternion(parentRestWorldRotation); - - if (track instanceof THREE.QuaternionKeyframeTrack) { - - // Retarget rotation of mixamoRig to NormalizedBone. - for (let i = 0; i < track.values.length; i += 4) { - - let flatQuaternion = track.values.slice(i, i + 4); - - _quatA.fromArray(flatQuaternion); - - _quatA - .premultiply(parentRestWorldRotation) - .multiply(restRotationInverse); - - _quatA.toArray(flatQuaternion); - - flatQuaternion.forEach((v, index) => { - - track.values[index + i] = v; - - }); - - } - - tracks.push( - new THREE.QuaternionKeyframeTrack( - `${vrmNodeName}.${propertyName}`, - track.times, - track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 2 === 0 ? - v : v)), - ), - ); - - } else if (track instanceof THREE.VectorKeyframeTrack) { - let value = track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 3 !== 1 ? - v : v) * hipsPositionScale); - tracks.push(new THREE.VectorKeyframeTrack(`${vrmNodeName}.${propertyName}`, track.times, value)); - } - - } - }); - return new THREE.AnimationClip('vrmAnimation', clip.duration, tracks); - - }); -} - -/** - * Represents a participant in a virtual reality scene. - * - * @param {Object} participant - The props for the participant. - * - * @return {JSX.Element} The participant. - */ -function Participant(participant) { - const fallbackURL = threeObjectPlugin + defaultVRM; - const playerURL = userData.vrm ? userData.vrm : fallbackURL; - const clonedModelRef = useRef(null); // Ref for the cloned model - const animationMixerRef = participant.animationMixerRef; // Ref for the animation mixer of this participant - const animationsRef = participant.animationsRef; // Ref to store animations - const mixers = participant.mixers; - const [someVRM, setSomeVRM] = useState(null); - const theScene = useThree(); - const displayNameTextRef = useRef(null); - const setTextRef = (el) => { - textRef(el); - }; - - - // Load the VRM model - useEffect(() => { - const loader = new GLTFLoader(); - loader.register(parser => new VRMLoaderPlugin(parser)); - loader.load(playerURL, gltf => { - setSomeVRM(gltf); - }); - }, [playerURL]); - - useEffect(() => { - if (someVRM?.userData?.gltfExtensions?.VRM) { - const playerController = someVRM.userData.vrm; - const fetchProfile = async (pfp, modelToModify) => { - console.log("modelToModify", modelToModify); - - try { - const response = await fetch(pfp); - console.log("pfp", pfp, response); - if (response.status === 200) { - const textureLoader = new THREE.TextureLoader(); - textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed - textureLoader.load(pfp, (loadedProfile) => { - // Now we are sure the texture is loaded - if(modelToModify.isObject3D){ - modelToModify.traverse((obj) => { - obj.frustumCulled = false; - - if (obj.name === "profile" && obj.material) { - console.log("profile", obj); - const newMat = obj.material.clone(); - newMat.map = loadedProfile; - newMat.map.needsUpdate = true; - newMat.needsUpdate = true; - obj.material = newMat; - } - }); - } - }); - return response; - } - } catch (err) { - // Handle the error properly or rethrow it to be caught elsewhere. - // console.error("Error fetching profile:", err); - // throw err; - } - }; - - VRMUtils.rotateVRM0(playerController); - playerController.scene.rotation.y = 0; - playerController.scene.scale.set(1, 1, 1); - - - // Animation files - const idleFile = threeObjectPlugin + idle; - const walkingFile = threeObjectPlugin + walk; - const runningFile = threeObjectPlugin + run; - // Load animations - let animationFiles = [idleFile, walkingFile, runningFile]; - let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); - - // Clone the model - // const clonedModel = SkeletonUtils.clone(playerController.scene); - // clonedModel.userData.vrm = clonedModel; - - // Create animation mixer for the cloned model - const newMixer = new THREE.AnimationMixer(playerController.scene); - animationMixerRef.current[participant.name] = newMixer; - // console.log("heres the current mixers", animationMixerRef.current[participant.name]); - mixers.current[participant.name] = animationMixerRef.current[participant.name]; - participant.profileUserData.current[participant.name] = {inWorldName : participant.name, pfp: participant.pfp }; - Promise.all(animationsPromises).then(animations => { - animationsRef.current[participant.name] = animations; // Store animations in ref - - const idleAction = animationMixerRef.current[participant.name].clipAction(animations[0]); - const walkingAction = animationMixerRef.current[participant.name].clipAction(animations[1]); - const runningAction = animationMixerRef.current[participant.name].clipAction(animations[2]); - // console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); - idleAction.timeScale = 1; - idleAction.play(); - }); - let isProfileFetched = false; // flag to check if profile has been fetched - // return () => { - // // Cleanup function to stop and dispose mixers - // mixers.current[participant.name].forEach(mixer => mixer.stopAllAction()); - // mixers.current[participant.name] = []; - // }; - } - }, [someVRM, theScene, participant.p2pcf]); - - useFrame((state, delta) => { - if(mixers.current[participant.name]){ - // Log each action in the mixer - // mixer._actions.forEach(action => { - // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); - // }); - - // Find and play the idle animation explicitly - const idleAction = mixers.current[participant.name]._actions.find(action => action._clip.name === 'idle'); - if (idleAction && !idleAction.isRunning()) { - console.log("idle action", idleAction); - idleAction.reset().play(); - } - - // Update the mixer - mixers.current[participant.name].update(delta); - } - - if (someVRM?.userData?.vrm) { - someVRM.userData.vrm.update(delta); // Update the VRM model - } - if (clonedModelRef?.current?.userData?.vrm) { - clonedModelRef.current.userData.vrm.update(delta); // Update the cloned VRM model - } - }); - - if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { - return null; - } - - const playerController = someVRM.userData.vrm; - const modelClone = SkeletonUtils.clone(playerController.scene); - modelClone.userData.vrm = playerController; - - //calculate the height of the avatar to be used in the Text component position below - const box = new THREE.Box3().setFromObject(modelClone); - const height = (box.max.y - box.min.y) + 0.1; - - return ( - - - - - - - - - - {participant.name} - - - - - ); -} - - -function Participants(props) { - const theScene = useThree(); - // create a ref for the profile user data information for each participant to be held in an array - const profileUserData = useRef([]); - // make ref for animation mixer for each participant - const animationMixerRef = useRef([]); // Ref for the animation mixer of this participant - const animationsRef = useRef([]); // Ref to store animations - const mixers = useRef([]); - const displayNameTextRef = useRef(null); - const textRefs = useRef({}); - const participantRefs = useRef({}); - - const fetchProfilePlane = async (pfp, modelToModify, displayNameBackground, inWorldName, displayNameText) => { - // console.log("fetchProfilePlane", pfp, modelToModify, displayNameBackground, inWorldName, displayNameText); - if(pfp){ - try { - const response = await fetch(pfp); - if (response.status === 200) { - const textureLoader = new THREE.TextureLoader(); - textureLoader.crossOrigin = ''; - textureLoader.load(pfp, (loadedProfile) => { - // Now we are sure the texture is loaded - if( modelToModify.isObject3D ){ - modelToModify.frustumCulled = false; - const newMat = modelToModify.material.clone(); - newMat.map = loadedProfile; - newMat.map.needsUpdate = true; - newMat.needsUpdate = true; - modelToModify.material = newMat; - } - } - ); - return response; - } - } catch (err) { - // Handle the error properly or rethrow it to be caught elsewhere. - // console.error("Error fetching profile:", err); - // throw err; - } - } - }; - - useEffect(() => { - if(window.p2pcf){ - window.p2pcf.on("msg", (peer, data) => { - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - // console.log("refs", animationMixerRef, animationsRef, mixers); - const participantObject = theScene.scene.getObjectByName(peer.client_id); - if(!participantRefs.current[peer.client_id]) { - participantRefs.current[peer.client_id] = { profileFetched: false }; - } - - // find the object in the parent of participantObject that is named displayNamePfp - const displayNamePfp = participantObject?.parent?.getObjectByName("displayNamePfp"); - const displayNameBackground = participantObject?.parent?.getObjectByName("displayNameBackground"); - if( ! participantRefs.current[peer.client_id].profileFetched && displayNameBackground ){ - setTimeout(() => { - fetchProfilePlane( participantData[peer.client_id].profileImage, displayNamePfp, displayNameBackground, profileUserData.current[peer.client_id].inWorldName, textRefs.current[peer.client_id] ) - .then((response) => { - participantRefs.current[peer.client_id].profileFetched = true; - if(participantData[peer.client_id]?.inWorldName){ - if(participantData[peer.client_id]?.inWorldName.length > 8){ - displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); - displayNameBackground.position.x = -0.005; - if(participantData[peer.client_id]?.inWorldName.length > 16){ - textRefs.current[peer.client_id].fontSize = 0.034; - } - } - } - }); - }, 1000); - } - - - if (animationsRef.current[peer.client_id]) { - const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation - const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation - const runAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][2]); // Running animation - - if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "walking") { - walkAction.play(); - runAction.stop(); - idleAction.stop(); - } else if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "running") { - walkAction.stop(); - runAction.play(); - idleAction.stop(); - } else { - idleAction.play(); - walkAction.stop(); - runAction.stop(); - } - - } - - if (participantObject) { - if(participantData[peer.client_id]?.position){ - participantObject.parent.position.fromArray(participantData[peer.client_id].position); - participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); - } - } - if(textRefs.current[peer.client_id] && participantData[peer.client_id]?.inWorldName) { - textRefs.current[peer.client_id].text = participantData[peer.client_id].inWorldName; - } - }); - } - }, []); - - useEffect(() => { - const p2pcf = window.p2pcf; - if (p2pcf) { - p2pcf.on("peerclose", (peer) => { - const participantObject = theScene.scene.getObjectByName(peer.client_id); - // remove the participantObject - if (participantObject) { - theScene.scene.remove(participantObject); - // remove array item animationMixerRef.current[peer.client_id], animationsRef.current[peer.client_id], mixers.current[peer.client_id]; - delete animationMixerRef.current[peer.client_id]; - delete animationsRef.current[peer.client_id]; - delete mixers.current[peer.client_id]; - } - // remove peer.client_id - props.setParticipant(prevParticipants => { - return prevParticipants.filter(item => item !== peer.client_id); - } - ); - }); - } - }, []); - - useEffect(() => { - const p2pcf = window.p2pcf; - if (p2pcf) { - p2pcf.on("peerconnect", (peer) => { - console.log("peer connected", peer); - console.log("p2pcf peers", p2pcf.peers); - // emit the peer id to all other peers - props.setParticipant(prevParticipants => { - if (!prevParticipants.includes(peer.client_id)) { - return [...prevParticipants, peer.client_id]; - } else { - return prevParticipants; - } - }); - }); - } - }, []); - - return ( - <> - {props.participants && props.participants.map((item, index) => ( - textRefs.current[item] = ref} - profileUserData={profileUserData} - /> - ))} - - ); -} - /** * Represents a saved object in a virtual reality world. * @@ -1161,8 +608,8 @@ export default function EnvironmentFront(props) { movement={movement} /> - /* { - console.log(data.direction.angle); - }} - // onEnd={(evt, data) => setMobileRotControls(null)} - /> */ ) } diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index c5d6fdb..db311bf 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -15,6 +15,7 @@ import { useXR } from "@react-three/xr"; import idle from "../../../inc/avatars/friendly.fbx"; import walk from "../../../inc/avatars/walking.fbx"; import run from "../../../inc/avatars/running.fbx"; +import { getMixamoRig } from "../utils/rigMap"; function Reticle() { const { camera } = useThree(); @@ -37,60 +38,7 @@ function Reticle() { /** * A map from Mixamo rig name to VRM Humanoid bone name */ -const mixamoVRMRigMap = { - mixamorigHips: 'hips', - mixamorigSpine: 'spine', - mixamorigSpine1: 'chest', - mixamorigSpine2: 'upperChest', - mixamorigNeck: 'neck', - mixamorigHead: 'head', - mixamorigLeftShoulder: 'leftShoulder', - mixamorigLeftArm: 'leftUpperArm', - mixamorigLeftForeArm: 'leftLowerArm', - mixamorigLeftHand: 'leftHand', - mixamorigLeftHandThumb1: 'leftThumbMetacarpal', - mixamorigLeftHandThumb2: 'leftThumbProximal', - mixamorigLeftHandThumb3: 'leftThumbDistal', - mixamorigLeftHandIndex1: 'leftIndexProximal', - mixamorigLeftHandIndex2: 'leftIndexIntermediate', - mixamorigLeftHandIndex3: 'leftIndexDistal', - mixamorigLeftHandMiddle1: 'leftMiddleProximal', - mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', - mixamorigLeftHandMiddle3: 'leftMiddleDistal', - mixamorigLeftHandRing1: 'leftRingProximal', - mixamorigLeftHandRing2: 'leftRingIntermediate', - mixamorigLeftHandRing3: 'leftRingDistal', - mixamorigLeftHandPinky1: 'leftLittleProximal', - mixamorigLeftHandPinky2: 'leftLittleIntermediate', - mixamorigLeftHandPinky3: 'leftLittleDistal', - mixamorigRightShoulder: 'rightShoulder', - mixamorigRightArm: 'rightUpperArm', - mixamorigRightForeArm: 'rightLowerArm', - mixamorigRightHand: 'rightHand', - mixamorigRightHandPinky1: 'rightLittleProximal', - mixamorigRightHandPinky2: 'rightLittleIntermediate', - mixamorigRightHandPinky3: 'rightLittleDistal', - mixamorigRightHandRing1: 'rightRingProximal', - mixamorigRightHandRing2: 'rightRingIntermediate', - mixamorigRightHandRing3: 'rightRingDistal', - mixamorigRightHandMiddle1: 'rightMiddleProximal', - mixamorigRightHandMiddle2: 'rightMiddleIntermediate', - mixamorigRightHandMiddle3: 'rightMiddleDistal', - mixamorigRightHandIndex1: 'rightIndexProximal', - mixamorigRightHandIndex2: 'rightIndexIntermediate', - mixamorigRightHandIndex3: 'rightIndexDistal', - mixamorigRightHandThumb1: 'rightThumbMetacarpal', - mixamorigRightHandThumb2: 'rightThumbProximal', - mixamorigRightHandThumb3: 'rightThumbDistal', - mixamorigLeftUpLeg: 'leftUpperLeg', - mixamorigLeftLeg: 'leftLowerLeg', - mixamorigLeftFoot: 'leftFoot', - mixamorigLeftToeBase: 'leftToes', - mixamorigRightUpLeg: 'rightUpperLeg', - mixamorigRightLeg: 'rightLowerLeg', - mixamorigRightFoot: 'rightFoot', - mixamorigRightToeBase: 'rightToes', -}; +const mixamoVRMRigMap = getMixamoRig(); /** * Download Mixamo animation, convert it for usage with three-vrm, and return the converted animation. diff --git a/blocks/environment/components/core/front/ModelObject.js b/blocks/environment/components/core/front/ModelObject.js index 9159132..d7faf00 100644 --- a/blocks/environment/components/core/front/ModelObject.js +++ b/blocks/environment/components/core/front/ModelObject.js @@ -13,64 +13,12 @@ import { GLTFAudioEmitterExtension } from "three-omi"; import { GLTFGoogleTiltBrushMaterialExtension } from "three-icosa"; import { VRMUtils, VRMSchema, VRMLoaderPlugin, VRMExpressionPresetName } from "@pixiv/three-vrm"; import idle from "../../../../../inc/avatars/friendly.fbx"; +import { getMixamoRig } from "../../../utils/rigMap"; /** * A map from Mixamo rig name to VRM Humanoid bone name */ -const mixamoVRMRigMap = { - mixamorigHips: 'hips', - mixamorigSpine: 'spine', - mixamorigSpine1: 'chest', - mixamorigSpine2: 'upperChest', - mixamorigNeck: 'neck', - mixamorigHead: 'head', - mixamorigLeftShoulder: 'leftShoulder', - mixamorigLeftArm: 'leftUpperArm', - mixamorigLeftForeArm: 'leftLowerArm', - mixamorigLeftHand: 'leftHand', - mixamorigLeftHandThumb1: 'leftThumbMetacarpal', - mixamorigLeftHandThumb2: 'leftThumbProximal', - mixamorigLeftHandThumb3: 'leftThumbDistal', - mixamorigLeftHandIndex1: 'leftIndexProximal', - mixamorigLeftHandIndex2: 'leftIndexIntermediate', - mixamorigLeftHandIndex3: 'leftIndexDistal', - mixamorigLeftHandMiddle1: 'leftMiddleProximal', - mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', - mixamorigLeftHandMiddle3: 'leftMiddleDistal', - mixamorigLeftHandRing1: 'leftRingProximal', - mixamorigLeftHandRing2: 'leftRingIntermediate', - mixamorigLeftHandRing3: 'leftRingDistal', - mixamorigLeftHandPinky1: 'leftLittleProximal', - mixamorigLeftHandPinky2: 'leftLittleIntermediate', - mixamorigLeftHandPinky3: 'leftLittleDistal', - mixamorigRightShoulder: 'rightShoulder', - mixamorigRightArm: 'rightUpperArm', - mixamorigRightForeArm: 'rightLowerArm', - mixamorigRightHand: 'rightHand', - mixamorigRightHandPinky1: 'rightLittleProximal', - mixamorigRightHandPinky2: 'rightLittleIntermediate', - mixamorigRightHandPinky3: 'rightLittleDistal', - mixamorigRightHandRing1: 'rightRingProximal', - mixamorigRightHandRing2: 'rightRingIntermediate', - mixamorigRightHandRing3: 'rightRingDistal', - mixamorigRightHandMiddle1: 'rightMiddleProximal', - mixamorigRightHandMiddle2: 'rightMiddleIntermediate', - mixamorigRightHandMiddle3: 'rightMiddleDistal', - mixamorigRightHandIndex1: 'rightIndexProximal', - mixamorigRightHandIndex2: 'rightIndexIntermediate', - mixamorigRightHandIndex3: 'rightIndexDistal', - mixamorigRightHandThumb1: 'rightThumbMetacarpal', - mixamorigRightHandThumb2: 'rightThumbProximal', - mixamorigRightHandThumb3: 'rightThumbDistal', - mixamorigLeftUpLeg: 'leftUpperLeg', - mixamorigLeftLeg: 'leftLowerLeg', - mixamorigLeftFoot: 'leftFoot', - mixamorigLeftToeBase: 'leftToes', - mixamorigRightUpLeg: 'rightUpperLeg', - mixamorigRightLeg: 'rightLowerLeg', - mixamorigRightFoot: 'rightFoot', - mixamorigRightToeBase: 'rightToes', -}; +const mixamoVRMRigMap = getMixamoRig(); /* global THREE, mixamoVRMRigMap */ diff --git a/blocks/environment/components/core/front/NPCObject.js b/blocks/environment/components/core/front/NPCObject.js index 9829861..7604039 100644 --- a/blocks/environment/components/core/front/NPCObject.js +++ b/blocks/environment/components/core/front/NPCObject.js @@ -13,64 +13,12 @@ import { GLTFAudioEmitterExtension } from "three-omi"; import { GLTFGoogleTiltBrushMaterialExtension } from "three-icosa"; import { VRMUtils, VRMSchema, VRMLoaderPlugin, VRMExpressionPresetName, VRMHumanBoneName } from "@pixiv/three-vrm"; import idle from "../../../../../inc/avatars/friendly.fbx"; +import { getMixamoRig } from "../../../utils/rigMap"; /** * A map from Mixamo rig name to VRM Humanoid bone name */ -const mixamoVRMRigMap = { - mixamorigHips: 'hips', - mixamorigSpine: 'spine', - mixamorigSpine1: 'chest', - mixamorigSpine2: 'upperChest', - mixamorigNeck: 'neck', - mixamorigHead: 'head', - mixamorigLeftShoulder: 'leftShoulder', - mixamorigLeftArm: 'leftUpperArm', - mixamorigLeftForeArm: 'leftLowerArm', - mixamorigLeftHand: 'leftHand', - mixamorigLeftHandThumb1: 'leftThumbMetacarpal', - mixamorigLeftHandThumb2: 'leftThumbProximal', - mixamorigLeftHandThumb3: 'leftThumbDistal', - mixamorigLeftHandIndex1: 'leftIndexProximal', - mixamorigLeftHandIndex2: 'leftIndexIntermediate', - mixamorigLeftHandIndex3: 'leftIndexDistal', - mixamorigLeftHandMiddle1: 'leftMiddleProximal', - mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', - mixamorigLeftHandMiddle3: 'leftMiddleDistal', - mixamorigLeftHandRing1: 'leftRingProximal', - mixamorigLeftHandRing2: 'leftRingIntermediate', - mixamorigLeftHandRing3: 'leftRingDistal', - mixamorigLeftHandPinky1: 'leftLittleProximal', - mixamorigLeftHandPinky2: 'leftLittleIntermediate', - mixamorigLeftHandPinky3: 'leftLittleDistal', - mixamorigRightShoulder: 'rightShoulder', - mixamorigRightArm: 'rightUpperArm', - mixamorigRightForeArm: 'rightLowerArm', - mixamorigRightHand: 'rightHand', - mixamorigRightHandPinky1: 'rightLittleProximal', - mixamorigRightHandPinky2: 'rightLittleIntermediate', - mixamorigRightHandPinky3: 'rightLittleDistal', - mixamorigRightHandRing1: 'rightRingProximal', - mixamorigRightHandRing2: 'rightRingIntermediate', - mixamorigRightHandRing3: 'rightRingDistal', - mixamorigRightHandMiddle1: 'rightMiddleProximal', - mixamorigRightHandMiddle2: 'rightMiddleIntermediate', - mixamorigRightHandMiddle3: 'rightMiddleDistal', - mixamorigRightHandIndex1: 'rightIndexProximal', - mixamorigRightHandIndex2: 'rightIndexIntermediate', - mixamorigRightHandIndex3: 'rightIndexDistal', - mixamorigRightHandThumb1: 'rightThumbMetacarpal', - mixamorigRightHandThumb2: 'rightThumbProximal', - mixamorigRightHandThumb3: 'rightThumbDistal', - mixamorigLeftUpLeg: 'leftUpperLeg', - mixamorigLeftLeg: 'leftLowerLeg', - mixamorigLeftFoot: 'leftFoot', - mixamorigLeftToeBase: 'leftToes', - mixamorigRightUpLeg: 'rightUpperLeg', - mixamorigRightLeg: 'rightLowerLeg', - mixamorigRightFoot: 'rightFoot', - mixamorigRightToeBase: 'rightToes', -}; +const mixamoVRMRigMap = getMixamoRig(); /* global THREE, mixamoVRMRigMap */ diff --git a/blocks/environment/components/core/front/Participants.js b/blocks/environment/components/core/front/Participants.js new file mode 100644 index 0000000..d0fc48a --- /dev/null +++ b/blocks/environment/components/core/front/Participants.js @@ -0,0 +1,488 @@ +// add the missing imports +import React, { useEffect, useRef, useState } from "react"; +import { useFrame, useThree } from "@react-three/fiber"; +import { Text } from "@react-three/drei"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; +import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; +import * as THREE from "three"; +import * as SkeletonUtils from "three/examples/jsm/utils/SkeletonUtils.js"; +import defaultVRM from "../../../../../inc/avatars/3ov_default_avatar.vrm"; +import defaultFont from "../../../../../inc/fonts/roboto.woff"; +import idle from "../../../../../inc/avatars/friendly.fbx"; +import walk from "../../../../../inc/avatars/walking.fbx"; +import run from "../../../../../inc/avatars/running.fbx"; +// import the mixamo rig utility +import { getMixamoRig } from "../../../utils/rigMap"; + +/** + * A map from Mixamo rig name to VRM Humanoid bone name + */ +const mixamoVRMRigMap = getMixamoRig(); + +/** + * Download Mixamo animation, convert it for usage with three-vrm, and return the converted animation. + * + * @param {string} url - The URL of Mixamo animation data + * @param {VRM} vrm - The target VRM + * @returns {Promise} - The adapted AnimationClip + */ +function loadMixamoAnimation(url, vrm) { + let loader; + if (url.endsWith('.fbx')) { + loader = new FBXLoader(); // Use an FBX loader + } else { + loader = new GLTFLoader(); // Use a GLTF loader + } + return loader.loadAsync(url).then((resource) => { + const clip = resource.animations[0]; // Extract the AnimationClip + + // if resource is GLB, get the scene + if (url.endsWith('.glb')) { + resource = resource.scene; + } + + let tracks = []; // KeyframeTracks compatible with VRM to be stored here + + let restRotationInverse = new THREE.Quaternion(); + let parentRestWorldRotation = new THREE.Quaternion(); + let _quatA = new THREE.Quaternion(); + let _vec3 = new THREE.Vector3(); + + // Adjust according to the height of the hips. + let mixamoHips = resource.getObjectByName('mixamorigHips'); + let regularHips = resource.getObjectByName('hips'); + let mainHip; + if (mixamoHips) { + mainHip = mixamoHips.position.y; + } else if (regularHips) { + mainHip = regularHips.position.y; + } + const vrmHipsY = vrm.humanoid?.getNormalizedBoneNode('hips').getWorldPosition(_vec3).y; + const vrmRootY = vrm.scene.getWorldPosition(_vec3).y; + const vrmHipsHeight = Math.abs(vrmHipsY - vrmRootY); + const hipsPositionScale = vrmHipsHeight / mainHip; + + clip.tracks.forEach((track) => { + // Convert each track for VRM usage, and push to `tracks` + let trackSplitted = track.name.split('.'); + let mixamoRigName = trackSplitted[0]; + let vrmBoneName = mixamoVRMRigMap[mixamoRigName]; + let vrmNodeName = vrm.humanoid?.getNormalizedBoneNode(vrmBoneName)?.name; + let mixamoRigNode = resource.getObjectByName(mixamoRigName); + + if (vrmNodeName != null) { + + let propertyName = trackSplitted[1]; + + // Store rotations of rest-pose. + mixamoRigNode.getWorldQuaternion(restRotationInverse).invert(); + mixamoRigNode.parent.getWorldQuaternion(parentRestWorldRotation); + + if (track instanceof THREE.QuaternionKeyframeTrack) { + + // Retarget rotation of mixamoRig to NormalizedBone. + for (let i = 0; i < track.values.length; i += 4) { + + let flatQuaternion = track.values.slice(i, i + 4); + + _quatA.fromArray(flatQuaternion); + + _quatA + .premultiply(parentRestWorldRotation) + .multiply(restRotationInverse); + + _quatA.toArray(flatQuaternion); + + flatQuaternion.forEach((v, index) => { + + track.values[index + i] = v; + + }); + + } + + tracks.push( + new THREE.QuaternionKeyframeTrack( + `${vrmNodeName}.${propertyName}`, + track.times, + track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 2 === 0 ? - v : v)), + ), + ); + + } else if (track instanceof THREE.VectorKeyframeTrack) { + let value = track.values.map((v, i) => (vrm.meta?.metaVersion === '0' && i % 3 !== 1 ? - v : v) * hipsPositionScale); + tracks.push(new THREE.VectorKeyframeTrack(`${vrmNodeName}.${propertyName}`, track.times, value)); + } + + } + }); + return new THREE.AnimationClip('vrmAnimation', clip.duration, tracks); + + }); +} + +/** + * Represents a participant in a virtual reality scene. + * + * @param {Object} participant - The props for the participant. + * + * @return {JSX.Element} The participant. + */ +function Participant(participant) { + const fallbackURL = threeObjectPlugin + defaultVRM; + const playerURL = userData.vrm ? userData.vrm : fallbackURL; + const clonedModelRef = useRef(null); // Ref for the cloned model + const animationMixerRef = participant.animationMixerRef; // Ref for the animation mixer of this participant + const animationsRef = participant.animationsRef; // Ref to store animations + const mixers = participant.mixers; + const [someVRM, setSomeVRM] = useState(null); + const theScene = useThree(); + const displayNameTextRef = useRef(null); + const setTextRef = (el) => { + textRef(el); + }; + + + // Load the VRM model + useEffect(() => { + const loader = new GLTFLoader(); + loader.register(parser => new VRMLoaderPlugin(parser)); + loader.load(playerURL, gltf => { + setSomeVRM(gltf); + }); + }, [playerURL]); + + useEffect(() => { + if (someVRM?.userData?.gltfExtensions?.VRM) { + const playerController = someVRM.userData.vrm; + const fetchProfile = async (pfp, modelToModify) => { + console.log("modelToModify", modelToModify); + + try { + const response = await fetch(pfp); + console.log("pfp", pfp, response); + if (response.status === 200) { + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed + textureLoader.load(pfp, (loadedProfile) => { + // Now we are sure the texture is loaded + if(modelToModify.isObject3D){ + modelToModify.traverse((obj) => { + obj.frustumCulled = false; + + if (obj.name === "profile" && obj.material) { + console.log("profile", obj); + const newMat = obj.material.clone(); + newMat.map = loadedProfile; + newMat.map.needsUpdate = true; + newMat.needsUpdate = true; + obj.material = newMat; + } + }); + } + }); + return response; + } + } catch (err) { + // Handle the error properly or rethrow it to be caught elsewhere. + // console.error("Error fetching profile:", err); + // throw err; + } + }; + + VRMUtils.rotateVRM0(playerController); + playerController.scene.rotation.y = 0; + playerController.scene.scale.set(1, 1, 1); + + + // Animation files + const idleFile = threeObjectPlugin + idle; + const walkingFile = threeObjectPlugin + walk; + const runningFile = threeObjectPlugin + run; + // Load animations + let animationFiles = [idleFile, walkingFile, runningFile]; + let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); + + // Clone the model + // const clonedModel = SkeletonUtils.clone(playerController.scene); + // clonedModel.userData.vrm = clonedModel; + + // Create animation mixer for the cloned model + const newMixer = new THREE.AnimationMixer(playerController.scene); + animationMixerRef.current[participant.name] = newMixer; + // console.log("heres the current mixers", animationMixerRef.current[participant.name]); + mixers.current[participant.name] = animationMixerRef.current[participant.name]; + participant.profileUserData.current[participant.name] = {inWorldName : participant.name, pfp: participant.pfp }; + Promise.all(animationsPromises).then(animations => { + animationsRef.current[participant.name] = animations; // Store animations in ref + + const idleAction = animationMixerRef.current[participant.name].clipAction(animations[0]); + const walkingAction = animationMixerRef.current[participant.name].clipAction(animations[1]); + const runningAction = animationMixerRef.current[participant.name].clipAction(animations[2]); + // console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); + idleAction.timeScale = 1; + idleAction.play(); + }); + let isProfileFetched = false; // flag to check if profile has been fetched + // return () => { + // // Cleanup function to stop and dispose mixers + // mixers.current[participant.name].forEach(mixer => mixer.stopAllAction()); + // mixers.current[participant.name] = []; + // }; + } + }, [someVRM, theScene, participant.p2pcf]); + + useFrame((state, delta) => { + if(mixers.current[participant.name]){ + // Log each action in the mixer + // mixer._actions.forEach(action => { + // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); + // }); + + // Find and play the idle animation explicitly + const idleAction = mixers.current[participant.name]._actions.find(action => action._clip.name === 'idle'); + if (idleAction && !idleAction.isRunning()) { + console.log("idle action", idleAction); + idleAction.reset().play(); + } + + // Update the mixer + mixers.current[participant.name].update(delta); + } + + if (someVRM?.userData?.vrm) { + someVRM.userData.vrm.update(delta); // Update the VRM model + } + if (clonedModelRef?.current?.userData?.vrm) { + clonedModelRef.current.userData.vrm.update(delta); // Update the cloned VRM model + } + }); + + if (!someVRM || !someVRM.userData?.gltfExtensions?.VRM) { + return null; + } + + const playerController = someVRM.userData.vrm; + const modelClone = SkeletonUtils.clone(playerController.scene); + modelClone.userData.vrm = playerController; + + //calculate the height of the avatar to be used in the Text component position below + const box = new THREE.Box3().setFromObject(modelClone); + const height = (box.max.y - box.min.y) + 0.1; + + return ( + + + + + + + + + + {participant.name} + + + + + ); +} + + +export function Participants(props) { + const theScene = useThree(); + // create a ref for the profile user data information for each participant to be held in an array + const profileUserData = useRef([]); + // make ref for animation mixer for each participant + const animationMixerRef = useRef([]); // Ref for the animation mixer of this participant + const animationsRef = useRef([]); // Ref to store animations + const mixers = useRef([]); + const displayNameTextRef = useRef(null); + const textRefs = useRef({}); + const participantRefs = useRef({}); + + const fetchProfilePlane = async (pfp, modelToModify, displayNameBackground, inWorldName, displayNameText) => { + // console.log("fetchProfilePlane", pfp, modelToModify, displayNameBackground, inWorldName, displayNameText); + if(pfp){ + try { + const response = await fetch(pfp); + if (response.status === 200) { + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; + textureLoader.load(pfp, (loadedProfile) => { + // Now we are sure the texture is loaded + if( modelToModify.isObject3D ){ + modelToModify.frustumCulled = false; + const newMat = modelToModify.material.clone(); + newMat.map = loadedProfile; + newMat.map.needsUpdate = true; + newMat.needsUpdate = true; + modelToModify.material = newMat; + } + } + ); + return response; + } + } catch (err) { + // Handle the error properly or rethrow it to be caught elsewhere. + // console.error("Error fetching profile:", err); + // throw err; + } + } + }; + + useEffect(() => { + if(window.p2pcf){ + window.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // console.log("refs", animationMixerRef, animationsRef, mixers); + const participantObject = theScene.scene.getObjectByName(peer.client_id); + if(!participantRefs.current[peer.client_id]) { + participantRefs.current[peer.client_id] = { profileFetched: false }; + } + + // find the object in the parent of participantObject that is named displayNamePfp + const displayNamePfp = participantObject?.parent?.getObjectByName("displayNamePfp"); + const displayNameBackground = participantObject?.parent?.getObjectByName("displayNameBackground"); + if( ! participantRefs.current[peer.client_id].profileFetched && displayNameBackground ){ + setTimeout(() => { + fetchProfilePlane( participantData[peer.client_id].profileImage, displayNamePfp, displayNameBackground, profileUserData.current[peer.client_id].inWorldName, textRefs.current[peer.client_id] ) + .then((response) => { + participantRefs.current[peer.client_id].profileFetched = true; + if(participantData[peer.client_id]?.inWorldName){ + if(participantData[peer.client_id]?.inWorldName.length > 8){ + displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); + displayNameBackground.position.x = -0.005; + if(participantData[peer.client_id]?.inWorldName.length > 16){ + textRefs.current[peer.client_id].fontSize = 0.034; + } + } + } + }); + }, 1000); + } + + + if (animationsRef.current[peer.client_id]) { + const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation + const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation + const runAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][2]); // Running animation + + if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "walking") { + walkAction.play(); + runAction.stop(); + idleAction.stop(); + } else if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "running") { + walkAction.stop(); + runAction.play(); + idleAction.stop(); + } else { + idleAction.play(); + walkAction.stop(); + runAction.stop(); + } + + } + + if (participantObject) { + if(participantData[peer.client_id]?.position){ + participantObject.parent.position.fromArray(participantData[peer.client_id].position); + participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + } + } + if(textRefs.current[peer.client_id] && participantData[peer.client_id]?.inWorldName) { + textRefs.current[peer.client_id].text = participantData[peer.client_id].inWorldName; + } + }); + } + }, []); + + useEffect(() => { + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerclose", (peer) => { + const participantObject = theScene.scene.getObjectByName(peer.client_id); + // remove the participantObject + if (participantObject) { + theScene.scene.remove(participantObject); + // remove array item animationMixerRef.current[peer.client_id], animationsRef.current[peer.client_id], mixers.current[peer.client_id]; + delete animationMixerRef.current[peer.client_id]; + delete animationsRef.current[peer.client_id]; + delete mixers.current[peer.client_id]; + } + // remove peer.client_id + props.setParticipant(prevParticipants => { + return prevParticipants.filter(item => item !== peer.client_id); + } + ); + }); + } + }, []); + + useEffect(() => { + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerconnect", (peer) => { + console.log("peer connected", peer); + console.log("p2pcf peers", p2pcf.peers); + // emit the peer id to all other peers + props.setParticipant(prevParticipants => { + if (!prevParticipants.includes(peer.client_id)) { + return [...prevParticipants, peer.client_id]; + } else { + return prevParticipants; + } + }); + }); + } + }, []); + + return ( + <> + {props.participants && props.participants.map((item, index) => ( + textRefs.current[item] = ref} + profileUserData={profileUserData} + /> + ))} + + ); +} + diff --git a/blocks/environment/utils/rigMap.js b/blocks/environment/utils/rigMap.js new file mode 100644 index 0000000..9501d52 --- /dev/null +++ b/blocks/environment/utils/rigMap.js @@ -0,0 +1,63 @@ + + /** + * A map from Mixamo rig name to VRM Humanoid bone name + */ + const mixamoVRMRigMap = { + mixamorigHips: 'hips', + mixamorigSpine: 'spine', + mixamorigSpine1: 'chest', + mixamorigSpine2: 'upperChest', + mixamorigNeck: 'neck', + mixamorigHead: 'head', + mixamorigLeftShoulder: 'leftShoulder', + mixamorigLeftArm: 'leftUpperArm', + mixamorigLeftForeArm: 'leftLowerArm', + mixamorigLeftHand: 'leftHand', + mixamorigLeftHandThumb1: 'leftThumbMetacarpal', + mixamorigLeftHandThumb2: 'leftThumbProximal', + mixamorigLeftHandThumb3: 'leftThumbDistal', + mixamorigLeftHandIndex1: 'leftIndexProximal', + mixamorigLeftHandIndex2: 'leftIndexIntermediate', + mixamorigLeftHandIndex3: 'leftIndexDistal', + mixamorigLeftHandMiddle1: 'leftMiddleProximal', + mixamorigLeftHandMiddle2: 'leftMiddleIntermediate', + mixamorigLeftHandMiddle3: 'leftMiddleDistal', + mixamorigLeftHandRing1: 'leftRingProximal', + mixamorigLeftHandRing2: 'leftRingIntermediate', + mixamorigLeftHandRing3: 'leftRingDistal', + mixamorigLeftHandPinky1: 'leftLittleProximal', + mixamorigLeftHandPinky2: 'leftLittleIntermediate', + mixamorigLeftHandPinky3: 'leftLittleDistal', + mixamorigRightShoulder: 'rightShoulder', + mixamorigRightArm: 'rightUpperArm', + mixamorigRightForeArm: 'rightLowerArm', + mixamorigRightHand: 'rightHand', + mixamorigRightHandPinky1: 'rightLittleProximal', + mixamorigRightHandPinky2: 'rightLittleIntermediate', + mixamorigRightHandPinky3: 'rightLittleDistal', + mixamorigRightHandRing1: 'rightRingProximal', + mixamorigRightHandRing2: 'rightRingIntermediate', + mixamorigRightHandRing3: 'rightRingDistal', + mixamorigRightHandMiddle1: 'rightMiddleProximal', + mixamorigRightHandMiddle2: 'rightMiddleIntermediate', + mixamorigRightHandMiddle3: 'rightMiddleDistal', + mixamorigRightHandIndex1: 'rightIndexProximal', + mixamorigRightHandIndex2: 'rightIndexIntermediate', + mixamorigRightHandIndex3: 'rightIndexDistal', + mixamorigRightHandThumb1: 'rightThumbMetacarpal', + mixamorigRightHandThumb2: 'rightThumbProximal', + mixamorigRightHandThumb3: 'rightThumbDistal', + mixamorigLeftUpLeg: 'leftUpperLeg', + mixamorigLeftLeg: 'leftLowerLeg', + mixamorigLeftFoot: 'leftFoot', + mixamorigLeftToeBase: 'leftToes', + mixamorigRightUpLeg: 'rightUpperLeg', + mixamorigRightLeg: 'rightLowerLeg', + mixamorigRightFoot: 'rightFoot', + mixamorigRightToeBase: 'rightToes', +}; + +// make function to return the mixamo rig +export function getMixamoRig() { + return mixamoVRMRigMap; +} diff --git a/inc/avatars/guest_default_avatar.vrm b/inc/avatars/guest_default_avatar.vrm deleted file mode 100644 index fc487716cae8a817eb8263dd527a0b29f5117497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47848 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 OJ(BvqF From b56dc754c775dcec9b42b19072a3503d8f277297 Mon Sep 17 00:00:00 2001 From: antpb Date: Tue, 16 Jan 2024 00:26:01 -0600 Subject: [PATCH 13/43] fixes player controller cameras and rebuilds participant logic to better mesh with p2pcf js also adds loading animation --- blocks/environment/Edit.js | 5 + .../components/EnvironmentFront.js | 87 ++++++++++- blocks/environment/components/Networking.js | 62 +++++--- blocks/environment/components/Player.js | 35 +++-- .../components/core/front/Participants.js | 137 ++++++++---------- blocks/environment/components/p2pcf/p2pcf.js | 19 ++- blocks/environment/editor.scss | 86 ++++++++++- blocks/environment/frontend.js | 4 +- blocks/model-block/block.json | 2 +- inc/assets/zoom.jpg | Bin 0 -> 284105 bytes php/Plugin.php | 11 +- 11 files changed, 321 insertions(+), 127 deletions(-) create mode 100644 inc/assets/zoom.jpg diff --git a/blocks/environment/Edit.js b/blocks/environment/Edit.js index 091a4fb..70a19a9 100644 --- a/blocks/environment/Edit.js +++ b/blocks/environment/Edit.js @@ -152,6 +152,11 @@ export default function Edit({ attributes, setAttributes, isSelected }) { )} /> + + + {__( "Select an image to be used as the preview image:", "three-object-viewer" )} diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index f995465..b134aa6 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -16,6 +16,7 @@ import { useAnimations, Html, } from "@react-three/drei"; +import zoomBackground from '../../../inc/assets/zoom.jpg'; // import { A11y } from "@react-three/a11y"; import { GLTFAudioEmitterExtension } from "three-omi"; @@ -53,10 +54,76 @@ function isVRCompatible() { } -function Loading() { +function Loading(props) { + const backgroundImageUrl = props.previewImage !== "" ? props.previewImage : (threeObjectPlugin + zoomBackground); return (
+
+
+
+
+
+
+ {/*
+
+
+
*/} +
+
+
+
+
+
+
+
Loading...
@@ -513,7 +580,6 @@ function SavedObject(props) { } export default function EnvironmentFront(props) { - const [participants, setParticipant] = useState([]); const [showUI, setShowUI] = useState(true); const [displayName, setDisplayName] = useState(props.userData.inWorldName); @@ -577,7 +643,7 @@ export default function EnvironmentFront(props) { {/* */} - }> + }> {props.hdr && {/* */} {/* Debug physics */} @@ -1909,6 +1984,7 @@ export default function EnvironmentFront(props) { backgroundColor: props.backgroundColor, backgroundImage: `url(${props.previewImage})`, backgroundPosition: "center", + backgroundSize: "cover", margin: "0", height: "900px", width: "100%", @@ -1947,6 +2023,11 @@ export default function EnvironmentFront(props) { {" "} {props.networkingBlock.length > 0 ? "Enter Room" : "Load World"} + { ( props.networkingBlock.length > 0 ) && ( +
+

After entering, use the "Join Voice" button to select your microphone.

+
+ )}
); diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index 5223984..e1c9763 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -11,22 +11,22 @@ import { color } from "@wordpress/icons"; const Networking = (props) => { let isMuted = false; // Initial state of the microphone let localStream = null; // To hold the local media stream - const RoomDropdownContent = () => { - let dropdown = document.getElementById("room-dropdown"); + const RoomDropdownContent = () => { + let dropdown = document.getElementById("room-dropdown"); // empty the contents of the dropdown dropdown.innerHTML = ""; dropdown.innerText = "Room: " + p2pcf.roomId; // create a paragraph element to be added after the dropdown let roomParagraph = document.createElement("p"); - roomParagraph.innerText = "User: " + p2pcf.clientId; + roomParagraph.innerText = "Description: "; roomParagraph.style.marginTop = "10px"; roomParagraph.style.marginBottom = "10px"; roomParagraph.style.textAlign = "left"; - + dropdown.appendChild(roomParagraph); - dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; + dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; }; const AudioDropdownContent = async (button) => { @@ -128,7 +128,6 @@ const Networking = (props) => { audioJoin.style.display = "none"; dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; var muteIcon = document.createElement("button"); - console.log("icon", threeObjectPlugin + audioIcon); muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; muteIcon.style.backgroundSize = "cover"; muteIcon.id = "mute-icon"; @@ -296,29 +295,55 @@ const Networking = (props) => { const PeerDropdownContent = () => { + const userProfileName = + userData.userId === "" + ? Math.floor(Math.random() * 100000) + : userData.userId; + + window.participants[p2pcf.sessionId] = window.userData.inWorldName ? window.userData.inWorldName : "User-" + userProfileName; + let dropdown = document.getElementById("room-dropdown"); // empty the contents of the dropdown dropdown.innerHTML = ""; // make the inner text of the dropdown a list of the users in the room // loop with index for each peer - for (const peer of p2pcf.peers.values()) { - // set up an index - let index = 0; + let index = 1; + if( index === 1 ){ + let playerParagraph = document.createElement("p"); + if(window.participants[p2pcf.sessionId]){ + playerParagraph.innerHTML = '' + index + ": " + window.participants[p2pcf.sessionId]; + } else { + playerParagraph.innerHTML = '' + index + ": " + peer.client_id; + } + playerParagraph.style.marginTop = "10px"; + playerParagraph.style.marginBottom = "10px"; + playerParagraph.style.textAlign = "left"; + playerParagraph.style.fontSize = "0.6em"; + dropdown.appendChild(playerParagraph); + index++; + } + for (const peer of p2pcf.peers.values()) { let peerParagraph = document.createElement("p"); - peerParagraph.innerHTML = '' + index + ": " + peer.id; + + if(window.participants[peer.id]){ + peerParagraph.innerHTML = '' + index + ": " + window.participants[peer.id]; + } else { + peerParagraph.innerHTML = '' + index + ": " + peer.client_id; + } + // peerParagraph.innerHTML = '' + index + ": " + window.participants[peer.id].inWorldName; peerParagraph.style.marginTop = "10px"; peerParagraph.style.marginBottom = "10px"; peerParagraph.style.textAlign = "left"; peerParagraph.style.fontSize = "0.6em"; dropdown.appendChild(peerParagraph); + index++; } dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; }; // Function to toggle mute on the local audio stream const toggleMute = async (stream) => { - console.log("togglemute stream", stream); if (stream) { var muteIcon = document.getElementById("mute-icon"); @@ -349,7 +374,7 @@ const Networking = (props) => { const onMuteButtonPressed = (stream) => { toggleMute(stream); }; - + if (!document.location.hash) { document.location = document.location.toString() + `#3ov-${props.postSlug}`; } @@ -368,7 +393,7 @@ const Networking = (props) => { ); window.p2pcf = p2pcf; - console.log("client id:", p2pcf.clientId); + window.participants = []; const removePeerUi = (clientId) => { document.getElementById(clientId)?.remove(); @@ -408,8 +433,6 @@ const Networking = (props) => { PeerDropdownContent(); // Position the dropdown near the roomIcon let dropdown = document.getElementById("room-dropdown"); - dropdown.style.left = roomIcon.offsetLeft + "px"; - dropdown.style.top = roomIcon.offsetTop + roomIcon.offsetHeight + "px"; }); document.getElementById("network-ui-container").prepend(peerIcon); @@ -417,7 +440,6 @@ const Networking = (props) => { const addRoomUi = (sessionId) => { // if (document.getElementById(sessionId)) return; var roomIcon = document.createElement("button"); - console.log("icon", threeObjectPlugin + audioIcon); roomIcon.style.backgroundImage = `url(${threeObjectPlugin + worldIcon})`; roomIcon.style.backgroundSize = "cover"; roomIcon.style.width = "40px"; @@ -469,14 +491,10 @@ const Networking = (props) => { }; let stream; p2pcf.on("peerconnect", (peer) => { - console.log("Peer connect", peer.id, peer); - console.log(peer.client_id); - if (stream) { peer.addStream(stream); } peer.on("track", (track, stream) => { - console.log("got track", track); const video = document.createElement("audio"); video.id = `${peer.id}-audio`; video.srcObject = stream; @@ -518,7 +536,6 @@ const Networking = (props) => { const audioButton = document.getElementById("audio-button"); if(audioButton){ audioButton.addEventListener("click", async (button) => { - console.log("are we even trying here?") // request permissions for microphone devices then do audioDropdownContent navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) { AudioDropdownContent(button); @@ -526,12 +543,11 @@ const Networking = (props) => { }); } - p2pcf.start(); + p2pcf.start({ playerVRM: userData.playerVRM ? userData.playerVRM : defaultAvatar }); addPeerUi(); addRoomUi(); }; const handleLoaded = (event) => { - console.log("loaded", event); go(); // Remove the event listener after handling the first 'loaded' event window.removeEventListener("loaded", handleLoaded); diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index db311bf..5e87468 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -145,6 +145,7 @@ function loadMixamoAnimation(url, vrm) { } export default function Player(props) { + let heightOffset = 0; const p2pcf = props.p2pcf; const canMoveRef = useRef(true); @@ -303,6 +304,13 @@ export default function Player(props) { return baseSpeeds; } + if(playerController){ + // calculate the height of the character from head bone to foot bone + const headBone = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()); + const footBone = playerController.firstPerson.humanoid.humanBones.leftFoot.node.getWorldPosition(new Vector3()); + heightOffset = headBone.y - footBone.y; + } + let initialHeadPosition = null; if (playerController && !initialHeadPosition) { initialHeadPosition = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; @@ -332,7 +340,8 @@ export default function Player(props) { right.crossVectors(camera.up, forward); right.normalize(); // initialize the moving state to false - const raycaster = state.raycaster; + const raycaster = state.raycaster; + if (timeSinceLastUpdate >= 0.1) { lastUpdateTime = currentTime; } @@ -424,7 +433,7 @@ export default function Player(props) { // Define the desired rotation matrix let matrix = new Matrix4(); matrix.lookAt(new Vector3(0,0,0), direction, new Vector3(0,1,0)); - + // Create a quaternion from the rotation matrix let desiredQuaternion = new Quaternion(); desiredQuaternion.setFromRotationMatrix(matrix); @@ -508,13 +517,15 @@ export default function Player(props) { participantObject.rotation.y, participantObject.rotation.z ]; + // console.log("userData", userData); const messageObject = { [p2pcf.clientId]: { position: position, rotation: rotation, profileImage: userData.profileImage, + playerVRM: userData.playerVRM, vrm: userData.vrm, - inWorldName: userData.inWorldName, + inWorldName: window.userData.inWorldName ? window.userData.inWorldName : userData.inWorldName, isMoving: "walking" } }; @@ -573,13 +584,18 @@ export default function Player(props) { if ( participantObject ) { // Get the desired head position. - const desiredY = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; + // const desiredY = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; + const desiredY = participantObject.parent.position.y; + // const initialHeadPosition = playerController.firstPerson.humanoid.humanBones.head.node.getWorldPosition(new Vector3()).y; + // calculate the height between head and the sphere location + const newY = desiredY + (heightOffset + 0.22); // console.log("cameraTarget", cameraTargetPosition.y); - // Smoothly update the camera target position using lerp. - // cameraTargetPosition.y = MathUtils.lerp(cameraTargetPosition.y, desiredY, 0.15); // 0.05 is the lerp factor. Adjust it for faster/slower transitions. - cameraTargetPosition.y = desiredY; + cameraTargetPosition.y = newY; + // cameraTargetPosition.y = MathUtils.damp(cameraTargetPosition.y, newY, 6, delta); + // cameraTargetPosition.y = MathUtils.lerp(cameraTargetPosition.y, desiredY, 0.15); // 0.05 is the lerp factor. Adjust it for faster/slower transitions. + // cameraTargetPosition.y = MathUtils.damp(cameraTargetPosition.y, desiredY, 0.8, delta); camera.lookAt( participantObject.parent.position.x, cameraTargetPosition.y, @@ -594,8 +610,6 @@ export default function Player(props) { orbitRef.current.target.lerpVectors(orbitRef.current.target, newTarget, 0.5); } } - - // update rigidBody's position if (rigidRef.current && participantObject?.parent?.position?.x) { // // match the rigidBody's position to the participantObject's position. // set the rigidbody type to one that can be moved by setTranslation @@ -605,10 +619,9 @@ export default function Player(props) { } else { rigidRef.current.setBodyType(rapier.RigidBodyType.Fixed, 1); } - - // set a const of the rigidBody's current position rigidRef.current.setTranslation({ x: participantObject.parent.position.x, y: rigidBodyPosition.y, z: participantObject.parent.position.z}); } + // Respawn logic if(props.movement.current.respawn === true){ const x = Number(props.spawnPoint[0]); diff --git a/blocks/environment/components/core/front/Participants.js b/blocks/environment/components/core/front/Participants.js index d0fc48a..e844ce1 100644 --- a/blocks/environment/components/core/front/Participants.js +++ b/blocks/environment/components/core/front/Participants.js @@ -131,7 +131,7 @@ function loadMixamoAnimation(url, vrm) { */ function Participant(participant) { const fallbackURL = threeObjectPlugin + defaultVRM; - const playerURL = userData.vrm ? userData.vrm : fallbackURL; + const playerURL = participant.playerVRM; const clonedModelRef = useRef(null); // Ref for the cloned model const animationMixerRef = participant.animationMixerRef; // Ref for the animation mixer of this participant const animationsRef = participant.animationsRef; // Ref to store animations @@ -271,6 +271,25 @@ function Participant(participant) { const box = new THREE.Box3().setFromObject(modelClone); const height = (box.max.y - box.min.y) + 0.1; + // use textureLoader to load the profile image. + const textureLoader = new THREE.TextureLoader(); + textureLoader.crossOrigin = ''; // Ensure cross-origin requests are allowed + const profileImage = textureLoader.load(participant.profileImage); + const displayName = participant.inWorldName ? participant.inWorldName : participant.name; + + let planeWidth = 0.25; + let fontSize = 0.04; + let xPos = 0.045; + if(displayName.length > 8){ + planeWidth = 0.35; + xPos = -0.005; + } + if(displayName.length >= 16){ + planeWidth = 0.35; + fontSize = 0.032; + xPos = -0.005; + } + return ( @@ -281,13 +300,13 @@ function Participant(participant) { geometry={new THREE.PlaneGeometry(0.1, 0.1)} name="displayNamePfp" > - + @@ -301,7 +320,7 @@ function Participant(participant) { ref={participant.textRef} className="content" scale={[1, 1, 1]} - fontSize={0.04} + fontSize={fontSize} rotation-y={-Math.PI} width={0.5} maxWidth={0.5} @@ -310,7 +329,7 @@ function Participant(participant) { // color={model.textColor} transform > - {participant.name} + {displayName} @@ -331,69 +350,17 @@ export function Participants(props) { const textRefs = useRef({}); const participantRefs = useRef({}); - const fetchProfilePlane = async (pfp, modelToModify, displayNameBackground, inWorldName, displayNameText) => { - // console.log("fetchProfilePlane", pfp, modelToModify, displayNameBackground, inWorldName, displayNameText); - if(pfp){ - try { - const response = await fetch(pfp); - if (response.status === 200) { - const textureLoader = new THREE.TextureLoader(); - textureLoader.crossOrigin = ''; - textureLoader.load(pfp, (loadedProfile) => { - // Now we are sure the texture is loaded - if( modelToModify.isObject3D ){ - modelToModify.frustumCulled = false; - const newMat = modelToModify.material.clone(); - newMat.map = loadedProfile; - newMat.map.needsUpdate = true; - newMat.needsUpdate = true; - modelToModify.material = newMat; - } - } - ); - return response; - } - } catch (err) { - // Handle the error properly or rethrow it to be caught elsewhere. - // console.error("Error fetching profile:", err); - // throw err; - } - } - }; - useEffect(() => { if(window.p2pcf){ window.p2pcf.on("msg", (peer, data) => { + // if window.participants does not have peer.id key, return + if(!(peer.id in window.participants)){ + return; + } const finalData = new TextDecoder("utf-8").decode(data); const participantData = JSON.parse(finalData); - // console.log("refs", animationMixerRef, animationsRef, mixers); const participantObject = theScene.scene.getObjectByName(peer.client_id); - if(!participantRefs.current[peer.client_id]) { - participantRefs.current[peer.client_id] = { profileFetched: false }; - } - - // find the object in the parent of participantObject that is named displayNamePfp - const displayNamePfp = participantObject?.parent?.getObjectByName("displayNamePfp"); - const displayNameBackground = participantObject?.parent?.getObjectByName("displayNameBackground"); - if( ! participantRefs.current[peer.client_id].profileFetched && displayNameBackground ){ - setTimeout(() => { - fetchProfilePlane( participantData[peer.client_id].profileImage, displayNamePfp, displayNameBackground, profileUserData.current[peer.client_id].inWorldName, textRefs.current[peer.client_id] ) - .then((response) => { - participantRefs.current[peer.client_id].profileFetched = true; - if(participantData[peer.client_id]?.inWorldName){ - if(participantData[peer.client_id]?.inWorldName.length > 8){ - displayNameBackground.geometry = new THREE.PlaneGeometry(0.35, 0.07); - displayNameBackground.position.x = -0.005; - if(participantData[peer.client_id]?.inWorldName.length > 16){ - textRefs.current[peer.client_id].fontSize = 0.034; - } - } - } - }); - }, 1000); - } - - + if (animationsRef.current[peer.client_id]) { const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); // Walking animation const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); // Idle animation @@ -423,6 +390,9 @@ export function Participants(props) { } if(textRefs.current[peer.client_id] && participantData[peer.client_id]?.inWorldName) { textRefs.current[peer.client_id].text = participantData[peer.client_id].inWorldName; + window.participants[peer.id] = participantData[peer.client_id].inWorldName; + } else { + window.participants[peer.id] = participantData[peer.client_id].inWorldName; } }); } @@ -432,6 +402,8 @@ export function Participants(props) { const p2pcf = window.p2pcf; if (p2pcf) { p2pcf.on("peerclose", (peer) => { + // remove window.participants[peer.id] + delete window.participants[peer.id]; const participantObject = theScene.scene.getObjectByName(peer.client_id); // remove the participantObject if (participantObject) { @@ -443,28 +415,42 @@ export function Participants(props) { } // remove peer.client_id props.setParticipant(prevParticipants => { - return prevParticipants.filter(item => item !== peer.client_id); - } - ); + return prevParticipants.filter(item => item[0] !== peer.client_id); + }); }); } }, []); useEffect(() => { const p2pcf = window.p2pcf; + const participants = window.participants; if (p2pcf) { - p2pcf.on("peerconnect", (peer) => { - console.log("peer connected", peer); - console.log("p2pcf peers", p2pcf.peers); - // emit the peer id to all other peers + + // listen for the peerconnect send that establishes the peer user data. + p2pcf.on("msg", (peer, data) => { + if((peer.id in window.participants)){ + return; + } + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + + const thisParticipantName = {}; + window.participants[peer.id] = ""; + props.setParticipant(prevParticipants => { - if (!prevParticipants.includes(peer.client_id)) { - return [...prevParticipants, peer.client_id]; + // Check if any sub-array has `peer.client_id` as its first element + const isParticipantExists = prevParticipants.some(participant => participant[0] === peer.client_id); + + if (!isParticipantExists) { + // If not found, add new participant + return [...prevParticipants, [peer.client_id, participantData.playerVRM, participantData.inWorldName, participantData.profileImage]]; } else { + // If found, return the array as is return prevParticipants; } }); }); + } }, []); @@ -473,13 +459,16 @@ export function Participants(props) { {props.participants && props.participants.map((item, index) => ( textRefs.current[item] = ref} + textRef={(ref) => textRefs.current[item[0]] = ref} profileUserData={profileUserData} + playerVRM = {item[1]} + inWorldName = {item[2]} + profileImage = {item[3]} /> ))} diff --git a/blocks/environment/components/p2pcf/p2pcf.js b/blocks/environment/components/p2pcf/p2pcf.js index 9c47a97..0b07656 100644 --- a/blocks/environment/components/p2pcf/p2pcf.js +++ b/blocks/environment/components/p2pcf/p2pcf.js @@ -15,6 +15,7 @@ import { } from "base64-arraybuffer"; import { hexToBytes } from "convert-hex"; import arrayBufferToHex from "array-buffer-to-hex"; +import defaultVRM from "../../../../inc/avatars/3ov_default_avatar.vrm"; // Based on Chrome const MAX_MESSAGE_LENGTH_BYTES = 16000; @@ -292,7 +293,7 @@ export default class P2PCF extends EventEmitter { packages, fastPollingDurationMs, fastPollingRateMs, - slowPollingRateMs + slowPollingRateMs, } = this; const now = Date.now(); @@ -320,7 +321,7 @@ export default class P2PCF extends EventEmitter { this.isSymmetric, localDtlsFingerprintBase64, this.startedAtTimestamp, - [...this.reflexiveIps] + [...this.reflexiveIps], ]; const payload = { r: roomId, k: contextId }; @@ -368,7 +369,6 @@ export default class P2PCF extends EventEmitter { this.lastPackages = JSON.stringify(packages); } } - const body = JSON.stringify(payload); const headers = { "Content-Type": "application/json " }; let keepalive = false; @@ -405,7 +405,6 @@ export default class P2PCF extends EventEmitter { payload.x = this.stateExpirationIntervalMs; payload.p = packages; this.lastPackages = JSON.stringify(packages); - const res = await fetch(this.workerUrl, { method: "POST", headers: { "Content-Type": "application/json" }, @@ -490,7 +489,7 @@ export default class P2PCF extends EventEmitter { remoteDtlsFingerprintBase64, remoteStartedAtTimestamp, remoteReflexiveIps, - remoteDataTimestamp + remoteDataTimestamp, ] = remotePeerData; // Don't process the same messages twice. This covers disconnect cases where stale data re-creates a peer too early. @@ -587,6 +586,7 @@ export default class P2PCF extends EventEmitter { peer.id = remoteSessionId; peer.client_id = remoteClientId; + this._wireUpCommonPeerEvents(peer); peers.set(peer.id, peer); @@ -814,7 +814,7 @@ export default class P2PCF extends EventEmitter { /** * Connect to network and start discovering peers */ - async start() { + async start(props) { this.startedAtTimestamp = Date.now(); await this._init(); @@ -828,6 +828,9 @@ export default class P2PCF extends EventEmitter { this.reflexiveIps = reflexiveIps; this.dtlsFingerprint = dtlsFingerprint; + let guestDefaultAvatar = defaultAvatar === '' ? threeObjectPlugin + defaultVRM : defaultAvatar; + this.playerVRM = userData.playerVRM ? userData.playerVRM : guestDefaultAvatar; + this.networkSettingsInterval = setInterval(async () => { const [ newUdpEnabled, @@ -1173,6 +1176,10 @@ export default class P2PCF extends EventEmitter { peer.on("connect", () => { this.emit("peerconnect", peer); + // after connecting, send the player data to participant + const playerData = { playerVRM: this.playerVRM, inWorldName: userData.inWorldName, profileImage: userData.profileImage}; + peer.send(new TextEncoder().encode(JSON.stringify(playerData))); + // Remove packages for the peer once connected removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); this._updateConnectedSessions(); diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index a406fbf..72bafcb 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -276,7 +276,8 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner .wp-block-three-object-viewer-environment { // display: flex !important; - background-color: rgb(42, 42, 42); + // background-color: rgb(42, 42, 42); + background-color: #FFFFFF; } .stats { @@ -324,6 +325,7 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner } .threeov-spinner { + margin-top:-40px; border: 8px solid #f3f3f3; border-top: 8px solid #007bff; border-radius: 50%; @@ -336,4 +338,86 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } + + @keyframes move { + 0%{ + transform: translateZ(-500px) rotate(0deg); + } + 100%{ + transform: translateZ(500px) rotate(0deg); + } + } + + @keyframes fade { + 0%{ + opacity: 0; + } + 25% { + opacity: 1; + } + 75% { + opacity: 1; + } + 100%{ + opacity: 0; + } + } + .scene{ + display: inline-block; + vertical-align: middle; + perspective: 5px; + perspective-origin: center; + position: relative; + } + + .wrap{ + position: absolute; + width: 100vw; + height: 100vh; + left: -500px; + top: -500px; + transform-style: preserve-3d; + animation: move 4s infinite linear; + animation-fill-mode: forwards; + } + + .wrap:nth-child(2){ + animation: move 4s infinite linear; + animation-delay: 6s; + } + + .wall { + width: 100%; + height: 100%; + position: absolute; + opacity: 0; + animation: fade 3s infinite linear; + animation-delay: 0; + } + + .wrap:nth-child(2) .wall { + animation-delay: 6s; + } + + .wall-right { + transform: rotateY(90deg) translateZ(500px); + } + + .wall-left { + transform: rotateY(-90deg) translateZ(500px); + } + + .wall-top { + transform: rotateX(90deg) translateZ(500px); + } + + .wall-bottom { + transform: rotateX(-90deg) translateZ(500px); + } + + .wall-back { + transform: rotateX(180deg) translateZ(500px); + } + + \ No newline at end of file diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 1e14250..668df8a 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -42,7 +42,9 @@ const lightsToAdd = document.querySelectorAll( ); // All blocks. -window.threeApp = threeApp[0].querySelectorAll("div"); +if(threeApp[0]){ + window.threeApp = threeApp[0].querySelectorAll("div"); +} threeApp.forEach((threeApp) => { if (threeApp) { diff --git a/blocks/model-block/block.json b/blocks/model-block/block.json index 8d1cb20..e742e00 100644 --- a/blocks/model-block/block.json +++ b/blocks/model-block/block.json @@ -54,7 +54,7 @@ }, "collidable": { "type": "boolean", - "default": true + "default": false } }, "category": "design", diff --git a/inc/assets/zoom.jpg b/inc/assets/zoom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be4ec0f0906044965ff50825e58666a48e78a9e6 GIT binary patch literal 284105 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
V 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

Cshx@je#XNI$b3mPqSOuaWGOFd$IcueY| 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 Kh6wyY|9=4anVK8` literal 0 HcmV?d00001 diff --git a/php/Plugin.php b/php/Plugin.php index 5642c6e..f3711ec 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -195,7 +195,6 @@ function threeobjectviewer_frontend_assets() { // Apply frontend filter $frontend_js = apply_filters( 'three-object-environment-frontend-js', $default_frontend_js ); - $current_user = wp_get_current_user(); $current_user = wp_get_current_user(); $playerVRM = get_user_meta($current_user->ID, 'user_data_vrm', true) ?: get_option('3ov_defaultAvatar'); $vrm = get_option('3ov_defaultAvatar'); @@ -229,8 +228,7 @@ function threeobjectviewer_frontend_assets() { 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ) ); - } - else { + } else { if($current_user->display_name){ $inWorldName = $current_user->display_name; } @@ -458,8 +456,7 @@ function threeobjectviewer_editor_assets() { 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ) ); - } - else { + } else { $user_data_passed = array( 'userId' => $current_user->user_login, 'inWorldName' => $current_user->in_world_name, @@ -503,8 +500,8 @@ function threeobjectviewer_editor_assets() { $default_avatar = get_option('3ov_defaultAvatar'); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'defaultAvatar', $default_avatar ); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'userData', $user_data_passed ); - - wp_enqueue_script( 'three-object-viewer-three-object-block-editor-script', 'three-object-viewer', ['wp-element', 'wp-data', 'wp-i18n', 'wp-hooks'], '', true ); + // @todo find out if this is really needed + // wp_enqueue_script( 'three-object-viewer-three-object-block-editor-script', 'three-object-viewer', ['wp-element', 'wp-data', 'wp-i18n', 'wp-hooks'], '', true ); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'threeObjectPlugin', $three_object_plugin ); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'threeObjectPluginRoot', $three_object_plugin_root ); wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'allowed_blocks', $ALLOWED_BLOCKS ); From 4d346a1854f777d1394ee99168616a57a25fb5bb Mon Sep 17 00:00:00 2001 From: antpb Date: Tue, 16 Jan 2024 21:20:11 -0600 Subject: [PATCH 14/43] fixes entry flow to let scene build before entering room --- .../components/EnvironmentFront.js | 86 ++++-- blocks/environment/components/Player.js | 16 ++ blocks/environment/editor.scss | 227 ++++++++-------- blocks/environment/frontend.js | 2 +- inc/assets/room_entry_background.svg | 254 ++++++++++++++++++ inc/assets/zoom.jpg | Bin 284105 -> 0 bytes 6 files changed, 454 insertions(+), 131 deletions(-) create mode 100644 inc/assets/room_entry_background.svg delete mode 100644 inc/assets/zoom.jpg diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index b134aa6..3e54b78 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -16,7 +16,6 @@ import { useAnimations, Html, } from "@react-three/drei"; -import zoomBackground from '../../../inc/assets/zoom.jpg'; // import { A11y } from "@react-three/a11y"; import { GLTFAudioEmitterExtension } from "three-omi"; @@ -26,6 +25,7 @@ import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import TeleportTravel from "./TeleportTravel"; import Player from "./Player"; import defaultEnvironment from "../../../inc/assets/default_grid.glb"; +import defaultLoadingZoomGraphic from "../../../inc/assets/room_entry_background.svg"; import defaultFont from "../../../inc/fonts/roboto.woff"; import { ItemBaseUI } from "@wordpress/components/build/navigation/styles/navigation-styles"; import { BoxGeometry } from "three"; @@ -54,78 +54,93 @@ function isVRCompatible() { } -function Loading(props) { - const backgroundImageUrl = props.previewImage !== "" ? props.previewImage : (threeObjectPlugin + zoomBackground); +function Loading({ visible, previewImage }) { + // const backgroundImageUrl = previewImage !== "" ? previewImage : (threeObjectPlugin + zoomBackground); + const backgroundImageUrl = defaultLoadingZoomGraphic; + // reveal one letter at a time of the string "Use [ W ], [ A ], [ S ], and [ D ] to move." + const tip = "Use [ W ], [ A ], [ S ], and [ D ] to move."; + const screenwidth = window.innerWidth; return ( - -

-
-
+ +
+
+
- {/*
-
-
-
*/}
-
+
-
-
Loading...
+ {/*
*/} +
+ Use [ W ], [ A ], [ S ], and [ D ] to move. +
); @@ -360,6 +375,12 @@ function ChatBox(props) { * @return {JSX.Element} The saved object. */ function SavedObject(props) { + useEffect(() => { + // Once the component is ready, dispatch an event to notify the parent + const event = new Event('yourComponentReady'); + document.dispatchEvent(event); + }, []); + useThree(({ camera, scene }) => { window.scene = scene; @@ -599,6 +620,23 @@ export default function EnvironmentFront(props) { const [messageObject, setMessageObject] = useState({"tone": "happy", "message": "hello!"}); const [objectsInRoom, setObjectsInRoom] = useState([]); const [url, setURL] = useState(props.threeUrl ? props.threeUrl : (threeObjectPlugin + defaultEnvironment)); + const [loadingWorld, setLoadingWorld] = useState(true); + + useEffect(() => { + const handleReady = () => { + setTimeout(() => { + const event = new Event("loaderIsGone"); + window.dispatchEvent(event); + setLoadingWorld(false); + }, 3000); + }; + // Listen for the ready event + document.addEventListener('yourComponentReady', handleReady); + + return () => { + document.removeEventListener('yourComponentReady', handleReady); + }; + }, []); if (loaded === true) { // emit javascript event "loaded" @@ -643,7 +681,8 @@ export default function EnvironmentFront(props) { {/* */} - }> + {loadingWorld && } + {props.hdr && diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 5e87468..0ebf6aa 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -145,6 +145,7 @@ function loadMixamoAnimation(url, vrm) { } export default function Player(props) { + let heightOffset = 0; const p2pcf = props.p2pcf; @@ -154,6 +155,15 @@ export default function Player(props) { const orbitRef = useRef(); const rigidRef = useRef(); const castRef = useRef(); + const [loaderIsGone, setLoaderIsGone] = useState(false); + + useEffect(() => { + const handleReady = () => { + setLoaderIsGone(true); + removeEventListener('loaderIsGone', handleReady); + }; + window.addEventListener('loaderIsGone', handleReady); + }, []); const idleFile = threeObjectPlugin + idle; const walkingFile = threeObjectPlugin + walk; @@ -322,12 +332,18 @@ export default function Player(props) { // frame loop useFrame((state, delta) => { + if(!loaderIsGone){ + return; + } + + handleBlinking(delta); let isMoving = false; const currentTime = state.clock.elapsedTime; const timeSinceLastUpdate = currentTime - lastUpdateTime; + let rigidBodyPosition = [0, 0, 0] if(rigidRef.current?.translation()){ rigidBodyPosition = rigidRef.current.translation(); diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 72bafcb..55b6291 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -1,5 +1,5 @@ - .wp-block-three-object-block { +.wp-block-three-object-block { border: 1px dotted #f00; } @@ -7,7 +7,8 @@ position: relative; top: 0; bottom: 0; - width: 105%; + // look into why this was formerly 105% + width: 100%; height: 100vh; } @@ -68,7 +69,7 @@ position: absolute; top: 20px !important; left: 20px; - background-color: rgb(92 90 90 / 51%) !important; + background-color: rgb(92 90 90 / 51%) !important; // background-color: rgba(34, 34, 34, 0.677) !important; z-index: 1000; width: 200px; @@ -84,27 +85,6 @@ text-align: center; border-radius: 20px; } -.threeov-entry-flow button { - background-color: #404040; - border-radius: 10px; - border: none; - // add dropshadow - box-shadow: 0px 0px 5px 1px #0000005e; - color: white; - cursor: pointer; - margin-top: 20px !important; -} - -.threeov-entry-flow button:hover { - background-color: #5a5a5a; - border-radius: 10px; - border: none; - // add dropshadow - box-shadow: 0px 0px 5px 1px #7f7f7f5e; - color: white; - cursor: pointer; - margin-top: 20px !important; -} .threeov-entry-flow input { border-radius: 10px; @@ -114,23 +94,23 @@ } .glb-preview-container { - padding: 100px; - text-align: center; - align-items: center; - align-content: center; - background-color:#f2f2f2; - height: 773px; - box-sizing: border-box; - padding-left: 230px !important; - } - - .glb-preview-container button{ + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + height: 773px; + box-sizing: border-box; + padding-left: 230px !important; +} + +.glb-preview-container button{ padding: 15px; border-radius: 30px; padding: 5px !important; - border-radius: 30px !important; - padding-left: 20px !important; - padding-right: 20px !important; + border-radius: 30px !important; + padding-left: 20px !important; + padding-right: 20px !important; } .three-object-viewer-button { @@ -164,8 +144,8 @@ float: left; padding-left:10px !important; height: auto; - padding-right: 10px !important; - // background-color: rgb(42, 42, 42); + padding-right: 10px !important; + // background-color: rgb(42, 42, 42); } .wp-block-three-object-viewer-environment .block-editor-inner-blocks { @@ -177,15 +157,15 @@ .wp-block-three-object-viewer-environment .block-editor-inner-blocks.iframe { height: 100vh; - } - - .wp-block-three-object-viewer-environment .block-editor-inner-blocks:not(.iframe) { +} + +.wp-block-three-object-viewer-environment .block-editor-inner-blocks:not(.iframe) { height: 90vh; - } - +} - .three-object-viewer-edit-panel .wide-slider { - display: block; + +.three-object-viewer-edit-panel .wide-slider { + display: block; } .three-object-environment-edit-container .threeov-three-number-settings { @@ -205,7 +185,7 @@ margin: 0 auto; } .three-object-viewer-inner-edit-container .three-object-viewer-model-name { - font-size: 0.7em; + font-size: 0.7em; } .three-object-viewer-inner-edit-container { @@ -230,7 +210,7 @@ box-shadow:0px 1px 5px 1px #1e1e1e; display: flex; padding-left: 10px; - padding-top: 5px; + padding-top: 5px; } div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner) { @@ -266,8 +246,8 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner margin: 0px 0px -60px; right: 0; position: absolute; - background-color: #8e00f2; - color: white; + background-color: #8e00f2; + color: white; } .wp-block-three-object-viewer-environment:has(> .block-editor-inner-blocks) { @@ -308,11 +288,11 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner z-index: 100; } .threeov-chat-container { - background-color: rgba(0,0,0,.8) !important; - z-index: 1001 !important; - width: 100% !important; - padding: 0px !important; - margin-left: -8px !important; + background-color: rgba(0,0,0,.8) !important; + z-index: 1001 !important; + width: 100% !important; + padding: 0px !important; + margin-left: -8px !important; } @@ -332,45 +312,56 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner width: 60px; height: 60px; animation: spin 1s linear infinite; - } - - @keyframes spin { +} + +@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } - } - - @keyframes move { +} + +@keyframes move { 0%{ - transform: translateZ(-500px) rotate(0deg); + transform: translateZ(-500px) rotate(0deg); } 100%{ - transform: translateZ(500px) rotate(0deg); + transform: translateZ(500px) rotate(0deg); } - } - - @keyframes fade { +} + +@keyframes fade { 0%{ - opacity: 0; + opacity: 1; } 25% { - opacity: 1; + opacity: 1; } 75% { - opacity: 1; + opacity: 1; + } + 90% { + opacity: 1; } 100%{ - opacity: 0; + opacity: 1; } - } - .scene{ +} + +.threeov-entry-scene{ display: inline-block; vertical-align: middle; perspective: 5px; perspective-origin: center; position: relative; - } - - .wrap{ + background-color: #FFFFFF !important; +} + +.threeov-entry-scene-parent { + background: radial-gradient(circle, transparent, transparent 0%, white 2%); +} + + + +.threeov-entry-wrap{ position: absolute; width: 100vw; height: 100vh; @@ -379,45 +370,69 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner transform-style: preserve-3d; animation: move 4s infinite linear; animation-fill-mode: forwards; - } - - .wrap:nth-child(2){ +} + +.threeov-entry-wrap:nth-child(2){ animation: move 4s infinite linear; animation-delay: 6s; - } - - .wall { - width: 100%; - height: 100%; +} + +.threeov-entry-wall { + width: 105%; + height: 105%; position: absolute; opacity: 0; - animation: fade 3s infinite linear; + animation: fade 2s infinite linear; animation-delay: 0; - } - - .wrap:nth-child(2) .wall { +} + +.threeov-entry-wrap:nth-child(2) .threeov-entry-wall { animation-delay: 6s; - } - - .wall-right { +} + +.threeov-entry-wall-right { transform: rotateY(90deg) translateZ(500px); - } - - .wall-left { +} + +.threeov-entry-wall-left { transform: rotateY(-90deg) translateZ(500px); - } - - .wall-top { +} + +.threeov-entry-wall-top { transform: rotateX(90deg) translateZ(500px); - } - - .wall-bottom { +} + +.threeov-entry-wall-bottom { transform: rotateX(-90deg) translateZ(500px); - } - - .wall-back { +} + +.threeov-entry-wall-back { transform: rotateX(180deg) translateZ(500px); - } +} - - \ No newline at end of file +.threeov-load-world-button { + background-color: #b7ff00; + border-radius: 20px; + padding: 5px 10px; + border: 1px solid #98d400; + color: #fff; + cursor: pointer; + margin-top: 20px; + color: #451a00; + font-weight: 600; + margin-right: 5px; + letter-spacing: .01em; + max-width: 120px; + text-transform: uppercase; +} + +.threeov-entry-flow button:hover { + background-color: #ccff4c; + border: 1px solid #98d400; + // add dropshadow + box-shadow: 0px 0px 5px 1px #7f7f7f5e; + color: white; + cursor: pointer; + color: #451a00; + font-weight: 600; +} diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 668df8a..f78386b 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -164,7 +164,7 @@ threeApp.forEach((threeApp) => { previewImage={threePreviewImage} hdr ={hdr ? hdr : ""} /> -\ , + , threeApp ); } diff --git a/inc/assets/room_entry_background.svg b/inc/assets/room_entry_background.svg new file mode 100644 index 0000000..c36652b --- /dev/null +++ b/inc/assets/room_entry_background.svg @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inc/assets/zoom.jpg b/inc/assets/zoom.jpg deleted file mode 100644 index be4ec0f0906044965ff50825e58666a48e78a9e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284105 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

Cshx@je#XNI$b3mPqSOuaWGOFd$IcueY| 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 Kh6wyY|9=4anVK8` From 6f8ccbb67c31c7c2def9347c767f10d25c9dc095 Mon Sep 17 00:00:00 2001 From: antpb Date: Tue, 16 Jan 2024 23:11:18 -0600 Subject: [PATCH 15/43] adjust css for the entry flow --- .../components/EnvironmentFront.js | 14 ++++--- blocks/environment/editor.scss | 37 +++++++++++++------ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 3e54b78..3ce2b13 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -63,6 +63,7 @@ function Loading({ visible, previewImage }) { return (

@@ -137,7 +138,9 @@ function Loading({ visible, previewImage }) { textAlign: "center", position: "absolute", textShadow: "0 0 10px rgba(0,0,0,0.5)", - bottom: ( screenwidth < 600 ? "80px" : "80px" ), + bottom: ( screenwidth < 600 ? "130px" : "130px" ), + fontSize: "0.9em", + width: "350px" }}> Use [ W ], [ A ], [ S ], and [ D ] to move.
@@ -2036,15 +2039,16 @@ export default function EnvironmentFront(props) {
{ ( props.networkingBlock.length > 0 ) && (
- Display Name +
+ {/* Display Name */} setDisplayName(e.target.value)} />
)} diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 55b6291..8b06c6f 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -330,37 +330,33 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner @keyframes fade { 0%{ - opacity: 1; + opacity: 1; } 25% { - opacity: 1; + opacity: 1; } 75% { - opacity: 1; - } - 90% { opacity: 1; } 100%{ - opacity: 1; + opacity: 1; } } .threeov-entry-scene{ display: inline-block; vertical-align: middle; - perspective: 5px; + perspective: 6px; perspective-origin: center; position: relative; background-color: #FFFFFF !important; } .threeov-entry-scene-parent { - background: radial-gradient(circle, transparent, transparent 0%, white 2%); + background: radial-gradient(circle, transparent, transparent 10%, white 2%); + width: 100% !important; } - - .threeov-entry-wrap{ position: absolute; width: 100vw; @@ -378,8 +374,8 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner } .threeov-entry-wall { - width: 105%; - height: 105%; + width: 100%; + height: 100%; position: absolute; opacity: 0; animation: fade 2s infinite linear; @@ -436,3 +432,20 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner color: #451a00; font-weight: 600; } + +.threeov-entry-pfp { + width: 100px; + height: 100px; + border-radius: 50%; + background-color: #b7ff00; + border: 2px solid #98d400; + margin: 0 auto; + margin-top: 20px; + background-position: center; + background-size: cover; + padding: 0px; + padding-bottom: 5px; + align-items: center; + justify-content: center; + display: flex; +} \ No newline at end of file From fa72b3771c4303abe4201e3effe571190d031d93 Mon Sep 17 00:00:00 2001 From: antpb Date: Sat, 20 Jan 2024 21:17:51 -0600 Subject: [PATCH 16/43] adds room balancing and restructures all blocks to use proper components --- .gitignore | 1 + blocks/environment/Deprecated.js | 348 ++++ blocks/environment/Save.js | 59 +- blocks/environment/block.json | 104 +- .../components/EnvironmentFront.js | 1428 ++++++++++------- blocks/environment/components/Networking.js | 34 +- blocks/environment/components/Player.js | 13 +- .../components/core/front/ThreeSky.js | 48 +- blocks/environment/components/p2pcf/p2pcf.js | 52 +- blocks/environment/editor.scss | 51 +- blocks/environment/frontend.js | 285 ++-- blocks/environment/index.js | 262 +-- blocks/model-block/Deprecated.js | 206 +++ blocks/model-block/Save.js | 55 +- blocks/model-block/index.js | 106 +- blocks/npc-block/Deprecated.js | 269 ++++ blocks/npc-block/Save.js | 55 +- blocks/npc-block/index.js | 181 +-- blocks/sky-block/Deprecated.js | 69 + blocks/sky-block/Edit.js | 4 +- blocks/sky-block/Save.js | 23 +- blocks/sky-block/index.js | 25 +- blocks/spawn-point-block/Deprecated.js | 62 + blocks/spawn-point-block/Save.js | 35 +- blocks/spawn-point-block/index.js | 181 +-- blocks/three-audio-block/Deprecated.js | 326 ++++ blocks/three-audio-block/Save.js | 87 +- blocks/three-audio-block/index.js | 182 +-- blocks/three-image-block/Deprecated.js | 103 ++ blocks/three-image-block/Save.js | 55 +- blocks/three-image-block/index.js | 182 +-- blocks/three-light-block/Deprecated.js | 120 ++ blocks/three-light-block/Save.js | 75 +- blocks/three-light-block/index.js | 6 +- blocks/three-networking-block/Edit.js | 3 +- blocks/three-networking-block/Save.js | 13 +- blocks/three-portal-block/Deprecated.js | 318 ++++ blocks/three-portal-block/Save.js | 79 +- blocks/three-portal-block/block.json | 168 +- blocks/three-portal-block/index.js | 182 +-- blocks/three-text-block/Deprecated.js | 280 ++++ blocks/three-text-block/Save.js | 47 +- blocks/three-text-block/block.json | 142 +- blocks/three-text-block/index.js | 182 +-- blocks/three-video-block/Deprecated.js | 216 +++ blocks/three-video-block/Save.js | 61 +- blocks/three-video-block/index.js | 108 +- 47 files changed, 3952 insertions(+), 2939 deletions(-) create mode 100644 blocks/environment/Deprecated.js create mode 100644 blocks/model-block/Deprecated.js create mode 100644 blocks/npc-block/Deprecated.js create mode 100644 blocks/sky-block/Deprecated.js create mode 100644 blocks/spawn-point-block/Deprecated.js create mode 100644 blocks/three-audio-block/Deprecated.js create mode 100644 blocks/three-image-block/Deprecated.js create mode 100644 blocks/three-light-block/Deprecated.js create mode 100644 blocks/three-portal-block/Deprecated.js create mode 100644 blocks/three-text-block/Deprecated.js create mode 100644 blocks/three-video-block/Deprecated.js diff --git a/.gitignore b/.gitignore index d297c64..9953b72 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ vendor wordpress build pro/ +plugin-build/free/*.zip .phpunit.result.cache plugin-build/pro/three-object-viewer/* !plugin-build/pro/three-object-viewer/.gitkeep diff --git a/blocks/environment/Deprecated.js b/blocks/environment/Deprecated.js new file mode 100644 index 0000000..bfaf47e --- /dev/null +++ b/blocks/environment/Deprecated.js @@ -0,0 +1,348 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + align: { + type: "string", + default: "full" + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + threePreviewImage: { + type: "string", + default: null + }, + deviceTarget: { + type: "string", + default: "vr" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

{props.attributes.scale}

+

+ {props.attributes.bg_color} +

+

{props.attributes.zoom}

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

{props.attributes.scale}

+

+ {props.attributes.threePreviewImage} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + align: { + type: "string", + default: "full" + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + threePreviewImage: { + type: "string", + default: null + }, + hdr: { + type: "string", + default: null + }, + deviceTarget: { + type: "string", + default: "vr" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.hdr} +

+

{props.attributes.scale}

+

+ {props.attributes.bg_color} +

+

{props.attributes.zoom}

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

{props.attributes.scale}

+

+ {props.attributes.threePreviewImage} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ]; +} \ No newline at end of file diff --git a/blocks/environment/Save.js b/blocks/environment/Save.js index 410dd04..d2c74fe 100644 --- a/blocks/environment/Save.js +++ b/blocks/environment/Save.js @@ -2,46 +2,25 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps, InnerBlocks } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.deviceTarget} -

-

- {attributes.threeObjectUrl} -

-

- {attributes.hdr} -

-

{attributes.scale}

-

- {attributes.bg_color} -

-

{attributes.zoom}

-

- {attributes.hasZoom ? 1 : 0} -

-

- {attributes.hasTip ? 1 : 0} -

-

- {attributes.positionY} -

-

- {attributes.rotationY} -

-

{attributes.scale}

-

- {attributes.threePreviewImage} -

-

- {attributes.animations} -

- -
- -
+ + + ); } diff --git a/blocks/environment/block.json b/blocks/environment/block.json index 4ddf219..86967a0 100644 --- a/blocks/environment/block.json +++ b/blocks/environment/block.json @@ -1,57 +1,57 @@ { - "name": "three-object-viewer/environment", - "attributes": { - "align": { - "type": "string", - "default": "full" - }, - "scale": { - "type": "integer", - "default": 1 - }, - "positionX": { - "type": "integer", - "default": 0 - }, - "positionY": { - "type": "integer", - "default": 0 - }, - "rotationY": { - "type": "integer", - "default": 0 - }, - "threeObjectUrl": { - "type": "string", - "default": null - }, - "threePreviewImage": { - "type": "string", - "default": null - }, - "hdr": { - "type": "string", - "default": null - }, - "deviceTarget": { - "type": "string", - "default": "vr" - }, - "animations": { - "type": "string", - "default": "" - } - }, - "category": "design", - "apiVersion": 2, - "supports": { - "html": false, - "multiple": false, + "name": "three-object-viewer/environment", + "attributes": { + "align": { + "type": "string", + "default": "full" + }, + "scale": { + "type": "integer", + "default": 1 + }, + "positionX": { + "type": "integer", + "default": 0 + }, + "positionY": { + "type": "integer", + "default": 0 + }, + "rotationY": { + "type": "integer", + "default": 0 + }, + "threeObjectUrl": { + "type": "string", + "default": null + }, + "threePreviewImage": { + "type": "string", + "default": null + }, + "hdr": { + "type": "string", + "default": null + }, + "deviceTarget": { + "type": "string", + "default": "vr" + }, + "animations": { + "type": "string", + "default": "" + } + }, + "category": "design", + "apiVersion": 2, + "supports": { + "html": false, + "multiple": false, "hasOverlay": false, - "align": ["full"] - }, - "textdomain": "three-object-viewer", - "editorScript": "file:../../build/block-environment.js", + "align": ["full"] + }, + "textdomain": "three-object-viewer", + "editorScript": "file:../../build/block-environment.js", "editorStyle": "file:../../build/block-environment.css", "style": "file:../../build/block-environment.css" } diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index 3ce2b13..bb46b5b 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -695,7 +695,6 @@ export default function EnvironmentFront(props) { } { - const imagePosX = - item.querySelector( - "p.image-block-positionX" - ) - ? item.querySelector( + let imagePosX, imagePosY, imagePosZ, imageScaleX, imageScaleY, imageScaleZ; + let imageRotationX, imageRotationY, imageRotationZ, imageUrl, aspectHeight, aspectWidth; + let transparent; + if(item.tagName.toLowerCase() === 'three-image-block'){ + imagePosX = item.getAttribute('positionX') || ''; + imagePosY = item.getAttribute('positionY') || ''; + imagePosZ = item.getAttribute('positionZ') || ''; + imageScaleX = item.getAttribute('scaleX') || ''; + imageScaleY = item.getAttribute('scaleY') || ''; + imageScaleZ = item.getAttribute('scaleZ') || ''; + imageRotationX = item.getAttribute('rotationX') || ''; + imageRotationY = item.getAttribute('rotationY') || ''; + imageRotationZ = item.getAttribute('rotationZ') || ''; + imageUrl = item.getAttribute('imageUrl') || ''; + aspectHeight = item.getAttribute('aspectHeight') || ''; + aspectWidth = item.getAttribute('aspectWidth') || ''; + transparent = item.getAttribute('transparent') || false; + } else { + imagePosX = + item.querySelector( "p.image-block-positionX" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-positionX" + ).innerText + : ""; - const imagePosY = - item.querySelector( - "p.image-block-positionY" - ) - ? item.querySelector( + imagePosY = + item.querySelector( "p.image-block-positionY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-positionY" + ).innerText + : ""; - const imagePosZ = - item.querySelector( - "p.image-block-positionZ" - ) - ? item.querySelector( + imagePosZ = + item.querySelector( "p.image-block-positionZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-positionZ" + ).innerText + : ""; - const imageScaleX = - item.querySelector( - "p.image-block-scaleX" - ) - ? item.querySelector( + imageScaleX = + item.querySelector( "p.image-block-scaleX" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-scaleX" + ).innerText + : ""; - const imageScaleY = - item.querySelector( - "p.image-block-scaleY" - ) - ? item.querySelector( + imageScaleY = + item.querySelector( "p.image-block-scaleY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-scaleY" + ).innerText + : ""; - const imageScaleZ = - item.querySelector( - "p.image-block-scaleZ" - ) - ? item.querySelector( + imageScaleZ = + item.querySelector( "p.image-block-scaleZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-scaleZ" + ).innerText + : ""; - const imageRotationX = - item.querySelector( - "p.image-block-rotationX" - ) - ? item.querySelector( + imageRotationX = + item.querySelector( "p.image-block-rotationX" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-rotationX" + ).innerText + : ""; - const imageRotationY = - item.querySelector( - "p.image-block-rotationY" - ) - ? item.querySelector( + imageRotationY = + item.querySelector( "p.image-block-rotationY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-rotationY" + ).innerText + : ""; - const imageRotationZ = - item.querySelector( - "p.image-block-rotationZ" - ) - ? item.querySelector( + imageRotationZ = + item.querySelector( "p.image-block-rotationZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-rotationZ" + ).innerText + : ""; - const imageUrl = - item.querySelector( - "p.image-block-url" - ) - ? item.querySelector( + imageUrl = + item.querySelector( "p.image-block-url" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-url" + ).innerText + : ""; - const aspectHeight = - item.querySelector( - "p.image-block-aspect-height" - ) - ? item.querySelector( + aspectHeight = + item.querySelector( "p.image-block-aspect-height" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-aspect-height" + ).innerText + : ""; - const aspectWidth = - item.querySelector( - "p.image-block-aspect-width" - ) - ? item.querySelector( + aspectWidth = + item.querySelector( "p.image-block-aspect-width" - ).innerText - : ""; + ) + ? item.querySelector( + "p.image-block-aspect-width" + ).innerText + : ""; - const transparent = - item.querySelector( - "p.image-block-transparent" - ) - ? item.querySelector( + transparent = + item.querySelector( "p.image-block-transparent" - ).innerText - : false; + ) + ? item.querySelector( + "p.image-block-transparent" + ).innerText + : false; + } return ( ); })} - {Object.values( - props.videosToAdd - ).map((item, index) => { - const videoPosX = + {Object.values(props.videosToAdd).map((item, index) => { + let videoPosX, videoPosY, videoPosZ, videoScaleX, videoScaleY, videoScaleZ; + let videoRotationX, videoRotationY, videoRotationZ, videoUrl, aspectHeight, aspectWidth; + let autoPlay, customModel, videoModelUrl; + + if (item.tagName.toLowerCase() === 'three-video-block') { + videoPosX = item.getAttribute('positionX') || ''; + videoPosY = item.getAttribute('positionY') || ''; + videoPosZ = item.getAttribute('positionZ') || ''; + videoScaleX = item.getAttribute('scaleX') || ''; + videoScaleY = item.getAttribute('scaleY') || ''; + videoScaleZ = item.getAttribute('scaleZ') || ''; + videoRotationX = item.getAttribute('rotationX') || ''; + videoRotationY = item.getAttribute('rotationY') || ''; + videoRotationZ = item.getAttribute('rotationZ') || ''; + videoUrl = item.getAttribute('videoUrl') || ''; + aspectHeight = item.getAttribute('aspectHeight') || ''; + aspectWidth = item.getAttribute('aspectWidth') || ''; + autoPlay = item.hasAttribute('autoplay') ? "1" : false; + customModel = item.getAttribute('customModel') ? item.getAttribute('customModel') : false; + videoModelUrl = item.getAttribute('modelUrl') || ''; + } else { + videoPosX = item.querySelector( "p.video-block-positionX" ) @@ -913,106 +950,106 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const videoPosY = - item.querySelector( - "p.video-block-positionY" - ) - ? item.querySelector( + videoPosY = + item.querySelector( "p.video-block-positionY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-positionY" + ).innerText + : ""; - const videoPosZ = - item.querySelector( - "p.video-block-positionZ" - ) - ? item.querySelector( + videoPosZ = + item.querySelector( "p.video-block-positionZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-positionZ" + ).innerText + : ""; - const videoScaleX = - item.querySelector( - "p.video-block-scaleX" - ) - ? item.querySelector( + videoScaleX = + item.querySelector( "p.video-block-scaleX" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-scaleX" + ).innerText + : ""; - const videoScaleY = - item.querySelector( - "p.video-block-scaleY" - ) - ? item.querySelector( + videoScaleY = + item.querySelector( "p.video-block-scaleY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-scaleY" + ).innerText + : ""; - const videoScaleZ = - item.querySelector( - "p.video-block-scaleZ" - ) - ? item.querySelector( + videoScaleZ = + item.querySelector( "p.video-block-scaleZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-scaleZ" + ).innerText + : ""; - const videoRotationX = - item.querySelector( - "p.video-block-rotationX" - ) - ? item.querySelector( + videoRotationX = + item.querySelector( "p.video-block-rotationX" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-rotationX" + ).innerText + : ""; - const videoRotationY = - item.querySelector( - "p.video-block-rotationY" - ) - ? item.querySelector( + videoRotationY = + item.querySelector( "p.video-block-rotationY" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-rotationY" + ).innerText + : ""; - const videoRotationZ = - item.querySelector( - "p.video-block-rotationZ" - ) - ? item.querySelector( + videoRotationZ = + item.querySelector( "p.video-block-rotationZ" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-rotationZ" + ).innerText + : ""; - const videoUrl = - item.querySelector( - "div.video-block-url" - ) - ? item.querySelector( + videoUrl = + item.querySelector( "div.video-block-url" - ).innerText - : ""; + ) + ? item.querySelector( + "div.video-block-url" + ).innerText + : ""; - const aspectHeight = - item.querySelector( - "p.video-block-aspect-height" - ) - ? item.querySelector( + aspectHeight = + item.querySelector( "p.video-block-aspect-height" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-aspect-height" + ).innerText + : ""; - const aspectWidth = - item.querySelector( - "p.video-block-aspect-width" - ) - ? item.querySelector( + aspectWidth = + item.querySelector( "p.video-block-aspect-width" - ).innerText - : ""; + ) + ? item.querySelector( + "p.video-block-aspect-width" + ).innerText + : ""; - const autoPlay = + autoPlay = item.querySelector( "p.video-block-autoplay" ) @@ -1021,15 +1058,15 @@ export default function EnvironmentFront(props) { ).innerText : false; - const customModel = - item.querySelector( - "p.video-block-custom-model" - ) - ? item.querySelector( + customModel = + item.querySelector( "p.video-block-custom-model" - ).innerText - : false; - const videoModelUrl = + ) + ? item.querySelector( + "p.video-block-custom-model" + ).innerText + : false; + videoModelUrl = item.querySelector( "div.video-block-model-url" ) @@ -1037,8 +1074,8 @@ export default function EnvironmentFront(props) { "div.video-block-model-url" ).innerText : ""; - - return ( + } + return ( { - const audioPosX = item.querySelector("p.audio-block-positionX") - ? item.querySelector("p.audio-block-positionX").innerText - : ""; + let audioPosX, audioPosY, audioPosZ, audioScaleX, audioScaleY, audioScaleZ; + let audioRotationX, audioRotationY, audioRotationZ, audioUrl; + let autoPlay, loop, volume, positional, coneInnerAngle, coneOuterAngle, coneOuterGain, distanceModel, maxDistance, refDistance, rolloffFactor; + if (item.tagName.toLowerCase() === 'three-audio-block') { + audioPosX = item.getAttribute('positionX') || ''; + audioPosY = item.getAttribute('positionY') || ''; + audioPosZ = item.getAttribute('positionZ') || ''; + audioScaleX = item.getAttribute('scaleX') || ''; + audioScaleY = item.getAttribute('scaleY') || ''; + audioScaleZ = item.getAttribute('scaleZ') || ''; + audioRotationX = item.getAttribute('rotationX') || ''; + audioRotationY = item.getAttribute('rotationY') || ''; + audioRotationZ = item.getAttribute('rotationZ') || ''; + audioUrl = item.getAttribute('audioUrl') || ''; + autoPlay = item.hasAttribute('autoplay') ? "1" : false; + loop = item.hasAttribute('loop') ? "1" : false; + volume = item.getAttribute('volume') || ''; + positional = item.hasAttribute('positional') ? "1" : false; + coneInnerAngle = item.getAttribute('coneInnerAngle') || ''; + coneOuterAngle = item.getAttribute('coneOuterAngle') || ''; + coneOuterGain = item.getAttribute('coneOuterGain') || ''; + distanceModel = item.getAttribute('distanceModel') || ''; + maxDistance = item.getAttribute('maxDistance') || ''; + refDistance = item.getAttribute('refDistance') || ''; + rolloffFactor = item.getAttribute('rolloffFactor') || ''; + } else { + audioPosX = item.querySelector("p.audio-block-positionX") + ? item.querySelector("p.audio-block-positionX").innerText + : ""; - const audioPosY = item.querySelector("p.audio-block-positionY") - ? item.querySelector("p.audio-block-positionY").innerText - : ""; + audioPosY = item.querySelector("p.audio-block-positionY") + ? item.querySelector("p.audio-block-positionY").innerText + : ""; - const audioPosZ = item.querySelector("p.audio-block-positionZ") - ? item.querySelector("p.audio-block-positionZ").innerText - : ""; + audioPosZ = item.querySelector("p.audio-block-positionZ") + ? item.querySelector("p.audio-block-positionZ").innerText + : ""; - const audioScaleX = item.querySelector("p.audio-block-scaleX") - ? item.querySelector("p.audio-block-scaleX").innerText - : ""; + audioScaleX = item.querySelector("p.audio-block-scaleX") + ? item.querySelector("p.audio-block-scaleX").innerText + : ""; - const audioScaleY = item.querySelector("p.audio-block-scaleY") - ? item.querySelector("p.audio-block-scaleY").innerText - : ""; + audioScaleY = item.querySelector("p.audio-block-scaleY") + ? item.querySelector("p.audio-block-scaleY").innerText + : ""; - const audioScaleZ = item.querySelector("p.audio-block-scaleZ") - ? item.querySelector("p.audio-block-scaleZ").innerText - : ""; + audioScaleZ = item.querySelector("p.audio-block-scaleZ") + ? item.querySelector("p.audio-block-scaleZ").innerText + : ""; - const audioRotationX = item.querySelector("p.audio-block-rotationX") - ? item.querySelector("p.audio-block-rotationX").innerText - : ""; + audioRotationX = item.querySelector("p.audio-block-rotationX") + ? item.querySelector("p.audio-block-rotationX").innerText + : ""; - const audioRotationY = item.querySelector("p.audio-block-rotationY") - ? item.querySelector("p.audio-block-rotationY").innerText - : ""; + audioRotationY = item.querySelector("p.audio-block-rotationY") + ? item.querySelector("p.audio-block-rotationY").innerText + : ""; - const audioRotationZ = item.querySelector("p.audio-block-rotationZ") - ? item.querySelector("p.audio-block-rotationZ").innerText - : ""; + audioRotationZ = item.querySelector("p.audio-block-rotationZ") + ? item.querySelector("p.audio-block-rotationZ").innerText + : ""; - const audioUrl = item.querySelector("p.audio-block-url") - ? item.querySelector("p.audio-block-url").innerText - : ""; + audioUrl = item.querySelector("p.audio-block-url") + ? item.querySelector("p.audio-block-url").innerText + : ""; - const autoPlay = item.querySelector("p.audio-block-autoPlay") - ? item.querySelector("p.audio-block-autoPlay").innerText === "1" - : false; + autoPlay = item.querySelector("p.audio-block-autoPlay") + ? item.querySelector("p.audio-block-autoPlay").innerText === "1" + : false; - const loop = item.querySelector("p.audio-block-loop") - ? item.querySelector("p.audio-block-loop").innerText === "1" - : false; + loop = item.querySelector("p.audio-block-loop") + ? item.querySelector("p.audio-block-loop").innerText === "1" + : false; - const volume = item.querySelector("p.audio-block-volume") - ? Number(item.querySelector("p.audio-block-volume").innerText) - : 1; + volume = item.querySelector("p.audio-block-volume") + ? Number(item.querySelector("p.audio-block-volume").innerText) + : 1; - const positional = item.querySelector("p.audio-block-positional") - ? item.querySelector("p.audio-block-positional").innerText === "1" - : false; + positional = item.querySelector("p.audio-block-positional") + ? item.querySelector("p.audio-block-positional").innerText === "1" + : false; - const coneInnerAngle = item.querySelector("p.audio-block-coneInnerAngle") - ? Number(item.querySelector("p.audio-block-coneInnerAngle").innerText) - : 1; + coneInnerAngle = item.querySelector("p.audio-block-coneInnerAngle") + ? Number(item.querySelector("p.audio-block-coneInnerAngle").innerText) + : 1; - const coneOuterAngle = item.querySelector("p.audio-block-coneOuterAngle") - ? Number(item.querySelector("p.audio-block-coneOuterAngle").innerText) - : 1; + coneOuterAngle = item.querySelector("p.audio-block-coneOuterAngle") + ? Number(item.querySelector("p.audio-block-coneOuterAngle").innerText) + : 1; - const coneOuterGain = item.querySelector("p.audio-block-coneOuterGain") - ? Number(item.querySelector("p.audio-block-coneOuterGain").innerText) - : 1; + coneOuterGain = item.querySelector("p.audio-block-coneOuterGain") + ? Number(item.querySelector("p.audio-block-coneOuterGain").innerText) + : 1; - const distanceModel = item.querySelector("p.audio-block-distanceModel") - ? item.querySelector("p.audio-block-distanceModel").innerText - : "inverse"; + distanceModel = item.querySelector("p.audio-block-distanceModel") + ? item.querySelector("p.audio-block-distanceModel").innerText + : "inverse"; - const maxDistance = item.querySelector("p.audio-block-maxDistance") - ? Number(item.querySelector("p.audio-block-maxDistance").innerText) - : 1; + maxDistance = item.querySelector("p.audio-block-maxDistance") + ? Number(item.querySelector("p.audio-block-maxDistance").innerText) + : 1; - const refDistance = item.querySelector("p.audio-block-refDistance") - ? Number(item.querySelector("p.audio-block-refDistance").innerText) - : 1; + refDistance = item.querySelector("p.audio-block-refDistance") + ? Number(item.querySelector("p.audio-block-refDistance").innerText) + : 1; - const rolloffFactor = item.querySelector("p.audio-block-rolloffFactor") - ? Number(item.querySelector("p.audio-block-rolloffFactor").innerText) - : 1; + rolloffFactor = item.querySelector("p.audio-block-rolloffFactor") + ? Number(item.querySelector("p.audio-block-rolloffFactor").innerText) + : 1; + } return ( )} {Object.values(props.lightsToAdd).map((item, index) => { - const lightPosX = item.querySelector("p.light-block-positionX") - ? item.querySelector("p.light-block-positionX").innerText - : ""; + let lightPosX, lightPosY, lightPosZ, lightRotationX, lightRotationY, lightRotationZ; + let lightType, lightColor, lightItensity, lightDistance, lightDecay, lightAngle, lightPenumbra; + let targetX, targetY, targetZ = 0; + if (item.tagName.toLowerCase() === 'three-light-block') { + lightPosX = item.getAttribute('positionX') || ''; + lightPosY = item.getAttribute('positionY') || ''; + lightPosZ = item.getAttribute('positionZ') || ''; + lightRotationX = item.getAttribute('rotationX') || ''; + lightRotationY = item.getAttribute('rotationY') || ''; + lightRotationZ = item.getAttribute('rotationZ') || ''; + lightType = item.getAttribute('type') || 'ambient'; + lightColor = item.getAttribute('color') || ''; + lightItensity = item.getAttribute('intensity') || ''; + lightDistance = item.getAttribute('distance') || ''; + lightDecay = item.getAttribute('decay') || ''; + lightAngle = item.getAttribute('angle') || ''; + lightPenumbra = item.getAttribute('penumbra') || ''; + } else { + lightPosX = item.querySelector("p.light-block-positionX") + ? item.querySelector("p.light-block-positionX").innerText + : ""; - const lightPosY = item.querySelector("p.light-block-positionY") - ? item.querySelector("p.light-block-positionY").innerText - : ""; + lightPosY = item.querySelector("p.light-block-positionY") + ? item.querySelector("p.light-block-positionY").innerText + : ""; - const lightPosZ = item.querySelector("p.light-block-positionZ") - ? item.querySelector("p.light-block-positionZ").innerText - : ""; + lightPosZ = item.querySelector("p.light-block-positionZ") + ? item.querySelector("p.light-block-positionZ").innerText + : ""; - const lightRotationX = item.querySelector("p.light-block-rotationX") - ? item.querySelector("p.light-block-rotationX").innerText - : ""; + lightRotationX = item.querySelector("p.light-block-rotationX") + ? item.querySelector("p.light-block-rotationX").innerText + : ""; - const lightRotationY = item.querySelector("p.light-block-rotationY") - ? item.querySelector("p.light-block-rotationY").innerText - : ""; + lightRotationY = item.querySelector("p.light-block-rotationY") + ? item.querySelector("p.light-block-rotationY").innerText + : ""; - const lightRotationZ = item.querySelector("p.light-block-rotationZ") - ? item.querySelector("p.light-block-rotationZ").innerText - : ""; + lightRotationZ = item.querySelector("p.light-block-rotationZ") + ? item.querySelector("p.light-block-rotationZ").innerText + : ""; - const lightType = item.querySelector("p.light-block-type") - ? item.querySelector("p.light-block-type").innerText - : "ambient"; + lightType = item.querySelector("p.light-block-type") + ? item.querySelector("p.light-block-type").innerText + : "ambient"; - const lightColor = item.querySelector("p.light-block-color") - ? item.querySelector("p.light-block-color").innerText - : ""; + lightColor = item.querySelector("p.light-block-color") + ? item.querySelector("p.light-block-color").innerText + : ""; - const lightItensity = item.querySelector("p.light-block-intensity") - ? item.querySelector("p.light-block-intensity").innerText - : ""; - - const lightDistance = item.querySelector("p.light-block-distance") - ? item.querySelector("p.light-block-distance").innerText - : ""; + lightItensity = item.querySelector("p.light-block-intensity") + ? item.querySelector("p.light-block-intensity").innerText + : ""; + + lightDistance = item.querySelector("p.light-block-distance") + ? item.querySelector("p.light-block-distance").innerText + : ""; - const lightDecay = item.querySelector("p.light-block-decay") - ? item.querySelector("p.light-block-decay").innerText - : ""; + lightDecay = item.querySelector("p.light-block-decay") + ? item.querySelector("p.light-block-decay").innerText + : ""; - const lightAngle = item.querySelector("p.light-block-angle") - ? item.querySelector("p.light-block-angle").innerText - : ""; + lightAngle = item.querySelector("p.light-block-angle") + ? item.querySelector("p.light-block-angle").innerText + : ""; - const lightPenumbra = item.querySelector("p.light-block-penumbra") - ? item.querySelector("p.light-block-penumbra").innerText - : ""; + lightPenumbra = item.querySelector("p.light-block-penumbra") + ? item.querySelector("p.light-block-penumbra").innerText + : ""; + } return ( { - const modelPosX = - npc.querySelector( - "p.npc-block-position-x" - ) - ? npc.querySelector( + let url, modelPosX, modelPosY, modelPosZ, modelRotationX, modelRotationY, modelRotationZ, name, alt, defaultMessage, personality, objectAwareness; + if (npc.tagName.toLowerCase() === 'three-npc-block') { + url= npc.getAttribute('threeObjectUrl') || ''; + modelPosX = npc.getAttribute('positionX') || ''; + modelPosY = npc.getAttribute('positionY') || ''; + modelPosZ = npc.getAttribute('positionZ') || ''; + modelRotationX = npc.getAttribute('rotationX') || ''; + modelRotationY = npc.getAttribute('rotationY') || ''; + modelRotationZ = npc.getAttribute('rotationZ') || ''; + name = npc.getAttribute('name') || ''; + defaultMessage = npc.getAttribute('defaultMessage') || ''; + personality = npc.getAttribute('personality') || ''; + objectAwareness = npc.getAttribute('objectAwareness') || false; + } else { + modelPosX = + npc.querySelector( "p.npc-block-position-x" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-position-x" + ).innerText + : ""; - const modelPosY = - npc.querySelector( - "p.npc-block-position-y" - ) - ? npc.querySelector( + modelPosY = + npc.querySelector( "p.npc-block-position-y" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-position-y" + ).innerText + : ""; - const modelPosZ = - npc.querySelector( - "p.npc-block-position-z" - ) - ? npc.querySelector( + modelPosZ = + npc.querySelector( "p.npc-block-position-z" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-position-z" + ).innerText + : ""; - const modelRotationX = - npc.querySelector( - "p.npc-block-rotation-x" - ) - ? npc.querySelector( + modelRotationX = + npc.querySelector( "p.npc-block-rotation-x" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-rotation-x" + ).innerText + : ""; - const modelRotationY = - npc.querySelector( - "p.npc-block-rotation-y" - ) - ? npc.querySelector( + modelRotationY = + npc.querySelector( "p.npc-block-rotation-y" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-rotation-y" + ).innerText + : ""; - const modelRotationZ = - npc.querySelector( - "p.npc-block-rotation-z" - ) - ? npc.querySelector( + modelRotationZ = + npc.querySelector( "p.npc-block-rotation-z" - ).innerText - : ""; + ) + ? npc.querySelector( + "p.npc-block-rotation-z" + ).innerText + : ""; - const url = npc.querySelector( - "p.npc-block-url" - ) - ? npc.querySelector( + url = npc.querySelector( "p.npc-block-url" - ).innerText - : ""; - - const alt = npc.querySelector( - "p.npc-block-alt" - ) - ? npc.querySelector( - "p.npc-block-alt" - ).innerText - : ""; - - const personality = npc.querySelector( - "p.npc-block-personality" ) ? npc.querySelector( - "p.npc-block-personality" + "p.npc-block-url" ).innerText : ""; - const defaultMessage = npc.querySelector( - "p.npc-block-default-message" - ) - ? npc.querySelector( - "p.npc-block-default-message" - ).innerText - : ""; - - const name = npc.querySelector( - "p.npc-block-name" + alt = npc.querySelector( + "p.npc-block-alt" ) ? npc.querySelector( - "p.npc-block-name" + "p.npc-block-alt" ).innerText : ""; + + personality = npc.querySelector( + "p.npc-block-personality" + ) + ? npc.querySelector( + "p.npc-block-personality" + ).innerText + : ""; + + defaultMessage = npc.querySelector( + "p.npc-block-default-message" + ) + ? npc.querySelector( + "p.npc-block-default-message" + ).innerText + : ""; - const objectAwareness = - npc.querySelector( - "p.npc-block-object-awareness" - ) - ? npc.querySelector( + name = npc.querySelector( + "p.npc-block-name" + ) + ? npc.querySelector( + "p.npc-block-name" + ).innerText + : ""; + + objectAwareness = + npc.querySelector( "p.npc-block-object-awareness" - ).innerText - : false; + ) + ? npc.querySelector( + "p.npc-block-object-awareness" + ).innerText + : false; + } return ( { - const modelPosX = - model.querySelector( - "p.model-block-position-x" - ) - ? model.querySelector( + let modelPosX, modelPosY, modelPosZ, modelScaleX, modelScaleY, modelScaleZ; + let modelRotationX, modelRotationY, modelRotationZ, url, animations, alt, collidable; + if (model.tagName.toLowerCase() === 'three-model-block') { + modelPosX = model.getAttribute('positionX') || ''; + modelPosY = model.getAttribute('positionY') || ''; + modelPosZ = model.getAttribute('positionZ') || ''; + modelScaleX = model.getAttribute('scaleX') || ''; + modelScaleY = model.getAttribute('scaleY') || ''; + modelScaleZ = model.getAttribute('scaleZ') || ''; + modelRotationX = model.getAttribute('rotationX') || ''; + modelRotationY = model.getAttribute('rotationY') || ''; + modelRotationZ = model.getAttribute('rotationZ') || ''; + url = model.getAttribute('threeObjectUrl') || ''; + animations = model.getAttribute('animations') || ''; + alt = model.getAttribute('alt') || ''; + if (!objectsInRoom.includes(alt)) { + setObjectsInRoom([...objectsInRoom, alt]); + } + collidable = model.hasAttribute('collidable') ? "1" : false; + } else { + modelPosX = + model.querySelector( "p.model-block-position-x" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-position-x" + ).innerText + : ""; - const modelPosY = - model.querySelector( - "p.model-block-position-y" - ) - ? model.querySelector( + modelPosY = + model.querySelector( "p.model-block-position-y" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-position-y" + ).innerText + : ""; - const modelPosZ = - model.querySelector( - "p.model-block-position-z" - ) - ? model.querySelector( + modelPosZ = + model.querySelector( "p.model-block-position-z" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-position-z" + ).innerText + : ""; - const modelScaleX = - model.querySelector( - "p.model-block-scale-x" - ) - ? model.querySelector( + modelScaleX = + model.querySelector( "p.model-block-scale-x" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-scale-x" + ).innerText + : ""; - const modelScaleY = - model.querySelector( - "p.model-block-scale-y" - ) - ? model.querySelector( + modelScaleY = + model.querySelector( "p.model-block-scale-y" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-scale-y" + ).innerText + : ""; - const modelScaleZ = - model.querySelector( - "p.model-block-scale-z" - ) - ? model.querySelector( + modelScaleZ = + model.querySelector( "p.model-block-scale-z" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-scale-z" + ).innerText + : ""; - const modelRotationX = - model.querySelector( - "p.model-block-rotation-x" - ) - ? model.querySelector( + modelRotationX = + model.querySelector( "p.model-block-rotation-x" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-rotation-x" + ).innerText + : ""; - const modelRotationY = - model.querySelector( - "p.model-block-rotation-y" - ) - ? model.querySelector( + modelRotationY = + model.querySelector( "p.model-block-rotation-y" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-rotation-y" + ).innerText + : ""; - const modelRotationZ = - model.querySelector( - "p.model-block-rotation-z" - ) - ? model.querySelector( + modelRotationZ = + model.querySelector( "p.model-block-rotation-z" - ).innerText - : ""; + ) + ? model.querySelector( + "p.model-block-rotation-z" + ).innerText + : ""; - const url = model.querySelector( - "p.model-block-url" - ) - ? model.querySelector( + url = model.querySelector( "p.model-block-url" - ).innerText - : ""; - - const animations = - model.querySelector( - "p.model-block-animations" ) ? model.querySelector( - "p.model-block-animations" + "p.model-block-url" ).innerText : ""; - const alt = model.querySelector( - "p.model-block-alt" - ) - ? model.querySelector( - "p.model-block-alt" - ).innerText - : ""; + animations = + model.querySelector( + "p.model-block-animations" + ) + ? model.querySelector( + "p.model-block-animations" + ).innerText + : ""; - if (!objectsInRoom.includes(alt)) { - setObjectsInRoom([...objectsInRoom, alt]); - } - - const collidable = - model.querySelector( - "p.model-block-collidable" + alt = model.querySelector( + "p.model-block-alt" ) ? model.querySelector( - "p.model-block-collidable" + "p.model-block-alt" ).innerText - : false; + : ""; + + if (!objectsInRoom.includes(alt)) { + setObjectsInRoom([...objectsInRoom, alt]); + } + + collidable = + model.querySelector( + "p.model-block-collidable" + ) + ? model.querySelector( + "p.model-block-collidable" + ).innerText + : false; + } + // log all of the vars above return ( ); })} - {Object.values(props.htmlToAdd).map( + {Object.values(props.textToAdd).map( (model, index) => { - const textContent = - model.querySelector( - "p.three-text-content" - ) - ? model.querySelector( + let textContent, rotationX, rotationY, rotationZ, positionX, positionY, positionZ, scaleX, scaleY, scaleZ, textColor; + + if (model.tagName.toLowerCase() === 'three-text-block') { + textContent = model.getAttribute('textContent') || ''; + rotationX = model.getAttribute('rotationX') || ''; + rotationY = model.getAttribute('rotationY') || ''; + rotationZ = model.getAttribute('rotationZ') || ''; + positionX = model.getAttribute('positionX') || ''; + positionY = model.getAttribute('positionY') || ''; + positionZ = model.getAttribute('positionZ') || ''; + scaleX = model.getAttribute('scaleX') || ''; + scaleY = model.getAttribute('scaleY') || ''; + scaleZ = model.getAttribute('scaleZ') || ''; + textColor = model.getAttribute('textColor') || ''; + } else { + textContent = + model.querySelector( "p.three-text-content" - ).innerText - : ""; - const rotationX = - model.querySelector( - "p.three-text-rotationX" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-content" + ).innerText + : ""; + rotationX = + model.querySelector( "p.three-text-rotationX" - ).innerText - : ""; - const rotationY = - model.querySelector( - "p.three-text-rotationY" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-rotationX" + ).innerText + : ""; + rotationY = + model.querySelector( "p.three-text-rotationY" - ).innerText - : ""; - const rotationZ = - model.querySelector( - "p.three-text-rotationZ" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-rotationY" + ).innerText + : ""; + rotationZ = + model.querySelector( "p.three-text-rotationZ" - ).innerText - : ""; - const positionX = - model.querySelector( - "p.three-text-positionX" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-rotationZ" + ).innerText + : ""; + positionX = + model.querySelector( "p.three-text-positionX" - ).innerText - : ""; - const positionY = - model.querySelector( - "p.three-text-positionY" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-positionX" + ).innerText + : ""; + positionY = + model.querySelector( "p.three-text-positionY" - ).innerText - : ""; - const positionZ = - model.querySelector( - "p.three-text-positionZ" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-positionY" + ).innerText + : ""; + positionZ = + model.querySelector( "p.three-text-positionZ" - ).innerText - : ""; - const scaleX = - model.querySelector( - "p.three-text-scaleX" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-positionZ" + ).innerText + : ""; + scaleX = + model.querySelector( "p.three-text-scaleX" - ).innerText - : ""; - const scaleY = - model.querySelector( - "p.three-text-scaleY" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-scaleX" + ).innerText + : ""; + scaleY = + model.querySelector( "p.three-text-scaleY" - ).innerText - : ""; - const scaleZ = - model.querySelector( - "p.three-text-scaleZ" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-scaleY" + ).innerText + : ""; + scaleZ = + model.querySelector( "p.three-text-scaleZ" - ).innerText - : ""; - - const textColor = - model.querySelector( - "p.three-text-color" - ) - ? model.querySelector( + ) + ? model.querySelector( + "p.three-text-scaleZ" + ).innerText + : ""; + + textColor = + model.querySelector( "p.three-text-color" - ).innerText - : ""; + ) + ? model.querySelector( + "p.three-text-color" + ).innerText + : ""; + } return ( { - const modelPosX = + let modelPosX, modelPosY, modelPosZ, modelScaleX, modelScaleY, modelScaleZ; + let modelRotationX, modelRotationY, modelRotationZ, url, destinationUrl, animations, label, labelOffsetX, labelOffsetY, labelOffsetZ, labelTextColor; + if (model.tagName.toLowerCase() === 'three-portal-block') { + modelPosX = model.getAttribute('positionX') || ''; + modelPosY = model.getAttribute('positionY') || ''; + modelPosZ = model.getAttribute('positionZ') || ''; + modelScaleX = model.getAttribute('scaleX') || ''; + modelScaleY = model.getAttribute('scaleY') || ''; + modelScaleZ = model.getAttribute('scaleZ') || ''; + modelRotationX = model.getAttribute('rotationX') || ''; + modelRotationY = model.getAttribute('rotationY') || ''; + modelRotationZ = model.getAttribute('rotationZ') || ''; + url = model.getAttribute('threeObjectUrl') || ''; + destinationUrl = model.getAttribute('destinationUrl') || ''; + animations = model.getAttribute('animations') || ''; + label = model.getAttribute('label') || ''; + labelOffsetX = model.getAttribute('labelOffsetX') || ''; + labelOffsetY = model.getAttribute('labelOffsetY') || ''; + labelOffsetZ = model.getAttribute('labelOffsetZ') || ''; + labelTextColor = model.getAttribute('labelTextColor') || ''; + } else { + modelPosX = model.querySelector( "p.three-portal-block-position-x" ) @@ -1711,7 +1868,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelPosY = + modelPosY = model.querySelector( "p.three-portal-block-position-y" ) @@ -1720,7 +1877,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelPosZ = + modelPosZ = model.querySelector( "p.three-portal-block-position-z" ) @@ -1729,7 +1886,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelScaleX = + modelScaleX = model.querySelector( "p.three-portal-block-scale-x" ) @@ -1738,7 +1895,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelScaleY = + modelScaleY = model.querySelector( "p.three-portal-block-scale-y" ) @@ -1747,7 +1904,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelScaleZ = + modelScaleZ = model.querySelector( "p.three-portal-block-scale-z" ) @@ -1756,7 +1913,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelRotationX = + modelRotationX = model.querySelector( "p.three-portal-block-rotation-x" ) @@ -1765,7 +1922,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelRotationY = + modelRotationY = model.querySelector( "p.three-portal-block-rotation-y" ) @@ -1774,7 +1931,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const modelRotationZ = + modelRotationZ = model.querySelector( "p.three-portal-block-rotation-z" ) @@ -1783,7 +1940,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const url = model.querySelector( + url = model.querySelector( "p.three-portal-block-url" ) ? model.querySelector( @@ -1791,7 +1948,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const destinationUrl = + destinationUrl = model.querySelector( "p.three-portal-block-destination-url" ) @@ -1800,7 +1957,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const animations = + animations = model.querySelector( "p.three-portal-block-animations" ) @@ -1809,7 +1966,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const label = + label = model.querySelector( "p.three-portal-block-label" ) @@ -1818,7 +1975,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const labelOffsetX = + labelOffsetX = model.querySelector( "p.three-portal-block-label-offset-x" ) @@ -1827,7 +1984,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const labelOffsetY = + labelOffsetY = model.querySelector( "p.three-portal-block-label-offset-y" ) @@ -1836,7 +1993,7 @@ export default function EnvironmentFront(props) { ).innerText : ""; - const labelOffsetZ = + labelOffsetZ = model.querySelector( "p.three-portal-block-label-offset-z" ) @@ -1844,7 +2001,7 @@ export default function EnvironmentFront(props) { "p.three-portal-block-label-offset-z" ).innerText : ""; - const labelTextColor = + labelTextColor = model.querySelector( "p.three-portal-block-label-text-color" ) @@ -1852,6 +2009,7 @@ export default function EnvironmentFront(props) { "p.three-portal-block-label-text-color" ).innerText : ""; + } return ( - {Object.values( - props.npcsToAdd - ).map((npc, index) => { - - const personality = npc.querySelector( - "p.npc-block-personality" - ) - ? npc.querySelector( - "p.npc-block-personality" - ).innerText - : ""; - const defaultMessage = npc.querySelector( - "p.npc-block-default-message" - ) - ? npc.querySelector( - "p.npc-block-default-message" - ).innerText - : ""; - - const objectAwareness = npc.querySelector( - "p.npc-block-object-awareness" - ) - ? npc.querySelector( - "p.npc-block-object-awareness" - ).innerText - : ""; + {Object.values( + props.npcsToAdd + ).map((npc, index) => { + let url, modelPosX, modelPosY, modelPosZ, modelRotationX, modelRotationY, modelRotationZ, name, alt, defaultMessage, personality, objectAwareness; + + if (npc.tagName.toLowerCase() === 'three-npc-block') { + url= npc.getAttribute('threeObjectUrl') || ''; + modelPosX = npc.getAttribute('positionX') || ''; + modelPosY = npc.getAttribute('positionY') || ''; + modelPosZ = npc.getAttribute('positionZ') || ''; + modelRotationX = npc.getAttribute('rotationX') || ''; + modelRotationY = npc.getAttribute('rotationY') || ''; + modelRotationZ = npc.getAttribute('rotationZ') || ''; + name = npc.getAttribute('name') || ''; + defaultMessage = npc.getAttribute('defaultMessage') || ''; + personality = npc.getAttribute('personality') || ''; + objectAwareness = npc.getAttribute('objectAwareness') || false; + } else { + modelPosX = + npc.querySelector( + "p.npc-block-position-x" + ) + ? npc.querySelector( + "p.npc-block-position-x" + ).innerText + : ""; + + modelPosY = + npc.querySelector( + "p.npc-block-position-y" + ) + ? npc.querySelector( + "p.npc-block-position-y" + ).innerText + : ""; + + modelPosZ = + npc.querySelector( + "p.npc-block-position-z" + ) + ? npc.querySelector( + "p.npc-block-position-z" + ).innerText + : ""; + + modelRotationX = + npc.querySelector( + "p.npc-block-rotation-x" + ) + ? npc.querySelector( + "p.npc-block-rotation-x" + ).innerText + : ""; + + modelRotationY = + npc.querySelector( + "p.npc-block-rotation-y" + ) + ? npc.querySelector( + "p.npc-block-rotation-y" + ).innerText + : ""; + + modelRotationZ = + npc.querySelector( + "p.npc-block-rotation-z" + ) + ? npc.querySelector( + "p.npc-block-rotation-z" + ).innerText + : ""; + + url = npc.querySelector( + "p.npc-block-url" + ) + ? npc.querySelector( + "p.npc-block-url" + ).innerText + : ""; + + alt = npc.querySelector( + "p.npc-block-alt" + ) + ? npc.querySelector( + "p.npc-block-alt" + ).innerText + : ""; + + personality = npc.querySelector( + "p.npc-block-personality" + ) + ? npc.querySelector( + "p.npc-block-personality" + ).innerText + : ""; + + defaultMessage = npc.querySelector( + "p.npc-block-default-message" + ) + ? npc.querySelector( + "p.npc-block-default-message" + ).innerText + : ""; + + name = npc.querySelector( + "p.npc-block-name" + ) + ? npc.querySelector( + "p.npc-block-name" + ).innerText + : ""; + + objectAwareness = + npc.querySelector( + "p.npc-block-object-awareness" + ) + ? npc.querySelector( + "p.npc-block-object-awareness" + ).innerText + : false; + } - const name = npc.querySelector( - "p.npc-block-name" - ) - ? npc.querySelector( - "p.npc-block-name" - ).innerText - : ""; return ( 0 ? "Enter Room" : "Load World"} { ( props.networkingBlock.length > 0 ) && ( -
-

After entering, use the "Join Voice" button to select your microphone.

+
+

After entering, use the "Join Voice" button to select your microphone.

)}
diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index e1c9763..043deb3 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -382,7 +382,7 @@ const Networking = (props) => { userData.userId === "" ? Math.floor(Math.random() * 100000) : userData.userId; - const p2pcf = new P2PCF( + let p2pcf = new P2PCF( "user-" + userProfileName, document.location.hash.substring(1), { @@ -399,7 +399,13 @@ const Networking = (props) => { document.getElementById(clientId)?.remove(); document.getElementById(`${clientId}-video`)?.remove(); }; - + const setupP2PCF = (p2pcfInstance) => { + // Start the P2PCF instance with any necessary configurations + p2pcfInstance.start({ playerVRM: userData.playerVRM ? userData.playerVRM : defaultAvatar }); + window.p2pcf = p2pcfInstance; + }; + + const addPeerUi = (sessionId) => { // if (document.getElementById(sessionId)) return; var peerIcon = document.createElement("button"); @@ -490,6 +496,30 @@ const Networking = (props) => { document.getElementById("messages").appendChild(messageEl); }; let stream; + p2pcf.on("roomfullrefresh", (peer) => { + console.log("So sorry, Room full refresh", peer); + // Wait for the URL hash to update to ensure room ID is new + setTimeout(() => { + // remove the window.p2pcf object from the window + delete window.p2pcf; + // Reinitialize P2PCF with the new room ID + p2pcf = new P2PCF( + "user-" + userProfileName, + window.location.hash.substring(1), + { + workerUrl: multiplayerWorker, + slowPollingRateMs: 5000, + fastPollingRateMs: 1500 + } + ); + + // Re-setup the P2PCF instance with necessary configurations and event listeners + setupP2PCF(p2pcf); // Implement this function to configure the new instance + + }, 500); // Adjust delay as needed + +}); + p2pcf.on("peerconnect", (peer) => { if (stream) { peer.addStream(stream); diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 0ebf6aa..4facc17 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -147,7 +147,6 @@ function loadMixamoAnimation(url, vrm) { export default function Player(props) { let heightOffset = 0; - const p2pcf = props.p2pcf; const canMoveRef = useRef(true); const falling = useRef(true); @@ -518,7 +517,7 @@ export default function Player(props) { } //if moving, send a network event of where we are and our current state....animations probably need to go here too. - if (p2pcf) { + if (window.p2pcf) { var target = new Vector3(); // create once an reuse it var worldPosition = participantObject.getWorldPosition( target ); const position = [ @@ -535,7 +534,7 @@ export default function Player(props) { ]; // console.log("userData", userData); const messageObject = { - [p2pcf.clientId]: { + [window.p2pcf.clientId]: { position: position, rotation: rotation, profileImage: userData.profileImage, @@ -546,23 +545,23 @@ export default function Player(props) { } }; if(props.movement.current.shift) { - messageObject[p2pcf.clientId].isMoving = "running"; + messageObject[window.p2pcf.clientId].isMoving = "running"; } // console.log("userdata", userData); clearTimeout(movementTimeoutRef.current); movementTimeoutRef.current = setTimeout(() => { // Send "isMoving: false" message here const messageStopObject = { - [p2pcf.clientId]: { + [window.p2pcf.clientId]: { isMoving: false } }; const messageStop = JSON.stringify(messageStopObject); - p2pcf.broadcast(new TextEncoder().encode(messageStop)); + window.p2pcf.broadcast(new TextEncoder().encode(messageStop)); }, 100); const message = JSON.stringify(messageObject); - p2pcf.broadcast(new TextEncoder().encode(message)), p2pcf; + window.p2pcf.broadcast(new TextEncoder().encode(message)), window.p2pcf; } // } diff --git a/blocks/environment/components/core/front/ThreeSky.js b/blocks/environment/components/core/front/ThreeSky.js index 96a0082..93ab86a 100644 --- a/blocks/environment/components/core/front/ThreeSky.js +++ b/blocks/environment/components/core/front/ThreeSky.js @@ -13,29 +13,41 @@ import { * @return {JSX.Element} The sky. */ export function ThreeSky(sky) { - const skyUrl = sky.src[0].querySelector("p.sky-block-url") - ? sky.src[0].querySelector("p.sky-block-url").innerText - : ""; + let skyUrl, distance, rayleigh, sunPositionX, sunPositionY, sunPositionZ; - const distance = sky.src[0].querySelector("p.sky-block-distance") - ? sky.src[0].querySelector("p.sky-block-distance").innerText - : ""; + if (sky.src[0].tagName.toLowerCase() === 'three-sky-block') { + skyUrl = sky.src[0].getAttribute("skyUrl"); + distance = sky.src[0].getAttribute("distance"); + rayleigh = sky.src[0].getAttribute("rayleigh"); + sunPositionX = sky.src[0].getAttribute("sunPositionX"); + sunPositionY = sky.src[0].getAttribute("sunPositionY"); + sunPositionZ = sky.src[0].getAttribute("sunPositionZ"); + } else { + + skyUrl = sky.src[0].querySelector("p.sky-block-url") + ? sky.src[0].querySelector("p.sky-block-url").innerText + : ""; + + distance = sky.src[0].querySelector("p.sky-block-distance") + ? sky.src[0].querySelector("p.sky-block-distance").innerText + : ""; - const rayleigh = sky.src[0].querySelector("p.sky-block-rayleigh") - ? sky.src[0].querySelector("p.sky-block-rayleigh").innerText - : ""; + rayleigh = sky.src[0].querySelector("p.sky-block-rayleigh") + ? sky.src[0].querySelector("p.sky-block-rayleigh").innerText + : ""; - const sunPositionX = sky.src[0].querySelector("p.sky-block-sunPositionX") - ? sky.src[0].querySelector("p.sky-block-sunPositionX").innerText - : ""; + sunPositionX = sky.src[0].querySelector("p.sky-block-sunPositionX") + ? sky.src[0].querySelector("p.sky-block-sunPositionX").innerText + : ""; - const sunPositionY = sky.src[0].querySelector("p.sky-block-sunPositionY") - ? sky.src[0].querySelector("p.sky-block-sunPositionY").innerText - : ""; + sunPositionY = sky.src[0].querySelector("p.sky-block-sunPositionY") + ? sky.src[0].querySelector("p.sky-block-sunPositionY").innerText + : ""; - const sunPositionZ = sky.src[0].querySelector("p.sky-block-sunPositionZ") - ? sky.src[0].querySelector("p.sky-block-sunPositionZ").innerText - : ""; + sunPositionZ = sky.src[0].querySelector("p.sky-block-sunPositionZ") + ? sky.src[0].querySelector("p.sky-block-sunPositionZ").innerText + : ""; + } if(skyUrl === "" || skyUrl === undefined || skyUrl === null) { return ( diff --git a/blocks/environment/components/p2pcf/p2pcf.js b/blocks/environment/components/p2pcf/p2pcf.js index 0b07656..f4427cd 100644 --- a/blocks/environment/components/p2pcf/p2pcf.js +++ b/blocks/environment/components/p2pcf/p2pcf.js @@ -17,6 +17,7 @@ import { hexToBytes } from "convert-hex"; import arrayBufferToHex from "array-buffer-to-hex"; import defaultVRM from "../../../../inc/avatars/3ov_default_avatar.vrm"; +let validlyInRoom = false; // Based on Chrome const MAX_MESSAGE_LENGTH_BYTES = 16000; @@ -1174,15 +1175,48 @@ export default class P2PCF extends EventEmitter { _wireUpCommonPeerEvents(peer) { peer.on("connect", () => { - this.emit("peerconnect", peer); - - // after connecting, send the player data to participant - const playerData = { playerVRM: this.playerVRM, inWorldName: userData.inWorldName, profileImage: userData.profileImage}; - peer.send(new TextEncoder().encode(JSON.stringify(playerData))); - - // Remove packages for the peer once connected - removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); - this._updateConnectedSessions(); + console.log(p2pcf.peers.size, "peers connected", p2pcf.peers); + let roomCount = p2pcf.peers.size + 1; + if(roomCount < 2) { + console.log("clean room entry", p2pcf); + this.emit("peerconnect", peer); + // after connecting, send the player data to participant + const playerData = { playerVRM: this.playerVRM, inWorldName: userData.inWorldName, profileImage: userData.profileImage}; + peer.send(new TextEncoder().encode(JSON.stringify(playerData))); + // set the user as validly in the room + validlyInRoom = true; + // Remove packages for the peer once connected + removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); + this._updateConnectedSessions(); + + } else { + if(! validlyInRoom) { + console.log("participants are", window.participants); + console.log("room is full", this.roomId, p2pcf); + // if there are more than 2 participants, disconnect the peer increment the room id and retry + // Remove packages for the peer once connected + // removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); + + // peer.destroy(); + + let curentRoomHash = window.location.hash; + // remove the # from the hash + let currentRoomId = curentRoomHash.substring(1); + // example string #3ov-room-1 take the value after the last - and cast it to int + let newRoomId = parseInt(currentRoomId.substr(currentRoomId.lastIndexOf("-") + 1)); + newRoomId = newRoomId + 1; + // remove the old room number from the currentRoomId and add the new one + currentRoomId = currentRoomId.substring(0, currentRoomId.lastIndexOf("-") + 1); + currentRoomId = currentRoomId + newRoomId; + // set the #room in the url + window.location.hash = currentRoomId; + + roomCount = 0; + this.roomId = newRoomId; + // fire an event called "room full refresh" + this.emit("roomfullrefresh", peer); + } + } }); peer.on("data", (data) => { diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 8b06c6f..76fabbc 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -84,6 +84,7 @@ color: white; text-align: center; border-radius: 20px; + box-shadow: 0px 0px 17px 5px rgb(15 0 0 / 57%); } .threeov-entry-flow input { @@ -93,6 +94,11 @@ padding-left: 10px; } +.threeov-entry-flow input:focus { + // border: 1px solid #b7ff00; + outline: #b7ff00 solid !important; +} + .glb-preview-container { padding: 100px; text-align: center; @@ -300,7 +306,7 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner padding-bottom: 20px; } -.three-object-block-url-input input{ +.three-object-block-url-input input { height: 40px; } @@ -420,25 +426,49 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner letter-spacing: .01em; max-width: 120px; text-transform: uppercase; + box-shadow: 0px 0px 17px 9px rgb(15 0 0 / 57%); } .threeov-entry-flow button:hover { - background-color: #ccff4c; + background-color: #d1ff5b; border: 1px solid #98d400; // add dropshadow - box-shadow: 0px 0px 5px 1px #7f7f7f5e; + // box-shadow: 0px 0px 5px 1px #7f7f7f5e; + box-shadow: 0px 0px 17px 9px rgb(15 0 0 / 57%); + color: white; cursor: pointer; color: #451a00; font-weight: 600; } +@keyframes glow { + 0% { + box-shadow: 0px 0px 8px 5px rgb(15 0 0 / 57%); + } + 50% { + box-shadow: 0px 0px 8px 5px rgba(95, 95, 95, 0.851); + } + 100% { + box-shadow: 0px 0px 8px 5px rgb(15 0 0 / 57%); + } +} + +.threeov-entry-flow input { + box-shadow: 0px 0px 8px 5px rgb(15 0 0 / 57%); +} + +.threeov-entry-flow input:focus { + animation: glow 2s infinite linear; +} + .threeov-entry-pfp { width: 100px; height: 100px; border-radius: 50%; - background-color: #b7ff00; - border: 2px solid #98d400; + background-color: #6d6d6d; + border: 2.5px solid #98d400; + box-shadow: 0px 0px 17px 9px rgb(15 0 0 / 57%); margin: 0 auto; margin-top: 20px; background-position: center; @@ -448,4 +478,13 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner align-items: center; justify-content: center; display: flex; -} \ No newline at end of file + margin-bottom: 10px; +} + +.threeov-entry-flow-instruction { + font-size: 0.7em; + // background-color: #161616; + // border-radius: 8px; + // padding: 9px; + margin-top: 20px; +} diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index f78386b..392f72d 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -4,42 +4,109 @@ import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; import EnvironmentFront from "./components/EnvironmentFront"; import Networking from "./components/Networking"; -const threeApp = document.querySelectorAll( - ".three-object-three-app-environment" -); - -const modelsToAdd = document.querySelectorAll( - ".three-object-three-app-model-block" -); -const networkingBlock = document.querySelectorAll( - ".three-object-three-app-networking-block" -); -const npcsToAdd = document.querySelectorAll( - ".three-object-three-app-npc-block" -); -const htmlToAdd = document.querySelectorAll( - ".three-object-three-app-three-text-block" -); -const portalsToAdd = document.querySelectorAll( - ".three-object-three-app-three-portal-block" -); -const sky = document.querySelectorAll(".three-object-three-app-sky-block"); -const imagesToAdd = document.querySelectorAll( - ".three-object-three-app-image-block" -); -const spawnToAdd = document.querySelectorAll( - ".three-object-three-app-spawn-point-block" -); -const videosToAdd = document.querySelectorAll( - ".three-object-three-app-video-block" -); -const audiosToAdd = document.querySelectorAll( - ".three-object-three-app-audio-block" -); - -const lightsToAdd = document.querySelectorAll( - ".three-object-three-app-light-block" -); +let threeApp; +if(document.querySelectorAll('three-environment-block').length > 0) { + threeApp = document.querySelectorAll('three-environment-block'); +} else { + threeApp = document.querySelectorAll( + ".three-object-three-app-environment" + ); +} + +let modelsToAdd; +if(document.querySelectorAll('three-model-block').length > 0) { + modelsToAdd = document.querySelectorAll('three-model-block'); +} else { + modelsToAdd = document.querySelectorAll( + ".three-object-three-app-model-block" + ); +} + +let networkingBlock; +if(document.querySelectorAll('three-networking-block').length > 0) { + networkingBlock = document.querySelectorAll('three-networking-block'); +} else { + networkingBlock = document.querySelectorAll( + ".three-object-three-app-networking-block" + ); +} + +let npcsToAdd; +if(document.querySelectorAll('three-npc-block').length > 0) { + npcsToAdd = document.querySelectorAll('three-npc-block'); +} else { + npcsToAdd = document.querySelectorAll( + ".three-object-three-app-npc-block" + ); +} + +let textToAdd; +if(document.querySelectorAll('three-text-block').length > 0) { + textToAdd = document.querySelectorAll('three-text-block'); +} else { + textToAdd = document.querySelectorAll( + ".three-object-three-app-three-text-block" + ); +} + +let portalsToAdd; +if(document.querySelectorAll('three-portal-block').length > 0) { + portalsToAdd = document.querySelectorAll('three-portal-block'); +} else { + portalsToAdd = document.querySelectorAll( + ".three-object-three-app-three-portal-block" + ); +} + +let sky; +if(document.querySelectorAll('three-sky-block').length > 0) { + sky = document.querySelectorAll('three-sky-block'); +} else { + sky = document.querySelectorAll(".three-object-three-app-sky-block"); +} + +let imagesToAdd; +if(document.querySelectorAll('three-image-block').length > 0) { + imagesToAdd = document.querySelectorAll('three-image-block'); +} else { + imagesToAdd = document.querySelectorAll( + ".three-object-three-app-image-block" + ); +} + +let spawnToAdd; +if(document.querySelectorAll('three-spawn-point-block').length > 0) { + spawnToAdd = document.querySelectorAll('three-spawn-point-block'); +} else { + spawnToAdd = document.querySelectorAll( + ".three-object-three-app-spawn-point-block" + ); +} + +let videosToAdd; +if(document.querySelectorAll('three-video-block').length > 0) { + videosToAdd = document.querySelectorAll('three-video-block'); +} else { + videosToAdd = document.querySelectorAll(".three-object-three-app-video-block"); +} + +let audiosToAdd; +if(document.querySelectorAll('three-audio-block').length > 0) { + audiosToAdd = document.querySelectorAll('three-audio-block'); +} else { + audiosToAdd = document.querySelectorAll( + ".three-object-three-app-audio-block" + ); +} + +let lightsToAdd; +if(document.querySelectorAll('three-light-block').length > 0) { + lightsToAdd = document.querySelectorAll('three-light-block'); +} else { + lightsToAdd = document.querySelectorAll( + ".three-object-three-app-light-block" + ); +} // All blocks. if(threeApp[0]){ @@ -53,62 +120,96 @@ threeApp.forEach((threeApp) => { )? document.querySelector( "p.three-object-block-hdr" ).innerText : ""; + let spawnPoint; + let spawnPointX; + let spawnPointY; + let spawnPointZ; + let spawnPointRotationX; + let spawnPointRotationY; + let spawnPointRotationZ; + let savedPoint = spawnToAdd[0]; + if(savedPoint?.tagName.toLowerCase() === 'three-spawn-point-block') { + spawnPointX = savedPoint.getAttribute('positionX'); + spawnPointY = savedPoint.getAttribute('positionY'); + spawnPointZ = savedPoint.getAttribute('positionZ'); + spawnPointRotationX = savedPoint.getAttribute('rotationX'); + spawnPointRotationY = savedPoint.getAttribute('rotationY'); + spawnPointRotationZ = savedPoint.getAttribute('rotationZ'); + spawnPoint = [ + spawnPointX ? spawnPointX : 0, + spawnPointY ? spawnPointY : 0, + spawnPointZ ? spawnPointZ : 0, + ]; + } else { + spawnPointX = spawnToAdd[0].querySelector( "p.spawn-point-block-positionX" ); + spawnPointY = spawnToAdd[0].querySelector( "p.spawn-point-block-positionY" ); + spawnPointZ = spawnToAdd[0].querySelector( "p.spawn-point-block-positionZ" ); + spawnPointRotationX = spawnToAdd[0].querySelector( "p.spawn-point-block-rotationX" ); + spawnPointRotationY = spawnToAdd[0].querySelector( "p.spawn-point-block-rotationY" ); + spawnPointRotationZ = spawnToAdd[0].querySelector( "p.spawn-point-block-rotationZ" ); + spawnPoint = [ + spawnPointX ? spawnPointX.innerText : 0, + spawnPointY ? spawnPointY.innerText : 0, + spawnPointZ ? spawnPointZ.innerText : 0, + ]; + } - const spawnPoint = - spawnToAdd.length !== 0 - ? [ - spawnToAdd[0].querySelector( - "p.spawn-point-block-positionX" - ).innerText, - spawnToAdd[0].querySelector( - "p.spawn-point-block-positionY" - ).innerText, - spawnToAdd[0].querySelector( - "p.spawn-point-block-positionZ" - ).innerText - ] - : [0, 0, 0]; - const threeUrl = threeApp.querySelector("p.three-object-block-url") - ? threeApp.querySelector("p.three-object-block-url").innerText - : ""; - const threePreviewImage = threeApp.querySelector( - "p.three-object-preview-image" - ) - ? threeApp.querySelector("p.three-object-preview-image").innerText - : ""; - const deviceTarget = threeApp.querySelector( - "p.three-object-block-device-target" - ) - ? threeApp.querySelector("p.three-object-block-device-target") - .innerText - : "2D"; - const backgroundColor = threeApp.querySelector( - "p.three-object-background-color" - ) - ? threeApp.querySelector("p.three-object-background-color") - .innerText - : "#ffffff"; - const zoom = threeApp.querySelector("p.three-object-zoom") - ? threeApp.querySelector("p.three-object-zoom").innerText - : 90; - const scale = threeApp.querySelector("p.three-object-scale") - ? threeApp.querySelector("p.three-object-scale").innerText - : 1; - const hasZoom = threeApp.querySelector("p.three-object-has-zoom") - ? threeApp.querySelector("p.three-object-has-zoom").innerText - : false; - const hasTip = threeApp.querySelector("p.three-object-has-tip") - ? threeApp.querySelector("p.three-object-has-tip").innerText - : true; - const positionY = threeApp.querySelector("p.three-object-position-y") - ? threeApp.querySelector("p.three-object-position-y").innerText - : 0; - const rotationY = threeApp.querySelector("p.three-object-rotation-y") - ? threeApp.querySelector("p.three-object-rotation-y").innerText - : 0; - const animations = threeApp.querySelector("p.three-object-animations") - ? threeApp.querySelector("p.three-object-animations").innerText - : ""; + let threeUrl, threePreviewImage, deviceTarget, backgroundColor, zoom, scale, hasZoom, hasTip, positionY, rotationY, animations; + if(threeApp.tagName.toLowerCase() === 'three-environment-block') { + threeUrl = threeApp.getAttribute('threeObjectUrl'); + threePreviewImage = threeApp.getAttribute('threePreviewImage'); + deviceTarget = threeApp.getAttribute('deviceTarget'); + backgroundColor = threeApp.getAttribute('bg_color'); + zoom = threeApp.getAttribute('zoom'); + scale = threeApp.getAttribute('scale'); + hasZoom = threeApp.getAttribute('hasZoom'); + hasTip = threeApp.getAttribute('hasTip'); + positionY = threeApp.getAttribute('positionY'); + rotationY = threeApp.getAttribute('rotationY'); + animations = threeApp.getAttribute('animations'); + } else { + threeUrl = threeApp.querySelector("p.three-object-block-url") + ? threeApp.querySelector("p.three-object-block-url").innerText + : ""; + threePreviewImage = threeApp.querySelector( + "p.three-object-preview-image" + ) + ? threeApp.querySelector("p.three-object-preview-image").innerText + : ""; + deviceTarget = threeApp.querySelector( + "p.three-object-block-device-target" + ) + ? threeApp.querySelector("p.three-object-block-device-target") + .innerText + : "2D"; + backgroundColor = threeApp.querySelector( + "p.three-object-background-color" + ) + ? threeApp.querySelector("p.three-object-background-color") + .innerText + : "#ffffff"; + zoom = threeApp.querySelector("p.three-object-zoom") + ? threeApp.querySelector("p.three-object-zoom").innerText + : 90; + scale = threeApp.querySelector("p.three-object-scale") + ? threeApp.querySelector("p.three-object-scale").innerText + : 1; + hasZoom = threeApp.querySelector("p.three-object-has-zoom") + ? threeApp.querySelector("p.three-object-has-zoom").innerText + : false; + hasTip = threeApp.querySelector("p.three-object-has-tip") + ? threeApp.querySelector("p.three-object-has-tip").innerText + : true; + positionY = threeApp.querySelector("p.three-object-position-y") + ? threeApp.querySelector("p.three-object-position-y").innerText + : 0; + rotationY = threeApp.querySelector("p.three-object-rotation-y") + ? threeApp.querySelector("p.three-object-rotation-y").innerText + : 0; + animations = threeApp.querySelector("p.three-object-animations") + ? threeApp.querySelector("p.three-object-animations").innerText + : ""; + } render( <> @@ -158,7 +259,7 @@ threeApp.forEach((threeApp) => { audiosToAdd={audiosToAdd} lightsToAdd={lightsToAdd} spawnPoint={spawnPoint ? spawnPoint : null} - htmlToAdd={htmlToAdd} + textToAdd={textToAdd} npcsToAdd={npcsToAdd} sky={sky ? sky : ""} previewImage={threePreviewImage} diff --git a/blocks/environment/index.js b/blocks/environment/index.js index 1caacdd..5a07ecc 100644 --- a/blocks/environment/index.js +++ b/blocks/environment/index.js @@ -3,7 +3,7 @@ import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; import React from "react"; - +import Deprecated from "./Deprecated"; import { useState } from '@wordpress/element'; function Loading() { @@ -29,7 +29,7 @@ const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -37,261 +37,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - }, - { - attributes: { - align: { - type: "string", - default: "full" - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - threePreviewImage: { - type: "string", - default: null - }, - deviceTarget: { - type: "string", - default: "vr" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

{props.attributes.scale}

-

- {props.attributes.bg_color} -

-

{props.attributes.zoom}

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

{props.attributes.scale}

-

- {props.attributes.threePreviewImage} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/model-block/Deprecated.js b/blocks/model-block/Deprecated.js new file mode 100644 index 0000000..04de9d0 --- /dev/null +++ b/blocks/model-block/Deprecated.js @@ -0,0 +1,206 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + scaleX: { + type: "int", + default:1 + }, + name: { + type: "string" + }, + scaleY: { + type: "int", + default:1 + }, + scaleZ: { + type: "int", + default:1 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + animations: { + type: "string", + default: "" + }, + alt: { + type: "string", + default: "" + }, + collidable: { + type: "boolean", + default: false + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.threeObjectUrl} +

+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.animations} +

+

+ {props.attributes.collidable ? 1 : 0} +

+

{props.attributes.alt}

+
+ +
+ ); + } + }, + { + attributes: { + scaleX: { + type: "int", + default:1 + }, + name: { + type: "string" + }, + scaleY: { + type: "int", + default:1 + }, + scaleZ: { + type: "int", + default:1 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + animations: { + type: "string", + default: "" + }, + alt: { + type: "string", + default: "" + }, + collidable: { + type: "boolean", + default: false + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.threeObjectUrl} +

+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.animations} +

+

+ {props.attributes.collidable ? 1 : 0} +

+

{props.attributes.alt}

+
+ +
+ ); + } + } + ]; +} \ No newline at end of file diff --git a/blocks/model-block/Save.js b/blocks/model-block/Save.js index e6a7ec6..8db3c9a 100644 --- a/blocks/model-block/Save.js +++ b/blocks/model-block/Save.js @@ -2,43 +2,24 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.threeObjectUrl} -

-

{attributes.scaleX}

-

{attributes.scaleY}

-

{attributes.scaleZ}

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.animations} -

-

- {attributes.collidable ? 1 : 0} -

-

{attributes.alt}

-
- -
+ ); } diff --git a/blocks/model-block/index.js b/blocks/model-block/index.js index fc9e326..7bf6e78 100644 --- a/blocks/model-block/index.js +++ b/blocks/model-block/index.js @@ -2,6 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,106 +24,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - scaleX: { - type: "int", - default:1 - }, - name: { - type: "string" - }, - scaleY: { - type: "int", - default:1 - }, - scaleZ: { - type: "int", - default:1 - }, - positionX: { - type: "int", - default:0 - }, - positionY: { - type: "int", - default:0 - }, - positionZ: { - type: "int", - default:0 - }, - rotationX: { - type: "int", - default:0 - }, - rotationY: { - type: "int", - default:0 - }, - rotationZ: { - type: "int", - default:0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - animations: { - type: "string", - default: "" - }, - alt: { - type: "string", - default: "" - }, - collidable: { - type: "boolean", - default: false - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.threeObjectUrl} -

-

{props.attributes.scaleX}

-

{props.attributes.scaleY}

-

{props.attributes.scaleZ}

-

- {props.attributes.positionX} -

-

- {props.attributes.positionY} -

-

- {props.attributes.positionZ} -

-

- {props.attributes.rotationX} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.rotationZ} -

-

- {props.attributes.animations} -

-

- {props.attributes.collidable ? 1 : 0} -

-

{props.attributes.alt}

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/npc-block/Deprecated.js b/blocks/npc-block/Deprecated.js new file mode 100644 index 0000000..f07cd55 --- /dev/null +++ b/blocks/npc-block/Deprecated.js @@ -0,0 +1,269 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ +return [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + name: { + type: "string" + }, + personality: { + type: "string" + }, + defaultMessage: { + type: "string" + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + objectAwareness: { + type: "boolean", + default: false + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.name} +

+

+ {props.attributes.defaultMessage} +

+

+ {props.attributes.personality} +

+

+ {props.attributes.objectAwareness ? 1 : 0} +

+
+ +
+ ); + } + } +]; +} \ No newline at end of file diff --git a/blocks/npc-block/Save.js b/blocks/npc-block/Save.js index 91a342e..bba140e 100644 --- a/blocks/npc-block/Save.js +++ b/blocks/npc-block/Save.js @@ -2,45 +2,22 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.threeObjectUrl} -

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.name} -

-

- {attributes.defaultMessage} -

-

- {attributes.personality} -

-

- {attributes.objectAwareness ? 1 : 0} -

-
- -
+ ); } diff --git a/blocks/npc-block/index.js b/blocks/npc-block/index.js index 0b83de5..7bf6e78 100644 --- a/blocks/npc-block/index.js +++ b/blocks/npc-block/index.js @@ -2,6 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +24,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/sky-block/Deprecated.js b/blocks/sky-block/Deprecated.js new file mode 100644 index 0000000..509da87 --- /dev/null +++ b/blocks/sky-block/Deprecated.js @@ -0,0 +1,69 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + skyUrl: { + type: "string", + default: null + }, + }, + save(props) { + return ( +
+ <> +
+

{props.attributes.skyUrl}

+
+ +
+ ); + } + }, + { + attributes: { + skyUrl: { + type: "string", + default: null + }, + distance: { + type: "int", + default: 170000 + }, + rayleigh: { + type: "int", + default: 1 + }, + sunPositionX: { + type: "int", + default: 0 + }, + sunPositionY: { + type: "int", + default: 10000 + }, + sunPositionZ: { + type: "int", + default: -10000 + } + }, + save(props) { + return ( +
+ <> +
+

{props.attributes.skyUrl}

+

{props.attributes.distance}

+

{props.attributes.rayleigh}

+

{props.attributes.sunPositionX}

+

{props.attributes.sunPositionY}

+

{props.attributes.sunPositionZ}

+
+ +
+ ); + } + } + ]; +} diff --git a/blocks/sky-block/Edit.js b/blocks/sky-block/Edit.js index 4fdfbee..70125e4 100644 --- a/blocks/sky-block/Edit.js +++ b/blocks/sky-block/Edit.js @@ -160,7 +160,7 @@ export default function Edit({ attributes, setAttributes, isSelected }) {

- { __( 'Sky block', 'three-object-viewer' ) } + { __( 'Sky Block', 'three-object-viewer' ) }

{/*

URL: {attributes.skyUrl}

*/}
@@ -181,7 +181,7 @@ export default function Edit({ attributes, setAttributes, isSelected }) {

- { __( 'Sky block', 'three-object-viewer' ) } + { __( 'Sky Block', 'three-object-viewer' ) }

{/*

URL: {attributes.skyUrl}

*/}
diff --git a/blocks/sky-block/Save.js b/blocks/sky-block/Save.js index c9fa5e7..008453d 100644 --- a/blocks/sky-block/Save.js +++ b/blocks/sky-block/Save.js @@ -2,18 +2,17 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

{attributes.skyUrl}

-

{attributes.distance}

-

{attributes.rayleigh}

-

{attributes.sunPositionX}

-

{attributes.sunPositionY}

-

{attributes.sunPositionZ}

-
- -
+ ); } diff --git a/blocks/sky-block/index.js b/blocks/sky-block/index.js index f4d0b08..7bf6e78 100644 --- a/blocks/sky-block/index.js +++ b/blocks/sky-block/index.js @@ -2,6 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,25 +24,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - skyUrl: { - type: "string", - default: null - }, - }, - save(props) { - return ( -
- <> -
-

{props.attributes.skyUrl}

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/spawn-point-block/Deprecated.js b/blocks/spawn-point-block/Deprecated.js new file mode 100644 index 0000000..e127363 --- /dev/null +++ b/blocks/spawn-point-block/Deprecated.js @@ -0,0 +1,62 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+
+ +
+ ); + } + } + ]; +} diff --git a/blocks/spawn-point-block/Save.js b/blocks/spawn-point-block/Save.js index 9ef1449..74bda1e 100644 --- a/blocks/spawn-point-block/Save.js +++ b/blocks/spawn-point-block/Save.js @@ -2,30 +2,17 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-
- -
+ ); } diff --git a/blocks/spawn-point-block/index.js b/blocks/spawn-point-block/index.js index 0b83de5..7bf6e78 100644 --- a/blocks/spawn-point-block/index.js +++ b/blocks/spawn-point-block/index.js @@ -2,6 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +24,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/three-audio-block/Deprecated.js b/blocks/three-audio-block/Deprecated.js new file mode 100644 index 0000000..3dbdf5d --- /dev/null +++ b/blocks/three-audio-block/Deprecated.js @@ -0,0 +1,326 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + name: { + type: "string", + default: null + }, + audioUrl: { + type: "string", + default: null + }, + autoPlay: { + type: "bool", + default: true + }, + loop: { + type: "bool", + default: true + }, + volume: { + type: "int", + default: 1 + }, + positional: { + type: "bool", + default: true + }, + coneInnerAngle: { + type: "int", + default:360 + }, + coneOuterAngle: { + type: "int", + default:0 + }, + coneOuterGain: { + type: "int", + default:0.8 + }, + distanceModel: { + type: "string", + default: "inverse" + }, + maxDistance: { + type: "int", + default:10000 + }, + refDistance: { + type: "int", + default:5 + }, + rolloffFactor: { + type: "int", + default:5 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + } + }, + save(props) { + return ( +
+ <> +
+

{props.attributes.audioUrl}

+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.autoPlay ? '1' : '0'} +

+

+ {props.attributes.loop ? '1' : '0'} +

+

+ {props.attributes.volume} +

+

+ {props.attributes.positional ? '1' : '0'} +

+

+ {props.attributes.coneInnerAngle} +

+

+ {props.attributes.coneOuterAngle} +

+

+ {props.attributes.coneOuterGain} +

+

+ {props.attributes.distanceModel} +

+

+ {props.attributes.maxDistance} +

+

+ {props.attributes.refDistance} +

+

+ {props.attributes.rolloffFactor} +

+
+ +
+ ); + } + } + ]; +} diff --git a/blocks/three-audio-block/Save.js b/blocks/three-audio-block/Save.js index 41500bb..7116dfe 100644 --- a/blocks/three-audio-block/Save.js +++ b/blocks/three-audio-block/Save.js @@ -2,67 +2,32 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

{attributes.audioUrl}

-

{attributes.scaleX}

-

{attributes.scaleY}

-

{attributes.scaleZ}

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.autoPlay ? '1' : '0'} -

-

- {attributes.loop ? '1' : '0'} -

-

- {attributes.volume} -

-

- {attributes.positional ? '1' : '0'} -

-

- {attributes.coneInnerAngle} -

-

- {attributes.coneOuterAngle} -

-

- {attributes.coneOuterGain} -

-

- {attributes.distanceModel} -

-

- {attributes.maxDistance} -

-

- {attributes.refDistance} -

-

- {attributes.rolloffFactor} -

-
- -
+ ); } diff --git a/blocks/three-audio-block/index.js b/blocks/three-audio-block/index.js index 0b83de5..88edd15 100644 --- a/blocks/three-audio-block/index.js +++ b/blocks/three-audio-block/index.js @@ -2,7 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; - +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +23,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/three-image-block/Deprecated.js b/blocks/three-image-block/Deprecated.js new file mode 100644 index 0000000..52b2d1f --- /dev/null +++ b/blocks/three-image-block/Deprecated.js @@ -0,0 +1,103 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + imageUrl: { + type: "string", + default: null + }, + transparent: { + type: "boolean", + default: false + }, + scaleX: { + type: "int", + default: 1 + }, + scaleY: { + type: "int", + default: 1 + }, + scaleZ: { + type: "int", + default: 1 + }, + positionX: { + type: "int", + default: 0 + }, + positionY: { + type: "int", + default: 0 + }, + positionZ: { + type: "int", + default: 0 + }, + rotationX: { + type: "int", + default: 0 + }, + rotationY: { + type: "int", + default: 0 + }, + rotationZ: { + type: "int", + default: 0 + }, + aspectHeight: { + type: "int", + default: 0 + }, + aspectWidth: { + type: "int", + default: 0 + } + }, + save(props) { + return ( +
+ <> +
+

{props.attributes.imageUrl}

+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.aspectHeight} +

+

+ {props.attributes.aspectWidth} +

+

+ {props.attributes.transparent ? 1 : 0} +

+
+ +
+ ); + } + } + ]; +} diff --git a/blocks/three-image-block/Save.js b/blocks/three-image-block/Save.js index 776c9f9..8d834b1 100644 --- a/blocks/three-image-block/Save.js +++ b/blocks/three-image-block/Save.js @@ -2,43 +2,24 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

{attributes.imageUrl}

-

{attributes.scaleX}

-

{attributes.scaleY}

-

{attributes.scaleZ}

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.aspectHeight} -

-

- {attributes.aspectWidth} -

-

- {attributes.transparent ? 1 : 0} -

-
- -
+ ); } diff --git a/blocks/three-image-block/index.js b/blocks/three-image-block/index.js index 0b83de5..88edd15 100644 --- a/blocks/three-image-block/index.js +++ b/blocks/three-image-block/index.js @@ -2,7 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; - +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +23,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/three-light-block/Deprecated.js b/blocks/three-light-block/Deprecated.js new file mode 100644 index 0000000..34a741e --- /dev/null +++ b/blocks/three-light-block/Deprecated.js @@ -0,0 +1,120 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + type: { + type: "string", + default: "ambient" + }, + color: { + type: "string", + default: "0xffffff" + }, + intensity: { + type: "float", + default: 0.7 + }, + distance: { + type: "int", + default: 100 + }, + decay: { + type: "int", + default: 1 + }, + positionX: { + type: "float", + default: 0 + }, + positionY: { + type: "float", + default: 0 + }, + positionZ: { + type: "float", + default: 0 + }, + rotationX: { + type: "float", + default: 0 + }, + rotationY: { + type: "float", + default: 0 + }, + rotationZ: { + type: "float", + default: 0 + }, + angle: { + type: "float", + default: 0.78539816339 + }, + penumbra: { + type: "float", + default: 0.1 + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.type} +

+

+ {props.attributes.color} +

+

+ {props.attributes.intensity} +

+

+ {props.attributes.distance} +

+

+ {props.attributes.decay} +

+

+ {props.attributes.targetX} +

+

+ {props.attributes.targetY} +

+

+ {props.attributes.targetZ} +

+

+ {props.attributes.angle} +

+

+ {props.attributes.penumbra} +

+
+ +
+ ); + } + } + ]; +} \ No newline at end of file diff --git a/blocks/three-light-block/Save.js b/blocks/three-light-block/Save.js index 7e0eee5..3fff041 100644 --- a/blocks/three-light-block/Save.js +++ b/blocks/three-light-block/Save.js @@ -2,60 +2,27 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.type} -

-

- {attributes.color} -

-

- {attributes.intensity} -

-

- {attributes.distance} -

-

- {attributes.decay} -

-

- {attributes.targetX} -

-

- {attributes.targetY} -

-

- {attributes.targetZ} -

-

- {attributes.angle} -

-

- {attributes.penumbra} -

-
- -
+ ); } diff --git a/blocks/three-light-block/index.js b/blocks/three-light-block/index.js index 661ed94..7bf6e78 100644 --- a/blocks/three-light-block/index.js +++ b/blocks/three-light-block/index.js @@ -2,6 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, icon, apiVersion: 2, edit: Edit, - save: Save + save: Save, + deprecated: deprecated }); diff --git a/blocks/three-networking-block/Edit.js b/blocks/three-networking-block/Edit.js index d7c0d6e..a4bf87a 100644 --- a/blocks/three-networking-block/Edit.js +++ b/blocks/three-networking-block/Edit.js @@ -81,8 +81,7 @@ export default function Edit({ attributes, setAttributes, isSelected, clientId } onChangeParticipantLimit(value)} /> diff --git a/blocks/three-networking-block/Save.js b/blocks/three-networking-block/Save.js index 2cc14ac..256ba84 100644 --- a/blocks/three-networking-block/Save.js +++ b/blocks/three-networking-block/Save.js @@ -2,13 +2,12 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

{attributes.scaleX}

-
- -
+ ); } diff --git a/blocks/three-portal-block/Deprecated.js b/blocks/three-portal-block/Deprecated.js new file mode 100644 index 0000000..3949c4e --- /dev/null +++ b/blocks/three-portal-block/Deprecated.js @@ -0,0 +1,318 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ +return [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + scaleX: { + type: "int", + default:1 + }, + scaleY: { + type: "int", + default:1 + }, + scaleZ: { + type: "int", + default:1 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + destinationUrl: { + type: "string", + default: null + }, + label: { + type: "string", + default: null + }, + labelTextColor: { + type: "string", + default: "0x000000" + }, + labelOffsetX: { + type: "int", + default:0 + }, + labelOffsetY: { + type: "int", + default:0 + }, + labelOffsetZ: { + type: "int", + default:0 + }, + animations: { + type: "string", + default: "" + }, + collidable: { + type: "boolean", + default: false + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.destinationUrl} +

+

+ {props.attributes.scaleX} +

+

+ {props.attributes.scaleY} +

+

+ {props.attributes.scaleZ} +

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.animations} +

+

+ {props.attributes.label} +

+

+ {props.attributes.labelOffsetX} +

+

+ {props.attributes.labelOffsetY} +

+

+ {props.attributes.labelOffsetZ} +

+

+ {props.attributes.labelTextColor} +

+
+ +
+ ); + } + } +]; +} \ No newline at end of file diff --git a/blocks/three-portal-block/Save.js b/blocks/three-portal-block/Save.js index 61d4ff1..3638074 100644 --- a/blocks/three-portal-block/Save.js +++ b/blocks/three-portal-block/Save.js @@ -2,63 +2,28 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.threeObjectUrl} -

-

- {attributes.destinationUrl} -

-

- {attributes.scaleX} -

-

- {attributes.scaleY} -

-

- {attributes.scaleZ} -

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.animations} -

-

- {attributes.label} -

-

- {attributes.labelOffsetX} -

-

- {attributes.labelOffsetY} -

-

- {attributes.labelOffsetZ} -

-

- {attributes.labelTextColor} -

-
- -
+ ); } diff --git a/blocks/three-portal-block/block.json b/blocks/three-portal-block/block.json index dab7f97..37853f2 100644 --- a/blocks/three-portal-block/block.json +++ b/blocks/three-portal-block/block.json @@ -1,88 +1,88 @@ { - "name": "three-object-viewer/three-portal-block", - "attributes": { - "scaleX": { - "type": "int", - "default":1 - }, - "scaleY": { - "type": "int", - "default":1 - }, - "scaleZ": { - "type": "int", - "default":1 - }, - "positionX": { - "type": "int", - "default":0 - }, - "positionY": { - "type": "int", - "default":0 - }, - "positionZ": { - "type": "int", - "default":0 - }, - "rotationX": { - "type": "int", - "default":0 - }, - "rotationY": { - "type": "int", - "default":0 - }, - "rotationZ": { - "type": "int", - "default":0 - }, - "threeObjectUrl": { - "type": "string", - "default": null - }, - "destinationUrl": { - "type": "string", - "default": null - }, - "label": { - "type": "string", - "default": null - }, - "labelTextColor": { - "type": "string", - "default": "0x000000" - }, - "labelOffsetX": { - "type": "int", - "default":0 - }, - "labelOffsetY": { - "type": "int", - "default":0 - }, - "labelOffsetZ": { - "type": "int", - "default":0 - }, - "animations": { - "type": "string", - "default": "" - }, - "collidable": { - "type": "boolean", - "default": false - } - }, - "category": "design", - "parent": [ "three-object-viewer/environment" ], - "apiVersion": 2, - "supports": { - "html": false, - "multiple": true - }, - "textdomain": "three-object-viewer", - "editorScript": "file:../../build/block-three-portal-block.js", + "name": "three-object-viewer/three-portal-block", + "attributes": { + "scaleX": { + "type": "int", + "default":1 + }, + "scaleY": { + "type": "int", + "default":1 + }, + "scaleZ": { + "type": "int", + "default":1 + }, + "positionX": { + "type": "int", + "default":0 + }, + "positionY": { + "type": "int", + "default":0 + }, + "positionZ": { + "type": "int", + "default":0 + }, + "rotationX": { + "type": "int", + "default":0 + }, + "rotationY": { + "type": "int", + "default":0 + }, + "rotationZ": { + "type": "int", + "default":0 + }, + "threeObjectUrl": { + "type": "string", + "default": null + }, + "destinationUrl": { + "type": "string", + "default": null + }, + "label": { + "type": "string", + "default": null + }, + "labelTextColor": { + "type": "string", + "default": "0x000000" + }, + "labelOffsetX": { + "type": "int", + "default":0 + }, + "labelOffsetY": { + "type": "int", + "default":0 + }, + "labelOffsetZ": { + "type": "int", + "default":0 + }, + "animations": { + "type": "string", + "default": "" + }, + "collidable": { + "type": "boolean", + "default": false + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": true + }, + "textdomain": "three-object-viewer", + "editorScript": "file:../../build/block-three-portal-block.js", "editorStyle": "file:../../build/block-three-portal-block.css", "style": "file:../../build/block-three-portal-block.css" } diff --git a/blocks/three-portal-block/index.js b/blocks/three-portal-block/index.js index 0b83de5..88edd15 100644 --- a/blocks/three-portal-block/index.js +++ b/blocks/three-portal-block/index.js @@ -2,7 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; - +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +23,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/three-text-block/Deprecated.js b/blocks/three-text-block/Deprecated.js new file mode 100644 index 0000000..4be143d --- /dev/null +++ b/blocks/three-text-block/Deprecated.js @@ -0,0 +1,280 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + }, + { + attributes: { + scaleX: { + type: "int", + default:1 + }, + scaleY: { + type: "int", + default:1 + }, + scaleZ: { + type: "int", + default:1 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + destinationUrl: { + type: "string", + default: null + }, + textContent: { + type: "string", + default: null + }, + textColor: { + type: "string", + default: "0x000000" + }, + animations: { + type: "string", + default: "" + }, + collidable: { + type: "boolean", + default: false + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.textContent} +

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

{props.attributes.textColor}

+
+ +
+ ); + } + } + ]; +} \ No newline at end of file diff --git a/blocks/three-text-block/Save.js b/blocks/three-text-block/Save.js index f03482e..ea3f6b4 100644 --- a/blocks/three-text-block/Save.js +++ b/blocks/three-text-block/Save.js @@ -2,37 +2,22 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-

- {attributes.textContent} -

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

{attributes.scaleX}

-

{attributes.scaleY}

-

{attributes.scaleZ}

-

{attributes.textColor}

-
- -
+ ); } diff --git a/blocks/three-text-block/block.json b/blocks/three-text-block/block.json index 3bac44e..a49b528 100644 --- a/blocks/three-text-block/block.json +++ b/blocks/three-text-block/block.json @@ -1,76 +1,76 @@ { - "name": "three-object-viewer/three-text-block", - "attributes": { - "scaleX": { - "type": "int", - "default":1 - }, - "scaleY": { - "type": "int", - "default":1 - }, - "scaleZ": { - "type": "int", - "default":1 - }, - "positionX": { - "type": "int", - "default":0 - }, - "positionY": { - "type": "int", - "default":0 - }, - "positionZ": { - "type": "int", - "default":0 - }, - "rotationX": { - "type": "int", - "default":0 - }, - "rotationY": { - "type": "int", - "default":0 - }, - "rotationZ": { - "type": "int", - "default":0 - }, - "threeObjectUrl": { - "type": "string", - "default": null - }, - "destinationUrl": { - "type": "string", - "default": null - }, - "textContent": { - "type": "string", - "default": null - }, + "name": "three-object-viewer/three-text-block", + "attributes": { + "scaleX": { + "type": "int", + "default":1 + }, + "scaleY": { + "type": "int", + "default":1 + }, + "scaleZ": { + "type": "int", + "default":1 + }, + "positionX": { + "type": "int", + "default":0 + }, + "positionY": { + "type": "int", + "default":0 + }, + "positionZ": { + "type": "int", + "default":0 + }, + "rotationX": { + "type": "int", + "default":0 + }, + "rotationY": { + "type": "int", + "default":0 + }, + "rotationZ": { + "type": "int", + "default":0 + }, + "threeObjectUrl": { + "type": "string", + "default": null + }, + "destinationUrl": { + "type": "string", + "default": null + }, + "textContent": { + "type": "string", + "default": null + }, "textColor": { - "type": "string", - "default": "0x000000" - }, - "animations": { - "type": "string", - "default": "" - }, - "collidable": { - "type": "boolean", - "default": false - } - }, - "category": "design", - "parent": [ "three-object-viewer/environment" ], - "apiVersion": 2, - "supports": { - "html": false, - "multiple": true - }, - "textdomain": "three-object-viewer", - "editorScript": "file:../../build/block-three-text-block.js", + "type": "string", + "default": "0x000000" + }, + "animations": { + "type": "string", + "default": "" + }, + "collidable": { + "type": "boolean", + "default": false + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": true + }, + "textdomain": "three-object-viewer", + "editorScript": "file:../../build/block-three-text-block.js", "editorStyle": "file:../../build/block-three-text-block.css", "style": "file:../../build/block-three-text-block.css" } diff --git a/blocks/three-text-block/index.js b/blocks/three-text-block/index.js index 0b83de5..88edd15 100644 --- a/blocks/three-text-block/index.js +++ b/blocks/three-text-block/index.js @@ -2,7 +2,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; import { useBlockProps } from "@wordpress/block-editor"; - +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,181 +23,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-
- -
- ); - } - }, - { - attributes: { - bg_color: { - type: "string", - default: "#FFFFFF" - }, - zoom: { - type: "integer", - default: 90 - }, - scale: { - type: "integer", - default: 1 - }, - positionX: { - type: "integer", - default: 0 - }, - positionY: { - type: "integer", - default: 0 - }, - rotationY: { - type: "integer", - default: 0 - }, - threeObjectUrl: { - type: "string", - default: null - }, - hasZoom: { - type: "bool", - default: false - }, - hasTip: { - type: "bool", - default: true - }, - deviceTarget: { - type: "string", - default: "2d" - }, - animations: { - type: "string", - default: "" - } - }, - save(props) { - return ( -
- <> -
-

- {props.attributes.deviceTarget} -

-

- {props.attributes.threeObjectUrl} -

-

- {props.attributes.scale} -

-

- {props.attributes.bg_color} -

-

- {props.attributes.zoom} -

-

- {props.attributes.hasZoom ? 1 : 0} -

-

- {props.attributes.hasTip ? 1 : 0} -

-

- {props.attributes.positionY} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.scale} -

-

- {props.attributes.animations} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); diff --git a/blocks/three-video-block/Deprecated.js b/blocks/three-video-block/Deprecated.js new file mode 100644 index 0000000..90b9229 --- /dev/null +++ b/blocks/three-video-block/Deprecated.js @@ -0,0 +1,216 @@ +import { useBlockProps } from "@wordpress/block-editor"; + +export default function Deprecated(){ + return [ + { + attributes: { + videoUrl: { + type: "string", + default: null + }, + modelUrl: { + type: "string", + default: null + }, + autoPlay: { + type: "bool", + default: true + }, + scaleX: { + type: "int", + default: 1 + }, + scaleY: { + type: "int", + default: 1 + }, + scaleZ: { + type: "int", + default: 1 + }, + positionX: { + type: "int", + default: 0 + }, + positionY: { + type: "int", + default: 0 + }, + positionZ: { + type: "int", + default: 0 + }, + rotationX: { + type: "int", + default: 0 + }, + rotationY: { + type: "int", + default: 0 + }, + rotationZ: { + type: "int", + default: 0 + }, + aspectHeight: { + type: "int", + default: 0 + }, + aspectWidth: { + type: "int", + default: 0 + } + }, + save(props) { + return ( +
+ <> +
+
{props.attributes.videoUrl}
+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.aspectHeight} +

+

+ {props.attributes.aspectWidth} +

+

+ {props.attributes.autoPlay ? 1 : 0} +

+
+ +
+ ); + } + }, + { + attributes: { + videoUrl: { + type: "string", + default: null + }, + modelUrl: { + type: "string", + default: null + }, + autoPlay: { + type: "bool", + default: true + }, + scaleX: { + type: "int", + default:1 + }, + scaleY: { + type: "int", + default:1 + }, + scaleZ: { + type: "int", + default:1 + }, + positionX: { + type: "int", + default:0 + }, + positionY: { + type: "int", + default:0 + }, + positionZ: { + type: "int", + default:0 + }, + rotationX: { + type: "int", + default:0 + }, + rotationY: { + type: "int", + default:0 + }, + rotationZ: { + type: "int", + default:0 + }, + aspectHeight: { + type: "int", + default:0 + }, + aspectWidth: { + type: "int", + default:0 + }, + customModel: { + type: "bool", + default: false + } + }, + save(props) { + return ( +
+ <> +
+
{props.attributes.videoUrl}
+

{props.attributes.scaleX}

+

{props.attributes.scaleY}

+

{props.attributes.scaleZ}

+

+ {props.attributes.positionX} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.positionZ} +

+

+ {props.attributes.rotationX} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.rotationZ} +

+

+ {props.attributes.autoPlay ? 1 : 0} +

+

+ {props.attributes.customModel ? 1 : 0} +

+

+ {props.attributes.aspectHeight} +

+

+ {props.attributes.aspectWidth} +

+
{props.attributes.modelUrl}
+
+ +
+ ); + } + } + ]; +} diff --git a/blocks/three-video-block/Save.js b/blocks/three-video-block/Save.js index 929eab4..a975a68 100644 --- a/blocks/three-video-block/Save.js +++ b/blocks/three-video-block/Save.js @@ -2,47 +2,26 @@ import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; export default function save({ attributes }) { + const blockProps = useBlockProps.save(); + return ( -
- <> -
-
{attributes.videoUrl}
-

{attributes.scaleX}

-

{attributes.scaleY}

-

{attributes.scaleZ}

-

- {attributes.positionX} -

-

- {attributes.positionY} -

-

- {attributes.positionZ} -

-

- {attributes.rotationX} -

-

- {attributes.rotationY} -

-

- {attributes.rotationZ} -

-

- {attributes.autoPlay ? 1 : 0} -

-

- {attributes.customModel ? 1 : 0} -

-

- {attributes.aspectHeight} -

-

- {attributes.aspectWidth} -

-
{attributes.modelUrl}
-
- -
+ ); } diff --git a/blocks/three-video-block/index.js b/blocks/three-video-block/index.js index b4bd853..09b58ee 100644 --- a/blocks/three-video-block/index.js +++ b/blocks/three-video-block/index.js @@ -1,7 +1,7 @@ import { registerBlockType } from "@wordpress/blocks"; import Edit from "./Edit"; import Save from "./Save"; -import { useBlockProps } from "@wordpress/block-editor"; +import Deprecated from "./Deprecated"; const icon = ( ); - +const deprecated = Deprecated(); const blockConfig = require("./block.json"); registerBlockType(blockConfig.name, { ...blockConfig, @@ -23,107 +23,5 @@ registerBlockType(blockConfig.name, { apiVersion: 2, edit: Edit, save: Save, - deprecated: [ - { - attributes: { - videoUrl: { - type: "string", - default: null - }, - modelUrl: { - type: "string", - default: null - }, - autoPlay: { - type: "bool", - default: true - }, - scaleX: { - type: "int", - default: 1 - }, - scaleY: { - type: "int", - default: 1 - }, - scaleZ: { - type: "int", - default: 1 - }, - positionX: { - type: "int", - default: 0 - }, - positionY: { - type: "int", - default: 0 - }, - positionZ: { - type: "int", - default: 0 - }, - rotationX: { - type: "int", - default: 0 - }, - rotationY: { - type: "int", - default: 0 - }, - rotationZ: { - type: "int", - default: 0 - }, - aspectHeight: { - type: "int", - default: 0 - }, - aspectWidth: { - type: "int", - default: 0 - } - }, - save(props) { - return ( -
- <> -
-
{props.attributes.videoUrl}
-

{props.attributes.scaleX}

-

{props.attributes.scaleY}

-

{props.attributes.scaleZ}

-

- {props.attributes.positionX} -

-

- {props.attributes.positionY} -

-

- {props.attributes.positionZ} -

-

- {props.attributes.rotationX} -

-

- {props.attributes.rotationY} -

-

- {props.attributes.rotationZ} -

-

- {props.attributes.aspectHeight} -

-

- {props.attributes.aspectWidth} -

-

- {props.attributes.autoPlay ? 1 : 0} -

-
- -
- ); - } - } - ] + deprecated: deprecated }); From a6c7aa2a72ee416f4983e6e83863ab86e971ff4f Mon Sep 17 00:00:00 2001 From: antpb Date: Mon, 22 Jan 2024 01:10:26 -0600 Subject: [PATCH 17/43] fixes video and starts vr mic controls --- babel.config.js | 2 +- .../components/EnvironmentFront.js | 5 +- blocks/environment/components/Networking.js | 10 +- .../environment/components/TeleportTravel.js | 101 +++- .../environment/components/ThreeObjectEdit.js | 5 +- .../components/ThreeObjectFront.js | 466 ++++++++++++++++++ .../components/ThreeObjectTeleport.js | 95 ++++ .../components/core/front/Portal.js | 3 +- .../components/core/front/ThreeVideo.js | 252 +++++----- blocks/environment/components/p2pcf/p2pcf.js | 8 +- blocks/environment/frontend.js | 68 +++ blocks/three-video-block/Edit.js | 14 + blocks/three-video-block/Save.js | 2 +- blocks/three-video-block/block.json | 148 +++--- package.json | 5 +- php/Plugin.php | 46 +- webpack.config.js | 7 +- yarn.lock | 5 + 18 files changed, 1002 insertions(+), 240 deletions(-) create mode 100644 blocks/environment/components/ThreeObjectFront.js create mode 100644 blocks/environment/components/ThreeObjectTeleport.js diff --git a/babel.config.js b/babel.config.js index 94fb67d..5f7c089 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,6 @@ module.exports = function (api) { api.cache(true); const presets = ["@babel/preset-env", "@babel/preset-react"]; - const plugins = ["@babel/plugin-proposal-optional-chaining"]; + const plugins = ["@babel/plugin-proposal-nullish-coalescing-operator", "@babel/plugin-proposal-optional-chaining", "@babel/plugin-proposal-class-properties"]; return { presets, plugins }; }; diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index bb46b5b..61db15b 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -922,7 +922,7 @@ export default function EnvironmentFront(props) { {Object.values(props.videosToAdd).map((item, index) => { let videoPosX, videoPosY, videoPosZ, videoScaleX, videoScaleY, videoScaleZ; let videoRotationX, videoRotationY, videoRotationZ, videoUrl, aspectHeight, aspectWidth; - let autoPlay, customModel, videoModelUrl; + let autoPlay, customModel, videoModelUrl, videoControlsEnabled; if (item.tagName.toLowerCase() === 'three-video-block') { videoPosX = item.getAttribute('positionX') || ''; @@ -940,6 +940,7 @@ export default function EnvironmentFront(props) { autoPlay = item.hasAttribute('autoplay') ? "1" : false; customModel = item.getAttribute('customModel') ? item.getAttribute('customModel') : false; videoModelUrl = item.getAttribute('modelUrl') || ''; + videoControlsEnabled = item.getAttribute('videoControlsEnabled') === "1" ? true : false; } else { videoPosX = item.querySelector( @@ -1074,6 +1075,7 @@ export default function EnvironmentFront(props) { "div.video-block-model-url" ).innerText : ""; + videoControlsEnabled = true; } return ( ); })} diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index 043deb3..b8e2584 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -110,6 +110,8 @@ const Networking = (props) => { navigator.mediaDevices.getUserMedia({ audio: { deviceId: audioDevice } }).then(function(stream) { // set the local stream to the new stream localStream = stream; + // set a window variable for the local stream + window.localStream = stream; // loop through the peers and set their streams to the new stream for (const peer of p2pcf.peers.values()) { peer.addStream(stream); @@ -275,14 +277,12 @@ const Networking = (props) => { } // set the local stream to the new stream localStream = stream; - }); getUserMedia(); // Initialize media stream stream = await navigator.mediaDevices.getUserMedia({ audio: true }); - for (const peer of p2pcf.peers.values()) { peer.addStream(stream); } @@ -349,7 +349,11 @@ const Networking = (props) => { isMuted = !isMuted; // mute the local stream microphone - localStream.getAudioTracks()[0].enabled = !isMuted; + // localStream.getAudioTracks()[0].enabled = !isMuted; + for (let i = 0; i < window.localStream.getAudioTracks().length; i++) { + window.localStream.getAudioTracks()[i].enabled = !isMuted; + } + if(muteIcon){ if (localStream.getAudioTracks()[0].enabled) { muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; diff --git a/blocks/environment/components/TeleportTravel.js b/blocks/environment/components/TeleportTravel.js index b24e6ee..1640bde 100644 --- a/blocks/environment/components/TeleportTravel.js +++ b/blocks/environment/components/TeleportTravel.js @@ -1,8 +1,11 @@ import { Raycaster, Vector3 } from "three"; -import { useXR, Interactive } from "@react-three/xr"; +import { useXR, Interactive, useController } from "@react-three/xr"; import { useFrame, useThree } from "@react-three/fiber"; import { useCallback, useRef, useState, useEffect } from "react"; import { useRapier, useRigidBody, RigidBody } from "@react-three/rapier"; +import { + Text, +} from "@react-three/drei"; export function TeleportIndicator(props) { @@ -25,6 +28,87 @@ export function ClickIndicatorObject(props) { ); } +function Button({ onClick, position, color, hoverColor }) { + const mesh = React.useRef(); + + const [hovered, setHovered] = React.useState(false); + const currentColor = hovered ? hoverColor : color; + + return ( + setHovered(true)} + onBlur={() => setHovered(false)} + > + + + + + + ); +} + +function Menu() { + const menuRef = useRef(); + const { camera } = useThree(); + const { player, controllers } = useXR(); + const [ muted, setMuted ] = useState(false); + const handleButtonClick = () => { + console.log("Button clicked"); + if(window.localStream){ + // loop through all audio tracks and mute them + for (let i = 0; i < window.localStream.getAudioTracks().length; i++) { + window.localStream.getAudioTracks()[i].enabled = !window.localStream.getAudioTracks()[i].enabled; + } + // if(muted){ + // window.localStream.getAudioTracks()[0].enabled = false; + // } else { + // window.localStream.getAudioTracks()[0].enabled = true; + // } + console.log("window.localStream", window.localStream.getAudioTracks()[0]); + } + setMuted(!muted); + }; + + // when the player is available, add the menu to the player + useEffect(() => { + if (player && menuRef.current) { + menuRef.current.visible = true; + player.add(menuRef.current); + menuRef.current.position.set(0, 2, -0.8); + } + console.log(window.localStream); + }, [player]); + + + useFrame(() => { + if (menuRef.current) { + + } + }); + + return ( + +
diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index f9897b5..fa41b75 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -10,6 +10,7 @@ import { color } from "@wordpress/icons"; import { XRButton } from "@react-three/xr"; const Networking = (props) => { + let isNetworkActivated = props.networkingBlock.length > 0; let isMuted = false; // Initial state of the microphone let localStream = null; // To hold the local media stream @@ -385,30 +386,38 @@ const Networking = (props) => { toggleMute(stream); }; - if (!document.location.hash) { - document.location = document.location.toString() + `#3ov-${props.postSlug}`; - } - const userProfileName = - userData.userId === "" - ? Math.floor(Math.random() * 100000) - : userData.userId; - let p2pcf = new P2PCF( - "user-" + userProfileName, - document.location.hash.substring(1), - { - workerUrl: multiplayerWorker, - slowPollingRateMs: 5000, - fastPollingRateMs: 1500 + useEffect(() => { + const mainContainer = document.getElementById("networking"); + // set container background to accent image + mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + mainContainer.style.backgroundSize = "cover"; + mainContainer.style.display = "block"; + }, []); + + if(isNetworkActivated){ + if (!document.location.hash) { + document.location = document.location.toString() + `#3ov-${props.postSlug}`; } - ); + const userProfileName = Math.floor(Math.random() * 100000); + let p2pcf = new P2PCF( + "user-" + userProfileName, + document.location.hash.substring(1), + { + workerUrl: multiplayerWorker, + slowPollingRateMs: 5000, + fastPollingRateMs: 1500 + } + ); - window.p2pcf = p2pcf; - window.participants = []; + window.p2pcf = p2pcf; + window.participants = []; + } const removePeerUi = (clientId) => { document.getElementById(clientId)?.remove(); document.getElementById(`${clientId}-video`)?.remove(); }; + const setupP2PCF = (p2pcfInstance) => { // Start the P2PCF instance with any necessary configurations p2pcfInstance.start({ playerVRM: userData.playerVRM ? userData.playerVRM : defaultAvatar }); @@ -507,94 +516,98 @@ const Networking = (props) => { document.getElementById("messages").appendChild(messageEl); }; let stream; - p2pcf.on("roomfullrefresh", (peer) => { - console.log("So sorry, Room full refresh", peer); - // Wait for the URL hash to update to ensure room ID is new - setTimeout(() => { - // remove the window.p2pcf object from the window - delete window.p2pcf; - // Reinitialize P2PCF with the new room ID - p2pcf = new P2PCF( - "user-" + userProfileName, - window.location.hash.substring(1), - { - workerUrl: multiplayerWorker, - slowPollingRateMs: 5000, - fastPollingRateMs: 1500 - } - ); - setupP2PCF(p2pcf); - - }, 500); - -}); - - p2pcf.on("peerconnect", (peer) => { - if (stream) { - peer.addStream(stream); - } - peer.on("track", (track, stream) => { - const video = document.createElement("audio"); - video.id = `${peer.id}-audio`; - video.srcObject = stream; - video.setAttribute("playsinline", true); - document.getElementById("videos").appendChild(video); - video.play(); + + if(isNetworkActivated){ + p2pcf.on("roomfullrefresh", (peer) => { + console.log("So sorry, Room full refresh", peer); + // Wait for the URL hash to update to ensure room ID is new + setTimeout(() => { + // remove the window.p2pcf object from the window + delete window.p2pcf; + // Reinitialize P2PCF with the new room ID + p2pcf = new P2PCF( + "user-" + userProfileName, + window.location.hash.substring(1), + { + workerUrl: multiplayerWorker, + slowPollingRateMs: 5000, + fastPollingRateMs: 1500 + } + ); + setupP2PCF(p2pcf); + + }, 500); }); - }); - - p2pcf.on("peerclose", (peer) => { - console.log("Peer close", peer.id, peer); - removePeerUi(peer.id); - }); - - p2pcf.on("msg", (peer, data) => { - addMessage( - peer.id.substring(0, 5) + - ": " + - new TextDecoder("utf-8").decode(data) - ); - }); - - useEffect(() => { - const go = () => { - // document.getElementById("session-id").innerText = "Room: " + p2pcf.roomId; - - // document.getElementById('send-button').addEventListener('click', () => { - // const box = document.getElementById('send-box'); - // addMessage(p2pcf.sessionId.substring(0, 5) + ': ' + box.value); - // p2pcf.broadcast(new TextEncoder().encode(box.value)); - // box.value = ''; - // }) - const mainContainer = document.getElementById("networking"); - // set container background to accent image - mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; - mainContainer.style.backgroundSize = "cover"; - mainContainer.style.display = "block"; - - const audioButton = document.getElementById("audio-button"); - if(audioButton){ - audioButton.addEventListener("click", async (button) => { - // request permissions for microphone devices then do audioDropdownContent - navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) { - AudioDropdownContent(button); - }); - }); + } + + if( isNetworkActivated ){ + p2pcf.on("peerconnect", (peer) => { + if (stream) { + peer.addStream(stream); } + peer.on("track", (track, stream) => { + const video = document.createElement("audio"); + video.id = `${peer.id}-audio`; + video.srcObject = stream; + video.setAttribute("playsinline", true); + document.getElementById("videos").appendChild(video); + video.play(); + }); + }); + + p2pcf.on("peerclose", (peer) => { + console.log("Peer close", peer.id, peer); + removePeerUi(peer.id); + }); - p2pcf.start({ playerVRM: userData.playerVRM ? userData.playerVRM : defaultAvatar }); - addPeerUi(); - addRoomUi(); - }; - const handleLoaded = (event) => { - go(); - // Remove the event listener after handling the first 'loaded' event - window.removeEventListener("loaded", handleLoaded); - }; + p2pcf.on("msg", (peer, data) => { + addMessage( + peer.id.substring(0, 5) + + ": " + + new TextDecoder("utf-8").decode(data) + ); + }); - window.addEventListener("loaded", handleLoaded); + useEffect(() => { + const go = () => { + // document.getElementById("session-id").innerText = "Room: " + p2pcf.roomId; + + // document.getElementById('send-button').addEventListener('click', () => { + // const box = document.getElementById('send-box'); + // addMessage(p2pcf.sessionId.substring(0, 5) + ': ' + box.value); + // p2pcf.broadcast(new TextEncoder().encode(box.value)); + // box.value = ''; + // }) + const mainContainer = document.getElementById("networking"); + // set container background to accent image + mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + mainContainer.style.backgroundSize = "cover"; + mainContainer.style.display = "block"; + + const audioButton = document.getElementById("audio-button"); + if(audioButton){ + audioButton.addEventListener("click", async (button) => { + // request permissions for microphone devices then do audioDropdownContent + navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) { + AudioDropdownContent(button); + }); + }); + } - }, []); + p2pcf.start({ playerVRM: userData.playerVRM ? userData.playerVRM : defaultAvatar }); + addPeerUi(); + addRoomUi(); + }; + const handleLoaded = (event) => { + go(); + // Remove the event listener after handling the first 'loaded' event + window.removeEventListener("loaded", handleLoaded); + }; + + window.addEventListener("loaded", handleLoaded); + + }, []); + } return <>; }; diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 5f8ce26..0a3e828 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -17,6 +17,7 @@ import idle from "../../../inc/avatars/friendly.fbx"; import walk from "../../../inc/avatars/walking.fbx"; import run from "../../../inc/avatars/running.fbx"; import jump from "../../../inc/avatars/Jump.fbx"; +import fall from "../../../inc/avatars/falling.fbx"; import { getMixamoRig } from "../utils/rigMap"; import Ecctrl, { EcctrlAnimation, useGame, useFollowCam } from "ecctrl"; // import {useGame} from './useGame' @@ -224,7 +225,6 @@ export default function Player(props) { const canMoveRef = useRef(true); const spriteRef = useRef(); - const falling = useRef(true); const animationsRef = useRef(); const playerModelRef = useRef(); @@ -241,10 +241,10 @@ export default function Player(props) { const idleAnimation = useGame((state) => state.idle); const walkAnimation = useGame((state) => state.walk); const runAnimation = useGame((state) => state.run); - const jumpAnimation = useGame((state) => state.jump); - const jumpIdleAnimation = useGame((state) => state.jumpIdle); - const jumpLandAnimation = useGame((state) => state.jumpLand); - const fallAnimation = useGame((state) => state.fall); + // const jumpAnimation = useGame((state) => state.jump); + // const jumpIdleAnimation = useGame((state) => state.jumpIdle); + // const jumpLandAnimation = useGame((state) => state.jumpLand); + // const fallAnimation = useGame((state) => state.fall); const action1Animation = useGame((state) => state.action1); const action2Animation = useGame((state) => state.action2); const action3Animation = useGame((state) => state.action3); @@ -254,30 +254,30 @@ export default function Player(props) { // useXR to get the controllers // const [ playerPosition, deathCount, levelIndex, death ] = useGame(state => [ state.playerPosition, state.deathCount, state.levelIndex, state.death ]) - useEffect(() => { - // Play the current animation, with special handling for certain animations - if(animationsRef.current){ - const action = animationsRef.current[curAnimation ? curAnimation : animationSet.idle]; - if ([animationSet.jump ].includes(curAnimation)) { - action.reset().fadeIn(0.2).setLoop(LoopOnce, void 0).play(); - action.clampWhenFinished = true; - } else { - action.reset().fadeIn(0.2).play(); - } + // useEffect(() => { + // // Play the current animation, with special handling for certain animations + // if(animationsRef.current){ + // const action = animationsRef.current[curAnimation ? curAnimation : animationSet.idle]; + // if ([animationSet.jump ].includes(curAnimation)) { + // action.reset().fadeIn(0.2).setLoop(LoopOnce, void 0).play(); + // action.clampWhenFinished = true; + // } else { + // action.reset().fadeIn(0.2).play(); + // } - // Reset animation when the current action finishes - const onFinish = () => resetAnimation(); - action._mixer.addEventListener('finished', onFinish); + // // Reset animation when the current action finishes + // const onFinish = () => resetAnimation(); + // action._mixer.addEventListener('finished', onFinish); - // Cleanup - return () => { - action.fadeOut(0.2); - action._mixer.removeEventListener('finished', onFinish); - // Ensure listeners are cleared to prevent memory leaks - action._mixer._listeners = []; - }; - } - }, [curAnimation, animationsRef.current, animationSet, resetAnimation]); + // // Cleanup + // return () => { + // action.fadeOut(0.2); + // action._mixer.removeEventListener('finished', onFinish); + // // Ensure listeners are cleared to prevent memory leaks + // action._mixer._listeners = []; + // }; + // } + // }, [curAnimation, animationsRef.current, animationSet, resetAnimation]); // useEffect(() => { // if(animationsRef.current){ @@ -339,6 +339,7 @@ export default function Player(props) { const walkingFile = threeObjectPlugin + walk; const runningFile = threeObjectPlugin + run; const jumpFile = threeObjectPlugin + jump; + const fallingFile = threeObjectPlugin + fall; // const [walkFile, setWalkFile] = useState(model.threeObjectPlugin + walk); const spawnPoint = props.spawnPoint? props.spawnPoint.map(Number) : [0,0,0]; // convert spawnPoint to numbers const { controllers } = useXR(); @@ -370,7 +371,6 @@ export default function Player(props) { // if the playerURL ends in .png useEffect(() => { if( userData.playerVRM.endsWith( '.png' ) ){ - console.log("player url is", userData.playerVRM); setAvatarIsSprite(true); } }, []); @@ -425,10 +425,11 @@ export default function Player(props) { const walkingAction = animationsMixer.clipAction(animations[1]); const runningAction = animationsMixer.clipAction(animations[2]); const jumpingAction = animationsMixer.clipAction(animations[3]); - idleAction.timeScale = 0.8; - walkingAction.timeScale = 1; - runningAction.timeScale = 1; - jumpingAction.timeScale = 1; + // const fallingAction = animationsMixer.clipAction(animations[4]); + idleAction.timeScale = 1; + walkingAction.timeScale = 0; + runningAction.timeScale = 0; + jumpingAction.timeScale = 0; animationsRef.current = { idle: idleAction, walking: walkingAction, running: runningAction, jump: jumpingAction }; idleAction.play(); playerController.scene.visible = true; @@ -487,10 +488,10 @@ export default function Player(props) { // fps for network updates const updateRate = 1000 / 30; let lastNetworkUpdateTime = 0; + let countHangtime = 0; useFrame((state, delta) => { const now = state.clock.elapsedTime * 1000; - if (isPresenting && !presentingState) { const newCamera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); @@ -510,14 +511,15 @@ export default function Player(props) { handleBlinking(delta); let isMoving = false; + let isJumping = false; - if (props.movement.current.backward) { + if (props.movement.current.backward && characterRef.current.userData.canJump) { isMoving = true; - } else if (props.movement.current.forward) { + } else if (props.movement.current.forward && characterRef.current.userData.canJump) { isMoving = true; - } else if (props.movement.current.left) { + } else if (props.movement.current.left && characterRef.current.userData.canJump) { isMoving = true; - } else if (props.movement.current.right) { + } else if (props.movement.current.right && characterRef.current.userData.canJump) { isMoving = true; } // if(avatarIsSprite && isMoving && frameName !== 'WalkForward'){ @@ -568,7 +570,7 @@ export default function Player(props) { } } - const { idle, walking, running } = animationsRef.current; + const { idle, walking, running, jump, falling } = animationsRef.current; // if the player hits the R key respawn using the characterRef to move it to the origin spawn point if(props.movement.current.respawn){ characterRef.current.setBodyType(rapier.RigidBodyType.Fixed, 1); @@ -576,44 +578,104 @@ export default function Player(props) { } else if(!props.movement.current.respawn && characterRef.current.bodyType() === 1){ characterRef.current.setBodyType(rapier.RigidBodyType.Dynamic, 0); } + if ( isMoving && characterRef.current.userData.canJump ) { + jump.clampWhenFinished = false; + jump.reset(); + jump.setEffectiveTimeScale(0); + jump.setEffectiveWeight(0); + } else if( !isMoving && characterRef.current.userData.canJump ) { + jump.clampWhenFinished = false; + jump.reset(); + jump.setEffectiveTimeScale(0); + jump.setEffectiveWeight(0); + // and now play idle + idle.setEffectiveTimeScale(1); + idle.setEffectiveWeight(1); + } + if ( ! characterRef.current.userData.canJump ) { + // start tracking hangtime + countHangtime++; + // if the current timescale of the jump animation is 0, set it to 1 + if(jump.getEffectiveTimeScale() === 0){ + if(countHangtime > 3){ + jump.setEffectiveTimeScale(1); + jump.setEffectiveWeight(1); + jump.clampWhenFinished = true; + // initialize on the last frame of the jump animation + jump.time = jump._clip.duration; + jump.play(); + running.setEffectiveTimeScale(0); + running.setEffectiveWeight(0); + walking.setEffectiveTimeScale(0); + walking.setEffectiveWeight(0); + console.log("falling all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); + } + } + } - if (isMoving) { - // If moving, but idle animation is playing, stop it and play walking animation - // if (idle.isRunning()) { - // blend from idle to walking - if(props.movement.current.shift) { - if (walking.isRunning()) { - walking.crossFadeTo(running, 1.1); - } else { - idle.crossFadeTo(running, 1.1); - } - running.enabled = true; - running.setEffectiveTimeScale(1.1); - running.setEffectiveWeight(1); - idle.enabled = true; - idle.setEffectiveTimeScale(1); - idle.setEffectiveWeight(0); - walking.enabled = true; - walking.setEffectiveTimeScale(1.1); - walking.setEffectiveWeight(0); - running.play(); - } else { - if (running.isRunning()) { - running.crossFadeTo(walking, 1); + if(props.movement.current.space) { + if( characterRef.current.userData.canJump ) { + isJumping = true; + // reset hangtime + countHangtime = 0; + jump.setEffectiveTimeScale(1); + jump.setEffectiveWeight(1); + + // set all animations to timescale of 0 + idle.setEffectiveTimeScale(0); + walking.setEffectiveTimeScale(0); + running.setEffectiveTimeScale(0); + // falling.setEffectiveTimeScale(0); + idle.setEffectiveWeight(0); + walking.setEffectiveWeight(0); + running.setEffectiveWeight(0); + // falling.setEffectiveWeight(0); + + console.log("jump all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); + jump.setLoop(LoopOnce, 1); + jump.reset(); + jump.clampWhenFinished = true; + jump.play(); + } + } + + + if ( isMoving && characterRef.current.userData.canJump ) { + countHangtime = 0; + + if(props.movement.current.shift) { + if (walking.isRunning()) { + walking.crossFadeTo(running, 1.1); + } else { + idle.crossFadeTo(running, 1.1); + } + running.enabled = true; + running.setEffectiveTimeScale(1); + running.setEffectiveWeight(1); + idle.enabled = true; + idle.setEffectiveTimeScale(1); + idle.setEffectiveWeight(0); + walking.enabled = true; + walking.setEffectiveTimeScale(1); + walking.setEffectiveWeight(0); + running.play(); } else { - idle.crossFadeTo(walking, 1); + if (running.isRunning()) { + running.crossFadeTo(walking, 1); + } else { + idle.crossFadeTo(walking, 1); + } + walking.enabled = true; + walking.setEffectiveTimeScale(1); + walking.setEffectiveWeight(1); + running.enabled = true; + running.setEffectiveTimeScale(1); + running.setEffectiveWeight(0); + idle.enabled = true; + idle.setEffectiveTimeScale(1); + idle.setEffectiveWeight(0); + walking.play(); } - walking.enabled = true; - walking.setEffectiveTimeScale(1.1); - walking.setEffectiveWeight(1); - running.enabled = true; - running.setEffectiveTimeScale(1.1); - running.setEffectiveWeight(0); - idle.enabled = true; - idle.setEffectiveTimeScale(1); - idle.setEffectiveWeight(0); - walking.play(); - } //if moving, send a network event of where we are and our current state....animations probably need to go here too. if (window.p2pcf) { @@ -629,9 +691,9 @@ export default function Player(props) { // console.log("sending position", participantObject, position); const rotation = [ - participantObject.parent.parent.rotation.x, - participantObject.parent.parent.rotation.y, - participantObject.parent.parent.rotation.z + participantObject.parent.rotation.x, + participantObject.parent.rotation.y, + participantObject.parent.rotation.z ]; // console.log("userData", userData); const messageObject = { @@ -669,33 +731,32 @@ export default function Player(props) { } // } } else { - // If not moving, but walking animation is playing, stop it and play idle animation - if (walking.isRunning()) { - // blend from walking to idle - walking.crossFadeTo(idle, 1); - // set the walking animation to lower weight so it blends into the idle animation - walking.enabled = true; - walking.setEffectiveTimeScale(1); - walking.setEffectiveWeight(0); - running.setEffectiveTimeScale(1); - running.setEffectiveWeight(0); - idle.enabled = true; - idle.setEffectiveTimeScale(1); - idle.setEffectiveWeight(1); - idle.play(); - } else if (running.isRunning()) { - // blend from running to idle - running.crossFadeTo(idle, 1); - // set the running animation to lower weight so it blends into the idle animation - running.enabled = true; - running.setEffectiveTimeScale(1); - running.setEffectiveWeight(0); - walking.setEffectiveTimeScale(1); - walking.setEffectiveWeight(0); - idle.enabled = true; - idle.setEffectiveTimeScale(1); - idle.setEffectiveWeight(1); - idle.play(); + if(characterRef.current.userData.canJump){ + isJumping = false; + if (walking.isRunning()) { + walking.crossFadeTo(idle, 1); + walking.enabled = true; + walking.setEffectiveTimeScale(1); + walking.setEffectiveWeight(0); + running.setEffectiveTimeScale(1); + running.setEffectiveWeight(0); + idle.enabled = true; + idle.setEffectiveTimeScale(1); + idle.setEffectiveWeight(1); + idle.play(); + } else if (running.isRunning()) { + // blend from running to idle + running.crossFadeTo(idle, 1); + running.enabled = true; + running.setEffectiveTimeScale(1); + running.setEffectiveWeight(0); + walking.setEffectiveTimeScale(1); + walking.setEffectiveWeight(0); + idle.enabled = true; + idle.setEffectiveTimeScale(1); + idle.setEffectiveWeight(1); + idle.play(); + } } } } @@ -738,19 +799,19 @@ export default function Player(props) { animated camMoveSpeed={1.5} // Increased camera movement speed for more dynamic camera follow camZoomSpeed={1.5} // Faster zoom to adjust view quicker - sprintMult={1.9} // Slightly increased for a faster sprint option + autoBalance={false} // Disabled to prevent auto-balance + //sprintMult={1.9} // Slightly increased for a faster sprint option airDragMultiplier={0.05} // Slightly reduced to decrease hangtime fallingGravityScale={3.5} // Increased to accelerate descent - wakeUpDelay={2000} - dampingC={0.1} + wakeUpDelay={4000} disableFollowCam={ isPresenting ? true : false } physics={isPresenting ? true : false} - > {isModelLoaded && playerControllerRef.current && ( <> {avatarIsSprite && setHovered(false)} > - - + + ); @@ -118,19 +117,20 @@ function Menu() { // } else { // window.localStream.getAudioTracks()[0].enabled = true; // } - console.log("window.localStream", window.localStream.getAudioTracks()[0]); + // console.log("window.localStream", window.localStream.getAudioTracks()[0]); } setMuted(!muted); }; // when the player is available, add the menu to the player useEffect(() => { - if (player && menuRef.current) { - //menuRef.current.visible = true; - player.add(menuRef.current); - menuRef.current.position.set(0, 2, -0.8); - } - console.log(window.localStream); + console.log("hit the player ref", player) + // if (player && menuRef.current) { + // //menuRef.current.visible = true; + // player.add(menuRef.current); + // menuRef.current.position.set(0, 2, -0.8); + // } + // console.log(window.localStream); }, [player]); @@ -164,6 +164,7 @@ function Menu() { export default function TeleportTravel(props) { + const doubleClickThreshold = 1000; const clickTimeoutRef = useRef(null); const pinchThreshold = 0.01; @@ -178,8 +179,8 @@ export default function TeleportTravel(props) { const [isHovered, setIsHovered] = useState(false); const [canTeleport, setCanTeleport] = useState(true); const [canInteract, setCanInteract] = useState(false); + const [currentPosition, setCurrentPosition] = useState(new Vector3()); const [spawnPos, setSpawnPos] = useState(props.spawnPoint); - const [intersectionPoint, setIntersectionPoint] = useState(); const { controllers, player, isPresenting } = useXR(); const target = useRef(); @@ -192,13 +193,15 @@ export default function TeleportTravel(props) { // if this is the left hand ignore if (controller.inputSource.handedness === "right") { const { hand } = controller; - const thumbTip = hand.joints['thumb-tip']; - const indexTip = hand.joints['index-finger-tip']; - - // Visual indicators for thumb and index tips - indexTip.add(new Mesh(new BoxGeometry(0.0081, 0.0081, 0.0081), new MeshBasicMaterial({ color: 0x0000ff }))); - thumbTip.add(new Mesh(new BoxGeometry(0.0081, 0.0081, 0.008), new MeshBasicMaterial({ color: 0x0000ff }))); - + if(hand){ + const thumbTip = hand.joints['thumb-tip']; + const indexTip = hand.joints['index-finger-tip']; + if( thumbTip && indexTip ){ + // Visual indicators for thumb and index tips + indexTip.add(new Mesh(new BoxGeometry(0.0081, 0.0081, 0.0081), new MeshBasicMaterial({ color: 0x0000ff }))); + thumbTip.add(new Mesh(new BoxGeometry(0.0081, 0.0081, 0.008), new MeshBasicMaterial({ color: 0x0000ff }))); + } + } } }); @@ -269,6 +272,7 @@ export default function TeleportTravel(props) { useEffect(() => { + console.log("hit the is presenting effect", isPresenting); const x = Number(spawnPos[0]); const y = Number(spawnPos[1]) + 0.1; const z = Number(spawnPos[2]); @@ -341,17 +345,18 @@ export default function TeleportTravel(props) { } if (useNormal) { const p = intersection.point; - setIntersectionPoint(p); targetLoc.current.position.copy(p); } else { targetLoc.current.position.copy(intersection.point); } + setCurrentPosition(intersection.point); } } }); const click = useCallback(() => { + console.log("clicking", player); if (isHovered && !canInteract) { targetLoc.current.position.set( targetLoc.current.position.x, @@ -361,26 +366,25 @@ export default function TeleportTravel(props) { if (canTeleport) { console.log("teleporting to", targetLoc.current.position); player.position.copy(targetLoc.current.position); - const p2pcf = window.p2pcf; const participantObject = scene.getObjectByName("playerOne"); - // participantObject.position.set([targetLoc.current?.position.x, targetLoc.current?.position.y, targetLoc.current?.position.z]); //if moving, send a network event of where we are and our current state....animations probably need to go here too. if(participantObject){ + console.log("participantObject", participantObject); if (p2pcf) { var target = new Vector3(); var worldPosition = participantObject.getWorldPosition( target ); const position = [ - worldPosition.x, - worldPosition.y, - worldPosition.z + targetLoc.current.position.x, + targetLoc.current.position.y, + targetLoc.current.position.z ]; // console.log("sending position", participantObject, position); // get the z rotation of the headset const rotation = [ - participantObject.rotation.x, - participantObject.rotation.y, - participantObject.rotation.z + player.rotation.x, + player.rotation.y, + player.rotation.z ]; const messageObject = { [p2pcf.clientId]: { @@ -392,7 +396,7 @@ export default function TeleportTravel(props) { isMoving: "walking" } }; - console.log("sending message", messageObject, p2pcf, p2pcf.clientId); + console.log("sending message", messageObject); // console.log("userdata", userData); clearTimeout(movementTimeoutRef.current); movementTimeoutRef.current = setTimeout(() => { diff --git a/blocks/environment/components/core/front/ModelObject.js b/blocks/environment/components/core/front/ModelObject.js index 6d1b819..71d316a 100644 --- a/blocks/environment/components/core/front/ModelObject.js +++ b/blocks/environment/components/core/front/ModelObject.js @@ -264,6 +264,7 @@ export function ModelObject(model) { const circle = new Mesh(geometryCircle, materialCircle); return circle; }); + if (model.collidable === "1") { return ( ( - // // window.location.href = model.destinationUrl - // ) - // } > ); diff --git a/blocks/environment/components/core/front/Participants.js b/blocks/environment/components/core/front/Participants.js index 82159d5..e6a46ff 100644 --- a/blocks/environment/components/core/front/Participants.js +++ b/blocks/environment/components/core/front/Participants.js @@ -166,7 +166,7 @@ function Participant(participant) { if (someVRM?.userData?.gltfExtensions?.VRM) { const playerController = someVRM.userData.vrm; // add the playerController to the vrmsRef - vrmsRef.current[participant.name] = playerController; + vrmsRef.current[participant.playerName] = playerController; const fetchProfile = async (pfp, modelToModify) => { console.log("modelToModify", modelToModify); @@ -221,16 +221,16 @@ function Participant(participant) { // Create animation mixer for the cloned model const newMixer = new THREE.AnimationMixer(playerController.scene); - animationMixerRef.current[participant.name] = newMixer; + animationMixerRef.current[participant.playerName] = newMixer; // console.log("heres the current mixers", animationMixerRef.current[participant.name]); - mixers.current[participant.name] = animationMixerRef.current[participant.name]; - participant.profileUserData.current[participant.name] = {inWorldName : participant.name, pfp: participant.pfp }; + mixers.current[participant.playerName] = animationMixerRef.current[participant.playerName]; + participant.profileUserData.current[participant.playerName] = {inWorldName : participant.playerName, pfp: participant.pfp }; Promise.all(animationsPromises).then(animations => { - animationsRef.current[participant.name] = animations; + animationsRef.current[participant.playerName] = animations; - const idleAction = animationMixerRef.current[participant.name].clipAction(animations[0]); - const walkingAction = animationMixerRef.current[participant.name].clipAction(animations[1]); - const runningAction = animationMixerRef.current[participant.name].clipAction(animations[2]); + const idleAction = animationMixerRef.current[participant.playerName].clipAction(animations[0]); + const walkingAction = animationMixerRef.current[participant.playerName].clipAction(animations[1]); + const runningAction = animationMixerRef.current[participant.playerName].clipAction(animations[2]); // console.log("animationmixer", animationMixerRef.current[participant.name] , idleAction, walkingAction, runningAction); idleAction.timeScale = 1; idleAction.play(); @@ -245,20 +245,20 @@ function Participant(participant) { }, [someVRM, theScene, participant.p2pcf]); useFrame((state, delta) => { - if(mixers.current[participant.name]){ + if(mixers.current[participant.playerName]){ // Log each action in the mixer // mixer._actions.forEach(action => { // console.log(`Action: ${action._clip.name}, Is Running: ${action.isRunning()}, Effective Weight: ${action.getEffectiveWeight()}, Current Time: ${action.time}`); // }); // Find and play the idle animation explicitly - const idleAction = mixers.current[participant.name]._actions.find(action => action._clip.name === 'idle'); + const idleAction = mixers.current[participant.playerName]._actions.find(action => action._clip.name === 'idle'); if (idleAction && !idleAction.isRunning()) { console.log("idle action", idleAction); idleAction.reset().play(); } // Update the mixer - mixers.current[participant.name].update(delta); + mixers.current[participant.playerName].update(delta); } if (someVRM?.userData?.vrm) { @@ -279,13 +279,17 @@ function Participant(participant) { //calculate the height of the avatar to be used in the Text component position below const box = new THREE.Box3().setFromObject(modelClone); - const height = (box.max.y - box.min.y) + 0.1; + let height = (box.max.y - box.min.y) + 0.1; + // if the height is negative infinity, set the height to 1.5 + if (height === -Infinity) { + height = 1.8; + } // use textureLoader to load the profile image. const textureLoader = new THREE.TextureLoader(); textureLoader.crossOrigin = ''; const profileImage = textureLoader.load(participant.profileImage); - const displayName = participant.inWorldName ? participant.inWorldName : participant.name; + const displayName = participant.inWorldName ? participant.inWorldName : participant.playerName; let planeWidth = 0.25; let fontSize = 0.04; @@ -302,7 +306,6 @@ function Participant(participant) { // ends with participant.playerVRM is png? let isPng = participant.playerVRM.endsWith('.png'); - return ( @@ -345,7 +348,7 @@ function Participant(participant) { {displayName} - + { isPng && ( = 5 ) { - console.log("Room is full, cannot start.", canStart); - return; - } else { - console.log("Room is not full, can start.", canStart); - //check if the user is already in the room - // const isInRoom = await this._checkIfUserIsInRoom(userData.currentPostId, userData.userId); - // check for a cookie to see if the user is already in the room - const isInRoom = await this._pingIfInRoom();; - - if (isInRoom.body === 'true') { - console.log("User is already in the room, cannot start. Send another beat."); - this._sendHeartbeat(); - } else { - console.log("User is not in the room, starting initial heartbeat."); - this._updateRoomCount("add"); - this._sendHeartbeat(); - } - this.startHeartbeat(); + if ( canStart ) { + if( userData.heartbeatEnabled ) { + console.log("heartbeatEnabled", userData.heartbeatEnabled); + const isInRoom = await this._pingIfInRoom();; + + if (isInRoom.body === 'true') { + console.log("User is already in the room, cannot start. Send another beat."); + this._sendHeartbeat(); + } else { + console.log("User is not in the room, starting initial heartbeat."); + this._updateRoomCount("add"); + this._sendHeartbeat(); + } + this.startHeartbeat(); + } + } else { + console.warn("Room is full, cannot start.", canStart); + return; } await this._init(); @@ -1273,7 +1270,13 @@ export default class P2PCF extends EventEmitter { 'X-WP-Nonce': userData.nonce, } }) - .then(response => response.json()) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not ok'); + } + // if the response from the get-room-count endpoint isnt true then the room is full + return response.json(); + }) .catch(error => { console.error('Error fetching room count:', error); throw error; diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index 07654f1..224ffe3 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -79,6 +79,7 @@ color: white; } + .threeov-entry-flow { background-color: #212121f4; color: white; @@ -87,6 +88,10 @@ box-shadow: 0px 0px 17px 5px rgb(15 0 0 / 57%); } +.threeov-entry-flow span { + font-size: 0.8em; +} + .threeov-entry-flow input { border-radius: 10px; margin-top: 10px !important; @@ -459,6 +464,15 @@ div:has(> .three-object-viewer-component-container, > .three-object-viewer-inner .threeov-entry-flow input { box-shadow: 0px 0px 8px 5px rgb(15 0 0 / 57%); + background-color: #af7bd40f; + padding: 5px; + color: white; + border: 1px solid #a82dff0f; + margin-bottom: 10px; + width: 180px; +} +.threeov-entry-flow div div { + margin-top: 10px; } .threeov-entry-flow input:focus { diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 78cfd60..74f748c 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -223,7 +223,6 @@ threeApp.forEach((threeApp) => { render( <> - { ( networkingBlock.length > 0 ) && ( <>
{/*
Room:
*/} @@ -241,11 +240,12 @@ threeApp.forEach((threeApp) => { > Enter VR - - + { ( networkingBlock.length > 0 ) && ( + + )}
@@ -253,10 +253,9 @@ threeApp.forEach((threeApp) => { - ) - } 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≻B@;@2KJQ#62bIYu;-nKM14Iq2{<3`L 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

@4%*l9uNdEby7n5ptM>g*3O*it*Im18 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 F{67*1t(yP< literal 346512 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]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≪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

B+P|t#mzo=l2f}jtS$=nevJ!!x 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 z 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 F(!cvY!?FMX literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 5723be1..12e3d4b 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "base64-arraybuffer": "^1.0.2", "camera-controls": "^2.7.0", "convert-hex": "^0.1.0", - "ecctrl": "1.0.62", + "ecctrl": "1.0.65", "events": "^3.3.0", "get-browser-rtc": "^1.1.0", "image-webpack-loader": "^8.1.0", diff --git a/php/Plugin.php b/php/Plugin.php index fc74594..1d18f4a 100644 --- a/php/Plugin.php +++ b/php/Plugin.php @@ -159,27 +159,7 @@ function handle_heartbeat($request) { } function get_room_count($request) { - $post_id = $request['id']; - // $site_url = $request['siteUrl']; - $site_url = get_site_url(); - // Replace with the URL of your Cloudflare Worker - $cloudflare_worker_url = "https://room-balancer.sxpdigital.workers.dev/get-room-count/{$post_id}?siteUrl=" . urlencode($site_url);; - - $response = wp_remote_get($cloudflare_worker_url, array( - 'headers' => array('Content-Type' => 'application/json'), - // 'body' => json_encode(array( - // 'siteUrl' => get_site_url(), - // 'postId' => $post_id, - // )), - 'timeout' => 45, - )); - - if (is_wp_error($response)) { - return new \WP_REST_Response('Error fetching room count', 500); - } - // the body may come back of a string of 0, so we need to convert it to an integer - $body = intval(wp_remote_retrieve_body($response)); - return new \WP_REST_Response($body, 200); + return true; } // Callback function to make a request to the Cloudflare Worker @@ -601,6 +581,7 @@ function threeobjectviewer_frontend_assets() { 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'currentPostId' => $currentPostId, + 'heartbeatEnabled' => false, 'addNonce' => wp_create_nonce( 'add-room-count' ), 'subtractNonce' => wp_create_nonce( 'subtract-room-count' ), ); @@ -617,6 +598,7 @@ function threeobjectviewer_frontend_assets() { 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'addNonce' => wp_create_nonce( 'add-room-count'), + 'heartbeatEnabled' => false, 'subtractNonce' => wp_create_nonce( 'subtract-room-count'), 'currentPostId' => $currentPostId ); @@ -633,6 +615,7 @@ function threeobjectviewer_frontend_assets() { 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ), 'currentPostId' => $currentPostId, 'addNonce' => wp_create_nonce( 'add-room-count'), + 'heartbeatEnabled' => false, 'subtractNonce' => wp_create_nonce( 'subtract-room-count'), 'nonce' => wp_create_nonce( 'wp_rest' ) ); diff --git a/yarn.lock b/yarn.lock index 4144b04..440d0c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7879,10 +7879,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecctrl@1.0.62: - version "1.0.62" - resolved "https://registry.yarnpkg.com/ecctrl/-/ecctrl-1.0.62.tgz#2ae9e55004fc6522f70df9c553f84e8ec704f28f" - integrity sha512-BXKGPNWEc2QYg6TXceifn9iWWSP/KRA27LITKpWP+qSKqB2jNXNnQh1CF9bZaSQWdF4/9Z8q13+zvs6j7hsCvg== +ecctrl@1.0.65: + version "1.0.65" + resolved "https://registry.yarnpkg.com/ecctrl/-/ecctrl-1.0.65.tgz#f35819f162cd25fb4518f249b8c67dfe04078e89" + integrity sha512-BZMYYt79W27udNnu3oTFWn/9rouZOYLtVA7M/o+06yR5Kuypx8mvvJ4Q6G+Y4cyOnIsS5LsaJV4i+lZvq2GmUg== dependencies: "@react-spring/three" "^9.7.3" leva "^0.9.34" From 11ff8918bfdbf9086dade7f54fa270d8191baf2d Mon Sep 17 00:00:00 2001 From: antpb Date: Wed, 28 Feb 2024 18:20:56 -0600 Subject: [PATCH 27/43] webpack 5 and npm updates + uikit --- blocks/environment/components/Controls.js | 3 + .../components/EnvironmentFront.js | 35 +- blocks/environment/components/Networking.js | 24 +- blocks/environment/components/Player.js | 251 +- .../environment/components/TeleportTravel.js | 6 +- .../environment/components/ThreeObjectEdit.js | 12 +- .../components/ThreeObjectFront.js | 2 +- .../components/core/front/ModelObject.js | 2 +- .../components/core/front/NPCObject.js | 6 +- .../components/core/front/Participants.js | 106 +- .../components/core/front/Portal.js | 4 +- .../components/core/front/TextObject.js | 2 +- .../components/core/front/ThreeVideo.js | 2 +- .../core/front/utils/participantsStore.js | 13 + blocks/environment/components/p2pcf/p2pcf.js | 26 +- blocks/environment/frontend.js | 4 +- blocks/environment/index.js | 1 - .../components/ThreeObjectFront.js | 2 +- package.json | 21 +- webpack.config.js | 193 +- yarn.lock | 15155 +++++++--------- 21 files changed, 7077 insertions(+), 8793 deletions(-) create mode 100644 blocks/environment/components/core/front/utils/participantsStore.js diff --git a/blocks/environment/components/Controls.js b/blocks/environment/components/Controls.js index 0df63c7..3f02aec 100644 --- a/blocks/environment/components/Controls.js +++ b/blocks/environment/components/Controls.js @@ -1,6 +1,9 @@ import { useEffect, useRef } from 'react'; +import { useJoystickControls } from "ecctrl"; +import { useFrame } from '@react-three/fiber'; export function useKeyboardControls() { + const movement = useRef({ forward: false, backward: false, diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index cb6605e..d45f4e2 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -15,13 +15,16 @@ import { FrontPluginProvider, FrontPluginContext } from './FrontPluginProvider'; import { useAnimations, Html, + AdaptiveDpr, + AdaptiveEvents, + PerformanceMonitor, } from "@react-three/drei"; import { EcctrlJoystick } from 'ecctrl' // import { A11y } from "@react-three/a11y"; import { GLTFAudioEmitterExtension } from "three-omi"; import { VRButton, ARButton, XR, Controllers, Hands, XRButton } from '@react-three/xr' -import { Perf } from "r3f-perf"; +// import { Perf } from "r3f-perf"; import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import TeleportTravel from "./TeleportTravel"; import Player from "./Player"; @@ -600,22 +603,6 @@ function SavedObject(props) { } export default function EnvironmentFront(props) { - - useEffect(() => { - const checkGamepads = () => { - const gamepads = navigator.getGamepads ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; i++) { - if (gamepads[i]) { - console.log("Gamepad connected at index " + gamepads[i].index + ": " + gamepads[i].id); - // Handle gamepad connection (update state, start reading inputs, etc.) - } - } - }; - - const interval = setInterval(checkGamepads, 1000); // Check every second - - return () => clearInterval(interval); // Cleanup on component unmount - }, []); const [showUI, setShowUI] = useState(true); const [displayName, setDisplayName] = useState(props.userData.inWorldName); @@ -653,6 +640,7 @@ export default function EnvironmentFront(props) { document.removeEventListener('yourComponentReady', handleReady); }; }, []); + const [dpr, setDpr] = useState(2) if (loaded === true) { // emit javascript event "loaded" @@ -681,7 +669,9 @@ export default function EnvironmentFront(props) { }} onPointerDown={(e) => { e.target.requestPointerLock(); - }} + }} + dpr={dpr} + mode="concurrent" // dpr={1.5} // shadowMap // linear={true} @@ -696,6 +686,9 @@ export default function EnvironmentFront(props) { zIndex: 1 }} > + + + setDpr(1)} factor={1} onChange={({ factor }) => setDpr(Math.floor(0.5 + 1.5 * factor, 1))} /> {/* */} @@ -716,7 +709,7 @@ export default function EnvironmentFront(props) { iterations = {10} // timestep = {1/30} // gravity={[0, -9.8, 0]} - interpolate={false} + // interpolate={false} allowSleep={true} allowDeactivation={true} // allowCcd={true} @@ -2231,7 +2224,9 @@ export default function EnvironmentFront(props) { })} <> { isMobile() && ( - + ) } diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js index fa41b75..cc99cb8 100644 --- a/blocks/environment/components/Networking.js +++ b/blocks/environment/components/Networking.js @@ -137,7 +137,7 @@ const Networking = (props) => { audioJoin.style.display = "none"; dropdown.style.display = dropdown.style.display === "none" ? "block" : "none"; var muteIcon = document.createElement("button"); - muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + muteIcon.style.backgroundImage = `url(${audioIcon})`; muteIcon.style.backgroundSize = "cover"; muteIcon.id = "mute-icon"; muteIcon.style.width = "40px"; @@ -159,7 +159,7 @@ const Networking = (props) => { onMuteButtonPressed(stream); }); var settingsIconElement = document.createElement("button"); - settingsIconElement.style.backgroundImage = `url(${threeObjectPlugin + settingsIcon})`; + settingsIconElement.style.backgroundImage = `url(${settingsIcon})`; settingsIconElement.style.backgroundSize = "cover"; settingsIconElement.id = "mute-icon"; settingsIconElement.style.width = "40px"; @@ -363,9 +363,9 @@ const Networking = (props) => { if(muteIcon){ if (localStream.getAudioTracks()[0].enabled) { - muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIcon})`; + muteIcon.style.backgroundImage = `url(${audioIcon})`; } else { - muteIcon.style.backgroundImage = `url(${threeObjectPlugin + audioIconMute})`; + muteIcon.style.backgroundImage = `url(${audioIconMute})`; } } @@ -389,7 +389,7 @@ const Networking = (props) => { useEffect(() => { const mainContainer = document.getElementById("networking"); // set container background to accent image - mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + mainContainer.style.backgroundImage = `url(${cornerAccent})`; mainContainer.style.backgroundSize = "cover"; mainContainer.style.display = "block"; }, []); @@ -405,7 +405,8 @@ const Networking = (props) => { { workerUrl: multiplayerWorker, slowPollingRateMs: 5000, - fastPollingRateMs: 1500 + fastPollingRateMs: 1500, + participantLimit: props.networkingBlock[0].attributes.participantLimit.value, } ); @@ -428,7 +429,7 @@ const Networking = (props) => { const addPeerUi = (sessionId) => { // if (document.getElementById(sessionId)) return; var peerIcon = document.createElement("button"); - peerIcon.style.backgroundImage = `url(${threeObjectPlugin + participants})`; + peerIcon.style.backgroundImage = `url(${participants})`; peerIcon.style.backgroundSize = "cover"; peerIcon.style.width = "40px"; peerIcon.style.height = "40px"; @@ -465,7 +466,7 @@ const Networking = (props) => { const addRoomUi = (sessionId) => { // if (document.getElementById(sessionId)) return; var roomIcon = document.createElement("button"); - roomIcon.style.backgroundImage = `url(${threeObjectPlugin + worldIcon})`; + roomIcon.style.backgroundImage = `url(${worldIcon})`; roomIcon.style.backgroundSize = "cover"; roomIcon.style.width = "40px"; roomIcon.style.height = "40px"; @@ -499,7 +500,7 @@ const Networking = (props) => { dropdown.style.height = "150px"; dropdown.style.borderRadius = "15px"; // add corner accent - dropdown.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + dropdown.style.backgroundImage = `url(${cornerAccent})`; dropdown.style.backgroundSize = "auto"; dropdown.style.backgroundPosition = "top left" dropdown.style.backgroundRepeat = "no-repeat"; @@ -531,7 +532,8 @@ const Networking = (props) => { { workerUrl: multiplayerWorker, slowPollingRateMs: 5000, - fastPollingRateMs: 1500 + fastPollingRateMs: 1500, + participantLimit: props.networkingBlock[0].attributes.participantLimit.value, } ); setupP2PCF(p2pcf); @@ -580,7 +582,7 @@ const Networking = (props) => { // }) const mainContainer = document.getElementById("networking"); // set container background to accent image - mainContainer.style.backgroundImage = `url(${threeObjectPlugin + cornerAccent})`; + mainContainer.style.backgroundImage = `url(${cornerAccent})`; mainContainer.style.backgroundSize = "cover"; mainContainer.style.display = "block"; diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js index 0a3e828..ebf896f 100644 --- a/blocks/environment/components/Player.js +++ b/blocks/environment/components/Player.js @@ -19,8 +19,9 @@ import run from "../../../inc/avatars/running.fbx"; import jump from "../../../inc/avatars/Jump.fbx"; import fall from "../../../inc/avatars/falling.fbx"; import { getMixamoRig } from "../utils/rigMap"; -import Ecctrl, { EcctrlAnimation, useGame, useFollowCam } from "ecctrl"; +import Ecctrl, { EcctrlAnimation, useGame, useFollowCam, useJoystickControls } from "ecctrl"; // import {useGame} from './useGame' +import { Container, Root, Text } from '@react-three/uikit' function useGameWithLogging() { const gameStore = useGame(); @@ -192,7 +193,7 @@ function addResetButton(props) { }; button.style.position = 'fixed'; - button.style.bottom = '10px'; + button.style.bottom = '190px'; button.style.left = '10px'; button.style.zIndex = '1000'; button.style.padding = '10px'; @@ -250,6 +251,7 @@ export default function Player(props) { const action3Animation = useGame((state) => state.action3); const action4Animation = useGame((state) => state.action4); const resetAnimation = useGame((state) => state.reset); + const [open, setOpen] = useState(false) // useXR to get the controllers // const [ playerPosition, deathCount, levelIndex, death ] = useGame(state => [ state.playerPosition, state.deathCount, state.levelIndex, state.death ]) @@ -335,11 +337,11 @@ export default function Player(props) { addResetButton(props); }, []); - const idleFile = threeObjectPlugin + idle; - const walkingFile = threeObjectPlugin + walk; - const runningFile = threeObjectPlugin + run; - const jumpFile = threeObjectPlugin + jump; - const fallingFile = threeObjectPlugin + fall; + const idleFile = idle; + const walkingFile = walk; + const runningFile = run; + const jumpFile = jump; + const fallingFile = fall; // const [walkFile, setWalkFile] = useState(model.threeObjectPlugin + walk); const spawnPoint = props.spawnPoint? props.spawnPoint.map(Number) : [0,0,0]; // convert spawnPoint to numbers const { controllers } = useXR(); @@ -357,7 +359,7 @@ export default function Player(props) { } // Participant VRM. - const fallbackURL = threeObjectPlugin + defaultVRM; + const fallbackURL = defaultVRM; const defaultAvatarURL = props.defaultPlayerAvatar; let playerURL; if(defaultAvatarURL){ @@ -365,7 +367,7 @@ export default function Player(props) { } playerURL = userData.playerVRM ? userData.playerVRM : fallbackURL; if( playerURL.endsWith( '.png' ) ){ - playerURL = threeObjectPlugin + blankVRM; + playerURL = blankVRM; } // if the playerURL ends in .png @@ -489,8 +491,49 @@ export default function Player(props) { const updateRate = 1000 / 30; let lastNetworkUpdateTime = 0; let countHangtime = 0; - + let isMoving; + useEffect(() => { + isMoving = false; + }, []); + let isJumping = false; + const getJoystickValues = useJoystickControls( + (state) => state.getJoystickValues + ); + useFrame((state, delta) => { + const joystickValues = getJoystickValues(); + let forward = props.movement.current.forward; + let backward = props.movement.current.backward; + let left = props.movement.current.left; + let right = props.movement.current.right; + let shift = props.movement.current.shift; + let space = props.movement.current.space; + if(joystickValues){ + // if the joystick angle is between .6 and 2.2 set the forward movement to true + if(joystickValues.joystickAng > 0){ + if(joystickValues.joystickDis > 60){ + shift = true; + } + forward = true; + } + if(joystickValues.button1Pressed === true){ + space = true; + } + } + if (playerControllerRef.current) { + playerControllerRef.current.update(delta); + } + if (playerMixerRef.current) { + playerMixerRef.current.update(delta); + } + if (backward || forward || left || right) { + if(characterRef.current.userData.canJump){ + isMoving = true; + } + } else { + isMoving = false; + } + const now = state.clock.elapsedTime * 1000; if (isPresenting && !presentingState) { const newCamera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); @@ -510,18 +553,7 @@ export default function Player(props) { handleBlinking(delta); - let isMoving = false; - let isJumping = false; - - if (props.movement.current.backward && characterRef.current.userData.canJump) { - isMoving = true; - } else if (props.movement.current.forward && characterRef.current.userData.canJump) { - isMoving = true; - } else if (props.movement.current.left && characterRef.current.userData.canJump) { - isMoving = true; - } else if (props.movement.current.right && characterRef.current.userData.canJump) { - isMoving = true; - } + // if(avatarIsSprite && isMoving && frameName !== 'WalkForward'){ // console.log("forwardwalk", frameName); // setFrameName('WalkForward'); @@ -552,19 +584,22 @@ export default function Player(props) { // Perform head rotation if within the desired azimuthal range const angleThreshold = Math.PI / 2; // 60 degrees - if (azimuthalAngle < angleThreshold) { - if(avatarIsSprite && isMoving && frameName !== 'WalkForward'){ - setFrameName('WalkForward'); - } - - if( avatarIsSprite && !isMoving && frameName !== 'ForwardIdle' ){ - setFrameName('ForwardIdle'); + if ( azimuthalAngle < angleThreshold ) { + if( avatarIsSprite ){ + if( isMoving && frameName !== 'WalkForward' ){ + setFrameName('WalkForward'); + } + if( isMoving === false ){ + if( frameName !== 'ForwardIdle' ){ + setFrameName( 'ForwardIdle' ); + } + } } } else { if( avatarIsSprite && isMoving && frameName !== 'WalkBackward'){ setFrameName('WalkBackward'); } - if( avatarIsSprite && !isMoving && frameName !== 'BackwardIdle' ){ + if( avatarIsSprite && isMoving === false && frameName !== 'BackwardIdle' ){ setFrameName('BackwardIdle'); } } @@ -593,6 +628,56 @@ export default function Player(props) { idle.setEffectiveWeight(1); } if ( ! characterRef.current.userData.canJump ) { + if (window.p2pcf) { + const participantObject = scene.getObjectByName("playerOne"); + + var target = new Vector3(); + var worldPosition = participantObject.getWorldPosition( target ); + const position = [ + worldPosition.x, + worldPosition.y, + worldPosition.z + ]; + // console.log("sending position", participantObject, position); + + const rotation = [ + participantObject.parent.parent.rotation.x, + participantObject.parent.parent.rotation.y, + participantObject.parent.parent.rotation.z + ]; + // console.log("userData", userData); + const messageObject = { + [window.p2pcf.clientId]: { + position: position, + rotation: rotation, + profileImage: userData.profileImage, + playerVRM: userData.playerVRM, + vrm: userData.vrm, + inWorldName: window.userData.inWorldName ? window.userData.inWorldName : userData.inWorldName, + isMoving: "jumping" + } + }; + // console.log("userdata", userData); + clearTimeout(movementTimeoutRef.current); + movementTimeoutRef.current = setTimeout(() => { + // Send "isMoving: false" message here + const messageStopObject = { + [window.p2pcf.clientId]: { + isMoving: false + } + }; + const messageStop = JSON.stringify(messageStopObject); + isMoving = false; + window.p2pcf.broadcast(new TextEncoder().encode(messageStop)); + }, 100); + + const message = JSON.stringify(messageObject); + if (now - lastNetworkUpdateTime > updateRate) { + window.p2pcf.broadcast(new TextEncoder().encode(message)), window.p2pcf; + lastNetworkUpdateTime = now; + } + } + // start tracking hangtime countHangtime++; // if the current timescale of the jump animation is 0, set it to 1 @@ -607,43 +692,16 @@ export default function Player(props) { running.setEffectiveTimeScale(0); running.setEffectiveWeight(0); walking.setEffectiveTimeScale(0); - walking.setEffectiveWeight(0); - console.log("falling all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); + walking.setEffectiveWeight(0); + // console.log("falling all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); } } } - if(props.movement.current.space) { - if( characterRef.current.userData.canJump ) { - isJumping = true; - // reset hangtime - countHangtime = 0; - jump.setEffectiveTimeScale(1); - jump.setEffectiveWeight(1); - - // set all animations to timescale of 0 - idle.setEffectiveTimeScale(0); - walking.setEffectiveTimeScale(0); - running.setEffectiveTimeScale(0); - // falling.setEffectiveTimeScale(0); - idle.setEffectiveWeight(0); - walking.setEffectiveWeight(0); - running.setEffectiveWeight(0); - // falling.setEffectiveWeight(0); - - console.log("jump all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); - jump.setLoop(LoopOnce, 1); - jump.reset(); - jump.clampWhenFinished = true; - jump.play(); - } - } - - if ( isMoving && characterRef.current.userData.canJump ) { countHangtime = 0; - if(props.movement.current.shift) { + if(shift) { if (walking.isRunning()) { walking.crossFadeTo(running, 1.1); } else { @@ -691,11 +749,12 @@ export default function Player(props) { // console.log("sending position", participantObject, position); const rotation = [ - participantObject.parent.rotation.x, - participantObject.parent.rotation.y, - participantObject.parent.rotation.z + participantObject.parent.parent.rotation.x, + participantObject.parent.parent.rotation.y, + participantObject.parent.parent.rotation.z ]; // console.log("userData", userData); + const currentAction = ! characterRef.current.userData.canJump ? "jumping" : "walking"; const messageObject = { [window.p2pcf.clientId]: { position: position, @@ -704,10 +763,10 @@ export default function Player(props) { playerVRM: userData.playerVRM, vrm: userData.vrm, inWorldName: window.userData.inWorldName ? window.userData.inWorldName : userData.inWorldName, - isMoving: "walking" + isMoving: currentAction } }; - if(props.movement.current.shift) { + if( shift && characterRef.current.userData.canJump ){ messageObject[window.p2pcf.clientId].isMoving = "running"; } // console.log("userdata", userData); @@ -720,6 +779,7 @@ export default function Player(props) { } }; const messageStop = JSON.stringify(messageStopObject); + isMoving = false; window.p2pcf.broadcast(new TextEncoder().encode(messageStop)); }, 100); @@ -759,15 +819,33 @@ export default function Player(props) { } } } - } + if(space) { + if( characterRef.current.userData.canJump ) { + isJumping = true; + // reset hangtime + countHangtime = 0; + jump.setEffectiveTimeScale(1); + jump.setEffectiveWeight(1); + // set all animations to timescale of 0 + idle.setEffectiveTimeScale(0); + walking.setEffectiveTimeScale(0); + running.setEffectiveTimeScale(0); + // falling.setEffectiveTimeScale(0); + idle.setEffectiveWeight(0); + walking.setEffectiveWeight(0); + running.setEffectiveWeight(0); + // falling.setEffectiveWeight(0); - if (playerControllerRef.current) { - playerControllerRef.current.update(delta); - } - if (playerMixerRef.current) { - playerMixerRef.current.update(delta); + // console.log("jump all", "idle:" + idle.getEffectiveTimeScale() + idle.getEffectiveWeight(), "walking:" + walking.getEffectiveTimeScale() + walking.getEffectiveWeight(), "running:" + running.getEffectiveTimeScale() + running.getEffectiveWeight(), "jumping" + jump.getEffectiveTimeScale() + jump.getEffectiveWeight()); + jump.setLoop(LoopOnce, 1); + jump.reset(); + jump.clampWhenFinished = true; + jump.play(); + } + } } + }); const keyboardMap = [ @@ -786,6 +864,31 @@ export default function Player(props) { return ( <> + + + + + + + + Hello World + + + + + + + + Dashboard + + + Download + + + + + + {isModelLoaded && playerControllerRef.current && ( <> diff --git a/blocks/environment/components/TeleportTravel.js b/blocks/environment/components/TeleportTravel.js index 6347cc1..5d09855 100644 --- a/blocks/environment/components/TeleportTravel.js +++ b/blocks/environment/components/TeleportTravel.js @@ -123,15 +123,15 @@ function Menu() { }; // when the player is available, add the menu to the player - useEffect(() => { - console.log("hit the player ref", player) + // useEffect(() => { + // console.log("hit the player ref", player) // if (player && menuRef.current) { // //menuRef.current.visible = true; // player.add(menuRef.current); // menuRef.current.position.set(0, 2, -0.8); // } // console.log(window.localStream); - }, [player]); + // }, [player]); useFrame(() => { diff --git a/blocks/environment/components/ThreeObjectEdit.js b/blocks/environment/components/ThreeObjectEdit.js index 1845269..4a7be34 100644 --- a/blocks/environment/components/ThreeObjectEdit.js +++ b/blocks/environment/components/ThreeObjectEdit.js @@ -32,7 +32,7 @@ import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; import { GLTFAudioEmitterExtension } from "three-omi"; import { Icon, moveTo, rotateLeft, resizeCornerNE } from "@wordpress/icons"; // import { A11y } from "@react-three/a11y"; -import { Perf } from "r3f-perf"; +// import { Perf } from "r3f-perf"; // import EditControls from "./EditControls"; import { Resizable } from "re-resizable"; import defaultFont from "../../../inc/fonts/roboto.woff"; @@ -120,7 +120,7 @@ function TextObject(text) { scale={[text.scaleX, text.scaleY, text.scaleZ]} > @@ -363,7 +363,7 @@ function ImageObject(threeImage) { } function AudioObject(threeAudio) { - const texture2 = useLoader(TextureLoader, (threeObjectPlugin + audioIcon)); + const texture2 = useLoader(TextureLoader, (audioIcon)); const [threeAudioBlockAttributes, setThreeAudioBlockAttributes] = useState( wp.data @@ -544,7 +544,7 @@ function LightObject(threeLight) { LightComponent = null; } - const texture2 = useLoader(TextureLoader, (threeObjectPlugin + lightIcon)); + const texture2 = useLoader(TextureLoader, (lightIcon)); const [threeLightBlockAttributes, setThreeLightBlockAttributes] = useState( wp.data @@ -714,7 +714,7 @@ function VideoObject(threeVideo) { setScreenParent(foundScreen.parent); // Update screen's material with video texture const videoTexture = new VideoTexture(video); - videoTexture.encoding= sRGBEncoding; + videoTexture.colorSpace= sRGBEncoding; const material = new MeshBasicMaterial({ map: videoTexture, toneMapped: false }); foundScreen.material = material; } @@ -1395,7 +1395,7 @@ function PortalObject(model) { ]} > { setTimeout( () => set( props.url ), 2000 ); diff --git a/blocks/environment/components/core/front/ModelObject.js b/blocks/environment/components/core/front/ModelObject.js index 71d316a..be58c86 100644 --- a/blocks/environment/components/core/front/ModelObject.js +++ b/blocks/environment/components/core/front/ModelObject.js @@ -117,7 +117,7 @@ function loadMixamoAnimation(url, vrm, positionY, positionX, positionZ, scaleX, * @return {JSX.Element} The model object. */ export function ModelObject(model) { - const [idleFile, setIdleFile] = useState(model.threeObjectPlugin + idle); + const [idleFile, setIdleFile] = useState(idle); const [clicked, setClickEvent] = useState(); const [url, set] = useState(model.url); useEffect(() => { diff --git a/blocks/environment/components/core/front/NPCObject.js b/blocks/environment/components/core/front/NPCObject.js index 70217ff..9cbf0a7 100644 --- a/blocks/environment/components/core/front/NPCObject.js +++ b/blocks/environment/components/core/front/NPCObject.js @@ -135,7 +135,7 @@ function loadMixamoAnimation(url, vrm) { * @return {JSX.Element} The model object. */ export function NPCObject(model) { - const [idleFile, setIdleFile] = useState(model.threeObjectPlugin + idle); + const [idleFile, setIdleFile] = useState(idle); const [clicked, setClickEvent] = useState(); const [activeMessage, setActiveMessage] = useState([]); const headPositionY = useRef([]); @@ -364,7 +364,7 @@ export function NPCObject(model) { rotation={[model.rotationX, model.rotationY, model.rotationZ]} > new VRMLoaderPlugin(parser)); if( playerURL.endsWith( '.png' ) ){ - console.log("visitor url is", playerURL); - playerURL = threeObjectPlugin + blankVRM; + // console.log("visitor url is", playerURL); + playerURL = blankVRM; } loader.load(playerURL, gltf => { @@ -206,13 +208,13 @@ function Participant(participant) { // playerController.scene.rotation.y = 0; playerController.scene.scale.set(1, 1, 1); - // Animation files - const idleFile = threeObjectPlugin + idle; - const walkingFile = threeObjectPlugin + walk; - const runningFile = threeObjectPlugin + run; + const idleFile = idle; + const walkingFile = walk; + const runningFile = run; + const jumpFile = jump; // Load animations - let animationFiles = [idleFile, walkingFile, runningFile]; + let animationFiles = [idleFile, walkingFile, runningFile, jumpFile]; let animationsPromises = animationFiles.map(file => loadMixamoAnimation(file, playerController)); // Clone the model @@ -328,7 +330,7 @@ function Participant(participant) { state.participants); + const setParticipants = useParticipantsStore(state => state.setParticipants); + const addParticipant = useParticipantsStore(state => state.addParticipant); + const removeParticipant = useParticipantsStore(state => state.removeParticipant); useEffect(() => { if(window.p2pcf){ @@ -389,36 +396,57 @@ export function Participants(props) { } const finalData = new TextDecoder("utf-8").decode(data); const participantData = JSON.parse(finalData); - console.log("participantData received", participantData); const participantObject = theScene.scene.getObjectByName(peer.client_id); if (animationsRef.current[peer.client_id]) { const walkAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][1]); const idleAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][0]); const runAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][2]); + const jumpAction = animationMixerRef.current[peer.client_id].clipAction(animationsRef.current[peer.client_id][3]); // get their headbone and apply the rotation using the participantData[peer.client_id].headRotation if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "walking") { + jumpAction.stop(); walkAction.play(); runAction.stop(); idleAction.stop(); + } else if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "jumping") { + // if jumpaction is not playing stop all others and play it + if(!jumpAction.isRunning()){ + walkAction.stop(); + runAction.stop(); + idleAction.stop(); + jumpAction.setEffectiveTimeScale(1); + jumpAction.setEffectiveWeight(1); + jumpAction.setLoop(THREE.LoopOnce, 1); + jumpAction.clampWhenFinished = true; + // initialize on the last frame of the jump animation + jumpAction.time = jumpAction._clip.duration; + jumpAction.play(); + } } else if (participantData[peer.client_id].isMoving && participantData[peer.client_id].isMoving === "running") { walkAction.stop(); runAction.play(); idleAction.stop(); + jumpAction.stop(); } else { idleAction.play(); walkAction.stop(); runAction.stop(); + jumpAction.stop(); } } if (participantObject) { if(participantData[peer.client_id]?.position && participantData[peer.client_id]?.rotation){ - console.log("participants rot", participantData[peer.client_id], participantObject.parent); participantObject.parent.position.fromArray(participantData[peer.client_id].position); participantObject.parent.rotation.fromArray(participantData[peer.client_id].rotation); + // const targetPosition = new THREE.Vector3().fromArray(participantData[peer.client_id].position); + // participantObject.parent.position.lerp(targetPosition, 0.9); // Adjust the 0.1 factor as needed for smoothness + // const targetQuaternion = new THREE.Quaternion().setFromEuler(new THREE.Euler().fromArray(participantData[peer.client_id].rotation)); + // participantObject.parent.quaternion.slerp(targetQuaternion, 0.9); // Adjust the 0.1 factor for smoothness + } } if(textRefs.current[peer.client_id] && participantData[peer.client_id]?.inWorldName) { @@ -435,58 +463,42 @@ export function Participants(props) { const p2pcf = window.p2pcf; if (p2pcf) { p2pcf.on("peerclose", (peer) => { - // remove window.participants[peer.id] + // Directly delete from global participants delete window.participants[peer.id]; const participantObject = theScene.scene.getObjectByName(peer.client_id); - // remove the participantObject if (participantObject) { theScene.scene.remove(participantObject); - // remove array item animationMixerRef.current[peer.client_id], animationsRef.current[peer.client_id], mixers.current[peer.client_id]; + // Clean up related references delete animationMixerRef.current[peer.client_id]; delete animationsRef.current[peer.client_id]; delete mixers.current[peer.client_id]; } - // remove peer.client_id - setParticipant(prevParticipants => { - return prevParticipants.filter(item => item[0] !== peer.client_id); - }); + // Use Zustand's removeParticipant action + removeParticipant(peer.client_id); }); } - }, []); - + }, [removeParticipant, theScene.scene]); // Add removeParticipant and theScene.scene as dependencies + useEffect(() => { const p2pcf = window.p2pcf; - const participants = window.participants; if (p2pcf) { - - // listen for the peerconnect send that establishes the peer user data. p2pcf.on("msg", (peer, data) => { - if((peer.id in window.participants)){ - return; + if (!(peer.id in window.participants)) { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + // Initialize participant entry if not present + window.participants[peer.id] = ""; + + // Construct participant array + const newParticipant = [peer.client_id, participantData.playerVRM, participantData.inWorldName, participantData.profileImage]; + + // Use Zustand's addParticipant action + addParticipant(newParticipant); } - const finalData = new TextDecoder("utf-8").decode(data); - const participantData = JSON.parse(finalData); - - const thisParticipantName = {}; - window.participants[peer.id] = ""; - - setParticipant(prevParticipants => { - // Check if any sub-array has `peer.client_id` as its first element - const isParticipantExists = prevParticipants.some(participant => participant[0] === peer.client_id); - - if (!isParticipantExists) { - // If not found, add new participant - return [...prevParticipants, [peer.client_id, participantData.playerVRM, participantData.inWorldName, participantData.profileImage]]; - } else { - // If found, return the array as is - return prevParticipants; - } }); - }); - } - }, []); - + }, [addParticipant]); // Add addParticipant as a dependency + return ( <> {participants && participants.map((item, index) => ( diff --git a/blocks/environment/components/core/front/Portal.js b/blocks/environment/components/core/front/Portal.js index 68b062b..84dc8ba 100644 --- a/blocks/environment/components/core/front/Portal.js +++ b/blocks/environment/components/core/front/Portal.js @@ -118,7 +118,7 @@ export function Portal(model) { lockZ={false} // Lock the rotation on the z axis (default=false) > { setScreen(foundScreen); setScreenParent(foundScreen.parent); const videoTexture = new VideoTexture(video); - videoTexture.encoding = sRGBEncoding; + videoTexture.colorSpace = sRGBEncoding; // new mesh standard material with the map texture const material = new MeshStandardMaterial({ diff --git a/blocks/environment/components/core/front/utils/participantsStore.js b/blocks/environment/components/core/front/utils/participantsStore.js new file mode 100644 index 0000000..13ecb9d --- /dev/null +++ b/blocks/environment/components/core/front/utils/participantsStore.js @@ -0,0 +1,13 @@ +// participantsStore.js +import create from 'zustand' + +const useParticipantsStore = create((set) => ({ + participants: [], + setParticipants: (participants) => set({ participants }), + addParticipant: (participant) => set((state) => ({ participants: [...state.participants, participant] })), + removeParticipant: (clientId) => set((state) => ({ + participants: state.participants.filter((item) => item[0] !== clientId) + })), +})) + +export default useParticipantsStore; diff --git a/blocks/environment/components/p2pcf/p2pcf.js b/blocks/environment/components/p2pcf/p2pcf.js index 87e479c..270c310 100644 --- a/blocks/environment/components/p2pcf/p2pcf.js +++ b/blocks/environment/components/p2pcf/p2pcf.js @@ -243,6 +243,7 @@ export default class P2PCF extends EventEmitter { this.fastPollingDurationMs = options.fastPollingDurationMs || 10000; this.fastPollingRateMs = options.fastPollingRateMs || 750; this.slowPollingRateMs = options.slowPollingRateMs || 1500; + this.participantLimit = options.participantLimit || 8; this.wrtc = getBrowserRTC(); this.dtlsCert = null; @@ -295,6 +296,7 @@ export default class P2PCF extends EventEmitter { fastPollingDurationMs, fastPollingRateMs, slowPollingRateMs, + participantLimit, } = this; const now = Date.now(); @@ -428,7 +430,8 @@ export default class P2PCF extends EventEmitter { localDtlsFingerprintBase64, packages, remotePeerDatas, - remotePackages + remotePackages, + participantLimit ); const activeSessionIds = remotePeerDatas.map((p) => p[0]); @@ -466,7 +469,8 @@ export default class P2PCF extends EventEmitter { localDtlsFingerprintBase64, localPackages, remotePeerDatas, - remotePackages + remotePackages, + participantLimit ) { const localStartedAtTimestamp = this.startedAtTimestamp; @@ -588,7 +592,7 @@ export default class P2PCF extends EventEmitter { peer.client_id = remoteClientId; - this._wireUpCommonPeerEvents(peer); + this._wireUpCommonPeerEvents(peer, participantLimit); peers.set(peer.id, peer); @@ -668,7 +672,7 @@ export default class P2PCF extends EventEmitter { peer.id = remoteSessionId; peer.client_id = remoteClientId; - this._wireUpCommonPeerEvents(peer); + this._wireUpCommonPeerEvents(peer, participantLimit); peers.set(peer.id, peer); @@ -851,7 +855,7 @@ export default class P2PCF extends EventEmitter { this.reflexiveIps = reflexiveIps; this.dtlsFingerprint = dtlsFingerprint; - let guestDefaultAvatar = defaultAvatar === '' ? threeObjectPlugin + defaultVRM : defaultAvatar; + let guestDefaultAvatar = defaultAvatar === '' ? defaultVRM : defaultAvatar; this.playerVRM = userData.playerVRM ? userData.playerVRM : guestDefaultAvatar; this.networkSettingsInterval = setInterval(async () => { @@ -1332,12 +1336,13 @@ export default class P2PCF extends EventEmitter { // }); // } - _wireUpCommonPeerEvents(peer) { + _wireUpCommonPeerEvents(peer, participantLimit) { peer.on("connect", () => { - console.log(p2pcf.peers.size, "peers connected", p2pcf.peers); - let roomCount = p2pcf.peers.size + 1; - if(roomCount < 5) { - console.log("clean room entry", p2pcf); + // console.log(p2pcf.peers.size, "peers connected", p2pcf.peers); + let roomCount = p2pcf.peers.size; + var limit = parseInt(participantLimit); + if( roomCount < limit ) { + // console.log("clean room entry", p2pcf); this.emit("peerconnect", peer); // after connecting, send the player data to participant const playerData = { playerVRM: this.playerVRM, inWorldName: userData.inWorldName, profileImage: userData.profileImage}; @@ -1348,6 +1353,7 @@ export default class P2PCF extends EventEmitter { removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); this._updateConnectedSessions(); } else { + console.log("participants", "FULLLLLL"); if(! validlyInRoom ) { console.log("participants are", window.participants); console.log("room is full", this.roomId, p2pcf); diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 74f748c..0254dfa 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -1,5 +1,5 @@ const { Component, render } = wp.element; -import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; +import React from "react"; import EnvironmentFront from "./components/EnvironmentFront"; import Networking from "./components/Networking"; @@ -238,7 +238,7 @@ threeApp.forEach((threeApp) => { mode={ 'VR' } sessionInit={{ optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'layers'] }} > - Enter VR + Enter VR { ( networkingBlock.length > 0 ) && (

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 PyMFDCUyYjDsqudRk9H3q diff --git a/inc/avatars/Running.fbx.bak b/inc/avatars/Running.fbx.bak deleted file mode 100644 index ab4beb5c0ed6969bb725d3e94cc961b86db65334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340288 zcmdpzhpOVaO#jW;65q<0YRDlPNdnJoldOlR6W+2E+viL4{UJT^w>E)4V&Q*C^7K@s7>hBzhg@ZhEzC{SU~kkHVOXt5z5 z%k&gUM5u?G7BCEOM3hfW{tba5AEs+FVeS3dumMollT1T<0D>IKrna-=b4! zL|{Ou@KTe<_(?(j6TfI(6cZ2=;LfukOfYUm#g`ge0X(1VEyIbHpgIeyV1ChUws?7B zR?t%y6CmW? zE^KMvyls1j*6o|OZR+6QP){fnKS4*PiZ6wZl;odgrEv=h)tMO`KfbMJgs^_>9v&KJ zSfzEa_vY6vQA2bwx?p?P(2&Ru_F@ZrAKi#pU3ieLgMD-RFvCL89qfIE>q2!g5#jdY zAoJ+7?;H{tJs9f)#OfIJ3AXeIh>r0I7^w?3!PrrvdmW663w6p`JUawtArqD_hF1tM zX6=kYE1C*wX6%HegNcw%#*kG^g)|S85MVzM)zKJL*b6ZB9+)u)5nk3>vsQQ~54HgU z)WVcsAk974y9EEd!I4^z4%a$!{P1u4>#nKs@!wct8DVIIsfc7>%RoENc@qc6CM{ZI z(cYe?{Z}FY3`o|#L<>IJkM||)17kx%gPk3lw{6ipI52qd0KqCUQ!#Nn@1u)};n(TW z6@)DTKS7s)pR6slumi}Lh$Y$D#N$X1p@A4!aILV?^NZAu4v98wTtfJ*o3JKv50B9e z(TST@cR|1@B198o2w{+Lh>#)S=ED>f*1G%zN*aqV1tkJ}Zc+SBsd+KNu2L@|ii0tV zuwpbu`JtYbL?l9wYXraRU|x@q`Uw$*&|{49Lp?17{rm*uBW&Y^i60+f^9<|PA64u- zKTRM)wKfDYgcA1HiBLaOc9{s*))=lh|J0A)-Sr6y2-Ud-1jX>%T!E|Lh}b}WKTmkt zEjBC=QUr9`O_O6&YR`1PY$a68PUEC*sI>o2bdQxfLp<4GRq6cdlF`LV2OW z8sG5DyA$mrND<%WpJ=dBxhKyF?OLHdKk;=E#);qm4~Pwoapm_9q5@28!prdO_+7%_ z*dSe$y%&G*5y|iGhK$rT5QdYVU|8yiFNM&8R$=4q84;}W5jJtU@YpcphTB~j=}=DZI%~c!&fc zK9K?8{IPCSjA7ur8r~ARWq2aA^$;F}sjIMl=O-8xVZ|#vWUS=tPdQ;- zwUUTMkn9>89TO2|=$<#fv!sAz_BM_vXcwls;!IE{Bow;i84xv`H-JbRxog`9uf(Bu zt&GbHpSZ?GMe)353nLr{$gZjdmYY`Nno|ED*g8DKM@h6>n3!)VO1hqvV|3#Q9*r@UE4n zpm#(>OgG-YS!m~6_DAn@Hc_rZ-nzj$o|GV6w8;=PVKYFqC~Q1s5j_{j2kkIsSvwxV z{KET8G{QuDH4I9jMIg%>ik%=RGRxeDHa zh2FKm4S61gPkO}iL8HQj6G;4?SX5+$A&CG#vC0<~n}B1%=B}&oCO`49gyHp$hzT$p zY7HJ7t&1_Nf_n0snuw^DjA7*_zVH#2V1x%@%K79mk)(^*5LV}q#4BWEgz6lIlZ|{_ z=m?QR*uUU+jJsRZj~&9HOtu{E;!D_);2aip<2_CRwQXulA*@DyqXNRC`Firj6<0fk z?QmcOzd;rn8XgR)`Uty0`~<^6)HPci{w%B7x~3^l5-?hA5?j16fDvgdc1##_VJ|`2 zlisGrqsxDZ(#KSkr2i77uc;{4lt&2|ZL&vIgcAV#q+nbEMw{$W;D3o?vPYYUC=Eqv zq`|vK@fTDKqaw2=`bflRV~inu0xJoAS1m~A77^tU5*89;I0GcC*<>8hRXDT9PcS~& z&c_Jb*Q|IkA%h2p>!PE3|9EdrqgnGGgZ5Dp^uvD)+E+%s76^Ag{k=2SrnC!@XB1C<$UqVF$f4PVA7Y##V412sLcH-(( z7Z-t{AXdM4zr;M-Q*jI+uai+lA^s_jVFB7tlqFC`b|!`QGP6BtU@sj7VjPV zr4dZxuv2LSlQg_m7QqbF&1)zc2Qxbb(Mltj?8O}%0ch$WN)nhBj+{E_BEoe1Wyzpy zdv9v@58Y~tu_0AAV=7^fIV%;c+0^FQN#yY~<`GWeWaYt}DM^zJ-YlHI;WXgoY`a0i z*+Jfb4F3fW?||?jIz@Xdp0z}s3gRi+Sy`z(o}&GfS3igsF#5ms*SWU&{$`7(sJ{uy z<0VFEUsN*+&5K=76f9iN+ ze6keSCOa+-si@=Q|5Hds9nT;_!j(Y0>&fpw3uoSfwc$fTm07w*J!!qo1yt1OsQ(a9 zQJ44OfVLR!Y@1@?tdd7W#Bgm4oCh-;gOKN3KNAtM?a~M~@rx7>Gt9c~spBub@L#ry@fjMxe^V+pQurQ? zsfgE2M-ki$+D^fwDa2DGwN~aqmUh0uK zI__b9VUO+%9Wh$2FMMRpVZ3kw;RQcs+vEzTWITdG?Xz##<=zt(^ASc`%Lq?}Dd&^Q zxayFnv)EARp>Q@;$dk2I&+&%P_JmB$=5mJ%Wch1;rLLaY^Q1q z@d0}BUmObz2@Q#fGhFP+_EIK#U3|<6u{sKE_=z74;iRE)Vg4&ghC_w`{%pRvkA#KA zGloJTtT+WW5raWkd_6;QDqYx_5zcsL5q}1E4;F%M;&b;}zP&pUS6CAWQ_fTBLb3Q$ z>hMh;2fU!6b+!k|Y4wTt%p%YxWE3WTd<88(zT~@XsW3gGm>f^e;Ly+~ki&;ItcgN+ zqY9oid)2!SDvy_gFs%f6{KSV5XyQ+a1@h-~_}vB*!GxjhjBS=l2}@dO`n{PL2x?av z$IX82L|E|)7s(7KuMJnqjuPdBZe_b#!xDk}AT!=Z2*3y{fnK_hAwy#fPqTgXMY1XDgNip7GeC?Q zI3XWHSfhCIyAYcfAv#nhrx%rD9VI^5Kv_wb_sgSD$Y-m1b_)HRNUU>iD= z|0=J!Z<|CA%eOWzFI=gCT?}my|HbN9@#34ga7T%7_@z)@VNXxkpU^3dRS5G0UCSn| zc=oQ*aghPh(T25zpGQRa5aG{9=!W6JLwIK8X)#`>fQ|5_K*=_~6rVF|mCt_@Wu#8n z;_tzIf+eAE*nq+bk8wnBVcdi%=Z0R`1;DHQtOPn(-5HiKK1fXHfg1^K5hi>>TBwpB z%+$Ah4Q;LSV26td<4_uhHM!9=bTE?`8e;T1K(zm)@y<0E2I*o2#BWVK(#1Ca2qwv|W zAL!ze73%7P)x!Fc&E9;QrJ4;;_Z@ygp?H0cj?MaC-B^~_4T zmMPQ4xhm8(0mrj+yjtKdCH!E#?7Idlt7AnR&r)4ymFe;-GgO(b-B!{S=%k1*|2`qg zbh+brmX6oo%5-@lg}UxrN!L7QMdPKZrchTLj%Vq3HFQy=E8}#uvO1Q;@hsJqu1uHx zpE_l_wpvM7UwpFW2kVJ7hZOElXmLDC$Lp;!T^df|cKe2vbj?JH_;Q%3aD6`l$Fp?2 zYHAhfitnXxeQ$^3S*q)ZGF_QZhA88Ht(A0n(~8C`v$4YUS34Zf((!t(Ojpt;g>}4W zC0!F;m5tZ&2xWB)!SO5|uS$#}U0x>@t|#)~c$Vtgqf8e{Qn;R2Y9(D=Iw~43#Ynw7% z8MPFyzvkk2mW~&Vukik$j%z+CTu(H>@hsJKQ<<*JSEFo&g8%sZmz8uyxhvw!q1b3; zy87UFmX24UE{b&BYphV$8!PErr%czHt_pR{!0{{{ul8LPjhEMOg}Q3sc$VtAq)b=F zOoh4*TS?b2d`062>j|%I3U&3s@hly$yq?PHct)YFXI9d+OqnjtGljY);CPmfSBq|n z#tRjUQ?~x9h~rtR>#QjCy3j_2x=P}Bmg-7Zrpw{DLS0*}q^qyDqVc--P@yg@j%Vq3 zy;Y_wBhMIR>#rMD(lyg?+243S1ryh6HTDX1jll6N9j}_cis~3iDb!_$<5{Zfh%#N7 z0~P98Yb9OYeu~D+f1E;H?QlFx$LqN=T_sj2)OFEHx+eBiG+r4g3U!6xc$SV=rCy43 zc|B05D-VumsjfZBbfG+Bm94*)T1i)z-ipR6*Z?ds#?K0MeX)|RZOU|UD-`OQi{n{3UUWZ2<7Izbp{@ovo~62O zD${lEfkIt+E9p8kP&!`ti?tg52G#scdOT1m@ut0o?_El7_NmEZXd?MmnrDA88jMyx z@ueo~-bGLOH@e}J__M5;1{xdT5BLnl_@~D2tO`FbWi)5?C5E%yVSUkR0M zjVjCXPygeOo`i*4_#be2{5%ytm^7pwe=@OXJ}O$@sj{f5uy=an>*E;+b6wbklA zD2fE{twA^oF_YjOiz7h`ZpM+|+o zm*=nmC}B?c{w7+eh3_q1>)PP#1bmvG@fRCq;AU2n~&oVyP3zBmJDRE76`LZ;R6E`SFMR9cRA1da$JYZbgTjAz-|U7l~K znYC`s#xwDB8x{bN(*|%py6_G>xPKYKsS^` z0=ErLN%UDGf%^iE1QArB=P*>v0d?$zQ(A4Wbs|mxDlJFvIU(6f=*@4R$8+*+2Lut}I09m;9-mEU-r090B|;1fc!RS48DDT|VdkNMaNF}?cjW?#D0M#f<$p4G(F zffD9i`Sl=Ls3mak2r)Gfh=0BW$27^WF@e?iW<~iO{IxpP-hee1V13qf^E@Rvle9ZrS0LMJ5+q~e8f4n*7aYoHsUw#VY_TUVlQ5EH- zBc(E}PPq;z0F{3sW%k=Y98w?!&+F!Ev+ChU46( zjkJttq1H&BV#K^)q*ho4UX>@=;4h|DT!b^H9SmF$8Fb%1btyXF$Hx$PRC}maiF)~ev-|AAY;8N}&nwzrQkab`UJZ49 za@7Tr=a}!pxq-u+8>2f!3$-2^GfGSj9)kM7?$B(!F{;WpBRs_4Ut4FwM^Uk2RL~FA zm-wgzPEGb+;-f!sB#5Aja_5m^4nW50lqcc@pb|!rU*D>{gz<@xY!%AmnF$MBXN6wx zkVQE;_QuyOaCM-BIS~vXTBt>Ez!)(rAlMpG* zF3#B7?9U|p^&c&M1QAs6mx_b@&-g2jy8ty8bCXq+= zTGqK?(LdTn{+q&V9(cON(faKvrbwM{HXfNzQ?l1q^1Lht&otr;(LycaTYeT31L7U9 z4%k!KhY`2u-PpSNP<3#bp@OQdMD474VM5(AEYoY}j*e5_`cX_!VnU77 z?@#d$ud@I$KJmx7O2k-RT^UX|IN%rbY-Em@I=mG#BvC@oq zu@U(wvC>W)2@0XsO6@udHNMC)4Y!ugV1DOVCU$-W+n&YVP;YSt(5T8vKI6q+fK01f zX(LVmDlNBCQ9S%0*)l8PBE~aYPIh&ip)ZlORf>-!@~F1b&XQyQt@I>=V)FlfPe0E- zm}08bA6?R?*c%on&pF$Ua|4Gtcf4*AE!0}cWwMyvgq0Adz)CGOGT)IJF+mIrT>tBVV48^?Jo_sOtkg=*N-2auz*J(T zl&PeN#McrlxlR$^go3NJ(jheQ!Ko!5C}!P0$It1H8gk67ncsAuYM1Ax;|!otm6e_m zGOcc<4tTIYrR7#yk0Zj!TFFY{4WezctQ0R_Wd7YdSO8F*lk=jOPiUc*^AR&e5hgg- zJT=d`;fD3H2QnK7flwU@=LK+fav&s}H<~Vf4AoG}c@x(vFCMh1#KM_Z4dbWZ!f!O@ zvynIhXjH}dMM7pL+$pPlL7~YB8;qMoNvgJlCM;myol-S^-qOpNB$~t zg}OfZ*3Y{~{YB(ay~*fav&?0_gcMWpVG6ZlWsfvQmue^>MG})1mt1#s^T4^$oN41rT9eCSg`ccnR=Bd}J@USwYQaF}ze^cT@Wt(9KS7b!AfrKBqgtR#CNGX;ATx&W9;tTY8@C!8exdPS>M zi>>58vU|01!%`_`EdOjjuOj0RTx(&aV+I)NY%?OR9X(YA0B>?Y!%S)u$HKmwaw5RBJ!x-X8e4{xv1etCNphh=g7=qY0O~SP(st& zjCVLUaG29eHL(Yvg<3C7TP9Lu!b_+{xUJB@$E=rR4`q%J3V~CJm#X6Qq6p)o#7o*G z;s;Q1wO)eo#zUFM0c)?ddVPqRiZg&lRbF~R$h5kb+AS4(04go_(pnr5M%GGR63>2R zJCw1-WrjSey_B~1=A1lHO;edi?d`raf4swqDHm)gq3J^z3g-r=>quNW(36B3%bL{EN=vOy# z*w-}3iK+O&P(st&rCB&PaG29eM~D_`y_B*>thfm;Y5FShlI+2Z_bM?m^Z^Kvc*z^5 z7n>R%C0@FLBS9rB_R{$QT~8NqK1wmw%MJ5&QQ{6*b^d*s zgBfrBb`!FPGVRuifuIL~kOcD;>v1+>Cc&J;k)RkBV~&%>GoRCg`Cl>5qw=j2-vW)Q zFdvMAfK01neuz+MIp+3w_(8H|m>aIeT>r*04oB-1FWj2HD8v75*|t^5P1GbJkLpcE z`CeV#Cr3D^GMx+cnKh<-v=j5^AwvmS0wCkdG@Kha%;}_8L<_Y}^4ctBwZX{=CpjGa zv6EyEWF}#ULJxpaiIe`^WbAVGXA&nB+9-Ym^|qFiG|c8gZgpbwE@Qjn44_e!ladLU zR(DcfJXoO8awiSL5n*I4a}q9KJTv}l`^eu48ov<}f1b#r+DXlh&zfw1r%5Uky1mKT zw%3yQ6Upy73MHhn(<6Ca5c3Tj=5&%H(L$}0mTeOgn{ZNzb3b;H>|xA#LLby$;v@&0 zT+(;`g~Um|Tf~o{-qv%{-m!0!y@t~v*(DRgr=S3jdPoJ z(gdP~S|?4|Db~k?lQQr8*h#VnG3B?5aiIrLe~FXIAP5>$`chbLvWGgvo^q7r}U90dv zBFL(zsVD7l{Q;7k8;qeu3$>X4nk;Gn%!#j1X1v9i+w;w24r07Q!iUGn9>sho1VVKr zoCo6UKx7h8dY)Lc$ZYB)j1!B z6M#y~IscQ8Y#HZX{N-HF=wcjmz18cs9qZX6rqsq%efhd~DR*3EsG#aCMuj+c7ruln zlaQ~S@9yZiX-t9Jh7y`SikXaao3_$kqJ>&3mER`AhFWUy<#KsQDUWwI1&^>t(71NtjXe;bsZ19`*!6JRc?>?8E8~xrBOHt$h5kZ z&JZdsw^DOF{21N9%Myif8`jf1EINpj}1JPWZ0W_+D{4F8V>X0)j;y8dxs1tuWpe+B1iu=y*z!70&Era}ULjKHhol7C+ z3x9k6I@xdURUDTY@~GZkl;|_F?*5bK(wHp~H81!FZcbyI2GOB&zjrsm5kD+l@JFV7 z6i2jB>!YijSRe3FOYtS#C-2^E?4t_&`%)j7xGPb?G%*55hr&xNG@Qd}h?&Gfi8vAz zK&^$UzYp#C^Dp^1IC{}ALj^OPsE4lL44_e!g<9i1Xpq?n_sMD}yr$sFKpoaVo&*)$Vx@UqHld=iCo10^{jUrV%53;BwZVpbcRycM2f$diiW|5sa) ze_sl@soRG&KQ4vUpyV1NDJ!p+K4%-(`$hL>)5)hVm6o z&Dp=QCs-!^cjt>$1HD+LMaPVYpaqXj?+~rRxq-u+PC8GtQ0pXz^J2G5I7#FAV<*X8 z7zsKn#)Te0{UuI1`70h%VkU9Ya~uikt=37Jx#NT{9VL7# z&WZU!qbesQ;UFN>>P~t;%o=YVrrAm4QSGGqUusQz z(d;*hnZNq;(D<}LEc4{>r_{fy|3wi18DBodxq-u+PAZQb04>xyX-tNg)r6DcLx1cf z+3O-Z34K7R#7QM^a%0EEXA&p1`b~Tj>aEsEN8F3#Z8Ys9%NTxWzhFPbe7JReLbThT zY#h!28dW*zCLz=6PHKEX90yQoxsw*)h%mBNa*}v&Hsd!XHJ^w)s-0BEuVO}1-ARfm zd1vJK$00pfCNm-M)d;sgO*^RtMhtwC(@6nD3$;!PxGdJkgp)M0f9xdL%Oal$eNcai zlRjM%lar4UCyl!(ehl?i>!e8GTU|ZgQR2N}t29Q;VE(_pt-V$n9m5$wqbeuW#(e>q zR(H}!oB&i>?xZ_}WUDwy!+eUpx1!`mKb2H#PFHMyfe{4E#}*=iCIlx9>3iz z=BDo)c8Aah#gSmH#mS8w7oSNm*Ig0c1b)8PY{wV!~73n>sux-$6S5F|3h9!{zoc*j~kW}Gyfh{AD0;_sCt9Z z%Wv#c!_D7ftFK!cSGA=J!;UnR(DVi)2(PaoXR9;EO)#5ZAuEWVzyw`>84Ky?8Lc& z!<@Tbe-JIyI*Gb1j(`a#IXwTdlVlHKqHcI0I-@<)mkX zOshMo10F0;X}OcuYB8;q6IFDxxXGKaH?-~~W7m-Kx79-{I zzLWnnZ0*cU)rYV8eqHOtY@cZ;A!THTc-8{ z*~6IEgg^j5VkK{!o#?*w7s4YSi62A3Ewoa+@h~Q^g`Y#itwGdLoB=edvQm}DQkhn_ zQaDZkDlNCtHA1qLtd!%XVeN34p@OQdRH5{?X+!3Fr}DoL?z?Nq?9NV1L?c59S(2cv z*D*M^X)CQKTBx;Bf#+gU6ISAeD6o?3aZLLsVqoY303fl_%4bs;zXqMW47X z1MHodTd}45w#EfGF%NG03Ts2tR$_5(;4tS_=`W&%S}VPNDOTKsl^muiu#)V7%oOZV z=mKCWvC{hoN{kG{2d^`>U z%vc@si-bzcF>i+l2P9jDIUeG8rln!BGyZs&9Q>@;F<1Z)mXpEtL<_YHq7PzH6AYrq zKV(pL@4xLkF)VZd2$C>(?R{20Z_u64A#T!Knt}D*8MCdHo>5S%^2|lfax6y+1=(8LLSsc!eGiL zNvE@3NEmeeD83K)sNJE!(c_sKhOegY;J=<}I4?SYnvOGoMpcwQBV<~g@(y^gK&9oB zug4K#WUWGZJhL*sZu-=E#+y{dXVsN_at8|lhI3M06w?VU)KVV#Rm=^P6TigpuYoDA z&Ns`s+idzCRqF|TP#g*7`Ehcx`x49>ei1*0VyMMjJgwrI?cX2v{c!l^%x~wZ2%G^l zs=_>jkZERVkY#_n^gCI2qi=fa$OXDFfR{pR`@G4M%FC-ov)sCCkjf5rNkaMBv|V<*Y( zIKLwFLH#98^1{i@Iw|HK>o|!#0@X0i%l%ew-?@Z6j5B~nRZgn(O)AssP71{dK&9nQ zx%~+2$2UF;0>0O~Js(y~18aaPX_PbAx&aI7SZ8V|`(5T8u!8i!Ww7QcH5GpNqQZ+pMAlWKT(%_rDWxK7;1R{@WCza0J z*1TU>KmJa;?QF&$Efti)#C^Ukl+d)3QgChnE$24r1<^vSlU~@0IZQZ-8~jI5QMR9QGJnkSEf(?#pC0DvSX=9h>TYB6tKP>OjQj2b@o zk5*&MEA#Ig4`RGSh767Ii}cV9(d6-r2-b!A6y!hm2nh@9#=i>AC&mQzP#6i~rwYKw z0Jk`oApQbJfKfK00+{*X{<3xyl@KuSwFH&&@xxzYuv;Z!A9PgDU;8k^cv6?fcgCS^0F1 z6Z7=?+05TQ|LY{>C)=xMI5&Wn(?u09{m??Ki%Jz1Bf!R@6;=UP&{*uEiv0V8i%fWE z3!x17lz3=MArPLe*Zfn7hnm@mjiAzMJyfE1yM3oemgHcED;}O`VsHk~sLDfE37J;+ zP(3_Ypwe;=CE|!MvX*%WO2`CvxZ6FUnVW*m#91r=D98!;7ovq)zrg>h(nYgL80?^2}vWP4Q{qYa?tG?5F@Lam9MN{TsPD*^R^twi3jwt_C7 zs{8|CBHsud9T2UP^U)N!t?r{9c(6bv)Jgr#Ko8@HR`yYNtN4RxT_fW_ON*QB)q5-eD98zUEet2LPz!mD zGGYW1kl(9e7V<$I!}&8WIS(lg66&Bd637ph2JzW?PD1WdN^AtBP`j~!6imbR^Z09i zAB@KqlW+#ms0#8&giNbL-UbgAsI(mNRX8Gytd%wvHg+?s2hHKXO9Ufsa()8~019$K zUJ%0xE!09jxV#tvASZT*G7yGbx;rG?*4gAi^HM?@)I~!0KjlEVbPyz~ar?4jBdCK~ z!Z#WI2Oxik4xB4qe8L|z>u?6psEY8DgiNawUI7mlsI;8$cpMQ%)-uBJK{LvE(EO0d zqk4A;C}D~>|Gn6j@BBe?)P-jOm&_eBSHoxnXgN*fNwiRFBDYFX6Sc%@@$L{e2%D$^ z|Gsf|NHCF!W9B~yVNiI9h5o1rJ%hm!=MoDARj`hQ4hD|D;T$J-%)A9>0FA0FWQY3# zJX+mC{cr+MX}N`t5t1#l5R{NHe62d$F*AISbN(+D02Jipy9wqJTBzlFW>ql)Y$S-2 zLJs3G-_nyp0^g<%nNta6P!u7~zoFuGIE?mCYS8(>OOcB&UZ) z5G~YtDBND^AxBI#-bQ4eGI`T-Ge^v})x@A6ABr!rkuA<_)<&~%Bq)N~T`j|DbJ-*2 z44eTpsS9+xW+&V!tNoH~5>5arEw|ANLb6qCq+!S-=6JHaS+DEj`U5068TTVv zsAb%{mY4&!69nU4C-8Qn3a?GNAH*|m>VWwvAr2}dVf<-L=v`K~4NoMSiijFgc+@fu zDVSF4_VJgCJ{Z4ExDRIljj9+gi~I6FV|)ls04gnK`~o4_DvZZ71l;1d5frQ$ZpN?m?D(f15kUc=J~0uIK0<@8z9C^cAL0C~;fc`H<8+YS zG{8xCL-}M^PuksTcu`|_U1Ot0>O7LXe-=_|d^^{NIS+ zxLk9YXb2t7-&GgaQy1mFm9JWI9We|9OBG{j3h-@&9*360ZzSWnFxxWjSU+Lz^=;}w zVg7k+7sDx*HGdb45CV0MyLeWZXMS2xS72w!$leo$Ir>ofjxc{3eYc&kR!e%jZlN%5 zJ7Vw~VSev*15csf)5BkF5#|oBl5GXizYmY`7v}NL9aDsP{gAKa^YinJCuz~beDvUn z7lgU}I#42CZD=0D0imUa1ej!z#>N-@lU+9A65F}scDC@7PHgYt zz1X{Nx3ay`_p)@|M0Q~9qiOyd+?|D(BM2!a4MO-6?YtCiOiYwpXuy!@5U7IC`GPex znuEkr!W95vDuI_`0%8KhJ_t()Qwecqc+6KcUs2&nCJ_a47spY&b%R|aV#8x3>0wZ^ z#WOy=*g#YYnYG?F5*3=|^==(53dK({)@@=?5N#H8SRB$Hah%c9498SMDSEOT3%mvq4dpmSjikYH702g@&MDw{!@_A)^6|}7zoRzj zQU02!cbWQ#-dzmMDZ89<_|}W^S`|a-b-Sno0mrB%soC1!|4Qs94xVM6Ky}r8kSgYFF+W$1s-q5tt4y{;1 z`}V|FbY`%vHsn=Jt=rQ^+US&e+B_lkwUckw)uuGAtv&joyf$yeyxL|_H_?WJ7g1W? zmuOpXRjm;73?T(rGS6{w%nQ)3j^oZm6v(Zf;|491ahx>aC&Lbp?EdiuLY7I6-w_Sv zIL>g$#T@r*F72EGj_>xV=d3Hdj{WLUkSlfn3wzgVb=qCWTGW%*lc}=~Lr_%dwdfkN z0QI>Mg5F)5in@K;flBoBMkU+dq*HE@xS@aw zIKD&g;`|%ia!0N>qVE?gXlIpdsjWY#fVRs77PX({gcgs@hd#8dga#b0hXN-%q)v@( z!-WQI<~Gc}!FfFM;Cu&kMK@P=L=_(PrHV{#&z<(!%n3335K@38^Bk`xmQu&@??e>H zt)Anfh!M|0+!5kJcL+E9mi{kD3Dt{#}nEs<5+Xd%zj0^ zwo>#=a@>_@D93UAcG6(EisQXR=M-?fT0enZzGovU{Gx_-?XqBPg~S=!vaa*A?J_57 ztG21F-TGk}ni^7@Dsr+l7g6OUck{fv-g)o@{n*!=^tZ3D`aYG8>YKA$^zpA|=zqD> zS%2!rdrpY?jF18>ndi6}<^||i$MH}i3glMLvAeS}j_oU%Ss%Y9WSQi+bO$M;avWz8 zZE_XIW1XY}pn&5MyWgRK6<488Cu*lTfBwvkTv|>)zS~tU$ZrC7x~h)-JGBg3dHg-L z$;;7P0sBgv{kkt{4@)Ic-eX##KX-p&8_lVvzhYNOf3VXjZshzfR8!ldNQk+ckOC~3 z=lBz`lsb+bFm>Pt$gQ5^l1LfHnPtpye2|c3lH*%MLphEQxkyW$t2lP0q@7d1@v{qg z(4M^2Q1SR@l=j?m>g(QDE=9l9NIOB7b9wE%$feQlJ}#%1Z*V#Eu^3f%PakT;`ze&` zLw9O>LP6@8E-y8#LTPHC&pc{>r5n_fj}NI?dmd6k%s4^{uw+ zH)v%XbMMXUSB%GI5JPD+COKYDG?e2wUMnqiuHv{b9&Q*Z1sr!MQ!MTKp}J_(rYR`o z{R;GJ&;987MHcnRzY96vpN^_}QfT_w#T44#gFW!xnY;KYnX6U&2{-<}t$xMfLi!QM zis?u7DyZK#;sv)B?d8&!`*1=`Eg=P1GSBfeVkvbTb3_!#t)Anx9hGtHmDkMrxRa|C zJ(C;{CmPCe+?kOE%T*j-COW5p<3?+~y7YYGK*biZrw+E*;nMQ;Rp(#w-gTi{zj5gm zQM5zrkJZ@rc~-KayVKbPdy?7ETFclz38UCgWhb+pPp@JN9=XB}TwjRuw`19d9h$KI zt$fmin0C1GU@2h9JjdOMrPOgeornUt)pH!uSsBOv*UYSsi@QnDGs$sFqM;neB|1ri zHYjs zv1-xi_RMiezjhe;~6%VS=E zesvss5m6wwdXAfSRmO1%tr?E56S7Ql{FP`Z$MNs(xtQaiF4E2^;P_PJq15x=8leN< zr=uB%)}Xty51|4~I!f5M8#yP=LM8keWHWp%RVCSt{dTGYXB)nY8+79_*E+yf@4VMe z@8exm-{47p{lWUrxTiCBa}ScdI3eazLJF{Cp5wd3QtCLafT;sFKyLLMfALhtv8IO^ zj#m@1OmcjTXeh_=8V_lybJhB|5gu+RpaPEf9Bk%N)#j$lxxy!1%5~W3T>WCJv~F)I zyM*>{>~ciEE-lq-1gr0Vf;~C+8QUo265D!qDtqPOYWA*f2Rm-eIhK26!^JkN%XP2+ zksVld7Q4iwA}hoUAfy0G<~iO>ETxX)dqfn-t)64Omoknsmzm*sNH-~ZCOMu(G?e3b zXm@F_T*dJ_qH_v3?wS(Ief00ooqXAV>wmr>*Jpb^?(U1J>_vJ7TYlI!)}_HUwsa=q zjuair6}{rf4bqk4Y&G`W@GD)pt&gj48~^^9ecWv}JIkvIr=K&FTX!;w6Jj>Nl?O`! zOXfL_AeK_c@fIQq+ zJ$fqR*kQUEjz1ByOmbY=SIVdy$DfHdxr*aSe$oL@z_IO?#c4Iq_elGlKE)+75gaUxStu0Swfac zjvo>Y7Uf&c9VL_;}_r}veXI#+RA8V@%V zPyxq2X-ix-Hu}hoSkhNNZSWlZ!u?0|e{{L1|D!^hK49MxecsEx^mQE`a|zShQzge< zM1#D8wI!T)Y8QY0L!0m8-`Z>I^U&|yK5CoRx~dKTwoH4aZGCM&KBhY%MH$D5#8T=w zK21b{-0IiITL&uRIKHD9j=T4lqGyuhXriGU$6f=Z!EzPHw}{Ru;JEmzZrrUPFRn|a zK53n+)S_PRxkP=xV~2{?TS1j@TTKP8y+F;He~2og*-6=byic7UeK>7dnf>gCzE#+? z<*U<5j~~nyys?0tac&>``>fsUrQ|DYF+OHVTzRk*uw;IH+>2OB9mh#T6v(Zf;}HSM zIF5`QXZm~eL6NM zuO@2p%#&(ZORJ3B&?)q#Z+)#0^9CUWSTfIXb<7LUua4v1L=?!ap5u1G$~ev#Ylh>y zge*CZ?J3tQE;fNuM&&rZN3_XR91jnY4uArVllFRW&+4?}-j>SCb-cWSEfah^ZLWT~ zi|x_YX;as`vHLr1VH=G7%3keUlbh_*h->cBn47*bAGa-RI=g({k+fOeb~wMEW!V>{m8lXPOgYt|g=ZOXfL#LM)|@V|z>;xB+sj=Qz(0WgPoYHN){{LY5rI-2I{Z zoX-&rN!3WqKxDCU1m6rz-ACbnfSijZ+4$u<`WI&IF1}D zEp@Kq_$$#l1stF5QkI^rxvPCT_p0{iYUi{Ky0Y4mjgM)!OwQ2GD*i?Lx?4H=e&?oi z>FX}^FFU%>O;``Q$={yzqZPjNzT5ri%x{5o#bP>obwF?W;n}Wq<8f{23_fOaTzM!O zuwyPVO42jW4{?UTVTPsBSg^&U)ndg|o zya4^`I37(zf!yjj?h~PmW6eo39DgTd$#LxO`sAuhtuQI0avW>IrEPK*$FqpeDd4zX z^kw~l))mujJ<6vKJykk=%&*1MgJTM%-#uiLet7#A{iUOC^rvq<*H`RvO26*bX8j+- z7V6W{HvP8fqxw!aPwJP(Ue^!Uc2b||zh0kGX0pEf!%_N1d`vwd1z0lAaRJPWWgH_S z3glMLag8Wt9A~^T!|^FXmK?{zZCErfh=y_;pN`DM9Q%xrc1{7u!Lu_DoEuf3&91G! zZCdUsb@1M?od=KXcQ{ytYUWsa=fs0Wep!0p(Z_`cm!EEY&^@Hj!Pkkw2fCEIeP9gY z+GLEn)h2qy>Vx<9y*zkpZKH$RE*;&wyi$RKwW@qPFoTc+EScx{0IN=9k>B< ztLOMxj53bnznI}Tk&tDQ*LCJxS@awIDWb3LF=cq!@>K@E48`a zXP{$j{yA+5-CBPj<>9(E)tB2jhD~G~Kb{%Ty5^Jh2Y*j(+vdse%>Di`bq)@C(Dq>E z3hfVcf2ldp>iMk$Cytb8b7@= z8OQ#%<4vDG?iDLV&m_lViH33<_Z}$?ma8~^NOVpC$3tfAOJ5hgB;9}4!t~T?tI{VH z-<*D9@y_%*CHJHk=&&{YuRH6~PyD(vJ+SHG^o&Yt(pPvKP2XJi*L3RJwRFFpx6)@< zxt?DB%5UjG*G{K5czP;~62N6rD<9G=X1#+wBIBtwGjvX4C z;kf!}DSC1o-)k57Z;C6?P>y5!IBBq4#qoBca|$?iY}87>$$g=|!TkC9mvy%22cFxn zZ_s?Fe#)YU`VGlj^>y}C)2EdfuYW#&n!fkQW^DYgyV;6CsobUdE%crT2I?LB`|7U_ zZK;o%UPr$UIqB=$^wfWE*h+t&kOC~3=eQo`1?X4Du|E+7a;xW9`?E5RlO4@){DhDt z$1yruzdcoWtdvnXj-L{3auvtXKS>8b0mpmFe&oKSuH|+{Pvu`gH2!$H3yqmTaLuI~Eh%|_@Sd4}p6{xn&CZ(yQ6ebp-cAKO>yT>}^E zyY8N*w~6%AU*ltLC8PjL<~e>%ETxX)`j|R!1LRiEv0c0}j+1CJ9Pc7z$#Jal$b6b| znP@1-aq>86sdE*_9mY#Lr-0*u$J*%k-kYoU9gwOYy=|%f@2QjYwmrM)OQ)39|21*E zzSXaT^sl}()c4=|gj;XBfeWZ>Lw(6V5dBe~ zMn8^^If9S^EScx{AhDD>jx&iUkXt>+S0^ar*ngNAjz?iLh@s@KgK!h-o?(|04dpn_ zAleA`Nf)N9`*=f^g5vw)hqxQ?84L_@e{A?z*wruN_K|fqv6%T zqo|gviG^Tb%+zx6qZ{a|iN(yAPghpUq%CG@d5e%G=SxlH zCmGatqM=+Z|ClNTBNeYivevP1&;0+7|0`k0G->B_xN`(^&_&^YCH(ndgg*ZkN`L9s zkKBz<(cDPyR-Egy%G~EQjXB-wbKIORMfE)g*z4D<(dfUooy>h7ahe^<-ln>@O`*!L zt0=cQGpRW}?z4rw{^E{@&(ufvnx}us$6QHB0hY{j{E%2m9miELb>IfbZI)vg6yruE z+p}*om2q5RpBawV6SCwu=H}T4Q>TcAavX1%AuV;T;@QTo*qs7R#))V_Cx(6o`YP@j%<(BBJwLMP5cZDxsY^xQ;gSrB-`H*H4?WB|z)> zHAwruc%U{g+Fd)7X{+tBteN)XK^JXO&;V`Zp$KhM>51BX0UNd5`fS!tYBWikHY`m0 zpif8bKacWgWBlHu>3qy4xbk2rV97kk(Zo{fINm`-f!yjjPDoP5amJr!IBq#dik=+D z=!)NIsu$5vj^kE|(qOrYW0vTg0*)JP9jqVIgVyi9*igS>Wi5SIR90WHNq&7)!#w(1 z37OpC4^Oy@%uVjy&nLK*HBWF`>Yw1k|31$7Y&^~#i#yJZ+IF1V{Pj3@dhZ!-+Nv)4 z*yP^&vV6=BgcM-OJjWd{FF?OKj$?=@kXt>+e)E-a?Df_R$6pCqavb|tO!T9w&y_MN z$MHWzn_R{5w0Y72P{1);$X4ID$O+E%)H3ez;skC}r=eWjk>=dsM0@VCE-#mm@`Sx~ zY9Cv1sxuq)rXhQ@eIs_(qe3io>_XZ)-?X&UKdz@e{AA0XcXej3ufEQ03ahF=z{gA_ zqyS6iIkv&PSjMpv5e0Iq=eX)3WgI(vGsE#QLY5rI_9X+Ju}_GGavUFDAT4#S;<)=l zY3CGhTx!-5{q!}9^~LHf)^EJ9NdMQ$MS80EB7L2ji}bI97wP@xEz)GTBs+u?Kc1L`E{3;#J+|Dy3yearc~_2v1PQwS-*l6j8L z5lg9CAKPN;zzvXFJ;#riDC4+9op{sVnV3b$lH>T^gEp0@T|`4Uj%P2HmO58)TpkZM z6i@-jo7c~ypVwVPA6__@{xE(veWynP-SNn5+P}{X`nQc!>Ezqf>Gtzy(|H``&=JMv z(F4jZrPn1cr!^~=(RAEA`l4n&y>$LU+Tr;^diA>my4J(l^cFs*Cm{t`GSBgRVkvbT z|4KxG-0C^rxm+2?Ne*T>_E{=LPmW`>V`Y!DQA9&Ij(wL&gXJoY?-HF;!13HiVd!J~ zK4^wRSM-NtR}?wd71i43gl>e+v8$AE z9NEDP$CXz|(UaqNO*b^3qKJla99LN>4VJ4o-b{2(0msLV`JxYzQ79A*M`zddLQ~oW zpvPx}QQnF^=;r>8XvR5jwEFW9pMEj^iEc zq@~VP96PR;c1{7uZ$J0vdR^$pT~6`iW~O*?-u1k=d8@i}Q&Pd9sbYR)0MkWl;)mp?!-CF?ap;<+>=}AK7cFrra$+Xj~PZt0hY{j zyq8!?9mg+;D3Dt{$LBXG<2X6a49C&f3}Pq~-~G9$S;a0U8p?4Tvr$^=T*dKsqH_v3 zz7U*-Us&@cRZ{e~u>%VBd+Mnodo7LUbD*#$2Qxf z=*e;%R%UccJ))r;$F|$0!EzPHiA3iVa6GfK4Hw~_muuVZZ#MbZ8+O|1O!nRV*X)bp zFW5WBpR>&lzF^tp7i_5CpX~932kZ&22W&~mq;s!X=Z}B0OA~Ck z6IvUt10VAQAq7}6&v9YQi)9=$L=?!ap5r>ZlyMw?#0?kz!S~RMvk3<)OBGIm*k%;aPjs{l?M|H=BqqC#KQRShb zsNaiWDC+VsREhty%QqCQZaf5SdpQh+M$U&l^9LEcirKQeQ>*MNpxS@awI39j# zA^mOAB6{28`Sj4>MEcJ^66lJdvuKaa)9Bjur_h%N^VdRZ&Y+*U&8A~sCeck+EuxD) zTT0KWx0HU0=F)%8o=f-HJ&&GoW*+@vPy+p~(_A`~kLgE90hY{jyqs7{9miLQD3Dt{ z$NTpw<2duR8IJqyk)kKZF^bF_mNuSfD93UCz0zR0isL6l=M-@K<)tgyJ-i$`RHF_$ zS)u{zSgs7Z@ctiaMWvTidh6%ZMelo5=(Jmudn+5%%Dx=(aj-$ZTr7;}Un`>2o@LSZ z)g{pHx9rfs`_)n7bT9O~PcW+X$`w_`l?O`!OXfKaB9>Ce@d_deKJ1Xy$jOKOOi58VvgI@Gniyr!IKyRw8 zMN1CNLGL5xqq%&{$AlDM$vnr6FfTyAI*x;hD3Dt{#~qI-<2bqY1k>NIctOaL<2XJ~ zRMXVrhop?kar}~KldCu$byzw83OFv|wUT}{as_?p&N8~E?J~OFuBG&az@_xp@Fn#1 zk&EdY|1P3yE?q>=n7fc3T5KWxbp1m5)XYV6^x=i{z^)7Fyf%yJ2d9?OffZKJ+A^!? zF0WS7#rT*z2`Rvmd5+%^OR3|yF{TdO0J+t3Tr^b~#|{o=INnRhlH*v@;_(ir>qJ92 zj`tmvmO58)Or=OWr-0*jog%rNtK+M1kDuIljs&h&RZHPKLx%<)rAzu8*rb_H-UXG?e3*(MyBnDvmD@om0SZK+7b$)bK=l z%Y_8G^vBtB@Rr&1lfc z3%X9HGr!KD+osQ^n-xx^Cw)w!7adQc{rQ;raOJ^Lz>;~6yAn&O<9IR=1#+wBSa(7h z$C2S?I4*olik=+DXkXJHr)ES$IgX1Qmj=sK94{t1r-0+dO}cYyoIJVuuI}9L4LfnS zhP!cI`i|VYC|B-tSuJ0_+<_Z(kK)#D zcjM}G_uwj(?!iSY^5RnYnCA&8z>;~6OJiPuesvss5K$nvdXAf%R>rYcoEeTU6SCwu zj-T^r9rcN5D97=Ylew7VL8qjhQ^4`Uk%_2ZokVnJ^c-}W-YVwdKNmTpN$IH&O!UW%|T6%C!(>*iD(WV zb0HxGSTfJ?En+Ek9GAh=fg2#VdX7JwRmQQyS~DCkCuGTStl1smoXQdnlt?f5I+q?1!T;97 zWidUr=Tf@G!WDEC-<9+Ln-z4mrwi$}e=VZNH&{xqSg?%#w0bG+;x3U(NK=##uuc)auvr1iOwnD_@vKv^ycjj)MxHm zRC?VK6mxPBN_syZb-bQ{W)+=-8g7}7-g+)Wnz)syecW19@9H-6a=}itb>en3GjcUL zuxu@ASa1`%(tk6$J7*2D>AMkS@G)NzQh+7%9Jj>00R8GX4ke;MZuJ~{URK6&%0XVar^&Z6Bb&Z7N# z&ZJ+&&7jxyoJK#GK7}6rbrOAZn@P0alF4+y#7T6?2@~m(-6zv8_DrR# z)tEsKoIiu!pEQd;$;aGJNCB42bNrQ9N*%|oFm>Pt$gQ5^ve%SxocY`g$43cSavZN| zdo3yDF40hq7lQK_`=8;VL2+80{p z%w@~I?>8duxP@$y^*7z0>->JdIgc^ldCceg*X8k;`y%i2I`1>*dFJDztEiOYmde|W z@00|`ug?U5ZEu5sMp6*yLj{3#Re_*5C=iV56$p-Z3IMeO_JERk{@{10A9(5J2QEJH z0|)c{fp&L)kP__&T7>v>UsJsYbo>zjTm}S!%FaQc>)9YMf@lR>5_cRxjFRX0G?9Ym zmhU+Ap)|)?op=5D{S^-P`SgUI$7*+6rw?026bd;W`+y&&QjYHui<97Z+XipA{=PT7 z)!iGq4flc>zPq5wg`H6IohPIYZi8x#Hp9&?*27MBJ)n`D2aKy*3wIcAgvT`2!>5hb z!hnMtV4o#h;g)@#a9V?%u=eXNxQWZuR_;7LQrMEX<4MFQd5!~#6g;II<=x=@GG)y0L7|;e}C3l@H0{Y76;=j01+>F)-;8vB5_*4|)x zXD{IOb{8<;b^GAy=kf4kasoVedLP_(Vn2MnHVJmrJqVA& zBv{>HFPy(W3bwb1fzOY{L9f#Zu*LR$aOTGpIGD>^NVI}2i9609M#*#hoJhfQ%XfU{ zZ)uL57K%7t_MA^o$gyj-M_5@1Q7Ghi`3ruSN;&>QEKY*s9R~`j2{#TJ_nQ)`b z<%K%)_2b#HR(+Uj5ARv)6+ru30GTzXLAP@XFx;F4FDpwy z*T0Lv{-r0u*Cl13*I5>PDm%q}Px^9jw*L)~;&lhy`E?sa#ohq92X2GyWw*e+A{K;$3v7}{Le|v4+yif9H58k%H%z@3`|jX^v}>MI4_Z+7fbXaELA*T16BJIX?Y{ztt+`*zqlY zaS|MdJG!FIdUH`g@JysuG!0emb4G<?uMvSq*`)MCye6xVApI=yrW+U+_U-7uVuLb*&Iq7`gO-0?+Xl)UG$rcxa~ z4R~((j$gc&=J?ui5yt^UTSAW2e%&f!GKoSV$ALBctyU?=?UlD1Z=eLnQ5ivC1NXU* zXC^^l+QC4Oy(tjH?G6Md2L}Sji~vB-4*)r?0lDuKoG1O4DNIe1}=+& z!NFz0pcD7?AgPCgK^ph{v=+<@0-;>yIHDD7N!)P+F-o4}OGFBuTfXCCpQJg~xhvv$ z(g!|0A;+#CdQ2I%fhZJmJozI(Or;z@Ar>dW@jtr8aAC1A^fc}bKeXrphYm7?brFW} z!RKx;xnWoMIHofU59$o#8+U{I(z?P$>D{5t2UBR~&=-ChUROL>zbg%%>;h7(8l{Q9==g zLXJDt^21chaT>8W362YF_Az%|_cQ8UV;L_toH3ak#@u@w#sv2ZVXBAjVJ1EDWil`N zGFKCVm~@8#rpugA=Bm>{rb*2~X3?xe%p1Q$%-xhUX8po+CZjT*xoZ>8Xb#%PJR(}b zmc$(!D!pL+@*K}3Qt;gJ9S{2^&9VC%5yzE8TSATves?=YHU7#sD&+V%QKM3hSJm-v zfCR@+Q^tX7BgTW>H^+daa(i&~^GIOtXb*z8@8NyuECfMQX#mI4AiR7y&~UQ@^A?W; zuJfHh!y+fJ-De{BmM{@4H=6`*w3`ez&Ke7he>(uZ)Nvq{Xa!pmcl??dCC_mWr8;~X z@Z9npH~cBhF>34e=l54+5N!!M&Odvx>?%cfgmm*`TVe zKWL>n9&EIk1X`0h8c=he0h~9i0`01n0_uf5xV)z~*f_og@Eq`#(pr9zYW4XFwZE4- z7`oXMEOWI1^_iB+oyVJoEr~ncLX48>Bplv2+emDCBr(1AdrFIX*`$PJ-hH2SY*a<3M0heV6j-IF+$sESN11?w5U@ zIfWV8t=4v}+ZK>g*^u5ixjo%{WHjUaDe-f==OX800lwR;w%X7SyNWpW^~6>Le| zaWkct|IYDnA_dPa-*L|-(j3<;7IA!$XiLa3Xq^`{^c_(sU@hux+hkyv-ihwN3euao%pjr_Y)RblO=6V1=W%nTI(!=N-0~g2 zX)4X}wKXD+BZ#(y9J}fs>cA8dg+h)awfI}DQqSYA%G-@MP=e!(^8Fyx+!{>SJPq{P zvl|T8ybd%M-Uq2awt>l!E~Uu>4x`OE8mvvtG-d}J2$pSY2>LcT3wk8BqU}zb(~iTr zZ`RWMJSdtK2-4ybf%B*9U>BD;g=hs^5_g)t*kceZ$7JPa_j_d#5 zq^CVmDCD?DOMaM2InE>&C&BTV;xMaIJBL~I`H^D1ykVaLv-J1*sa@w-Pt<5(y=+gZ z)%m6utQvVwvMx7_wQBORS>eNIR6wV6uwGaF#q#F5@s@${F-P>(6M2^nv#~S_(p{s zR}(cV<#RsoXHA-6jOm&qLvp2?@~U{!w^sY%%olVPM}i zxp02}bXa-25Vq`k3BGLp6uv+F2C5JE0{2_i!4msVaCfg4aP#2HP@T&>Mzn%0i97yC zjFRWrRH+W120XWX$J*_rIlgvZ#BnasmY`#Lx_aqdqEN_jUK{>atCVA^Eq`$m9FIvG z!kW$eh%WW(!#3F6mwhzHnN28iV;fAKz-sI1v1U6G(YAOqs?PL2QfNLvy`Gk#eIICc z_t+@*W!D4jE}an8`|Lc{a3*BO1v|1PRj%wLE^{5x3brKfxR@9v&+#WB14ET5nI&N;(o=PMNg&c2f&);g5a@<&XyYZcp;CP_(R&W6fU|xLQf+jrk zMV^y8AV1$|X3{+$+fp?L>Rz!HI(q3jGWXuXD6G~~zpO@~h{)&Y-Ace#n~Y=kZ?t0_ zYx=S`Q*_ys*STon$s3brKf*ozn?&v6Nng6Ed+cwa|pj?HUC9NX#h=?OV@ z)iu67bTLsV&zmo?~w!18Te?Q--rqy*zIyZ7+2ei#%gjDM4UjLVM}?+UyDyK@@WH14;i zz4c{#8-%d>Pr})b=VRCvD1nWOOkxjL?`J30#j|c3qS$9ip=?S@2y0mr%KmyB#uj@A zv**|Ov&ldF*yOXm?1MR6#;4tEyO3aZ{=RtDh0E-(+RC32nL!lR6R7{usQ!P_7p@td-jXBK zlOLv1j!zMbli>KkJ107x`<&dB;AHT2-*iyC>J_E!ejfDy`~$q~)0{qO--2Fwsu6uX z=rV|_j;E%#nTlp@4@I9A6e07C2hf`-(@~K2Bx?NLG>}m>o&Ne@1)a)e))B2>OX7|x zr5CJUp5u)~3Z7fOW0yYvQS(1JcHbuA_&3p(kYn_=>s!jOH{Ym`V>KgwjY>HVAQmUV zabeR`_Cu@3?9%OT*)r4L?1gEK75Z0Ruua16vS}_?+23a`v4#7uvTFOEvg0>4RfIlP zSNPVvX0N(kWZ&4|WDVk;uo>&Vu%~yvX1h*4$j%Mf#};#$EYS+KB<{Ge(#wD67!WCV zZuyS8nM!kPa8TsmC_P8CCFHoG-@>!hYobudak;SyJDz01Uz`NTjv7BG77$@X|3%FdcwUY z^wCAPXodD^+TW^(Zgn`D{`>uLI&fMxt@-mPy|OBm9=Ift9&jXv9+(wFU-gcoN2Vsy zXVnkUk8g+4o))|5&&Kie1fmseN!)P^F-o4}YeWj3TfXD${?Z&9up*9~&G__$99OI! z`8TzNC=_x$&72>mQjRN$#Yu2nK3*T1kJW`SY+IPSy(`Jt>GsfGdS`` zFZggV_wgC+Vc*3+>D=D0=*^aY(aR$)(L+qH&}S~)q%Ym7q${VZLHpzF;7IEZ(7;I_ z>MM61A1Q1}-0>V@lsw0=L<*i;zT-^;r8#zeCE~d206slI$Iq-fFm^i!ST=ZT$tUm7{>1|gA3eF!Aa*Y!#!s%!5hZsV4znC9QiIA8eTXI8(XBno%>VZ z_PNP$vCjdxpZgw#yN0H~(Nr2-^C%szK6n`J@lS^)-TVo zE0KcdmhYIhmgczPlZfLgqAelENt-%b*fz7|8x?Z=lBiKB#~xPv8z8~)ewQwESVSkf zZekC*X;nXZO=mm0++-@f*?j_CHYF2gu9V#k7{`V5m{njhcpkb5H$m@2<=B6WRQR0GhGu)8#BX4Bl5Q)sT z#-owW1?Ui$xteGNTM~C%NQ{!_xQ0lv@9Zg?0Ysc zAC!$2G|NU4E@vUn)mcb=OBQl>&PGpibI{zExoD+s9vYaCi<%6~MUyV)pf(M2(1|bE zD70-38q_-nmB;0v)q8T0hFdPW!DXH&TEUjY9k*0^!TRMn9z~?!x#c_VGeVlYWpHm*GitHvFJZ>JxH0U;T1$oV5MazZ-XZ<7x5R;9zt&~(^x@e#OS&{1go zB?FG+GQ)^guqAQFcZpH*9P236;nRTUmhbqzy)?%LYeXE!5N!!LM!!$58(K^h3OSA) z$=_;~dLA1pZ#UjR363{DI|g>_Jp%U5It-ler-2o{)4)T+L%_%O5Mc5TgBMqhg2-c8 zz++f8h|J6c7v>!YRF`AGvginy8*+sE`-vmKtZN2H+;$Y?Zp;LZ%`-s&m+3;Zf-Q+V zP9#Rjb9|3T!E?)Zd}53=$74s(UyQPyiqVTb#b~uxG4kOuyD4`bA1Q1}-0@;!lsv~tL<*i;zT=(a zq&WtuB941I@aYLTMn8-#hdB_1LXM5b^21chaW1hq369s?OoV|u55Usu{V-zL0XVc@ zI-I=x5LCaE2xm2phk0Q!u!&zZj2;&apH)Z0b4k&#;p<2^P%R4n9TyE<=f**A%LLdv zCLT65jD-uf?u8y)<}0EVY)Ra)nbHf^FVFE3A_dPa-|=WCX^v5rh~sxeTSAVLe&3~s z>W=3d6>?ld)Tor>Esp#fAi?pj+<2f@mjsGhB!V68d%>HH>0r~_Ghl+vDPa2Z7#JQJ z1F{?X05D)D7;nD@gg2T6x{RI)TAr8>#u{w`7iR_o-`0n~#3x5VfvXp2)+HE(bD7yh zE7+2_<1fT0d5+DM>hNj6bIW(!YLYa^NyQ?L3yHRb90O+C3hE(IDCD?k0)MMj%CX%< z{^BG!9%rb|g5&D!41aZ2%Tb-}I9!80{a%x`Ep5max@od)pEqFFe*J~Uz5R(MReeXh zn$)3|tG^{b|RO#iD(5|5_ilHqvSdMN~GYq zv)*^H39zSzHi05kiBrK+g|wWRsvkW{aM0c zTmoFYCjmMZCcv_r321UQ?^q={CrC2_~T#3*@=5s`xDmhbq$G--}q--$T3 zpUS5vGK&2qEN`O z&UAj5N;ys-7AL{6%dbN8vZfF{Nhw5M;tSD$gN3Ndsu0;*6rz($3sJ^}Le!y85qj!W zg!;}bLiUbDD7I4(YWSiMt$I_49;z21-_}KFA@{MezD1}3_w$il=5?YKY)Ra4d!-kw zU!G$pA_dPa-*Nxh(j15O*!}1CSKKAq5_0T0W|qOQ??j=H<9jnz*zx>X{KZLdd?R)p z>^5;7G(GA8bC-L-v?vewb<=9-wR|<)7O(~;`>cf%eAdHVZW~}h!Uni#@CLZJ-Fo=@ z@md(#WgS$@TnD=wu7{EH*TbE$>*4BO>)>99Ix2cy9TQ+4<5O*9;bMym&63o{-~z z|6CD36bd_|af7p0)R>r>F_y~)TrCK(-QmVzAa zq#(njRMep^6>VsK2<82qic;66qI-2I=zZ%{^wl91C2UGX*TPfL(zH}Gcv&j4=Q8^! zcOD-pY)RblDq@s8$A^g&Jhyzu{)?nJ28%@;n=Rne6LMTp|Meh~h(aO9<_q~@D&@GC zSeyjMfxY&^W(7%*+LH*+MkGP4pcL4=A=(mh3O;kAhEqX5 zj#8Nkuc_WkdV&m#l^{E50tn|aPY|tOOX7}y6Qkrgwo$6Xrvc9`-?9F3X^xY&i8yA6 zwuBseHmVuPR1$?kj?q&7R;!d_hh_Z5NpRe^Q7zi)`~^AQ|BPO2{)&3){Y1x~{zUKB zd`IOQYEkjHIyAT9CyFijhP-rYP|v%s(fPltP~$t#(1^w_P(+_sh$(x6zV82kj;DV^ zo2AC9 zN;%e5-fp~s5*#z>dC>ZL9=z2q54yF=gPR)X!Lu83V5@#P@KC!P*l!m1J-L76!3+EH zVfL+jXxXp;c8kb|t%v8sj6?bGRHp*C=}taWJDCq1uja#d*?F)&b2QP4G{+&tD0z;{ zi4;7y{O57{YH5y>vPB#_uHw`Cqhk-EP{^^9J3maN96ux$C&BTiaizc}xD*7k?$oT|qV_XeW2=<}NU>1Z^Hrg39}spmgr{9$A&3 zB8w8Vi2K+_^AgmR`~67E5;Twd*ck5D6SRl;dUV`8Pm<;~5tNVB*sN7~C@e z9yJbtPmBU!Xu3ZPoZ}DQ*!#nKv3uZT+d$a!ULXv78whu`4uY`}fv{7bKsY`)5MI#= zg3ay+Lhru7!N&n@3^gU!+$d)A0JP9xg- zqvMN2p^)Rl8~IzUQjRS)@fRn-vAW&{ux;iB@JeqTIAXL8)O245dicA835QmJ%d=L2 z_{APz^p=gl&3Q9O+`AdPZMFqG+_eeB4%!HIuGs|YYBqzbE}KEvg3Ul*e+wvIw*gRG zrW?@;wj}O2lNcq>@k=5F&n@5a`K{6%yM7mOyh?c(@bUVi;|QWq$g%qt{#L7$YamO2oQSuyT5h-|X z`HsVONOPQJ==(m`#S+} zYf3PTSRMx3&IpIeZ=zuLX>srtmsv-&f-Q+Vrj%Z=etC{J5-E6Y`Ho$7Npoy&CgS)v z(Uy?oq+gMFwuYX3qe70=cJgaf%5ea(I0=r|%&7!sFRy@a{ttk6;~MZ~OC!4alMcP0 zrzZWrZxz_?bOx*{PXxEVx&t?xi_~b7^;GXJL#e@&M^SWU8fCFi18jV64Jb7qa4q>W z@M!Z9EaEa*q7`gO+;L;2m;cT&AX4z$@*Q{ck>*%uu!!SxL|a0REB5@n%)BNFg&dcA zsj%Zo-u%T$a6DXn4m)R$3#)cyA=}4e4g0FMC#y*FV+%9A+4iS4uz9;@vo~@_uv0D# zWVt{1vX;+UvtPIBu$KBdtj?o0Y+gcFHhi}+t3GQeYvQ+pU9)%*JDJP$CtAUl#2sHH zM#*~~H&Lp?rvc9`-|;J7X^vgzi8u}++7fb%>fc|HOB4z@4&BY)YL$8(cU0bPynzxN zXC_C(sm){Hjz%#sJ~Rg2*N=fW2S&k|kVsfQCKBeph=g{Jqu`g;F;L+b1FO$JdAyJhyzu*?Xip zu2>=B*x8RyPslOQjGAh@g(wtqJk6gUrc#b8iN#59+&C~0xD5yb-TMTAUz)+7(mn`0 z9kB;Y1O6c9rXMIM_XkTS27vcNgFwjFAn>M7FnBRB2vnX60&af6p!V-zpko>YE?nIM zj_L0KSAXmQExAm6<<8?Hg)NCYo+?~Mw0xA6n~%b`=A*#)d=zmpAN_uok3!buqZT*v(AC5|RQ)IqAujVN(F(RC z?zp$o3)U~su`7{+=a%o74wdFu=YWXgDxxhR$6&^a8N-?d^Nk8Qeo54*lw*$&{tb}e zc-!ePm}43aSM&;pdRgJ{t4%meniL9~91nrlmxREv8llkjdno+C)m)1ThcU_FaEV?x z)L#}3Exv@q4%QLyL62})b2Jpj4i1HD&xgWITxL4a3brKf_#H7yo?|1WI(!=N-0~f3 zMM!fTdQ`-5CefCVW6$E&^Gj|Lg+h+A!uVUQQjUj&^A{(=|Y`@FycuExLnZeVV+8?>C|1B{;dfY-&lfwzG#$aePu z+J;`BrTZ=r?&t-^a+#}%R;$A!cwd5&v{6g;iHKt=nom#2vB6)dM~BWQ3WXel7=D;aIlf3N zPJ-iP+qQ6VqocIRtt8ORA{Z^0eGT0mQHv55W}~m~Z%}iZ%%Kl|s-q!m2X%&TfE!Z% zVBC>C(EW-hG~O~7YFLbi-*bDz(vSL3+p`~h)wn;b&upOFd3>a>C2`00#3*@=J&6=N zw|vKQ6Qnsde=Xv;aU7qXkYm?m97< zEOU3dsrf3}@z6Nhb3R2!`p=;C`%I+sZ*`)-oG%B1_M8Mphw{PUkG-j#%eSI@r;Vto z!^^U3|Lml4R-UJ{ioL+=P6*Uzo+nztmc$*mRC>Ys5yw}F zwuBt3UH$rN=trVZ$nmwkD(ra1KK|k)IR2b#MT6*fV9Sbwl#yB;(x@?I6^@sXQ|dfa zwh}Tvy}iq7{92&}Z8oEovqmrw*@OG5v%s;=7lHfX9pL-IL)7#y0Ay&~1)nl|((ft< z)AgBQL@U^mxZ}ITD0z-`lO4AGXLN8!4R; z$BD!!d5-T9DR^%Aj!z^@bF5}8;&{#hKD|FW_96;}9J?OmhpCj~*Tmu^INrHr6y@wc z617|Gk1WD6(e5#qQSOm+|{x%=!#u3C|3U(b;!=gv~<@6~Uqbmx}9&DM9Cp^#&vRDPIBInE^(C&BT^Pa)J6Ycp!=Rti0GS%In@ccax^uA`(` z1K50P9d?-aBXqDKLLCphuw5|Q7;Il!0pbVD08IlmsB3k5N>isDpwK8y=8Rb+mHVnS zV8WJx`pj2EE7+2_V>6`}tY4nvB}59ITfXDb>Czk<%o1_@j%Z8BG57Zs)kAgD_(p{s z*AO)-<#@|s{tb}e_(Cf+7&^8KJe#QoZ>?Af8jQG#e1?>vcYWWZVqZOW#d&@9?6>ah zpgXtF)}TRDQtz|iP-tV?aLxk|dC!>M`8kjt?c9VmY<`~VSz<@szZ^~1XJ!+vU`yhT zzYwG3IW||S!>0kyE#GmgqtYBFEfH~CNVFy77_Ckw z*VM+L8`ZAJ$SDX#N1bOF?M!fIp&A|c?iu*|SsOazn=TzTRUNn#^&K`We;@O4;AC`u zhyin=;0`tTNd)M+`~%3HrbZWS8ist^d_jKgo}>EAO++i$lDK1r7$wi~S0V+^E#L9| z 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