aboutsummaryrefslogtreecommitdiff
path: root/src/App.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/App.jsx')
-rw-r--r--src/App.jsx72
1 files changed, 40 insertions, 32 deletions
diff --git a/src/App.jsx b/src/App.jsx
index 25fe834..81436a8 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -3,30 +3,32 @@ import { Canvas, useFrame } from '@react-three/fiber';
import Notes from './components/notes';
import Player from './components/player';
import Ground from './components/ground';
-import React, { Suspense, useContext, useEffect, useState } from 'react';
+import React, { Suspense, useContext, useEffect, useRef, useState } from 'react';
import { Physics } from '@react-three/rapier';
+import Sun from './components/sun';
+import { Fog } from 'three';
+import * as everforest from './_everforest.module.scss'
export const AppContext = React.createContext(null);
function KeyPressedClearer() {
- const { setKeysPressed } = useContext(AppContext);
- useFrame((_s, _d) => setKeysPressed([]));
+ const { keysPressed } = useContext(AppContext);
+ useFrame((_s, _d) => keysPressed.current = [], -1);
return <></>
}
function App() {
- const [keys, setKeys] = useState([]);
- const [keysPressed, setKeysPressed] = useState([]);
+ const keys = useRef([]);
+ const keysPressed = useRef([]);
+ const [messages, setMessages] = useState();
const playerKeyDown = (event) => {
- setKeys(keys => {
- if(!keys.includes(event.code)) {
- setKeysPressed(keysPressed => [...keysPressed, event.code]);
- }
- return [...keys, event.code]
- });
+ if (!keys.current.includes(event.code)) {
+ keysPressed.current.push(event.code);
+ }
+ keys.current.push(event.code);
}
const playerKeyUp = (event) => {
- setKeys(keys => keys.filter(k => k != event.code));
+ keys.current = keys.current.filter(k => k != event.code);
}
useEffect(() => {
window.addEventListener('keydown', playerKeyDown);
@@ -36,28 +38,34 @@ function App() {
window.removeEventListener('keyup', playerKeyUp);
};
}, []);
+ useEffect(() => {
+ fetch('/api/message').then((res) => res.json()).then((data) => {
+ console.log(data);
+ setMessages(data);
+ });
+ }, []);
return (
- <AppContext.Provider value={{ keys: keys, keysPressed: keysPressed, setKeysPressed: setKeysPressed }}>
- <Canvas shadows>
- <KeyPressedClearer />
- <Suspense>
- <Physics timeStep={1/60}>
- <directionalLight
- castShadow
- position={[100, 100, 100]}
- lookAt={[0, 0, 0]}
- intensity={Math.PI / 2}
- shadow-mapSize-height={2048}
- shadow-mapSize-width={2048}
- />
- <ambientLight intensity={Math.PI / 4} />
+ <>
+ <div className='dot' />
+ <p className='unselectable hint'>
+ E - read<br/>
+ LMB - write
+ </p>
+ <AppContext.Provider value={{ keys: keys, keysPressed: keysPressed, messages: messages, setMessages: setMessages }}>
+ <Canvas shadows>
+ <KeyPressedClearer />
+ <Suspense>
+ <fog color={everforest.bg0} attach="fog" far={500}/>
+ <Sun />
<Notes />
- <Player />
- <Ground />
- </Physics>
- </Suspense>
- </Canvas>
- </AppContext.Provider>
+ <Physics timeStep={1 / 60}>
+ <Player />
+ <Ground />
+ </Physics>
+ </Suspense>
+ </Canvas>
+ </AppContext.Provider>
+ </>
)
}