aboutsummaryrefslogtreecommitdiff
path: root/src/control/deck.js
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-02-08 16:43:20 +0800
committerMistivia <i@mistivia.com>2025-02-08 16:45:54 +0800
commit5db7a8c78da09e7d5f7454ba019d39be04d8795e (patch)
tree4264c2d4a1008fc65ffb04fd93226a8b6998f698 /src/control/deck.js
parentea9350a570fcb8011bb2678ad8b60486772e411d (diff)
version 0.1
Diffstat (limited to 'src/control/deck.js')
-rw-r--r--src/control/deck.js103
1 files changed, 100 insertions, 3 deletions
diff --git a/src/control/deck.js b/src/control/deck.js
index 98c48fb..d47b21c 100644
--- a/src/control/deck.js
+++ b/src/control/deck.js
@@ -1,16 +1,112 @@
import { writable } from "svelte/store";
import { parseYdke } from '../utils';
+import { cardDb } from '../data/cardDb';
let deck = writable({main: [], extra: [], side: []});
+let deckState = {main: [], extra: [], side: []};
function setDeck(d) {
- d.main.sort();
- d.extra.sort();
- d.side.sort();
+ let sortFn = (a, b) => {return cardDb[a].cid - cardDb[b].cid;}
+ d.main.sort(sortFn);
+ d.extra.sort(sortFn);
+ d.side.sort(sortFn);
+ deckState = d;
deck.set(d);
localStorage.setItem('cachedDeck', JSON.stringify(d));
};
+const OK = 1;
+const FAIL = 0;
+
+function canAdd(d, id) {
+ let count = 0;
+ for (let c of d.main) {
+ if (c === id) count += 1;
+ }
+ for (let c of d.side) {
+ if (c === id) count += 1;
+ }
+ for (let c of d.extra) {
+ if (c === id) count += 1;
+ }
+ if (count + 1 > 3) return false;
+ return true;
+}
+
+function delCard(deck, id) {
+ for (let i = 0; i < deck.length; i++) {
+ if (deck[i] == id) {
+ deck.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+}
+
+let deckOps = {
+ "deleteCard": (from, id) => {
+ if (from === 'main') {
+ delCard(deckState.main, id);
+ setDeck(deckState);
+ } else if (from === 'side') {
+ delCard(deckState.side, id);
+ setDeck(deckState);
+ } else if (from === 'extra') {
+ delCard(deckState.extra, id);
+ setDeck(deckState);
+ }
+ },
+ "main2side": (id) => {
+ if (delCard(deckState.main, id)) {
+ deckState.side.push(id);
+ }
+ setDeck(deckState);
+ },
+ "extra2side": (id) => {
+ if (delCard(deckState.extra, id)) {
+ deckState.side.push(id);
+ }
+ setDeck(deckState);
+ },
+ "side2main": (id) => {
+ if (cardDb[id].isExtra) return;
+ if (delCard(deckState.side, id)) {
+ deckState.main.push(id);
+ }
+ setDeck(deckState);
+ },
+ "side2extra": (id) => {
+ if (!cardDb[id].isExtra) return;
+ if (delCard(deckState.side, id)) {
+ deckState.extra.push(id);
+ }
+ setDeck(deckState);
+ },
+ "add2extra": (id) => {
+ if (!cardDb[id].isExtra) return;
+ let d = deckState;
+ if (canAdd(d, id)) {
+ d.extra.push(id);
+ setDeck(d);
+ }
+ },
+ "add2main": (id) => {
+ if (cardDb[id].isExtra) return;
+ let d = deckState;
+ if (canAdd(d, id)) {
+ d.main.push(id);
+ setDeck(d);
+ }
+ },
+ "add2side": (id) => {
+ let d = deckState;
+ if (canAdd(d, id)) {
+ d.side.push(id);
+ setDeck(d);
+ }
+ }
+};
+
function initDeck() {
let url = window.location.href.split('#');
if (url.length === 2) {
@@ -34,5 +130,6 @@ initDeck();
export {
deck,
setDeck,
+ deckOps,
};