aboutsummaryrefslogtreecommitdiff
path: root/src/deck.js
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-02-21 23:04:36 +0800
committerMistivia <i@mistivia.com>2025-02-21 23:04:36 +0800
commita13b2290833f635453622ed330cc3895950ffcdb (patch)
tree2501d940e76585e4ca448f7f07529ea8ddb56663 /src/deck.js
parent2ebdfe109bbff27b35a5e9ae208dabddd266191e (diff)
add banlist
Diffstat (limited to 'src/deck.js')
-rw-r--r--src/deck.js43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/deck.js b/src/deck.js
index 285320b..7812128 100644
--- a/src/deck.js
+++ b/src/deck.js
@@ -1,11 +1,15 @@
import { writable } from "svelte/store";
import { parseYdke } from './utils';
-import { getCardDb, getAltId } from './card_db';
+import { getCardDb, getAltId, cardLimit } from './card_db';
let deck = writable({main: [], extra: [], side: []});
let deckState = {main: [], extra: [], side: []};
-function sanitizeDeck(deck) {
+let defaultFormat = 'none';
+let format = writable(defaultFormat);
+let formatState = defaultFormat;
+
+function sanitizeDeck(cardCnt, deck) {
let cardDb = getCardDb();
let altId = getAltId();
let ret = [];
@@ -13,17 +17,26 @@ function sanitizeDeck(deck) {
if (altId[id] !== undefined) {
id = altId[id];
}
- if (cardDb[id] !== undefined) {
- ret.push(id);
+ if (cardDb[id] === undefined) {
+ continue;
+ }
+ if (!cardCnt.has(id)) {
+ cardCnt.set(id, 0);
}
+ if (cardCnt.get(id) >= cardLimit(id, formatState)) {
+ continue;
+ }
+ ret.push(id);
+ cardCnt.set(id, cardCnt.get(id) + 1);
}
return ret;
}
function setDeck(d) {
- d.main = sanitizeDeck(d.main);
- d.side = sanitizeDeck(d.side);
- d.extra = sanitizeDeck(d.extra);
+ let cardCnt = new Map();
+ d.main = sanitizeDeck(cardCnt, d.main);
+ d.side = sanitizeDeck(cardCnt, d.side);
+ d.extra = sanitizeDeck(cardCnt, d.extra);
deckState = d;
deck.set(d);
localStorage.setItem('cachedDeck', JSON.stringify(d));
@@ -82,7 +95,6 @@ let deckOps = {
},
"add2main": (id, targetIdx) => {
let cardDb = getCardDb();
- console.log(targetIdx);
if (cardDb[id].isExtra) return;
let d = deckState;
if (canAdd(d, id)) {
@@ -117,6 +129,10 @@ function initDeck() {
return;
}
}
+ let cachedFormat = localStorage.getItem('format');
+ if (cachedFormat !== null) {
+ setFormat(cachedFormat);
+ }
let cachedDeck = localStorage.getItem('cachedDeck');
if (cachedDeck !== null) {
cachedDeck = JSON.parse(cachedDeck);
@@ -125,8 +141,19 @@ function initDeck() {
}
}
+function setFormat(newFormat) {
+ if (newFormat === 'none' || newFormat === 'ocg') {
+ localStorage.setItem('format', newFormat);
+ formatState = newFormat;
+ format.set(newFormat);
+ setDeck(deckState);
+ }
+}
+
export {
deck,
+ format,
+ setFormat,
setDeck,
deckOps,
initDeck,