@@ -27,8 +27,11 @@ export default interface Input {
27
27
// InputHandler is a function that when called, returns the current Input state.
28
28
export type InputHandler = ( ) => Input ;
29
29
30
- // createInputHandler returns an InputHandler by attaching event handlers to the window.
31
- export function createInputHandler ( window : Window ) : InputHandler {
30
+ // createInputHandler returns an InputHandler by attaching event handlers to the window and canvas.
31
+ export function createInputHandler (
32
+ window : Window ,
33
+ canvas : HTMLCanvasElement
34
+ ) : InputHandler {
32
35
const digital = {
33
36
forward : false ,
34
37
backward : false ,
@@ -83,20 +86,22 @@ export function createInputHandler(window: Window): InputHandler {
83
86
84
87
window . addEventListener ( 'keydown' , ( e ) => setDigital ( e , true ) ) ;
85
88
window . addEventListener ( 'keyup' , ( e ) => setDigital ( e , false ) ) ;
86
- window . addEventListener ( 'mousedown' , ( ) => {
89
+
90
+ canvas . style . touchAction = 'pinch-zoom' ;
91
+ canvas . addEventListener ( 'pointerdown' , ( ) => {
87
92
mouseDown = true ;
88
93
} ) ;
89
- window . addEventListener ( 'mouseup ' , ( ) => {
94
+ canvas . addEventListener ( 'pointerup ' , ( ) => {
90
95
mouseDown = false ;
91
96
} ) ;
92
- window . addEventListener ( 'mousemove ' , ( e ) => {
93
- mouseDown = ( e . buttons & 1 ) !== 0 ;
97
+ canvas . addEventListener ( 'pointermove ' , ( e ) => {
98
+ mouseDown = e . pointerType == 'mouse' ? ( e . buttons & 1 ) !== 0 : true ;
94
99
if ( mouseDown ) {
95
100
analog . x += e . movementX ;
96
101
analog . y += e . movementY ;
97
102
}
98
103
} ) ;
99
- window . addEventListener (
104
+ canvas . addEventListener (
100
105
'wheel' ,
101
106
( e ) => {
102
107
mouseDown = ( e . buttons & 1 ) !== 0 ;
0 commit comments