immersive2/src/util/appConfig.ts
Michael Mainguy 6ad04bb21a Refactor config naming and upgrade dependencies
Config changes:
- Renamed gridSnap to locationSnap for clarity
- Fixed configMenu to reference correct property
- Added debug logging to setAppConfig

Code cleanup:
- Removed commented duplicate exitXR call

Dependencies:
- Upgraded @babylonjs packages from 7.21.5 to 8.16.2
- Upgraded @mantine packages from 7.12.0 to 7.17.8

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 21:36:56 -06:00

119 lines
3.2 KiB
TypeScript

import {Observable} from "@babylonjs/core";
import {AppConfigType} from "./appConfigType";
import log from "loglevel";
export class AppConfig {
public readonly onConfigChangedObservable = new Observable<AppConfigType>();
private _currentConfig: AppConfigType;
public readonly defaultConfig: AppConfigType = {
id: 1,
locationSnap: .1,
rotateSnap: 90,
createSnap: .1,
turnSnap: 22.5,
newRelicKey: null,
newRelicAccount: null,
physicsEnabled: false,
flyMode: true
}
constructor() {
this._currentConfig = this.defaultConfig;
try {
const config = JSON.parse(localStorage.getItem('appConfig'));
if (config) {
this._currentConfig = config;
} else {
localStorage.setItem('appConfig', JSON.stringify(this._currentConfig));
}
} catch (err) {
console.error(err);
}
this.onConfigChangedObservable.add((config) => {
this._currentConfig = config;
}, -1);
}
public get current(): AppConfigType {
return this._currentConfig;
}
public set current(config: AppConfigType) {
this._currentConfig = config;
localStorage.setItem('appConfig', JSON.stringify(this._currentConfig));
this.onConfigChangedObservable.notifyObservers(this._currentConfig, -1);
}
public setRotateSnap(value: number) {
this._currentConfig.rotateSnap = value;
this.save();
}
public setFlyMode(value: boolean) {
this._currentConfig.flyMode = value;
this.save();
}
public setCreateSnap(value: number) {
this._currentConfig.createSnap = value;
this.save();
}
public setTurnSnap(value: number) {
this._currentConfig.turnSnap = value;
this.save();
}
public setGridSnap(value: number) {
this._currentConfig.locationSnap = value;
this.save();
}
public setPhysicsEnabled(physicsEnabled: boolean) {
this._currentConfig.physicsEnabled = physicsEnabled;
this.save();
}
private save() {
localStorage.setItem('appConfig', JSON.stringify(this._currentConfig));
this.onConfigChangedObservable.notifyObservers(this._currentConfig, -1);
}
}
let defaultConfig: ConfigType =
{
locationSnap: '.1',
locationSnapEnabled: true,
rotationSnap: '90',
rotationSnapEnabled: true,
flyModeEnabled: true,
snapTurnSnap: '45',
snapTurnSnapEnabled: false
}
try {
const newConfig = JSON.parse(localStorage.getItem('config'));
defaultConfig = {...defaultConfig, ...newConfig};
} catch (e) {
}
export type ConfigType = {
locationSnap: string,
locationSnapEnabled: boolean,
rotationSnap: string,
rotationSnapEnabled: boolean,
flyModeEnabled: boolean,
snapTurnSnap: string,
snapTurnSnapEnabled: boolean
}
export function getAppConfig(): ConfigType {
return defaultConfig;
}
export function setAppConfig(config: ConfigType) {
const logger = log.getLogger('setAppConfig');
logger.debug('setting config', JSON.stringify(config));
localStorage.setItem('config', JSON.stringify(config));
}