mirror of
https://github.com/storytold/spark.git
synced 2026-10-09 00:09:53 +00:00
42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { SplatMesh } from "@sparkjsdev/spark";
|
|
import { getAssetFileURL } from "/examples/js/get-asset-url.js";
|
|
|
|
// Add loading icon in the center of the screen
|
|
function addLoader(loading_icon_color) {
|
|
const loaderIcon = new Image();
|
|
loaderIcon.src = `/examples/js/spark_loading_${loading_icon_color}.gif`;
|
|
loaderIcon.id = "_spark_loader";
|
|
loaderIcon.style.position = "absolute";
|
|
loaderIcon.style.zIndex = 99999;
|
|
loaderIcon.style.left = "50%";
|
|
loaderIcon.style.top = "50%";
|
|
loaderIcon.style.transform = "translate(-50%, -50%)";
|
|
loaderIcon.style.pointerEvents = "none";
|
|
document.body.appendChild(loaderIcon);
|
|
}
|
|
|
|
function removeLoader() {
|
|
const el = document.getElementById("_spark_loader");
|
|
el.parentNode.removeChild(el);
|
|
}
|
|
|
|
// preload splats, returning a map [filename -> SplatMesh]
|
|
export async function preloadSplats(assets, loading_icon_color = "white") {
|
|
addLoader(loading_icon_color);
|
|
const map = {};
|
|
await Promise.all(
|
|
assets.map(async (asset) => {
|
|
const splatURL = await getAssetFileURL(asset);
|
|
return new Promise((resolve) => {
|
|
map[asset] = new SplatMesh({
|
|
url: splatURL,
|
|
onLoad: () => resolve(),
|
|
});
|
|
});
|
|
}),
|
|
);
|
|
|
|
removeLoader();
|
|
return map;
|
|
}
|