From ef9e58fa2139c9abd279f4ede916d4da71c73f6d Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 10 Feb 2024 00:18:55 +0100 Subject: [PATCH] feat:(game) added names for other players --- public/fonts/HK.ttf | Bin 0 -> 66512 bytes src/App.jsx | 1 + src/components/PlayerController.jsx | 125 ++++++++---------- src/components/PlayerDummies.jsx | 5 + .../models/items/Mario_shell_red.jsx | 2 +- src/components/store.jsx | 2 +- src/index.css | 11 ++ 7 files changed, 77 insertions(+), 69 deletions(-) create mode 100644 public/fonts/HK.ttf diff --git a/public/fonts/HK.ttf b/public/fonts/HK.ttf new file mode 100644 index 0000000000000000000000000000000000000000..59eb24c67d6db4ee8b00c3d3ecf8dac0f815595b GIT binary patch literal 66512 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 { actions.removePlayer(state); diff --git a/src/components/PlayerController.jsx b/src/components/PlayerController.jsx index 7763e20..85e5fe1 100644 --- a/src/components/PlayerController.jsx +++ b/src/components/PlayerController.jsx @@ -3,13 +3,9 @@ import { BallCollider, RigidBody, useRapier, vec3 } from "@react-three/rapier"; import { useKeyboardControls, PerspectiveCamera, - ContactShadows, - Sphere, - OrbitControls, - Trail, PositionalAudio, } from "@react-three/drei"; -import { useFrame, useThree } from "@react-three/fiber"; +import { useFrame, useThree, extend } from "@react-three/fiber"; import { useRef, useState, useEffect, useCallback } from "react"; import * as THREE from "three"; @@ -26,10 +22,17 @@ import FakeGlowMaterial from "./ShaderMaterials/FakeGlow/FakeGlowMaterial"; import { HitParticles } from "./Particles/hits/HitParticles"; import { CoinParticles } from "./Particles/coins/CoinParticles"; import { ItemParticles } from "./Particles/items/ItemParticles"; -import { isHost } from "playroomkit"; - -export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNetworkShells, networkBananas, networkShells }) => { +import { geometry } from "maath"; +extend(geometry); +export const PlayerController = ({ + player, + userPlayer, + setNetworkBananas, + setNetworkShells, + networkBananas, + networkShells, +}) => { const upPressed = useKeyboardControls((state) => state[Controls.up]); const downPressed = useKeyboardControls((state) => state[Controls.down]); const leftPressed = useKeyboardControls((state) => state[Controls.left]); @@ -37,7 +40,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe const jumpPressed = useKeyboardControls((state) => state[Controls.jump]); const shootPressed = useKeyboardControls((state) => state[Controls.shoot]); const resetPressed = useKeyboardControls((state) => state[Controls.reset]); - + const [isOnGround, setIsOnGround] = useState(false); const body = useRef(); const kart = useRef(); @@ -85,13 +88,13 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe const downDirection = new THREE.Vector3(0, -1, 0); const [shouldLaunch, setShouldLaunch] = useState(false); const effectiveBoost = useRef(0); + const text = useRef(); - - const { actions, shouldSlowDown, item, bananas, coins, id} = useStore(); + const { actions, shouldSlowDown, item, bananas, coins, id } = useStore(); const slowDownDuration = useRef(1500); - + useFrame(({ pointer, clock }, delta) => { - if(player.id !== id) return; + if (player.id !== id) return; const time = clock.getElapsedTime(); if (!body.current && !mario.current) return; engineSound.current.setVolume(currentSpeed / 300 + 0.2); @@ -123,8 +126,6 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe targetXPosition = 0; 1; } - - // mouse steering @@ -132,15 +133,14 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe steeringAngle = currentSteeringSpeed * -pointer.x; targetXPosition = -camMaxOffset * -pointer.x; } else if (driftLeft.current && !driftRight.current) { - steeringAngle = currentSteeringSpeed * -(pointer.x - 0.5); + steeringAngle = currentSteeringSpeed * -(pointer.x - 1); targetXPosition = -camMaxOffset * -pointer.x; } else if (driftRight.current && !driftLeft.current) { - steeringAngle = currentSteeringSpeed * -(pointer.x + 0.5); + steeringAngle = currentSteeringSpeed * -(pointer.x + 1); targetXPosition = -camMaxOffset * -pointer.x; } // ACCELERATING const shouldSlow = actions.getShouldSlowDown(); - if (upPressed && currentSpeed < maxSpeed) { // Accelerate the kart within the maximum speed limit @@ -168,7 +168,9 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe } } if (shouldSlow) { - setCurrentSpeed(Math.max(currentSpeed - decceleration * 2 * delta * 144, 0)); + setCurrentSpeed( + Math.max(currentSpeed - decceleration * 2 * delta * 144, 0) + ); setCurrentSteeringSpeed(0); slowDownDuration.current -= 1500 * delta; setShouldLaunch(true); @@ -177,12 +179,8 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe slowDownDuration.current = 1500; setShouldLaunch(false); } - - } - - // REVERSING if (downPressed && currentSpeed < -maxSpeed) { setCurrentSpeed( @@ -239,7 +237,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe if (isOnFloor.current && jumpForce.current > 0) { landingSound.current.play(); } - if (!isOnGround && jumpForce.current > 0 ) { + if (!isOnGround && jumpForce.current > 0) { jumpForce.current -= 1 * delta * 144; } if (!jumpPressed) { @@ -286,7 +284,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe driftForce.current = 0.4; mario.current.rotation.y = THREE.MathUtils.lerp( mario.current.rotation.y, - steeringAngle * 50 + 0.5, + steeringAngle * 25 + 0.4, 0.05 * delta * 144 ); accumulatedDriftPower.current += 0.1 * (steeringAngle + 1) * delta * 144; @@ -296,7 +294,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe driftForce.current = 0.4; mario.current.rotation.y = THREE.MathUtils.lerp( mario.current.rotation.y, - -(-steeringAngle * 50 + 0.5), + -(-steeringAngle * 25 + 0.4), 0.05 * delta * 144 ); accumulatedDriftPower.current += 0.1 * (-steeringAngle + 1) * delta * 144; @@ -330,7 +328,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe if (driftLeft.current || driftRight.current) { const oscillation = Math.sin(time * 1000) * 0.1; const vibration = oscillation + 0.9; - if (turboColor === 0xffffff) { + if (turboColor === 0xffffff) { setScale(vibration * 0.8); } else { setScale(vibration); @@ -356,7 +354,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe setCurrentSpeed(boostSpeed); effectiveBoost.current -= 1 * delta * 144; targetZPosition = 10; - if(!turboSound.current.isPlaying) turboSound.current.play(); + if (!turboSound.current.isPlaying) turboSound.current.play(); driftTwoSound.current.play(); driftBlueSound.current.stop(); driftOrangeSound.current.stop(); @@ -399,10 +397,10 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe // MISC - if(resetPressed) { - body.current.setTranslation({x: 8, y: 2, z: -119}); - body.current.setLinvel({x: 0, y: 0, z: 0}); - body.current.setAngvel({x: 0, y: 0, z: 0}); + if (resetPressed) { + body.current.setTranslation({ x: 8, y: 2, z: -119 }); + body.current.setLinvel({ x: 0, y: 0, z: 0 }); + body.current.setAngvel({ x: 0, y: 0, z: 0 }); setCurrentSpeed(0); setCurrentSteeringSpeed(0); setIsBoosting(false); @@ -413,17 +411,16 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe kart.current.rotation.y = Math.PI / 2; } + // ITEMS + if (shootPressed && item === "banana") { + const distanceBehind = 2; + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); - // ITEMS - - if(shootPressed && item === "banana") { - const distanceBehind = 2; - const scaledBackwardDirection = forwardDirection.multiplyScalar(distanceBehind); - - - const kartPosition = new THREE.Vector3(...vec3(body.current.translation())); - + const kartPosition = new THREE.Vector3( + ...vec3(body.current.translation()) + ); const bananaPosition = kartPosition.sub(scaledBackwardDirection); const newBanana = { @@ -436,48 +433,44 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe actions.useItem(); } - if(shootPressed && item === "shell") { + if (shootPressed && item === "shell") { const distanceBehind = -2; - const scaledBackwardDirection = forwardDirection.multiplyScalar(distanceBehind); - + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); + const kartPosition = new THREE.Vector3( body.current.translation().x, body.current.translation().y, body.current.translation().z ); - + const shellPosition = kartPosition.sub(scaledBackwardDirection); const newShell = { id: Math.random() + "-" + +new Date(), position: shellPosition, player: true, - rotation: kartRotation + rotation: kartRotation, }; setNetworkShells([...networkShells, newShell]); actions.useItem(); - } - if(shootPressed && item === "mushroom") { + if (shootPressed && item === "mushroom") { setIsBoosting(true); effectiveBoost.current = 300; actions.useItem(); } - - - player.setState("position", body.current.translation()); - player.setState("rotation", kartRotation + mario.current.rotation.y); - player.setState("isBoosting", isBoosting); - player.setState("shouldLaunch", shouldLaunch); - player.setState("turboColor", turboColor); - player.setState("scale", scale); - player.setState("bananas", bananas); - - + player.setState("position", body.current.translation()); + player.setState("rotation", kartRotation + mario.current.rotation.y); + player.setState("isBoosting", isBoosting); + player.setState("shouldLaunch", shouldLaunch); + player.setState("turboColor", turboColor); + player.setState("scale", scale); + player.setState("bananas", bananas); }); - return player.id === id ?( + return player.id === id ? ( { + onCollisionEnter={({ other }) => { isOnFloor.current = true; setIsOnGround(true); }} - onCollisionExit={({other}) => { + onCollisionExit={({ other }) => { isOnFloor.current = false; setIsOnGround(false); }} - /> @@ -512,8 +504,8 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe isBoosting={isBoosting} shouldLaunch={shouldLaunch} /> - - + + - {/* */} @@ -576,7 +567,7 @@ export const PlayerController = ( { player, userPlayer, setNetworkBananas, setNe png="./particles/star.png" turboColor={turboColor} /> - + {/* */} diff --git a/src/components/PlayerDummies.jsx b/src/components/PlayerDummies.jsx index cc548b3..3eb7c1e 100644 --- a/src/components/PlayerDummies.jsx +++ b/src/components/PlayerDummies.jsx @@ -8,6 +8,8 @@ import { OrbitControls, Trail, PositionalAudio, + Text, + Billboard, } from "@react-three/drei"; import { useFrame, useThree } from "@react-three/fiber"; import { useRef, useState, useEffect, useCallback } from "react"; @@ -113,6 +115,9 @@ export const PlayerDummies = ( { player, userPlayer }) => { return player.id != id? ( <> + + {player.state.profile.name} + { const velocity = { diff --git a/src/components/store.jsx b/src/components/store.jsx index 22ee87a..bf1649a 100644 --- a/src/components/store.jsx +++ b/src/components/store.jsx @@ -20,7 +20,7 @@ export const useStore = create((set, get) => ({ pastPositions: [], shouldSlowdown: false, bananas: [], - items: ["mushroom"], + items: ["mushroom", "shell", "banana"], item: "", shells: [], skids: [], diff --git a/src/index.css b/src/index.css index 6db33c0..22284aa 100644 --- a/src/index.css +++ b/src/index.css @@ -110,3 +110,14 @@ body::-webkit-scrollbar { transform: scale(1.2); } } + +.annotation{ + display:flex; + justify-content: center; + align-items: center; + + background:none; + backdrop-filter: blur(10px); + pointer-events: none; + +} \ No newline at end of file