37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
export class DeckManager {
|
|
static validate(deck, cardManager) {
|
|
const errors = [];
|
|
if (!deck.commander) {
|
|
errors.push('No commander selected');
|
|
} else {
|
|
const cmd = cardManager.getCard(deck.commander);
|
|
if (!cmd || cmd.type !== 'commander') errors.push('Invalid commander');
|
|
}
|
|
if (!deck.cards || deck.cards.length < 3) {
|
|
errors.push('Deck needs at least 3 assault cards');
|
|
}
|
|
if (deck.cards && deck.cards.length > 10) {
|
|
errors.push('Deck can have at most 10 assault cards');
|
|
}
|
|
const counts = {};
|
|
for (const id of (deck.cards || [])) {
|
|
counts[id] = (counts[id] || 0) + 1;
|
|
if (counts[id] > 3) errors.push(`Too many copies of ${id} (max 3)`);
|
|
}
|
|
return { valid: errors.length === 0, errors };
|
|
}
|
|
|
|
static createStarterDeck(cardManager) {
|
|
return {
|
|
id: 'deck_starter',
|
|
name: 'Starter Deck',
|
|
commander: 'imp_cmd_1',
|
|
cards: [
|
|
'imp_trooper_1', 'imp_trooper_1', 'imp_trooper_1',
|
|
'imp_gunner_1', 'imp_gunner_1', 'imp_gunner_1',
|
|
'imp_guardian_1', 'imp_guardian_1', 'imp_guardian_1',
|
|
]
|
|
};
|
|
}
|
|
}
|