Files
Camilou.fr/HTML/TN/Crypto/script.js
T
Camilla Schoeser ec81bcd634 ajout tout
2026-05-29 21:10:04 +02:00

167 lines
5.2 KiB
JavaScript

const cards = document.querySelectorAll('.card');
const axo = document.getElementById('axo-layer');
const logScroll = document.getElementById('log-scroll');
const hud = document.getElementById('hud');
const counter = document.getElementById('counter');
const dataColumn = document.getElementById('data-column');
const desk = document.getElementById('desk');
// 1. LOGS
const logEntries = ["CONNECTING...", "HANDSHAKE OK", "INJECTING X3DH...", "ROTATION: OK", "ENCRYPTING...", "BYPASSING...", "DECRYPTING..."];
function updateLogs() {
let text = "";
for(let i=0; i<20; i++) text += " > " + logEntries[Math.floor(Math.random()*logEntries.length)] + " -- " + Math.random().toString(16).slice(2,8);
if(logScroll) logScroll.innerText = text;
}
setInterval(updateLogs, 2000);
// 2. VIBRATION
function triggerShake() {
if(desk) {
desk.classList.remove('shake-effect');
void desk.offsetWidth;
desk.classList.add('shake-effect');
}
}
// 3. HUD
function updateHUD() {
let displayStep = step;
if (step === 6) displayStep = 5;
if (step >= 7) displayStep = step - 1;
if(counter) counter.innerText = (displayStep < 10 ? "0" : "") + displayStep;
}
// 4. MISE À JOUR DU BUREAU (Logique simplifiée)
let step = 0; // Au chargement, rien n'est affiché
function updateDesk() {
let activeCardId = "";
// Si on est à l'étape 0, on ne cherche rien
if (step > 0 && step !== 6) {
// On ajuste l'ID pour que la slide après l'Axolotl (step 7)
// corresponde bien à ta 6ème ou 7ème carte selon ton HTML.
let cardIndex = (step < 6) ? step : step - 1;
activeCardId = "c" + cardIndex;
}
cards.forEach((card) => {
card.classList.remove('active', 'background', 'off-screen');
card.style.opacity = "";
card.style.visibility = "";
if (step === 0) {
card.style.opacity = "0";
card.style.visibility = "hidden";
} else if (step === 6) {
// Écran blanc Axolotl : on dégage toutes les cartes du bureau
card.classList.add('off-screen');
} else {
if (card.id === activeCardId) {
card.classList.add('active');
} else {
const cardNum = parseInt(card.id.replace('c', ''));
const activeNum = parseInt(activeCardId.replace('c', ''));
if (cardNum < activeNum) {
card.classList.add('background');
}
}
}
});
}
function next() {
// --- VERROU ÉTAPE 0 : Affiche le titre et s'arrête ---
if (step === 0) {
step = 1;
updateDesk();
updateHUD();
triggerShake();
return; // Très important : on sort de la fonction ici
}
// 1. GESTION DES SOUS-ÉTAPES (Step-content)
let container = (step === 6) ? axo : document.querySelector('.card.active');
if (container) {
const steps = container.querySelectorAll('.step-content');
// On cherche le premier qui n'a pas encore la classe active
const nextSub = Array.from(steps).find(s => !s.classList.contains('active'));
if (nextSub) {
nextSub.classList.add('active');
triggerShake();
return; // On reste sur la carte actuelle
}
}
// 2. CHANGEMENT DE CARTE
if (step >= 10) return; // Limite selon ton nombre total de slides
step++;
// Gestion de l'Axolotl (Slide blanche)
if (step === 6) {
axo.classList.add('show');
hud.classList.add('dark-mode');
} else {
axo.classList.remove('show');
hud.classList.remove('dark-mode');
}
triggerShake();
updateDesk();
updateHUD();
}
// Initialisation au chargement
window.onload = () => {
updateDesk();
updateHUD();
};
function prev() {
const activeCard = document.querySelector('.card.active');
if (activeCard && step !== 6) {
const steps = activeCard.querySelectorAll('.step-content');
const currentIdx = Array.from(steps).findIndex(s => s.classList.contains('active'));
if (steps.length > 0 && currentIdx > 0) {
// On retire la classe active de la dernière étape affichée
const visibleSteps = Array.from(steps).filter(s => s.classList.contains('active'));
visibleSteps[visibleSteps.length - 1].classList.remove('active');
triggerShake();
return;
}
}
if (step <= 0) return;
if (step === 6) {
axo.classList.remove('show');
hud.classList.remove('dark-mode');
} else if (step === 7) {
axo.classList.add('show');
hud.classList.add('dark-mode');
}
step--;
triggerShake();
updateDesk();
updateHUD();
}
// 6. LISTENERS
window.addEventListener('keydown', e => {
if (e.key === 'ArrowRight' || e.key === ' ') next();
if (e.key === 'ArrowLeft') prev();
if (e.key === 'Escape') location.reload();
});
// 7. DATA STREAM
setInterval(() => {
let output = "";
for (let i = 0; i < 50; i++) output += "[0x" + Math.random().toString(16).slice(2, 6).toUpperCase() + "] " + Math.random().toString(16).slice(2, 10) + "\n";
if(dataColumn) dataColumn.innerText = output;
}, 5000);