164 lines
5.0 KiB
JavaScript
164 lines
5.0 KiB
JavaScript
import { loadCardDeck } from "./quickmenu/carddeck.js";
|
||
import { loadEvents } from "./quickmenu/events.js";
|
||
import { loadHeroBonus } from "./quickmenu/hero-bonus.js";
|
||
import { loadSealedLeague } from "./quickmenu/sealed-league.js";
|
||
import { loadSummoner } from "./quickmenu/summoner.js";
|
||
import { loadOnlinebonus } from "./quickmenu/onlinebonus.js";
|
||
import { loadActions } from "./quickmenu/actions.js";
|
||
import { loadBazaar } from "./quickmenu/bazaar.js";
|
||
import { loadBoosterAction } from "./quickmenu/booster-action.js";
|
||
import { loadBoosterHunt } from "./quickmenu/booster-hunt.js";
|
||
|
||
/* Popup-ID → Loader Funktion */
|
||
const popupLoaders = {
|
||
"qm-popup-carddeck": loadCardDeck,
|
||
"qm-popup-events": loadEvents,
|
||
"qm-popup-heldenbonus": loadHeroBonus,
|
||
"qm-popup-sealedliga": loadSealedLeague,
|
||
"qm-popup-beschwoerer": loadSummoner,
|
||
"qm-popup-onlinebonus": loadOnlinebonus,
|
||
"qm-popup-aktionen": loadActions,
|
||
"qm-popup-basar": loadBazaar,
|
||
"qm-popup-boosteraktion": loadBoosterAction,
|
||
"qm-popup-boosterjagd": loadBoosterHunt,
|
||
};
|
||
|
||
/* ================================
|
||
Quick Menu – Toggle
|
||
================================ */
|
||
|
||
const panel = document.getElementById("quickmenu-panel");
|
||
const overlay = document.getElementById("qm-overlay");
|
||
|
||
/* ================================
|
||
Quick Menu – Popups öffnen
|
||
================================ */
|
||
|
||
document.querySelectorAll(".qm-slot").forEach((slot) => {
|
||
slot.addEventListener("click", () => {
|
||
const id = slot.dataset.popup;
|
||
if (!id) return;
|
||
|
||
const popup = document.getElementById(id);
|
||
if (!popup) return;
|
||
|
||
// Popup zurück zur Mitte setzen
|
||
popup.style.transform = "translate(-50%, -50%) scale(1)";
|
||
popup.style.left = "50%";
|
||
popup.style.top = "50%";
|
||
|
||
overlay.classList.add("active");
|
||
popup.classList.add("active");
|
||
|
||
// Zugehörigen Loader aufrufen
|
||
const loader = popupLoaders[id];
|
||
if (loader) loader();
|
||
});
|
||
});
|
||
|
||
/* ================================
|
||
Quick Menu – Popups verschiebbar
|
||
================================ */
|
||
|
||
document.querySelectorAll(".qm-popup").forEach((popup) => {
|
||
const header = popup.querySelector(".qm-popup-header");
|
||
if (!header) return;
|
||
|
||
let isDragging = false;
|
||
let startX, startY, startLeft, startTop;
|
||
|
||
header.style.cursor = "grab";
|
||
|
||
header.addEventListener("mousedown", (e) => {
|
||
if (e.target.classList.contains("qm-popup-close")) return;
|
||
|
||
isDragging = true;
|
||
header.style.cursor = "grabbing";
|
||
|
||
const rect = popup.getBoundingClientRect();
|
||
startX = e.clientX;
|
||
startY = e.clientY;
|
||
startLeft = rect.left;
|
||
startTop = rect.top;
|
||
|
||
// transform zurücksetzen auf konkrete px-Werte
|
||
popup.style.transform = "none";
|
||
popup.style.left = startLeft + "px";
|
||
popup.style.top = startTop + "px";
|
||
|
||
e.preventDefault();
|
||
});
|
||
|
||
document.addEventListener("mousemove", (e) => {
|
||
if (!isDragging) return;
|
||
popup.style.left = (startLeft + (e.clientX - startX)) + "px";
|
||
popup.style.top = (startTop + (e.clientY - startY)) + "px";
|
||
});
|
||
|
||
document.addEventListener("mouseup", () => {
|
||
if (!isDragging) return;
|
||
isDragging = false;
|
||
header.style.cursor = "grab";
|
||
});
|
||
});
|
||
|
||
/* ================================
|
||
Quick Menu – Popups schließen
|
||
================================ */
|
||
|
||
function isBoosterSpinning() {
|
||
const eventsPopup = document.getElementById("qm-popup-events");
|
||
if (!eventsPopup || !eventsPopup.classList.contains("active")) return false;
|
||
|
||
// Booster-UI oder Wood-UI aktiv und Slot dreht
|
||
const boosterUi = document.getElementById("booster-ui");
|
||
if (boosterUi && boosterUi.style.display !== "none" && boosterUi.querySelector(".booster-slot.spinning")) return true;
|
||
|
||
const woodUi = document.getElementById("wood-ui");
|
||
if (woodUi && woodUi.style.display !== "none" && woodUi.querySelector(".booster-slot.spinning")) return true;
|
||
|
||
const goldUi = document.getElementById("gold-ui");
|
||
if (goldUi && goldUi.style.display !== "none" && goldUi.querySelector(".booster-slot.spinning")) return true;
|
||
|
||
// Arena Daily: sperren während Gegnersuche läuft
|
||
const arenaUi = document.getElementById("arena-ui");
|
||
if (arenaUi && arenaUi.style.display !== "none") {
|
||
const card = arenaUi.querySelector(".arena-mode-card-daily.searching");
|
||
if (card) return true;
|
||
}
|
||
|
||
const arena2Ui = document.getElementById("arena2-ui");
|
||
if (arena2Ui && arena2Ui.style.display !== "none") {
|
||
const card = arena2Ui.querySelector(".arena-mode-card-daily.searching");
|
||
if (card) return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
document.querySelectorAll(".qm-popup-close").forEach((btn) => {
|
||
btn.addEventListener("click", closeAllPopups);
|
||
});
|
||
|
||
overlay.addEventListener("click", closeAllPopups);
|
||
|
||
function closeAllPopups() {
|
||
if (isBoosterSpinning()) return; // Slot dreht → sperren
|
||
|
||
document.querySelectorAll(".qm-popup").forEach((p) => {
|
||
p.classList.remove("active");
|
||
});
|
||
overlay.classList.remove("active");
|
||
}
|
||
|
||
document.addEventListener("keydown", (e) => {
|
||
if (e.key === "Escape") {
|
||
if (isBoosterSpinning()) {
|
||
e.stopPropagation();
|
||
e.preventDefault();
|
||
return;
|
||
}
|
||
closeAllPopups();
|
||
}
|
||
});
|