157 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const Keys = {
 | 
						|
    ArrowUp: "arrowup",
 | 
						|
    ArrowLeft: "arrowleft",
 | 
						|
    ArrowDown: "arrowdown",
 | 
						|
    ArrowRight: "arrowright",
 | 
						|
};
 | 
						|
 | 
						|
let WrongKeyCount = 0;
 | 
						|
let CurrentKey = 0;
 | 
						|
let Key = 0;
 | 
						|
let KeyPressed = false;
 | 
						|
let CanPress = false;
 | 
						|
 | 
						|
const generateRandomPattern = (length) => {
 | 
						|
    const keys = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];
 | 
						|
    const pattern = [];
 | 
						|
 | 
						|
    for (let i = 0; i < length; i++) {
 | 
						|
        const randomIndex = Math.floor(Math.random() * keys.length);
 | 
						|
        pattern.push(keys[randomIndex]);
 | 
						|
    }
 | 
						|
 | 
						|
    return pattern;
 | 
						|
};
 | 
						|
 | 
						|
const showMinigame = () => {
 | 
						|
    const container = document.querySelector(".keys-container");
 | 
						|
    if (container) {
 | 
						|
        container.style.transition = "opacity 300ms";
 | 
						|
        container.style.opacity = 1;
 | 
						|
        container.style.display = "flex";
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
const hideMinigame = () => {
 | 
						|
    const container = document.querySelector(".keys-container");
 | 
						|
    if (container) {
 | 
						|
        container.style.transition = "opacity 300ms";
 | 
						|
        container.style.opacity = 0;
 | 
						|
        setTimeout(() => {
 | 
						|
            container.style.display = "none";
 | 
						|
        }, 300);
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
const keysTimer = (ms) => {
 | 
						|
    return new Promise((resolve) => setTimeout(resolve, ms));
 | 
						|
};
 | 
						|
 | 
						|
async function startKeygame(amount) {
 | 
						|
    const pattern = generateRandomPattern(amount);
 | 
						|
    showMinigame();
 | 
						|
    await keysTimer(1000);
 | 
						|
 | 
						|
    for (let i = 0; i < pattern.length; i++) {
 | 
						|
        Key = pattern[i];
 | 
						|
        CurrentKey = i;
 | 
						|
 | 
						|
        if (!KeyPressed && CurrentKey !== 0) {
 | 
						|
            WrongKeyCount += 1;
 | 
						|
        }
 | 
						|
 | 
						|
        KeyPressed = false;
 | 
						|
 | 
						|
        let keyElement = document.querySelector(`.keys-container .key[data-key="${Keys[Key]}"]`);
 | 
						|
        if (keyElement) {
 | 
						|
            keyElement.style.backgroundColor = "orange";
 | 
						|
        }
 | 
						|
 | 
						|
        CanPress = true;
 | 
						|
 | 
						|
        (function (k) {
 | 
						|
            setTimeout(function () {
 | 
						|
                let keyElement = document.querySelector(`.keys-container .key[data-key="${Keys[k]}"]`);
 | 
						|
                if (keyElement) {
 | 
						|
                    keyElement.style.backgroundColor = "white";
 | 
						|
                }
 | 
						|
                CanPress = false;
 | 
						|
            }, 500);
 | 
						|
        })(Key);
 | 
						|
 | 
						|
        if (CurrentKey + 1 === amount) {
 | 
						|
            if (keyElement) {
 | 
						|
                keyElement.style.backgroundColor = "white";
 | 
						|
            }
 | 
						|
 | 
						|
            hideMinigame();
 | 
						|
 | 
						|
            fetch(`https://${GetParentResourceName()}/keyminigameFinish`, {
 | 
						|
                method: "POST",
 | 
						|
                headers: { "Content-Type": "application/json" },
 | 
						|
                body: JSON.stringify({ faults: WrongKeyCount }),
 | 
						|
            }).catch((err) => console.error("Error with fetch:", err));
 | 
						|
 | 
						|
            WrongKeyCount = 0;
 | 
						|
            CurrentKey = 0;
 | 
						|
            Key = 0;
 | 
						|
            KeyPressed = false;
 | 
						|
        }
 | 
						|
 | 
						|
        await keysTimer(1500);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
document.addEventListener("keydown", function (event) {
 | 
						|
    const keyName = event.key;
 | 
						|
 | 
						|
    if (keyName === "Escape") {
 | 
						|
        hideMinigame();
 | 
						|
        fetch(`https://${GetParentResourceName()}/keyminigameExit`, {
 | 
						|
            method: "POST",
 | 
						|
            headers: { "Content-Type": "application/json; charset=UTF-8" },
 | 
						|
            body: JSON.stringify({}),
 | 
						|
        }).catch((err) => console.error("Error with fetch:", err));
 | 
						|
        WrongKeyCount = 0;
 | 
						|
        CurrentKey = 0;
 | 
						|
        Key = 0;
 | 
						|
        KeyPressed = false;
 | 
						|
        CanPress = false;
 | 
						|
        TotalPresses = 10;
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    const keyDiv = document.querySelector(`.keys-container .key[data-key="${Keys[keyName]}"]`);
 | 
						|
    if (!keyDiv) return;
 | 
						|
 | 
						|
    if (keyName === Key) {
 | 
						|
        if (CanPress) {
 | 
						|
            keyDiv.style.backgroundColor = "green";
 | 
						|
            KeyPressed = true;
 | 
						|
            CanPress = false;
 | 
						|
        } else {
 | 
						|
            if (!KeyPressed) {
 | 
						|
                WrongKeyCount++;
 | 
						|
                keyDiv.style.backgroundColor = "red";
 | 
						|
                KeyPressed = true;
 | 
						|
                CanPress = false;
 | 
						|
                setTimeout(() => (keyDiv.style.backgroundColor = "white"), 300);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        if (!KeyPressed) {
 | 
						|
            WrongKeyCount++;
 | 
						|
            keyDiv.style.backgroundColor = "red";
 | 
						|
            KeyPressed = true;
 | 
						|
            CanPress = false;
 | 
						|
            setTimeout(() => (keyDiv.style.backgroundColor = "white"), 300);
 | 
						|
        }
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
window.addEventListener("message", (event) => {
 | 
						|
    let data = event.data;
 | 
						|
    if (data.action === "startKeygame") {
 | 
						|
        startKeygame(data.amount);
 | 
						|
    }
 | 
						|
});
 |