misc improvements

This commit is contained in:
Yeicor
2024-02-10 13:37:30 +01:00
parent dda1162953
commit f8ee906f45
11 changed files with 113 additions and 44 deletions

View File

@@ -1,31 +1,48 @@
// @ts-ignore
import skyboxUrl from '../assets/st_peters_square_night_8k.jpg';
// @ts-ignore
import logo from "url:../assets/fox.glb";
// import logo from "url:../assets/fox.glb";
// These are the default values for the settings, which are overridden below
export const settings = {
// @ts-ignore
preloadModels: [new URL('../assets/fox.glb', import.meta.url).href, "ws://localhost:8080/api/updates"],
// ModelViewer settings
preloadModel: logo,
autoplay: true,
arModes: 'webxr scene-viewer quick-look',
exposure: 1,
shadowIntensity: 0,
background: skyboxUrl,
background: '',
}
const firstTimeNames = []; // Needed for array values, which clear the array when overridden
function parseSetting(name: string, value: string): any {
let arrayElem = name.endsWith(".0")
if (arrayElem) name = name.slice(0, -2);
let prevValue = settings[name];
if (prevValue === undefined) throw new Error(`Unknown setting: ${name}`);
if (Array.isArray(prevValue) && !arrayElem) {
let toExtend = []
if (!firstTimeNames.includes(name)) {
firstTimeNames.push(name);
} else {
toExtend = prevValue;
}
toExtend.push(parseSetting(name+".0", value));
return toExtend;
}
switch (typeof prevValue) {
case 'boolean':
return value === 'true';
case 'number':
return Number(value);
case 'string':
return value;
default:
throw new Error(`Unknown setting type: ${typeof prevValue}`);
}
}
// Auto-override any settings from the URL
const url = new URL(window.location.href);
url.searchParams.forEach((value, key) => {
if (key in settings) {
switch (typeof settings[key]) {
case 'boolean':
settings[key] = value === 'true';
break;
case 'number':
settings[key] = Number(value);
break;
default:
settings[key] = value;
}
}
if (key in settings) settings[key] = parseSetting(key, value);
})