more scores

This commit is contained in:
Vinzenz Schroeter 2024-04-22 21:26:46 +02:00
parent a486f73046
commit 10f022c849
5 changed files with 26 additions and 4 deletions

View file

@ -65,13 +65,18 @@ export default function PlayerInfo({playerId}: { playerId: Guid }) {
<table> <table>
<tbody> <tbody>
<ScoreRow name="controls" value={lastJsonMessage.controls}/> <ScoreRow name="controls" value={lastJsonMessage.controls}/>
<ScoreRow name="kills" value={lastJsonMessage.scores.kills}/>
<ScoreRow name="deaths" value={lastJsonMessage.scores.deaths}/>
<ScoreRow name="walls" value={lastJsonMessage.scores.wallsDestroyed}/>
<ScoreRow name="explosive bullets" value={lastJsonMessage.tank?.explosiveBullets}/> <ScoreRow name="explosive bullets" value={lastJsonMessage.tank?.explosiveBullets}/>
<ScoreRow name="position" value={lastJsonMessage.tank?.position}/> <ScoreRow name="position" value={lastJsonMessage.tank?.position}/>
<ScoreRow name="orientation" value={lastJsonMessage.tank?.orientation}/> <ScoreRow name="orientation" value={lastJsonMessage.tank?.orientation}/>
<ScoreRow name="moving" value={lastJsonMessage.tank?.moving}/> <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="score" value={lastJsonMessage.scores.overallScore}/>
</tbody> </tbody>
</table> </table>
</Column>; </Column>;

View file

@ -47,6 +47,16 @@ export default function Scoreboard({}: {}) {
field: 'walls', field: 'walls',
visualize: p => p.scores.wallsDestroyed.toString(), visualize: p => p.scores.wallsDestroyed.toString(),
sorter: (a, b) => numberSorter(a.scores.wallsDestroyed, b.scores.wallsDestroyed) sorter: (a, b) => numberSorter(a.scores.wallsDestroyed, b.scores.wallsDestroyed)
},
{
field: 'bullets',
visualize: p => p.scores.shotsFired.toString(),
sorter: (a, b) => numberSorter(a.scores.shotsFired, b.scores.shotsFired)
},
{
field: 'score',
visualize: p => p.scores.overallScore.toString(),
sorter: (a, b) => numberSorter(a.scores.overallScore, b.scores.overallScore)
} }
]}/> ]}/>
} }

View file

@ -1,7 +1,7 @@
import {Guid} from './Guid.ts'; import {Guid} from './Guid.ts';
export function makeApiUrl(path: string, protocol: 'http' | 'ws' = 'http') { export function makeApiUrl(path: string, protocol: 'http' | 'ws' = 'http') {
return new URL(`${protocol}://${window.location.hostname}${path}`); return new URL(`${protocol}://${window.location.hostname}${path}`);
} }
export type ServerResponse<T> = { export type ServerResponse<T> = {
@ -16,6 +16,8 @@ export type Scores = {
readonly kills: number; readonly kills: number;
readonly deaths: number; readonly deaths: number;
readonly wallsDestroyed: number; readonly wallsDestroyed: number;
readonly shotsFired: number;
readonly overallScore: number;
}; };
export type Player = { export type Player = {

View file

@ -30,6 +30,7 @@ internal sealed class ShootFromTanks(
if (explosive) if (explosive)
tank.ExplosiveBullets--; tank.ExplosiveBullets--;
tank.Owner.Scores.ShotsFired++;
entityManager.SpawnBullet(tank.Owner, tank.Position, tank.Orientation / 16d, explosive); entityManager.SpawnBullet(tank.Owner, tank.Position, tank.Orientation / 16d, explosive);
} }
} }

View file

@ -19,4 +19,8 @@ internal sealed record class Scores
} }
public int WallsDestroyed { get; set; } public int WallsDestroyed { get; set; }
public int ShotsFired { get; set; }
public int OverallScore => Math.Max(0, 10000 * Kills - 1000 * Deaths + 10 * ShotsFired + 10 * WallsDestroyed);
} }