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`