forked from MapComplete/MapComplete
33 lines
886 B
TypeScript
33 lines
886 B
TypeScript
import { UIEventSource } from "../Logic/UIEventSource"
|
|
|
|
export default class Motion {
|
|
public static singleton = new Motion()
|
|
/**
|
|
* In m/s²
|
|
*/
|
|
public maxAcc = new UIEventSource<number>(0)
|
|
|
|
public lastShakeEvent = new UIEventSource<Date>(undefined)
|
|
|
|
private isListening = false
|
|
private constructor() {
|
|
this.startListening()
|
|
}
|
|
|
|
private onUpdate(eventData: DeviceMotionEvent) {
|
|
const acc = eventData.acceleration
|
|
this.maxAcc.setData(Math.max(acc.x, acc.y, acc.z))
|
|
if (this.maxAcc.data > 22) {
|
|
this.lastShakeEvent.setData(new Date())
|
|
}
|
|
}
|
|
|
|
startListening() {
|
|
if (this.isListening) {
|
|
return
|
|
}
|
|
this.isListening = true
|
|
console.log("Listening to motion events", this)
|
|
window.addEventListener("devicemotion", (e) => this.onUpdate(e))
|
|
}
|
|
}
|