diff --git a/assets/config.json b/assets/config.json index 67675d0..3031626 100644 --- a/assets/config.json +++ b/assets/config.json @@ -1,6 +1,6 @@ { "touchscreen": { - "mode": "joystick", + "mode": "swipe", "deadzone": 10, "buffer": false }, diff --git a/src/js/main.js b/src/js/main.js index dd9c9da..465fbd8 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -177,4 +177,32 @@ }); } + if(config.touchscreen.mode=='swipe') { + let center={x: 0, y: 0}; + window.center=center; + window.addEventListener('touchstart', e => { + center.x=e.touches[0].clientX; + center.y=e.touches[0].clientY; + }); + window.addEventListener('touchmove', e => { + let x=e.touches[0].clientX-center.x; + let y=e.touches[0].clientY-center.y; + const angle=((Math.atan2(x, y)+2*Math.PI)%(2*Math.PI))/Math.PI; + const magnitude=Math.hypot(x, y); + + let inputs=currentInputs; + if(magnitude>config.touchscreen.deadzone) { + if(angle>.25 && angle <.75) inputs.right=true; + else if(angle>.75 && angle<1.25) inputs.up=true; + else if(angle>1.25 && angle<1.75) inputs.left=true; + else inputs.down=true; + + center.x=e.touches[0].clientX; + center.y=e.touches[0].clientY; + } + + if(!config.touchscreen.buffer) inputs.clearBuffer=true; + }); + } + })();