dok/public/js/buildings/wohnhaus.js
2026-03-13 16:16:24 +00:00

186 lines
4.0 KiB
JavaScript

export async function loadWohnhaus() {
const ui = document.querySelector(".building-ui");
ui.innerHTML = `
<div id="character-ui">
<div class="equip-left">
<div class="equip-slot" data-slot="helmet" title="Helm">
<img src="/images/items/slot_helmet.png">
</div>
<div class="equip-slot" data-slot="shoulder" title="Schulter">
<img src="/images/items/slot_shoulder.png">
</div>
<div class="equip-slot" data-slot="gloves" title="Handschuhe">
<img src="/images/items/slot_gloves.png">
</div>
<div class="equip-slot" data-slot="belt" title="Gürtel">
<img src="/images/items/slot_belt.png">
</div>
<div class="equip-slot" data-slot="boots" title="Stiefel">
<img src="/images/items/slot_boots.png">
</div>
</div>
<div class="character">
<img src="/images/avatar.png">
</div>
<div class="equip-right">
<div class="equip-slot" data-slot="amulet" title="Amulett">
<img src="/images/items/slot_amulet.png">
</div>
<div class="equip-slot" data-slot="weapon" title="Waffe">
<img src="/images/items/slot_weapon.png">
</div>
<div class="equip-slot" data-slot="shield" title="Schild">
<img src="/images/items/slot_shield.png">
</div>
<div class="equip-slot" data-slot="ring" title="Ring">
<img src="/images/items/slot_ring.png">
</div>
</div>
</div>
<h3>Inventar</h3>
<div id="inventory-grid"></div>
`;
loadInventory();
loadEquipment();
}
async function loadEquipment() {
const res = await fetch("/api/equipment");
const equipment = await res.json();
equipment.forEach((item) => {
const slot = document.querySelector(
'.equip-slot[data-slot="' + item.slot + '"]',
);
if (!slot) return;
slot.innerHTML = `<img src="${item.icon}">`;
});
}
async function loadInventory() {
const res = await fetch("/api/inventory");
const items = await res.json();
const grid = document.getElementById("inventory-grid");
let html = "";
items.forEach((item) => {
const icon = item.icon || "/images/items/default.png";
html += `
<div class="inventory-slot"
data-slot="${item.equip_slot || ""}"
data-id="${item.id}"
data-level="${item.level}"
draggable="true">
<img src="${icon}">
</div>
`;
});
grid.innerHTML = html;
initDrag();
initDrop();
}
function initEquip() {
document.querySelectorAll(".inventory-slot").forEach((item) => {
const icon = item.querySelector("img").src;
item.addEventListener("click", () => {
const slotType = item.dataset.slot;
const target = document.querySelector(
'.equip-slot[data-slot="' + slotType + '"]',
);
if (!target) return;
target.innerHTML = `<img src="${icon}">`;
saveEquipment(slotType, item.dataset.id, item.dataset.level);
});
});
}
function initDrag() {
document.querySelectorAll(".inventory-slot").forEach((item) => {
item.addEventListener("dragstart", (e) => {
e.dataTransfer.setData("itemId", item.dataset.id);
e.dataTransfer.setData("itemLevel", item.dataset.level);
e.dataTransfer.setData("slot", item.dataset.slot);
});
});
}
async function saveEquipment(slot, itemId, itemLevelId) {
await fetch("/api/equip", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
slot: slot,
itemId: itemId,
itemLevelId: itemLevelId,
}),
});
}
function initDrop() {
document.querySelectorAll(".equip-slot").forEach((slot) => {
slot.addEventListener("dragover", (e) => {
e.preventDefault();
});
slot.addEventListener("drop", (e) => {
e.preventDefault();
const itemId = e.dataTransfer.getData("itemId");
const itemLevel = e.dataTransfer.getData("itemLevel");
const itemSlot = e.dataTransfer.getData("slot");
const targetSlot = slot.dataset.slot;
if (itemSlot !== targetSlot) return;
const icon = document.querySelector(
'.inventory-slot[data-id="' + itemId + '"] img',
).src;
slot.innerHTML = `<img src="${icon}">`;
saveEquipment(targetSlot, itemId, itemLevel);
});
});
}