Permet de fixer manuellement certains Citoyens à un palier précis
Build and deploy / deploy (push) Successful in 35s

TIER_OVERRIDES (id de profil → index de palier) + applyTierOverrides()
placent d'abord les Citoyens fixés à la main, puis remplissent le reste
dans l'ordre alphabétique existant. Épicure est placé en position 7.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-08-24 00:55:38 +02:00
parent 3b64e1cdb5
commit 493ae444b4
3 changed files with 43 additions and 2 deletions
+37
View File
@@ -43,3 +43,40 @@ export const MAX_FRAME_DT_MS = 250;
export const MIN_SCORE = 0;
export const MAX_SCORE = 1000000;
// Positions figées à la main pour certains Citoyens (id de profil → index
// de palier, 0 = le plus petit) — les Citoyens restants remplissent les
// paliers non réservés, dans leur ordre existant (alphabétique par
// pseudo, voir corne/page.tsx). "Position N" telle que demandée par un
// humain (compte à partir de 1) correspond à l'index N-1 ici.
export const TIER_OVERRIDES: Record<number, string> = {
6: "7f0f24dc-ede0-4190-a64d-976393073c28", // Épicure, position 7
};
export function applyTierOverrides<T extends { id: string }>(
citizens: T[],
overrides: Record<number, string>,
): T[] {
const byId = new Map(citizens.map((c) => [c.id, c]));
const usedIds = new Set<string>();
const result: (T | undefined)[] = new Array(citizens.length);
for (const [tierKey, id] of Object.entries(overrides)) {
const tier = Number(tierKey);
const citizen = byId.get(id);
if (citizen && tier >= 0 && tier < citizens.length) {
result[tier] = citizen;
usedIds.add(id);
}
}
const remaining = citizens.filter((c) => !usedIds.has(c.id));
let remainingIndex = 0;
for (let tier = 0; tier < result.length; tier++) {
if (!result[tier]) {
result[tier] = remaining[remainingIndex++];
}
}
return result as T[];
}