29 lines
883 B
TypeScript
29 lines
883 B
TypeScript
import { useRegistry, type WallNode } from '@pascal-app/core'
|
|
import { useRef } from 'react'
|
|
import type { Mesh } from 'three'
|
|
import { useNodeEvents } from '../../../hooks/use-node-events'
|
|
import { NodeRenderer } from '../node-renderer'
|
|
|
|
export const WallRenderer = ({ node }: { node: WallNode }) => {
|
|
const ref = useRef<Mesh>(null!)
|
|
|
|
useRegistry(node.id, 'wall', ref)
|
|
|
|
const handlers = useNodeEvents(node, 'wall')
|
|
|
|
return (
|
|
<mesh ref={ref} castShadow receiveShadow>
|
|
{/* WallSystem will replace this geometry in the next frame */}
|
|
<boxGeometry args={[0, 0, 0]} />
|
|
<meshStandardMaterial color="lightgray" />
|
|
<mesh name="collision-mesh" {...handlers} visible={false}>
|
|
<boxGeometry args={[0, 0, 0]} />
|
|
</mesh>
|
|
|
|
{node.children.map((childId) => (
|
|
<NodeRenderer key={childId} nodeId={childId} />
|
|
))}
|
|
</mesh>
|
|
)
|
|
}
|