diff --git a/apps/editor/components/editor.tsx b/apps/editor/components/editor.tsx index 0aeccdce..1fd5a8cf 100644 --- a/apps/editor/components/editor.tsx +++ b/apps/editor/components/editor.tsx @@ -4,8 +4,8 @@ import { Environment, OrbitControls } from "@react-three/drei"; import { Canvas, ThreeToJSXElements } from "@react-three/fiber"; import { extend } from "@react-three/fiber"; -import { color, sin, time } from "three/tsl"; import * as THREE from "three/webgpu"; +import { SceneRenderer } from "./renderers/scene-renderer"; declare module "@react-three/fiber" { interface ThreeElements extends ThreeToJSXElements {} @@ -26,10 +26,7 @@ export default function Editor() { > - - - - + ); } diff --git a/apps/editor/components/renderers/scene-renderer.tsx b/apps/editor/components/renderers/scene-renderer.tsx new file mode 100644 index 00000000..c789dd2d --- /dev/null +++ b/apps/editor/components/renderers/scene-renderer.tsx @@ -0,0 +1,66 @@ +"use client"; + +import { AnyNode, LevelNode, useScene, WallNode } from "@pascal-app/core"; +import { useRef } from "react"; +import * as THREE from "three/webgpu"; + +export const SceneRenderer = () => { + const rootNodes = useScene((state) => state.rootNodeIds); + + return rootNodes.map((nodeId) => ( + + )); +}; + +const NodeRenderer = ({ nodeId }: { nodeId: AnyNode["id"] }) => { + const node = useScene((state) => state.nodes[nodeId]); + + if (!node) return null; + + return ( + <> + {node.type === "level" && } + {/* {node.type === "item" && } */} + {node.type === "wall" && } + + ); +}; + +const LevelRenderer = ({ node }: { node: LevelNode }) => { + const ref = useRef(null!); + + // useRegistry(node.id, node.type, ref); + return ( + + + + + + {node.children.map((childId) => ( + + ))} + + ); +}; + +const WallRenderer = ({ node }: { node: WallNode }) => { + const ref = useRef(null!); + console.log("node", node); + + // useRegistry(node.id, "wall", ref); + + return ( + + {/* WallSystem will replace this geometry in the next frame */} + + + + {/* If you want windows to be inside the wall's local coordinate system: + render children here. + */} + {/* {node.children.map((childId) => ( + + ))} */} + + ); +};