mirror of
https://github.com/Shu-Ying/noname-shuying.git
synced 2026-10-19 13:50:06 +08:00
同上
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { cardUpgradeLevel } from "../../cards/upgrades.js";
|
||||
|
||||
export function createHandOverlays(document, cardCost) {
|
||||
const entries = new Map();
|
||||
const setData = (node, key, value) => {
|
||||
if (node.dataset[key] !== value) node.dataset[key] = value;
|
||||
};
|
||||
function refresh(card) {
|
||||
if (!card.name) return;
|
||||
let entry = entries.get(card);
|
||||
if (!entry) {
|
||||
const cost = document.createElement("span");
|
||||
cost.className = "mengsan-hand-cost-shuying";
|
||||
cost.setAttribute("role", "img");
|
||||
const upgrade = document.createElement("span");
|
||||
upgrade.className = "mengsan-hand-upgrade-shuying";
|
||||
upgrade.setAttribute("role", "img");
|
||||
entry = { cost, upgrade };
|
||||
entries.set(card, entry);
|
||||
}
|
||||
const cost = String(cardCost(card));
|
||||
setData(entry.cost, "mengsanCost", cost);
|
||||
entry.cost.setAttribute("aria-label", `费用 ${cost}`);
|
||||
if (entry.cost.parentNode !== card) card.appendChild(entry.cost);
|
||||
const level = cardUpgradeLevel(card);
|
||||
if (level) {
|
||||
setData(entry.upgrade, "mengsanUpgrade", String(level));
|
||||
entry.upgrade.setAttribute("aria-label", `已强化${level}次`);
|
||||
if (entry.upgrade.parentNode !== card) card.appendChild(entry.upgrade);
|
||||
} else {
|
||||
entry.upgrade.remove();
|
||||
}
|
||||
}
|
||||
function release(card) {
|
||||
const entry = entries.get(card);
|
||||
if (!entry) return;
|
||||
entry.cost.remove();
|
||||
entry.upgrade.remove();
|
||||
entries.delete(card);
|
||||
}
|
||||
return {
|
||||
sync(cards) {
|
||||
const current = new Set(cards);
|
||||
for (const card of entries.keys()) {
|
||||
if (!current.has(card)) release(card);
|
||||
}
|
||||
for (const card of cards) refresh(card);
|
||||
},
|
||||
dispose() {
|
||||
for (const card of entries.keys()) release(card);
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user