28 lines
1.1 KiB
JavaScript
28 lines
1.1 KiB
JavaScript
const registry = new Map();
|
|
|
|
export function registerGame(definition) {
|
|
if (!definition?.slug) throw new Error('Game definition needs a slug.');
|
|
registry.set(definition.slug, {
|
|
slug: definition.slug,
|
|
name: definition.name ?? definition.slug,
|
|
category: definition.category ?? 'tabletop',
|
|
minPlayers: definition.minPlayers ?? 2,
|
|
maxPlayers: definition.maxPlayers ?? 2,
|
|
supportsMultiplayer: definition.supportsMultiplayer ?? true,
|
|
});
|
|
}
|
|
|
|
export function listGames() {
|
|
return [...registry.values()];
|
|
}
|
|
|
|
export function getGame(slug) {
|
|
return registry.get(slug) ?? null;
|
|
}
|
|
|
|
// Built-in placeholders so the menu has something to show.
|
|
registerGame({ slug: 'backgammon', name: 'Backgammon', category: 'tabletop', minPlayers: 2, maxPlayers: 2 });
|
|
registerGame({ slug: 'parchisi', name: 'Parchisi', category: 'tabletop', minPlayers: 2, maxPlayers: 4 });
|
|
registerGame({ slug: 'blackjack', name: 'Blackjack', category: 'casino', minPlayers: 1, maxPlayers: 6 });
|
|
registerGame({ slug: 'holdem', name: "Texas Hold 'Em", category: 'casino', minPlayers: 2, maxPlayers: 8 });
|