prendy
Version:
Make games with prerendered backdrops using babylonjs and repond
35 lines (34 loc) • 1.27 kB
JavaScript
import { SceneLoader, } from "@babylonjs/core";
import "@babylonjs/loaders/glTF";
import { keyBy } from "chootils/dist/arrays";
import { useEffect } from "react";
import usePromise from "react-promise-suspense";
import { getScene } from "./getSceneOrEngineUtils";
// const { getScene } = makeGetSceneOrEngineUtils(storeHelpers);
export function useModelFile(modelFile) {
const scene = getScene();
const container = usePromise(SceneLoader.LoadAssetContainerAsync, [modelFile, undefined, scene]);
useEffect(() => {
// trying to get this more declarative
container.addAllToScene();
return () => container.removeAllFromScene();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const meshes = keyBy(container.meshes);
const materials = keyBy(container.materials);
const textures = keyBy(container.textures);
const transformNodes = keyBy(container.transformNodes);
const animationGroups = keyBy(container.animationGroups);
const skeletons = keyBy(container.skeletons);
const cameras = keyBy(container.cameras);
return {
meshes,
materials,
textures,
transformNodes,
animationGroups,
skeletons,
cameras,
container,
};
}