move upgrades to tank, serialize objects directly

This commit is contained in:
Vinzenz Schroeter 2024-05-08 00:29:33 +02:00
parent b1df817ece
commit 827b3a9330
16 changed files with 135 additions and 180 deletions

View file

@ -46,29 +46,35 @@ export default function PlayerInfo({player}: { player: string }) {
if (!lastJsonMessage || readyState !== ReadyState.OPEN)
return <></>;
let position = '';
if (lastJsonMessage.tank)
position = `(${Math.round(lastJsonMessage.tank.position.x)}|${Math.round(lastJsonMessage.tank.position.y)})`;
return <Column className="PlayerInfo">
<h3>
Playing as {lastJsonMessage.name}
Playing as {lastJsonMessage.player.name}
</h3>
<table>
<tbody>
<ScoreRow name="magazine" value={lastJsonMessage.tank?.magazine}/>
<ScoreRow name="controls" value={lastJsonMessage.controls}/>
<ScoreRow name="position" value={lastJsonMessage.tank?.position}/>
<ScoreRow name="position" value={position}/>
<ScoreRow name="orientation" value={lastJsonMessage.tank?.orientation}/>
<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}/>
<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}/>
<ScoreRow name="moving" value={lastJsonMessage.tank?.moving}/>
<ScoreRow name="kills" value={lastJsonMessage.scores.kills}/>
<ScoreRow name="deaths" value={lastJsonMessage.scores.deaths}/>
<ScoreRow name="walls destroyed" value={lastJsonMessage.scores.wallsDestroyed}/>
<ScoreRow name="bullets fired" value={lastJsonMessage.scores.shotsFired}/>
<ScoreRow name="power ups collected" value={lastJsonMessage.scores.powerUpsCollected}/>
<ScoreRow name="pixels moved" value={lastJsonMessage.scores.pixelsMoved}/>
<ScoreRow name="score" value={lastJsonMessage.scores.overallScore}/>
<ScoreRow name="connections" value={lastJsonMessage.openConnections}/>
<ScoreRow name="connections" value={lastJsonMessage.player.openConnections}/>
</tbody>
</table>
</Column>;

View file

@ -14,24 +14,32 @@ export type Scores = {
readonly pixelsMoved: number;
};
export type Player = {
readonly name: string;
readonly scores: Scores;
};
type TankInfo = {
readonly magazine: string;
type Tank = {
readonly position: { x: number; y: number };
readonly orientation: number;
readonly moving: boolean;
readonly bulletStats: BulletStats;
readonly reloadingUntil: string;
readonly nextShotAfter: string;
readonly magazine: {
readonly empty: boolean;
readonly usedBullets: number;
readonly maxBullets: number;
readonly displayString: string;
};
}
export type Player = {
readonly name: string;
readonly scores: Scores;
readonly openConnections: number;
readonly lastInput: string;
}
export type PlayerInfoMessage = {
readonly name: string;
readonly scores: Scores;
readonly player: Player;
readonly controls: string;
readonly tank?: TankInfo;
readonly openConnections: number;
readonly tank?: Tank;
}
export type MapInfo = {
@ -40,6 +48,13 @@ export type MapInfo = {
readonly preview: string;
}
export type BulletStats = {
speed: number;
acceleration: number,
explosive: boolean,
smart: boolean
};
export function useMyWebSocket<T = unknown>(url: string, options: Options = {}) {
return useWebSocket<T>(url, {
shouldReconnect: () => true,