2024-05-05 13:51:59 +02:00
|
|
|
import {makeApiUrl, PlayerInfoMessage, useMyWebSocket} from './serverCalls';
|
2024-04-22 19:03:07 +02:00
|
|
|
import Column from './components/Column.tsx';
|
2024-04-30 10:52:29 +02:00
|
|
|
import {ReadyState} from 'react-use-websocket';
|
2024-04-22 19:03:07 +02:00
|
|
|
import {useEffect, useState} from 'react';
|
2024-04-13 17:56:33 +02:00
|
|
|
|
2024-04-19 13:50:06 +02:00
|
|
|
function ScoreRow({name, value}: {
|
|
|
|
name: string;
|
2024-04-22 19:44:28 +02:00
|
|
|
value?: string | any;
|
2024-04-19 13:50:06 +02:00
|
|
|
}) {
|
2024-04-22 19:44:28 +02:00
|
|
|
let valueStr;
|
|
|
|
if (value === undefined)
|
|
|
|
valueStr = '?';
|
|
|
|
else if (typeof value === 'string' || value instanceof String)
|
|
|
|
valueStr = value;
|
|
|
|
else
|
|
|
|
valueStr = JSON.stringify(value);
|
|
|
|
|
2024-04-19 13:50:06 +02:00
|
|
|
return <tr>
|
|
|
|
<td>{name}</td>
|
2024-04-22 19:44:28 +02:00
|
|
|
<td>{valueStr}</td>
|
2024-04-19 13:50:06 +02:00
|
|
|
</tr>;
|
|
|
|
}
|
2024-04-22 19:03:07 +02:00
|
|
|
|
2024-04-28 12:53:18 +02:00
|
|
|
export default function PlayerInfo({player}: { player: string }) {
|
2024-04-22 19:44:28 +02:00
|
|
|
const [shouldSendMessage, setShouldSendMessage] = useState(false);
|
2024-04-22 19:03:07 +02:00
|
|
|
|
|
|
|
const url = makeApiUrl('/player');
|
2024-04-28 12:53:18 +02:00
|
|
|
url.searchParams.set('name', player);
|
2024-04-22 19:03:07 +02:00
|
|
|
|
2024-04-30 10:52:29 +02:00
|
|
|
const {
|
|
|
|
lastJsonMessage,
|
|
|
|
readyState,
|
|
|
|
sendMessage
|
|
|
|
} = useMyWebSocket<PlayerInfoMessage>(url.toString(), {
|
2024-05-04 14:25:37 +02:00
|
|
|
onMessage: () => setShouldSendMessage(true),
|
|
|
|
onOpen: _ => setShouldSendMessage(true)
|
2024-04-17 23:09:01 +02:00
|
|
|
});
|
2024-04-13 17:56:33 +02:00
|
|
|
|
2024-04-22 19:03:07 +02:00
|
|
|
useEffect(() => {
|
|
|
|
if (!shouldSendMessage || readyState !== ReadyState.OPEN)
|
|
|
|
return;
|
|
|
|
setShouldSendMessage(false);
|
|
|
|
sendMessage('');
|
|
|
|
}, [readyState, shouldSendMessage]);
|
|
|
|
|
2024-05-02 19:07:46 +02:00
|
|
|
if (!lastJsonMessage || readyState !== ReadyState.OPEN)
|
2024-04-22 19:03:07 +02:00
|
|
|
return <></>;
|
|
|
|
|
2024-05-08 00:29:33 +02:00
|
|
|
let position = '';
|
|
|
|
if (lastJsonMessage.tank)
|
|
|
|
position = `(${Math.round(lastJsonMessage.tank.position.x)}|${Math.round(lastJsonMessage.tank.position.y)})`;
|
|
|
|
|
2024-04-22 19:03:07 +02:00
|
|
|
return <Column className="PlayerInfo">
|
2024-04-13 23:53:09 +02:00
|
|
|
<h3>
|
2024-05-08 00:29:33 +02:00
|
|
|
Playing as {lastJsonMessage.player.name}
|
2024-04-13 23:53:09 +02:00
|
|
|
</h3>
|
2024-04-22 19:03:07 +02:00
|
|
|
<table>
|
2024-04-14 00:49:39 +02:00
|
|
|
<tbody>
|
2024-04-29 16:39:37 +02:00
|
|
|
<ScoreRow name="magazine" value={lastJsonMessage.tank?.magazine}/>
|
2024-04-22 20:13:31 +02:00
|
|
|
<ScoreRow name="controls" value={lastJsonMessage.controls}/>
|
2024-05-08 00:29:33 +02:00
|
|
|
<ScoreRow name="position" value={position}/>
|
2024-04-22 19:44:28 +02:00
|
|
|
<ScoreRow name="orientation" value={lastJsonMessage.tank?.orientation}/>
|
2024-05-08 00:29:33 +02:00
|
|
|
<ScoreRow name="bullet speed" value={lastJsonMessage.tank?.bulletStats.speed}/>
|
|
|
|
<ScoreRow name="bullet acceleration" value={lastJsonMessage.tank?.bulletStats.acceleration}/>
|
|
|
|
<ScoreRow name="smart bullets" value={lastJsonMessage.tank?.bulletStats.smart}/>
|
|
|
|
<ScoreRow name="explosive bullets" value={lastJsonMessage.tank?.bulletStats.explosive}/>
|
2024-04-22 21:26:46 +02:00
|
|
|
|
2024-05-08 00:29:33 +02:00
|
|
|
<ScoreRow name="kills" value={lastJsonMessage.player.scores.kills}/>
|
|
|
|
<ScoreRow name="deaths" value={lastJsonMessage.player.scores.deaths}/>
|
|
|
|
<ScoreRow name="walls destroyed" value={lastJsonMessage.player.scores.wallsDestroyed}/>
|
|
|
|
<ScoreRow name="bullets fired" value={lastJsonMessage.player.scores.shotsFired}/>
|
|
|
|
<ScoreRow name="power ups collected" value={lastJsonMessage.player.scores.powerUpsCollected}/>
|
|
|
|
<ScoreRow name="pixels moved" value={lastJsonMessage.player.scores.pixelsMoved}/>
|
|
|
|
<ScoreRow name="score" value={lastJsonMessage.player.scores.overallScore}/>
|
2024-04-22 21:26:46 +02:00
|
|
|
|
2024-05-08 00:29:33 +02:00
|
|
|
<ScoreRow name="moving" value={lastJsonMessage.tank?.moving}/>
|
|
|
|
<ScoreRow name="connections" value={lastJsonMessage.player.openConnections}/>
|
2024-04-14 00:49:39 +02:00
|
|
|
</tbody>
|
2024-04-22 19:03:07 +02:00
|
|
|
</table>
|
2024-04-13 23:07:08 +02:00
|
|
|
</Column>;
|
2024-04-13 17:56:33 +02:00
|
|
|
}
|