import {makeApiUrl, Scores} from './serverCalls';
import {Guid} from './Guid.ts';
import Column from './components/Column.tsx';
import useWebSocket, {ReadyState} from 'react-use-websocket';
import {useEffect, useState} from 'react';
function ScoreRow({name, value}: {
name: string;
value?: any;
}) {
return
{name} |
{value ?? '?'} |
;
}
type Controls = {
readonly forward: boolean;
readonly backward: boolean;
readonly turnLeft: boolean;
readonly turnRight: boolean;
readonly shoot: boolean;
}
type PlayerInfoMessage = {
readonly name: string;
readonly scores: Scores;
readonly controls: Controls;
}
function controlsString(controls: Controls) {
let str = "";
if (controls.forward)
str += "▲";
if (controls.backward)
str += "▼";
if (controls.turnLeft)
str += "◄";
if (controls.turnRight)
str += "►";
if (controls.shoot)
str += "•";
return str;
}
export default function PlayerInfo({playerId}: { playerId: Guid }) {
const [shouldSendMessage, setShouldSendMessage] = useState(true);
const url = makeApiUrl('/player');
url.searchParams.set('id', playerId);
const {lastJsonMessage, readyState, sendMessage} = useWebSocket(url.toString(), {
onMessage: () => setShouldSendMessage(true)
});
useEffect(() => {
if (!shouldSendMessage || readyState !== ReadyState.OPEN)
return;
setShouldSendMessage(false);
sendMessage('');
}, [readyState, shouldSendMessage]);
if (!lastJsonMessage)
return <>>;
return
Playing as {lastJsonMessage.name}
;
}