fix:(game) fixed bananas not removing themselves after intersection

pull/3/head
Alex 2024-02-02 16:01:18 +01:00
parent bf52a80c29
commit cff143c925
4 changed files with 16 additions and 14 deletions

View File

@ -48,7 +48,8 @@ export const Experience = () => {
<Banana <Banana
key={banana.id} key={banana.id}
position={banana.position} position={banana.position}
banana={banana}
id={banana.id}
// rotation={banana.rotation} // rotation={banana.rotation}
/> />
))} ))}

View File

@ -422,7 +422,7 @@ export const PlayerController = () => {
// Calculate the position for the new banana // Calculate the position for the new banana
const bananaPosition = kartPosition.sub(scaledBackwardDirection); const bananaPosition = kartPosition.sub(scaledBackwardDirection);
const newBanana = { const newBanana = {
id: Math.random() + "-" + new Date(), id: Math.random() + "-" + +new Date(),
position: bananaPosition, position: bananaPosition,
player: true, player: true,
}; };
@ -445,7 +445,7 @@ export const PlayerController = () => {
// Calculate the position for the new banana // Calculate the position for the new banana
const shellPosition = kartPosition.sub(scaledBackwardDirection); const shellPosition = kartPosition.sub(scaledBackwardDirection);
const newShell = { const newShell = {
id: Math.random() + "-" + new Date(), id: Math.random() + "-" + +new Date(),
position: shellPosition, position: shellPosition,
player: true, player: true,
rotation: kartRotation rotation: kartRotation

View File

@ -14,13 +14,16 @@ import { BallCollider, RigidBody } from '@react-three/rapier'
import { useFrame } from '@react-three/fiber'; import { useFrame } from '@react-three/fiber';
import { useStore } from '../../store'; import { useStore } from '../../store';
export function Banana({onCollide, ...props}) { export function Banana({onCollide, id, ...props}) {
const { nodes, materials } = useGLTF('./models/items/banana_peel_mario_kart-transformed.glb'); const { nodes, materials } = useGLTF('./models/items/banana_peel_mario_kart-transformed.glb');
const rigidBody = useRef(); const rigidBody = useRef();
const ref = useRef(); const ref = useRef();
const [scale, setScale] = React.useState(0.002); const [scale, setScale] = React.useState(0.002);
const {actions} = useStore(); const {actions} = useStore();
console.log('banana', id);
return ( return (
<> <>
<RigidBody <RigidBody
@ -28,16 +31,9 @@ export function Banana({onCollide, ...props}) {
type='fixed' type='fixed'
position={props.position} position={props.position}
sensor sensor
onIntersectionEnter={(event) => { onIntersectionEnter={() => {
if(scale === 0.002) {
actions.setShouldSlowDown(true); actions.setShouldSlowDown(true);
console.log(ref.current, rigidBody.current); actions.removeBananaById(id);
ref.current.visible = false;
setScale(0);
rigidBody.setEnable(false);
}
}} }}
colliders={false} colliders={false}
name='banana' name='banana'

View File

@ -75,12 +75,17 @@ export const useStore = create((set, get) => ({
}, },
removeBanana: (banana) => { removeBanana: (banana) => {
set((state) => ({ set((state) => ({
bananas: state.bananas.filter((b) => b.id !== banana.id), bananas: state.bananas.filter((id) => id !== banana.id),
})); }));
}, },
getBananas: () => { getBananas: () => {
return get().bananas; return get().bananas;
}, },
removeBananaById: (id) => {
set((state) => ({
bananas: state.bananas.filter((b) => b.id !== id),
}));
},
setItem:() => { setItem:() => {
set((state) => ({ set((state) => ({
item: state.items[Math.floor(Math.random() * state.items.length)], item: state.items[Math.floor(Math.random() * state.items.length)],