You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

import create from 'zustand'
import { PointerLockControls } from '@react-three/drei'
import { Socket } from 'socket.io-client'
type Error = null | 'SOCKET'
export type Transform = {
position?: number[]
rotation?: number[]
}
type userId = string
export type UserTransforms = Record<userId, Transform>
type State = {
pointerLockControls: PointerLockControls | undefined
setPointerLockControls: (controls: PointerLockControls) => void
pointerLocked: boolean
setPointerLockStatus: (status: boolean) => void
socket: null | Socket
setSocket: (socket: Socket | null) => void
error: Error
setError: (error: Error) => void
userTransforms: UserTransforms | null
setUserTransforms: (userTransforms: UserTransforms) => void
}
const useStore = create<State>((set) => ({
pointerLockControls: undefined,
pointerLocked: false,
setPointerLockStatus: (status) => set(() => ({ pointerLocked: status })),
setPointerLockControls: (controls) => set(() => ({ pointerLockControls: controls })),
socket: null,
setSocket: (socket) => set(() => ({ socket })),
error: null,
setError: (error) => set(() => ({ error })),
userTransforms: null,
setUserTransforms: (userTransforms) => set(() => ({ userTransforms })),
}))
export default useStore