Hey @BlockDoc23,
Instead of using setTimeout, you should try using scene.onBeforeRenderObservable to ensure you only update once per frame. See this gameloop pg: https://playground.babylonjs.com/#15EY4F#0
For applying constant force try this: https://www.babylonjs-playground.com/#BEFOO#363
For camera rotation/movement see this https://playground.babylonjs.com/ts.html#0ZP9MH#4
For mousemovement maybe this thread will help Firefox pointerlock + mousemove + mousedown behavior