1
0
Fork 0

feat(profiles): track EOD minesweeper progress

This commit is contained in:
Jason Fraley 2026-08-26 22:04:48 -04:00
parent 512cdd62ad
commit 3e82ef4ed9
3 changed files with 93 additions and 6 deletions

View file

@ -107,11 +107,17 @@ export const Profiles: CollectionConfig = {
let xpAcc = 0; let xpAcc = 0;
const progressionData = siblingData as { const progressionData = siblingData as {
awards?: Array<{ awards?: Array<
award?: number | Award; | {
} | number>; award?: number | Award;
}
| number
>;
scoreboard?: Record<string, number | null>; scoreboard?: Record<string, number | null>;
minigames?: { flappyBird?: { xpEarned?: number | null } }; minigames?: {
flappyBird?: { xpEarned?: number | null };
eodMinesweeper?: { xpEarned?: number | null };
};
}; };
const awardsList = progressionData?.awards || []; const awardsList = progressionData?.awards || [];
const awardIds = awardsList.flatMap((entry) => { const awardIds = awardsList.flatMap((entry) => {
@ -122,6 +128,7 @@ export const Profiles: CollectionConfig = {
}); });
const scoreboard = progressionData?.scoreboard || {}; const scoreboard = progressionData?.scoreboard || {};
const flappyXp = progressionData?.minigames?.flappyBird?.xpEarned ?? 0; const flappyXp = progressionData?.minigames?.flappyBird?.xpEarned ?? 0;
const eodXp = progressionData?.minigames?.eodMinesweeper?.xpEarned ?? 0;
if (awardIds.length > 0) { if (awardIds.length > 0) {
await req.payload await req.payload
@ -159,6 +166,8 @@ export const Profiles: CollectionConfig = {
// Flappy Bird training sim: 1 XP per 15 pipes passed in a single run // Flappy Bird training sim: 1 XP per 15 pipes passed in a single run
xpAcc += flappyXp; xpAcc += flappyXp;
// EOD Minesweeper: XP from cleared minefields
xpAcc += eodXp;
return xpAcc; return xpAcc;
}, },
@ -175,7 +184,7 @@ export const Profiles: CollectionConfig = {
relationTo: "awards", relationTo: "awards",
required: true, required: true,
admin: { admin: {
appearance: "drawer" appearance: "drawer",
}, },
}, },
{ {
@ -186,7 +195,8 @@ export const Profiles: CollectionConfig = {
// issuer's progression/awards when a profile is read. // issuer's progression/awards when a profile is read.
maxDepth: 0, maxDepth: 0,
admin: { admin: {
description: 'Who issued the award. If no one, the award will be attributed as "on behalf of the unit."', description:
'Who issued the award. If no one, the award will be attributed as "on behalf of the unit."',
}, },
}, },
{ {
@ -285,6 +295,60 @@ export const Profiles: CollectionConfig = {
}, },
], ],
}, },
{
name: "eodMinesweeper",
label: "EOD Minesweeper",
type: "group",
fields: [
{
name: "gamesPlayed",
type: "number",
defaultValue: 0,
},
{
name: "wins",
label: "Wins",
type: "number",
defaultValue: 0,
},
{
name: "losses",
label: "Losses",
type: "number",
defaultValue: 0,
},
{
name: "bestScore",
label: "Best Score",
type: "number",
defaultValue: 0,
},
{
name: "xpEarned",
label: "XP Earned",
type: "number",
defaultValue: 0,
},
{
name: "bestTrainingTime",
label: "Best Training Pad Time (s)",
type: "number",
defaultValue: 0,
},
{
name: "bestPerimeterTime",
label: "Best FOB Perimeter Time (s)",
type: "number",
defaultValue: 0,
},
{
name: "bestSupplyRoadTime",
label: "Best Main Supply Road Time (s)",
type: "number",
defaultValue: 0,
},
],
},
], ],
}, },
], ],

View file

@ -1677,6 +1677,16 @@ export interface Profile {
bestScore?: number | null; bestScore?: number | null;
xpEarned?: number | null; xpEarned?: number | null;
}; };
eodMinesweeper?: {
gamesPlayed?: number | null;
wins?: number | null;
losses?: number | null;
bestScore?: number | null;
xpEarned?: number | null;
bestTrainingTime?: number | null;
bestPerimeterTime?: number | null;
bestSupplyRoadTime?: number | null;
};
}; };
}; };
updatedAt: string; updatedAt: string;
@ -3456,6 +3466,18 @@ export interface ProfilesSelect<T extends boolean = true> {
bestScore?: T; bestScore?: T;
xpEarned?: T; xpEarned?: T;
}; };
eodMinesweeper?:
| T
| {
gamesPlayed?: T;
wins?: T;
losses?: T;
bestScore?: T;
xpEarned?: T;
bestTrainingTime?: T;
bestPerimeterTime?: T;
bestSupplyRoadTime?: T;
};
}; };
}; };
updatedAt?: T; updatedAt?: T;

View file

@ -62,6 +62,7 @@ export const EventTypes = {
// Minigames // Minigames
MinigameFlappy: "minigame:flappy", MinigameFlappy: "minigame:flappy",
MinigameEod: "minigame:eod",
// Market // Market
MarketListingCreate: "market:listing-create", MarketListingCreate: "market:listing-create",