|  |  |  | @ -8,6 +8,8 @@ | 
			
		
	
		
			
				
					|  |  |  |  | 	const nav=main.querySelector('nav'); | 
			
		
	
		
			
				
					|  |  |  |  | 	const canvas=main.querySelector('canvas'); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	const config=assets.get('config'); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	let currentGame=null; | 
			
		
	
		
			
				
					|  |  |  |  | 	let currentInputs={}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -61,12 +63,14 @@ | 
			
		
	
		
			
				
					|  |  |  |  | 		
 | 
			
		
	
		
			
				
					|  |  |  |  | 		const magnitude=Math.hypot(gp.axes[0], gp.axes[1]); | 
			
		
	
		
			
				
					|  |  |  |  | 		const angle=((Math.atan2(gp.axes[0], gp.axes[1])+2*Math.PI)%(2*Math.PI))/Math.PI; | 
			
		
	
		
			
				
					|  |  |  |  | 		if(magnitude>.5) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if(magnitude>config.gamepad.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; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		if(!config.gamepad.buffer) inputs.clearBuffer=true; | 
			
		
	
		
			
				
					|  |  |  |  | 	}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	window.addEventListener('hashchange', async () => { | 
			
		
	
	
		
			
				
					|  |  |  | @ -105,23 +109,51 @@ | 
			
		
	
		
			
				
					|  |  |  |  | 		else if(e.key=='ArrowDown') inputs.down=true; | 
			
		
	
		
			
				
					|  |  |  |  | 		else if(e.key=='ArrowLeft') inputs.left=true; | 
			
		
	
		
			
				
					|  |  |  |  | 		else if(e.key=='ArrowRight') inputs.right=true; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		if(!config.keyboard.buffer) inputs.clearBuffer=true; | 
			
		
	
		
			
				
					|  |  |  |  | 	}); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	const handleTouch=e => { | 
			
		
	
		
			
				
					|  |  |  |  | 		e.preventDefault(); | 
			
		
	
		
			
				
					|  |  |  |  | 		let x=e.touches[0].clientX-window.innerWidth/2; | 
			
		
	
		
			
				
					|  |  |  |  | 		let y=e.touches[0].clientY-window.innerHeight/2; | 
			
		
	
		
			
				
					|  |  |  |  | 		const angle=((Math.atan2(x, y)+2*Math.PI)%(2*Math.PI))/Math.PI; | 
			
		
	
		
			
				
					|  |  |  |  | 	if(config.touchscreen.mode=='crosspad') { | 
			
		
	
		
			
				
					|  |  |  |  | 		const handleTouch=e => { | 
			
		
	
		
			
				
					|  |  |  |  | 			let x=e.touches[0].clientX-window.innerWidth/2; | 
			
		
	
		
			
				
					|  |  |  |  | 			let y=e.touches[0].clientY-window.innerHeight/2; | 
			
		
	
		
			
				
					|  |  |  |  | 			const angle=((Math.atan2(x, y)+2*Math.PI)%(2*Math.PI))/Math.PI; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		let inputs=currentInputs; | 
			
		
	
		
			
				
					|  |  |  |  | 		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; | 
			
		
	
		
			
				
					|  |  |  |  | 			let inputs=currentInputs; | 
			
		
	
		
			
				
					|  |  |  |  | 			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; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		inputs.clearBuffer=true; | 
			
		
	
		
			
				
					|  |  |  |  | 	}; | 
			
		
	
		
			
				
					|  |  |  |  | 	window.addEventListener('touchstart', handleTouch); | 
			
		
	
		
			
				
					|  |  |  |  | 	window.addEventListener('touchmove', handleTouch); | 
			
		
	
		
			
				
					|  |  |  |  | 			if(!config.touchscreen.buffer) inputs.clearBuffer=true; | 
			
		
	
		
			
				
					|  |  |  |  | 		}; | 
			
		
	
		
			
				
					|  |  |  |  | 		window.addEventListener('touchstart', handleTouch); | 
			
		
	
		
			
				
					|  |  |  |  | 		window.addEventListener('touchmove', handleTouch); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if(config.touchscreen.mode=='joystick') { | 
			
		
	
		
			
				
					|  |  |  |  | 		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; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			if(!config.touchscreen.buffer) inputs.clearBuffer=true; | 
			
		
	
		
			
				
					|  |  |  |  | 		}); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | })(); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |