diff --git a/tank-frontend/src/PlayerInfo.tsx b/tank-frontend/src/PlayerInfo.tsx index 1339a2e..e6f9b16 100644 --- a/tank-frontend/src/PlayerInfo.tsx +++ b/tank-frontend/src/PlayerInfo.tsx @@ -75,6 +75,7 @@ export default function PlayerInfo({player}: { player: string }) { + diff --git a/tank-frontend/src/Scoreboard.tsx b/tank-frontend/src/Scoreboard.tsx index 739a564..821f099 100644 --- a/tank-frontend/src/Scoreboard.tsx +++ b/tank-frontend/src/Scoreboard.tsx @@ -58,6 +58,11 @@ export default function Scoreboard({}: {}) { visualize: p => p.scores.powerUpsCollected.toString(), sorter: (a, b) => numberSorter(a.scores.powerUpsCollected, b.scores.powerUpsCollected) }, + { + field: 'distance', + visualize: p => p.scores.pixelsMoved.toString(), + sorter: (a, b) => numberSorter(a.scores.pixelsMoved, b.scores.pixelsMoved) + }, { field: 'score', visualize: p => p.scores.overallScore.toString(), diff --git a/tank-frontend/src/serverCalls.tsx b/tank-frontend/src/serverCalls.tsx index aeabe63..d50fe87 100644 --- a/tank-frontend/src/serverCalls.tsx +++ b/tank-frontend/src/serverCalls.tsx @@ -9,6 +9,7 @@ export type Scores = { readonly shotsFired: number; readonly overallScore: number; readonly powerUpsCollected: number; + readonly pixelsMoved: number; }; export type Player = { diff --git a/tanks-backend/TanksServer/GameLogic/MoveTanks.cs b/tanks-backend/TanksServer/GameLogic/MoveTanks.cs index a007b03..0b36bfd 100644 --- a/tanks-backend/TanksServer/GameLogic/MoveTanks.cs +++ b/tanks-backend/TanksServer/GameLogic/MoveTanks.cs @@ -54,6 +54,7 @@ internal sealed class MoveTanks( if (HitsTank(tank, newPosition)) return false; + tank.Owner.Scores.DistanceMoved += newPosition.Distance(tank.Position); tank.Position = newPosition; return true; } diff --git a/tanks-backend/TanksServer/Models/Scores.cs b/tanks-backend/TanksServer/Models/Scores.cs index 7570223..8eda772 100644 --- a/tanks-backend/TanksServer/Models/Scores.cs +++ b/tanks-backend/TanksServer/Models/Scores.cs @@ -1,3 +1,5 @@ +using System.Text.Json.Serialization; + namespace TanksServer.Models; internal sealed record class Scores @@ -24,10 +26,15 @@ internal sealed record class Scores public int PowerUpsCollected { get; set; } + [JsonIgnore] public double DistanceMoved { get; set; } + + public int PixelsMoved => (int)DistanceMoved; + public int OverallScore => Math.Max(0, 10000 * Kills - 1000 * Deaths + 100 * PowerUpsCollected + 10 * (ShotsFired + WallsDestroyed) + + PixelsMoved ); }