diff --git a/hera/ui/PlayerCard.tsx b/hera/ui/PlayerCard.tsx index 522ad9c2..6e6b6f64 100644 --- a/hera/ui/PlayerCard.tsx +++ b/hera/ui/PlayerCard.tsx @@ -226,7 +226,7 @@ export default memo(function PlayerCard({ {player.id}. {user?.displayName} {isBot(player) && } - + - {winConditions - .filter( - (condition) => - !condition.hidden && - (winConditionHasAmounts(condition) || - condition.type === WinCriteria.Survival) && - matchesPlayerList(condition.players, player.id), - ) - .map((condition, index) => { - const [icon, status, amount] = - condition.type === WinCriteria.DefeatAmount - ? [ - Crosshair, - player.stats.destroyedUnits, - condition.amount, - ] - : condition.type === WinCriteria.CaptureAmount + + {winConditions + .filter( + (condition) => + !condition.hidden && + (winConditionHasAmounts(condition) || + condition.type === WinCriteria.Survival) && + matchesPlayerList(condition.players, player.id) && + !condition.completed?.has(player.id), + ) + .map((condition, index) => { + const [icon, status, amount] = + condition.type === WinCriteria.DefeatAmount ? [ - Flag, - capturedByPlayer(map, player.id), + Crosshair, + player.stats.destroyedUnits, condition.amount, ] - : condition.type === WinCriteria.DestroyAmount + : condition.type === WinCriteria.CaptureAmount ? [ - Buildings, - destroyedBuildingsByPlayer(map, player.id), + Flag, + capturedByPlayer(map, player.id), condition.amount, ] - : condition.type === WinCriteria.EscortAmount + : condition.type === WinCriteria.DestroyAmount ? [ - Escort, - escortedByPlayer( - map, - player.id, - condition.vectors, - condition.label, - ), + Buildings, + destroyedBuildingsByPlayer(map, player.id), condition.amount, ] - : condition.type === WinCriteria.Survival - ? [Hourglass, map.round, condition.rounds] - : [null, null]; - - return ( - (icon && status != null && ( - -
- - {status} -
-
/
-
{amount}
-
- )) || - null - ); - })} + : condition.type === WinCriteria.EscortAmount + ? [ + Escort, + escortedByPlayer( + map, + player.id, + condition.vectors, + condition.label, + ), + condition.amount, + ] + : condition.type === WinCriteria.Survival + ? [Hourglass, map.round, condition.rounds] + : [null, null]; + + return ( + (icon && status != null && ( + +
+ + {status} +
+
/
+
{amount}
+
+ )) || + null + ); + })} +
{wide && ( - - {( - [ - [Reload, () => calculateFunds(map, player)], + + + + + {shouldShow ? calculateFunds(map, player) : '???'} + + + + {( [ - HumanHandsdown, - () => - map.units.filter((unit) => - map.matchesPlayer(unit, player), - ).size, - ], - [ - Buildings, - () => - map.buildings.filter((building) => - map.matchesPlayer(building, player), - ).size, - ], - ] as const - ).map(([icon, getValue], index) => ( - - - {shouldShow ? getValue() : '???'} - - ))} + [ + HumanHandsdown, + () => + map.units.filter((unit) => + map.matchesPlayer(unit, player), + ).size, + ], + [ + Buildings, + () => + map.buildings.filter((building) => + map.matchesPlayer(building, player), + ).size, + ], + ] as const + ).map(([icon, getValue], index) => ( + + + {shouldShow ? getValue() : '???'} + + ))} + )} @@ -474,6 +492,7 @@ const skillStyle = css` const fundStyle = css` margin-top: -1px; + flex-shrink: 0; `; const playerStatsStyle = css`