diff --git a/src/routes/(game)/infinite/+page.svelte b/src/routes/(game)/infinite/+page.svelte index c844466..d19b275 100644 --- a/src/routes/(game)/infinite/+page.svelte +++ b/src/routes/(game)/infinite/+page.svelte @@ -31,7 +31,8 @@ hasDevilFruit: null as boolean | null, // null = all, true = with fruit, false = without fruit status: [] as string[], hasHeight: false, - hasOrigin: false + hasOrigin: false, + arcs: [] as string[] }; let wasOriginAvailable = false; @@ -66,6 +67,10 @@ if (storedFilters) { try { characterFilters = JSON.parse(storedFilters); + // Ensure all filter properties exist + if (!characterFilters.arcs) { + characterFilters.arcs = []; + } } catch (e) { console.error('Failed to parse filters', e); } @@ -131,6 +136,16 @@ $: allCharacters = data.characters || []; + // Extract unique arcs from all characters + $: availableArcs = [ + ...new Map( + allCharacters + .filter((char: any) => char.arcId && char.arcName) + .map((char: any) => [char.arcId, { id: char.arcId, name: char.arcName }]) + ).values() + ] + .sort((a: any, b: any) => (a.name || '').localeCompare(b.name || '')); + // Filter characters based on selected filters $: characters = allCharacters.filter((char: any) => { // Gender filter @@ -166,6 +181,11 @@ return false; } + // Arc filter + if (characterFilters.arcs.length > 0 && !characterFilters.arcs.includes(char.arcId)) { + return false; + } + return true; }); $: hasWon = currentCharacter && selectedCharacters.some(char => char.id === currentCharacter.id); @@ -310,6 +330,18 @@ } } + function toggleArcFilter(arcId: string) { + if (characterFilters.arcs.includes(arcId)) { + characterFilters.arcs = characterFilters.arcs.filter(a => a !== arcId); + } else { + characterFilters.arcs = [...characterFilters.arcs, arcId]; + } + // Regenerate character with new filters + if (!hasWon) { + generateNewCharacter(); + } + } + function clearAllFilters() { characterFilters = { gender: [], @@ -317,7 +349,8 @@ hasDevilFruit: null, status: [], hasHeight: false, - hasOrigin: false + hasOrigin: false, + arcs: [] }; // Regenerate character with new filters if (!hasWon) { @@ -488,7 +521,7 @@
Arcs
+{characters.length} personnage{characters.length > 1 ? 's' : ''} disponible{characters.length > 1 ? 's' : ''}