import * as React from 'react'; import {HOME_BUTTON_IMAGE} from '/constants'; import {sendKeyDown} from '/packet'; export interface OverlayControlsProps { firstMenuElement: React.RefObject, setHiddenMenu: (c: boolean) => void, webSocket: WebSocket | null; }; export default function OverlayControls({firstMenuElement, setHiddenMenu, webSocket}: OverlayControlsProps) { function showOverlayMenu() { setHiddenMenu(false); setTimeout(() => { if (firstMenuElement.current == null) { return; } firstMenuElement.current.focus(); }, 100); } const [onGoingTouches, setOnGoingTouches] = React.useState<{[id: string]: number}>({}); function mouseDown(e: React.MouseEvent | React.TouchEvent, key: number) { e.preventDefault(); if (webSocket == null) { console.log('There is not websocket'); return; } sendKeyDown(webSocket, true, key); } function touchStart(e: React.TouchEvent, key: number) { e.preventDefault(); if (webSocket == null) { console.log('There is not websocket'); return; } for (let i = 0; i < e.changedTouches.length; i++) { const touch = e.changedTouches[i]; const idx = touch.identifier; onGoingTouches[idx] = key; sendKeyDown(webSocket, true, key); } } function touchEnd(e: React.TouchEvent) { e.preventDefault(); if (webSocket == null) { console.log('There is not websocket'); return; } for (let i = 0; i < e.changedTouches.length; i++) { const touch = e.changedTouches[i]; const idx = touch.identifier; const key = onGoingTouches[idx]; delete onGoingTouches[idx]; sendKeyDown(webSocket, false, key); } } function mouseUp(e: React.MouseEvent | React.TouchEvent, key: number) { e.preventDefault(); if (webSocket == null) { console.log('There is not websocket'); return; } sendKeyDown(webSocket, false, key); } document.onselectstart = () => false; return (
Go to menu. (House icon) ) => mouseDown(e, 0)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 0)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 0)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-a control control-button">A ) => mouseDown(e, 1)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 1)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 1)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-b control control-button">B ) => mouseDown(e, 6)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 6)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 6)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-up control control-pad-button">^ ) => mouseDown(e, 7)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 7)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 7)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-down control control-pad-button">v ) => mouseDown(e, 8)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 8)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 8)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-left control control-pad-button">< ) => mouseDown(e, 9)} onMouseUp={(e: React.MouseEvent) => mouseUp(e, 9)} onTouchStart={(e: React.TouchEvent) => touchStart(e, 9)} onTouchEnd={(e: React.TouchEvent) => touchEnd(e)} onClick={(e: React.MouseEvent) => e.preventDefault()} className="control-right control control-pad-button">>
); }