export / load json
This commit is contained in:
@@ -22,6 +22,7 @@ export type SceneState = {
|
||||
// Actions
|
||||
loadScene: () => void
|
||||
clearScene: () => void
|
||||
setScene: (nodes: Record<AnyNodeId, AnyNode>, rootNodeIds: AnyNodeId[]) => void
|
||||
|
||||
markDirty: (id: AnyNodeId) => void
|
||||
clearDirty: (id: AnyNodeId) => void
|
||||
@@ -60,6 +61,18 @@ const useScene = create<SceneState>()(
|
||||
get().loadScene() // Default scene
|
||||
},
|
||||
|
||||
setScene: (nodes, rootNodeIds) => {
|
||||
set({
|
||||
nodes,
|
||||
rootNodeIds,
|
||||
dirtyNodes: new Set<AnyNodeId>(),
|
||||
})
|
||||
// Mark all nodes as dirty to trigger re-validation
|
||||
Object.values(nodes).forEach((node) => {
|
||||
get().markDirty(node.id)
|
||||
})
|
||||
},
|
||||
|
||||
loadScene: () => {
|
||||
if (get().rootNodeIds.length > 0) {
|
||||
// Assign all nodes as dirty to force re-validation
|
||||
|
||||
@@ -6,7 +6,11 @@ import { NodeRenderer } from "./node-renderer";
|
||||
export const SceneRenderer = () => {
|
||||
const rootNodes = useScene((state) => state.rootNodeIds);
|
||||
|
||||
return rootNodes.map((nodeId) => (
|
||||
<NodeRenderer key={nodeId} nodeId={nodeId} />
|
||||
));
|
||||
return (
|
||||
<group name="scene-renderer">
|
||||
{rootNodes.map((nodeId) => (
|
||||
<NodeRenderer key={nodeId} nodeId={nodeId} />
|
||||
))}
|
||||
</group>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -45,6 +45,10 @@ type ViewerState = {
|
||||
resetSelection: () => void;
|
||||
|
||||
outliner: Outliner; // No setter as we will manipulate directly the arrays
|
||||
|
||||
// Export functionality
|
||||
exportScene: (() => Promise<void>) | null;
|
||||
setExportScene: (fn: (() => Promise<void>) | null) => void;
|
||||
};
|
||||
|
||||
const useViewer = create<ViewerState>()((set, get) => ({
|
||||
@@ -94,6 +98,9 @@ const useViewer = create<ViewerState>()((set, get) => ({
|
||||
}),
|
||||
|
||||
outliner: { selectedObjects: [], hoveredObjects: [] },
|
||||
|
||||
exportScene: null,
|
||||
setExportScene: (fn) => set({ exportScene: fn }),
|
||||
}));
|
||||
|
||||
export default useViewer;
|
||||
|
||||
Reference in New Issue
Block a user