diff --git a/public/models/misc/super_mario_bros_coin-transformed.glb b/public/models/misc/super_mario_bros_coin-transformed.glb new file mode 100644 index 0000000..9d2ad8a Binary files /dev/null and b/public/models/misc/super_mario_bros_coin-transformed.glb differ diff --git a/public/models/misc/super_mario_bros_coin.glb b/public/models/misc/super_mario_bros_coin.glb new file mode 100644 index 0000000..774a141 Binary files /dev/null and b/public/models/misc/super_mario_bros_coin.glb differ diff --git a/src/components/Experience.jsx b/src/components/Experience.jsx index 93b063e..23e9e06 100644 --- a/src/components/Experience.jsx +++ b/src/components/Experience.jsx @@ -22,6 +22,7 @@ import { Banana } from "./models/items/Banana_peel_mario_kart"; import { ItemBox } from "./models/misc/Mario_kart_item_box"; import { useStore } from "./store"; import { Shell } from "./models/items/Mario_shell_red"; +import { Coin } from "./models/misc/Super_mario_bros_coin"; export const Experience = () => { const onCollide = (event) => { @@ -36,11 +37,13 @@ export const Experience = () => { {/* */} - + + + {bananas.map((banana) => ( { useFrame(({ pointer, clock }, delta) => { const time = clock.getElapsedTime(); if (!body.current && !mario.current) return; - actions.setBodyPosition(vec3(body.current.translation())); - actions.setBodyRotation(body.current.rotation());1 engineSound.current.setVolume(currentSpeed / 300 + 0.2); engineSound.current.setPlaybackRate(currentSpeed / 10 + 0.1); jumpSound.current.setPlaybackRate(1.5); @@ -219,11 +217,12 @@ export const PlayerController = () => { ); // JUMPING - if (jumpPressed && isOnFloor.current && !jumpIsHeld.current) { + if (jumpPressed && isOnGround && !jumpIsHeld.current) { jumpForce.current += 10; isOnFloor.current = false; jumpIsHeld.current = true; jumpSound.current.play(); + setIsOnGround(false); if (jumpSound.current.isPlaying) { jumpSound.current.stop(); @@ -234,7 +233,7 @@ export const PlayerController = () => { if (isOnFloor.current && jumpForce.current > 0) { landingSound.current.play(); } - if (!isOnFloor.current && jumpForce.current > 0) { + if (!isOnGround && jumpForce.current > 0 ) { jumpForce.current -= 1 * delta * 144; } if (!jumpPressed) { @@ -462,10 +461,6 @@ export const PlayerController = () => { actions.useItem(); } - if(item) console.log(item) - - // console.lowg(body.current.translation()) - }); @@ -485,6 +480,11 @@ export const PlayerController = () => { mass={3} onCollisionEnter={({other}) => { isOnFloor.current = true; + setIsOnGround(true); + }} + onCollisionExit={({other}) => { + isOnFloor.current = false; + setIsOnGround(false); }} /> diff --git a/src/components/models/misc/Super_mario_bros_coin.jsx b/src/components/models/misc/Super_mario_bros_coin.jsx new file mode 100644 index 0000000..4153177 --- /dev/null +++ b/src/components/models/misc/Super_mario_bros_coin.jsx @@ -0,0 +1,37 @@ +/* +Auto-generated by: https://github.com/pmndrs/gltfjsx +Command: npx gltfjsx@6.2.16 .\super_mario_bros_coin.glb --shadows --transform +Files: .\super_mario_bros_coin.glb [48.84KB] > C:\Users\mouli\dev\r3f-vite-starter\public\models\misc\super_mario_bros_coin-transformed.glb [6.12KB] (87%) +Author: BranHelsing (https://sketchfab.com/BranHelsing) +License: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/) +Source: https://sketchfab.com/3d-models/super-mario-bros-coin-aa97e093847a439f9feb064134813806 +Title: Super Mario Bros Coin +*/ + +import React, { useEffect, useRef } from 'react' +import { useGLTF, useAnimations } from '@react-three/drei' +import { useFrame } from '@react-three/fiber' + +export function Coin(props) { + const group = useRef() + const { nodes, materials, animations } = useGLTF('./models/misc/super_mario_bros_coin-transformed.glb') + const { actions } = useAnimations(animations, group) + + useFrame((state, delta) => { + group.current.rotation.y += 4 * delta + }) + + return ( + + + + + + + + + + ) +} + +useGLTF.preload('./models/misc/super_mario_bros_coin-transformed.glb')