From 12ddb8b03d1fbd5ea38e6a80e2a21981490d3c41 Mon Sep 17 00:00:00 2001 From: Animation-EdNum <256293561+Animation-EdNum@users.noreply.github.com> Date: Tue, 5 May 2026 20:17:32 +0000 Subject: [PATCH] refactor(machine_a_trier): switch adaptive difficulty logic to require consecutive perfect levels instead of perfect item drops Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- alpha/webapps/machine_a_trier.html | 35 +++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/alpha/webapps/machine_a_trier.html b/alpha/webapps/machine_a_trier.html index 3fc9e02..426ca82 100644 --- a/alpha/webapps/machine_a_trier.html +++ b/alpha/webapps/machine_a_trier.html @@ -355,6 +355,9 @@

Machine à trier

let globalStreak = 0; let globalBest = 0; + let perfectLevelsStreak = 0; + let mistakesInCurrentLevel = 0; + let selectedItem = null; // Variables pour mode Usine @@ -373,9 +376,11 @@

Machine à trier

setupEventListeners(); startNewLevel(); ScoreManager.init('machine_a_trier'); + ScoreManager.checkAdaptiveDifficulty = function() {}; // Disable per-item popups } function setPlaystyle(style) { + perfectLevelsStreak = 0; isFactoryMode = (style === 'factory'); document.getElementById('playstyle-classic').classList.toggle('active', !isFactoryMode); document.getElementById('playstyle-factory').classList.toggle('active', isFactoryMode); @@ -407,13 +412,14 @@

Machine à trier

// Listen for global difficulty change window.addEventListener('c2_change_difficulty', (e) => { const nextDiff = e.detail.difficulty; - if (nextDiff === '4') document.getElementById('diff-easy')?.click(); - else if (nextDiff === '6') document.getElementById('diff-medium')?.click(); - else if (nextDiff === '8') document.getElementById('diff-hard')?.click(); + if (nextDiff === 'easy') document.getElementById('diff-easy')?.click(); + else if (nextDiff === 'medium') document.getElementById('diff-medium')?.click(); + else if (nextDiff === 'hard') document.getElementById('diff-hard')?.click(); }); } function setMode(mode) { + perfectLevelsStreak = 0; currentMode = mode; document.getElementById('tab-color').classList.toggle('active', mode === 'color'); document.getElementById('tab-shape').classList.toggle('active', mode === 'shape'); @@ -423,6 +429,7 @@

Machine à trier

} function setDifficulty(diff) { + perfectLevelsStreak = 0; currentDifficulty = diff; document.querySelectorAll('.diff-btn').forEach(btn => btn.classList.remove('active')); document.getElementById(`diff-${diff}`).classList.add('active'); @@ -510,6 +517,7 @@

Machine à trier

} function startNewLevel() { + mistakesInCurrentLevel = 0; selectedItem = null; itemsContainer.innerHTML = ''; binsContainer.innerHTML = ''; @@ -872,6 +880,26 @@

Machine à trier

// Vérifier si niveau terminé if ((!isFactoryMode && itemsContainer.children.length === 0) || (isFactoryMode && activeBeltItems.length === 0 && factoryItemsQueue.length === 0)) { + + if (mistakesInCurrentLevel === 0) { + perfectLevelsStreak++; + if (perfectLevelsStreak >= 2) { + perfectLevelsStreak = 0; + const upgrades = { + 'easy': 'medium', + 'medium': 'hard' + }; + const nextDiff = upgrades[currentDifficulty]; + if (nextDiff && ScoreManager.isDifficultySupported(nextDiff)) { + setTimeout(() => { + ScoreManager.showAdaptivePopup(nextDiff, ScoreManager.DIFF_LABELS[nextDiff] || nextDiff, currentMode); + }, 1500); + } + } + } else { + perfectLevelsStreak = 0; + } + setTimeout(() => { launchConfetti(); playSound('win'); @@ -880,6 +908,7 @@

Machine à trier

} } else { // Incorrect + mistakesInCurrentLevel++; playSound('error'); showToast('Oups, essaie un autre bac !', 'error'); item.classList.remove('selected');