🪰 Adds orientation store
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { readable } from 'svelte/store';
|
||||
|
||||
export const heading = readable(0, (set) => {
|
||||
const updateHeading = (e: any) => {
|
||||
let alpha;
|
||||
if (e.webkitCompassHeading) alpha = e.webkitCompassHeading;
|
||||
else if (e.alpha) alpha = e.alpha;
|
||||
else {
|
||||
let q = e.target.quaternion;
|
||||
alpha =
|
||||
Math.atan2(2 * q[0] * q[1] + 2 * q[2] * q[3], 1 - 2 * q[1] * q[1] - 2 * q[2] * q[2]) *
|
||||
(180 / Math.PI);
|
||||
if (alpha < 0) alpha += 360;
|
||||
}
|
||||
set(alpha);
|
||||
};
|
||||
if ('AbsoluteOrientationSensor' in window) {
|
||||
var sensor = new window.AbsoluteOrientationSensor({ frequency: 60 }) as any;
|
||||
sensor.addEventListener('reading', updateHeading);
|
||||
sensor.start();
|
||||
} else if (window.DeviceMotionEvent) window.addEventListener('deviceorientation', updateHeading);
|
||||
|
||||
return () => {
|
||||
if ('AbsoluteOrientationSensor' in window) sensor.removeEventListener('reading', updateHeading);
|
||||
window.addEventListener('deviceorientation', updateHeading);
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user